归档功能完善

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(已完成)。 * 合同全生命周期最后一步,状态变为 completed(已完成)。
* 同时将归档信息推送到法务系统存档TODO:联调时打开 settlementPushService.pushArchive 调用)。 * 同时将归档信息按数据采集 V3.0 的合同归档接口推送到法务系统存档
* TODO:联调时打开 dataCollectionPushService.collectContractArchive 调用)。
* *
* 请求体 ContractLaunchArchiveDto 字段: * 请求体 ContractLaunchArchiveDto 字段:
* archiveKeeper - 档案保管人手机号 * archiveReceiveDept - 合同归档接收部门编码
* archiveKeeperUnit - 档案保管单位名称 * archiveTransferor - 移交人账号
* archiveKeeperUnitCode - 档案保管单位编码 * archivePapers - 纸质档案材料列表
* archiveFiles - 归档附件列表 * archiveEles - 电子档案材料列表(含 approvalAttachs
* *
* 归档附件自动保存到 file 子表(fileCategory = "archive" * 归档附件自动保存到 file 子表(fileCategory = "archive"
* 纸质/电子档案明细分别保存到独立子表。
* *
* 对应前端功能:归档按钮 → 合同完结 * 对应前端功能:归档按钮 → 合同完结
*/ */
@@ -16,15 +16,15 @@ public class ContractLaunchArchiveDto implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; 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") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime archiveDate; private LocalDateTime archiveDate;
/** 档案保管人手机号 */ /** 合同归档接收部门编码 */
private String archiveReceiveDept;
/** 移交人账号 */
private String archiveTransferor;
/** 档案保管人手机号(兼容旧归档实现保留) */
private String archiveKeeper; private String archiveKeeper;
/** 档案保管单位 */ /** 档案保管单位(兼容旧归档实现保留) */
private String archiveKeeperUnit; private String archiveKeeperUnit;
/** 档案保管单位编码 */ /** 档案保管单位编码(兼容旧归档实现保留) */
private String archiveKeeperUnitCode; private String archiveKeeperUnitCode;
// ==================== 业务扩展字段(财务提醒) ==================== // ==================== 业务扩展字段(财务提醒) ====================
@@ -377,6 +383,12 @@ public class ContractLaunchDto implements Serializable {
/** 履行计划列表 */ /** 履行计划列表 */
private List<ContractLaunchPlanDto> performancePlans = new ArrayList<>(); private List<ContractLaunchPlanDto> performancePlans = new ArrayList<>();
/** 纸质档案材料 */
private List<ContractLaunchArchivePaperDto> archivePapers = new ArrayList<>();
/** 电子档案材料 */
private List<ContractLaunchArchiveEleDto> archiveEles = new ArrayList<>();
/** 操作日志列表 */ /** 操作日志列表 */
private List<ContractLaunchLogDto> logList = new ArrayList<>(); private List<ContractLaunchLogDto> logList = new ArrayList<>();
} }
@@ -23,6 +23,9 @@ public class ContractLaunchFileDto implements Serializable {
/** 文件分类:body-正文, gist-签订依据, other-其他附件, signed-签署文件, archive-归档文件 */ /** 文件分类:body-正文, gist-签订依据, other-其他附件, signed-签署文件, archive-归档文件 */
private String fileCategory; private String fileCategory;
/** 关联合同电子档案材料 ID(仅归档附件使用) */
private Long archiveEleId;
/** 文件名 */ /** 文件名 */
private String fileName; private String fileName;
@@ -3,6 +3,8 @@ package com.nbport.zgwl.contractlaunch.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nbport.zgwl.contractlaunch.dto.ContractLaunchDto; 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.ContractLaunchFileDto;
import com.nbport.zgwl.contractlaunch.dto.ContractLaunchLogDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchLogDto;
import com.nbport.zgwl.contractlaunch.dto.ContractLaunchPartyDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchPartyDto;
@@ -29,6 +31,12 @@ public interface ContractLaunchMapper {
/** 获取日志表序列 */ /** 获取日志表序列 */
Long selectLogSeqNextVal(); Long selectLogSeqNextVal();
/** 获取纸质归档表序列 */
Long selectArchivePaperSeqNextVal();
/** 获取电子归档表序列 */
Long selectArchiveEleSeqNextVal();
/** 分页查询合同列表 */ /** 分页查询合同列表 */
IPage<ContractLaunchDto> selectContractPage(Page<ContractLaunchDto> page, @Param("query") ContractLaunchQueryDto queryDto); IPage<ContractLaunchDto> selectContractPage(Page<ContractLaunchDto> page, @Param("query") ContractLaunchQueryDto queryDto);
@@ -62,6 +70,16 @@ public interface ContractLaunchMapper {
@Param("createBy") String createBy, @Param("createBy") String createBy,
@Param("updateBy") String updateBy); @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); int insertLog(ContractLaunchLogDto logDto);
@@ -87,6 +105,14 @@ public interface ContractLaunchMapper {
int deletePlanByContractId(@Param("contractId") Long contractId, int deletePlanByContractId(@Param("contractId") Long contractId,
@Param("updateBy") String updateBy); @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 */ /** 批量查询合同方(按 contractIds */
List<ContractLaunchPartyDto> selectPartyByContractIds(@Param("contractIds") List<Long> contractIds); List<ContractLaunchPartyDto> selectPartyByContractIds(@Param("contractIds") List<Long> contractIds);
@@ -96,6 +122,12 @@ public interface ContractLaunchMapper {
/** 批量查询履行计划(按 contractIds */ /** 批量查询履行计划(按 contractIds */
List<ContractLaunchPlanDto> selectPlanByContractIds(@Param("contractIds") List<Long> 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 */ /** 批量查询操作日志(按 contractIds */
List<ContractLaunchLogDto> selectLogByContractIds(@Param("contractIds") List<Long> 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.common.PageResult;
import com.nbport.zgwl.contractlaunch.dto.ContractLaunchApproveDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchApproveDto;
import com.nbport.zgwl.contractlaunch.dto.ContractLaunchArchiveDto; 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.ContractLaunchDto;
import com.nbport.zgwl.contractlaunch.dto.ContractLaunchFileDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchFileDto;
import com.nbport.zgwl.contractlaunch.dto.ContractLaunchLogDto; import com.nbport.zgwl.contractlaunch.dto.ContractLaunchLogDto;
@@ -489,32 +491,29 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
throw new ServiceException("当前状态不允许归档"); throw new ServiceException("当前状态不允许归档");
} }
SysUserEntity currentUser = adminSecurityManage.getUser(); SysUserEntity currentUser = adminSecurityManage.getUser();
contract.setArchiveDate(LocalDateTime.now()); validateArchiveRequest(archiveDto);
contract.setArchiveKeeper(archiveDto == null ? null : archiveDto.getArchiveKeeper()); LocalDateTime now = LocalDateTime.now();
contract.setArchiveKeeperUnit(archiveDto == null ? null : archiveDto.getArchiveKeeperUnit()); contract.setArchiveDate(now);
contract.setArchiveKeeperUnitCode(archiveDto == null ? null : archiveDto.getArchiveKeeperUnitCode()); 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.setStatus(ContractLaunchConstants.STATUS_COMPLETED);
contract.setUpdateBy(currentUser.getUsername()); contract.setUpdateBy(currentUser.getUsername());
contract.setUpdateTime(LocalDateTime.now()); contract.setUpdateTime(now);
contractLaunchMapper.updateContract(contract); contractLaunchMapper.updateContract(contract);
replaceArchiveChildren(id, archiveDto, currentUser.getUsername());
if (archiveDto != null && archiveDto.getArchiveFiles() != null && !archiveDto.getArchiveFiles().isEmpty()) { Map<String, Object> payload = buildArchivePayload(contract, archiveDto, false);
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);
log.info("合同归档参数:{}", JsonUtils.toJson(payload)); log.info("合同归档参数:{}", JsonUtils.toJson(payload));
insertLog(id, ContractLaunchConstants.ACTION_ARCHIVE, "合同归档", ContractLaunchConstants.ACTION_STATUS_PENDING, "合同归档接口当前先注释,使用测试按钮流转", payload, currentUser); insertLog(id, ContractLaunchConstants.ACTION_ARCHIVE, "合同归档", ContractLaunchConstants.ACTION_STATUS_PENDING, "合同归档接口当前先注释,使用测试按钮流转", payload, currentUser);
// TODO: 法务接口当前不可用,真实联调时打开下面调用即可 // TODO: 法务接口当前不可用,真实联调时打开下面调用即可
// PushPayloadDTO requestDTO = new PushPayloadDTO(); // PushPayloadDTO requestDTO = new PushPayloadDTO();
// requestDTO.setPayload(payload); // requestDTO.setPayload(buildArchivePayload(contract, archiveDto, true));
// settlementPushService.pushArchive(requestDTO);
// dataCollectionPushService.collectContractArchive(requestDTO); // dataCollectionPushService.collectContractArchive(requestDTO);
return getDetail(id); return getDetail(id);
@@ -791,14 +790,26 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
.collect(Collectors.groupingBy(ContractLaunchFileDto::getContractId)); .collect(Collectors.groupingBy(ContractLaunchFileDto::getContractId));
Map<Long, List<ContractLaunchPlanDto>> planMap = contractLaunchMapper.selectPlanByContractIds(ids).stream() Map<Long, List<ContractLaunchPlanDto>> planMap = contractLaunchMapper.selectPlanByContractIds(ids).stream()
.collect(Collectors.groupingBy(ContractLaunchPlanDto::getContractId)); .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 Map<Long, List<ContractLaunchLogDto>> logMap = includeLogs
? contractLaunchMapper.selectLogByContractIds(ids).stream().collect(Collectors.groupingBy(ContractLaunchLogDto::getContractId)) ? contractLaunchMapper.selectLogByContractIds(ids).stream().collect(Collectors.groupingBy(ContractLaunchLogDto::getContractId))
: Collections.emptyMap(); : Collections.emptyMap();
list.forEach(item -> { list.forEach(item -> {
item.setPartyList(new ArrayList<>(partyMap.getOrDefault(item.getId(), Collections.emptyList()))); 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.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.setLogList(new ArrayList<>(logMap.getOrDefault(item.getId(), Collections.emptyList())));
item.setCounterpartySummary( item.setCounterpartySummary(
item.getPartyList().stream() item.getPartyList().stream()
@@ -1263,16 +1274,16 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
return "GZBSQRQZ".equals(sealType) || "HTZYZBSQRQZ".equals(sealType); return "GZBSQRQZ".equals(sealType) || "HTZYZBSQRQZ".equals(sealType);
} }
/** 构建归档报文(pushArchive 接口的 payload */ /** 构建归档报文(数据采集 V3.0 collectContractArchive 接口的 payload */
private Map<String, Object> buildArchivePayload(ContractLaunchDto contract, ContractLaunchArchiveDto archiveDto) { private Map<String, Object> buildArchivePayload(ContractLaunchDto contract, ContractLaunchArchiveDto archiveDto, boolean useLegalFilePayload) {
Map<String, Object> payload = new LinkedHashMap<>(); Map<String, Object> payload = new LinkedHashMap<>();
payload.put("contractCode", contract.getLawContractCode()); payload.put("c_code", contract.getLawContractCode() == null || contract.getLawContractCode().isBlank()
payload.put("contractSysId", contract.getContractSysId()); ? contract.getContractCode()
payload.put("Keeper", archiveDto == null ? null : archiveDto.getArchiveKeeper()); : contract.getLawContractCode());
payload.put("KeeperUnit", archiveDto == null ? null : archiveDto.getArchiveKeeperUnit()); payload.put("c_receiveDept", archiveDto == null ? null : archiveDto.getArchiveReceiveDept());
payload.put("KeeperUnitCode", archiveDto == null ? null : archiveDto.getArchiveKeeperUnitCode()); payload.put("c_transferor", archiveDto == null ? null : archiveDto.getArchiveTransferor());
payload.put("archivePapers", List.of()); payload.put("c_papers", buildCollectionArchivePaperList(archiveDto));
payload.put("archiveEles", buildSettlementArchiveEleList(archiveDto)); payload.put("c_elcs", buildCollectionArchiveEleList(archiveDto, useLegalFilePayload));
return payload; return payload;
} }
@@ -1299,20 +1310,69 @@ public class ContractLaunchServiceImpl implements ContractLaunchService {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
private List<Map<String, Object>> buildSettlementArchiveEleList(ContractLaunchArchiveDto archiveDto) { private List<Map<String, Object>> buildCollectionArchivePaperList(ContractLaunchArchiveDto archiveDto) {
if (archiveDto == null || archiveDto.getArchiveFiles() == null || archiveDto.getArchiveFiles().isEmpty()) { if (archiveDto == null || archiveDto.getArchivePapers() == null || archiveDto.getArchivePapers().isEmpty()) {
return List.of(); return List.of();
} }
return archiveDto.getArchiveFiles().stream() return archiveDto.getArchivePapers().stream()
.map(item -> { .map(item -> {
Map<String, Object> map = new LinkedHashMap<>(); Map<String, Object> map = new LinkedHashMap<>();
map.put("archivesName", item.getFileName()); map.put("archivesName", item.getArchivesName());
map.put("approvalAttachs", List.of(legalFileBridgeService.buildSettlementPayload(item))); map.put("archivesNum", item.getArchivesNum());
map.put("archivesTime", item.getArchivesTime());
return map; return map;
}) })
.collect(Collectors.toList()); .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,则下载到本地并返回本地路径; * 如果 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) { private boolean isPlanAmountRequired(String valuationMode) {
return !"0".equals(valuationMode) && !"3".equals(valuationMode); return !"0".equals(valuationMode) && !"3".equals(valuationMode);
} }
@@ -82,6 +82,8 @@
<result property="sealDate" column="SEAL_DATE"/> <result property="sealDate" column="SEAL_DATE"/>
<result property="activeDate" column="ACTIVE_DATE"/> <result property="activeDate" column="ACTIVE_DATE"/>
<result property="archiveDate" column="ARCHIVE_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="archiveKeeper" column="ARCHIVE_KEEPER"/>
<result property="archiveKeeperUnit" column="ARCHIVE_KEEPER_UNIT"/> <result property="archiveKeeperUnit" column="ARCHIVE_KEEPER_UNIT"/>
<result property="archiveKeeperUnitCode" column="ARCHIVE_KEEPER_UNIT_CODE"/> <result property="archiveKeeperUnitCode" column="ARCHIVE_KEEPER_UNIT_CODE"/>
@@ -132,6 +134,7 @@
<id property="id" column="ID"/> <id property="id" column="ID"/>
<result property="contractId" column="CONTRACT_ID"/> <result property="contractId" column="CONTRACT_ID"/>
<result property="fileCategory" column="FILE_CATEGORY"/> <result property="fileCategory" column="FILE_CATEGORY"/>
<result property="archiveEleId" column="ARCHIVE_ELE_ID"/>
<result property="fileName" column="FILE_NAME"/> <result property="fileName" column="FILE_NAME"/>
<result property="filePath" column="FILE_PATH"/> <result property="filePath" column="FILE_PATH"/>
<result property="legalFileUrl" column="LEGAL_FILE_URL"/> <result property="legalFileUrl" column="LEGAL_FILE_URL"/>
@@ -141,6 +144,24 @@
<result property="remark" column="REMARK"/> <result property="remark" column="REMARK"/>
</resultMap> </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"> <resultMap id="PlanResult" type="com.nbport.zgwl.contractlaunch.dto.ContractLaunchPlanDto">
<id property="id" column="ID"/> <id property="id" column="ID"/>
<result property="contractId" column="CONTRACT_ID"/> <result property="contractId" column="CONTRACT_ID"/>
@@ -185,7 +206,7 @@
EW_AMOUNT_TYPE, DJ_AMOUNT, YJ_AMOUNT, YFK_AMOUNT, BZJ_AMOUNT, BODY_SUMMARY, 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, 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, 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, ARCHIVE_KEEPER_UNIT_CODE, INVOICE_DATE, RECEIVE_DATE, REMIND_DAYS,
INITIATOR, INITIATOR_DEPT, COMPANY_NAME, ORG_ID, QUERY_SCOPE, INITIATOR, INITIATOR_DEPT, COMPANY_NAME, ORG_ID, QUERY_SCOPE,
CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK 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 id="selectLogSeqNextVal" resultType="java.lang.Long" useCache="false" flushCache="true">
select SEQ_SEAL_CONTRACT_LAUNCH_LOG.NEXTVAL from dual select SEQ_SEAL_CONTRACT_LAUNCH_LOG.NEXTVAL from dual
</select> </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"> <select id="selectContractPage" resultMap="ContractLaunchResult">
<include refid="mainColumns"/> <include refid="mainColumns"/>
@@ -263,7 +290,7 @@
TEMPLATE_FIELD_VALUES_JSON, TEMPLATE_FIELD_VALUES_JSON,
CONTRACT_TEXT_FILE_NAME, CONTRACT_TEXT_FILE_PATH, CONTRACT_TEXT_FILE_TYPE, CONTRACT_TEXT_FILE_SIZE, 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, 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, ARCHIVE_KEEPER_UNIT_CODE, INVOICE_DATE, RECEIVE_DATE, REMIND_DAYS,
INITIATOR, INITIATOR_DEPT, COMPANY_NAME, ORG_ID, QUERY_SCOPE, INITIATOR, INITIATOR_DEPT, COMPANY_NAME, ORG_ID, QUERY_SCOPE,
CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK
@@ -283,7 +310,7 @@
#{templateFieldValuesJson}, #{templateFieldValuesJson},
#{contractTextFileName}, #{contractTextFilePath}, #{contractTextFileType}, #{contractTextFileSize}, #{contractTextFileName}, #{contractTextFilePath}, #{contractTextFileType}, #{contractTextFileSize},
#{signedFileName}, #{signedFilePath}, #{signedFileType}, #{signedFileSize}, #{signedFileUrl}, #{signedOfflineReason}, #{signedFileName}, #{signedFilePath}, #{signedFileType}, #{signedFileSize}, #{signedFileUrl}, #{signedOfflineReason},
#{signDate}, #{sealDate}, #{activeDate}, #{archiveDate}, #{archiveKeeper}, #{archiveKeeperUnit}, #{signDate}, #{sealDate}, #{activeDate}, #{archiveDate}, #{archiveReceiveDept}, #{archiveTransferor}, #{archiveKeeper}, #{archiveKeeperUnit},
#{archiveKeeperUnitCode}, #{invoiceDate}, #{receiveDate}, #{remindDays}, #{archiveKeeperUnitCode}, #{invoiceDate}, #{receiveDate}, #{remindDays},
#{initiator}, #{initiatorDept}, #{companyName}, #{orgId}, #{queryScope}, #{initiator}, #{initiatorDept}, #{companyName}, #{orgId}, #{queryScope},
#{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{isDeleted}, #{remark} #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{isDeleted}, #{remark}
@@ -369,6 +396,8 @@
SEAL_DATE = #{sealDate}, SEAL_DATE = #{sealDate},
ACTIVE_DATE = #{activeDate}, ACTIVE_DATE = #{activeDate},
ARCHIVE_DATE = #{archiveDate}, ARCHIVE_DATE = #{archiveDate},
ARCHIVE_RECEIVE_DEPT = #{archiveReceiveDept},
ARCHIVE_TRANSFEROR = #{archiveTransferor},
ARCHIVE_KEEPER = #{archiveKeeper}, ARCHIVE_KEEPER = #{archiveKeeper},
ARCHIVE_KEEPER_UNIT = #{archiveKeeperUnit}, ARCHIVE_KEEPER_UNIT = #{archiveKeeperUnit},
ARCHIVE_KEEPER_UNIT_CODE = #{archiveKeeperUnitCode}, ARCHIVE_KEEPER_UNIT_CODE = #{archiveKeeperUnitCode},
@@ -422,10 +451,10 @@
INSERT ALL INSERT ALL
<foreach collection="list" item="item"> <foreach collection="list" item="item">
INTO SEAL_CONTRACT_LAUNCH_FILE ( 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 SORT_ORDER, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, IS_DELETED, REMARK
) VALUES ( ) 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} #{item.sortOrder}, #{createBy}, SYSDATE, #{updateBy}, SYSDATE, 'N', #{item.remark}
) )
</foreach> </foreach>
@@ -448,6 +477,34 @@
SELECT 1 FROM DUAL SELECT 1 FROM DUAL
</insert> </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 id="insertLog" parameterType="com.nbport.zgwl.contractlaunch.dto.ContractLaunchLogDto">
insert into SEAL_CONTRACT_LAUNCH_LOG ( insert into SEAL_CONTRACT_LAUNCH_LOG (
ID, CONTRACT_ID, ACTION_TYPE, ACTION_NAME, ACTION_STATUS, OPERATOR_NAME, OPERATOR_PHONE, ID, CONTRACT_ID, ACTION_TYPE, ACTION_NAME, ACTION_STATUS, OPERATOR_NAME, OPERATOR_PHONE,
@@ -504,6 +561,24 @@
and IS_DELETED = 'N' and IS_DELETED = 'N'
</update> </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="selectPartyByContractIds" resultMap="PartyResult">
select ID, CONTRACT_ID, ROLE_CODE, ROLE_NAME, SORT_ORDER, PARTNER_ID, OPPOSITE_ID, select ID, CONTRACT_ID, ROLE_CODE, ROLE_NAME, SORT_ORDER, PARTNER_ID, OPPOSITE_ID,
COMPANY_NAME, COMPANY_TYPE, OPPOSITE_CHARACTER, CONTACT_NAME, CONTACT_PHONE, COMPANY_NAME, COMPANY_TYPE, OPPOSITE_CHARACTER, CONTACT_NAME, CONTACT_PHONE,
@@ -520,7 +595,7 @@
</select> </select>
<select id="selectFileByContractIds" resultMap="FileResult"> <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 from SEAL_CONTRACT_LAUNCH_FILE
where IS_DELETED = 'N' where IS_DELETED = 'N'
and CONTRACT_ID in and CONTRACT_ID in
@@ -542,6 +617,28 @@
order by CONTRACT_ID asc, PLAN_TIME asc, ID asc order by CONTRACT_ID asc, PLAN_TIME asc, ID asc
</select> </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="selectLogByContractIds" resultMap="LogResult">
select ID, CONTRACT_ID, ACTION_TYPE, ACTION_NAME, ACTION_STATUS, OPERATOR_NAME, OPERATOR_PHONE, select ID, CONTRACT_ID, ACTION_TYPE, ACTION_NAME, ACTION_STATUS, OPERATOR_NAME, OPERATOR_PHONE,
ACTION_TIME, ACTION_CONTENT, CALLBACK_PAYLOAD, REMARK ACTION_TIME, ACTION_CONTENT, CALLBACK_PAYLOAD, REMARK
@@ -0,0 +1,226 @@
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'SEAL_CONTRACT_LAUNCH_MAIN'
AND COLUMN_NAME = 'ARCHIVE_RECEIVE_DEPT';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE SEAL_CONTRACT_LAUNCH_MAIN ADD ARCHIVE_RECEIVE_DEPT VARCHAR2(100 CHAR)';
END IF;
END;
/
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_RECEIVE_DEPT IS '合同归档接收部门编码';
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'SEAL_CONTRACT_LAUNCH_MAIN'
AND COLUMN_NAME = 'ARCHIVE_TRANSFEROR';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE SEAL_CONTRACT_LAUNCH_MAIN ADD ARCHIVE_TRANSFEROR VARCHAR2(64 CHAR)';
END IF;
END;
/
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_TRANSFEROR IS '移交人账号';
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'SEAL_CONTRACT_LAUNCH_FILE'
AND COLUMN_NAME = 'ARCHIVE_ELE_ID';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE SEAL_CONTRACT_LAUNCH_FILE ADD ARCHIVE_ELE_ID NUMBER(19)';
END IF;
END;
/
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.ARCHIVE_ELE_ID IS '关联合同电子档案材料ID';
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_TABLES
WHERE TABLE_NAME = 'SEAL_CONTRACT_LAUNCH_AR_PAPER';
IF v_count = 0 THEN
EXECUTE IMMEDIATE '
CREATE TABLE SEAL_CONTRACT_LAUNCH_AR_PAPER (
ID NUMBER(19) NOT NULL,
CONTRACT_ID NUMBER(19) NOT NULL,
ARCHIVES_NAME VARCHAR2(255 CHAR) NOT NULL,
ARCHIVES_NUM VARCHAR2(50 CHAR) NOT NULL,
ARCHIVES_TIME DATE NOT NULL,
SORT_ORDER NUMBER(10) DEFAULT 1,
CREATE_BY VARCHAR2(64 CHAR),
CREATE_TIME DATE DEFAULT SYSDATE,
UPDATE_BY VARCHAR2(64 CHAR),
UPDATE_TIME DATE DEFAULT SYSDATE,
IS_DELETED VARCHAR2(2 CHAR) DEFAULT ''N'',
REMARK VARCHAR2(1000 CHAR),
CONSTRAINT PK_SEAL_CONTRACT_LAUNCH_AR_PAPER PRIMARY KEY (ID)
)';
END IF;
END;
/
COMMENT ON TABLE SEAL_CONTRACT_LAUNCH_AR_PAPER IS '合同归档纸质档案材料表';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.ID IS '主键ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.CONTRACT_ID IS '合同主表ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.ARCHIVES_NAME IS '档案名称';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.ARCHIVES_NUM IS '份数';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.ARCHIVES_TIME IS '归档时间';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.SORT_ORDER IS '排序号';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.IS_DELETED IS '逻辑删除标记';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.REMARK IS '备注';
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_TABLES
WHERE TABLE_NAME = 'SEAL_CONTRACT_LAUNCH_AR_ELE';
IF v_count = 0 THEN
EXECUTE IMMEDIATE '
CREATE TABLE SEAL_CONTRACT_LAUNCH_AR_ELE (
ID NUMBER(19) NOT NULL,
CONTRACT_ID NUMBER(19) NOT NULL,
ARCHIVES_NAME VARCHAR2(255 CHAR) NOT NULL,
SORT_ORDER NUMBER(10) DEFAULT 1,
CREATE_BY VARCHAR2(64 CHAR),
CREATE_TIME DATE DEFAULT SYSDATE,
UPDATE_BY VARCHAR2(64 CHAR),
UPDATE_TIME DATE DEFAULT SYSDATE,
IS_DELETED VARCHAR2(2 CHAR) DEFAULT ''N'',
REMARK VARCHAR2(1000 CHAR),
CONSTRAINT PK_SEAL_CONTRACT_LAUNCH_AR_ELE PRIMARY KEY (ID)
)';
END IF;
END;
/
COMMENT ON TABLE SEAL_CONTRACT_LAUNCH_AR_ELE IS '合同归档电子档案材料表';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.ID IS '主键ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.CONTRACT_ID IS '合同主表ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.ARCHIVES_NAME IS '档案名称';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.SORT_ORDER IS '排序号';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.IS_DELETED IS '逻辑删除标记';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.REMARK IS '备注';
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_SEAL_CONTRACT_LAUNCH_AR_PAPER';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_AR_PAPER START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
END IF;
END;
/
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_SEAL_CONTRACT_LAUNCH_AR_ELE';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_AR_ELE START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
END IF;
END;
/
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_CONTRACT_LAUNCH_FILE_AR_ELE';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IDX_CONTRACT_LAUNCH_FILE_AR_ELE ON SEAL_CONTRACT_LAUNCH_FILE (ARCHIVE_ELE_ID)';
END IF;
END;
/
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_CONTRACT_LAUNCH_AR_PAPER_CT';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IDX_CONTRACT_LAUNCH_AR_PAPER_CT ON SEAL_CONTRACT_LAUNCH_AR_PAPER (CONTRACT_ID)';
END IF;
END;
/
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(1)
INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_CONTRACT_LAUNCH_AR_ELE_CT';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IDX_CONTRACT_LAUNCH_AR_ELE_CT ON SEAL_CONTRACT_LAUNCH_AR_ELE (CONTRACT_ID)';
END IF;
END;
/
BEGIN
EXECUTE IMMEDIATE '
UPDATE SEAL_CONTRACT_LAUNCH_MAIN
SET ARCHIVE_RECEIVE_DEPT = ARCHIVE_KEEPER_UNIT_CODE
WHERE ARCHIVE_RECEIVE_DEPT IS NULL
AND ARCHIVE_KEEPER_UNIT_CODE IS NOT NULL';
EXECUTE IMMEDIATE '
UPDATE SEAL_CONTRACT_LAUNCH_MAIN
SET ARCHIVE_TRANSFEROR = ARCHIVE_KEEPER
WHERE ARCHIVE_TRANSFEROR IS NULL
AND ARCHIVE_KEEPER IS NOT NULL';
END;
/
DECLARE
CURSOR c_files IS
SELECT ID, CONTRACT_ID, FILE_NAME
FROM SEAL_CONTRACT_LAUNCH_FILE
WHERE FILE_CATEGORY = 'archive'
AND IS_DELETED = 'N'
AND ARCHIVE_ELE_ID IS NULL;
v_ele_id NUMBER;
BEGIN
FOR rec IN c_files LOOP
SELECT SEQ_SEAL_CONTRACT_LAUNCH_AR_ELE.NEXTVAL INTO v_ele_id FROM DUAL;
INSERT 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 (
v_ele_id, rec.CONTRACT_ID, NVL(rec.FILE_NAME, '历史归档附件'), 1,
'patch', SYSDATE, 'patch', SYSDATE, 'N', '历史归档附件迁移'
);
UPDATE SEAL_CONTRACT_LAUNCH_FILE
SET ARCHIVE_ELE_ID = v_ele_id
WHERE ID = rec.ID;
END LOOP;
COMMIT;
END;
/
+67
View File
@@ -164,6 +164,8 @@ CREATE TABLE SEAL_CONTRACT_LAUNCH_MAIN (
SEAL_DATE DATE, SEAL_DATE DATE,
ACTIVE_DATE DATE, ACTIVE_DATE DATE,
ARCHIVE_DATE DATE, ARCHIVE_DATE DATE,
ARCHIVE_RECEIVE_DEPT VARCHAR2(100 CHAR),
ARCHIVE_TRANSFEROR VARCHAR2(64 CHAR),
ARCHIVE_KEEPER VARCHAR2(64 CHAR), ARCHIVE_KEEPER VARCHAR2(64 CHAR),
ARCHIVE_KEEPER_UNIT VARCHAR2(200 CHAR), ARCHIVE_KEEPER_UNIT VARCHAR2(200 CHAR),
ARCHIVE_KEEPER_UNIT_CODE VARCHAR2(100 CHAR), ARCHIVE_KEEPER_UNIT_CODE VARCHAR2(100 CHAR),
@@ -222,6 +224,7 @@ CREATE TABLE SEAL_CONTRACT_LAUNCH_FILE (
ID NUMBER(19) NOT NULL, ID NUMBER(19) NOT NULL,
CONTRACT_ID NUMBER(19) NOT NULL, CONTRACT_ID NUMBER(19) NOT NULL,
FILE_CATEGORY VARCHAR2(30 CHAR) NOT NULL, FILE_CATEGORY VARCHAR2(30 CHAR) NOT NULL,
ARCHIVE_ELE_ID NUMBER(19),
FILE_NAME VARCHAR2(255 CHAR) NOT NULL, FILE_NAME VARCHAR2(255 CHAR) NOT NULL,
FILE_PATH VARCHAR2(500 CHAR) NOT NULL, FILE_PATH VARCHAR2(500 CHAR) NOT NULL,
LEGAL_FILE_URL VARCHAR2(1000 CHAR), LEGAL_FILE_URL VARCHAR2(1000 CHAR),
@@ -237,6 +240,36 @@ CREATE TABLE SEAL_CONTRACT_LAUNCH_FILE (
CONSTRAINT PK_SEAL_CONTRACT_LAUNCH_FILE PRIMARY KEY (ID) CONSTRAINT PK_SEAL_CONTRACT_LAUNCH_FILE PRIMARY KEY (ID)
); );
CREATE TABLE SEAL_CONTRACT_LAUNCH_AR_PAPER (
ID NUMBER(19) NOT NULL,
CONTRACT_ID NUMBER(19) NOT NULL,
ARCHIVES_NAME VARCHAR2(255 CHAR) NOT NULL,
ARCHIVES_NUM VARCHAR2(50 CHAR) NOT NULL,
ARCHIVES_TIME DATE NOT NULL,
SORT_ORDER NUMBER(10) DEFAULT 1,
CREATE_BY VARCHAR2(64 CHAR),
CREATE_TIME DATE DEFAULT SYSDATE,
UPDATE_BY VARCHAR2(64 CHAR),
UPDATE_TIME DATE DEFAULT SYSDATE,
IS_DELETED VARCHAR2(2 CHAR) DEFAULT 'N',
REMARK VARCHAR2(1000 CHAR),
CONSTRAINT PK_SEAL_CONTRACT_LAUNCH_AR_PAPER PRIMARY KEY (ID)
);
CREATE TABLE SEAL_CONTRACT_LAUNCH_AR_ELE (
ID NUMBER(19) NOT NULL,
CONTRACT_ID NUMBER(19) NOT NULL,
ARCHIVES_NAME VARCHAR2(255 CHAR) NOT NULL,
SORT_ORDER NUMBER(10) DEFAULT 1,
CREATE_BY VARCHAR2(64 CHAR),
CREATE_TIME DATE DEFAULT SYSDATE,
UPDATE_BY VARCHAR2(64 CHAR),
UPDATE_TIME DATE DEFAULT SYSDATE,
IS_DELETED VARCHAR2(2 CHAR) DEFAULT 'N',
REMARK VARCHAR2(1000 CHAR),
CONSTRAINT PK_SEAL_CONTRACT_LAUNCH_AR_ELE PRIMARY KEY (ID)
);
CREATE TABLE SEAL_CONTRACT_LAUNCH_PLAN ( CREATE TABLE SEAL_CONTRACT_LAUNCH_PLAN (
ID NUMBER(19) NOT NULL, ID NUMBER(19) NOT NULL,
CONTRACT_ID NUMBER(19) NOT NULL, CONTRACT_ID NUMBER(19) NOT NULL,
@@ -352,6 +385,8 @@ COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.SIGN_DATE IS '签署日期';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.SEAL_DATE IS '用印时间'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.SEAL_DATE IS '用印时间';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ACTIVE_DATE IS '合同生效日期'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ACTIVE_DATE IS '合同生效日期';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_DATE IS '归档时间'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_DATE IS '归档时间';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_RECEIVE_DEPT IS '合同归档接收部门编码';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_TRANSFEROR IS '移交人账号';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_KEEPER IS '档案保管人'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_KEEPER IS '档案保管人';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_KEEPER_UNIT IS '档案保管单位'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_KEEPER_UNIT IS '档案保管单位';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_KEEPER_UNIT_CODE IS '档案保管单位编码'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_MAIN.ARCHIVE_KEEPER_UNIT_CODE IS '档案保管单位编码';
@@ -405,6 +440,7 @@ COMMENT ON TABLE SEAL_CONTRACT_LAUNCH_FILE IS '合同附件表';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.ID IS '主键ID'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.ID IS '主键ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.CONTRACT_ID IS '合同主表ID'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.CONTRACT_ID IS '合同主表ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.FILE_CATEGORY IS '文件分类:body/other/gist/signed/archive'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.FILE_CATEGORY IS '文件分类:body/other/gist/signed/archive';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.ARCHIVE_ELE_ID IS '关联合同电子档案材料ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.FILE_NAME IS '文件名称'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.FILE_NAME IS '文件名称';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.FILE_PATH IS '文件路径'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.FILE_PATH IS '文件路径';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.LEGAL_FILE_URL IS '法务系统附件路径缓存'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.LEGAL_FILE_URL IS '法务系统附件路径缓存';
@@ -418,6 +454,32 @@ COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.UPDATE_TIME IS '更新时间';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.IS_DELETED IS '逻辑删除标记'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.IS_DELETED IS '逻辑删除标记';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.REMARK IS '备注'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_FILE.REMARK IS '备注';
COMMENT ON TABLE SEAL_CONTRACT_LAUNCH_AR_PAPER IS '合同归档纸质档案材料表';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.ID IS '主键ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.CONTRACT_ID IS '合同主表ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.ARCHIVES_NAME IS '档案名称';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.ARCHIVES_NUM IS '份数';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.ARCHIVES_TIME IS '归档时间';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.SORT_ORDER IS '排序号';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.CREATE_BY IS '创建人';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.CREATE_TIME IS '创建时间';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.UPDATE_BY IS '更新人';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.UPDATE_TIME IS '更新时间';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.IS_DELETED IS '逻辑删除标记';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_PAPER.REMARK IS '备注';
COMMENT ON TABLE SEAL_CONTRACT_LAUNCH_AR_ELE IS '合同归档电子档案材料表';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.ID IS '主键ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.CONTRACT_ID IS '合同主表ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.ARCHIVES_NAME IS '档案名称';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.SORT_ORDER IS '排序号';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.CREATE_BY IS '创建人';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.CREATE_TIME IS '创建时间';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.UPDATE_BY IS '更新人';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.UPDATE_TIME IS '更新时间';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.IS_DELETED IS '逻辑删除标记';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_AR_ELE.REMARK IS '备注';
COMMENT ON TABLE SEAL_CONTRACT_LAUNCH_PLAN IS '合同履行计划表'; COMMENT ON TABLE SEAL_CONTRACT_LAUNCH_PLAN IS '合同履行计划表';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_PLAN.ID IS '主键ID'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_PLAN.ID IS '主键ID';
COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_PLAN.CONTRACT_ID IS '合同主表ID'; COMMENT ON COLUMN SEAL_CONTRACT_LAUNCH_PLAN.CONTRACT_ID IS '合同主表ID';
@@ -456,11 +518,16 @@ CREATE INDEX IDX_CONTRACT_LAUNCH_NAME ON SEAL_CONTRACT_LAUNCH_MAIN (CONTRACT_NAM
CREATE INDEX IDX_CONTRACT_LAUNCH_CREATE_TIME ON SEAL_CONTRACT_LAUNCH_MAIN (CREATE_TIME); CREATE INDEX IDX_CONTRACT_LAUNCH_CREATE_TIME ON SEAL_CONTRACT_LAUNCH_MAIN (CREATE_TIME);
CREATE INDEX IDX_CONTRACT_LAUNCH_PARTY_CONTRACT ON SEAL_CONTRACT_LAUNCH_PARTY (CONTRACT_ID); CREATE INDEX IDX_CONTRACT_LAUNCH_PARTY_CONTRACT ON SEAL_CONTRACT_LAUNCH_PARTY (CONTRACT_ID);
CREATE INDEX IDX_CONTRACT_LAUNCH_FILE_CONTRACT ON SEAL_CONTRACT_LAUNCH_FILE (CONTRACT_ID); CREATE INDEX IDX_CONTRACT_LAUNCH_FILE_CONTRACT ON SEAL_CONTRACT_LAUNCH_FILE (CONTRACT_ID);
CREATE INDEX IDX_CONTRACT_LAUNCH_FILE_AR_ELE ON SEAL_CONTRACT_LAUNCH_FILE (ARCHIVE_ELE_ID);
CREATE INDEX IDX_CONTRACT_LAUNCH_PLAN_CONTRACT ON SEAL_CONTRACT_LAUNCH_PLAN (CONTRACT_ID); CREATE INDEX IDX_CONTRACT_LAUNCH_PLAN_CONTRACT ON SEAL_CONTRACT_LAUNCH_PLAN (CONTRACT_ID);
CREATE INDEX IDX_CONTRACT_LAUNCH_LOG_CONTRACT ON SEAL_CONTRACT_LAUNCH_LOG (CONTRACT_ID); CREATE INDEX IDX_CONTRACT_LAUNCH_LOG_CONTRACT ON SEAL_CONTRACT_LAUNCH_LOG (CONTRACT_ID);
CREATE INDEX IDX_CONTRACT_LAUNCH_AR_PAPER_CT ON SEAL_CONTRACT_LAUNCH_AR_PAPER (CONTRACT_ID);
CREATE INDEX IDX_CONTRACT_LAUNCH_AR_ELE_CT ON SEAL_CONTRACT_LAUNCH_AR_ELE (CONTRACT_ID);
CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_MAIN START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_MAIN START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_PARTY START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_PARTY START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_FILE START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_FILE START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_AR_PAPER START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_AR_ELE START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_PLAN START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_PLAN START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_LOG START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE SEQ_SEAL_CONTRACT_LAUNCH_LOG START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;