From 5501be25ac36a194da07d549438751e5247d52cf Mon Sep 17 00:00:00 2001 From: buaixuexideshitongxue <2936013465@qq.com> Date: Thu, 30 Apr 2026 17:23:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=8A=95=E8=AF=89=E4=B8=BE=E6=8A=A5?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/ComplaintCollectionController.java | 6 +- .../ComplaintCollectionAddRequest.java | 4 + .../service/MailBoxCaptureService.java | 4 +- .../ComplaintCollectionService.java | 6 + .../ComplaintCollectionServiceImpl.java | 146 +++++++++++++++--- .../mapper/ComplaintCollectionMapper.xml | 5 +- 6 files changed, 140 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/biutag/supervision/controller/data/ComplaintCollectionController.java b/src/main/java/com/biutag/supervision/controller/data/ComplaintCollectionController.java index 4c22577..348206e 100644 --- a/src/main/java/com/biutag/supervision/controller/data/ComplaintCollectionController.java +++ b/src/main/java/com/biutag/supervision/controller/data/ComplaintCollectionController.java @@ -1,13 +1,11 @@ package com.biutag.supervision.controller.data; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.biutag.supervision.job.Job; import com.biutag.supervision.pojo.Result; import com.biutag.supervision.pojo.dto.complaintCollection.ComplaintCollectionPageDTO; import com.biutag.supervision.pojo.request.complaintCollection.*; import com.biutag.supervision.pojo.vo.complaintCollection.ComplaintCollectionDetailVo; import com.biutag.supervision.pojo.vo.complaintCollection.ComplaintCollectionMailRepeattVo; -import com.biutag.supervision.pojo.vo.complaintCollection.ComplaintCollectionWatchDetailVO; import com.biutag.supervision.service.MailBoxCaptureService; import com.biutag.supervision.service.complaintCollection.ComplaintCollectionService; import io.swagger.v3.oas.annotations.Operation; @@ -37,7 +35,6 @@ public class ComplaintCollectionController { private final ComplaintCollectionService complaintCollectionService; - private final Job job; private final MailBoxCaptureService mailBoxCaptureService; @@ -66,6 +63,9 @@ public class ComplaintCollectionController { if ("我要迁移".equals(request.getPersonInfo())){ complaintCollectionService.moveNegativeTemp(request); } + if ("局长信箱迁移".equals(request.getPersonInfo())){ + complaintCollectionService.migrateMayorMailboxNegative(request); + } if ("我要下发".equals(request.getPersonInfo())){ complaintCollectionService.addNegativeTemp(request); } diff --git a/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionAddRequest.java b/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionAddRequest.java index 4a4edae..0d870fa 100644 --- a/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionAddRequest.java +++ b/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionAddRequest.java @@ -178,6 +178,10 @@ public class ComplaintCollectionAddRequest implements ParamChecked { throw new IllegalArgumentException("是否重复不能为空"); } + if (StrUtil.isBlank(businessTypeCode)) { + throw new IllegalArgumentException("业务类型不能为空"); + } + // if (StrUtil.isBlank((leadApproval))) { // throw new IllegalArgumentException("是否领导审批不能为空"); // } diff --git a/src/main/java/com/biutag/supervision/service/MailBoxCaptureService.java b/src/main/java/com/biutag/supervision/service/MailBoxCaptureService.java index b10d780..2639c1b 100644 --- a/src/main/java/com/biutag/supervision/service/MailBoxCaptureService.java +++ b/src/main/java/com/biutag/supervision/service/MailBoxCaptureService.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.biutag.supervision.constants.enums.AccountabilityTargetEnum; import com.biutag.supervision.constants.enums.BusinessTypeEnum; import com.biutag.supervision.constants.enums.ProblemSourcesEnum; +import com.biutag.supervision.constants.enums.ProcessingStatusEnum; import com.biutag.supervision.mapper.ComplaintCollectionMapper; import com.biutag.supervision.mapper.MailBlameMapper; import com.biutag.supervision.mapper.MailExtensionMapper; @@ -509,12 +510,13 @@ public class MailBoxCaptureService { } // 只有存在核查情况时才更新 - if (checkStatus != null || StrUtil.isNotBlank(checkStatusDesc)) { + if (checkStatus != null) { // 防御编程:使用 updateById 确保只更新单条记录 negative.setCheckStatus(checkStatus); negative.setCheckStatusName(checkStatusName); negative.setCheckStatusDesc(checkStatusDesc); negative.setCheckStatusCode(checkStatusCode); + negative.setProcessingStatus(ProcessingStatusEnum.completed.name()); boolean updated = negativeService.updateById(negative); if (updated) { log.debug("【阶段2同步】更新核查情况: negativeId={}, checkStatus={}, checkStatusDesc={}", diff --git a/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionService.java b/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionService.java index e826721..c45f95e 100644 --- a/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionService.java +++ b/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionService.java @@ -95,4 +95,10 @@ public interface ComplaintCollectionService { void moveNegativeTemp(ComplaintCollectionPageRequest request); void addNegativeTemp(ComplaintCollectionPageRequest request); + + /** + * 迁移局长信箱历史数据到 Negative + * 参照 captureMayorMailbox 逻辑:直接保存,processingStatus=completed,不触发下发流程 + */ + void migrateMayorMailboxNegative(ComplaintCollectionPageRequest request); } diff --git a/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionServiceImpl.java b/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionServiceImpl.java index 59693a3..eec5774 100644 --- a/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionServiceImpl.java +++ b/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionServiceImpl.java @@ -17,10 +17,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.biutag.supervision.common.UserContextHolder; import com.biutag.supervision.constants.AppConstants; -import com.biutag.supervision.constants.enums.InspectCaseEnum; -import com.biutag.supervision.constants.enums.ProblemSourcesEnum; -import com.biutag.supervision.constants.enums.ProcessingStatusEnum; -import com.biutag.supervision.constants.enums.RoleCodeEnum; +import com.biutag.supervision.constants.enums.*; import com.biutag.supervision.mapper.ComplaintCollectionMapper; import com.biutag.supervision.pojo.Result; import com.biutag.supervision.pojo.domain.Blame; @@ -74,6 +71,7 @@ import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.Optional; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.stream.Collectors; @@ -752,7 +750,6 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic // 反映人信息 dto.setResponderName(request.getResponderName()); dto.setContactPhone(request.getResponderPhone()); - // 案件编号 // dto.setCaseNumber(request.getCaseNumber()); @@ -921,14 +918,18 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic } - - + /** + * 迁移历史的除了局长信箱的,所有办结了而且negativeId为空的数据 + * + * @param request + */ @Override @Transactional(rollbackFor = Exception.class) public void moveNegativeTemp(ComplaintCollectionPageRequest request) { // 1. 查询已办结(status=1)且未迁移(negativeId为空)的数据 ComplaintCollectionQueryParam queryParam = new ComplaintCollectionQueryParam(); queryParam.setStatus("1"); // 已办结 + queryParam.setSourceTableList(Set.of("21", "22", "17", "leader_explain")); // 可空可不空 queryParam.setOriginId(request.getOriginId()); List pendingList = complaintCollectionResourceService.query(queryParam); @@ -1001,8 +1002,13 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic negative.setOriginId(cc.getOriginId()); negative.setDiscoveryTime(cc.getDiscoveryTime()); negative.setHappenTime(cc.getHappenTime()); - negative.setBusinessTypeCode(cc.getBusinessTypeCode()); - negative.setBusinessTypeName(cc.getBusinessTypeName()); + if (StrUtil.isBlank(cc.getBusinessTypeCode())){ + negative.setBusinessTypeCode(BusinessTypeEnum.QT.getValue()); + negative.setBusinessTypeName(BusinessTypeEnum.QT.getLabel()); + }else { + negative.setBusinessTypeCode(cc.getBusinessTypeCode()); + negative.setBusinessTypeName(cc.getBusinessTypeName()); + } negative.setThingDesc(cc.getThingDesc()); // 问题来源 @@ -1014,12 +1020,23 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic negative.setProblemSources(sourceDict.get(cc.getSourceTable())); } - // 涉及单位 - negative.setInvolveDepartId(cc.getSecondDepartId()); - negative.setInvolveDepartName(cc.getSecondDepartName()); + // 涉及单位:优先三级,其次二级 + if (StrUtil.isNotBlank(cc.getThirdDepartId())) { + negative.setInvolveDepartId(cc.getThirdDepartId()); + negative.setInvolveDepartName(cc.getThirdDepartName()); + } else { + negative.setInvolveDepartId(cc.getSecondDepartId()); + negative.setInvolveDepartName(cc.getSecondDepartName()); + } negative.setSecondInvolveDepartId(cc.getSecondDepartId()); negative.setThreeInvolveDepartId(cc.getThirdDepartId()); + // 办理单位 + negative.setHandleSecondDepartId(cc.getSecondDepartId()); + negative.setHandleSecondDepartName(cc.getSecondDepartName()); + negative.setHandleThreeDepartId(cc.getThirdDepartId()); + negative.setHandleThreeDepartName(cc.getThirdDepartName()); + // 反映人信息 negative.setResponderName(cc.getResponderName()); negative.setContactPhone(cc.getResponderPhone()); @@ -1040,19 +1057,24 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic negative.setCaseNumber(cc.getCaseNumber()); // 状态设置 - 已办结 - negative.setProcessingStatus("completed"); + if ("1".equals(cc.getStatus())){ + negative.setProcessingStatus(ProcessingStatusEnum.completed.name()); + }else { + negative.setProcessingStatus(ProcessingStatusEnum.processing.name()); + } negative.setStatus("0"); // 来源设置 negative.setSourceType(NegativeSourceTypeEnum.COMPLAINT_REPORT.getCode()); negative.setSourceTypeDesc(NegativeSourceTypeEnum.COMPLAINT_REPORT.getDesc()); + // 涉嫌问题 + if (StrUtil.isNotBlank(cc.getInvolveProblem())) { + negative.setInvolveProblem(cc.getInvolveProblem()); + } + // 创建信息 - negative.setCrtTime(LocalDateTime.now()); - String userName = "system"; - try { - userName = UserContextHolder.getCurrentUser().getUserName(); - } catch (Exception ignored) {} + negative.setCrtTime(cc.getCreateTime()); return negative; } @@ -1160,8 +1182,8 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic negativeBlame.setLeadHandleResultNameOther(blame.getLeadHandleResultNameOther()); negativeBlame.setLeadProtectRightsCode(blame.getLeadProtectRightsCode()); negativeBlame.setLeadProtectRightsName(blame.getLeadProtectRightsName()); - negativeBlame.setLeadMeasuresCode(blame.getLeadResponsibilityTypeCode()); - negativeBlame.setLeadMeasuresName(blame.getLeadResponsibilityTypeName()); +// negativeBlame.setLeadMeasuresCode(blame.getLeadResponsibilityTypeCode()); +// negativeBlame.setLeadMeasuresName(blame.getLeadResponsibilityTypeName()); // 创建信息 negativeBlame.setCrtTime(blame.getCreateTime()); @@ -1181,13 +1203,11 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic @Override @Transactional(rollbackFor = Exception.class) public void addNegativeTemp(ComplaintCollectionPageRequest request) { -// if(StrUtil.isBlank(request.getOriginId())){ -// throw new IllegalArgumentException("下发旧数据必须填写编号"); -// } // 1. 查询待下发数据(status=0 且 negativeId为空) ComplaintCollectionQueryParam queryParam = new ComplaintCollectionQueryParam(); queryParam.setStatus("0"); // 初始状态 queryParam.setHandleMethod("1"); + queryParam.setSourceTableList(Set.of("21", "22", "17", "leader_explain")); // 也是可填可不填 queryParam.setOriginId(request.getOriginId()); List pendingList = complaintCollectionResourceService.query(queryParam); @@ -1275,7 +1295,13 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic } // 业务类别 - dto.setBusinessTypeCode(cc.getBusinessTypeCode()); + if (StrUtil.isBlank(cc.getBusinessTypeCode())){ + dto.setBusinessTypeCode(BusinessTypeEnum.QT.getValue()); + dto.setBusinessTypeName(BusinessTypeEnum.QT.getLabel()); + }else { + dto.setBusinessTypeCode(cc.getBusinessTypeCode()); + dto.setBusinessTypeName(cc.getBusinessTypeName()); + } // 涉及单位用现在的二级单位 dto.setInvolveDepartId(cc.getSecondDepartId()); @@ -1308,4 +1334,76 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic } + /** + * 迁移所有投诉举报局长信箱历史数据到 Negative + * 全部都是只是到negative中 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void migrateMayorMailboxNegative(ComplaintCollectionPageRequest request) { + // 1. 查询局长信箱来源 + status=1(已办结)+ negativeId为空的数据 + ComplaintCollectionQueryParam queryParam = new ComplaintCollectionQueryParam(); + queryParam.setSourceTable(ComplaintCollectionSourceTableEnum.MAYOR_MAILBOX.getCode()); + queryParam.setOriginId(request.getOriginId()); // 可空 + List pendingList = complaintCollectionResourceService.query(queryParam); + + // 过滤 negativeId 为空的数据 + List toMigrate = pendingList.stream() + .filter(cc -> StrUtil.isBlank(cc.getNegativeId())) + .toList(); + + if (CollectionUtil.isEmpty(toMigrate)) { + log.info("【局长信箱迁移】没有需要迁移的已办结数据"); + return; + } + + int successCount = 0; + int skipCount = 0; + int failCount = 0; + + for (ComplaintCollection cc : toMigrate) { + try { + // 2. 判重检查 + if (negativeService.exists(cc.getOriginId())) { + log.info("【局长信箱迁移】跳过(Negative已存在): originId={}", cc.getOriginId()); + skipCount++; + continue; + } + + // 2. 获取字典翻译Map + Map sourceDict = buildDictLabelMap(SupDictEnum.SFSS_SOURCE_TABLE.getCode()); + + // 3. 构建 Negative 对象(复用已有方法) + Negative negative = buildNegativeFromComplaintCollection(cc, sourceDict); + negativeService.save(negative); + String newNegativeId = negative.getId(); + + // 4. 迁移附件(复用已有的迁移方法) + migrateFilesToNegative(cc.getId(), newNegativeId); + migrateCheckFilesToNegative(cc.getId(), newNegativeId); + + // 5. 迁移涉及人(复用已有的迁移方法) + migrateBlamesToNegative(cc.getId(), newNegativeId); + + // 6. 更新 ComplaintCollection.negativeId + ComplaintCollectionUpdateParam updateParam = new ComplaintCollectionUpdateParam(); + updateParam.setId(cc.getId()); + updateParam.setNegativeId(newNegativeId); + updateParam.setUpdateTime(LocalDateTime.now()); + updateParam.setUpdateBy(UserContextHolder.getCurrentUser().getUserName()); + complaintCollectionResourceService.updateSelectiveById(updateParam); + + log.info("【局长信箱迁移】迁移成功: id={}, originId={}", cc.getId(), cc.getOriginId()); + successCount++; + + } catch (Exception e) { + log.error("【局长信箱迁移】迁移失败: id={}, originId={}, error={}", cc.getId(), cc.getOriginId(), e.getMessage(), e); + failCount++; + } + } + + log.info("【局长信箱迁移】迁移完成: 成功={}, 跳过={}, 失败={}", successCount, skipCount, failCount); + } + + } diff --git a/src/main/resources/mapper/ComplaintCollectionMapper.xml b/src/main/resources/mapper/ComplaintCollectionMapper.xml index 65cc99b..772a325 100644 --- a/src/main/resources/mapper/ComplaintCollectionMapper.xml +++ b/src/main/resources/mapper/ComplaintCollectionMapper.xml @@ -222,10 +222,9 @@ n.checkStatusName AS checkStatusName, n.check_status_desc AS checkStatusDesc, n.involveDepartName AS involveDepartName - FROM negative n - LEFT JOIN complaint_collection cc ON n.id = cc.negative_id + FROM complaint_collection cc + LEFT JOIN negative n ON n.id = cc.negative_id - n.sourceType = '2' AND cc.source_table = #{param.sourceTable}