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 02f1291..5c0843f 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 @@ -266,4 +266,8 @@ public class ComplaintCollectionPageDTO { private List thingFiles = new ArrayList<>(); + @Schema(description = "剩余办理时长") + private Long remainingDuration; + + } diff --git a/src/main/java/com/biutag/supervision/pojo/enums/complaintCollection/ComplaintCollectionInitialEnum.java b/src/main/java/com/biutag/supervision/pojo/enums/complaintCollection/ComplaintCollectionInitialEnum.java new file mode 100644 index 0000000..1caef24 --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/enums/complaintCollection/ComplaintCollectionInitialEnum.java @@ -0,0 +1,52 @@ +package com.biutag.supervision.pojo.enums.complaintCollection; + +import com.biutag.supervision.constants.enums.CodeEnum; +import lombok.Getter; + +/** + * @ClassName InitialCheckQueryEnum + * @Description 初核状态 + * @Author shihao + * @Date 2026/1/29 15:54 + */ +@Getter +public enum ComplaintCollectionInitialEnum implements CodeEnum { + + /** + * 0 - 未上传 | 未初核 + */ + UN_UPLOADED("0", "未初核"), + + /** + * 1 - 已上传 | 已初核 + */ + UPLOADED("1", "已初核"), + + /** + * 2 - 超时上传 | 超时上传 + */ + TIMEOUT_UPLOAD("2", "超时上传"); + + + + + private final String code; + private final String desc; + + + + ComplaintCollectionInitialEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + + @Override + public String getCode() { + return code; + } + + @Override + public String getDesc() { + return desc; + } +} diff --git a/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionQueryParam.java index 3a5e98b..a6c444f 100644 --- a/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionQueryParam.java +++ b/src/main/java/com/biutag/supervision/pojo/param/ComplaintCollection/ComplaintCollectionQueryParam.java @@ -104,6 +104,11 @@ public class ComplaintCollectionQueryParam extends BasePage { @Schema(description = "核查情况集合") private List checkStatusList; + + @Schema(description = "初核材料, 查询状态") + private List initialReviewFileList; + + // @Schema(description = "部门ID集合") // private Set secondDepartIds; 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 9ff62ed..eecfbba 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 @@ -142,4 +142,10 @@ public class ComplaintCollectionUpdateParam { @Schema(description = "临时保存信息") private String involveJson; + @Schema(description = "初核时间, gwf2承接") + private String gwf2; + + @Schema(description = "初核状态, gwf3承接") + private String gwf3; + } diff --git a/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionPageRequest.java b/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionPageRequest.java index 2e314f6..4be1641 100644 --- a/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionPageRequest.java +++ b/src/main/java/com/biutag/supervision/pojo/request/complaintCollection/ComplaintCollectionPageRequest.java @@ -10,6 +10,7 @@ import lombok.Getter; import lombok.Setter; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -75,6 +76,9 @@ public class ComplaintCollectionPageRequest extends BasePage implements ParamChe @Schema(description = "核查情况") private List checkStatusList; + @Schema(description = "初核材料, 查询状态") + private List initialReviewFileList = new ArrayList<>(); + @Override public void check() { if (CollectionUtil.isNotEmpty(discoveryTimeList)){ 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 9e1b528..299b63a 100644 --- a/src/main/java/com/biutag/supervision/repository/complaintCollection/ComplaintCollectionResourceService.java +++ b/src/main/java/com/biutag/supervision/repository/complaintCollection/ComplaintCollectionResourceService.java @@ -44,6 +44,7 @@ public class ComplaintCollectionResourceService extends BaseDAO { queryWrapper.eq(StrUtil.isNotBlank(param.getResponderName()), ComplaintCollection::getResponderName, param.getResponderName()); queryWrapper.eq(StrUtil.isNotBlank(param.getResponderPhone()), ComplaintCollection::getResponderPhone, param.getResponderPhone()); queryWrapper.eq(StrUtil.isNotBlank(param.getStatus()), ComplaintCollection::getStatus, param.getStatus()); + queryWrapper.in(CollectionUtil.isNotEmpty(param.getInitialReviewFileList()), ComplaintCollection::getGwf3, param.getInitialReviewFileList()); if (queryWrapper.getExpression() == null || queryWrapper.getExpression().getSqlSegment().isEmpty()) { return Collections.emptyList(); } @@ -76,6 +77,7 @@ public class ComplaintCollectionResourceService extends BaseDAO { qw.eq(StrUtil.isNotBlank(param.getLeadApproval()), ComplaintCollection::getLeadApproval, param.getLeadApproval()); qw.eq(StrUtil.isNotBlank(param.getProcessingStatus()), ComplaintCollection::getProcessingStatus, param.getProcessingStatus()); qw.eq(StrUtil.isNotBlank(param.getStatus()), ComplaintCollection::getStatus, param.getStatus()); + qw.in(CollectionUtil.isNotEmpty(param.getInitialReviewFileList()), ComplaintCollection::getGwf3, param.getInitialReviewFileList()); // 来件内容 // 标签(表里如果是逗号字符串 tag="URGENT,NORMAL") // 语义:命中任意一个标签即可(OR) @@ -214,6 +216,12 @@ public class ComplaintCollectionResourceService extends BaseDAO { if (param.getInvolveJson()!=null){ uw.set(ComplaintCollection::getGwf1, param.getInvolveJson()); } + if (param.getGwf2()!=null){ + uw.set(ComplaintCollection::getGwf2, param.getGwf2()); + } + if (param.getGwf3()!=null){ + uw.set(ComplaintCollection::getGwf3, param.getGwf3()); + } uw.set(ComplaintCollection::getTag, param.getTags() != null ? StringUtils.join(param.getTags(), ",") : null); uw.set(ComplaintCollection::getUpdateBy, UserContextHolder.getCurrentUser().getUserName()); uw.set(ComplaintCollection::getUpdateTime, LocalDateTime.now()); 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 bad5257..2a92760 100644 --- a/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionServiceImpl.java +++ b/src/main/java/com/biutag/supervision/service/complaintCollection/ComplaintCollectionServiceImpl.java @@ -27,13 +27,14 @@ import com.biutag.supervision.pojo.dto.flow.VerifyData; import com.biutag.supervision.pojo.entity.*; import com.biutag.supervision.pojo.enums.complaintCollection.ComplaintCollectionClosingStatusEnum; import com.biutag.supervision.pojo.enums.complaintCollection.ComplaintCollectionHandleMethodEnum; +import com.biutag.supervision.pojo.enums.complaintCollection.ComplaintCollectionInitialEnum; import com.biutag.supervision.pojo.enums.complaintCollection.ComplaintCollectionPublicApprovalEnum; import com.biutag.supervision.pojo.enums.supDict.SupDictEnum; import com.biutag.supervision.pojo.model.UserAuth; -import com.biutag.supervision.pojo.param.*; import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionExistParam; import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionQueryParam; import com.biutag.supervision.pojo.param.ComplaintCollection.ComplaintCollectionUpdateParam; +import com.biutag.supervision.pojo.param.*; import com.biutag.supervision.pojo.param.complaintCollectionBlame.ComplaintCollectionBlameQueryParam; import com.biutag.supervision.pojo.param.complaintCollectionCheckFile.ComplaintCollectionCheckFileQueryParam; import com.biutag.supervision.pojo.param.complaintCollectionFile.ComplaintCollectionFileQueryParam; @@ -56,6 +57,7 @@ import com.biutag.supervision.repository.supdepart.SupDepartResourceService; import com.biutag.supervision.service.*; import com.biutag.supervision.util.CodeTranslateUtil; import com.biutag.supervision.util.SfssUtil; +import com.biutag.supervision.util.TimeUtil; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.ValidationException; @@ -103,6 +105,9 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic private final DataCaseVerifResourceService dataCaseVerifResourceService; private final NegativeProblemRelationService negativeProblemRelationService; private final MailResourceService mailResourceService; + private static final DateTimeFormatter INITIAL_REVIEW_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private static final int CHECK_LIMIT_DAYS = 4; + @Override @Transactional(rollbackFor = Exception.class) @@ -123,6 +128,7 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic } complaintCollection.setCreateTime(LocalDateTime.now()); complaintCollection.setCreateBy(UserContextHolder.getCurrentUser().getUserName()); + complaintCollection.setGwf3(ComplaintCollectionInitialEnum.UN_UPLOADED.getCode()); Boolean res = complaintCollectionResourceService.createComplaintCollection(Arrays.asList(complaintCollection)); Assert.notNull(complaintCollection.getId(), "主表插入后未获取到ID"); saveThingFilesOrThrow(complaintCollection.getId(), request.getThingFiles()); @@ -190,6 +196,9 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic @Override public Result getComplaintCollectionPage(ComplaintCollectionPageRequest request) { ComplaintCollectionQueryParam param = ComplaintCollectionTransfer.INSTANCE.pageRequestToPageParam(request); + if (request.getInitialReviewFileList().contains(ComplaintCollectionInitialEnum.UPLOADED.getCode())){ + param.getInitialReviewFileList().add(ComplaintCollectionInitialEnum.TIMEOUT_UPLOAD.getCode()); + } UserAuth user = UserContextHolder.getCurrentUser(); if (!AppConstants.USER_TYPE_SUPER.equals(user.getUserType()) && (user.getRoleCodes().isEmpty() || user.getAuthSources().isEmpty() || user.getAuthDepartIds().isEmpty())) { return Result.success(ComplaintCollectionPageVo.noAuthVo()); @@ -207,6 +216,7 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic Set ids = complaintCollectionPageDTOS.stream().map(ComplaintCollectionPageDTO::getId).collect(Collectors.toSet()); ComplaintCollectionFileQueryParam complaintCollectionFileQueryParam = new ComplaintCollectionFileQueryParam(); complaintCollectionFileQueryParam.setComplaintIds(ids); + // 附件 Map> complaintCollectionFileMap = complaintCollectionFileResourceService.queryGroupBy(complaintCollectionFileQueryParam, ComplaintCollectionFile::getComplaintId); if (CollectionUtil.isNotEmpty(complaintCollectionPageDTOS)) { Map dictLabelMap = buildDictLabelMap(SupDictEnum.SUSPECT_PROBLEM.getCode()); @@ -226,6 +236,8 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic return fileVo; }).toList(); one.setThingFiles(fileVos); + // 超时情况 + fillCheckTimeoutInfo(one); }); } ComplaintCollectionPageVo complaintCollectionPageVo = new ComplaintCollectionPageVo(); @@ -392,6 +404,7 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic complaintCollectionCheckFile.setCreateTime(LocalDateTime.now()); complaintCollectionFiles.add(complaintCollectionCheckFile); } + complaintCollectionCheckFileResourceService.delByComplaintCollectionId(request.getComplaintId()); complaintCollectionCheckFileResourceService.createComplaintCollectionCheckFile(complaintCollectionFiles); return Result.success(true); } @@ -552,6 +565,7 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic } @Override + @Transactional(rollbackFor = Exception.class) public Result saveInvolveJson(ComplaintCollectionSaveInvolveJsonRequest request) { ComplaintCollectionUpdateParam updateParam = ComplaintCollectionTransfer.INSTANCE.JsonRequestToUpdateParam(request); updateParam.setId(request.getComplaintId()); @@ -577,8 +591,43 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic updateParam.setSecondDepartId(secondDepart.getId()); updateParam.setSecondDepartName(secondDepart.getShortName()); } + updateParam.setUpdateTime(LocalDateTime.now()); + updateParam.setUpdateBy(UserContextHolder.getCurrentUser().getUserName()); updateParam.setCheckStatus(request.getCheckStatusCode()); complaintCollectionResourceService.updateSelectiveById(updateParam); + ComplaintCollectionQueryParam complaintCollectionQueryParam = new ComplaintCollectionQueryParam(); + complaintCollectionQueryParam.setId(request.getComplaintId()); + List complaintCollectionList = complaintCollectionResourceService.query(complaintCollectionQueryParam); + ComplaintCollection complaintCollection = complaintCollectionList.get(0); + // 有附件 + 有核查情况 = 初核 + if (StrUtil.isBlank(complaintCollection.getGwf2()) && request.getCheckStatusCode() != null && CollectionUtil.isNotEmpty(request.getFiles())) { + LocalDateTime discoveryTime = complaintCollection.getDiscoveryTime(); + long maxSeconds = CHECK_LIMIT_DAYS * TimeUtil.SECONDS_OF_A_DAY; + long remainingAtInitial = TimeUtil.getRemainingDuration(discoveryTime, LocalDateTime.now(), maxSeconds); + String initialReviewStatus = (remainingAtInitial < 0) ? + ComplaintCollectionInitialEnum.TIMEOUT_UPLOAD.getCode() : ComplaintCollectionInitialEnum.UPLOADED.getCode(); + ComplaintCollectionUpdateParam complaintCollectionUpdateParam = new ComplaintCollectionUpdateParam(); + complaintCollectionUpdateParam.setId(request.getComplaintId()); + complaintCollectionUpdateParam.setGwf2(LocalDateTime.now().format(INITIAL_REVIEW_FMT)); + complaintCollectionUpdateParam.setGwf3(initialReviewStatus); + complaintCollectionResourceService.updateSelectiveById(complaintCollectionUpdateParam); + } + // 涉访涉诉核查办理附件 + List files = request.getFiles(); + List complaintCollectionFiles = new ArrayList<>(); + for (FileVo file : files) { + ComplaintCollectionCheckFile complaintCollectionCheckFile = new ComplaintCollectionCheckFile(); + complaintCollectionCheckFile.setComplaintId(request.getComplaintId()); + complaintCollectionCheckFile.setCheckStatus(SfssUtil.getCheckStatusCategory(request.getCheckStatusCode())); + complaintCollectionCheckFile.setCheckStatusName(request.getCheckStatusName()); + complaintCollectionCheckFile.setFileName(file.getFileName()); + complaintCollectionCheckFile.setFilePath(file.getFilePath()); + complaintCollectionCheckFile.setCreateBy(UserContextHolder.getCurrentUser().getUserName()); + complaintCollectionCheckFile.setCreateTime(LocalDateTime.now()); + complaintCollectionFiles.add(complaintCollectionCheckFile); + } + complaintCollectionCheckFileResourceService.delByComplaintCollectionId(request.getComplaintId()); + complaintCollectionCheckFileResourceService.createComplaintCollectionCheckFile(complaintCollectionFiles); return Result.success(Boolean.TRUE); } @@ -846,7 +895,7 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic .map(item -> { ComplaintCollectionRepeatDTO dto = new ComplaintCollectionRepeatDTO(); BeanUtil.copyProperties(item, dto); - dto.setSourceTable(CodeTranslateUtil.translateCodesToLabels(item.getSourceTable(), sourceDict) + "(涉)"); + dto.setSourceTable(CodeTranslateUtil.translateCodesToLabels(item.getSourceTable(), sourceDict) + "(投)"); return dto; }) .toList(); @@ -946,4 +995,41 @@ public class ComplaintCollectionServiceImpl implements ComplaintCollectionServic throw new IllegalStateException("当前账号无权限操作该数据。请使用市局管理员账号登录,或确认该数据是否为本人录入。"); } + + /** + * 初核情况 + * 核查情况存在 + 核查附件存在 = 初核完成 + * 初核未完成 + 离discoverTime 4个工作日 = 超时 + * 初核完成 + (初核时间 - discoverTime)>4 = 超时初核 + * + * @param dto + */ + private void fillCheckTimeoutInfo(ComplaintCollectionPageDTO dto) { + if (dto == null || StrUtil.isBlank(dto.getId())) { + return; + } + LocalDateTime discoveryTime = dto.getDiscoveryTime(); + if (discoveryTime == null) { + dto.setRemainingDuration(null); + return; + } + + long maxSeconds = CHECK_LIMIT_DAYS * TimeUtil.SECONDS_OF_A_DAY; + + LocalDateTime initialReviewTime = null; + if (StrUtil.isNotBlank(dto.getGwf2())) { + initialReviewTime = LocalDateTime.parse(dto.getGwf2(), INITIAL_REVIEW_FMT); + } + + // 1) 未初核:倒计时(discovery -> now) + if (initialReviewTime == null ) { + long remainingSeconds = TimeUtil.getRemainingDuration(discoveryTime, maxSeconds); + dto.setRemainingDuration(remainingSeconds); + } + + + + } + + }