提交 b0e4497c authored 作者: 吕本才's avatar 吕本才

feat: 新增测试的随机任务提醒功能及优化任务状态处理逻辑

上级 8a454ef7
......@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
......@@ -104,10 +103,14 @@ public class TemporaryActivityTaskClockDO implements Serializable {
*/
private Integer subscribeStatus;
// 已发送订阅消息
/**
* 已发送websocket消息
* 0:未发送;1:已发送
*/
private Integer isSendSubscribe;
/**
* 订阅消息发送时间
* 微信模板消息发送时间
*/
private Date subscribeTime;
}
......@@ -3,15 +3,14 @@ package com.wangxiaolu.promotion.xxljobtask;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wangxiaolu.promotion.common.enums.FlagType;
import com.wangxiaolu.promotion.domain.activity.mapper.entity.TemporaryActivityTaskClockDO;
import com.wangxiaolu.promotion.enums.activity.ActivityClockTaskStatus;
import com.wangxiaolu.promotion.enums.activity.ActivityPhotoType;
import com.wangxiaolu.promotion.enums.activity.TemActApproveStatus;
import com.wangxiaolu.promotion.enums.activity.TemporaryActivityTaskClockMessageType;
import com.wangxiaolu.promotion.pojo.user.dto.WxTemporaryInfoDto;
import com.wangxiaolu.promotion.service.activity.manage.ActivityTypeQueryService;
import com.wangxiaolu.promotion.service.activity.manage.EmployeeCoreTemporaryInfoService;
import com.wangxiaolu.promotion.service.activity.temporary.TemporaryActivityTaskClockService;
import com.wangxiaolu.promotion.service.activity.temporary.impl.SubscribeMessageService;
......@@ -19,13 +18,9 @@ import com.wangxiaolu.promotion.websocket.TemporaryActivityTaskClockSocketHandle
import com.wangxiaolu.promotion.websocket.pojo.MessageBean;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
......@@ -51,17 +46,28 @@ public class ActivityStautsHandler {
private TemporaryActivityTaskClockSocketHandler taskClockSocketHandler;
@Autowired
private EmployeeCoreTemporaryInfoService temporaryInfoService;
@XxlJob("testSubscribeMessage")
public void TestSubscribeMessage() {
List<TemporaryActivityTaskClockDO> list = taskClockService.list(new LambdaQueryWrapper<TemporaryActivityTaskClockDO>()
.eq(TemporaryActivityTaskClockDO::getTaskType, ActivityPhotoType.RANDOM_TASK.getType())
.eq(TemporaryActivityTaskClockDO::getIsDelete, FlagType.NO.getType())
.le(TemporaryActivityTaskClockDO::getCreateDate, new Date())
);
for (TemporaryActivityTaskClockDO taskClockDO : list) {
sendWebsocketMessage(taskClockDO);
}
}
@XxlJob("sendSubscribeMessage")
public void sendSubscribeMessage() {
DateTime undoDateTime = DateUtil.offsetMinute(new Date(), -15);
// 查询 超过15分钟的,但是状态还是1的 状态改成未完成
// 查询没有做随机任务的, 超过15分钟的,但是状态还是1进行中的 状态改成未完成,表示未拍照做任务
List<TemporaryActivityTaskClockDO> undoList = taskClockService.list(new LambdaQueryWrapper<TemporaryActivityTaskClockDO>()
.eq(TemporaryActivityTaskClockDO::getTaskStatus, ActivityClockTaskStatus.STARTING.getType())
.eq(TemporaryActivityTaskClockDO::getTaskType, ActivityPhotoType.RANDOM_TASK.getType())
.eq(TemporaryActivityTaskClockDO::getIsDelete, FlagType.NO.getType())
.eq(TemporaryActivityTaskClockDO::getIsSendSubscribe, FlagType.NO.getType())
// .eq(TemporaryActivityTaskClockDO::getIsSendSubscribe, FlagType.NO.getType())
// 小于等于
.le(TemporaryActivityTaskClockDO::getRequiredlockTime, undoDateTime));
for (TemporaryActivityTaskClockDO taskClockDO : undoList){
......@@ -70,36 +76,59 @@ public class ActivityStautsHandler {
taskClockService.updateById(taskClockDO);
}
DateTime latestDateTime = DateUtil.offsetMinute(new Date(), 15);
// 待开始的 ->进行中
List<TemporaryActivityTaskClockDO> list = taskClockService.list(new LambdaQueryWrapper<TemporaryActivityTaskClockDO>()
.eq(TemporaryActivityTaskClockDO::getTaskStatus, ActivityClockTaskStatus.TO_BE_START.getType())
.eq(TemporaryActivityTaskClockDO::getTaskType, ActivityPhotoType.RANDOM_TASK.getType())
.eq(TemporaryActivityTaskClockDO::getIsDelete, FlagType.NO.getType())
.le(TemporaryActivityTaskClockDO::getRequiredlockTime, new Date())
.ge(TemporaryActivityTaskClockDO::getRequiredlockTime, undoDateTime)
);
List<TemporaryActivityTaskClockDO> startingList = taskClockService.list(new LambdaQueryWrapper<TemporaryActivityTaskClockDO>()
.eq(TemporaryActivityTaskClockDO::getTaskStatus, ActivityClockTaskStatus.STARTING.getType())
.eq(TemporaryActivityTaskClockDO::getIsSendSubscribe, FlagType.NO.getType())
.le(TemporaryActivityTaskClockDO::getRequiredlockTime, latestDateTime)
// .ge(TemporaryActivityTaskClockDO::getRequiredlockTime, new Date())
.eq(TemporaryActivityTaskClockDO::getTaskType, ActivityPhotoType.RANDOM_TASK.getType())
.eq(TemporaryActivityTaskClockDO::getIsDelete, FlagType.NO.getType())
.le(TemporaryActivityTaskClockDO::getRequiredlockTime, new Date())
.ge(TemporaryActivityTaskClockDO::getRequiredlockTime, undoDateTime)
);
list.addAll(startingList);
for (TemporaryActivityTaskClockDO taskClockDO : list) {
// 发送websocket 通知用户
MessageBean msgBean = new MessageBean();
msgBean.setMsgType(TemporaryActivityTaskClockMessageType.RANDOM_TASK_START.getType());
msgBean.setData(taskClockDO);
Integer successFlag = taskClockSocketHandler.sendToUser(taskClockDO.getTemporaryId().toString(), msgBean);
if(successFlag == 1){
log.info("完成发送websocket信息,用户id:{}", taskClockDO.getTemporaryId());
taskClockDO.setIsSendSubscribe(FlagType.YES.getType());
}
DateTime requiredlockTime = DateUtil.offsetMinute(taskClockDO.getRequiredlockTime(), 15);
sendWebsocketMessage(taskClockDO);
sendWxMessage(taskClockDO);
// 修改状态 待开始 -> 进行中
taskClockDO.setTaskStatus(ActivityClockTaskStatus.STARTING.getType());
taskClockService.updateById(taskClockDO);
}
}
private void sendWebsocketMessage(TemporaryActivityTaskClockDO taskClockDO) {
// 发送websocket 通知用户
MessageBean msgBean = new MessageBean();
msgBean.setMsgType(TemporaryActivityTaskClockMessageType.RANDOM_TASK_START.getType());
msgBean.setData(taskClockDO);
Integer successFlag = taskClockSocketHandler.sendToUser(taskClockDO.getTemporaryId().toString(), msgBean);
if(successFlag == 1){
log.info("完成发送websocket信息,用户id:{}", taskClockDO.getTemporaryId());
taskClockDO.setIsSendSubscribe(FlagType.YES.getType());
}
}
/**
* 发送微信模板消息
* @param taskClockDO
*/
private void sendWxMessage(TemporaryActivityTaskClockDO taskClockDO) {
if(ObjectUtil.isNotEmpty(taskClockDO.getSubscribeTime())){
// 2. 构建模板数据(根据小程序订阅模板的字段定义)
Map<String, String> data = new HashMap<>();
// 模板中的字段1发布人
data.put("thing2", "小卤促销平台");
// 模板中的字段2 截止时间
DateTime requiredlockTime = DateUtil.offsetMinute(taskClockDO.getRequiredlockTime(), 15);
data.put("time3", DateUtil.format(requiredlockTime,"yyyy-MM-dd HH:mm"));
// 模板中的字段3 任务名称
data.put("thing1", "请拍摄清晰的工作场景照片");
......@@ -124,12 +153,9 @@ public class ActivityStautsHandler {
if (success) {
taskClockDO.setSubscribeTime(new Date());
taskClockDO.setSubscribeStatus(FlagType.YES.getType());
}
// 修改状态 待开始 -> 进行中
taskClockDO.setTaskStatus(ActivityClockTaskStatus.STARTING.getType());
taskClockService.updateById(taskClockDO);
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论