feat(): 优化重点作业统计与列表数据对应和处罚消息通知

dev
lishiwei 2026-07-08 11:28:42 +08:00
parent 60d99fc026
commit 8bef81e4e6
9 changed files with 285 additions and 60 deletions

View File

@ -73,9 +73,9 @@ message:
checkedPersonApplyDefendNotPass: MS000139
hiddenDangerRectifyPersonApplyRectify: MS000140
hiddenDangerAcceptancePersonApplyAcceptance: MS000141
hiddenDangerPenaltyPersonApplyPenalty: MS000145
hiddenDangerPenaltyFeedbackPersonApplyFeedback: MS000146
checkInitiatorApplyAcceptancePass: MS000142
checkInitiatorApplyAcceptanceNotPass: MS000143
hiddenDangerRectifyPersonApplyRectifyPass: MS000144
hiddenDangerPenaltyPersonApplyPenalty: MS000163
hiddenDangerPenaltyFeedbackPersonApplyFeedback: MS000162

View File

@ -73,7 +73,7 @@ message:
checkedPersonApplyDefendNotPass: MS000139
hiddenDangerRectifyPersonApplyRectify: MS000140
hiddenDangerAcceptancePersonApplyAcceptance: MS000141
hiddenDangerPenaltyPersonApplyPenalty: MS000145
hiddenDangerPenaltyFeedbackPersonApplyFeedback: MS000146
checkInitiatorApplyAcceptancePass: MS000142
checkInitiatorApplyAcceptanceNotPass: MS000143
hiddenDangerPenaltyPersonApplyPenalty: MS000163
hiddenDangerPenaltyFeedbackPersonApplyFeedback: MS000162

View File

