43 changed files with 727 additions and 88 deletions
@ -1,11 +1,29 @@ |
|||||
package com.ccsens.tall.persist.dao; |
package com.ccsens.tall.persist.dao; |
||||
|
|
||||
|
import com.ccsens.tall.bean.po.ProRemind; |
||||
|
import com.ccsens.tall.bean.vo.TaskVo; |
||||
import com.ccsens.tall.persist.mapper.ProRemindMapper; |
import com.ccsens.tall.persist.mapper.ProRemindMapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
import org.springframework.stereotype.Repository; |
import org.springframework.stereotype.Repository; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
/** |
/** |
||||
* @author 逗 |
* @author 逗 |
||||
*/ |
*/ |
||||
@Repository |
@Repository |
||||
public interface ProRemindDao extends ProRemindMapper { |
public interface ProRemindDao extends ProRemindMapper { |
||||
|
/** |
||||
|
* 获取当前需要提醒的任务 |
||||
|
* @param now |
||||
|
* @return |
||||
|
*/ |
||||
|
List<TaskVo.RemindTask> queryRemindByNow(@Param("now") long now); |
||||
|
|
||||
|
/** |
||||
|
* 获取任务的提醒消息 |
||||
|
* @param taskId |
||||
|
* @return |
||||
|
*/ |
||||
|
List<TaskVo.RemindInfo> queryRemindByTask(@Param("taskId") Long taskId); |
||||
} |
} |
||||
|
@ -0,0 +1,113 @@ |
|||||
|
package com.ccsens.tall.scheduled; |
||||
|
|
||||
|
import cn.hutool.core.collection.CollectionUtil; |
||||
|
import com.ccsens.tall.bean.po.ProRemind; |
||||
|
import com.ccsens.tall.bean.po.SysProjectRobot; |
||||
|
import com.ccsens.tall.bean.po.SysProjectRobotExample; |
||||
|
import com.ccsens.tall.bean.vo.TaskVo; |
||||
|
import com.ccsens.tall.persist.dao.ProRemindDao; |
||||
|
import com.ccsens.tall.service.IProjectMessageService; |
||||
|
import com.ccsens.tall.service.IRobotService; |
||||
|
import com.ccsens.tall.util.TallConstant; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.scheduling.annotation.EnableScheduling; |
||||
|
import org.springframework.scheduling.annotation.Scheduled; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
import org.springframework.transaction.annotation.Propagation; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @author 逗 |
||||
|
*/ |
||||
|
@Slf4j |
||||
|
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) |
||||
|
@Component |
||||
|
@EnableScheduling |
||||
|
public class ScheduledService { |
||||
|
@Resource |
||||
|
private ProRemindDao proRemindDao; |
||||
|
@Resource |
||||
|
private IRobotService robotService; |
||||
|
@Resource |
||||
|
private IProjectMessageService projectMessageService; |
||||
|
|
||||
|
public static final String BEFORE_START = "您在项目's'中的任务's'将在s开始"; |
||||
|
public static final String START = "您在项目's'中的任务's'开始了"; |
||||
|
public static final String AFTER_START = "您在项目's'中的任务's'已经在's'开始了"; |
||||
|
public static final String BEFORE_END = "您在项目's'中的任务's'将在's'结束"; |
||||
|
public static final String END = "您在项目's'中的任务's'结束了"; |
||||
|
public static final String AFTER_END = "您在项目's'中的任务's'已经在's'结束了"; |
||||
|
public static final String USER_DEFINED = "来自项目's'中的任务's'的提醒"; |
||||
|
|
||||
|
@Scheduled(cron = "*/60 * * * * ?") |
||||
|
public void runfirst(){ |
||||
|
long now = System.currentTimeMillis(); |
||||
|
// long now = 1594611047000L;
|
||||
|
List<TaskVo.RemindTask> taskRemindList = proRemindDao.queryRemindByNow(now); |
||||
|
if(CollectionUtil.isNotEmpty(taskRemindList)){ |
||||
|
log.info(taskRemindList.toString()); |
||||
|
taskRemindList.forEach(taskRemind -> { |
||||
|
//修改提醒信息的状态(设为进行中)
|
||||
|
ProRemind proRemind = new ProRemind(); |
||||
|
proRemind.setId(taskRemind.getRemindId()); |
||||
|
proRemind.setFinishStatus((byte) 2); |
||||
|
proRemindDao.updateByPrimaryKeySelective(proRemind); |
||||
|
|
||||
|
String content = ""; |
||||
|
switch (taskRemind.getTiming()){ |
||||
|
case 1: |
||||
|
content = BEFORE_START.replaceFirst("s",taskRemind.getProjectName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskBeginTime()); |
||||
|
break; |
||||
|
case 2: |
||||
|
content = START.replaceFirst("s",taskRemind.getProjectName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskName()); |
||||
|
break; |
||||
|
case 3: |
||||
|
content = AFTER_START.replaceFirst("s",taskRemind.getProjectName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskBeginTime()); |
||||
|
break; |
||||
|
case 4: |
||||
|
content = BEFORE_END.replaceFirst("s",taskRemind.getProjectName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskEndTime()); |
||||
|
break; |
||||
|
case 5: |
||||
|
content = END.replaceFirst("s",taskRemind.getProjectName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskName()); |
||||
|
break; |
||||
|
case 6: |
||||
|
content = AFTER_END.replaceFirst("s",taskRemind.getProjectName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskEndTime()); |
||||
|
break; |
||||
|
case 7: |
||||
|
content = USER_DEFINED.replaceFirst("s",taskRemind.getProjectName()); |
||||
|
content = content.replaceFirst("s",taskRemind.getTaskName()); |
||||
|
break; |
||||
|
default: |
||||
|
break; |
||||
|
} |
||||
|
try { |
||||
|
//机器人发送
|
||||
|
robotService.sendRemindByRobot(taskRemind,content); |
||||
|
//公众号
|
||||
|
projectMessageService.sendRemindByWx(taskRemind,content); |
||||
|
|
||||
|
//修改提醒信息的状态
|
||||
|
proRemind.setFinishStatus((byte) 4); |
||||
|
proRemindDao.updateByPrimaryKeySelective(proRemind); |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,48 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="com.ccsens.tall.persist.dao.ProRemindDao"> |
||||
|
|
||||
|
<select id="queryRemindByNow" parameterType="java.util.Map" resultType="com.ccsens.tall.bean.vo.TaskVo$RemindTask"> |
||||
|
SELECT |
||||
|
s.id as subTaskId, |
||||
|
d.id as taskDetailId, |
||||
|
d.`name` as taskName, |
||||
|
r.id as remindId, |
||||
|
FROM_UNIXTIME(r.remind_absolute_time/1000,'%m月%d日%h时%i分') as absoluteTime, |
||||
|
FROM_UNIXTIME(if(s.real_begin_time = 0,s.begin_time/1000,s.real_begin_time/1000), '%m月%d日%h时%i分') as taskBeginTime, |
||||
|
FROM_UNIXTIME(if(s.real_end_time = 0,s.end_time/1000,s.real_end_time/1000), '%m月%d日%h时%i分') as taskEndTime, |
||||
|
d.executor_role as executorRole, |
||||
|
d.project_id as projectId, |
||||
|
r.remind_timing as timing, |
||||
|
sp.`name` as projectName |
||||
|
FROM |
||||
|
t_pro_remind r LEFT JOIN t_pro_task_sub_time s on r.sub_task_id = s.id |
||||
|
LEFT JOIN t_pro_task_detail d on d.id = s.task_detail_id |
||||
|
LEFT JOIN t_sys_project sp on d.project_id = sp.id |
||||
|
WHERE |
||||
|
r.rec_status = 0 |
||||
|
AND |
||||
|
d.rec_status = 0 |
||||
|
AND |
||||
|
r.finish_status in (0,3) |
||||
|
and |
||||
|
r.remind_absolute_time >= #{now} |
||||
|
and |
||||
|
r.remind_absolute_time < #{now} + 60000 |
||||
|
|
||||
|
</select> |
||||
|
|
||||
|
<select id="queryRemindByTask" parameterType="java.util.Map" resultType="com.ccsens.tall.bean.vo.TaskVo$RemindInfo"> |
||||
|
select |
||||
|
id as remindId, |
||||
|
remind_timing as remindTiming, |
||||
|
duration as `time` |
||||
|
from |
||||
|
t_pro_remind |
||||
|
where |
||||
|
sub_task_id = #{taskId} |
||||
|
and |
||||
|
rec_status = 0 |
||||
|
</select> |
||||
|
|
||||
|
</mapper> |
Loading…
Reference in new issue