fix(): 修复隐患处罚功能中的重复处罚和数据查询问题

dev
lishiwei 2026-06-26 10:10:58 +08:00
parent 5f6f6ed9dc
commit 5ad384e5b1
14 changed files with 110 additions and 28 deletions

View File

@ -79,8 +79,9 @@ public class HiddenController {
@ApiOperation("详情")
@GetMapping("/{id}")
public SingleResponse<HiddenCO> getInfoById(@PathVariable("id") Long id) {
return hiddenService.getInfoById(id);
public SingleResponse<HiddenCO> getInfoById(@PathVariable("id") Long id,
@RequestParam(required = false) String hiddenPenaltyId) {
return hiddenService.getInfoById(id, hiddenPenaltyId);
}
@ApiOperation("删除")

View File

@ -135,9 +135,10 @@ public class HiddenAcceptRecordUpdateExe {
// TODO 完成该隐患的待办
messageNoticeExe.sendMessageCompleteEvent(findUserDO.getId());
}
if (cmd.getState() == 1 && hiddenDO != null) {
notifyPenaltyUsers(hiddenDO);
}
// 在检查发起时进行隐患处罚 此处不需要处罚
// if (cmd.getState() == 1 && hiddenDO != null) {
// notifyPenaltyUsers(hiddenDO);
// }
if (cmd.getState() == 0 && hiddenDO != null) {
if (hiddenDO.getSource() == 1) {
// 视频识别隐患

View File

@ -15,12 +15,14 @@ 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 lombok.AllArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
@ -35,15 +37,14 @@ public class HiddenPenaltyAddExe {
@Transactional(rollbackFor = Exception.class)
public SingleResponse<HiddenPenaltyCO> execute(HiddenPenaltyAddCmd cmd) {
HiddenPenaltyDO existing = hiddenPenaltyRepository.getByHiddenId(cmd.getHiddenId());
HiddenPenaltyDO target = resolveTarget(cmd);
// 已存在记录三个状态均为0代表仅初始化、未处罚走首次处罚更新逻辑
if (existing != null) {
if (Integer.valueOf(0).equals(existing.getFineFlag())
&& Integer.valueOf(0).equals(existing.getFeedbackStatus())
&& Integer.valueOf(0).equals(existing.getEditFlag())) {
if (target != null) {
if (Integer.valueOf(0).equals(target.getFineFlag())
&& Integer.valueOf(0).equals(target.getFeedbackStatus())
&& Integer.valueOf(0).equals(target.getEditFlag())) {
HiddenPenaltyE e = new HiddenPenaltyE();
e.setHiddenPenaltyId(existing.getHiddenPenaltyId());
e.setHiddenPenaltyId(target.getHiddenPenaltyId());
BeanUtils.copyProperties(cmd, e);
if (e.getPenaltyTime() == null) {
e.setPenaltyTime(LocalDateTime.now());
@ -52,14 +53,13 @@ public class HiddenPenaltyAddExe {
if (!res) {
throw new BizException("保存失败");
}
HiddenPenaltyDO updated = hiddenPenaltyRepository.getByHiddenId(cmd.getHiddenId());
HiddenPenaltyDO updated = hiddenPenaltyRepository.getByPenaltyId(target.getHiddenPenaltyId());
handlePenaltyIssued(updated);
return SingleResponse.of(hiddenPenaltyCoConvertor.converDOToCO(updated));
}
throw new BizException("无法重复处罚");
}
// 不存在记录初始化隐患发现时同步创建三个状态默认0
HiddenPenaltyE e = new HiddenPenaltyE();
e.setHiddenPenaltyId(Tools.get32UUID());
BeanUtils.copyProperties(cmd, e);
@ -70,11 +70,28 @@ public class HiddenPenaltyAddExe {
if (!res) {
throw new BizException("保存失败");
}
HiddenPenaltyDO saved = hiddenPenaltyRepository.getByHiddenId(cmd.getHiddenId());
HiddenPenaltyDO saved = hiddenPenaltyRepository.getByPenaltyId(e.getHiddenPenaltyId());
handlePenaltyIssued(saved);
return SingleResponse.of(hiddenPenaltyCoConvertor.converDOToCO(saved));
}
private HiddenPenaltyDO resolveTarget(HiddenPenaltyAddCmd cmd) {
if (StringUtils.isNotBlank(cmd.getHiddenPenaltyId())) {
return hiddenPenaltyRepository.getByPenaltyId(cmd.getHiddenPenaltyId());
}
List<HiddenPenaltyDO> 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;
}
}
}
return null;
}
private void handlePenaltyIssued(HiddenPenaltyDO penaltyDO) {
HiddenDO hiddenDO = hiddenRepository.getInfoByHiddenId(penaltyDO.getHiddenId());
if (hiddenDO != null) {

View File

@ -59,7 +59,7 @@ public class HiddenPenaltyUpdateExe {
throw new BizException("修改失败");
}
HiddenPenaltyDO updated = hiddenPenaltyRepository.getByHiddenId(existing.getHiddenId());
HiddenPenaltyDO updated = hiddenPenaltyRepository.getByPenaltyId(existing.getHiddenPenaltyId());
handleFeedbackTodo(updated);
return SingleResponse.of(hiddenPenaltyCoConvertor.converDOToCO(updated));
}

View File

@ -1,6 +1,7 @@
package com.zcloud.key.project.command.inspection;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.cola.exception.BizException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jjb.saas.framework.auth.model.SSOUser;
@ -24,14 +25,18 @@ import com.zcloud.key.project.dto.inspection.SafetyEnvironmentalInspectionConten
import com.zcloud.key.project.dto.inspection.SafetyEnvironmentalInspectionUserAddCmd;
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.SafetyEnvironmentalInspectionContentDO;
import com.zcloud.key.project.persistence.dataobject.inspection.SafetyEnvironmentalInspectionUserDO;
import com.zcloud.key.project.persistence.dataobject.project.KeyProjectDO;
import com.zcloud.key.project.persistence.dataobject.project.KeyProjectPenaltyPersonnelDO;
import com.zcloud.key.project.persistence.repository.hidden.HiddenFindUserRepository;
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.impl.inspection.SafetyEnvironmentalInspectionContentRepositoryImpl;
import com.zcloud.key.project.persistence.repository.inspection.SafetyEnvironmentalInspectionContentRepository;
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;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -59,7 +64,9 @@ public class SafetyEnvironmentalInspectionAddExe {
private final SafetyEnvironmentalInspectionContentRepository safetyEnvironmentalInspectionContentRepository;
private final HiddenRepository hiddenRepository;
private final HiddenFindUserRepository hiddenFindUserRepository;
private final HiddenPenaltyRepository hiddenPenaltyRepository;
private final KeyProjectRepository keyProjectRepository;
private final KeyProjectPenaltyPersonnelRepository keyProjectPenaltyPersonnelRepository;
private final MessageNoticeExe messageNoticeExe;
private final MessageTemplateConfig messageTemplateConfig;
@ -170,6 +177,46 @@ public class SafetyEnvironmentalInspectionAddExe {
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 -> personnelList.forEach(person -> {
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<String, Object> sendParams = new HashMap<>();
sendParams.put("keyProject", projectName);
personnelList.forEach(person -> {
messageNoticeExe.messageNotice(person.getUserId(),
messageTemplateConfig.getHiddenDangerPenaltyPersonApplyPenalty(), sendParams);
messageNoticeExe.sendMessageAddEvent(person.getUserId(),
"您有一条待处罚隐患,请及时发起处罚。", "待处罚",
safetyEnvironmentalInspectionE.getId(), safetyEnvironmentalInspectionE.getId());
});
}
}
} catch (Exception e) {
log.error("报错了", e);

View File

@ -108,6 +108,7 @@ public class KeyProjectAddExe {
keyProjectCameraRepository.saveBatch(keyProjectCameraDOList);
}
if (!CollectionUtils.isEmpty(penaltyPersonnelAddCmdList)) {
keyProjectPenaltyPersonnelRepository.deleteByKeyProjectId(keyProjectE.getKeyProjectId());
List<KeyProjectPenaltyPersonnelDO> penaltyPersonnelDOList = keyProjectPenaltyPersonnelCoConvertor.converCmdsToDOs(penaltyPersonnelAddCmdList);
penaltyPersonnelDOList.forEach(item -> {
item.setKeyProjectId(keyProjectE.getKeyProjectId());

View File

@ -24,6 +24,7 @@ import com.zcloud.key.project.persistence.repository.hidden.HiddenPenaltyReposit
import com.zcloud.key.project.persistence.repository.hidden.HiddenRectificationRecordRepository;
import com.zcloud.key.project.persistence.repository.hidden.HiddenRepository;
import lombok.AllArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
@ -63,7 +64,7 @@ public class HiddenQueryExe {
List<HiddenCO> examCenterCOS = hiddenCoConvertor.converDOsToCOs(pageResponse.getData());
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
public SingleResponse<HiddenCO> getInfoByIdExecute(Long id) {
public SingleResponse<HiddenCO> getInfoByIdExecute(Long id, String hiddenPenaltyId) {
HiddenDO hiddenDO = hiddenRepository.getInfoById(id);
HiddenCO hiddenCO = new HiddenCO();
BeanUtils.copyProperties(hiddenDO, hiddenCO);
@ -94,12 +95,20 @@ public class HiddenQueryExe {
BeanUtils.copyProperties(hiddenAcceptRecordDOs.get(0), hiddenAcceptRecordCO);
hiddenCO.setAcceptRecord(hiddenAcceptRecordCO);
}
HiddenPenaltyDO hiddenPenaltyDO = hiddenPenaltyRepository.getByHiddenId(hiddenDO.getHiddenId());
if (hiddenPenaltyDO != null) {
HiddenPenaltyCO hiddenPenaltyCO = hiddenPenaltyCoConvertor.converDOToCO(hiddenPenaltyDO);
HiddenPenaltyDO targetPenalty = null;
if (StringUtils.isNotBlank(hiddenPenaltyId)) {
targetPenalty = hiddenPenaltyRepository.getByPenaltyId(hiddenPenaltyId);
} else {
List<HiddenPenaltyDO> penaltyDOList = hiddenPenaltyRepository.getByHiddenId(hiddenDO.getHiddenId());
if (penaltyDOList != null && !penaltyDOList.isEmpty()) {
targetPenalty = penaltyDOList.get(0);
}
}
if (targetPenalty != null) {
HiddenPenaltyCO hiddenPenaltyCO = hiddenPenaltyCoConvertor.converDOToCO(targetPenalty);
hiddenCO.setHiddenPenaltyCO(hiddenPenaltyCO);
HiddenPenaltyFeedbackDO feedbackDO = hiddenPenaltyRepository.getFeedbackByPenaltyId(hiddenPenaltyDO.getHiddenPenaltyId());
HiddenPenaltyFeedbackDO feedbackDO = hiddenPenaltyRepository.getFeedbackByPenaltyId(targetPenalty.getHiddenPenaltyId());
if (feedbackDO != null) {
HiddenPenaltyFeedbackCO feedbackCO = hiddenPenaltyCoConvertor.converFeedbackDOToCO(feedbackDO);
hiddenCO.setHiddenPenaltyFeedbackCO(feedbackCO);

View File

@ -57,8 +57,8 @@ public class HiddenServiceImpl implements HiddenServiceI {
}
@Override
public SingleResponse<HiddenCO> getInfoById(Long id) {
return hiddenQueryExe.getInfoByIdExecute(id);
public SingleResponse<HiddenCO> getInfoById(Long id, String hiddenPenaltyId) {
return hiddenQueryExe.getInfoByIdExecute(id, hiddenPenaltyId);
}
}

View File

@ -25,6 +25,6 @@ public interface HiddenServiceI {
void removeBatch(Long[] ids);
SingleResponse<HiddenCO> getInfoById(Long id);
SingleResponse<HiddenCO> getInfoById(Long id, String hiddenPenaltyId);
}

View File

@ -15,6 +15,9 @@ public class HiddenPenaltyAddCmd {
@ApiModelProperty(value = "隐患业务主键ID", required = true)
private String hiddenId;
@ApiModelProperty(value = "处罚业务主键ID多个处罚人时定位具体记录")
private String hiddenPenaltyId;
@ApiModelProperty(value = "重点作业ID")
private String keyProjectId;

View File

@ -9,6 +9,7 @@ import com.zcloud.key.project.persistence.dataobject.hidden.HiddenPenaltyFeedbac
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@Mapper
@ -20,7 +21,7 @@ public interface HiddenPenaltyMapper extends BaseMapper<HiddenPenaltyDO> {
IPage<HiddenPenaltyDO> listPage(IPage<HiddenPenaltyDO> iPage, @Param("params") Map<String, Object> params);
HiddenPenaltyDO getByHiddenId(@Param("hiddenId") String hiddenId);
List<HiddenPenaltyDO> getByHiddenId(@Param("hiddenId") String hiddenId);
IPage<HiddenPenaltyFeedbackDO> feedbackListPage(IPage<HiddenPenaltyFeedbackDO> iPage, @Param("params") Map<String, Object> params);

View File

@ -22,7 +22,7 @@ import java.util.Map;
@Mapper
@DataScopes({
@DataScope(method = "selectListPage", menuPerms = ""),
@DataScope(method = "selectListPage", menuPerms = "xgfd-bjcrqr"),
})
public interface SafetyEnvironmentalInspectionMapper extends BaseMapper<SafetyEnvironmentalInspectionDO> {
IPage<SafetyEnvironmentalInspectionDO> selectListPage(IPage<SafetyEnvironmentalInspectionDO> page, @Param("params") Map<String, Object> params, String menuPerms);

View File

@ -5,13 +5,14 @@ import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.key.project.persistence.dataobject.hidden.HiddenPenaltyDO;
import com.zcloud.key.project.persistence.dataobject.hidden.HiddenPenaltyFeedbackDO;
import java.util.List;
import java.util.Map;
public interface HiddenPenaltyRepository extends BaseRepository<HiddenPenaltyDO> {
PageResponse<HiddenPenaltyDO> listPage(Map<String, Object> params);
HiddenPenaltyDO getByHiddenId(String hiddenId);
List<HiddenPenaltyDO> getByHiddenId(String hiddenId);
HiddenPenaltyDO getByPenaltyId(String hiddenPenaltyId);

View File

@ -13,6 +13,7 @@ import com.zcloud.key.project.persistence.repository.hidden.HiddenPenaltyReposit
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
@ -32,7 +33,7 @@ public class HiddenPenaltyRepositoryImpl
}
@Override
public HiddenPenaltyDO getByHiddenId(String hiddenId) {
public List<HiddenPenaltyDO> getByHiddenId(String hiddenId) {
return hiddenPenaltyMapper.getByHiddenId(hiddenId);
}