43 changed files with 727 additions and 88 deletions
@ -1,11 +1,29 @@ |
|||
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 org.apache.ibatis.annotations.Param; |
|||
import org.springframework.stereotype.Repository; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author 逗 |
|||
*/ |
|||
@Repository |
|||
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