Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
promotion-service
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
promotion
promotion-service
Commits
b0e4497c
提交
b0e4497c
authored
11月 15, 2025
作者:
吕本才
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 新增测试的随机任务提醒功能及优化任务状态处理逻辑
上级
8a454ef7
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
57 行增加
和
28 行删除
+57
-28
TemporaryActivityTaskClockDO.java
.../activity/mapper/entity/TemporaryActivityTaskClockDO.java
+5
-2
ActivityStautsHandler.java
...angxiaolu/promotion/xxljobtask/ActivityStautsHandler.java
+52
-26
没有找到文件。
src/main/java/com/wangxiaolu/promotion/domain/activity/mapper/entity/TemporaryActivityTaskClockDO.java
浏览文件 @
b0e4497c
...
...
@@ -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
;
}
src/main/java/com/wangxiaolu/promotion/xxljobtask/ActivityStautsHandler.java
浏览文件 @
b0e4497c
...
...
@@ -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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论