From 765fd6b108e51c2c9c4925333378609a86b79f1f Mon Sep 17 00:00:00 2001 From: zhaokai Date: Mon, 30 Mar 2026 15:11:55 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E7=82=B9=E4=BD=9C=E4=B8=9A=E9=87=8D?= =?UTF-8?q?=E7=82=B9=E5=B7=A5=E7=A8=8B=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web-adapter/pom.xml | 4 + .../key/project/job/KeyProjectStatusJob.java | 29 +++++ .../project/KeyProjectCoConvertor.java | 8 +- .../command/project/KeyProjectAddExe.java | 11 +- .../command/project/KeyProjectUpdateExe.java | 49 +++++++++ .../command/project/MessageNoticeExe.java | 104 ++++++++++++++++++ .../project/KeyProjectServiceImpl.java | 5 + .../api/project/KeyProjectServiceI.java | 2 + .../persistence/mapper/KeyProjectMapper.java | 2 + .../project/KeyProjectRepositoryImpl.java | 6 + .../project/KeyProjectRepository.java | 2 + .../resources/mapper/KeyProjectMapper.xml | 9 ++ 12 files changed, 223 insertions(+), 8 deletions(-) create mode 100644 web-adapter/src/main/java/com/zcloud/key/project/job/KeyProjectStatusJob.java create mode 100644 web-app/src/main/java/com/zcloud/key/project/command/project/MessageNoticeExe.java 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 @@ + + +