发表于: 2018-02-06 23:16:11
1 836
今天完成的事情
完成定时消息发送,将定时发送添加至老大框架,
@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
评论