发表于: 2019-11-01 20:19:19

1 1105


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)

根据自己之前学的quartz,自己写了一个定时推送,分为两部分,一是jobDetail,二是启动的类。

package com.ptteng.academy.job;

import com.ptteng.academy.dao.CourseDAO;
import com.ptteng.academy.dao.MessageMapper;
import com.ptteng.academy.dao.MessageUserMapper;
import com.ptteng.academy.dao.UserMapper;
import com.ptteng.academy.pojo.Message;
import com.ptteng.academy.pojo.MessageUser;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

public class MessageJob implements Job {

   @Autowired
   MessageMapper messageMapper;

   @Autowired
   MessageUserMapper messageUserMapper;

   @Autowired
   CourseDAO courseDAO;

   @Autowired
   UserMapper userMapper;

   private static final Logger logger = LoggerFactory.getLogger(MessageJob.class);

   @Override
   public void execute(JobExecutionContext context) throws JobExecutionException {
       JobDetail jobDetail=context.getJobDetail();
       Long id = jobDetail.getJobDataMap().getLong("id");
       SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
       String now=sdf.format(new Date());

       //推送
       Message message=messageMapper.selectByPrimaryKey(id);
       //该消息
       logger.error("该消息为:"+message);
       message.setPushStatus("已推送");

       message.setUpdateAt(new Date().getTime());

       //修改完消息的状态之后,向目标群体推送消息
       int result=messageMapper.updateByPrimaryKeySelective(message);
       logger.error("传入的消息:"+id);
       logger.error("更新结果:"+result);
       //推送到message_user
       List<Integer> list= messageMapper.selectUserIdByMessageTitle(message.getTitle());
       //这里得到对应等级的用户的id
       for (int i=0;i<list.size();i++){
           //遍历整个数组
           //增加到消息用户表
           MessageUser messageUser=new MessageUser();
           messageUser.setUserId(Long.valueOf(list.get(i)));
           messageUser.setMessageId(message.getId());
           //这里设置成未阅读,未删除
           messageUser.setIsread(0);
           messageUser.setIsdelete(0);
           messageUserMapper.insertSelective(messageUser);
       }

       System.out.printf("给消息 %s 进行一次定时推送, 当前时间是: %s%n" ,id, now);
   }
}


package com.ptteng.academy.job;

import java.util.Date;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.stereotype.Component;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;


/***
* Quartz设置项目全局的定时任务
* @Component注解的意义
* @author 李伟川
*/
@Component
public class QuartzTask {

   public static void task(Long time,Long id) throws Exception{
       //创建调度器
       Scheduler scheduler= StdSchedulerFactory.getDefaultScheduler();
       Date date = new Date(time);

       //定义一个触发器
       Trigger trigger=newTrigger().withIdentity("trigger1","group1") //定义名称和组
               .startAt(date)   //定时推送的时间
               .build();

       //定义一个jobDetail
       JobDetail messageJob=newJob(MessageJob.class) //指定干活的类MailJob
               .withIdentity("messagejob1","messagegroup")  //定义任务名称和分组
               .usingJobData("id",id) //传入需要推送的消息id
               .build();

       //调度加入这个job
       scheduler.scheduleJob(messageJob,trigger);
       //启动
       scheduler.start();
       //等待2秒,让前面的任务都执行完了之后,再关闭调度器
       Thread.sleep(2000);
       scheduler.shutdown(true);
   }



}


本地测试失败。没有开启定时任务。

修改之后测试:

不知道哪里出了问题。



学习微信开发者工具:



明天计划的事情:(一定要写非常细致的内容)
遇到的问题:(遇到什么困难,怎么解决的)

前端写后台消息的搜索发现了搜索条件应该是全部不可选

重写一个messagemapper的查找方法。

//模糊搜索
List<Message> select(String title,String pushStatus,Integer type,Long timeStart,Long timeEnd);
<select id="select"  resultMap="BaseResultMap">
   select
<include refid="Base_Column_List" />
   from message
<where>
       <if test="title != null">
           title like CONCAT('%',#{title},'%')
</if>
       <if test="pushStatus != null ">
           AND push_status=#{pushStatus}
</if>
       <if test="type != null">
           AND type=#{type}
</if>
       <if test="timeStart != null">
           AND push_time <![CDATA[ >= ]]> #{timeStart}
</if>
       <if test="timeEnd != null">
           AND push_time <![CDATA[ <= ]]> #{timeEnd}
</if>
   </where>
   order by push_time desc

</select>

问题二:

前台消息接口不可用。

看了一下,是因为前台登录的拦截器,判断没有登录,所以不可用。找范浩零没有找到。

解决问题方法,使用微信开发者工具进行登录,直接在header里面加个academy-token就行了。

问题三:使用postman反复调用一个接口的时候会出现无法查询出数据。找不到问题,service里面的sql语句和返回结果都是一样的。





收获:(通过今天的学习,学到了什么知识)


返回列表 返回列表
评论

    分享到