From 6b4ab1e96168131e6e4ed0ffff64b47df1c29cd9 Mon Sep 17 00:00:00 2001 From: lishiwei <3230787218@qq.com> Date: Fri, 3 Jul 2026 11:45:42 +0800 Subject: [PATCH] =?UTF-8?q?fix():=20=E4=BF=AE=E5=A4=8D=E9=9A=90=E6=82=A3?= =?UTF-8?q?=E5=A4=84=E7=BD=9A=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6=E5=92=8C?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/hidden/HiddenPenaltyAddExe.java | 79 +++++++++++++++---- .../SafetyEnvironmentalInspectionAddExe.java | 36 +++++---- ...afetyEnvironmentalInspectionUpdateExe.java | 14 ++-- .../resources/mapper/HiddenPenaltyMapper.xml | 44 ++++++++++- .../resources/mapper/KeyProjectMapper.xml | 22 +++++- 5 files changed, 154 insertions(+), 41 deletions(-) diff --git a/web-app/src/main/java/com/zcloud/key/project/command/hidden/HiddenPenaltyAddExe.java b/web-app/src/main/java/com/zcloud/key/project/command/hidden/HiddenPenaltyAddExe.java index 397ac07..88cd364 100644 --- a/web-app/src/main/java/com/zcloud/key/project/command/hidden/HiddenPenaltyAddExe.java +++ b/web-app/src/main/java/com/zcloud/key/project/command/hidden/HiddenPenaltyAddExe.java @@ -2,6 +2,7 @@ package com.zcloud.key.project.command.hidden; import com.alibaba.cola.dto.SingleResponse; import com.alibaba.cola.exception.BizException; +import com.jjb.saas.framework.auth.utils.AuthContext; import com.zcloud.gbscommon.utils.Tools; import com.zcloud.key.project.command.convertor.hidden.HiddenPenaltyCoConvertor; import com.zcloud.key.project.command.project.MessageNoticeExe; @@ -10,10 +11,9 @@ import com.zcloud.key.project.domain.gateway.hidden.HiddenPenaltyGateway; import com.zcloud.key.project.domain.model.hidden.HiddenPenaltyE; import com.zcloud.key.project.dto.clientobject.hidden.HiddenPenaltyCO; import com.zcloud.key.project.dto.hidden.HiddenPenaltyAddCmd; -import com.zcloud.key.project.persistence.dataobject.hidden.HiddenDO; import com.zcloud.key.project.persistence.dataobject.hidden.HiddenPenaltyDO; import com.zcloud.key.project.persistence.repository.hidden.HiddenPenaltyRepository; -import com.zcloud.key.project.persistence.repository.hidden.HiddenRepository; +import com.zcloud.key.project.persistence.repository.project.KeyProjectPenaltyPersonnelRepository; import lombok.AllArgsConstructor; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; @@ -31,13 +31,21 @@ public class HiddenPenaltyAddExe { private final HiddenPenaltyGateway hiddenPenaltyGateway; private final HiddenPenaltyRepository hiddenPenaltyRepository; private final HiddenPenaltyCoConvertor hiddenPenaltyCoConvertor; - private final HiddenRepository hiddenRepository; private final MessageNoticeExe messageNoticeExe; private final MessageTemplateConfig messageTemplateConfig; + private final KeyProjectPenaltyPersonnelRepository keyProjectPenaltyPersonnelRepository; @Transactional(rollbackFor = Exception.class) public SingleResponse execute(HiddenPenaltyAddCmd cmd) { HiddenPenaltyDO target = resolveTarget(cmd); + Long currentUserId = AuthContext.getUserId(); + + if (target != null && !canOperate(target, currentUserId)) { + throw new BizException("无权限发起处罚"); + } + if (target == null && StringUtils.isNotBlank(cmd.getKeyProjectId()) && !canOperate(cmd.getKeyProjectId(), currentUserId)) { + throw new BizException("无权限发起处罚"); + } if (target != null) { if (Integer.valueOf(0).equals(target.getFineFlag()) @@ -80,32 +88,71 @@ public class HiddenPenaltyAddExe { return hiddenPenaltyRepository.getByPenaltyId(cmd.getHiddenPenaltyId()); } List list = hiddenPenaltyRepository.getByHiddenId(cmd.getHiddenId()); - if (list != null && !list.isEmpty()) { - for (HiddenPenaltyDO item : list) { - if (Integer.valueOf(0).equals(item.getFineFlag()) - && Integer.valueOf(0).equals(item.getFeedbackStatus()) - && Integer.valueOf(0).equals(item.getEditFlag())) { - return item; - } + if (list == null || list.isEmpty()) { + return null; + } + for (HiddenPenaltyDO item : list) { + if (!Integer.valueOf(0).equals(item.getFineFlag()) + || !Integer.valueOf(0).equals(item.getFeedbackStatus()) + || !Integer.valueOf(0).equals(item.getEditFlag())) { + return item; + } + } + for (HiddenPenaltyDO item : list) { + if (Integer.valueOf(0).equals(item.getFineFlag()) + && Integer.valueOf(0).equals(item.getFeedbackStatus()) + && Integer.valueOf(0).equals(item.getEditFlag())) { + return item; } } return null; } + private boolean canOperate(HiddenPenaltyDO penaltyDO, Long userId) { + if (penaltyDO == null || userId == null) { + return false; + } + if (userId.equals(penaltyDO.getCreateId()) || userId.equals(penaltyDO.getPenalizedUserId())) { + return true; + } + return canOperate(penaltyDO.getKeyProjectId(), userId); + } + + private boolean canOperate(String keyProjectId, Long userId) { + if (StringUtils.isBlank(keyProjectId) || userId == null) { + return false; + } + return keyProjectPenaltyPersonnelRepository.getListByProjectId(keyProjectId) + .stream() + .anyMatch(person -> userId.equals(person.getUserId())); + } + private void handlePenaltyIssued(HiddenPenaltyDO penaltyDO) { - HiddenDO hiddenDO = hiddenRepository.getInfoByHiddenId(penaltyDO.getHiddenId()); - if (hiddenDO != null) { - messageNoticeExe.sendMessageCompleteEvent(hiddenDO.getId()); + if (penaltyDO == null) { + return; + } + if (penaltyDO.getId() != null) { + messageNoticeExe.sendMessageCompleteEvent(penaltyDO.getId()); } if (!Integer.valueOf(1).equals(penaltyDO.getFineFlag()) || penaltyDO.getPenalizedUserId() == null) { return; } Map sendParams = new HashMap<>(); - if (penaltyDO.getProjectName() != null && !penaltyDO.getProjectName().isEmpty()) { + if (StringUtils.isNotBlank(penaltyDO.getProjectName())) { sendParams.put("checkTitle", penaltyDO.getProjectName()); } - messageNoticeExe.messageNotice(penaltyDO.getPenalizedUserId(), messageTemplateConfig.getHiddenDangerPenaltyFeedbackPersonApplyFeedback(), sendParams); - messageNoticeExe.sendMessageAddEvent(penaltyDO.getPenalizedUserId(), "您有一条待反馈处罚,请及时缴纳处罚金并上传凭证。", "待反馈处罚", penaltyDO.getId(), penaltyDO.getId()); + messageNoticeExe.messageNotice( + penaltyDO.getPenalizedUserId(), + messageTemplateConfig.getHiddenDangerPenaltyFeedbackPersonApplyFeedback(), + sendParams + ); + messageNoticeExe.sendMessageAddEvent( + penaltyDO.getPenalizedUserId(), + "您有一条待反馈处罚,请及时缴纳处罚金并上传凭证。", + "待反馈处罚", + penaltyDO.getId(), + penaltyDO.getId() + ); } } diff --git a/web-app/src/main/java/com/zcloud/key/project/command/inspection/SafetyEnvironmentalInspectionAddExe.java b/web-app/src/main/java/com/zcloud/key/project/command/inspection/SafetyEnvironmentalInspectionAddExe.java index 825d391..feae4e2 100644 --- a/web-app/src/main/java/com/zcloud/key/project/command/inspection/SafetyEnvironmentalInspectionAddExe.java +++ b/web-app/src/main/java/com/zcloud/key/project/command/inspection/SafetyEnvironmentalInspectionAddExe.java @@ -26,6 +26,7 @@ import com.zcloud.key.project.dto.inspection.SafetyEnvironmentalInspectionUserAd import com.zcloud.key.project.persistence.dataobject.hidden.HiddenDO; import com.zcloud.key.project.persistence.dataobject.hidden.HiddenFindUserDO; import com.zcloud.key.project.persistence.dataobject.hidden.HiddenPenaltyDO; +import com.zcloud.key.project.persistence.dataobject.inspection.SafetyEnvironmentalInspectionDO; import com.zcloud.key.project.persistence.dataobject.inspection.SafetyEnvironmentalInspectionContentDO; import com.zcloud.key.project.persistence.dataobject.inspection.SafetyEnvironmentalInspectionUserDO; import com.zcloud.key.project.persistence.dataobject.project.KeyProjectDO; @@ -35,6 +36,7 @@ import com.zcloud.key.project.persistence.repository.hidden.HiddenPenaltyReposit import com.zcloud.key.project.persistence.repository.hidden.HiddenRepository; import com.zcloud.key.project.persistence.repository.impl.inspection.SafetyEnvironmentalInspectionContentRepositoryImpl; import com.zcloud.key.project.persistence.repository.inspection.SafetyEnvironmentalInspectionContentRepository; +import com.zcloud.key.project.persistence.repository.inspection.SafetyEnvironmentalInspectionRepository; import com.zcloud.key.project.persistence.repository.inspection.SafetyEnvironmentalInspectionUserRepository; import com.zcloud.key.project.persistence.repository.project.KeyProjectPenaltyPersonnelRepository; import com.zcloud.key.project.persistence.repository.project.KeyProjectRepository; @@ -67,6 +69,7 @@ public class SafetyEnvironmentalInspectionAddExe { private final HiddenPenaltyRepository hiddenPenaltyRepository; private final KeyProjectRepository keyProjectRepository; private final KeyProjectPenaltyPersonnelRepository keyProjectPenaltyPersonnelRepository; + private final SafetyEnvironmentalInspectionRepository safetyEnvironmentalInspectionRepository; private final MessageNoticeExe messageNoticeExe; private final MessageTemplateConfig messageTemplateConfig; @@ -191,31 +194,30 @@ public class SafetyEnvironmentalInspectionAddExe { KeyProjectDO projectDO = keyProjectRepository.getOne(projectQuery); List penaltyList = new ArrayList<>(); - hiddenAddCmdList.forEach(hiddenAddCmd -> personnelList.forEach(person -> { + hiddenAddCmdList.forEach(hiddenAddCmd -> { HiddenPenaltyDO penalty = new HiddenPenaltyDO(); penalty.setHiddenPenaltyId(Tools.get32UUID()); penalty.setHiddenId(hiddenAddCmd.getHiddenId()); penalty.setKeyProjectId(cmd.getKeyProjectId()); penalty.setPenalizedCorpId(safetyEnvironmentalInspectionE.getInspectedCorpinfoId()); - penalty.setPenalizedUserId(person.getUserId()); penalty.setFineFlag(0); penalty.setFeedbackStatus(0); penalty.setEditFlag(0); penaltyList.add(penalty); - })); + }); hiddenPenaltyRepository.saveBatch(penaltyList); // 通知处罚人 String projectName = projectDO != null ? projectDO.getProjectName() : ""; Map sendParams = new HashMap<>(); sendParams.put("keyProject", projectName); - personnelList.forEach(person -> { + penaltyList.forEach(penalty -> personnelList.forEach(person -> { messageNoticeExe.messageNotice(person.getUserId(), messageTemplateConfig.getHiddenDangerPenaltyPersonApplyPenalty(), sendParams); messageNoticeExe.sendMessageAddEvent(person.getUserId(), "您有一条待处罚隐患,请及时发起处罚。", "待处罚", - safetyEnvironmentalInspectionE.getId(), safetyEnvironmentalInspectionE.getId()); - }); + penalty.getId(), penalty.getId()); + })); } } } catch (Exception e) { @@ -229,6 +231,10 @@ public class SafetyEnvironmentalInspectionAddExe { BeanUtils.copyProperties(safetyEnvironmentalInspectionE, safetyEnvironmentalInspectionCO); //TODO 站内信 if (cmd.getStatus() == 1) { + SafetyEnvironmentalInspectionDO inspectionDO = safetyEnvironmentalInspectionRepository.getByInspectionId(safetyEnvironmentalInspectionE.getInspectionId()); + if (inspectionDO != null) { + safetyEnvironmentalInspectionCO.setId(inspectionDO.getId()); + } QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("key_project_id", cmd.getKeyProjectId()); queryWrapper.ne("apply_status", 0); @@ -236,16 +242,16 @@ public class SafetyEnvironmentalInspectionAddExe { queryWrapper.orderByDesc("update_time"); queryWrapper.last("limit 1"); KeyProjectDO keyProjectDO = keyProjectRepository.getOne(queryWrapper); - List messageUserList = safetyEnvironmentalInspectionUserRepository.listAllByInspectionId(cmd.getInspectionId(), 2); + List messageUserList = safetyEnvironmentalInspectionUserRepository.listAllByInspectionId(safetyEnvironmentalInspectionE.getInspectionId(), 2); // todo 可能会导致异步任务被线程池拒绝 -// for (SafetyEnvironmentalInspectionUserDO insUser : messageUserList){ -// Map sendParams = new HashMap<>(); -// sendParams.put("initiatorName", ssoUser.getName()); -// sendParams.put("checkTitle", keyProjectDO.getProjectName()); -// messageNoticeExe.messageNotice(insUser.getUserId(), messageTemplateConfig.getCheckerApplyCheck(), sendParams); -// //待办 -// messageNoticeExe.sendMessageAddEvent(insUser.getUserId(), "您有一条【安全环保检查】待处理","待核实", safetyEnvironmentalInspectionCO.getId(), insUser.getId()); -// } + for (SafetyEnvironmentalInspectionUserDO insUser : messageUserList){ + Map sendParams = new HashMap<>(); + sendParams.put("initiatorName", ssoUser.getName()); + sendParams.put("checkTitle", keyProjectDO.getProjectName()); + messageNoticeExe.messageNotice(insUser.getUserId(), messageTemplateConfig.getCheckerApplyCheck(), sendParams); + //待办 + messageNoticeExe.sendMessageAddEvent(insUser.getUserId(), "您有一条【安全环保检查】待处理","待核实", safetyEnvironmentalInspectionCO.getId(), insUser.getId()); + } } return safetyEnvironmentalInspectionCO; } diff --git a/web-app/src/main/java/com/zcloud/key/project/command/inspection/SafetyEnvironmentalInspectionUpdateExe.java b/web-app/src/main/java/com/zcloud/key/project/command/inspection/SafetyEnvironmentalInspectionUpdateExe.java index 00c7aef..e6a2e60 100644 --- a/web-app/src/main/java/com/zcloud/key/project/command/inspection/SafetyEnvironmentalInspectionUpdateExe.java +++ b/web-app/src/main/java/com/zcloud/key/project/command/inspection/SafetyEnvironmentalInspectionUpdateExe.java @@ -118,11 +118,11 @@ public class SafetyEnvironmentalInspectionUpdateExe { // 删除检查核实人数据 及对应待办信息 - safetyEnvironmentalInspectionUserRepository.deleteByInspectionId(safetyEnvironmentalInspectionE.getInspectionId(), 2); List deleteUserList = safetyEnvironmentalInspectionUserRepository.listAllByInspectionId(safetyEnvironmentalInspectionE.getInspectionId(),2); for (SafetyEnvironmentalInspectionUserDO deleteUser : deleteUserList){ messageNoticeExe.sendMessageDeleteEvent(deleteUser.getId()); } + safetyEnvironmentalInspectionUserRepository.deleteByInspectionId(safetyEnvironmentalInspectionE.getInspectionId(), 2); // 新增检查核实人数据 safetyEnvironmentalInspectionUserRepository.batchInsert(BeanUtil.copyToList(insUserList, SafetyEnvironmentalInspectionUserDO.class)); @@ -223,30 +223,29 @@ public class SafetyEnvironmentalInspectionUpdateExe { KeyProjectDO projectDO = keyProjectRepository.getOne(projectQuery); List penaltyList = new ArrayList<>(); - hiddenAddCmdList.forEach(hiddenAddCmd -> personnelList.forEach(person -> { + hiddenAddCmdList.forEach(hiddenAddCmd -> { HiddenPenaltyDO penalty = new HiddenPenaltyDO(); penalty.setHiddenPenaltyId(Tools.get32UUID()); penalty.setHiddenId(hiddenAddCmd.getHiddenId()); penalty.setKeyProjectId(cmd.getKeyProjectId()); penalty.setPenalizedCorpId(safetyEnvironmentalInspectionE.getInspectedCorpinfoId()); - penalty.setPenalizedUserId(person.getUserId()); penalty.setFineFlag(0); penalty.setFeedbackStatus(0); penalty.setEditFlag(0); penaltyList.add(penalty); - })); + }); hiddenPenaltyRepository.saveBatch(penaltyList); String projectName = projectDO != null ? projectDO.getProjectName() : ""; Map sendParams = new HashMap<>(); sendParams.put("keyProject", projectName); - personnelList.forEach(person -> { + penaltyList.forEach(penalty -> personnelList.forEach(person -> { messageNoticeExe.messageNotice(person.getUserId(), messageTemplateConfig.getHiddenDangerPenaltyPersonApplyPenalty(), sendParams); messageNoticeExe.sendMessageAddEvent(person.getUserId(), "您有一条待处罚隐患,请及时发起处罚。", "待处罚", - safetyEnvironmentalInspectionE.getId(), safetyEnvironmentalInspectionE.getId()); - }); + penalty.getId(), penalty.getId()); + })); } } //TODO 站内信 @@ -346,6 +345,7 @@ public class SafetyEnvironmentalInspectionUpdateExe { for (SafetyEnvironmentalInspectionUserDO deleteUser : deleteUserList){ messageNoticeExe.sendMessageDeleteEvent(deleteUser.getId()); } + safetyEnvironmentalInspectionUserRepository.deleteByInspectionId(safetyEnvironmentalInspectionE.getInspectionId(), 2); // 删除检查内容 List deleteContentList = safetyEnvironmentalInspectionContentRepository.listAllByInspectionId(safetyEnvironmentalInspectionE.getInspectionId()); safetyEnvironmentalInspectionContentRepository.deleteByInspectionId(safetyEnvironmentalInspectionE.getInspectionId()); diff --git a/web-infrastructure/src/main/resources/mapper/HiddenPenaltyMapper.xml b/web-infrastructure/src/main/resources/mapper/HiddenPenaltyMapper.xml index 47c6956..d5c1c5c 100644 --- a/web-infrastructure/src/main/resources/mapper/HiddenPenaltyMapper.xml +++ b/web-infrastructure/src/main/resources/mapper/HiddenPenaltyMapper.xml @@ -33,6 +33,35 @@ hp.delete_enum = 'FALSE' AND (h.source NOT IN (2, 3) OR i.inspection_id IS NOT NULL) + AND NOT EXISTS ( + SELECT 1 + FROM hidden_penalty hp_latest + WHERE hp_latest.delete_enum = 'FALSE' + AND hp_latest.hidden_id = hp.hidden_id + AND ( + ( + IFNULL(hp_latest.feedback_status, 0) * 100 + + IFNULL(hp_latest.fine_flag, 0) * 10 + + IFNULL(hp_latest.edit_flag, 0) + ) > ( + IFNULL(hp.feedback_status, 0) * 100 + + IFNULL(hp.fine_flag, 0) * 10 + + IFNULL(hp.edit_flag, 0) + ) + OR ( + ( + IFNULL(hp_latest.feedback_status, 0) * 100 + + IFNULL(hp_latest.fine_flag, 0) * 10 + + IFNULL(hp_latest.edit_flag, 0) + ) = ( + IFNULL(hp.feedback_status, 0) * 100 + + IFNULL(hp.fine_flag, 0) * 10 + + IFNULL(hp.edit_flag, 0) + ) + AND hp_latest.id > hp.id + ) + ) + ) AND xci.corp_name LIKE CONCAT('%', #{params.xgfCorpinfoName}, '%') @@ -66,7 +95,17 @@ AND hp.fine_flag = #{params.fineFlag} - AND (hp.create_id = #{params.currentUserId} OR hp.penalized_user_id = #{params.currentUserId}) + AND ( + hp.create_id = #{params.currentUserId} + OR hp.penalized_user_id = #{params.currentUserId} + OR EXISTS ( + SELECT 1 + FROM key_project_penalty_personnel kpp + WHERE kpp.delete_enum = 'FALSE' + AND kpp.key_project_id = hp.key_project_id + AND kpp.user_id = #{params.currentUserId} + ) + ) AND hp.penalty_desc LIKE CONCAT('%', #{params.penaltyDesc}, '%') @@ -98,6 +137,9 @@ LEFT JOIN user xmu ON xmu.id = kp.xgf_master_user_id LEFT JOIN user xmu2 ON xmu2.id = kp2.xgf_master_user_id WHERE hp.hidden_id = #{hiddenId} AND hp.delete_enum = 'FALSE' + ORDER BY + (IFNULL(hp.feedback_status, 0) * 100 + IFNULL(hp.fine_flag, 0) * 10 + IFNULL(hp.edit_flag, 0)) DESC, + hp.id DESC