发表于: 2018-02-06 23:16:11

1 833


今天完成的事情

完成定时消息发送,将定时发送添加至老大框架,

@RequestMapping(value = "/a/u/admin/news", method = RequestMethod.POST)
public String addNews(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestBody News news) throws Exception {

/* 入参校验*/
     if (null == news.getTitle()) {
model.addAttribute("code", -1000);
        return "/common/fail";
     }

if (null == news.getGradeId()) {
model.addAttribute("code", -1000);
        return "/common/fail";
     }
if (null == news.getType()) {
model.addAttribute("code", -1000);
        return "/common/fail";
     }
if (null == news.getSendTime()) {
model.addAttribute("code", -1000);
        return "/common/fail";
     }

if (null == news.getThirdPart()) {
model.addAttribute("code", -1000);
        return "/common/fail";
     }
if (null == news.getText()) {
model.addAttribute("code", -1000);
        return "/common/fail";
     }

//    Long userId = cookieUtil.getID(request);
     Long userId = 6666L;
     Long sendNewsId = null;
     try {
List<UserNews> userNewsList = new ArrayList<>();
//       1定时发送,2及时发送
        if (news.getType() == 2) {
//       0代表未发送
           news.setStatus(1);
           news.setSendTime(System.currentTimeMillis());
           news.setUpdateBy(userId);
           news.setCreateAt(userId);
           news.setCreateBy(System.currentTimeMillis());
           sendNewsId = newsService.insert(news);
//            获取年级下的用户id
           Map<String, Object> param = DynamicUtil.getUserIdsByGradeId(news.getGradeId());
           List<Long> userIds = userNewsService.getIdsByDynamicCondition(User.class, param, 0, Integer.MAX_VALUE);
           log.info(userIds);

           for (int i = 0; i < userIds.size(); i++) {
UserNews userNews = new UserNews();
              userNews.setUserId(userIds.get(i));
              userNews.setNewsId(sendNewsId);
              userNews.setCreateBy(userId);
              userNews.setUpdateBy(userId);
              userNewsList.add(userNews);
           }
userNewsService.insertList(userNewsList);
        } else {
//       0代表未发送
           news.setStatus(0);
           news.setSendTime(news.getSendTime());
           news.setUpdateBy(userId);
           news.setCreateAt(System.currentTimeMillis());
           news.setCreateBy(userId);
           news.setCreateAt(System.currentTimeMillis());
           sendNewsId = newsService.insert(news);
//            获取年级下的用户id
           Map<String, Object> param = DynamicUtil.getUserIdsByGradeId(news.getGradeId());
           List<Long> userIds = userNewsService.getIdsByDynamicCondition(User.class, param, 0, Integer.MAX_VALUE);

           for (int i = 0; i < userIds.size(); i++) {
UserNews userNews = new UserNews();
              userNews.setUserId(userIds.get(i));
              userNews.setNewsId(sendNewsId);
              userNews.setCreateBy(userId);
              userNews.setUpdateBy(userId);
              userNewsList.add(userNews);
              userNews.setCreateAt(1L);
              userNews.setUpdateAt(1L);
           }
ScheduleJob scheduleJob = new ScheduleJob();
           String cro = TimeCycle.TimeStamp2Date(String.valueOf(news.getSendTime()));
           log.info("news.getSendTime() : " + news.getSendTime());


           log.info("cro : " + cro);
           scheduleJob.setCronExpression(cro);
           scheduleJob.setDescription(JsonUtil.toJsonStr(userNewsList));
           scheduleJob.setMethodName("insertList");
           scheduleJob.setBeanClass("com.ptteng.sca.playlearn.ojbk.user.UserNewsSCAClient");
           scheduleJob.setJobName(String.valueOf(System.currentTimeMillis()));
           scheduleJob.setJobGroup(String.valueOf(System.currentTimeMillis()));
           scheduleJob.setJobStatus(1);
           scheduleJob.setIsConcurrent(String.valueOf(0));
           scheduleJob.setCreateBy(userId);
           scheduleJob.setUpdateBy(userId);
           scheduleJob.setUpdateAt(System.currentTimeMillis());
           scheduleJob.setCreateAt(System.currentTimeMillis());
           CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression());
           scheduleJobService.insert(scheduleJob);
           ScheduleJobUtil scheduleJobUtil = new ScheduleJobUtil();
           scheduleJobUtil.addJob(scheduleJob);

//
////            添加第二个任务.修改消息表发送状态
//          //       0代表未发送
//          News news1 = newsService.getObjectById(sendNewsId);
//          news1.setStatus(1);
//          news1.setCreateAt(userId);
//          news1.setCreateBy(System.currentTimeMillis());
//          ScheduleJob scheduleJob1= new ScheduleJob();
//          String cro1 = TimeCycle.TimeStamp2Date(String.valueOf(news.getSendTime()));
//          scheduleJob.setCronExpression(cro1);
//          scheduleJob.setDescription(JsonUtil.toJsonStr(news1));
//          scheduleJob.setMethodName("update");
//          scheduleJob.setBeanClass("com.ptteng.playlearn.ojbk.pub.service.NewsService");
//          scheduleJob.setJobName(String.valueOf(System.currentTimeMillis()));
//          scheduleJob.setJobGroup(String.valueOf(System.currentTimeMillis()));
//          scheduleJob.setJobStatus(1);
//          scheduleJob.setUpdateAt(System.currentTimeMillis());
//          scheduleJob.setCreateAt(System.currentTimeMillis());
//          CronScheduleBuilder scheduleBuilder1 = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression());
//          scheduleJobService.insert(scheduleJob1);
        }
model.addAttribute("code", 0);
        model.addAttribute("newsId", sendNewsId);

     } catch (Throwable t) {
t.printStackTrace();
        log.error(t.getMessage());
        log.error("add news error ");
        model.addAttribute("code", -3111);
        return "/common/fail";
     }
return "common/success";


明天计划的事情:

将发送邮件和修改状态添加至定时任务里面.

准备小课堂


遇到的困难:

说一下遇到的几个问题.及以后写代码时需要注意的地方

第一个问题:  普通类调用spring里面bean的话自身也需要加入spring管理

如果想用@autowired,那么这个类本身也应该是在spring的管理下 的,即你的Util也要标注为一个component(或Service),这样spring才知道要注入依赖; 
如果不标注为@Component的话,此时不能通过@autowired来注入依赖,只能通过ApplicationContext来取得标注为Service的类.

第二个问题:@service 和@Compent的区别...目前区分两者的使用场景还不是特别明确,.按照今天出现问题来讲,调用service的类需要加上@Controlle或@Component注解,,不是controller层要加上@component注解

@Service用于标注业务层组件

@Controller用于标注控制层组件(如struts中的action)

@Repository用于标注数据访问组件,即DAO组件

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

第三个问题:如果在rmi里面反射service方法时反射client里面的接口. 因为service接口无法实例化.会导致方法为空


第四个问题: test测试类无法加载多个xml文件.


第五个问题:通过反射调用client实现service里面的方法时,无法加载client里面构造的serviceBean.最后通过在一个反射里面添加第二个反射任务(使用applicationContext的getBean方法加载xml文件里面的bean获取).


第六个问题: 反射中getdeclaredmethod与 getmethod区别

public Method[] getMethods()返回某个类的所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法
public Method[] getDeclaredMethods()对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法


任务进度:接口编写

任务开始时间:2017-12-12

预计demo时间:2017-02-09

是否有延期风险:暂无

禅道地址:http://task.ptteng.com/zentao/task-view-17095.html



返回列表 返回列表
评论

    分享到