diff --git a/web-adapter/pom.xml b/web-adapter/pom.xml
index 9f91c65..0a3c733 100644
--- a/web-adapter/pom.xml
+++ b/web-adapter/pom.xml
@@ -26,5 +26,9 @@
com.zcloud.key.project
web-client
+
+ com.jjb.saas
+ jjb-saas-framework-job
+
diff --git a/web-adapter/src/main/java/com/zcloud/key/project/job/KeyProjectStatusJob.java b/web-adapter/src/main/java/com/zcloud/key/project/job/KeyProjectStatusJob.java
new file mode 100644
index 0000000..6988ac9
--- /dev/null
+++ b/web-adapter/src/main/java/com/zcloud/key/project/job/KeyProjectStatusJob.java
@@ -0,0 +1,29 @@
+package com.zcloud.key.project.job;
+
+import com.jjb.saas.framework.job.Job;
+import com.jjb.saas.framework.job.annotation.JobRegister;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.zcloud.key.project.api.project.KeyProjectServiceI;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+@RequiredArgsConstructor
+@Component
+@Slf4j
+public class KeyProjectStatusJob implements Job {
+
+ private final KeyProjectServiceI projectTaskServiceI;
+
+
+ @Override
+ @JobRegister(cron = "0 1 0 * * ?", jobDesc = "重点作业过期消息提醒",triggerStatus = 1)
+ @XxlJob("com.zcloud.key.project.job.KeyProjectStatusJob")
+ public ReturnT execute(String param) {
+
+ projectTaskServiceI.updatExecuteStatusJob();
+
+ return null;
+ }
+}
diff --git a/web-app/src/main/java/com/zcloud/key/project/command/convertor/project/KeyProjectCoConvertor.java b/web-app/src/main/java/com/zcloud/key/project/command/convertor/project/KeyProjectCoConvertor.java
index 917f181..8219664 100644
--- a/web-app/src/main/java/com/zcloud/key/project/command/convertor/project/KeyProjectCoConvertor.java
+++ b/web-app/src/main/java/com/zcloud/key/project/command/convertor/project/KeyProjectCoConvertor.java
@@ -54,13 +54,7 @@ public interface KeyProjectCoConvertor {
@Named("stringToList")
default List stringToList(String str) {
- if (StringUtils.isEmpty(str)) {
- return Collections.emptyList();
- }
- return Arrays.stream(str.split(","))
- .map(String::trim)
- .filter(s -> !s.isEmpty())
- .collect(Collectors.toList());
+ return null;
}
List converXgfCorpDOsToCOs(List xgfCorpDOList);
diff --git a/web-app/src/main/java/com/zcloud/key/project/command/project/KeyProjectAddExe.java b/web-app/src/main/java/com/zcloud/key/project/command/project/KeyProjectAddExe.java
index 04fbf51..65f1e51 100644
--- a/web-app/src/main/java/com/zcloud/key/project/command/project/KeyProjectAddExe.java
+++ b/web-app/src/main/java/com/zcloud/key/project/command/project/KeyProjectAddExe.java
@@ -15,7 +15,9 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
@@ -30,7 +32,7 @@ public class KeyProjectAddExe {
private final KeyProjectGateway keyProjectGateway;
private final KeyProjectCameraRepository keyProjectCameraRepository;
private final KeyProjectCameraCoConvertor keyProjectCameraCoConvertor;
-
+ private final MessageNoticeExe messageNoticeExe;
@Transactional(rollbackFor = Exception.class)
public KeyProjectCO execute(KeyProjectAddCmd cmd) {
@@ -57,6 +59,13 @@ public class KeyProjectAddExe {
}
KeyProjectCO keyProjectCO = new KeyProjectCO();
BeanUtils.copyProperties(keyProjectE, keyProjectCO);
+
+ //发送消息及待办处理
+ Map sendParams = new HashMap<>();
+ sendParams.put("keyProject", cmd.getProjectName());
+ messageNoticeExe.messageNotice(cmd.getXgfMasterUserId(), "MS000109", sendParams);
+ //待办
+ messageNoticeExe.sendMessageAddEvent(cmd.getXgfMasterUserId(), "您有一条【重点作业】待处理","未开工", keyProjectE.getId());
return keyProjectCO;
}
}
diff --git a/web-app/src/main/java/com/zcloud/key/project/command/project/KeyProjectUpdateExe.java b/web-app/src/main/java/com/zcloud/key/project/command/project/KeyProjectUpdateExe.java
index 9b27783..47eba04 100644
--- a/web-app/src/main/java/com/zcloud/key/project/command/project/KeyProjectUpdateExe.java
+++ b/web-app/src/main/java/com/zcloud/key/project/command/project/KeyProjectUpdateExe.java
@@ -1,5 +1,6 @@
package com.zcloud.key.project.command.project;
+import cn.hutool.core.collection.CollUtil;
import com.alibaba.cola.exception.BizException;
import com.zcloud.gbscommon.utils.Tools;
import com.zcloud.key.project.command.convertor.project.KeyProjectCameraCoConvertor;
@@ -20,7 +21,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
@@ -36,6 +39,7 @@ public class KeyProjectUpdateExe {
private final KeyProjectRepository keyProjectRepository;
private final KeyProjectCameraCoConvertor keyProjectCameraCoConvertor;
private final KeyProjectCameraRepository keyProjectCameraRepository;
+ private final MessageNoticeExe messageNoticeExe;
@Transactional(rollbackFor = Exception.class)
public void execute(KeyProjectUpdateCmd keyProjectUpdateCmd) {
@@ -65,6 +69,19 @@ public class KeyProjectUpdateExe {
});
keyProjectCameraRepository.saveBatch(keyProjectCameraDOList);
}
+
+
+
+ //如果是"未开工,发送消息"
+ if(KeyProjectApplyStatusEnum.NOT_STARTED.getCode().equals(keyProjectUpdateCmd.getApplyStatus())){
+ //发送消息及待办处理
+ Map sendParams = new HashMap<>();
+ sendParams.put("keyProject", keyProjectUpdateCmd.getProjectName());
+ messageNoticeExe.messageNotice(keyProjectUpdateCmd.getXgfMasterUserId(), "MS000109", sendParams);
+ //待办
+ messageNoticeExe.sendMessageAddEvent(keyProjectUpdateCmd.getXgfMasterUserId(), "您有一条【重点作业】待处理","未开工", keyProjectE.getId());
+ }
+
}
public void editStatus(KeyProjectUpdateStatusCmd keyProjectUpdateStatusCmd) {
@@ -76,15 +93,33 @@ public class KeyProjectUpdateExe {
BeanUtils.copyProperties(keyProjectUpdateStatusCmd, keyProjectE);
if(KeyProjectApplyStatusEnum.START_APPLY.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
keyProjectE.setApplyDateTime(LocalDateTime.now());
+ //发送开工申请号消息
+ //发送消息及待办处理
+ Map sendParams = new HashMap<>();
+ sendParams.put("keyProject", byId.getProjectName());
+ messageNoticeExe.messageNotice(byId.getXgfMasterUserId(), "MS000110", sendParams);
+ //待办
+ messageNoticeExe.sendMessageCompleteEvent(byId.getId());
+ messageNoticeExe.sendMessageAddEvent(byId.getJurisdictionUserId(), "您有一条【重点作业】待处理","开工申请中", byId.getId());
+
}
if(KeyProjectApplyStatusEnum.IN_PROGRESS.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
keyProjectE.setApplyConfirmDateTime(LocalDateTime.now());
}
if(KeyProjectApplyStatusEnum.FINISH_APPLY.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
keyProjectE.setCompletedDateTime(LocalDateTime.now());
+ //完工申请发小消息
+ Map sendParams = new HashMap<>();
+ sendParams.put("keyProject", byId.getProjectName());
+ messageNoticeExe.messageNotice(byId.getXgfMasterUserId(), "MS000112", sendParams);
+ //待办
+ messageNoticeExe.sendMessageCompleteEvent(byId.getId());
+ messageNoticeExe.sendMessageAddEvent(byId.getJurisdictionUserId(), "您有一条【重点作业】待处理","完工申请中", byId.getId());
+
}
if(KeyProjectApplyStatusEnum.FINISHED.getCode().equals(keyProjectUpdateStatusCmd.getApplyStatus())){
keyProjectE.setCompletedConfirmDateTime(LocalDateTime.now());
+ messageNoticeExe.sendMessageCompleteEvent(byId.getId());
}
boolean res = keyProjectGateway.update(keyProjectE);
if (!res) {
@@ -102,5 +137,19 @@ public class KeyProjectUpdateExe {
}
}
+
+ public void updatExecuteStatusJob() {
+ //查找昨日过期的数据,进行消息提醒
+ List list = keyProjectRepository.getLastStatus();
+ if(CollUtil.isEmpty( list)){
+ return;
+ }
+ list.forEach(keyProjectDO -> {
+ Map sendParams = new HashMap<>();
+ sendParams.put("keyProject", keyProjectDO.getProjectName());
+ messageNoticeExe.messageNotice(keyProjectDO.getXgfMasterUserId(), "MS000111", sendParams);
+ });
+
+ }
}
diff --git a/web-app/src/main/java/com/zcloud/key/project/command/project/MessageNoticeExe.java b/web-app/src/main/java/com/zcloud/key/project/command/project/MessageNoticeExe.java
new file mode 100644
index 0000000..7fa68a1
--- /dev/null
+++ b/web-app/src/main/java/com/zcloud/key/project/command/project/MessageNoticeExe.java
@@ -0,0 +1,104 @@
+package com.zcloud.key.project.command.project;
+
+import cn.hutool.json.JSONUtil;
+import com.alibaba.cola.dto.SingleResponse;
+import com.alibaba.cola.exception.BizException;
+import com.alibaba.fastjson.JSONObject;
+import com.jjb.saas.message.client.message.facede.MessageFacade;
+import com.jjb.saas.message.client.message.request.MessageSendCmd;
+import com.jjb.saas.message.client.message.request.MessageTargetCmd;
+import com.zcloud.gbscommon.todolistmq.TodoListEventPusherUtil;
+import com.zcloud.gbscommon.todolistmq.event.TodoListAddEvent;
+import com.zcloud.gbscommon.todolistmq.event.TodoListCompleteEvent;
+import com.zcloud.gbscommon.utils.Tools;
+import com.zcloud.gbscommon.utils.UuidUtil;
+import com.zcloud.key.project.command.convertor.project.KeyProjectCameraCoConvertor;
+import com.zcloud.key.project.domain.gateway.project.KeyProjectGateway;
+import com.zcloud.key.project.domain.model.project.KeyProjectE;
+import com.zcloud.key.project.dto.clientobject.project.KeyProjectCO;
+import com.zcloud.key.project.dto.project.KeyProjectAddCmd;
+import com.zcloud.key.project.dto.project.KeyProjectCameraAddCmd;
+import com.zcloud.key.project.persistence.dataobject.project.KeyProjectCameraDO;
+import com.zcloud.key.project.persistence.repository.CorpInfoRepository;
+import com.zcloud.key.project.persistence.repository.project.KeyProjectCameraRepository;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * web-app
+ *
+ * @Author zhaokai
+ * @Date 2026-03-16 10:00:38
+ */
+@Component
+@AllArgsConstructor
+@Slf4j
+public class MessageNoticeExe {
+ private final TodoListEventPusherUtil todoListEventPusherUtil;
+ @DubboReference
+ private MessageFacade messageFacade;
+
+ public void messageNotice(Long userId, String sourceCode,Map sendParams) {
+ //消息通知
+ try{
+
+ MessageSendCmd messageSendCmd = new MessageSendCmd();
+ messageSendCmd.setBusinessId(Tools.get32UUID());
+ MessageTargetCmd messageTargetCmd = new MessageTargetCmd();
+ messageTargetCmd.setUserId(userId);
+ messageSendCmd.setTargetCmd(messageTargetCmd);
+ messageSendCmd.setSourceCode(sourceCode);
+ messageSendCmd.setNeedTokenEnum(false);
+ messageSendCmd.setParams(sendParams);
+
+ log.info("{},消息提醒发送消息参数:messageSendCmd: {}",sourceCode, JSONUtil.toJsonStr(messageSendCmd));
+ SingleResponse d = messageFacade.send(messageSendCmd);
+ log.info("{},消息提醒发送消息结果:d: {}", sourceCode,JSONUtil.toJsonStr(d));
+ }catch (Exception e) {
+ log.error("{},消息提醒发送消息异常:", sourceCode,e);
+ }
+ }
+ public void sendMessageAddEvent(Long userId, String title,String content, Long foreignKey) {
+ //消息通知
+ try{
+ // 发送待办
+ TodoListAddEvent event = new TodoListAddEvent();
+ event.setTitle(title);
+ event.setContent(content);
+ event.setForeignKey(foreignKey); // 业务表ID -申请
+ event.setForeignSubsidiaryKey(foreignKey); // 业务附表ID 没有附表时为foreignKey的值
+ event.setReceiveUser(userId);// user表ID
+ event.setPcFlag(1); // 是否PC端待办 1是 0否
+ event.setAppFlag(1); // 是否APP端待办 1是 0否
+ event.setOtherParams(new JSONObject());
+ todoListEventPusherUtil.sendMessageAddEvent( event);
+ }catch (Exception e) {
+ log.error("消息待办,{},发送消息异常:", title,e);
+ }
+ }
+ @Async("archivesAsyncExecutor")
+ public void sendMessageCompleteEvent(Long foreignKey) {
+ //消息通知
+ try{
+ // 发送待办
+ TodoListCompleteEvent event = new TodoListCompleteEvent();
+ event.setForeignSubsidiaryKey(foreignKey);// 业务附表ID 没有附表时为foreignKey的值
+ log.info("完成待办,请求:{}",foreignKey);
+ boolean b = todoListEventPusherUtil.sendMessageCompleteEvent(event);
+ log.info("完成待办,结果:{}",b);
+ }catch (Exception e) {
+ log.error("完成待办失败",e);
+
+ }
+ }
+}
+
diff --git a/web-app/src/main/java/com/zcloud/key/project/service/project/KeyProjectServiceImpl.java b/web-app/src/main/java/com/zcloud/key/project/service/project/KeyProjectServiceImpl.java
index 3823d78..859c13f 100644
--- a/web-app/src/main/java/com/zcloud/key/project/service/project/KeyProjectServiceImpl.java
+++ b/web-app/src/main/java/com/zcloud/key/project/service/project/KeyProjectServiceImpl.java
@@ -98,5 +98,10 @@ public class KeyProjectServiceImpl implements KeyProjectServiceI {
return keyProjectQueryExe.getXgfCorp(qry);
}
+
+ @Override
+ public void updatExecuteStatusJob() {
+ keyProjectUpdateExe.updatExecuteStatusJob();
+ }
}
diff --git a/web-client/src/main/java/com/zcloud/key/project/api/project/KeyProjectServiceI.java b/web-client/src/main/java/com/zcloud/key/project/api/project/KeyProjectServiceI.java
index 069ba2b..a45639e 100644
--- a/web-client/src/main/java/com/zcloud/key/project/api/project/KeyProjectServiceI.java
+++ b/web-client/src/main/java/com/zcloud/key/project/api/project/KeyProjectServiceI.java
@@ -41,5 +41,7 @@ public interface KeyProjectServiceI {
List listAll(KeyProjectQry qry);
List getXgfCorp(GetXgfCorpQry qry);
+
+ void updatExecuteStatusJob();
}
diff --git a/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/mapper/KeyProjectMapper.java b/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/mapper/KeyProjectMapper.java
index a934045..3eb3ffa 100644
--- a/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/mapper/KeyProjectMapper.java
+++ b/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/mapper/KeyProjectMapper.java
@@ -38,5 +38,7 @@ public interface KeyProjectMapper extends BaseMapper {
List listAll(Map params);
List getXgfCorp(Map params);
+
+ List getLastStatus();
}
diff --git a/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/impl/project/KeyProjectRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/impl/project/KeyProjectRepositoryImpl.java
index 87881dd..cea17e4 100644
--- a/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/impl/project/KeyProjectRepositoryImpl.java
+++ b/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/impl/project/KeyProjectRepositoryImpl.java
@@ -86,5 +86,11 @@ public class KeyProjectRepositoryImpl extends BaseRepositoryImpl getXgfCorp(Map params) {
return keyProjectMapper.getXgfCorp( params);
}
+
+ @Override
+ public List getLastStatus() {
+ //查找日期plan_work_end_date 是昨日的数据,并且 apply_status = 4
+ return keyProjectMapper.getLastStatus();
+ }
}
diff --git a/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/project/KeyProjectRepository.java b/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/project/KeyProjectRepository.java
index 811e723..c295dec 100644
--- a/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/project/KeyProjectRepository.java
+++ b/web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/project/KeyProjectRepository.java
@@ -29,5 +29,7 @@ public interface KeyProjectRepository extends BaseRepository {
List listAll(Map params);
List getXgfCorp(Map params);
+
+ List getLastStatus();
}
diff --git a/web-infrastructure/src/main/resources/mapper/KeyProjectMapper.xml b/web-infrastructure/src/main/resources/mapper/KeyProjectMapper.xml
index fbb8ec8..28228e2 100644
--- a/web-infrastructure/src/main/resources/mapper/KeyProjectMapper.xml
+++ b/web-infrastructure/src/main/resources/mapper/KeyProjectMapper.xml
@@ -440,6 +440,15 @@
+
+
+