diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/controller/ContractLaunchController.java b/src/main/java/com/nbport/zgwl/contractlaunch/controller/ContractLaunchController.java index 8fea330..87ac756 100644 --- a/src/main/java/com/nbport/zgwl/contractlaunch/controller/ContractLaunchController.java +++ b/src/main/java/com/nbport/zgwl/contractlaunch/controller/ContractLaunchController.java @@ -278,15 +278,17 @@ public class ContractLaunchController { * 合同归档。 * * 合同全生命周期最后一步,状态变为 completed(已完成)。 - * 同时将归档信息推送到法务系统存档(TODO:联调时打开 settlementPushService.pushArchive 调用)。 + * 同时将归档信息按数据采集 V3.0 的合同归档接口推送到法务系统存档 + * (TODO:联调时打开 dataCollectionPushService.collectContractArchive 调用)。 * * 请求体 ContractLaunchArchiveDto 字段: - * archiveKeeper - 档案保管人手机号 - * archiveKeeperUnit - 档案保管单位名称 - * archiveKeeperUnitCode - 档案保管单位编码 - * archiveFiles - 归档附件列表 + * archiveReceiveDept - 合同归档接收部门编码 + * archiveTransferor - 移交人账号 + * archivePapers - 纸质档案材料列表 + * archiveEles - 电子档案材料列表(含 approvalAttachs) * - * 归档附件自动保存到 file 子表(fileCategory = "archive")。 + * 归档附件自动保存到 file 子表(fileCategory = "archive"), + * 纸质/电子档案明细分别保存到独立子表。 * * 对应前端功能:归档按钮 → 合同完结 */ diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchArchiveDto.java b/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchArchiveDto.java index ca7d96a..62254b2 100644 --- a/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchArchiveDto.java +++ b/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchArchiveDto.java @@ -16,15 +16,15 @@ public class ContractLaunchArchiveDto implements Serializable { @Serial private static final long serialVersionUID = 1L; - /** 档案保管人手机号 */ - private String archiveKeeper; + /** 合同归档接收部门编码 */ + private String archiveReceiveDept; - /** 档案保管单位名称 */ - private String archiveKeeperUnit; + /** 移交人账号 */ + private String archiveTransferor; - /** 档案保管单位编码 */ - private String archiveKeeperUnitCode; + /** 纸质档案材料 */ + private List archivePapers = new ArrayList<>(); - /** 归档附件列表(纸质或电子档案材料) */ - private List archiveFiles = new ArrayList<>(); + /** 电子档案材料 */ + private List archiveEles = new ArrayList<>(); } diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchArchiveEleDto.java b/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchArchiveEleDto.java new file mode 100644 index 0000000..af77cf0 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchArchiveEleDto.java @@ -0,0 +1,32 @@ +package com.nbport.zgwl.contractlaunch.dto; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 归档电子档案材料 + */ +@Data +public class ContractLaunchArchiveEleDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + private Long contractId; + + /** 档案名称 */ + private String archivesName; + + private Integer sortOrder; + + private String remark; + + /** 电子档案附件 */ + private List approvalAttachs = new ArrayList<>(); +} diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchArchivePaperDto.java b/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchArchivePaperDto.java new file mode 100644 index 0000000..ce46ad4 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchArchivePaperDto.java @@ -0,0 +1,36 @@ +package com.nbport.zgwl.contractlaunch.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 归档纸质档案材料 + */ +@Data +public class ContractLaunchArchivePaperDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + private Long contractId; + + /** 档案名称 */ + private String archivesName; + + /** 份数 */ + private String archivesNum; + + /** 归档时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime archivesTime; + + private Integer sortOrder; + + private String remark; +} diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchDto.java b/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchDto.java index 1a67ab2..5ecfb0f 100644 --- a/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchDto.java +++ b/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchDto.java @@ -302,13 +302,19 @@ public class ContractLaunchDto implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime archiveDate; - /** 档案保管人手机号 */ + /** 合同归档接收部门编码 */ + private String archiveReceiveDept; + + /** 移交人账号 */ + private String archiveTransferor; + + /** 档案保管人手机号(兼容旧归档实现保留) */ private String archiveKeeper; - /** 档案保管单位 */ + /** 档案保管单位(兼容旧归档实现保留) */ private String archiveKeeperUnit; - /** 档案保管单位编码 */ + /** 档案保管单位编码(兼容旧归档实现保留) */ private String archiveKeeperUnitCode; // ==================== 业务扩展字段(财务提醒) ==================== @@ -377,6 +383,12 @@ public class ContractLaunchDto implements Serializable { /** 履行计划列表 */ private List performancePlans = new ArrayList<>(); + /** 纸质档案材料 */ + private List archivePapers = new ArrayList<>(); + + /** 电子档案材料 */ + private List archiveEles = new ArrayList<>(); + /** 操作日志列表 */ private List logList = new ArrayList<>(); } diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchFileDto.java b/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchFileDto.java index 5a18e34..2a44a68 100644 --- a/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchFileDto.java +++ b/src/main/java/com/nbport/zgwl/contractlaunch/dto/ContractLaunchFileDto.java @@ -23,6 +23,9 @@ public class ContractLaunchFileDto implements Serializable { /** 文件分类:body-正文, gist-签订依据, other-其他附件, signed-签署文件, archive-归档文件 */ private String fileCategory; + /** 关联合同电子档案材料 ID(仅归档附件使用) */ + private Long archiveEleId; + /** 文件名 */ private String fileName; diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/mapper/ContractLaunchMapper.java b/src/main/java/com/nbport/zgwl/contractlaunch/mapper/ContractLaunchMapper.java index dbfb96e..1a3fb74 100644 --- a/src/main/java/com/nbport/zgwl/contractlaunch/mapper/ContractLaunchMapper.java +++ b/src/main/java/com/nbport/zgwl/contractlaunch/mapper/ContractLaunchMapper.java @@ -3,6 +3,8 @@ package com.nbport.zgwl.contractlaunch.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchDto; +import com.nbport.zgwl.contractlaunch.dto.ContractLaunchArchiveEleDto; +import com.nbport.zgwl.contractlaunch.dto.ContractLaunchArchivePaperDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchFileDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchLogDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchPartyDto; @@ -29,6 +31,12 @@ public interface ContractLaunchMapper { /** 获取日志表序列 */ Long selectLogSeqNextVal(); + /** 获取纸质归档表序列 */ + Long selectArchivePaperSeqNextVal(); + + /** 获取电子归档表序列 */ + Long selectArchiveEleSeqNextVal(); + /** 分页查询合同列表 */ IPage selectContractPage(Page page, @Param("query") ContractLaunchQueryDto queryDto); @@ -62,6 +70,16 @@ public interface ContractLaunchMapper { @Param("createBy") String createBy, @Param("updateBy") String updateBy); + /** 批量插入纸质归档材料 */ + int batchInsertArchivePaper(@Param("list") List list, + @Param("createBy") String createBy, + @Param("updateBy") String updateBy); + + /** 批量插入电子归档材料 */ + int batchInsertArchiveEle(@Param("list") List list, + @Param("createBy") String createBy, + @Param("updateBy") String updateBy); + /** 插入单条操作日志 */ int insertLog(ContractLaunchLogDto logDto); @@ -87,6 +105,14 @@ public interface ContractLaunchMapper { int deletePlanByContractId(@Param("contractId") Long contractId, @Param("updateBy") String updateBy); + /** 删除合同下的纸质归档材料(逻辑删除) */ + int deleteArchivePaperByContractId(@Param("contractId") Long contractId, + @Param("updateBy") String updateBy); + + /** 删除合同下的电子归档材料(逻辑删除) */ + int deleteArchiveEleByContractId(@Param("contractId") Long contractId, + @Param("updateBy") String updateBy); + /** 批量查询合同方(按 contractIds) */ List selectPartyByContractIds(@Param("contractIds") List contractIds); @@ -96,6 +122,12 @@ public interface ContractLaunchMapper { /** 批量查询履行计划(按 contractIds) */ List selectPlanByContractIds(@Param("contractIds") List contractIds); + /** 批量查询纸质归档材料(按 contractIds) */ + List selectArchivePaperByContractIds(@Param("contractIds") List contractIds); + + /** 批量查询电子归档材料(按 contractIds) */ + List selectArchiveEleByContractIds(@Param("contractIds") List contractIds); + /** 批量查询操作日志(按 contractIds) */ List selectLogByContractIds(@Param("contractIds") List contractIds); } diff --git a/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchServiceImpl.java b/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchServiceImpl.java index 85227cc..1c11a9c 100644 --- a/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchServiceImpl.java +++ b/src/main/java/com/nbport/zgwl/contractlaunch/service/ContractLaunchServiceImpl.java @@ -6,6 +6,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.nbport.zgwl.common.PageResult; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchApproveDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchArchiveDto; +import com.nbport.zgwl.contractlaunch.dto.ContractLaunchArchiveEleDto; +import com.nbport.zgwl.contractlaunch.dto.ContractLaunchArchivePaperDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchFileDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchLogDto; @@ -489,32 +491,29 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { throw new ServiceException("当前状态不允许归档"); } SysUserEntity currentUser = adminSecurityManage.getUser(); - contract.setArchiveDate(LocalDateTime.now()); - contract.setArchiveKeeper(archiveDto == null ? null : archiveDto.getArchiveKeeper()); - contract.setArchiveKeeperUnit(archiveDto == null ? null : archiveDto.getArchiveKeeperUnit()); - contract.setArchiveKeeperUnitCode(archiveDto == null ? null : archiveDto.getArchiveKeeperUnitCode()); + validateArchiveRequest(archiveDto); + LocalDateTime now = LocalDateTime.now(); + contract.setArchiveDate(now); + contract.setArchiveReceiveDept(archiveDto.getArchiveReceiveDept()); + contract.setArchiveTransferor(archiveDto.getArchiveTransferor()); + contract.setArchiveKeeper(currentUser.getMobilePhone() == null || currentUser.getMobilePhone().isBlank() + ? archiveDto.getArchiveTransferor() + : currentUser.getMobilePhone()); + contract.setArchiveKeeperUnit(currentUser.getSysOrgEntity() == null ? contract.getArchiveKeeperUnit() : currentUser.getSysOrgEntity().getOrgName()); + contract.setArchiveKeeperUnitCode(currentUser.getSysOrgEntity() == null ? contract.getArchiveKeeperUnitCode() : currentUser.getSysOrgEntity().getId()); contract.setStatus(ContractLaunchConstants.STATUS_COMPLETED); contract.setUpdateBy(currentUser.getUsername()); - contract.setUpdateTime(LocalDateTime.now()); + contract.setUpdateTime(now); contractLaunchMapper.updateContract(contract); + replaceArchiveChildren(id, archiveDto, currentUser.getUsername()); - if (archiveDto != null && archiveDto.getArchiveFiles() != null && !archiveDto.getArchiveFiles().isEmpty()) { - for (ContractLaunchFileDto fileDto : archiveDto.getArchiveFiles()) { - fileDto.setId(contractLaunchMapper.selectFileSeqNextVal()); - fileDto.setContractId(id); - fileDto.setFileCategory(ContractLaunchConstants.FILE_CATEGORY_ARCHIVE); - } - contractLaunchMapper.batchInsertFile(archiveDto.getArchiveFiles(), currentUser.getUsername(), currentUser.getUsername()); - } - - Map payload = buildArchivePayload(contract, archiveDto); + Map payload = buildArchivePayload(contract, archiveDto, false); log.info("合同归档参数:{}", JsonUtils.toJson(payload)); insertLog(id, ContractLaunchConstants.ACTION_ARCHIVE, "合同归档", ContractLaunchConstants.ACTION_STATUS_PENDING, "合同归档接口当前先注释,使用测试按钮流转", payload, currentUser); // TODO: 法务接口当前不可用,真实联调时打开下面调用即可 // PushPayloadDTO requestDTO = new PushPayloadDTO(); - // requestDTO.setPayload(payload); - // settlementPushService.pushArchive(requestDTO); + // requestDTO.setPayload(buildArchivePayload(contract, archiveDto, true)); // dataCollectionPushService.collectContractArchive(requestDTO); return getDetail(id); @@ -791,14 +790,26 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { .collect(Collectors.groupingBy(ContractLaunchFileDto::getContractId)); Map> planMap = contractLaunchMapper.selectPlanByContractIds(ids).stream() .collect(Collectors.groupingBy(ContractLaunchPlanDto::getContractId)); + Map> archivePaperMap = contractLaunchMapper.selectArchivePaperByContractIds(ids).stream() + .collect(Collectors.groupingBy(ContractLaunchArchivePaperDto::getContractId)); + Map> archiveEleMap = contractLaunchMapper.selectArchiveEleByContractIds(ids).stream() + .collect(Collectors.groupingBy(ContractLaunchArchiveEleDto::getContractId)); Map> logMap = includeLogs ? contractLaunchMapper.selectLogByContractIds(ids).stream().collect(Collectors.groupingBy(ContractLaunchLogDto::getContractId)) : Collections.emptyMap(); list.forEach(item -> { item.setPartyList(new ArrayList<>(partyMap.getOrDefault(item.getId(), Collections.emptyList()))); - item.setFileList(new ArrayList<>(fileMap.getOrDefault(item.getId(), Collections.emptyList()))); + List contractFiles = new ArrayList<>(fileMap.getOrDefault(item.getId(), Collections.emptyList())); + item.setFileList(contractFiles); item.setPerformancePlans(new ArrayList<>(planMap.getOrDefault(item.getId(), Collections.emptyList()))); + item.setArchivePapers(new ArrayList<>(archivePaperMap.getOrDefault(item.getId(), Collections.emptyList()))); + List archiveEles = new ArrayList<>(archiveEleMap.getOrDefault(item.getId(), Collections.emptyList())); + Map> archiveFileMap = contractFiles.stream() + .filter(file -> ContractLaunchConstants.FILE_CATEGORY_ARCHIVE.equals(file.getFileCategory()) && file.getArchiveEleId() != null) + .collect(Collectors.groupingBy(ContractLaunchFileDto::getArchiveEleId)); + archiveEles.forEach(ele -> ele.setApprovalAttachs(new ArrayList<>(archiveFileMap.getOrDefault(ele.getId(), Collections.emptyList())))); + item.setArchiveEles(archiveEles); item.setLogList(new ArrayList<>(logMap.getOrDefault(item.getId(), Collections.emptyList()))); item.setCounterpartySummary( item.getPartyList().stream() @@ -1263,16 +1274,16 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { return "GZBSQRQZ".equals(sealType) || "HTZYZBSQRQZ".equals(sealType); } - /** 构建归档报文(pushArchive 接口的 payload) */ - private Map buildArchivePayload(ContractLaunchDto contract, ContractLaunchArchiveDto archiveDto) { + /** 构建归档报文(数据采集 V3.0 collectContractArchive 接口的 payload) */ + private Map buildArchivePayload(ContractLaunchDto contract, ContractLaunchArchiveDto archiveDto, boolean useLegalFilePayload) { Map payload = new LinkedHashMap<>(); - payload.put("contractCode", contract.getLawContractCode()); - payload.put("contractSysId", contract.getContractSysId()); - payload.put("Keeper", archiveDto == null ? null : archiveDto.getArchiveKeeper()); - payload.put("KeeperUnit", archiveDto == null ? null : archiveDto.getArchiveKeeperUnit()); - payload.put("KeeperUnitCode", archiveDto == null ? null : archiveDto.getArchiveKeeperUnitCode()); - payload.put("archivePapers", List.of()); - payload.put("archiveEles", buildSettlementArchiveEleList(archiveDto)); + payload.put("c_code", contract.getLawContractCode() == null || contract.getLawContractCode().isBlank() + ? contract.getContractCode() + : contract.getLawContractCode()); + payload.put("c_receiveDept", archiveDto == null ? null : archiveDto.getArchiveReceiveDept()); + payload.put("c_transferor", archiveDto == null ? null : archiveDto.getArchiveTransferor()); + payload.put("c_papers", buildCollectionArchivePaperList(archiveDto)); + payload.put("c_elcs", buildCollectionArchiveEleList(archiveDto, useLegalFilePayload)); return payload; } @@ -1299,20 +1310,69 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { .collect(Collectors.toList()); } - private List> buildSettlementArchiveEleList(ContractLaunchArchiveDto archiveDto) { - if (archiveDto == null || archiveDto.getArchiveFiles() == null || archiveDto.getArchiveFiles().isEmpty()) { + private List> buildCollectionArchivePaperList(ContractLaunchArchiveDto archiveDto) { + if (archiveDto == null || archiveDto.getArchivePapers() == null || archiveDto.getArchivePapers().isEmpty()) { return List.of(); } - return archiveDto.getArchiveFiles().stream() + return archiveDto.getArchivePapers().stream() .map(item -> { Map map = new LinkedHashMap<>(); - map.put("archivesName", item.getFileName()); - map.put("approvalAttachs", List.of(legalFileBridgeService.buildSettlementPayload(item))); + map.put("archivesName", item.getArchivesName()); + map.put("archivesNum", item.getArchivesNum()); + map.put("archivesTime", item.getArchivesTime()); return map; }) .collect(Collectors.toList()); } + private List> buildCollectionArchiveEleList(ContractLaunchArchiveDto archiveDto, boolean useLegalFilePayload) { + if (archiveDto == null || archiveDto.getArchiveEles() == null || archiveDto.getArchiveEles().isEmpty()) { + return List.of(); + } + return archiveDto.getArchiveEles().stream() + .map(item -> { + Map map = new LinkedHashMap<>(); + map.put("archivesName", item.getArchivesName()); + map.put("approvalAttachs", item.getApprovalAttachs().stream() + .map(file -> buildArchiveCollectionFilePayload(file, useLegalFilePayload)) + .filter(Objects::nonNull) + .collect(Collectors.toList())); + return map; + }) + .collect(Collectors.toList()); + } + + private Map buildArchiveCollectionFilePayload(ContractLaunchFileDto fileDto, boolean useLegalFilePayload) { + if (fileDto == null) { + return null; + } + if (useLegalFilePayload) { + return legalFileBridgeService.buildCollectionPayload(fileDto); + } + if (fileDto.getFilePath() == null || fileDto.getFilePath().isBlank()) { + return null; + } + Map map = new LinkedHashMap<>(); + map.put("size", fileDto.getFileSize() == null ? "" : String.valueOf(fileDto.getFileSize())); + map.put("name", fileDto.getFileName()); + map.put("suffix", resolveArchiveFileSuffix(fileDto)); + map.put("path", fileDto.getFilePath()); + return map; + } + + private String resolveArchiveFileSuffix(ContractLaunchFileDto fileDto) { + String fileType = trim(fileDto.getFileType()); + if (fileType != null && !fileType.isBlank()) { + return fileType.startsWith(".") ? fileType.substring(1) : fileType; + } + String fileName = trim(fileDto.getFileName()); + if (fileName == null) { + return ""; + } + int index = fileName.lastIndexOf('.'); + return index >= 0 && index < fileName.length() - 1 ? fileName.substring(index + 1) : ""; + } + /** * 如果 signedFilePath 是外部URL,则下载到本地并返回本地路径; * 如果已是本地路径则直接返回。 @@ -1413,6 +1473,100 @@ public class ContractLaunchServiceImpl implements ContractLaunchService { } } + private void replaceArchiveChildren(Long contractId, ContractLaunchArchiveDto archiveDto, String operator) { + contractLaunchMapper.deleteArchivePaperByContractId(contractId, operator); + contractLaunchMapper.deleteArchiveEleByContractId(contractId, operator); + contractLaunchMapper.deleteFileByContractIdAndCategory(contractId, ContractLaunchConstants.FILE_CATEGORY_ARCHIVE, operator); + + if (archiveDto == null) { + return; + } + + List papers = archiveDto.getArchivePapers(); + if (papers != null && !papers.isEmpty()) { + for (int i = 0; i < papers.size(); i++) { + ContractLaunchArchivePaperDto paper = papers.get(i); + paper.setId(contractLaunchMapper.selectArchivePaperSeqNextVal()); + paper.setContractId(contractId); + paper.setSortOrder(i + 1); + } + contractLaunchMapper.batchInsertArchivePaper(papers, operator, operator); + } + + List eles = archiveDto.getArchiveEles(); + if (eles != null && !eles.isEmpty()) { + List archiveFiles = new ArrayList<>(); + for (int i = 0; i < eles.size(); i++) { + ContractLaunchArchiveEleDto ele = eles.get(i); + ele.setId(contractLaunchMapper.selectArchiveEleSeqNextVal()); + ele.setContractId(contractId); + ele.setSortOrder(i + 1); + List attachs = ele.getApprovalAttachs(); + if (attachs == null) { + continue; + } + for (int j = 0; j < attachs.size(); j++) { + ContractLaunchFileDto file = attachs.get(j); + file.setId(contractLaunchMapper.selectFileSeqNextVal()); + file.setContractId(contractId); + file.setFileCategory(ContractLaunchConstants.FILE_CATEGORY_ARCHIVE); + file.setArchiveEleId(ele.getId()); + file.setSortOrder(j + 1); + archiveFiles.add(file); + } + } + contractLaunchMapper.batchInsertArchiveEle(eles, operator, operator); + if (!archiveFiles.isEmpty()) { + contractLaunchMapper.batchInsertFile(archiveFiles, operator, operator); + } + } + } + + private void validateArchiveRequest(ContractLaunchArchiveDto archiveDto) { + if (archiveDto == null) { + throw new ServiceException("归档信息不能为空"); + } + if (archiveDto.getArchiveReceiveDept() == null || archiveDto.getArchiveReceiveDept().isBlank()) { + throw new ServiceException("归档接收部门编码不能为空"); + } + if (archiveDto.getArchiveTransferor() == null || archiveDto.getArchiveTransferor().isBlank()) { + throw new ServiceException("移交人账号不能为空"); + } + if (archiveDto.getArchivePapers() == null || archiveDto.getArchivePapers().isEmpty()) { + throw new ServiceException("纸质档案材料不能为空"); + } + for (ContractLaunchArchivePaperDto paper : archiveDto.getArchivePapers()) { + if (paper.getArchivesName() == null || paper.getArchivesName().isBlank()) { + throw new ServiceException("纸质档案名称不能为空"); + } + if (paper.getArchivesNum() == null || paper.getArchivesNum().isBlank()) { + throw new ServiceException("纸质档案份数不能为空"); + } + if (paper.getArchivesTime() == null) { + throw new ServiceException("纸质档案归档时间不能为空"); + } + } + if (archiveDto.getArchiveEles() == null || archiveDto.getArchiveEles().isEmpty()) { + throw new ServiceException("电子档案材料不能为空"); + } + for (ContractLaunchArchiveEleDto ele : archiveDto.getArchiveEles()) { + if (ele.getArchivesName() == null || ele.getArchivesName().isBlank()) { + throw new ServiceException("电子档案名称不能为空"); + } + if (ele.getApprovalAttachs() == null || ele.getApprovalAttachs().isEmpty()) { + throw new ServiceException("电子档案附件不能为空"); + } + for (ContractLaunchFileDto file : ele.getApprovalAttachs()) { + if (file.getFileName() == null || file.getFileName().isBlank()) { + throw new ServiceException("电子档案附件文件名不能为空"); + } + if (file.getFilePath() == null || file.getFilePath().isBlank()) { + throw new ServiceException("电子档案附件路径不能为空"); + } + } + } + } + private boolean isPlanAmountRequired(String valuationMode) { return !"0".equals(valuationMode) && !"3".equals(valuationMode); } diff --git a/src/main/resources/mapper/contractlaunch/ContractLaunchMapper.xml b/src/main/resources/mapper/contractlaunch/ContractLaunchMapper.xml index 32699be..56b4caf 100644 --- a/src/main/resources/mapper/contractlaunch/ContractLaunchMapper.xml +++ b/src/main/resources/mapper/contractlaunch/ContractLaunchMapper.xml @@ -82,6 +82,8 @@ + + @@ -132,6 +134,7 @@ + @@ -141,6 +144,24 @@ + + + + + + + + + + + + + + + + + + @@ -185,7 +206,7 @@ EW_AMOUNT_TYPE, DJ_AMOUNT, YJ_AMOUNT, YFK_AMOUNT, BZJ_AMOUNT, BODY_SUMMARY, CONTRACT_TEXT_FILE_NAME, CONTRACT_TEXT_FILE_PATH, CONTRACT_TEXT_FILE_TYPE, CONTRACT_TEXT_FILE_SIZE, SIGNED_FILE_NAME, SIGNED_FILE_PATH, SIGNED_FILE_TYPE, SIGNED_FILE_SIZE, SIGNED_FILE_URL, SIGNED_OFFLINE_REASON, - SIGN_DATE, SEAL_DATE, ACTIVE_DATE, ARCHIVE_DATE, ARCHIVE_KEEPER, ARCHIVE_KEEPER_UNIT, + SIGN_DATE, SEAL_DATE, ACTIVE_DATE, ARCHIVE_DATE, ARCHIVE_RECEIVE_DEPT, ARCHIVE_TRANSFEROR, ARCHIVE_KEEPER, ARCHIVE_KEEPER_UNIT, ARCHIVE_KEEPER_UNIT_CODE, INVOICE_DATE, RECEIVE_DATE, REMIND_DAYS, INITIATOR, INITIATOR_DEPT, COMPANY_NAME, ORG_ID, QUERY_SCOPE, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK @@ -207,6 +228,12 @@ + + select ID, CONTRACT_ID, ROLE_CODE, ROLE_NAME, SORT_ORDER, PARTNER_ID, OPPOSITE_ID, COMPANY_NAME, COMPANY_TYPE, OPPOSITE_CHARACTER, CONTACT_NAME, CONTACT_PHONE, @@ -520,7 +595,7 @@ + + + +