@ -109,13 +109,17 @@ public class HiddenAcceptRecordUpdateExe {
// 查找发起人,作为归档人
SafetyEnvironmentalInspectionDO inspectionDO = safetyEnvironmentalInspectionRepository.getByInspectionId(cmd.getForeignKey());
List<SafetyEnvironmentalInspectionUserDO> initiator = safetyEnvironmentalInspectionUserRepository.listAllByInspectionId(cmd.getForeignKey(), 1);
if (inspectionDO != null && initiator != null && !initiator.isEmpty()) {
Map<String, Object> sendParamsPigeonhole = new HashMap<>();
sendParamsPigeonhole.put("checkTitle", inspectionDO.getProjectName());
messageNoticeExe.messageNotice(initiator.get(0).getUserId(), messageTemplateConfig.getCheckInitiatorApplyAcceptancePass(), sendParamsPigeonhole);
}
// 完成隐患整改待办
List<SafetyEnvironmentalInspectionUserDO> userList = safetyEnvironmentalInspectionUserRepository.listAllByInspectionId(cmd.getForeignKey(), 7);
if (userList != null && !userList.isEmpty()) {
messageNoticeExe.sendMessageCompleteEvent(userList.get(0).getId());
}
}
} else if (cmd.getState() == 0) { // 验收未通过
// 将修改安全环保检查隐患整改操作记录改为未完成
SafetyEnvironmentalInspectionUserDO inspectionUserDO = new SafetyEnvironmentalInspectionUserDO();
@ -200,7 +204,9 @@ public class HiddenAcceptRecordUpdateExe {
Map<String, Object> sendParams = new HashMap<>();
if (projectName != null && !projectName.isEmpty()) {
sendParams.put("checkTitle", projectName);
sendParams.put("keyProject", projectName);
}
sendParams.put("listName", "待处罚");
keyProjectPenaltyPersonnelRepository.getListByProjectId(keyProjectId).stream()
.map(item -> item.getUserId())
.filter(userId -> userId != null)

View File

@ -1,46 +1,60 @@
package com.zcloud.key.project.command.hidden;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.cola.exception.BizException;
import com.zcloud.gbscommon.utils.Tools;
import com.zcloud.key.project.command.project.MessageNoticeExe;
import com.zcloud.key.project.domain.config.MessageTemplateConfig;
import com.zcloud.key.project.domain.gateway.hidden.HiddenGateway;
import com.zcloud.key.project.domain.model.hidden.HiddenE;
import com.zcloud.key.project.dto.hidden.HiddenAddCmd;
import com.zcloud.key.project.persistence.dataobject.ai.AiAlarmDO;
import com.zcloud.key.project.persistence.dataobject.hidden.HiddenPenaltyDO;
import com.zcloud.key.project.persistence.dataobject.project.KeyProjectPenaltyPersonnelDO;
import com.zcloud.key.project.persistence.repository.ai.AiAlarmRepository;
import com.zcloud.key.project.persistence.repository.hidden.HiddenPenaltyRepository;
import com.zcloud.key.project.persistence.repository.project.KeyProjectPenaltyPersonnelRepository;
import lombok.AllArgsConstructor;
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;
/**
* web-app
*
* @Author zhaokai
* @Date 2026-03-20 11:32:51
*/
@Component
@AllArgsConstructor
public class HiddenAddExe {
private final HiddenGateway hiddenGateway;
private final MessageNoticeExe messageNoticeExe;
private final MessageTemplateConfig messageTemplateConfig;
private final AiAlarmRepository aiAlarmRepository;
private final HiddenPenaltyRepository hiddenPenaltyRepository;
private final KeyProjectPenaltyPersonnelRepository keyProjectPenaltyPersonnelRepository;
@Transactional(rollbackFor = Exception.class)
public boolean execute(HiddenAddCmd cmd) {
HiddenE hiddenE = new HiddenE();
BeanUtils.copyProperties(cmd, hiddenE);
hiddenE.setState(1);
boolean res = false;
boolean res;
try {
res = hiddenGateway.add(hiddenE);
Map<String, Object> sendParams = new HashMap<>();
messageNoticeExe.messageNotice(hiddenE.getRectificationUserId(), messageTemplateConfig.getHiddenDangerRectifyPersonApplyRectifyPass(), sendParams);
messageNoticeExe.sendMessageAddEvent(hiddenE.getRectificationUserId(), "由您负责处置隐患的摄像头发现隐患,请及时整改。","隐患待整改", hiddenE.getId(), hiddenE.getId());
messageNoticeExe.messageNotice(
hiddenE.getRectificationUserId(),
messageTemplateConfig.getHiddenDangerRectifyPersonApplyRectifyPass(),
sendParams
);
messageNoticeExe.sendMessageAddEvent(
hiddenE.getRectificationUserId(),
"由您负责处置隐患的摄像头发现隐患,请及时整改。",
"隐患待整改",
hiddenE.getId(),
hiddenE.getId()
);
initPenaltyForAiHidden(hiddenE);
} catch (Exception e) {
throw new RuntimeException(e);
}
@ -49,5 +63,59 @@ public class HiddenAddExe {
}
return true;
}
}
private void initPenaltyForAiHidden(HiddenE hiddenE) {
if (!Integer.valueOf(1).equals(hiddenE.getSource()) || hiddenE.getForeignKey() == null || hiddenE.getHiddenId() == null) {
return;
}
AiAlarmDO aiAlarmDO = aiAlarmRepository.getByAiAlarmId(hiddenE.getForeignKey());
if (aiAlarmDO == null || aiAlarmDO.getKeyProjectId() == null) {
return;
}
List<KeyProjectPenaltyPersonnelDO> personnelList =
keyProjectPenaltyPersonnelRepository.getListByProjectId(aiAlarmDO.getKeyProjectId());
if (CollUtil.isEmpty(personnelList)) {
return;
}
HiddenPenaltyDO penalty = new HiddenPenaltyDO();
penalty.setHiddenPenaltyId(Tools.get32UUID());
penalty.setHiddenId(hiddenE.getHiddenId());
penalty.setKeyProjectId(aiAlarmDO.getKeyProjectId());
penalty.setPenalizedCorpId(hiddenE.getRectificationCorpId());
penalty.setFineFlag(0);
penalty.setFeedbackStatus(0);
penalty.setEditFlag(0);
hiddenPenaltyRepository.save(penalty);
HiddenPenaltyDO savedPenalty = hiddenPenaltyRepository.getByPenaltyId(penalty.getHiddenPenaltyId());
if (savedPenalty == null || savedPenalty.getId() == null) {
return;
}
Map<String, Object> sendParams = new HashMap<>();
sendParams.put("keyProject", aiAlarmDO.getProjectName());
sendParams.put("checkTitle", aiAlarmDO.getProjectName());
sendParams.put("listName", "待处罚");
for (KeyProjectPenaltyPersonnelDO person : personnelList) {
if (person.getUserId() == null) {
continue;
}
messageNoticeExe.messageNotice(
person.getUserId(),
messageTemplateConfig.getHiddenDangerPenaltyPersonApplyPenalty(),
sendParams
);
messageNoticeExe.sendMessageAddEvent(
person.getUserId(),
"您有一条待处罚隐患,请及时发起处罚。",
"待处罚",
savedPenalty.getId(),
getPendingPenaltyTodoKey(savedPenalty)
);
}
}
private Long getPendingPenaltyTodoKey(HiddenPenaltyDO penalty) {
return penalty.getHiddenTableId() != null ? penalty.getHiddenTableId() : penalty.getId();
}
}

View File

@ -22,8 +22,10 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Component
@AllArgsConstructor
@ -131,10 +133,11 @@ public class HiddenPenaltyAddExe {
if (penaltyDO == null) {
return;
}
if (penaltyDO.getId() != null) {
messageNoticeExe.sendMessageCompleteEvent(penaltyDO.getId());
Long pendingPenaltyTodoKey = getPendingPenaltyTodoKey(penaltyDO);
if (pendingPenaltyTodoKey != null) {
messageNoticeExe.sendMessageCompleteEvent(pendingPenaltyTodoKey);
}
if (!Integer.valueOf(1).equals(penaltyDO.getFineFlag()) || penaltyDO.getPenalizedUserId() == null) {
if (!Integer.valueOf(1).equals(penaltyDO.getFineFlag())) {
return;
}
@ -142,17 +145,35 @@ public class HiddenPenaltyAddExe {
if (StringUtils.isNotBlank(penaltyDO.getProjectName())) {
sendParams.put("checkTitle", penaltyDO.getProjectName());
}
sendParams.put("listName", "待反馈处罚");
resolveFeedbackReceivers(penaltyDO).forEach(userId -> {
messageNoticeExe.messageNotice(
penaltyDO.getPenalizedUserId(),
userId,
messageTemplateConfig.getHiddenDangerPenaltyFeedbackPersonApplyFeedback(),
sendParams
);
messageNoticeExe.sendMessageAddEvent(
penaltyDO.getPenalizedUserId(),
userId,
"您有一条待反馈处罚,请及时缴纳处罚金并上传凭证。",
"待反馈处罚",
penaltyDO.getId(),
penaltyDO.getId()
);
});
}
private Set<Long> resolveFeedbackReceivers(HiddenPenaltyDO penaltyDO) {
Set<Long> userIds = new LinkedHashSet<>();
if (penaltyDO.getPenalizedUserId() != null) {
userIds.add(penaltyDO.getPenalizedUserId());
}
if (penaltyDO.getXgfMasterUserId() != null) {
userIds.add(penaltyDO.getXgfMasterUserId());
}
return userIds;
}
private Long getPendingPenaltyTodoKey(HiddenPenaltyDO penaltyDO) {
return penaltyDO.getHiddenTableId() != null ? penaltyDO.getHiddenTableId() : penaltyDO.getId();
}
}

View File

@ -17,7 +17,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
@Component
@AllArgsConstructor
@ -35,11 +37,9 @@ public class HiddenPenaltyUpdateExe {
throw new BizException("处罚数据不存在");
}
// 已反馈的不可更改
if (1 == existing.getFeedbackStatus()) {
throw new BizException("已反馈,无法更改处罚");
}
// 已更改过的不可重复更改
if (1 == existing.getEditFlag()) {
throw new BizException("已更改过,无法重复更改");
}
@ -65,15 +65,39 @@ public class HiddenPenaltyUpdateExe {
}
private void handleFeedbackTodo(HiddenPenaltyDO penaltyDO) {
if (Integer.valueOf(1).equals(penaltyDO.getFineFlag()) && penaltyDO.getPenalizedUserId() != null) {
if (Integer.valueOf(1).equals(penaltyDO.getFineFlag())) {
Map<String, Object> sendParams = new HashMap<>();
if (penaltyDO.getProjectName() != null && !penaltyDO.getProjectName().isEmpty()) {
sendParams.put("checkTitle", penaltyDO.getProjectName());
}
messageNoticeExe.messageNotice(penaltyDO.getPenalizedUserId(), messageTemplateConfig.getHiddenDangerPenaltyFeedbackPersonApplyFeedback(), sendParams);
messageNoticeExe.sendMessageAddEvent(penaltyDO.getPenalizedUserId(), "您有一条待反馈处罚,请及时缴纳处罚金并上传凭证。", "待反馈处罚", penaltyDO.getId(), penaltyDO.getId());
sendParams.put("listName", "待反馈处罚");
resolveFeedbackReceivers(penaltyDO).forEach(userId -> {
messageNoticeExe.messageNotice(
userId,
messageTemplateConfig.getHiddenDangerPenaltyFeedbackPersonApplyFeedback(),
sendParams
);
messageNoticeExe.sendMessageAddEvent(
userId,
"您有一条待反馈处罚,请及时缴纳处罚金并上传凭证。",
"待反馈处罚",
penaltyDO.getId(),
penaltyDO.getId()
);
});
return;
}
messageNoticeExe.sendMessageCompleteEvent(penaltyDO.getId());
}
private Set<Long> resolveFeedbackReceivers(HiddenPenaltyDO penaltyDO) {
Set<Long> userIds = new LinkedHashSet<>();
if (penaltyDO.getPenalizedUserId() != null) {
userIds.add(penaltyDO.getPenalizedUserId());
}
if (penaltyDO.getXgfMasterUserId() != null) {
userIds.add(penaltyDO.getXgfMasterUserId());
}
return userIds;
}
}

View File

@ -209,15 +209,13 @@ public class SafetyEnvironmentalInspectionAddExe {
// 通知处罚人
String projectName = projectDO != null ? projectDO.getProjectName() : "";
Map<String, Object> sendParams = new HashMap<>();
sendParams.put("keyProject", projectName);
penaltyList.forEach(penalty -> personnelList.forEach(person -> {
messageNoticeExe.messageNotice(person.getUserId(),
messageTemplateConfig.getHiddenDangerPenaltyPersonApplyPenalty(), sendParams);
messageNoticeExe.sendMessageAddEvent(person.getUserId(),
"您有一条待处罚隐患,请及时发起处罚。", "待处罚",
penalty.getId(), penalty.getId());
}));
List<HiddenPenaltyDO> savedPenaltyList = penaltyList.stream()
.map(HiddenPenaltyDO::getHiddenPenaltyId)
.distinct()
.map(hiddenPenaltyRepository::getByPenaltyId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
notifyPenaltyPersonnel(personnelList, savedPenaltyList, projectName);
}
}
} catch (Exception e) {
@ -255,5 +253,36 @@ public class SafetyEnvironmentalInspectionAddExe {
}
return safetyEnvironmentalInspectionCO;
}
private void notifyPenaltyPersonnel(List<KeyProjectPenaltyPersonnelDO> personnelList,
List<HiddenPenaltyDO> penaltyList,
String projectName) {
if (CollUtil.isEmpty(personnelList) || CollUtil.isEmpty(penaltyList)) {
return;
}
Map<String, Object> sendParams = new HashMap<>();
sendParams.put("keyProject", projectName);
sendParams.put("checkTitle", projectName);
sendParams.put("listName", "待处罚");
penaltyList.forEach(penalty -> {
if (penalty.getId() == null) {
return;
}
personnelList.forEach(person -> {
if (person.getUserId() == null) {
return;
}
messageNoticeExe.messageNotice(person.getUserId(),
messageTemplateConfig.getHiddenDangerPenaltyPersonApplyPenalty(), sendParams);
messageNoticeExe.sendMessageAddEvent(person.getUserId(),
"您有一条待处罚隐患,请及时发起处罚。", "待处罚",
penalty.getId(), getPendingPenaltyTodoKey(penalty));
});
});
}
private Long getPendingPenaltyTodoKey(HiddenPenaltyDO penalty) {
return penalty.getHiddenTableId() != null ? penalty.getHiddenTableId() : penalty.getId();
}
}

View File

@ -237,15 +237,13 @@ public class SafetyEnvironmentalInspectionUpdateExe {
hiddenPenaltyRepository.saveBatch(penaltyList);
String projectName = projectDO != null ? projectDO.getProjectName() : "";
Map<String, Object> sendParams = new HashMap<>();
sendParams.put("keyProject", projectName);
penaltyList.forEach(penalty -> personnelList.forEach(person -> {
messageNoticeExe.messageNotice(person.getUserId(),
messageTemplateConfig.getHiddenDangerPenaltyPersonApplyPenalty(), sendParams);
messageNoticeExe.sendMessageAddEvent(person.getUserId(),
"您有一条待处罚隐患,请及时发起处罚。", "待处罚",
penalty.getId(), penalty.getId());
}));
List<HiddenPenaltyDO> savedPenaltyList = penaltyList.stream()
.map(HiddenPenaltyDO::getHiddenPenaltyId)
.distinct()
.map(hiddenPenaltyRepository::getByPenaltyId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
notifyPenaltyPersonnel(personnelList, savedPenaltyList, projectName);
}
}
//TODO 站内信
@ -422,6 +420,40 @@ public class SafetyEnvironmentalInspectionUpdateExe {
hiddenRepository.batchInsert(BeanUtil.copyToList(hiddenList, HiddenDO.class));
// 新增隐患发现人
hiddenFindUserRepository.batchInsert(BeanUtil.copyToList(hiddenFindUserList, HiddenFindUserDO.class));
List<KeyProjectPenaltyPersonnelDO> personnelList =
keyProjectPenaltyPersonnelRepository.getListByProjectId(cmd.getKeyProjectId());
if (CollUtil.isNotEmpty(personnelList)) {
QueryWrapper<KeyProjectDO> projectQuery = new QueryWrapper<>();
projectQuery.eq("key_project_id", cmd.getKeyProjectId());
projectQuery.eq("delete_enum", "FALSE");
projectQuery.orderByDesc("create_time");
projectQuery.last("limit 1");
KeyProjectDO projectDO = keyProjectRepository.getOne(projectQuery);
List<HiddenPenaltyDO> penaltyList = new ArrayList<>();
hiddenAddCmdList.forEach(hiddenAddCmd -> {
HiddenPenaltyDO penalty = new HiddenPenaltyDO();
penalty.setHiddenPenaltyId(Tools.get32UUID());
penalty.setHiddenId(hiddenAddCmd.getHiddenId());
penalty.setKeyProjectId(cmd.getKeyProjectId());
penalty.setPenalizedCorpId(safetyEnvironmentalInspectionE.getInspectedCorpinfoId());
penalty.setFineFlag(0);
penalty.setFeedbackStatus(0);
penalty.setEditFlag(0);
penaltyList.add(penalty);
});
hiddenPenaltyRepository.saveBatch(penaltyList);
String projectName = projectDO != null ? projectDO.getProjectName() : "";
List<HiddenPenaltyDO> savedPenaltyList = penaltyList.stream()
.map(HiddenPenaltyDO::getHiddenPenaltyId)
.distinct()
.map(hiddenPenaltyRepository::getByPenaltyId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
notifyPenaltyPersonnel(personnelList, savedPenaltyList, projectName);
}
}
// 发送站内信和待办
@ -519,5 +551,36 @@ public class SafetyEnvironmentalInspectionUpdateExe {
messageNoticeExe.sendMessageCompleteEvent(userList.get(0).getId());
}
}
private void notifyPenaltyPersonnel(List<KeyProjectPenaltyPersonnelDO> personnelList,
List<HiddenPenaltyDO> penaltyList,
String projectName) {
if (CollUtil.isEmpty(personnelList) || CollUtil.isEmpty(penaltyList)) {
return;
}
Map<String, Object> sendParams = new HashMap<>();
sendParams.put("keyProject", projectName);
sendParams.put("checkTitle", projectName);
sendParams.put("listName", "待处罚");
penaltyList.forEach(penalty -> {
if (penalty.getId() == null) {
return;
}
personnelList.forEach(person -> {
if (person.getUserId() == null) {
return;
}
messageNoticeExe.messageNotice(person.getUserId(),
messageTemplateConfig.getHiddenDangerPenaltyPersonApplyPenalty(), sendParams);
messageNoticeExe.sendMessageAddEvent(person.getUserId(),
"您有一条待处罚隐患,请及时发起处罚。", "待处罚",
penalty.getId(), getPendingPenaltyTodoKey(penalty));
});
});
}
private Long getPendingPenaltyTodoKey(HiddenPenaltyDO penalty) {
return penalty.getHiddenTableId() != null ? penalty.getHiddenTableId() : penalty.getId();
}
}

