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 aa0cb5f..ec2284a 100644 --- a/src/main/java/com/biutag/supervision/controller/data/ComplaintCollectionController.java +++ b/src/main/java/com/biutag/supervision/controller/data/ComplaintCollectionController.java @@ -9,6 +9,7 @@ import com.biutag.supervision.pojo.vo.complaintCollection.ComplaintCollectionDet import com.biutag.supervision.pojo.vo.complaintCollection.ComplaintCollectionMailRepeattVo; import com.biutag.supervision.service.MailBoxCaptureService; import com.biutag.supervision.service.complaintCollection.ComplaintCollectionService; +import com.biutag.supervision.pojo.request.complaintCollection.ComplaintCollectionMergeRequest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; @@ -122,5 +123,17 @@ public class ComplaintCollectionController { return complaintCollectionService.getComplaintCollectionDetail(request); } + @Operation(description = "合并投诉记录") + @PostMapping("/mergeComplaintCollection") + public Result mergeComplaintCollection(@RequestBody ComplaintCollectionMergeRequest request){ + return complaintCollectionService.mergeComplaintCollection(request); + } + + @Operation(description = "查询合并历史") + @PostMapping("/getMergeHistory") + public Result getMergeHistory(@RequestBody ComplaintCollectionDetailRequest request){ + return complaintCollectionService.getMergeHistory(request); + } + } diff --git a/src/main/java/com/biutag/supervision/mapper/ComplaintCollectionMapper.java b/src/main/java/com/biutag/supervision/mapper/ComplaintCollectionMapper.java index 3102e5d..d21d383 100644 --- a/src/main/java/com/biutag/supervision/mapper/ComplaintCollectionMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/ComplaintCollectionMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.biutag.supervision.pojo.dto.complaintCollection.ComplaintCollectionPageDTO; import com.biutag.supervision.pojo.entity.ComplaintCollection; import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionQueryParam; +import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionRepeatQueryParam; import com.biutag.supervision.repository.base.HBaseMapper; import org.apache.ibatis.annotations.Param; @@ -16,4 +17,6 @@ public interface ComplaintCollectionMapper extends HBaseMapper selectPageWithNegative(Page page, @Param("param") ComplaintCollectionQueryParam param); + List selectForRepeatCheck(@Param("param") ComplaintCollectionRepeatQueryParam param); + } diff --git a/src/main/java/com/biutag/supervision/pojo/dto/complaintCollection/ComplaintCollectionPageDTO.java b/src/main/java/com/biutag/supervision/pojo/dto/complaintCollection/ComplaintCollectionPageDTO.java index 9017ed6..e7504be 100644 --- a/src/main/java/com/biutag/supervision/pojo/dto/complaintCollection/ComplaintCollectionPageDTO.java +++ b/src/main/java/com/biutag/supervision/pojo/dto/complaintCollection/ComplaintCollectionPageDTO.java @@ -280,11 +280,9 @@ public class ComplaintCollectionPageDTO { private Long remainingDuration; @Schema(description = "初核工作开展情况") - @TableField("init_work_des") private String initWorkDes; @Schema(description = "初核发现的问题及下步工作计划") - @TableField("init_problem_plan") private String initProblemPlan; /** @@ -292,8 +290,9 @@ public class ComplaintCollectionPageDTO { * @see com.biutag.supervision.constants.enums.CheckStatusEnum */ @Schema(description = "初核结论") - @TableField("init_verdict") private String initVerdict; + @Schema(description = "合并历史 JSON") + private String mergeHistory; } diff --git a/src/main/java/com/biutag/supervision/pojo/entity/ComplaintCollection.java b/src/main/java/com/biutag/supervision/pojo/entity/ComplaintCollection.java index 3933782..8b34cf2 100644 --- a/src/main/java/com/biutag/supervision/pojo/entity/ComplaintCollection.java +++ b/src/main/java/com/biutag/supervision/pojo/entity/ComplaintCollection.java @@ -399,4 +399,8 @@ public class ComplaintCollection { @TableField("init_file") private String initFile; + @Schema(description = "合并历史 JSON") + @TableField("merge_history") + private String mergeHistory; + } diff --git a/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionRepeatQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionRepeatQueryParam.java new file mode 100644 index 0000000..fee797a --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionRepeatQueryParam.java @@ -0,0 +1,24 @@ +package com.biutag.supervision.pojo.param.ComplaintCollection; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +/** + * @ClassName ComplaintCollectionRepeatQueryParam + * @Description 涉访涉诉查重查询参数 + */ +@Getter +@Setter +@Schema(description = "涉访涉诉查重查询参数") +public class ComplaintCollectionRepeatQueryParam { + + @Schema(description = "投诉人身份证号") + private String responderIdCode; + + @Schema(description = "投诉人姓名") + private String responderName; + + @Schema(description = "投诉人电话") + private String responderPhone; +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionUpdateParam.java b/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionUpdateParam.java index 5137f54..1a9f6d8 100644 --- a/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionUpdateParam.java +++ b/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionUpdateParam.java @@ -170,4 +170,7 @@ public class ComplaintCollectionUpdateParam { @Schema(description = "阶段2同步标记:0-未同步 1-已同步") private String blameSyncStatus; + @Schema(description = "合并历史 JSON") + private String mergeHistory; + } diff --git a/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionMailRepeattRequest.java b/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionMailRepeattRequest.java index 2d3dab4..e1487d7 100644 --- a/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionMailRepeattRequest.java +++ b/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionMailRepeattRequest.java @@ -31,8 +31,8 @@ public class ComplaintCollectionMailRepeattRequest implements ParamChecked { @Override public void check() { - if (StrUtil.isAllBlank(responderIdCode, responderName, responderPhone)){ - throw new IllegalArgumentException("请至少填写一个查重信息(身份证、姓名、电话)"); - } +// if (StrUtil.isAllBlank(responderIdCode, responderName, responderPhone)){ +// throw new IllegalArgumentException("请至少填写一个查重信息(身份证、姓名、电话)"); +// } } } diff --git a/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionMergeRequest.java b/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionMergeRequest.java new file mode 100644 index 0000000..aaa59f3 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionMergeRequest.java @@ -0,0 +1,64 @@ +package com.biutag.supervision.pojo.request.complaintCollection; + +import com.biutag.supervision.aop.ParamChecked; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +/** + * @ClassName ComplaintCollectionMergeRequest + * @Description 合并投诉记录请求 + * @Author claude + * @Date 2026/5/25 + */ +@Setter +@Getter +@Schema(description = "合并投诉记录请求") +public class ComplaintCollectionMergeRequest implements ParamChecked { + + @Schema(description = "目标记录ID") + private String targetId; + + // 步骤1字段(与 ComplaintCollectionAddRequest 一致) + @Schema(description = "来源表类型") + private String sourceTable; + + @Schema(description = "来源类型子一级") + private String sourceTableSubOne; + + @Schema(description = "编号") + private String originId; + + @Schema(description = "受理时间") + private LocalDateTime discoveryTime; + + @Schema(description = "业务类型code") + private String businessTypeCode; + + @Schema(description = "来件人姓名") + private String responderName; + + @Schema(description = "身份证号") + private String responderIdCode; + + @Schema(description = "联系电话") + private String responderPhone; + + @Schema(description = "被投诉二级机构Id") + private String secondDepartId; + + @Schema(description = "被投诉二级机构") + private String secondDepartName; + + @Schema(description = "来信内容") + private String thingDesc; + + @Schema(description = "附件列表") + private String files; + + @Override + public void check() { + } +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/complaintCollection/ComplaintCollectionDetailVo.java b/src/main/java/com/biutag/supervision/pojo/vo/complaintCollection/ComplaintCollectionDetailVo.java index 4674eb3..6272fef 100644 --- a/src/main/java/com/biutag/supervision/pojo/vo/complaintCollection/ComplaintCollectionDetailVo.java +++ b/src/main/java/com/biutag/supervision/pojo/vo/complaintCollection/ComplaintCollectionDetailVo.java @@ -82,4 +82,7 @@ public class ComplaintCollectionDetailVo { @Schema(description = "问题ID(negative表)") private String negativeId; + + @Schema(description = "合并历史JSON") + private String mergeHistory; } \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/repository/complaintCollection/ComplaintCollectionResourceService.java b/src/main/java/com/biutag/supervision/repository/complaintCollection/ComplaintCollectionResourceService.java index 0d957b9..4ff8402 100644 --- a/src/main/java/com/biutag/supervision/repository/complaintCollection/ComplaintCollectionResourceService.java +++ b/src/main/java/com/biutag/supervision/repository/complaintCollection/ComplaintCollectionResourceService.java @@ -4,13 +4,13 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -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.mapper.ComplaintCollectionMapper; +import com.biutag.supervision.pojo.dto.complaintCollection.ComplaintCollectionPageDTO; import com.biutag.supervision.pojo.entity.ComplaintCollection; import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionExistParam; import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionQueryParam; +import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionRepeatQueryParam; import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionUpdateParam; import com.biutag.supervision.repository.base.BaseDAO; import jakarta.annotation.Resource; @@ -183,6 +183,7 @@ public class ComplaintCollectionResourceService extends BaseDAO { uw.set(StrUtil.isNotBlank(param.getInitProblemPlan()), ComplaintCollection::getInitProblemPlan, param.getInitProblemPlan()); uw.set(StrUtil.isNotBlank(param.getInitVerdict()), ComplaintCollection::getInitVerdict, param.getInitVerdict()); uw.set(StrUtil.isNotBlank(param.getInitFile()), ComplaintCollection::getInitFile, param.getInitFile()); + uw.set(StrUtil.isNotBlank(param.getMergeHistory()), ComplaintCollection::getMergeHistory, param.getMergeHistory()); if (uw.getExpression() == null || uw.getExpression().getSqlSegment().isEmpty()) { throw new IllegalStateException("更新条件不能为空,防止全表更新"); } @@ -231,4 +232,9 @@ public class ComplaintCollectionResourceService extends BaseDAO { } + public List queryForRepeatCheck(ComplaintCollectionRepeatQueryParam param) { + return complaintCollectionMapper.selectForRepeatCheck(param); + } + + } 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 c45f95e..3f7d4f3 100644 --- a/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionService.java +++ b/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionService.java @@ -101,4 +101,18 @@ public interface ComplaintCollectionService { * 参照 captureMayorMailbox 逻辑:直接保存,processingStatus=completed,不触发下发流程 */ void migrateMayorMailboxNegative(ComplaintCollectionPageRequest request); + + /** + * 合并投诉记录 + * @param request + * @return + */ + Result mergeComplaintCollection(ComplaintCollectionMergeRequest request); + + /** + * 查询合并历史 + * @param request + * @return + */ + Result getMergeHistory(ComplaintCollectionDetailRequest 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 6e33170..5dd1757 100644 --- a/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionServiceImpl.java +++ b/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionServiceImpl.java @@ -30,6 +30,7 @@ import com.biutag.supervision.pojo.enums.supDict.SupDictEnum; import com.biutag.supervision.pojo.model.UserAuth; import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionExistParam; import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionQueryParam; +import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionRepeatQueryParam; import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionUpdateParam; import com.biutag.supervision.pojo.param.DataCaseVerifQueryParam; import com.biutag.supervision.pojo.param.DataPetitionComplaintQueryParam; @@ -353,11 +354,11 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic @Override public Result maileRepeatt(ComplaintCollectionMailRepeattRequest request) { List sfssList = buildSfss(request); - List xfsjList = buildXfsj(request); - List ajhcList = buildAjhc(request); - List jzxxList = buildJzxx(request); +// List xfsjList = buildXfsj(request); +// List ajhcList = buildAjhc(request); +// List jzxxList = buildJzxx(request); AtomicInteger seqNo = new AtomicInteger(1); - List complaintCollectionRepeatDTOS = Stream.of(sfssList, xfsjList, ajhcList, jzxxList) + List complaintCollectionRepeatDTOS = Stream.of(sfssList) .flatMap(Collection::stream) .filter(dto -> StrUtil.isNotBlank(dto.getOriginId())) .collect(Collectors.toMap( @@ -780,13 +781,14 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic private List buildSfss( ComplaintCollectionMailRepeattRequest request) { - ComplaintCollectionQueryParam param = new ComplaintCollectionQueryParam(); + // 转换为查重专用参数 + ComplaintCollectionRepeatQueryParam param = new ComplaintCollectionRepeatQueryParam(); param.setResponderIdCode(request.getResponderIdCode()); param.setResponderName(request.getResponderName()); param.setResponderPhone(request.getResponderPhone()); Map sourceDict = buildDictLabelMap(SupDictEnum.SFSS_SOURCE_TABLE.getCode()); - return complaintCollectionResourceService.query(param) - .stream() + // 调用新的查重方法 + return complaintCollectionResourceService.queryForRepeatCheck(param).stream() .map(item -> { ComplaintCollectionRepeatDTO dto = new ComplaintCollectionRepeatDTO(); BeanUtil.copyProperties(item, dto); @@ -1414,5 +1416,90 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic log.info("【局长信箱迁移】迁移完成: 成功={}, 跳过={}, 失败={}", successCount, skipCount, failCount); } + @Override + @Transactional(rollbackFor = Exception.class) + public Result mergeComplaintCollection(ComplaintCollectionMergeRequest request) { + log.info("【合并投诉记录】开始合并: targetId={}, responderName={}", request.getTargetId(), request.getResponderName()); + + // 1. 根据 targetId 查询目标记录 + ComplaintCollectionQueryParam param = new ComplaintCollectionQueryParam(); + param.setId(request.getTargetId()); + List targetList = complaintCollectionResourceService.query(param); + if (CollectionUtil.isEmpty(targetList)) { + throw new IllegalStateException("未找到目标记录: " + request.getTargetId()); + } + + ComplaintCollection target = targetList.get(0); + + // 2. 构建合并记录(包含所有步骤1字段) + Map mergeRecord = new HashMap<>(); + mergeRecord.put("mergeTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + mergeRecord.put("sourceTable", request.getSourceTable()); + mergeRecord.put("sourceTableSubOne", request.getSourceTableSubOne()); + mergeRecord.put("originId", request.getOriginId()); + mergeRecord.put("discoveryTime", request.getDiscoveryTime()); + mergeRecord.put("businessTypeCode", request.getBusinessTypeCode()); + mergeRecord.put("responderName", request.getResponderName()); + mergeRecord.put("responderIdCode", request.getResponderIdCode()); + mergeRecord.put("responderPhone", request.getResponderPhone()); + mergeRecord.put("secondDepartId", request.getSecondDepartId()); + mergeRecord.put("secondDepartName", request.getSecondDepartName()); + mergeRecord.put("thingDesc", request.getThingDesc()); + + // 3. 解析附件列表 + List> fileList = new ArrayList<>(); + if (StrUtil.isNotBlank(request.getFiles())) { + try { + fileList = JSON.parseObject(request.getFiles(), new com.alibaba.fastjson2.TypeReference>>() {}); + } catch (Exception e) { + log.warn("【合并投诉记录】解析附件列表失败: {}", e.getMessage()); + } + } + mergeRecord.put("files", fileList); + + // 4. 读取现有 merge_history,追加新记录 + List> merges = new ArrayList<>(); + if (StrUtil.isNotBlank(target.getMergeHistory())) { + try { + Map existingHistory = JSON.parseObject(target.getMergeHistory(), new com.alibaba.fastjson2.TypeReference>() {}); + if (existingHistory != null && existingHistory.get("merges") != null) { + merges = (List>) existingHistory.get("merges"); + } + } catch (Exception e) { + log.warn("【合并投诉记录】解析 merge_history 失败,使用空列表: {}", e.getMessage()); + } + } + merges.add(mergeRecord); + + // 5. 使用 updateSelectiveById 更新目标记录 + ComplaintCollectionUpdateParam updateParam = new ComplaintCollectionUpdateParam(); + updateParam.setId(target.getId()); + updateParam.setMergeHistory(JSON.toJSONString(Map.of("merges", merges))); + updateParam.setRepeatt("1"); // 标记为重复件 + updateParam.setUpdateTime(LocalDateTime.now()); + updateParam.setUpdateBy(UserContextHolder.getCurrentUser().getUserName()); + + complaintCollectionResourceService.updateSelectiveById(updateParam); + + log.info("【合并投诉记录】合并成功: targetId={}, 当前合并次数={}", target.getId(), merges.size()); + return Result.success(true); + } + + @Override + public Result getMergeHistory(ComplaintCollectionDetailRequest request) { + // 1. 查询主表数据 + ComplaintCollectionQueryParam queryParam = new ComplaintCollectionQueryParam(); + queryParam.setId(request.getId()); + queryParam.setNegativeId(request.getNegativeId()); + List query = complaintCollectionResourceService.query(queryParam); + if (CollectionUtil.isEmpty(query)) { + throw new NoSuchElementException("未找到对应投诉举报数据,id:" + request.getId()); + } + + ComplaintCollection complaintCollection = query.get(0); + // 2. 返回 merge_history 字段 + return Result.success(complaintCollection.getMergeHistory()); + } + } diff --git a/src/main/resources/mapper/ComplaintCollectionMapper.xml b/src/main/resources/mapper/ComplaintCollectionMapper.xml index bde4815..d4da7d3 100644 --- a/src/main/resources/mapper/ComplaintCollectionMapper.xml +++ b/src/main/resources/mapper/ComplaintCollectionMapper.xml @@ -205,6 +205,7 @@ cc.crx_state AS crxState, cc.accountability_target AS accountabilityTarget, cc.crt_time AS crtTime, + cc.merge_history as mergeHistory, -- 从 negative 表取通用字段 n.originId AS originId, n.discoveryTime AS discoveryTime, @@ -338,4 +339,50 @@ ORDER BY n.crtTime DESC, cc.id DESC + +