归档功能完善

This commit is contained in:
2026-06-08 16:15:43 +08:00
parent 6ea3bc6f6f
commit c67fdcfc41
11 changed files with 716 additions and 55 deletions
@@ -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"
* 纸质/电子档案明细分别保存到独立子表。
*
* 对应前端功能:归档按钮 → 合同完结
*/
@@ -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<ContractLaunchArchivePaperDto> archivePapers = new ArrayList<>();
/** 归档附件列表(纸质或电子档案材料 */
private List<ContractLaunchFileDto> archiveFiles = new ArrayList<>();
/** 电子档案材料 */
private List<ContractLaunchArchiveEleDto> archiveEles = new ArrayList<>();
}
@@ -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<ContractLaunchFileDto> approvalAttachs = new ArrayList<>();
}
@@ -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;
}
@@ -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<ContractLaunchPlanDto> performancePlans = new ArrayList<>();
/** 纸质档案材料 */
private List<ContractLaunchArchivePaperDto> archivePapers = new ArrayList<>();
/** 电子档案材料 */
private List<ContractLaunchArchiveEleDto> archiveEles = new ArrayList<>();
/** 操作日志列表 */
private List<ContractLaunchLogDto> logList = new ArrayList<>();
}
@@ -23,6 +23,9 @@ public class ContractLaunchFileDto implements Serializable {
/** 文件分类:body-正文, gist-签订依据, other-其他附件, signed-签署文件, archive-归档文件 */
private String fileCategory;
/** 关联合同电子档案材料 ID(仅归档附件使用) */
private Long archiveEleId;
/** 文件名 */
private String fileName;
@@ -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<ContractLaunchDto> selectContractPage(Page<ContractLaunchDto> 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<ContractLaunchArchivePaperDto> list,
@Param("createBy") String createBy,
@Param("updateBy") String updateBy);
/** 批量插入电子归档材料 */
int batchInsertArchiveEle(@Param("list") List<ContractLaunchArchiveEleDto> 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<ContractLaunchPartyDto> selectPartyByContractIds(@Param("contractIds") List<Long> contractIds);
@@ -96,6 +122,12 @@ public interface ContractLaunchMapper {
/** 批量查询履行计划(按 contractIds */
List<ContractLaunchPlanDto> selectPlanByContractIds(@Param("contractIds") List<Long> contractIds);
/** 批量查询纸质归档材料(按 contractIds */
List<ContractLaunchArchivePaperDto> selectArchivePaperByContractIds(@Param("contractIds") List<Long> contractIds);
/** 批量查询电子归档材料(按 contractIds */
List<ContractLaunchArchiveEleDto> selectArchiveEleByContractIds(@Param("contractIds") List<Long> contractIds);
/** 批量查询操作日志(按 contractIds */
List<ContractLaunchLogDto> selectLogByContractIds(@Param("contractIds") List<Long> contractIds);
}
@@ -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<String, Object> payload = buildArchivePayload(contract, archiveDto);
Map<String, Object> 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<Long, List<ContractLaunchPlanDto>> planMap = contractLaunchMapper.selectPlanByContractIds(ids).stream()
.collect(Collectors.groupingBy(ContractLaunchPlanDto::getContractId));
Map<Long, List<ContractLaunchArchivePaperDto>> archivePaperMap = contractLaunchMapper.selectArchivePaperByContractIds(ids).stream()
.collect(Collectors.groupingBy(ContractLaunchArchivePaperDto::getContractId));
Map<Long, List<ContractLaunchArchiveEleDto>> archiveEleMap = contractLaunchMapper.selectArchiveEleByContractIds(ids).stream()
.collect(Collectors.groupingBy(ContractLaunchArchiveEleDto::getContractId));
Map<Long, List<ContractLaunchLogDto>> 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<ContractLaunchFileDto> 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<ContractLaunchArchiveEleDto> archiveEles = new ArrayList<>(archiveEleMap.getOrDefault(item.getId(), Collections.emptyList()));
Map<Long, List<ContractLaunchFileDto>> 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<String, Object> buildArchivePayload(ContractLaunchDto contract, ContractLaunchArchiveDto archiveDto) {
/** 构建归档报文(数据采集 V3.0 collectContractArchive 接口的 payload */
private Map<String, Object> buildArchivePayload(ContractLaunchDto contract, ContractLaunchArchiveDto archiveDto, boolean useLegalFilePayload) {
Map<String, Object> 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<Map<String, Object>> buildSettlementArchiveEleList(ContractLaunchArchiveDto archiveDto) {
if (archiveDto == null || archiveDto.getArchiveFiles() == null || archiveDto.getArchiveFiles().isEmpty()) {
private List<Map<String, Object>> 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<String, Object> 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<Map<String, Object>> buildCollectionArchiveEleList(ContractLaunchArchiveDto archiveDto, boolean useLegalFilePayload) {
if (archiveDto == null || archiveDto.getArchiveEles() == null || archiveDto.getArchiveEles().isEmpty()) {
return List.of();
}
return archiveDto.getArchiveEles().stream()
.map(item -> {
Map<String, Object> 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<String, Object> 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<String, Object> 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<ContractLaunchArchivePaperDto> 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<ContractLaunchArchiveEleDto> eles = archiveDto.getArchiveEles();
if (eles != null && !eles.isEmpty()) {
List<ContractLaunchFileDto> 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<ContractLaunchFileDto> 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);
}
@@ -82,6 +82,8 @@
<result property="sealDate" column="SEAL_DATE"/>
<result property="activeDate" column="ACTIVE_DATE"/>
<result property="archiveDate" column="ARCHIVE_DATE"/>
<result property="archiveReceiveDept" column="ARCHIVE_RECEIVE_DEPT"/>
<result property="archiveTransferor" column="ARCHIVE_TRANSFEROR"/>
<result property="archiveKeeper" column="ARCHIVE_KEEPER"/>
<result property="archiveKeeperUnit" column="ARCHIVE_KEEPER_UNIT"/>
<result property="archiveKeeperUnitCode" column="ARCHIVE_KEEPER_UNIT_CODE"/>
@@ -132,6 +134,7 @@
<id property="id" column="ID"/>
<result property="contractId" column="CONTRACT_ID"/>
<result property="fileCategory" column="FILE_CATEGORY"/>
<result property="archiveEleId" column="ARCHIVE_ELE_ID"/>
<result property="fileName" column="FILE_NAME"/>
<result property="filePath" column="FILE_PATH"/>
<result property="legalFileUrl" column="LEGAL_FILE_URL"/>
@@ -141,6 +144,24 @@
<result property="remark" column="REMARK"/>
</resultMap>
<resultMap id="ArchivePaperResult" type="com.nbport.zgwl.contractlaunch.dto.ContractLaunchArchivePaperDto">
<id property="id" column="ID"/>
<result property="contractId" column="CONTRACT_ID"/>
<result property="archivesName" column="ARCHIVES_NAME"/>
<result property="archivesNum" column="ARCHIVES_NUM"/>
<result property="archivesTime" column="ARCHIVES_TIME"/>
<result property="sortOrder" column="SORT_ORDER"/>
<result property="remark" column="REMARK"/>
</resultMap>
<resultMap id="ArchiveEleResult" type="com.nbport.zgwl.contractlaunch.dto.ContractLaunchArchiveEleDto">
<id property="id" column="ID"/>
<result property="contractId" column="CONTRACT_ID"/>
<result property="archivesName" column="ARCHIVES_NAME"/>
<result property="sortOrder" column="SORT_ORDER"/>
<result property="remark" column="REMARK"/>
</resultMap>
<resultMap id="PlanResult" type="com.nbport.zgwl.contractlaunch.dto.ContractLaunchPlanDto">
<id property="id" column="ID"/>
<result property="contractId" column="CONTRACT_ID"/>
@@ -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="selectLogSeqNextVal" resultType="java.lang.Long" useCache="false" flushCache="true">
select SEQ_SEAL_CONTRACT_LAUNCH_LOG.NEXTVAL from dual
</select>
<select id="selectArchivePaperSeqNextVal" resultType="java.lang.Long" useCache="false" flushCache="true">
select SEQ_SEAL_CONTRACT_LAUNCH_AR_PAPER.NEXTVAL from dual
</select>
<select id="selectArchiveEleSeqNextVal" resultType="java.lang.Long" useCache="false" flushCache="true">
select SEQ_SEAL_CONTRACT_LAUNCH_AR_ELE.NEXTVAL from dual
</select>
<select id="selectContractPage" resultMap="ContractLaunchResult">
<include refid="mainColumns"/>
@@ -263,7 +290,7 @@
TEMPLATE_FIELD_VALUES_JSON,
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
@@ -283,7 +310,7 @@
#{templateFieldValuesJson},
#{contractTextFileName}, #{contractTextFilePath}, #{contractTextFileType}, #{contractTextFileSize},
#{signedFileName}, #{signedFilePath}, #{signedFileType}, #{signedFileSize}, #{signedFileUrl}, #{signedOfflineReason},
#{signDate}, #{sealDate}, #{activeDate}, #{archiveDate}, #{archiveKeeper}, #{archiveKeeperUnit},
#{signDate}, #{sealDate}, #{activeDate}, #{archiveDate}, #{archiveReceiveDept}, #{archiveTransferor}, #{archiveKeeper}, #{archiveKeeperUnit},
#{archiveKeeperUnitCode}, #{invoiceDate}, #{receiveDate}, #{remindDays},
#{initiator}, #{initiatorDept}, #{companyName}, #{orgId}, #{queryScope},
#{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{isDeleted}, #{remark}
@@ -369,6 +396,8 @@
SEAL_DATE = #{sealDate},
ACTIVE_DATE = #{activeDate},
ARCHIVE_DATE = #{archiveDate},
ARCHIVE_RECEIVE_DEPT = #{archiveReceiveDept},
ARCHIVE_TRANSFEROR = #{archiveTransferor},
ARCHIVE_KEEPER = #{archiveKeeper},
ARCHIVE_KEEPER_UNIT = #{archiveKeeperUnit},
ARCHIVE_KEEPER_UNIT_CODE = #{archiveKeeperUnitCode},
@@ -422,10 +451,10 @@
INSERT ALL
<foreach collection="list" item="item">
INTO SEAL_CONTRACT_LAUNCH_FILE (
ID, CONTRACT_ID, FILE_CATEGORY, FILE_NAME, FILE_PATH, LEGAL_FILE_URL, FILE_TYPE, FILE_SIZE,
ID, CONTRACT_ID, FILE_CATEGORY, ARCHIVE_ELE_ID, FILE_NAME, FILE_PATH, LEGAL_FILE_URL, FILE_TYPE, FILE_SIZE,
SORT_ORDER, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK
) VALUES (
#{item.id}, #{item.contractId}, #{item.fileCategory}, #{item.fileName}, #{item.filePath}, #{item.legalFileUrl}, #{item.fileType}, #{item.fileSize},
#{item.id}, #{item.contractId}, #{item.fileCategory}, #{item.archiveEleId}, #{item.fileName}, #{item.filePath}, #{item.legalFileUrl}, #{item.fileType}, #{item.fileSize},
#{item.sortOrder}, #{createBy}, SYSDATE, #{updateBy}, SYSDATE, 'N', #{item.remark}
)
</foreach>
@@ -448,6 +477,34 @@
SELECT 1 FROM DUAL
</insert>
<insert id="batchInsertArchivePaper">
INSERT ALL
<foreach collection="list" item="item">
INTO SEAL_CONTRACT_LAUNCH_AR_PAPER (
ID, CONTRACT_ID, ARCHIVES_NAME, ARCHIVES_NUM, ARCHIVES_TIME, SORT_ORDER,
CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK
) VALUES (
#{item.id}, #{item.contractId}, #{item.archivesName}, #{item.archivesNum}, #{item.archivesTime}, #{item.sortOrder},
#{createBy}, SYSDATE, #{updateBy}, SYSDATE, 'N', #{item.remark}
)
</foreach>
SELECT 1 FROM DUAL
</insert>
<insert id="batchInsertArchiveEle">
INSERT ALL
<foreach collection="list" item="item">
INTO SEAL_CONTRACT_LAUNCH_AR_ELE (
ID, CONTRACT_ID, ARCHIVES_NAME, SORT_ORDER,
CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK
) VALUES (
#{item.id}, #{item.contractId}, #{item.archivesName}, #{item.sortOrder},
#{createBy}, SYSDATE, #{updateBy}, SYSDATE, 'N', #{item.remark}
)
</foreach>
SELECT 1 FROM DUAL
</insert>
<insert id="insertLog" parameterType="com.nbport.zgwl.contractlaunch.dto.ContractLaunchLogDto">
insert into SEAL_CONTRACT_LAUNCH_LOG (
ID, CONTRACT_ID, ACTION_TYPE, ACTION_NAME, ACTION_STATUS, OPERATOR_NAME, OPERATOR_PHONE,
@@ -504,6 +561,24 @@
and IS_DELETED = 'N'
</update>
<update id="deleteArchivePaperByContractId">
update SEAL_CONTRACT_LAUNCH_AR_PAPER
set IS_DELETED = 'Y',
UPDATE_BY = #{updateBy},
UPDATE_TIME = SYSDATE
where CONTRACT_ID = #{contractId}
and IS_DELETED = 'N'
</update>
<update id="deleteArchiveEleByContractId">
update SEAL_CONTRACT_LAUNCH_AR_ELE
set IS_DELETED = 'Y',
UPDATE_BY = #{updateBy},
UPDATE_TIME = SYSDATE
where CONTRACT_ID = #{contractId}
and IS_DELETED = 'N'
</update>
<select id="selectPartyByContractIds" resultMap="PartyResult">
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 @@
</select>
<select id="selectFileByContractIds" resultMap="FileResult">
select ID, CONTRACT_ID, FILE_CATEGORY, FILE_NAME, FILE_PATH, LEGAL_FILE_URL, FILE_TYPE, FILE_SIZE, SORT_ORDER, REMARK
select ID, CONTRACT_ID, FILE_CATEGORY, ARCHIVE_ELE_ID, FILE_NAME, FILE_PATH, LEGAL_FILE_URL, FILE_TYPE, FILE_SIZE, SORT_ORDER, REMARK
from SEAL_CONTRACT_LAUNCH_FILE
where IS_DELETED = 'N'
and CONTRACT_ID in
@@ -542,6 +617,28 @@
order by CONTRACT_ID asc, PLAN_TIME asc, ID asc
</select>
<select id="selectArchivePaperByContractIds" resultMap="ArchivePaperResult">
select ID, CONTRACT_ID, ARCHIVES_NAME, ARCHIVES_NUM, ARCHIVES_TIME, SORT_ORDER, REMARK
from SEAL_CONTRACT_LAUNCH_AR_PAPER
where IS_DELETED = 'N'
and CONTRACT_ID in
<foreach collection="contractIds" item="contractId" open="(" separator="," close=")">
#{contractId}
</foreach>
order by CONTRACT_ID asc, SORT_ORDER asc, ID asc
</select>
<select id="selectArchiveEleByContractIds" resultMap="ArchiveEleResult">
select ID, CONTRACT_ID, ARCHIVES_NAME, SORT_ORDER, REMARK
from SEAL_CONTRACT_LAUNCH_AR_ELE
where IS_DELETED = 'N'
and CONTRACT_ID in
<foreach collection="contractIds" item="contractId" open="(" separator="," close=")">
#{contractId}
</foreach>
order by CONTRACT_ID asc, SORT_ORDER asc, ID asc
</select>
<select id="selectLogByContractIds" resultMap="LogResult">
select ID, CONTRACT_ID, ACTION_TYPE, ACTION_NAME, ACTION_STATUS, OPERATOR_NAME, OPERATOR_PHONE,
ACTION_TIME, ACTION_CONTENT, CALLBACK_PAYLOAD, REMARK