重点作业重点工程相关

main
zhaokai 2026-03-30 15:11:55 +08:00
parent 4da61baba6
commit 765fd6b108
12 changed files with 223 additions and 8 deletions

View File

@ -26,5 +26,9 @@
<groupId>com.zcloud.key.project</groupId>
<artifactId>web-client</artifactId>
</dependency>
<dependency>
<groupId>com.jjb.saas</groupId>
<artifactId>jjb-saas-framework-job</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -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<String> execute(String param) {
projectTaskServiceI.updatExecuteStatusJob();
return null;
}
}

View File

@ -54,13 +54,7 @@ public interface KeyProjectCoConvertor {
@Named("stringToList")
default List<String> 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<XgfCorpCO> converXgfCorpDOsToCOs(List<XgfCorpDO> xgfCorpDOList);

View File

@ -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<String, Object> sendParams = new HashMap<>();
sendParams.put("keyProject", cmd.getProjectName());
messageNoticeExe.messageNotice(cmd.getXgfMasterUserId(), "MS000109", sendParams);
//待办
messageNoticeExe.sendMessageAddEvent(cmd.getXgfMasterUserId(), "您有一条【重点作业】待处理","未开工", keyProjectE.getId());
return keyProjectCO;
}
}

View File

@ -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<String, Object> 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<String, Object> 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<String, Object> 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<KeyProjectDO> list = keyProjectRepository.getLastStatus();
if(CollUtil.isEmpty( list)){
return;
}
list.forEach(keyProjectDO -> {
Map<String, Object> sendParams = new HashMap<>();
sendParams.put("keyProject", keyProjectDO.getProjectName());
messageNoticeExe.messageNotice(keyProjectDO.getXgfMasterUserId(), "MS000111", sendParams);
});
}
}

View File

@ -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<String, Object> 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<Boolean> 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);
}
}
}

View File

@ -98,5 +98,10 @@ public class KeyProjectServiceImpl implements KeyProjectServiceI {
return keyProjectQueryExe.getXgfCorp(qry);
}
@Override
public void updatExecuteStatusJob() {
keyProjectUpdateExe.updatExecuteStatusJob();
}
}

View File

@ -41,5 +41,7 @@ public interface KeyProjectServiceI {
List<KeyProjectCO> listAll(KeyProjectQry qry);
List<XgfCorpCO> getXgfCorp(GetXgfCorpQry qry);
void updatExecuteStatusJob();
}

View File

@ -38,5 +38,7 @@ public interface KeyProjectMapper extends BaseMapper<KeyProjectDO> {
List<KeyProjectDO> listAll(Map<String, Object> params);
List<XgfCorpDO> getXgfCorp(Map<String, Object> params);
List<KeyProjectDO> getLastStatus();
}

View File

@ -86,5 +86,11 @@ public class KeyProjectRepositoryImpl extends BaseRepositoryImpl<KeyProjectMappe
public List<XgfCorpDO> getXgfCorp(Map<String, Object> params) {
return keyProjectMapper.getXgfCorp( params);
}
@Override
public List<KeyProjectDO> getLastStatus() {
//查找日期plan_work_end_date 是昨日的数据,并且 apply_status = 4
return keyProjectMapper.getLastStatus();
}
}

View File

@ -29,5 +29,7 @@ public interface KeyProjectRepository extends BaseRepository<KeyProjectDO> {
List<KeyProjectDO> listAll(Map<String, Object> params);
List<XgfCorpDO> getXgfCorp(Map<String, Object> params);
List<KeyProjectDO> getLastStatus();
}

View File

@ -440,6 +440,15 @@
</select>
<select id="getLastStatus" resultType="com.zcloud.key.project.persistence.dataobject.project.KeyProjectDO">
SELECT kp.*
FROM key_project kp
WHERE kp.delete_enum = 'FALSE'
AND kp.apply_status = 4
AND kp.plan_work_end_date = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
ORDER BY kp.create_time DESC
</select>
</mapper>