发表于: 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语句和返回结果都是一样的。
收获:(通过今天的学习,学到了什么知识)
评论