View File

@ -22,6 +22,13 @@
LEFT JOIN corp_info cp ON kp.corpinfo_id = cp.id AND cp.delete_enum = 'FALSE'
<where>
kp.delete_enum = 'FALSE'
AND NOT EXISTS (
SELECT 1
FROM key_project kp_latest
WHERE kp_latest.delete_enum = 'FALSE'
AND kp_latest.key_project_id = kp.key_project_id
AND kp_latest.id > kp.id
)
<!-- projectName 模糊查询判空 -->
<if test="params.projectName != null and params.projectName != ''">
AND kp.project_name LIKE CONCAT('%', #{params.projectName}, '%')
@ -295,8 +302,15 @@
GROUP BY key_project_id
) sei_stat ON kp.key_project_id = sei_stat.key_project_id
where kp.delete_enum = 'FALSE'
and kp.apply_status in (0,1,2,4,5,6)
and kp.apply_status in (1,2,4,5,6)
and kp.jurisdiction_corpinfo_id = #{params.jurisdictionCorpinfoId}
AND NOT EXISTS (
SELECT 1
FROM key_project kp_latest
WHERE kp_latest.delete_enum = 'FALSE'
AND kp_latest.key_project_id = kp.key_project_id
AND kp_latest.id > kp.id
)
<if test="params.projectName != null and params.projectName != ''">
AND kp.project_name like concat('%',#{params.projectName},'%')
</if>