From 3b70da2f0b7c4c2d0fc47da22daf0ba34b1a1d92 Mon Sep 17 00:00:00 2001 From: zhouxiaofeng <2946471396@qq.com> Date: Tue, 26 May 2026 10:08:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 47 + pom.xml | 123 +++ .../com/nbport/zgwl/ZgwlEndApplication.java | 18 + .../com/nbport/zgwl/common/ErrorCode.java | 21 + .../zgwl/common/GlobalErrorCodeConstants.java | 14 + .../com/nbport/zgwl/common/PageResult.java | 36 + src/main/java/com/nbport/zgwl/common/R.java | 158 +++ .../java/com/nbport/zgwl/common/Views.java | 10 + .../nbport/zgwl/config/MybatisPlusConfig.java | 39 + .../config/ContractPushConfiguration.java | 19 + .../config/ContractPushProperties.java | 66 ++ .../DataCollectionPushController.java | 84 ++ .../controller/SettlementPushController.java | 55 ++ .../dto/ApproveQueryRequestDTO.java | 24 + .../dto/ApproveViewUrlRequestDTO.java | 18 + .../zgwl/contractpush/dto/PushPayloadDTO.java | 22 + .../contractpush/dto/PushTokenRequestDTO.java | 18 + .../handler/ContractPushRequestHandler.java | 51 + .../service/DataCollectionPushService.java | 147 +++ .../service/SettlementPushService.java | 103 ++ .../utils/ContractPushHttpUtils.java | 101 ++ .../utils/ContractPushUrlUtils.java | 50 + .../zgwl/controller/MinioFileController.java | 49 + .../zgwl/controller/StudentController.java | 65 ++ .../java/com/nbport/zgwl/dto/BasePageDto.java | 43 + .../com/nbport/zgwl/dto/StudentQueryDto.java | 21 + .../com/nbport/zgwl/dto/StudentSaveDto.java | 37 + .../com/nbport/zgwl/entity/BaseEntity.java | 40 + .../com/nbport/zgwl/entity/StudentEntity.java | 43 + .../com/nbport/zgwl/entity/SysUserEntity.java | 31 + .../zgwl/exception/ServiceErrorCodeRange.java | 14 + .../zgwl/exception/ServiceException.java | 19 + .../zgwl/handler/GlobalExceptionHandler.java | 58 ++ .../zgwl/handler/MyMetaObjectHandler.java | 26 + .../ContractTemplateController.java | 74 ++ .../domain/ContractTemplateManage.java | 87 ++ .../manifest/dto/ContractTemplateDto.java | 113 +++ .../dto/ContractTemplateQueryDto.java | 27 + .../manifest/dto/TemplateOrgOptionDto.java | 26 + .../dto/TemplateVariableMappingDto.java | 29 + .../handler/ContractTemplateDataHandler.java | 161 +++ .../mapper/ContractTemplateMapper.java | 38 + .../service/ContractTemplateService.java | 28 + .../service/ContractTemplateServiceImpl.java | 146 +++ .../manifest/utils/ManifestCodeUtils.java | 56 ++ .../manifest/utils/ManifestJsonUtils.java | 41 + .../utils/ManifestManageConstants.java | 26 + .../com/nbport/zgwl/mapper/StudentMapper.java | 15 + .../controller/PartnerManageController.java | 68 ++ .../partner/domain/IldmFeeCustomerInfo.java | 224 +++++ .../partner/domain/SealPartnerContact.java | 63 ++ .../zgwl/partner/dto/PartnerContactDto.java | 47 + .../zgwl/partner/dto/PartnerManageDto.java | 243 +++++ .../zgwl/partner/dto/PartnerQueryDto.java | 29 + .../partner/handler/PartnerDataHandler.java | 219 +++++ .../partner/mapper/PartnerManageMapper.java | 61 ++ .../partner/service/PartnerManageService.java | 25 + .../service/PartnerManageServiceImpl.java | 260 +++++ .../zgwl/partner/utils/PartnerIdUtils.java | 41 + .../partner/utils/PartnerManageConstants.java | 42 + .../utils/PartnerSyncPayloadBuilder.java | 71 ++ .../nbport/zgwl/seal/config/SealConfig.java | 54 + .../zgwl/seal/config/SealWebSocketConfig.java | 34 + .../controller/SealCallbackController.java | 111 +++ .../seal/controller/SealProxyController.java | 353 +++++++ .../com/nbport/zgwl/seal/dto/SealApiDTO.java | 923 ++++++++++++++++++ .../seal/handler/SealWebSocketHandler.java | 151 +++ .../zgwl/seal/service/SealTokenService.java | 119 +++ .../zgwl/seal/utils/HMacSHA256Util.java | 40 + .../nbport/zgwl/seal/utils/SeaHttpUtils.java | 16 + .../zgwl/seal/utils/SealHttpClient.java | 179 ++++ .../nbport/zgwl/service/LocalFileService.java | 81 ++ .../nbport/zgwl/service/StudentService.java | 79 ++ .../nbport/zgwl/utils/FileStorageUtils.java | 28 + .../zgwl/utils/MockSecurityManager.java | 17 + src/main/resources/application-mysql.yml | 6 + src/main/resources/application-oracle.yml | 8 + src/main/resources/application.yml | 64 ++ src/main/resources/mapper/StudentMapper.xml | 59 ++ .../manifest/ContractTemplateMapper.xml | 131 +++ .../mapper/partner/PartnerManageMapper.xml | 238 +++++ .../2b9e71a7ef6b4c7d9da0ce936fde6b4f.docx | Bin 0 -> 10390 bytes .../6a60ec1df60a44a792e27ed1d99ef7e0.docx | Bin 0 -> 10390 bytes .../6f244579546f41b49345cc4a8621f222.png | Bin 0 -> 561565 bytes .../c7fc19bb4699442e947155619638e444.docx | Bin 0 -> 10390 bytes .../d956ff6687dd432199e1c68b81e5ecd3.docx | Bin 0 -> 10390 bytes zgwl_end.sql | 25 + zgwl_end_oracle.sql | 68 ++ zgwl_manifest_tables.sql | 37 + zgwl_manifest_tables_oracle.sql | 85 ++ zgwl_partner_tables.sql | 137 +++ zgwl_partner_tables_oracle.sql | 264 +++++ 92 files changed, 7237 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/com/nbport/zgwl/ZgwlEndApplication.java create mode 100644 src/main/java/com/nbport/zgwl/common/ErrorCode.java create mode 100644 src/main/java/com/nbport/zgwl/common/GlobalErrorCodeConstants.java create mode 100644 src/main/java/com/nbport/zgwl/common/PageResult.java create mode 100644 src/main/java/com/nbport/zgwl/common/R.java create mode 100644 src/main/java/com/nbport/zgwl/common/Views.java create mode 100644 src/main/java/com/nbport/zgwl/config/MybatisPlusConfig.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/config/ContractPushConfiguration.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/config/ContractPushProperties.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/controller/DataCollectionPushController.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/controller/SettlementPushController.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/dto/ApproveQueryRequestDTO.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/dto/ApproveViewUrlRequestDTO.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/dto/PushPayloadDTO.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/dto/PushTokenRequestDTO.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/handler/ContractPushRequestHandler.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/service/DataCollectionPushService.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/service/SettlementPushService.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/utils/ContractPushHttpUtils.java create mode 100644 src/main/java/com/nbport/zgwl/contractpush/utils/ContractPushUrlUtils.java create mode 100644 src/main/java/com/nbport/zgwl/controller/MinioFileController.java create mode 100644 src/main/java/com/nbport/zgwl/controller/StudentController.java create mode 100644 src/main/java/com/nbport/zgwl/dto/BasePageDto.java create mode 100644 src/main/java/com/nbport/zgwl/dto/StudentQueryDto.java create mode 100644 src/main/java/com/nbport/zgwl/dto/StudentSaveDto.java create mode 100644 src/main/java/com/nbport/zgwl/entity/BaseEntity.java create mode 100644 src/main/java/com/nbport/zgwl/entity/StudentEntity.java create mode 100644 src/main/java/com/nbport/zgwl/entity/SysUserEntity.java create mode 100644 src/main/java/com/nbport/zgwl/exception/ServiceErrorCodeRange.java create mode 100644 src/main/java/com/nbport/zgwl/exception/ServiceException.java create mode 100644 src/main/java/com/nbport/zgwl/handler/GlobalExceptionHandler.java create mode 100644 src/main/java/com/nbport/zgwl/handler/MyMetaObjectHandler.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/controller/ContractTemplateController.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/domain/ContractTemplateManage.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/dto/ContractTemplateDto.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/dto/ContractTemplateQueryDto.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/dto/TemplateOrgOptionDto.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/dto/TemplateVariableMappingDto.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/handler/ContractTemplateDataHandler.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/mapper/ContractTemplateMapper.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/service/ContractTemplateService.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/service/ContractTemplateServiceImpl.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/utils/ManifestCodeUtils.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/utils/ManifestJsonUtils.java create mode 100644 src/main/java/com/nbport/zgwl/manifest/utils/ManifestManageConstants.java create mode 100644 src/main/java/com/nbport/zgwl/mapper/StudentMapper.java create mode 100644 src/main/java/com/nbport/zgwl/partner/controller/PartnerManageController.java create mode 100644 src/main/java/com/nbport/zgwl/partner/domain/IldmFeeCustomerInfo.java create mode 100644 src/main/java/com/nbport/zgwl/partner/domain/SealPartnerContact.java create mode 100644 src/main/java/com/nbport/zgwl/partner/dto/PartnerContactDto.java create mode 100644 src/main/java/com/nbport/zgwl/partner/dto/PartnerManageDto.java create mode 100644 src/main/java/com/nbport/zgwl/partner/dto/PartnerQueryDto.java create mode 100644 src/main/java/com/nbport/zgwl/partner/handler/PartnerDataHandler.java create mode 100644 src/main/java/com/nbport/zgwl/partner/mapper/PartnerManageMapper.java create mode 100644 src/main/java/com/nbport/zgwl/partner/service/PartnerManageService.java create mode 100644 src/main/java/com/nbport/zgwl/partner/service/PartnerManageServiceImpl.java create mode 100644 src/main/java/com/nbport/zgwl/partner/utils/PartnerIdUtils.java create mode 100644 src/main/java/com/nbport/zgwl/partner/utils/PartnerManageConstants.java create mode 100644 src/main/java/com/nbport/zgwl/partner/utils/PartnerSyncPayloadBuilder.java create mode 100644 src/main/java/com/nbport/zgwl/seal/config/SealConfig.java create mode 100644 src/main/java/com/nbport/zgwl/seal/config/SealWebSocketConfig.java create mode 100644 src/main/java/com/nbport/zgwl/seal/controller/SealCallbackController.java create mode 100644 src/main/java/com/nbport/zgwl/seal/controller/SealProxyController.java create mode 100644 src/main/java/com/nbport/zgwl/seal/dto/SealApiDTO.java create mode 100644 src/main/java/com/nbport/zgwl/seal/handler/SealWebSocketHandler.java create mode 100644 src/main/java/com/nbport/zgwl/seal/service/SealTokenService.java create mode 100644 src/main/java/com/nbport/zgwl/seal/utils/HMacSHA256Util.java create mode 100644 src/main/java/com/nbport/zgwl/seal/utils/SeaHttpUtils.java create mode 100644 src/main/java/com/nbport/zgwl/seal/utils/SealHttpClient.java create mode 100644 src/main/java/com/nbport/zgwl/service/LocalFileService.java create mode 100644 src/main/java/com/nbport/zgwl/service/StudentService.java create mode 100644 src/main/java/com/nbport/zgwl/utils/FileStorageUtils.java create mode 100644 src/main/java/com/nbport/zgwl/utils/MockSecurityManager.java create mode 100644 src/main/resources/application-mysql.yml create mode 100644 src/main/resources/application-oracle.yml create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/mapper/StudentMapper.xml create mode 100644 src/main/resources/mapper/manifest/ContractTemplateMapper.xml create mode 100644 src/main/resources/mapper/partner/PartnerManageMapper.xml create mode 100644 upload-files/20260522/2b9e71a7ef6b4c7d9da0ce936fde6b4f.docx create mode 100644 upload-files/20260522/6a60ec1df60a44a792e27ed1d99ef7e0.docx create mode 100644 upload-files/20260522/6f244579546f41b49345cc4a8621f222.png create mode 100644 upload-files/20260522/c7fc19bb4699442e947155619638e444.docx create mode 100644 upload-files/20260522/d956ff6687dd432199e1c68b81e5ecd3.docx create mode 100644 zgwl_end.sql create mode 100644 zgwl_end_oracle.sql create mode 100644 zgwl_manifest_tables.sql create mode 100644 zgwl_manifest_tables_oracle.sql create mode 100644 zgwl_partner_tables.sql create mode 100644 zgwl_partner_tables_oracle.sql diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed8368a --- /dev/null +++ b/.gitignore @@ -0,0 +1,47 @@ +###################################################################### +# Build Tools + +.gradle +/build/ +!gradle/wrapper/gradle-wrapper.jar + +target/ +!.mvn/wrapper/maven-wrapper.jar + +###################################################################### +# IDE + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### JRebel ### +rebel.xml + +### NetBeans ### +nbproject/private/ +build/* +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ + +###################################################################### +# Others +*.log +*.xml.versionsBackup +*.swp + +!*/build/*.java +!*/build/*.html +!*/build/*.xml diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ba835b9 --- /dev/null +++ b/pom.xml @@ -0,0 +1,123 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 3.2.5 + + + + com.nbport + zgwl-end + 1.0.0-SNAPSHOT + zgwl-end + zgwl-end single module demo + jar + + + 17 + 3.5.11 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.2.0 + + + com.baomidou + mybatis-plus-spring-boot3-starter + ${mybatis-plus.version} + + + com.baomidou + mybatis-plus-jsqlparser + ${mybatis-plus.version} + + + com.mysql + mysql-connector-j + runtime + + + com.oracle.database.jdbc + ojdbc11 + runtime + + + cn.hutool + hutool-all + 5.8.16 + + + com.alibaba + easyexcel + 3.3.2 + + + org.apache.xmlbeans + xmlbeans + 3.1.0 + + + com.alibaba.fastjson2 + fastjson2 + 2.0.47 + + + net.coobird + thumbnailator + 0.4.8 + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.projectlombok + lombok + 1.18.32 + + + + + + + diff --git a/src/main/java/com/nbport/zgwl/ZgwlEndApplication.java b/src/main/java/com/nbport/zgwl/ZgwlEndApplication.java new file mode 100644 index 0000000..d1efab7 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/ZgwlEndApplication.java @@ -0,0 +1,18 @@ +package com.nbport.zgwl; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@MapperScan({ + "com.nbport.zgwl.mapper", + "com.nbport.zgwl.partner.mapper", + "com.nbport.zgwl.manifest.mapper" +}) +@SpringBootApplication +public class ZgwlEndApplication { + + public static void main(String[] args) { + SpringApplication.run(ZgwlEndApplication.class, args); + } +} diff --git a/src/main/java/com/nbport/zgwl/common/ErrorCode.java b/src/main/java/com/nbport/zgwl/common/ErrorCode.java new file mode 100644 index 0000000..25910df --- /dev/null +++ b/src/main/java/com/nbport/zgwl/common/ErrorCode.java @@ -0,0 +1,21 @@ +package com.nbport.zgwl.common; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ErrorCode implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String code; + + private String msg; +} diff --git a/src/main/java/com/nbport/zgwl/common/GlobalErrorCodeConstants.java b/src/main/java/com/nbport/zgwl/common/GlobalErrorCodeConstants.java new file mode 100644 index 0000000..53ecac6 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/common/GlobalErrorCodeConstants.java @@ -0,0 +1,14 @@ +package com.nbport.zgwl.common; + +import com.nbport.zgwl.exception.ServiceErrorCodeRange; + +public interface GlobalErrorCodeConstants { + + ErrorCode SUCCESS = new ErrorCode("0000", "成功"); + ErrorCode ERROR = new ErrorCode("9999", "失败"); + ErrorCode USER_NOT_FOUND = new ErrorCode(ServiceErrorCodeRange.USER_NOT_FOUND, "用户不存在"); + ErrorCode USERNAME_OR_PWD_ERROR = new ErrorCode(ServiceErrorCodeRange.USERNAME_OR_PWD_ERROR, "用户名或密码错误"); + ErrorCode USER_NOT_FOUND_OR_NO_DEFAULT = new ErrorCode(ServiceErrorCodeRange.USER_NOT_FOUND, "用户不存在或多租户未配置"); + ErrorCode UNKNOWN = new ErrorCode(ServiceErrorCodeRange.DEFAULT, "未知错误"); + ErrorCode PARAMS_ERROR = new ErrorCode(ServiceErrorCodeRange.DEFAULT, "参数不正确"); +} diff --git a/src/main/java/com/nbport/zgwl/common/PageResult.java b/src/main/java/com/nbport/zgwl/common/PageResult.java new file mode 100644 index 0000000..3b5c5d1 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/common/PageResult.java @@ -0,0 +1,36 @@ +package com.nbport.zgwl.common; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@Data +@NoArgsConstructor +public class PageResult implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long pageNo; + + private Long pageSize; + + private Long total; + + private Long totalPage; + + private List records = new ArrayList<>(); + + public PageResult(IPage page) { + this.pageNo = page.getCurrent(); + this.pageSize = page.getSize(); + this.total = page.getTotal(); + this.totalPage = page.getPages(); + this.records = page.getRecords(); + } +} diff --git a/src/main/java/com/nbport/zgwl/common/R.java b/src/main/java/com/nbport/zgwl/common/R.java new file mode 100644 index 0000000..618994d --- /dev/null +++ b/src/main/java/com/nbport/zgwl/common/R.java @@ -0,0 +1,158 @@ +package com.nbport.zgwl.common; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonView; +import com.nbport.zgwl.exception.ServiceErrorCodeRange; +import com.nbport.zgwl.exception.ServiceException; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Objects; + +public class R implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "响应状态码", example = "0000") + @JsonView(Views.Public.class) + private String code; + + @Schema(description = "响应数据") + @JsonView(Views.Public.class) + private T result; + + @Schema(description = "响应消息", example = "操作成功") + @JsonView(Views.Public.class) + private String message; + + public static R error(R result) { + return error(result.getCode(), result.getMessage()); + } + + public static R error(String code, String message) { + if (Objects.equals(GlobalErrorCodeConstants.SUCCESS.getCode(), code)) { + throw new ServiceException(ServiceErrorCodeRange.DEFAULT, "code 必须是错误的!"); + } + R result = new R<>(); + result.code = code; + result.message = message; + return result; + } + + public static R error(ErrorCode errorCode) { + return error(errorCode.getCode(), errorCode.getMsg()); + } + + public static R success(T data) { + R result = new R<>(); + result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); + result.result = data; + result.message = ""; + return result; + } + + public static R success(String message) { + R result = new R<>(); + result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); + result.result = null; + result.message = message; + return result; + } + + public static R success(String code, String message) { + R result = new R<>(); + result.code = code; + result.result = null; + result.message = message; + return result; + } + + public static R error(String message) { + R result = new R<>(); + result.code = GlobalErrorCodeConstants.ERROR.getCode(); + result.result = null; + result.message = message; + return result; + } + + public static R success() { + R result = new R<>(); + result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); + result.result = null; + result.message = ""; + return result; + } + + public static R data(String message, T data) { + R result = new R<>(); + result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); + result.result = data; + result.message = message; + return result; + } + + public static R data(T data) { + R result = new R<>(); + result.code = GlobalErrorCodeConstants.SUCCESS.getCode(); + result.result = data; + result.message = null; + return result; + } + + public static boolean isSuccess(String code) { + return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode()); + } + + @JsonIgnore + public boolean isSuccess() { + return isSuccess(code); + } + + @JsonIgnore + public boolean isError() { + return !isSuccess(); + } + + public void checkError() throws ServiceException { + if (isSuccess()) { + return; + } + throw new ServiceException(code, message); + } + + @JsonIgnore + public T getCheckedData() { + checkError(); + return result; + } + + public static R error(ServiceException serviceException) { + return error(serviceException.getCode(), serviceException.getMessage()); + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public T getResult() { + return result; + } + + public void setResult(T result) { + this.result = result; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/src/main/java/com/nbport/zgwl/common/Views.java b/src/main/java/com/nbport/zgwl/common/Views.java new file mode 100644 index 0000000..dbabad3 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/common/Views.java @@ -0,0 +1,10 @@ +package com.nbport.zgwl.common; + +public class Views { + + private Views() { + } + + public interface Public { + } +} diff --git a/src/main/java/com/nbport/zgwl/config/MybatisPlusConfig.java b/src/main/java/com/nbport/zgwl/config/MybatisPlusConfig.java new file mode 100644 index 0000000..372b152 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/config/MybatisPlusConfig.java @@ -0,0 +1,39 @@ +package com.nbport.zgwl.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MybatisPlusConfig { + + @Value("${spring.datasource.url:}") + private String datasourceUrl; + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + PaginationInnerInterceptor paginationInnerInterceptor = + new PaginationInnerInterceptor(resolveDbType(datasourceUrl)); + paginationInnerInterceptor.setMaxLimit(500L); + interceptor.addInnerInterceptor(paginationInnerInterceptor); + return interceptor; + } + + private DbType resolveDbType(String jdbcUrl) { + if (jdbcUrl == null) { + return DbType.MYSQL; + } + String url = jdbcUrl.toLowerCase(); + if (url.startsWith("jdbc:oracle:")) { + return DbType.ORACLE; + } + if (url.startsWith("jdbc:mysql:")) { + return DbType.MYSQL; + } + return DbType.MYSQL; + } +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/config/ContractPushConfiguration.java b/src/main/java/com/nbport/zgwl/contractpush/config/ContractPushConfiguration.java new file mode 100644 index 0000000..c19deeb --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/config/ContractPushConfiguration.java @@ -0,0 +1,19 @@ +package com.nbport.zgwl.contractpush.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +/** + * 推送模块基础配置 + */ +@Configuration +@EnableConfigurationProperties(ContractPushProperties.class) +public class ContractPushConfiguration { + + @Bean + public RestTemplate contractPushRestTemplate() { + return new RestTemplate(); + } +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/config/ContractPushProperties.java b/src/main/java/com/nbport/zgwl/contractpush/config/ContractPushProperties.java new file mode 100644 index 0000000..f1c2ba1 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/config/ContractPushProperties.java @@ -0,0 +1,66 @@ +package com.nbport.zgwl.contractpush.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 合同推送相关配置 + * 默认从 application.yml 读取测试地址 + * 生产环境可以通过 application-prod.yml 覆盖 + */ +@Data +@ConfigurationProperties(prefix = "contract-push") +public class ContractPushProperties { + + private Settlement settlement = new Settlement(); + + private DataCollection dataCollection = new DataCollection(); + + @Data + public static class Settlement { + + private String systemKey; + + private String secretKey; + + private String tokenUrl; + + private String pushContractUrl; + + private String approveQueryUrl; + + private String archiveUrl; + + private String approveViewBaseUrl; + } + + @Data + public static class DataCollection { + + private String systemKey; + + private String secretKey; + + private String sysCode; + + private String tokenUrl; + + private String uploadUrl; + + private String collectOppositesUrl; + + private String collectZtbsUrl; + + private String collectContractUrl; + + private String collectPlanFeedbackUrl; + + private String collectContractCloseUrl; + + private String collectContractArchiveUrl; + + private String queryApproveInfoUrl; + + private String approveViewBaseUrl; + } +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/controller/DataCollectionPushController.java b/src/main/java/com/nbport/zgwl/contractpush/controller/DataCollectionPushController.java new file mode 100644 index 0000000..dc12d8e --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/controller/DataCollectionPushController.java @@ -0,0 +1,84 @@ +package com.nbport.zgwl.contractpush.controller; + +import com.nbport.zgwl.common.R; +import com.nbport.zgwl.contractpush.dto.ApproveQueryRequestDTO; +import com.nbport.zgwl.contractpush.dto.ApproveViewUrlRequestDTO; +import com.nbport.zgwl.contractpush.dto.PushPayloadDTO; +import com.nbport.zgwl.contractpush.dto.PushTokenRequestDTO; +import com.nbport.zgwl.contractpush.service.DataCollectionPushService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Map; + +/** + * 数据采集推送相关接口 + * 对应《数据采集接口规范V3.0》 + */ +@RestController +@RequestMapping("/contract/push/data-collection") +public class DataCollectionPushController { + + private final DataCollectionPushService dataCollectionPushService; + + public DataCollectionPushController(DataCollectionPushService dataCollectionPushService) { + this.dataCollectionPushService = dataCollectionPushService; + } + + @GetMapping("/token") + public R> getToken(PushTokenRequestDTO requestDTO) { + return R.success(dataCollectionPushService.getToken(requestDTO)); + } + + @PostMapping("/upload") + public R> upload(@RequestPart("file") MultipartFile file, + @RequestParam(value = "token", required = false) String token) { + return R.success(dataCollectionPushService.upload(file, token)); + } + + @PostMapping("/opposites") + public R> collectOpposites(@RequestBody PushPayloadDTO requestDTO) { + return R.success(dataCollectionPushService.collectOpposites(requestDTO)); + } + + @PostMapping("/ztbs") + public R> collectZtbs(@RequestBody PushPayloadDTO requestDTO) { + return R.success(dataCollectionPushService.collectZtbs(requestDTO)); + } + + @PostMapping("/contract") + public R> collectContract(@RequestBody PushPayloadDTO requestDTO) { + return R.success(dataCollectionPushService.collectContract(requestDTO)); + } + + @PostMapping("/plan-feedback") + public R> collectPlanFeedback(@RequestBody PushPayloadDTO requestDTO) { + return R.success(dataCollectionPushService.collectPlanFeedback(requestDTO)); + } + + @PostMapping("/close") + public R> collectContractClose(@RequestBody PushPayloadDTO requestDTO) { + return R.success(dataCollectionPushService.collectContractClose(requestDTO)); + } + + @PostMapping("/archive") + public R> collectContractArchive(@RequestBody PushPayloadDTO requestDTO) { + return R.success(dataCollectionPushService.collectContractArchive(requestDTO)); + } + + @PostMapping("/approve/query") + public R> queryApproveInfo(@RequestBody ApproveQueryRequestDTO requestDTO) { + return R.success(dataCollectionPushService.queryApproveInfo(requestDTO)); + } + + @PostMapping("/approve/view-url") + public R> buildApproveViewUrl(@RequestBody ApproveViewUrlRequestDTO requestDTO) { + return R.success(dataCollectionPushService.buildApproveViewUrl(requestDTO)); + } +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/controller/SettlementPushController.java b/src/main/java/com/nbport/zgwl/contractpush/controller/SettlementPushController.java new file mode 100644 index 0000000..0c69abc --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/controller/SettlementPushController.java @@ -0,0 +1,55 @@ +package com.nbport.zgwl.contractpush.controller; + +import com.nbport.zgwl.common.R; +import com.nbport.zgwl.contractpush.dto.ApproveQueryRequestDTO; +import com.nbport.zgwl.contractpush.dto.ApproveViewUrlRequestDTO; +import com.nbport.zgwl.contractpush.dto.PushPayloadDTO; +import com.nbport.zgwl.contractpush.dto.PushTokenRequestDTO; +import com.nbport.zgwl.contractpush.service.SettlementPushService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * 结算平台推送相关接口 + * 对应《结算平台推送合同接口文档V9.5》 + */ +@RestController +@RequestMapping("/contract/push/settlement") +public class SettlementPushController { + + private final SettlementPushService settlementPushService; + + public SettlementPushController(SettlementPushService settlementPushService) { + this.settlementPushService = settlementPushService; + } + + @GetMapping("/token") + public R> getToken(PushTokenRequestDTO requestDTO) { + return R.success(settlementPushService.getToken(requestDTO)); + } + + @PostMapping("/contract") + public R> pushContract(@RequestBody PushPayloadDTO requestDTO) { + return R.success(settlementPushService.pushContract(requestDTO)); + } + + @PostMapping("/approve/query") + public R> queryApproveInfo(@RequestBody ApproveQueryRequestDTO requestDTO) { + return R.success(settlementPushService.queryApproveInfo(requestDTO)); + } + + @PostMapping("/archive") + public R> pushArchive(@RequestBody PushPayloadDTO requestDTO) { + return R.success(settlementPushService.pushArchive(requestDTO)); + } + + @PostMapping("/approve/view-url") + public R> buildApproveViewUrl(@RequestBody ApproveViewUrlRequestDTO requestDTO) { + return R.success(settlementPushService.buildApproveViewUrl(requestDTO)); + } +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/dto/ApproveQueryRequestDTO.java b/src/main/java/com/nbport/zgwl/contractpush/dto/ApproveQueryRequestDTO.java new file mode 100644 index 0000000..f63fbce --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/dto/ApproveQueryRequestDTO.java @@ -0,0 +1,24 @@ +package com.nbport.zgwl.contractpush.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 审批信息查询 / 单点查看地址拼装请求 + */ +@Data +public class ApproveQueryRequestDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private String token; + + private String phoneNum; + + private String contractSysId; + + private String contractCode; + + private String contractId; +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/dto/ApproveViewUrlRequestDTO.java b/src/main/java/com/nbport/zgwl/contractpush/dto/ApproveViewUrlRequestDTO.java new file mode 100644 index 0000000..95157a0 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/dto/ApproveViewUrlRequestDTO.java @@ -0,0 +1,18 @@ +package com.nbport.zgwl.contractpush.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 审批查看地址拼装参数 + */ +@Data +public class ApproveViewUrlRequestDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private String contractId; + + private String ivUser; +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/dto/PushPayloadDTO.java b/src/main/java/com/nbport/zgwl/contractpush/dto/PushPayloadDTO.java new file mode 100644 index 0000000..73fb279 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/dto/PushPayloadDTO.java @@ -0,0 +1,22 @@ +package com.nbport.zgwl.contractpush.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * 通用推送请求体 + * token 不传时,Service 内部会自动获取 + * payload 直接放文档原始 JSON 结构即可 + */ +@Data +public class PushPayloadDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private String token; + + private Map payload = new LinkedHashMap<>(); +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/dto/PushTokenRequestDTO.java b/src/main/java/com/nbport/zgwl/contractpush/dto/PushTokenRequestDTO.java new file mode 100644 index 0000000..6dfb3aa --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/dto/PushTokenRequestDTO.java @@ -0,0 +1,18 @@ +package com.nbport.zgwl.contractpush.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 获取 token 时可选覆盖默认 systemKey / secretKey + */ +@Data +public class PushTokenRequestDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + private String systemKey; + + private String secretKey; +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/handler/ContractPushRequestHandler.java b/src/main/java/com/nbport/zgwl/contractpush/handler/ContractPushRequestHandler.java new file mode 100644 index 0000000..1d904ef --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/handler/ContractPushRequestHandler.java @@ -0,0 +1,51 @@ +package com.nbport.zgwl.contractpush.handler; + +import cn.hutool.core.util.StrUtil; +import com.nbport.zgwl.exception.ServiceException; +import org.springframework.stereotype.Component; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * 推送请求加工器 + * 这里只做最基础的 token、sys_code、时间戳补全,保持逻辑简单 + */ +@Component +public class ContractPushRequestHandler { + + public Map copyPayload(Map payload) { + return payload == null ? new LinkedHashMap<>() : new LinkedHashMap<>(payload); + } + + public Map prepareSettlementPayload(Map payload, String token) { + Map requestBody = copyPayload(payload); + if (StrUtil.isBlank(token)) { + throw new ServiceException("结算平台 token 不能为空"); + } + requestBody.put("token", token); + return requestBody; + } + + public Map prepareDataCollectionPayload(Map payload, String sysCode) { + Map requestBody = copyPayload(payload); + if (StrUtil.isBlank(sysCode)) { + throw new ServiceException("数据采集 sysCode 未配置"); + } + requestBody.put("sys_code", sysCode); + requestBody.putIfAbsent("timeStamp", String.valueOf(System.currentTimeMillis())); + return requestBody; + } + + public Map buildDataCollectionHeaders(String token, String systemKey, boolean includeSystemKey) { + if (StrUtil.isBlank(token)) { + throw new ServiceException("数据采集 cj_token 不能为空"); + } + Map headers = new LinkedHashMap<>(); + headers.put("cj_token", token); + if (includeSystemKey) { + headers.put("systemKey", systemKey); + } + return headers; + } +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/service/DataCollectionPushService.java b/src/main/java/com/nbport/zgwl/contractpush/service/DataCollectionPushService.java new file mode 100644 index 0000000..1497073 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/service/DataCollectionPushService.java @@ -0,0 +1,147 @@ +package com.nbport.zgwl.contractpush.service; + +import cn.hutool.core.util.StrUtil; +import com.nbport.zgwl.contractpush.config.ContractPushProperties; +import com.nbport.zgwl.contractpush.dto.ApproveQueryRequestDTO; +import com.nbport.zgwl.contractpush.dto.ApproveViewUrlRequestDTO; +import com.nbport.zgwl.contractpush.dto.PushPayloadDTO; +import com.nbport.zgwl.contractpush.dto.PushTokenRequestDTO; +import com.nbport.zgwl.contractpush.handler.ContractPushRequestHandler; +import com.nbport.zgwl.contractpush.utils.ContractPushHttpUtils; +import com.nbport.zgwl.contractpush.utils.ContractPushUrlUtils; +import com.nbport.zgwl.exception.ServiceException; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * 数据采集推送服务 + * 对应《数据采集接口规范V3.0》 + */ +@Service +public class DataCollectionPushService { + + private final ContractPushProperties properties; + private final ContractPushHttpUtils httpUtils; + private final ContractPushRequestHandler requestHandler; + + public DataCollectionPushService(ContractPushProperties properties, + ContractPushHttpUtils httpUtils, + ContractPushRequestHandler requestHandler) { + this.properties = properties; + this.httpUtils = httpUtils; + this.requestHandler = requestHandler; + } + + public Map getToken(PushTokenRequestDTO requestDTO) { + String systemKey = requestDTO != null && StrUtil.isNotBlank(requestDTO.getSystemKey()) + ? requestDTO.getSystemKey() + : properties.getDataCollection().getSystemKey(); + String secretKey = requestDTO != null && StrUtil.isNotBlank(requestDTO.getSecretKey()) + ? requestDTO.getSecretKey() + : properties.getDataCollection().getSecretKey(); + + Map query = new LinkedHashMap<>(); + query.put("systemKey", systemKey); + query.put("secretKey", secretKey); + return httpUtils.get(properties.getDataCollection().getTokenUrl(), query); + } + + public Map upload(MultipartFile file, String token) { + Map headers = requestHandler.buildDataCollectionHeaders( + resolveCollectionToken(token), + properties.getDataCollection().getSystemKey(), + true + ); + return httpUtils.postMultipart(properties.getDataCollection().getUploadUrl(), file, headers); + } + + public Map collectOpposites(PushPayloadDTO requestDTO) { + return postCollectionJson(properties.getDataCollection().getCollectOppositesUrl(), requestDTO, false); + } + + public Map collectZtbs(PushPayloadDTO requestDTO) { + return postCollectionJson(properties.getDataCollection().getCollectZtbsUrl(), requestDTO, false); + } + + public Map collectContract(PushPayloadDTO requestDTO) { + return postCollectionJson(properties.getDataCollection().getCollectContractUrl(), requestDTO, false); + } + + public Map collectPlanFeedback(PushPayloadDTO requestDTO) { + return postCollectionJson(properties.getDataCollection().getCollectPlanFeedbackUrl(), requestDTO, false); + } + + public Map collectContractClose(PushPayloadDTO requestDTO) { + return postCollectionJson(properties.getDataCollection().getCollectContractCloseUrl(), requestDTO, false); + } + + public Map collectContractArchive(PushPayloadDTO requestDTO) { + return postCollectionJson(properties.getDataCollection().getCollectContractArchiveUrl(), requestDTO, false); + } + + public Map queryApproveInfo(ApproveQueryRequestDTO requestDTO) { + Map body = new LinkedHashMap<>(); + body.put("contractCode", requestDTO == null ? null : requestDTO.getContractCode()); + body.put("contractId", requestDTO == null ? null : requestDTO.getContractId()); + body.put("phoneNum", requestDTO == null ? null : requestDTO.getPhoneNum()); + + Map headers = requestHandler.buildDataCollectionHeaders( + resolveCollectionToken(requestDTO == null ? null : requestDTO.getToken()), + properties.getDataCollection().getSystemKey(), + true + ); + Map requestBody = requestHandler.prepareDataCollectionPayload( + body, + properties.getDataCollection().getSysCode() + ); + return httpUtils.postJson(properties.getDataCollection().getQueryApproveInfoUrl(), requestBody, headers); + } + + public Map buildApproveViewUrl(ApproveViewUrlRequestDTO requestDTO) { + if (requestDTO == null || StrUtil.isBlank(requestDTO.getContractId()) || StrUtil.isBlank(requestDTO.getIvUser())) { + throw new ServiceException("contractId 和 ivUser 不能为空"); + } + Map result = new LinkedHashMap<>(); + result.put( + "approveViewUrl", + ContractPushUrlUtils.buildApproveViewUrl( + properties.getDataCollection().getApproveViewBaseUrl(), + requestDTO.getContractId(), + requestDTO.getIvUser() + ) + ); + return result; + } + + private Map postCollectionJson(String url, PushPayloadDTO requestDTO, boolean includeSystemKeyHeader) { + String token = resolveCollectionToken(requestDTO == null ? null : requestDTO.getToken()); + Map headers = requestHandler.buildDataCollectionHeaders( + token, + properties.getDataCollection().getSystemKey(), + includeSystemKeyHeader + ); + Map requestBody = requestHandler.prepareDataCollectionPayload( + requestDTO == null ? null : requestDTO.getPayload(), + properties.getDataCollection().getSysCode() + ); + return httpUtils.postJson(url, requestBody, headers); + } + + private String resolveCollectionToken(String inputToken) { + if (StrUtil.isNotBlank(inputToken)) { + return inputToken; + } + Map tokenResult = getToken(new PushTokenRequestDTO()); + Object data = tokenResult.get("data"); + if (data instanceof Map) { + Object accessToken = ((Map) data).get("access_token"); + if (accessToken != null) { + return String.valueOf(accessToken); + } + } + throw new ServiceException("获取数据采集 token 失败"); + } +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/service/SettlementPushService.java b/src/main/java/com/nbport/zgwl/contractpush/service/SettlementPushService.java new file mode 100644 index 0000000..2761420 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/service/SettlementPushService.java @@ -0,0 +1,103 @@ +package com.nbport.zgwl.contractpush.service; + +import cn.hutool.core.util.StrUtil; +import com.nbport.zgwl.contractpush.config.ContractPushProperties; +import com.nbport.zgwl.contractpush.dto.ApproveQueryRequestDTO; +import com.nbport.zgwl.contractpush.dto.ApproveViewUrlRequestDTO; +import com.nbport.zgwl.contractpush.dto.PushPayloadDTO; +import com.nbport.zgwl.contractpush.dto.PushTokenRequestDTO; +import com.nbport.zgwl.contractpush.handler.ContractPushRequestHandler; +import com.nbport.zgwl.contractpush.utils.ContractPushHttpUtils; +import com.nbport.zgwl.contractpush.utils.ContractPushUrlUtils; +import com.nbport.zgwl.exception.ServiceException; +import org.springframework.stereotype.Service; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * 结算平台推送服务 + * 对应《结算平台推送合同接口文档V9.5》 + */ +@Service +public class SettlementPushService { + + private final ContractPushProperties properties; + private final ContractPushHttpUtils httpUtils; + private final ContractPushRequestHandler requestHandler; + + public SettlementPushService(ContractPushProperties properties, + ContractPushHttpUtils httpUtils, + ContractPushRequestHandler requestHandler) { + this.properties = properties; + this.httpUtils = httpUtils; + this.requestHandler = requestHandler; + } + + public Map getToken(PushTokenRequestDTO requestDTO) { + String systemKey = requestDTO != null && StrUtil.isNotBlank(requestDTO.getSystemKey()) + ? requestDTO.getSystemKey() + : properties.getSettlement().getSystemKey(); + + Map query = new LinkedHashMap<>(); + query.put("systemKey", systemKey); + return httpUtils.get(properties.getSettlement().getTokenUrl(), query); + } + + public Map pushContract(PushPayloadDTO requestDTO) { + String token = resolveSettlementToken(requestDTO == null ? null : requestDTO.getToken()); + Map body = requestHandler.prepareSettlementPayload( + requestDTO == null ? null : requestDTO.getPayload(), + token + ); + return httpUtils.postJson(properties.getSettlement().getPushContractUrl(), body, null); + } + + public Map queryApproveInfo(ApproveQueryRequestDTO requestDTO) { + Map body = new LinkedHashMap<>(); + body.put("token", resolveSettlementToken(requestDTO == null ? null : requestDTO.getToken())); + body.put("phoneNum", requestDTO == null ? null : requestDTO.getPhoneNum()); + body.put("contractSysId", requestDTO == null ? null : requestDTO.getContractSysId()); + return httpUtils.postJson(properties.getSettlement().getApproveQueryUrl(), body, null); + } + + public Map pushArchive(PushPayloadDTO requestDTO) { + String token = resolveSettlementToken(requestDTO == null ? null : requestDTO.getToken()); + Map body = requestHandler.prepareSettlementPayload( + requestDTO == null ? null : requestDTO.getPayload(), + token + ); + return httpUtils.postJson(properties.getSettlement().getArchiveUrl(), body, null); + } + + public Map buildApproveViewUrl(ApproveViewUrlRequestDTO requestDTO) { + if (requestDTO == null || StrUtil.isBlank(requestDTO.getContractId()) || StrUtil.isBlank(requestDTO.getIvUser())) { + throw new ServiceException("contractId 和 ivUser 不能为空"); + } + Map result = new LinkedHashMap<>(); + result.put( + "approveViewUrl", + ContractPushUrlUtils.buildApproveViewUrl( + properties.getSettlement().getApproveViewBaseUrl(), + requestDTO.getContractId(), + requestDTO.getIvUser() + ) + ); + return result; + } + + private String resolveSettlementToken(String inputToken) { + if (StrUtil.isNotBlank(inputToken)) { + return inputToken; + } + Map tokenResult = getToken(new PushTokenRequestDTO()); + Object data = tokenResult.get("data"); + if (data instanceof Map) { + Object accessToken = ((Map) data).get("access_token"); + if (accessToken != null) { + return String.valueOf(accessToken); + } + } + throw new ServiceException("获取结算平台 token 失败"); + } +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/utils/ContractPushHttpUtils.java b/src/main/java/com/nbport/zgwl/contractpush/utils/ContractPushHttpUtils.java new file mode 100644 index 0000000..fae4a8b --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/utils/ContractPushHttpUtils.java @@ -0,0 +1,101 @@ +package com.nbport.zgwl.contractpush.utils; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.TypeReference; +import com.nbport.zgwl.exception.ServiceException; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * 最简单的 HTTP 调用工具 + * 当前只做 GET / POST JSON / POST MULTIPART 三种 + */ +@Component +public class ContractPushHttpUtils { + + private final RestTemplate restTemplate; + + public ContractPushHttpUtils(RestTemplate contractPushRestTemplate) { + this.restTemplate = contractPushRestTemplate; + } + + public Map get(String url, Map queryParams) { + String finalUrl = ContractPushUrlUtils.appendQuery(url, queryParams); + ResponseEntity response = restTemplate.getForEntity(finalUrl, String.class); + return parseResponse(response.getBody()); + } + + public Map postJson(String url, Map body, Map headers) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + addHeaders(httpHeaders, headers); + HttpEntity> entity = new HttpEntity<>(body, httpHeaders); + ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class); + return parseResponse(response.getBody()); + } + + public Map postMultipart(String url, MultipartFile file, Map headers) { + if (file == null || file.isEmpty()) { + throw new ServiceException("上传文件不能为空"); + } + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA); + addHeaders(httpHeaders, headers); + + MultiValueMap formData = new LinkedMultiValueMap<>(); + formData.add("file", toByteArrayResource(file)); + + HttpEntity> entity = new HttpEntity<>(formData, httpHeaders); + ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class); + return parseResponse(response.getBody()); + } + + private ByteArrayResource toByteArrayResource(MultipartFile file) { + try { + return new ByteArrayResource(file.getBytes()) { + @Override + public String getFilename() { + return file.getOriginalFilename(); + } + }; + } catch (IOException e) { + throw new ServiceException("读取上传文件失败: " + e.getMessage()); + } + } + + private void addHeaders(HttpHeaders httpHeaders, Map headers) { + if (headers == null || headers.isEmpty()) { + return; + } + headers.forEach(httpHeaders::add); + } + + private Map parseResponse(String responseBody) { + if (responseBody == null || responseBody.trim().isEmpty()) { + return Collections.emptyMap(); + } + try { + return JSON.parseObject(responseBody, new TypeReference>() { + }); + } catch (Exception ex) { + Map fallback = new LinkedHashMap<>(); + fallback.put("raw", responseBody); + return fallback; + } + } +} diff --git a/src/main/java/com/nbport/zgwl/contractpush/utils/ContractPushUrlUtils.java b/src/main/java/com/nbport/zgwl/contractpush/utils/ContractPushUrlUtils.java new file mode 100644 index 0000000..66dc340 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/contractpush/utils/ContractPushUrlUtils.java @@ -0,0 +1,50 @@ +package com.nbport.zgwl.contractpush.utils; + +import cn.hutool.core.util.StrUtil; +import com.nbport.zgwl.exception.ServiceException; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.StringJoiner; + +/** + * URL 拼装工具 + */ +public final class ContractPushUrlUtils { + + private ContractPushUrlUtils() { + } + + public static String appendQuery(String url, Map queryParams) { + if (queryParams == null || queryParams.isEmpty()) { + return url; + } + StringJoiner joiner = new StringJoiner("&"); + queryParams.forEach((key, value) -> { + if (StrUtil.isNotBlank(value)) { + joiner.add(encode(key) + "=" + encode(value)); + } + }); + return url + (url.contains("?") ? "&" : "?") + joiner; + } + + public static String buildApproveViewUrl(String baseUrl, String contractId, String ivUser) { + if (StrUtil.isBlank(baseUrl)) { + throw new ServiceException("审批查看地址未配置"); + } + Map params = new LinkedHashMap<>(); + params.put("id", contractId); + params.put("ssoToken", ivUser); + return appendQuery(baseUrl, params); + } + + private static String encode(String value) { + try { + return URLEncoder.encode(value, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new ServiceException("URL 编码失败: " + e.getMessage()); + } + } +} diff --git a/src/main/java/com/nbport/zgwl/controller/MinioFileController.java b/src/main/java/com/nbport/zgwl/controller/MinioFileController.java new file mode 100644 index 0000000..ad2eb8b --- /dev/null +++ b/src/main/java/com/nbport/zgwl/controller/MinioFileController.java @@ -0,0 +1,49 @@ +package com.nbport.zgwl.controller; + +import com.nbport.zgwl.common.R; +import com.nbport.zgwl.exception.ServiceException; +import com.nbport.zgwl.service.LocalFileService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.util.CollectionUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import java.util.Map; + +@RestController +@RequestMapping("/trans/minio/file") +@Slf4j +@RequiredArgsConstructor +@Validated +public class MinioFileController { + + private final LocalFileService localFileService; + + @PostMapping(value = "/uploadOutie", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R uploadOutie(MultipartHttpServletRequest request) { + Map fileMap = request.getFileMap(); + if (CollectionUtils.isEmpty(fileMap)) { + throw new ServiceException("请上传文件"); + } + MultipartFile file = fileMap.values().iterator().next(); + log.info("接收到上传文件请求,fileName={}", file.getOriginalFilename()); + String relativePath = localFileService.upload(file); + return R.success(relativePath); + } + + @GetMapping("/download") + public ResponseEntity download(@RequestParam("fileName") String fileName) { + log.info("接收到文件下载请求,fileName={}", fileName); + return localFileService.download(fileName); + } +} diff --git a/src/main/java/com/nbport/zgwl/controller/StudentController.java b/src/main/java/com/nbport/zgwl/controller/StudentController.java new file mode 100644 index 0000000..5df3e14 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/controller/StudentController.java @@ -0,0 +1,65 @@ +package com.nbport.zgwl.controller; + +import com.nbport.zgwl.common.PageResult; +import com.nbport.zgwl.common.R; +import com.nbport.zgwl.dto.StudentQueryDto; +import com.nbport.zgwl.dto.StudentSaveDto; +import com.nbport.zgwl.entity.StudentEntity; +import com.nbport.zgwl.entity.SysUserEntity; +import com.nbport.zgwl.service.StudentService; +import com.nbport.zgwl.utils.MockSecurityManager; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@RestController +@RequestMapping("/student") +@Slf4j +@RequiredArgsConstructor +@Validated +public class StudentController { + + private final StudentService studentService; + private final MockSecurityManager securityManager; + + @PostMapping("/list") + public R>> queryList(@RequestBody StudentQueryDto queryDto) { + SysUserEntity user = securityManager.getLoginUser(); + PageResult> pageResult = studentService.queryList(queryDto, user); + return R.success(pageResult); + } + + @GetMapping("/detail/{id}") + public R detail(@PathVariable("id") Long id) { + return R.success(studentService.detail(id)); + } + + @PostMapping("/add") + public R add(@RequestBody @Valid StudentSaveDto dto) { + log.info("新增学生请求:{}", dto); + studentService.add(dto); + return R.success("新增成功"); + } + + @PostMapping("/update") + public R update(@RequestBody @Valid StudentSaveDto dto) { + log.info("修改学生请求:{}", dto); + studentService.update(dto); + return R.success("修改成功"); + } + + @PostMapping("/delete/{id}") + public R delete(@PathVariable("id") Long id) { + studentService.delete(id); + return R.success("删除成功"); + } +} diff --git a/src/main/java/com/nbport/zgwl/dto/BasePageDto.java b/src/main/java/com/nbport/zgwl/dto/BasePageDto.java new file mode 100644 index 0000000..bb880a6 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/dto/BasePageDto.java @@ -0,0 +1,43 @@ +package com.nbport.zgwl.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BasePageDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long pageNo = 1L; + + private Long pageSize = 15L; + + private Sorter sorter; + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + public static class Sorter implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + public static final String ASC = "asc"; + + public static final String DESC = "desc"; + + private String field; + + @Builder.Default + private String order = ASC; + } +} diff --git a/src/main/java/com/nbport/zgwl/dto/StudentQueryDto.java b/src/main/java/com/nbport/zgwl/dto/StudentQueryDto.java new file mode 100644 index 0000000..7ad399e --- /dev/null +++ b/src/main/java/com/nbport/zgwl/dto/StudentQueryDto.java @@ -0,0 +1,21 @@ +package com.nbport.zgwl.dto; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = true) +public class StudentQueryDto extends BasePageDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String studentNo; + + private String studentName; + + private String gender; +} diff --git a/src/main/java/com/nbport/zgwl/dto/StudentSaveDto.java b/src/main/java/com/nbport/zgwl/dto/StudentSaveDto.java new file mode 100644 index 0000000..68aedd7 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/dto/StudentSaveDto.java @@ -0,0 +1,37 @@ +package com.nbport.zgwl.dto; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +@Data +public class StudentSaveDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + @NotBlank(message = "学号不能为空") + private String studentNo; + + @NotBlank(message = "姓名不能为空") + private String studentName; + + @NotBlank(message = "性别不能为空") + private String gender; + + @NotNull(message = "年龄不能为空") + @Min(value = 1, message = "年龄不能小于 1") + @Max(value = 120, message = "年龄不能大于 120") + private Integer age; + + private String phone; + + private String address; +} diff --git a/src/main/java/com/nbport/zgwl/entity/BaseEntity.java b/src/main/java/com/nbport/zgwl/entity/BaseEntity.java new file mode 100644 index 0000000..f68972f --- /dev/null +++ b/src/main/java/com/nbport/zgwl/entity/BaseEntity.java @@ -0,0 +1,40 @@ +package com.nbport.zgwl.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@ToString +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class BaseEntity> extends Model implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @TableField(value = "create_dt", fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createDt; + + @TableField(value = "update_dt", fill = FieldFill.UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime updateDt; + + @TableField(value = "create_by", fill = FieldFill.INSERT) + private String createBy; + + @TableField(value = "update_by", fill = FieldFill.UPDATE) + private String updateBy; +} diff --git a/src/main/java/com/nbport/zgwl/entity/StudentEntity.java b/src/main/java/com/nbport/zgwl/entity/StudentEntity.java new file mode 100644 index 0000000..2daaa6f --- /dev/null +++ b/src/main/java/com/nbport/zgwl/entity/StudentEntity.java @@ -0,0 +1,43 @@ +package com.nbport.zgwl.entity; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +@Data +@TableName(value = "BIZ_STUDENT") +@EqualsAndHashCode(callSuper = true) +@KeySequence(value = "SEQ_BIZ_STUDENT", dbType = DbType.ORACLE) +public class StudentEntity extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.INPUT) + private Long id; + + @TableField("student_no") + private String studentNo; + + @TableField("student_name") + private String studentName; + + @TableField("gender") + private String gender; + + @TableField("age") + private Integer age; + + @TableField("phone") + private String phone; + + @TableField("address") + private String address; +} diff --git a/src/main/java/com/nbport/zgwl/entity/SysUserEntity.java b/src/main/java/com/nbport/zgwl/entity/SysUserEntity.java new file mode 100644 index 0000000..6577d67 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/entity/SysUserEntity.java @@ -0,0 +1,31 @@ +package com.nbport.zgwl.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +@Data +@TableName(value = "sys_user") +@EqualsAndHashCode(callSuper = true) +public class SysUserEntity extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.INPUT) + private Long id; + + @TableField("username") + private String username; + + @TableField("mobile_phone") + private String mobilePhone; + + @TableField("email") + private String email; +} diff --git a/src/main/java/com/nbport/zgwl/exception/ServiceErrorCodeRange.java b/src/main/java/com/nbport/zgwl/exception/ServiceErrorCodeRange.java new file mode 100644 index 0000000..a69c92d --- /dev/null +++ b/src/main/java/com/nbport/zgwl/exception/ServiceErrorCodeRange.java @@ -0,0 +1,14 @@ +package com.nbport.zgwl.exception; + +public interface ServiceErrorCodeRange { + + String DEFAULT = "A0001"; + + String USER_NOT_FOUND = "A0002"; + + String USERNAME_OR_PWD_ERROR = "A0003"; + + String DATA_NOT_FOUND = "A0004"; + + String FILE_NOT_FOUND = "A0005"; +} diff --git a/src/main/java/com/nbport/zgwl/exception/ServiceException.java b/src/main/java/com/nbport/zgwl/exception/ServiceException.java new file mode 100644 index 0000000..9c924f5 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/exception/ServiceException.java @@ -0,0 +1,19 @@ +package com.nbport.zgwl.exception; + +import lombok.Getter; + +@Getter +public class ServiceException extends RuntimeException { + + private final String code; + + public ServiceException(String code, String message) { + super(message); + this.code = code; + } + + public ServiceException(String message) { + super(message); + this.code = ServiceErrorCodeRange.DEFAULT; + } +} diff --git a/src/main/java/com/nbport/zgwl/handler/GlobalExceptionHandler.java b/src/main/java/com/nbport/zgwl/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..ea9a5c3 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/handler/GlobalExceptionHandler.java @@ -0,0 +1,58 @@ +package com.nbport.zgwl.handler; + +import com.nbport.zgwl.common.GlobalErrorCodeConstants; +import com.nbport.zgwl.common.R; +import com.nbport.zgwl.exception.ServiceException; +import jakarta.validation.ConstraintViolationException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.validation.BindException; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import java.util.stream.Collectors; + +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(ServiceException.class) + public R handleServiceException(ServiceException e) { + log.error("业务异常", e); + return R.error(e); + } + + @ExceptionHandler(MethodArgumentNotValidException.class) + public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + String message = e.getBindingResult().getFieldErrors().stream() + .map(FieldError::getDefaultMessage) + .collect(Collectors.joining(";")); + return R.error(GlobalErrorCodeConstants.PARAMS_ERROR.getCode(), message); + } + + @ExceptionHandler(BindException.class) + public R handleBindException(BindException e) { + String message = e.getBindingResult().getFieldErrors().stream() + .map(FieldError::getDefaultMessage) + .collect(Collectors.joining(";")); + return R.error(GlobalErrorCodeConstants.PARAMS_ERROR.getCode(), message); + } + + @ExceptionHandler(ConstraintViolationException.class) + public R handleConstraintViolationException(ConstraintViolationException e) { + return R.error(GlobalErrorCodeConstants.PARAMS_ERROR.getCode(), e.getMessage()); + } + + @ExceptionHandler(HttpMessageNotReadableException.class) + public R handleHttpMessageNotReadableException(HttpMessageNotReadableException e) { + return R.error(GlobalErrorCodeConstants.PARAMS_ERROR.getCode(), "请求体格式不正确"); + } + + @ExceptionHandler(Exception.class) + public R handleException(Exception e) { + log.error("系统异常", e); + return R.error(GlobalErrorCodeConstants.ERROR.getCode(), e.getMessage()); + } +} diff --git a/src/main/java/com/nbport/zgwl/handler/MyMetaObjectHandler.java b/src/main/java/com/nbport/zgwl/handler/MyMetaObjectHandler.java new file mode 100644 index 0000000..577b8a0 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/handler/MyMetaObjectHandler.java @@ -0,0 +1,26 @@ +package com.nbport.zgwl.handler; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +@Component +public class MyMetaObjectHandler implements MetaObjectHandler { + + @Override + public void insertFill(MetaObject metaObject) { + LocalDateTime now = LocalDateTime.now(); + this.strictInsertFill(metaObject, "createDt", LocalDateTime.class, now); + this.strictInsertFill(metaObject, "updateDt", LocalDateTime.class, now); + this.strictInsertFill(metaObject, "createBy", String.class, "system"); + this.strictInsertFill(metaObject, "updateBy", String.class, "system"); + } + + @Override + public void updateFill(MetaObject metaObject) { + this.strictUpdateFill(metaObject, "updateDt", LocalDateTime.class, LocalDateTime.now()); + this.strictUpdateFill(metaObject, "updateBy", String.class, "system"); + } +} diff --git a/src/main/java/com/nbport/zgwl/manifest/controller/ContractTemplateController.java b/src/main/java/com/nbport/zgwl/manifest/controller/ContractTemplateController.java new file mode 100644 index 0000000..ba37e0d --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/controller/ContractTemplateController.java @@ -0,0 +1,74 @@ +package com.nbport.zgwl.manifest.controller; + +import com.nbport.zgwl.common.PageResult; +import com.nbport.zgwl.common.R; +import com.nbport.zgwl.manifest.dto.ContractTemplateDto; +import com.nbport.zgwl.manifest.dto.ContractTemplateQueryDto; +import com.nbport.zgwl.manifest.dto.TemplateOrgOptionDto; +import com.nbport.zgwl.manifest.service.ContractTemplateService; +import com.nbport.zgwl.manifest.utils.ManifestManageConstants; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 模板管理 Controller + * + * 路由尽量保持简单: + * - /list 分页 + * - /published 已发布列表 + * - /org/options 假组织选项 + * - /{id} 详情 + * - POST 新增 + * - PUT 编辑 + * - PUT /{id}/status/{status} 状态切换 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping(ManifestManageConstants.REQUEST_PREFIX) +public class ContractTemplateController { + + private final ContractTemplateService contractTemplateService; + + @PostMapping("/list") + public R> queryList(@RequestBody ContractTemplateQueryDto queryDto) { + return R.success(contractTemplateService.queryTemplateList(queryDto)); + } + + @GetMapping("/published") + public R> queryPublishedList() { + return R.success(contractTemplateService.queryPublishedTemplates()); + } + + @GetMapping("/org/options") + public R> queryOrgOptions() { + return R.success(contractTemplateService.queryOrgOptions()); + } + + @GetMapping("/{id}") + public R getDetail(@PathVariable("id") Long id) { + return R.success(contractTemplateService.getTemplateDetail(id)); + } + + @PostMapping + public R add(@RequestBody ContractTemplateDto template) { + return R.success(contractTemplateService.createTemplate(template)); + } + + @PutMapping + public R edit(@RequestBody ContractTemplateDto template) { + return R.success(contractTemplateService.updateTemplate(template)); + } + + @PutMapping("/{id}/status/{status}") + public R changeStatus(@PathVariable("id") Long id, @PathVariable("status") String status) { + return R.success(contractTemplateService.changeTemplateStatus(id, status)); + } +} diff --git a/src/main/java/com/nbport/zgwl/manifest/domain/ContractTemplateManage.java b/src/main/java/com/nbport/zgwl/manifest/domain/ContractTemplateManage.java new file mode 100644 index 0000000..8bc0b36 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/domain/ContractTemplateManage.java @@ -0,0 +1,87 @@ +package com.nbport.zgwl.manifest.domain; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +@TableName(value = "CONTRACT_TEMPLATE_MANAGE") +@Data +@EqualsAndHashCode(callSuper = false) +@KeySequence(value = "SEQ_CONTRACT_TEMPLATE_MANAGE", dbType = DbType.ORACLE) +public class ContractTemplateManage implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @TableId(value = "ID", type = IdType.INPUT) + private Long id; + + @TableField("TEMPLATE_CODE") + private String templateCode; + + @TableField("TEMPLATE_NAME") + private String templateName; + + @TableField("SOURCE") + private String source; + + @TableField("CONTRACT_TYPE") + private String contractType; + + @TableField("SELF_PARTY_ROLE") + private String selfPartyRole; + + @TableField("VERSION") + private String version; + + @TableField("STATUS") + private String status; + + @TableField("VARIABLE_COUNT") + private Integer variableCount; + + @TableField("DESCRIPTION") + private String description; + + @TableField("USAGE_TIP") + private String usageTip; + + @TableField("TEMPLATE_FILE_NAME") + private String templateFileName; + + @TableField("TEMPLATE_FILE_PATH") + private String templateFilePath; + + @TableField("PUBLISH_ORG_IDS_JSON") + private String publishOrgIdsJson; + + @TableField("PUBLISH_ORG_NAMES_JSON") + private String publishOrgNamesJson; + + @TableField("VARIABLE_MAPPINGS_JSON") + private String variableMappingsJson; + + @TableField("CREATE_BY") + private String createBy; + + @TableField("CREATED_TIME") + private LocalDateTime createdTime; + + @TableField("UPDATED_BY") + private String updatedBy; + + @TableField("UPDATED_TIME") + private LocalDateTime updatedTime; + + @TableField("DEL_FLAG") + private String delFlag; +} diff --git a/src/main/java/com/nbport/zgwl/manifest/dto/ContractTemplateDto.java b/src/main/java/com/nbport/zgwl/manifest/dto/ContractTemplateDto.java new file mode 100644 index 0000000..c7d0a79 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/dto/ContractTemplateDto.java @@ -0,0 +1,113 @@ +package com.nbport.zgwl.manifest.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +/** + * 合同模板对象 + * + * 这里直接用 DTO 承载页面需要的字段,方便前后端对接。 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ContractTemplateDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 范本编号,保存时后端自动生成。 + */ + private String templateCode; + + private String templateName; + + /** + * 范本类型:标准模板 / 推荐文本 / 示范文本 / 对方文本 + */ + private String source; + + private String contractType; + + /** + * 我方地位:甲方 / 乙方 / 丙方 + */ + private String selfPartyRole; + + private String version; + + /** + * 状态:draft / published / disabled + */ + private String status; + + private Integer variableCount; + + private String description; + + private String usageTip; + + private String templateFileName; + + /** + * 模板文件相对路径 + */ + private String templateFilePath; + + /** + * 发布范围 orgId 集合 + */ + @Builder.Default + private List publishOrgIds = new ArrayList<>(); + + /** + * 发布范围 orgName 集合 + */ + @Builder.Default + private List publishOrgNames = new ArrayList<>(); + + /** + * 为列表直接展示准备的文本。 + */ + private String publishScopeText; + + @Builder.Default + private List variableMappings = new ArrayList<>(); + + @Builder.Default + private List variables = new ArrayList<>(); + + private String createBy; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createdTime; + + private String updatedBy; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime updatedTime; + + private String delFlag; + + /** + * 以下两个字段只在数据库层临时承接 JSON 文本,不给页面直接使用。 + */ + private String publishOrgIdsJson; + + private String publishOrgNamesJson; + + private String variableMappingsJson; +} diff --git a/src/main/java/com/nbport/zgwl/manifest/dto/ContractTemplateQueryDto.java b/src/main/java/com/nbport/zgwl/manifest/dto/ContractTemplateQueryDto.java new file mode 100644 index 0000000..a77b1a8 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/dto/ContractTemplateQueryDto.java @@ -0,0 +1,27 @@ +package com.nbport.zgwl.manifest.dto; + +import com.nbport.zgwl.dto.BasePageDto; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 模板分页查询参数 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ContractTemplateQueryDto extends BasePageDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String templateName; + + private String contractType; + + private String source; + + private String status; +} diff --git a/src/main/java/com/nbport/zgwl/manifest/dto/TemplateOrgOptionDto.java b/src/main/java/com/nbport/zgwl/manifest/dto/TemplateOrgOptionDto.java new file mode 100644 index 0000000..55be4c1 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/dto/TemplateOrgOptionDto.java @@ -0,0 +1,26 @@ +package com.nbport.zgwl.manifest.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 发布范围组织选项 + * + * 当前先用假数据代替真实组织表,后续内网联调时再替换成真实组织接口。 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TemplateOrgOptionDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String orgId; + + private String orgName; +} diff --git a/src/main/java/com/nbport/zgwl/manifest/dto/TemplateVariableMappingDto.java b/src/main/java/com/nbport/zgwl/manifest/dto/TemplateVariableMappingDto.java new file mode 100644 index 0000000..e73a98c --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/dto/TemplateVariableMappingDto.java @@ -0,0 +1,29 @@ +package com.nbport.zgwl.manifest.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 模板变量映射 + * + * variableKey:Word 模板里的变量名 + * bindField:业务字段名 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TemplateVariableMappingDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String id; + + private String variableKey; + + private String bindField; +} diff --git a/src/main/java/com/nbport/zgwl/manifest/handler/ContractTemplateDataHandler.java b/src/main/java/com/nbport/zgwl/manifest/handler/ContractTemplateDataHandler.java new file mode 100644 index 0000000..02f500d --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/handler/ContractTemplateDataHandler.java @@ -0,0 +1,161 @@ +package com.nbport.zgwl.manifest.handler; + +import cn.hutool.core.util.StrUtil; +import com.nbport.zgwl.exception.ServiceException; +import com.nbport.zgwl.manifest.dto.ContractTemplateDto; +import com.nbport.zgwl.manifest.dto.TemplateOrgOptionDto; +import com.nbport.zgwl.manifest.dto.TemplateVariableMappingDto; +import com.nbport.zgwl.manifest.utils.ManifestJsonUtils; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 模板数据处理器 + * + * 负责: + * 1. 保存前清洗数据 + * 2. 保存前校验数据 + * 3. 查询后把 JSON 文本转成前端需要的列表 + */ +@Component +public class ContractTemplateDataHandler { + + public void normalizeBeforeSave(ContractTemplateDto template) { + template.setTemplateName(StrUtil.trim(template.getTemplateName())); + template.setSource(StrUtil.trim(template.getSource())); + template.setContractType(StrUtil.trim(template.getContractType())); + template.setSelfPartyRole(StrUtil.trim(template.getSelfPartyRole())); + template.setVersion(StrUtil.trim(template.getVersion())); + template.setDescription(StrUtil.trim(template.getDescription())); + template.setUsageTip(StrUtil.trim(template.getUsageTip())); + template.setTemplateFileName(StrUtil.trim(template.getTemplateFileName())); + template.setTemplateFilePath(StrUtil.trim(template.getTemplateFilePath())); + + List publishOrgIds = template.getPublishOrgIds() == null ? new ArrayList<>() : template.getPublishOrgIds(); + List publishOrgNames = template.getPublishOrgNames() == null ? new ArrayList<>() : template.getPublishOrgNames(); + template.setPublishOrgIds( + publishOrgIds.stream() + .filter(StrUtil::isNotBlank) + .map(StrUtil::trim) + .distinct() + .collect(Collectors.toList()) + ); + template.setPublishOrgNames( + publishOrgNames.stream() + .filter(StrUtil::isNotBlank) + .map(StrUtil::trim) + .distinct() + .collect(Collectors.toList()) + ); + + List mappings = template.getVariableMappings() == null ? new ArrayList<>() : template.getVariableMappings(); + mappings = mappings.stream() + .filter(Objects::nonNull) + .map(item -> new TemplateVariableMappingDto( + StrUtil.blankToDefault(item.getId(), "var_" + System.nanoTime()), + StrUtil.trim(item.getVariableKey()), + StrUtil.trim(item.getBindField()) + )) + .filter(item -> StrUtil.isNotBlank(item.getVariableKey()) || StrUtil.isNotBlank(item.getBindField())) + .collect(Collectors.toList()); + template.setVariableMappings(mappings); + template.setVariables( + mappings.stream() + .map(TemplateVariableMappingDto::getVariableKey) + .filter(StrUtil::isNotBlank) + .distinct() + .collect(Collectors.toList()) + ); + template.setVariableCount(template.getVariables().size()); + template.setPublishScopeText(String.join("、", template.getPublishOrgNames())); + } + + public void validateForSave(ContractTemplateDto template) { + if (StrUtil.isBlank(template.getTemplateName())) { + throw new ServiceException("范本名称不能为空"); + } + if (StrUtil.isBlank(template.getSource())) { + throw new ServiceException("范本类型不能为空"); + } + if (StrUtil.isBlank(template.getContractType())) { + throw new ServiceException("合同类型不能为空"); + } + if (StrUtil.isBlank(template.getSelfPartyRole())) { + throw new ServiceException("我方地位不能为空"); + } + if (StrUtil.isBlank(template.getVersion())) { + throw new ServiceException("版本号不能为空"); + } + if (StrUtil.isBlank(template.getTemplateFileName()) || StrUtil.isBlank(template.getTemplateFilePath())) { + throw new ServiceException("请先上传 Word 模板文件"); + } + if (template.getPublishOrgIds() == null || template.getPublishOrgIds().isEmpty()) { + throw new ServiceException("发布范围不能为空"); + } + if (template.getVariableMappings() == null || template.getVariableMappings().isEmpty()) { + throw new ServiceException("请至少维护一个变量映射"); + } + for (TemplateVariableMappingDto mapping : template.getVariableMappings()) { + if (StrUtil.isBlank(mapping.getVariableKey())) { + throw new ServiceException("模板变量名称不能为空"); + } + if (StrUtil.isBlank(mapping.getBindField())) { + throw new ServiceException("模板变量【" + mapping.getVariableKey() + "】尚未绑定业务字段"); + } + } + } + + public void fillUiFields(ContractTemplateDto template) { + if (template == null) { + return; + } + template.setPublishOrgIds(ManifestJsonUtils.parseStringList(template.getPublishOrgIdsJson())); + template.setPublishOrgNames(ManifestJsonUtils.parseStringList(template.getPublishOrgNamesJson())); + template.setVariableMappings( + ManifestJsonUtils.parseList( + template.getVariableMappingsJson(), + new com.alibaba.fastjson2.TypeReference>() { + } + ) + ); + template.setVariables( + template.getVariableMappings().stream() + .map(TemplateVariableMappingDto::getVariableKey) + .filter(StrUtil::isNotBlank) + .distinct() + .collect(Collectors.toList()) + ); + template.setVariableCount(template.getVariables().size()); + template.setPublishScopeText(String.join("、", template.getPublishOrgNames())); + } + + public void fillUiFields(List templates) { + if (templates == null) { + return; + } + templates.forEach(this::fillUiFields); + } + + public void fillOrgNamesByIds(ContractTemplateDto template, List orgOptions) { + if (template.getPublishOrgIds() == null) { + template.setPublishOrgNames(new ArrayList<>()); + return; + } + List names = new ArrayList<>(); + for (String orgId : template.getPublishOrgIds()) { + TemplateOrgOptionDto option = orgOptions.stream() + .filter(item -> Objects.equals(item.getOrgId(), orgId)) + .findFirst() + .orElse(null); + if (option != null) { + names.add(option.getOrgName()); + } + } + template.setPublishOrgNames(names); + template.setPublishScopeText(String.join("、", names)); + } +} diff --git a/src/main/java/com/nbport/zgwl/manifest/mapper/ContractTemplateMapper.java b/src/main/java/com/nbport/zgwl/manifest/mapper/ContractTemplateMapper.java new file mode 100644 index 0000000..36e9218 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/mapper/ContractTemplateMapper.java @@ -0,0 +1,38 @@ +package com.nbport.zgwl.manifest.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nbport.zgwl.manifest.dto.ContractTemplateDto; +import com.nbport.zgwl.manifest.dto.ContractTemplateQueryDto; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 模板管理 Mapper + */ +public interface ContractTemplateMapper { + + Long selectTemplateSeqNextVal(); + + IPage selectTemplatePage(Page page, @Param("query") ContractTemplateQueryDto queryDto); + + List selectPublishedTemplates(); + + ContractTemplateDto selectTemplateById(@Param("id") Long id); + + int insertTemplate(ContractTemplateDto template); + + int updateTemplate(ContractTemplateDto template); + + int updateTemplateStatus(@Param("id") Long id, + @Param("status") String status, + @Param("updateBy") String updateBy, + @Param("updateTime") LocalDateTime updateTime); + + int deleteTemplateById(@Param("id") Long id, + @Param("updateBy") String updateBy, + @Param("updateTime") LocalDateTime updateTime, + @Param("delFlag") String delFlag); +} diff --git a/src/main/java/com/nbport/zgwl/manifest/service/ContractTemplateService.java b/src/main/java/com/nbport/zgwl/manifest/service/ContractTemplateService.java new file mode 100644 index 0000000..25af9bc --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/service/ContractTemplateService.java @@ -0,0 +1,28 @@ +package com.nbport.zgwl.manifest.service; + +import com.nbport.zgwl.common.PageResult; +import com.nbport.zgwl.manifest.dto.ContractTemplateDto; +import com.nbport.zgwl.manifest.dto.ContractTemplateQueryDto; +import com.nbport.zgwl.manifest.dto.TemplateOrgOptionDto; + +import java.util.List; + +/** + * 模板管理 Service + */ +public interface ContractTemplateService { + + PageResult queryTemplateList(ContractTemplateQueryDto queryDto); + + List queryPublishedTemplates(); + + ContractTemplateDto getTemplateDetail(Long id); + + ContractTemplateDto createTemplate(ContractTemplateDto template); + + ContractTemplateDto updateTemplate(ContractTemplateDto template); + + ContractTemplateDto changeTemplateStatus(Long id, String status); + + List queryOrgOptions(); +} diff --git a/src/main/java/com/nbport/zgwl/manifest/service/ContractTemplateServiceImpl.java b/src/main/java/com/nbport/zgwl/manifest/service/ContractTemplateServiceImpl.java new file mode 100644 index 0000000..2072173 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/service/ContractTemplateServiceImpl.java @@ -0,0 +1,146 @@ +package com.nbport.zgwl.manifest.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nbport.zgwl.common.PageResult; +import com.nbport.zgwl.exception.ServiceException; +import com.nbport.zgwl.manifest.dto.ContractTemplateDto; +import com.nbport.zgwl.manifest.dto.ContractTemplateQueryDto; +import com.nbport.zgwl.manifest.dto.TemplateOrgOptionDto; +import com.nbport.zgwl.manifest.handler.ContractTemplateDataHandler; +import com.nbport.zgwl.manifest.mapper.ContractTemplateMapper; +import com.nbport.zgwl.manifest.utils.ManifestCodeUtils; +import com.nbport.zgwl.manifest.utils.ManifestJsonUtils; +import com.nbport.zgwl.manifest.utils.ManifestManageConstants; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 模板管理 Service 实现 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class ContractTemplateServiceImpl implements ContractTemplateService { + + private final ContractTemplateMapper contractTemplateMapper; + + private final ContractTemplateDataHandler contractTemplateDataHandler; + + @Override + public PageResult queryTemplateList(ContractTemplateQueryDto queryDto) { + Page page = new Page<>(queryDto.getPageNo(), queryDto.getPageSize()); + PageResult pageResult = new PageResult<>(contractTemplateMapper.selectTemplatePage(page, queryDto)); + contractTemplateDataHandler.fillUiFields(pageResult.getRecords()); + return pageResult; + } + + @Override + public List queryPublishedTemplates() { + List templates = contractTemplateMapper.selectPublishedTemplates(); + contractTemplateDataHandler.fillUiFields(templates); + return templates; + } + + @Override + public ContractTemplateDto getTemplateDetail(Long id) { + ContractTemplateDto template = contractTemplateMapper.selectTemplateById(id); + if (template == null) { + throw new ServiceException("模板不存在"); + } + contractTemplateDataHandler.fillUiFields(template); + return template; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ContractTemplateDto createTemplate(ContractTemplateDto template) { + contractTemplateDataHandler.normalizeBeforeSave(template); + contractTemplateDataHandler.fillOrgNamesByIds(template, queryOrgOptions()); + contractTemplateDataHandler.validateForSave(template); + + LocalDateTime now = LocalDateTime.now(); + template.setId(contractTemplateMapper.selectTemplateSeqNextVal()); + template.setTemplateCode(ManifestCodeUtils.buildTemplateCode(template.getContractType())); + template.setCreateBy(ManifestManageConstants.DEFAULT_OPERATOR); + template.setCreatedTime(now); + template.setUpdatedBy(ManifestManageConstants.DEFAULT_OPERATOR); + template.setUpdatedTime(now); + template.setDelFlag(ManifestManageConstants.DEL_FLAG_NORMAL); + saveJsonFields(template); + + contractTemplateMapper.insertTemplate(template); + return getTemplateDetail(template.getId()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ContractTemplateDto updateTemplate(ContractTemplateDto template) { + if (template.getId() == null) { + throw new ServiceException("修改模板时 id 不能为空"); + } + + ContractTemplateDto dbTemplate = contractTemplateMapper.selectTemplateById(template.getId()); + if (dbTemplate == null) { + throw new ServiceException("模板不存在"); + } + + contractTemplateDataHandler.normalizeBeforeSave(template); + contractTemplateDataHandler.fillOrgNamesByIds(template, queryOrgOptions()); + contractTemplateDataHandler.validateForSave(template); + + template.setTemplateCode(dbTemplate.getTemplateCode()); + template.setCreateBy(dbTemplate.getCreateBy()); + template.setCreatedTime(dbTemplate.getCreatedTime()); + template.setUpdatedBy(ManifestManageConstants.DEFAULT_OPERATOR); + template.setUpdatedTime(LocalDateTime.now()); + template.setDelFlag(dbTemplate.getDelFlag()); + saveJsonFields(template); + + contractTemplateMapper.updateTemplate(template); + return getTemplateDetail(template.getId()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ContractTemplateDto changeTemplateStatus(Long id, String status) { + if (!ManifestManageConstants.STATUS_DRAFT.equals(status) + && !ManifestManageConstants.STATUS_PUBLISHED.equals(status) + && !ManifestManageConstants.STATUS_DISABLED.equals(status)) { + throw new ServiceException("模板状态不合法"); + } + + ContractTemplateDto dbTemplate = contractTemplateMapper.selectTemplateById(id); + if (dbTemplate == null) { + throw new ServiceException("模板不存在"); + } + + contractTemplateMapper.updateTemplateStatus( + id, + status, + ManifestManageConstants.DEFAULT_OPERATOR, + LocalDateTime.now() + ); + return getTemplateDetail(id); + } + + @Override + public List queryOrgOptions() { + return List.of( + new TemplateOrgOptionDto("ORG001", "浙港物流平台有限公司"), + new TemplateOrgOptionDto("ORG002", "宁波舟山港集团有限公司"), + new TemplateOrgOptionDto("ORG003", "浙江省海港投资运营集团有限公司"), + new TemplateOrgOptionDto("ORG004", "宁波港东南物流集团有限公司") + ); + } + + private void saveJsonFields(ContractTemplateDto template) { + template.setPublishOrgIdsJson(ManifestJsonUtils.toJson(template.getPublishOrgIds())); + template.setPublishOrgNamesJson(ManifestJsonUtils.toJson(template.getPublishOrgNames())); + template.setVariableMappingsJson(ManifestJsonUtils.toJson(template.getVariableMappings())); + } +} diff --git a/src/main/java/com/nbport/zgwl/manifest/utils/ManifestCodeUtils.java b/src/main/java/com/nbport/zgwl/manifest/utils/ManifestCodeUtils.java new file mode 100644 index 0000000..4936af5 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/utils/ManifestCodeUtils.java @@ -0,0 +1,56 @@ +package com.nbport.zgwl.manifest.utils; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; + +/** + * 模板编号生成工具 + * + * 需求里要求“范本编号自动生成”,这里采用: + * TPL-合同类型编码-时间戳-随机数 + * + * 例子:TPL-MM-20260522113045-128 + */ +public final class ManifestCodeUtils { + + private static final Map CONTRACT_TYPE_CODE_MAP = Map.ofEntries( + Map.entry("买卖合同", "MM"), + Map.entry("采购合同", "CG"), + Map.entry("销售合同", "XS"), + Map.entry("服务合同", "FW"), + Map.entry("框架合同", "FJ"), + Map.entry("供用电、水、气、热力合同", "GY"), + Map.entry("赠与合同", "ZY"), + Map.entry("借款合同", "JK"), + Map.entry("保证合同", "BZ"), + Map.entry("租赁合同", "ZL"), + Map.entry("融资租赁合同", "RZ"), + Map.entry("保理合同", "BL"), + Map.entry("承揽合同", "CL"), + Map.entry("建设工程合同", "GC"), + Map.entry("运输合同", "YS"), + Map.entry("技术合同", "JS"), + Map.entry("保管合同", "BG"), + Map.entry("仓储合同", "CC"), + Map.entry("委托合同", "WT"), + Map.entry("物业服务合同", "WY"), + Map.entry("行纪合同", "HJ"), + Map.entry("中介合同", "ZJ"), + Map.entry("合伙合同", "HH"), + Map.entry("用工合同", "YG"), + Map.entry("业务合同", "YW"), + Map.entry("其他合同", "QT") + ); + + private ManifestCodeUtils() { + } + + public static String buildTemplateCode(String contractType) { + String typeCode = CONTRACT_TYPE_CODE_MAP.getOrDefault(contractType, "QT"); + String now = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + int random = ThreadLocalRandom.current().nextInt(100, 1000); + return "TPL-" + typeCode + "-" + now + "-" + random; + } +} diff --git a/src/main/java/com/nbport/zgwl/manifest/utils/ManifestJsonUtils.java b/src/main/java/com/nbport/zgwl/manifest/utils/ManifestJsonUtils.java new file mode 100644 index 0000000..62df948 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/utils/ManifestJsonUtils.java @@ -0,0 +1,41 @@ +package com.nbport.zgwl.manifest.utils; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.TypeReference; + +import java.util.Collections; +import java.util.List; + +/** + * 模板管理 JSON 工具 + * + * 模板的“发布范围、变量映射”等字段更适合存成 JSON 文本。 + * 这里统一做转换,避免 Service 里反复写解析代码。 + */ +public final class ManifestJsonUtils { + + private ManifestJsonUtils() { + } + + public static String toJson(Object value) { + if (value == null) { + return null; + } + return JSON.toJSONString(value); + } + + public static List parseStringList(String json) { + if (json == null || json.isBlank()) { + return Collections.emptyList(); + } + return JSON.parseObject(json, new TypeReference>() { + }); + } + + public static List parseList(String json, TypeReference> typeReference) { + if (json == null || json.isBlank()) { + return Collections.emptyList(); + } + return JSON.parseObject(json, typeReference); + } +} diff --git a/src/main/java/com/nbport/zgwl/manifest/utils/ManifestManageConstants.java b/src/main/java/com/nbport/zgwl/manifest/utils/ManifestManageConstants.java new file mode 100644 index 0000000..b4e4dea --- /dev/null +++ b/src/main/java/com/nbport/zgwl/manifest/utils/ManifestManageConstants.java @@ -0,0 +1,26 @@ +package com.nbport.zgwl.manifest.utils; + +/** + * 模板管理模块常量 + * + * 把常量单独放这里,是为了后续迁移到内网时只改一个地方。 + */ +public final class ManifestManageConstants { + + private ManifestManageConstants() { + } + + public static final String REQUEST_PREFIX = "/manifest/manage"; + + public static final String DEFAULT_OPERATOR = "local_test"; + + public static final String DEL_FLAG_NORMAL = "0"; + + public static final String DEL_FLAG_DELETED = "2"; + + public static final String STATUS_DRAFT = "draft"; + + public static final String STATUS_PUBLISHED = "published"; + + public static final String STATUS_DISABLED = "disabled"; +} diff --git a/src/main/java/com/nbport/zgwl/mapper/StudentMapper.java b/src/main/java/com/nbport/zgwl/mapper/StudentMapper.java new file mode 100644 index 0000000..88e9b75 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/mapper/StudentMapper.java @@ -0,0 +1,15 @@ +package com.nbport.zgwl.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nbport.zgwl.dto.StudentQueryDto; +import com.nbport.zgwl.entity.StudentEntity; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface StudentMapper extends BaseMapper { + + IPage> queryList(Page> page, @Param("query") StudentQueryDto queryDto); +} diff --git a/src/main/java/com/nbport/zgwl/partner/controller/PartnerManageController.java b/src/main/java/com/nbport/zgwl/partner/controller/PartnerManageController.java new file mode 100644 index 0000000..1916313 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/controller/PartnerManageController.java @@ -0,0 +1,68 @@ +package com.nbport.zgwl.partner.controller; + +import com.nbport.zgwl.common.PageResult; +import com.nbport.zgwl.common.R; +import com.nbport.zgwl.partner.dto.PartnerManageDto; +import com.nbport.zgwl.partner.dto.PartnerQueryDto; +import com.nbport.zgwl.partner.service.PartnerManageService; +import com.nbport.zgwl.partner.utils.PartnerManageConstants; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 相对方管理 Controller + */ +@RestController +@RequiredArgsConstructor +@RequestMapping(PartnerManageConstants.REQUEST_PREFIX) +public class PartnerManageController { + + private final PartnerManageService partnerManageService; + + @PostMapping("/list") + public R> queryList(@RequestBody PartnerQueryDto queryDto) { + return R.success(partnerManageService.queryPartnerList(queryDto)); + } + + @GetMapping("/{customerSysid}") + public R getInfo(@PathVariable("customerSysid") Long customerSysid) { + return R.success(partnerManageService.selectPartnerById(customerSysid)); + } + + @PostMapping + public R add(@RequestBody PartnerManageDto partner) { + return R.success(partnerManageService.insertPartner(partner)); + } + + @PutMapping + public R edit(@RequestBody PartnerManageDto partner) { + partnerManageService.updatePartner(partner); + return R.success("保存成功"); + } + + @DeleteMapping("/{customerSysids}") + public R remove(@PathVariable("customerSysids") String customerSysids) { + List idList = Arrays.stream(customerSysids.split(",")) + .filter(item -> item != null && !item.isBlank()) + .map(Long::valueOf) + .collect(Collectors.toList()); + partnerManageService.deletePartnerByIds(idList); + return R.success("删除成功"); + } + + @PostMapping("/{customerSysid}/sync") + public R mockSync(@PathVariable("customerSysid") Long customerSysid) { + return R.success(partnerManageService.mockSyncPartner(customerSysid)); + } +} diff --git a/src/main/java/com/nbport/zgwl/partner/domain/IldmFeeCustomerInfo.java b/src/main/java/com/nbport/zgwl/partner/domain/IldmFeeCustomerInfo.java new file mode 100644 index 0000000..a530f9d --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/domain/IldmFeeCustomerInfo.java @@ -0,0 +1,224 @@ +package com.nbport.zgwl.partner.domain; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@TableName(value = "ILDM_FEE_CUSTOMER_INFO") +@Data +@EqualsAndHashCode(callSuper = false) +@KeySequence(value = "SEQ_ILDM_FEE_CUSTOMER_INFO", dbType = DbType.ORACLE) +public class IldmFeeCustomerInfo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @TableId(value = "CUSTOMER_SYSID", type = IdType.INPUT) + private Long customerSysid; + + @TableField("CUSTOMER_REGNO") + private String customerRegno; + + @TableField("CUSTOMER_NO") + private String customerNo; + + @TableField("CUSTOMER_NAME_C") + private String customerNameC; + + @TableField("CUSTOMER_NAME_EN") + private String customerNameEn; + + @TableField("CUSTOMER_SHORT_NAME") + private String customerShortName; + + @TableField("CUSTOMER_SHORT_NAME_EN") + private String customerShortNameEn; + + @TableField("CUSTOMER_TAXNO") + private String customerTaxno; + + @TableField("CUSTOMER_ADDRESS") + private String customerAddress; + + @TableField("OFFICEPHONE") + private String officephone; + + @TableField("CUSTOMER_BANK") + private String customerBank; + + @TableField("CUSTOMER_BANKACCOUNT") + private String customerBankaccount; + + @TableField("CUSTOMER_CHARACTER") + private String customerCharacter; + + @TableField("CUSTOMER_REGADDR") + private String customerRegaddr; + + @TableField("CUSTOMER_REGDATE") + private LocalDate customerRegdate; + + @TableField("CUSTOMER_NATURE") + private String customerNature; + + @TableField("CUSTOMER_ZIP") + private String customerZip; + + @TableField("CUSTOMER_1_TYPEFLAG") + private String customer1Typeflag; + + @TableField("CUSTOMER_2_TYPEFLAG") + private String customer2Typeflag; + + @TableField("CUSTOMER_3_TYPEFLAG") + private String customer3Typeflag; + + @TableField("CUSTOMER_4_TYPEFLAG") + private String customer4Typeflag; + + @TableField("PLACE_TYPE") + private String placeType; + + @TableField("ACTIVEFLAG") + private String activeflag; + + @TableField("CUSTOMER_SYSID_HT") + private String customerSysidHt; + + @TableField("DOWN_DATE") + private LocalDate downDate; + + @TableField("OPEN_FLAG") + private String openFlag; + + @TableField("CREATE_BY") + private String createBy; + + @TableField("CREATE_TIME") + private LocalDateTime createTime; + + @TableField("UPDATE_BY") + private String updateBy; + + @TableField("UPDATE_TIME") + private LocalDateTime updateTime; + + @TableField("SYSTEM_TYPE") + private String systemType; + + @TableField("REMARK") + private String remark; + + @TableField("ORG_ID") + private String orgId; + + @TableField("EMAIL_ADDRESS") + private String emailAddress; + + @TableField("OPPOSITE_ID") + private String oppositeId; + + @TableField("OPPOSITE_CHARACTER") + private String oppositeCharacter; + + @TableField("GAT_FLAG") + private String gatFlag; + + @TableField("GROUP_FLAG") + private String groupFlag; + + @TableField("COUNTRY") + private String country; + + @TableField("COUNTRY_NAME") + private String countryName; + + @TableField("CITY") + private String city; + + @TableField("POSTCODE") + private String postcode; + + @TableField("LEGAL_PERSON_ID") + private String legalPersonId; + + @TableField("LEGAL_PERSON_NAME") + private String legalPersonName; + + @TableField("LEGAL_PERSON_ACCOUNT") + private String legalPersonAccount; + + @TableField("LEGAL_PERSON_CARD_ID") + private String legalPersonCardId; + + @TableField("WEBSITE") + private String website; + + @TableField("CERTIFICATE_TYPE") + private String certificateType; + + @TableField("CERTIFICATE_NUM") + private String certificateNum; + + @TableField("TIN_CODE") + private String tinCode; + + @TableField("ABROAD_CODE") + private String abroadCode; + + @TableField("REGISTERED_CAPITAL") + private BigDecimal registeredCapital; + + @TableField("REG_CAPITAL") + private String regCapital; + + @TableField("BUS_SCOPE") + private String busScope; + + @TableField("OPPOSITE_CODE") + private String oppositeCode; + + @TableField("OPPOSITE_STATUS") + private String oppositeStatus; + + @TableField("IS_SGAT") + private String isSgat; + + @TableField("IS_JTN") + private String isJtn; + + @TableField("NATURE_OF_ENTERPRISE_ORG") + private String natureOfEnterpriseOrg; + + @TableField("NATURE_OF_ENTERPRISE_ORG_LEV") + private String natureOfEnterpriseOrgLev; + + @TableField("RELATIVE_TYPE") + private String relativeType; + + @TableField("IS_DELETED") + private String isDeleted; + + @TableField("COMMENTS") + private String comments; + + @TableField("SYNC_STATUS") + private String syncStatus; + + @TableField("SYNC_TIME") + private LocalDateTime syncTime; + + @TableField("SYNC_MESSAGE") + private String syncMessage; +} diff --git a/src/main/java/com/nbport/zgwl/partner/domain/SealPartnerContact.java b/src/main/java/com/nbport/zgwl/partner/domain/SealPartnerContact.java new file mode 100644 index 0000000..485df13 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/domain/SealPartnerContact.java @@ -0,0 +1,63 @@ +package com.nbport.zgwl.partner.domain; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +@TableName(value = "SEAL_PARTNER_CONTACT") +@Data +@EqualsAndHashCode(callSuper = false) +@KeySequence(value = "SEQ_SEAL_PARTNER_CONTACT", dbType = DbType.ORACLE) +public class SealPartnerContact implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @TableId(value = "ID", type = IdType.INPUT) + private Long id; + + @TableField("PARTNER_RECORD_ID") + private Long partnerRecordId; + + @TableField("CONTACT_NAME") + private String contactName; + + @TableField("CONTACT_PHONE") + private String contactPhone; + + @TableField("POSTAL_ADDRESS") + private String postalAddress; + + @TableField("EMAIL") + private String email; + + @TableField("SORT_ORDER") + private Integer sortOrder; + + @TableField("DEL_FLAG") + private String delFlag; + + @TableField("CREATE_BY") + private String createBy; + + @TableField("CREATE_TIME") + private LocalDateTime createTime; + + @TableField("UPDATE_BY") + private String updateBy; + + @TableField("UPDATE_TIME") + private LocalDateTime updateTime; + + @TableField("REMARK") + private String remark; +} diff --git a/src/main/java/com/nbport/zgwl/partner/dto/PartnerContactDto.java b/src/main/java/com/nbport/zgwl/partner/dto/PartnerContactDto.java new file mode 100644 index 0000000..ea71e0b --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/dto/PartnerContactDto.java @@ -0,0 +1,47 @@ +package com.nbport.zgwl.partner.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 相对方联系人信息 + * + * 字段命名直接采用 seal_partner_contact 的驼峰写法。 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PartnerContactDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 前端渲染联系人列表时使用的临时唯一键。 + */ + private String uid; + + private Long partnerRecordId; + + private String contactName; + + private String contactPhone; + + private String postalAddress; + + private String email; + + private Integer sortOrder; + + private String delFlag; + + private String remark; +} diff --git a/src/main/java/com/nbport/zgwl/partner/dto/PartnerManageDto.java b/src/main/java/com/nbport/zgwl/partner/dto/PartnerManageDto.java new file mode 100644 index 0000000..8e6089b --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/dto/PartnerManageDto.java @@ -0,0 +1,243 @@ +package com.nbport.zgwl.partner.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +/** + * 相对方主对象 + * + * 字段命名直接采用 ILDM_FEE_CUSTOMER_INFO 的驼峰写法, + * 避免再维护一套“业务语义字段”和“数据库字段”的双重命名。 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PartnerManageDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + // ============== 客户基本信息字段 ============== + + /** 客户系统ID */ + private Long customerSysid; // 注意:数据库中是VARCHAR(64),不是Long + + /** 客户注册号 */ + private String customerRegno; + + /** 客户编号 */ + private String customerNo; + + /** 公司全称 */ + private String customerNameC; + + /** 公司英文名称 */ + private String customerNameEn; + + /** 公司简称 */ + private String customerShortName; + + /** 公司英文简称 */ + private String customerShortNameEn; + + /** 统一社会信用代码 */ + private String customerTaxno; + + /** 详细地址 */ + private String customerAddress; + + /** 联系电话 */ + private String officephone; + + /** 开户银行 */ + private String customerBank; + + /** 银行账户 */ + private String customerBankaccount; + + /** 客户性质 */ + private String customerCharacter; + + /** 注册地址 */ + private String customerRegaddr; + + /** 注册日期 */ + private LocalDate customerRegdate; + + /** 客户性质分类 */ + private String customerNature; + + /** 邮编 */ + private String customerZip; + + /** 客户类型标识1 */ + private String customer1Typeflag; + + /** 客户类型标识2 */ + private String customer2Typeflag; + + /** 客户类型标识3 */ + private String customer3Typeflag; + + /** 客户类型标识4 */ + private String customer4Typeflag; + + /** 境内外 */ + private String placeType; + + /** 启用标识 */ + private String activeflag; + + /** 海铁系统客户ID */ + private String customerSysidHt; + + /** 下载日期 */ + private LocalDate downDate; + + /** 开户标识 */ + private String openFlag; + + /** 业务系统类型(ht:海铁联运系统;xg:箱管系统;qc:全程物流) */ + private String systemType; + + /** 组织体系对应的公司编码 */ + private String orgId; + + /** 邮箱地址 */ + private String emailAddress; + + // ============== 法务系统相关字段 ============== + + /** 法务系统相对方ID(唯一标识) */ + private String oppositeId; + + /** 相对方性质分类(1:境内组织,2:境内个人,3:境外组织,4:境外个人) */ + private String oppositeCharacter; + + /** 是否涉港澳台标识(Y:是,N:否,法务业务分类用) */ + private String gatFlag; + + /** 是否集团内(Y:是,N:否,法务业务分类用) */ + private String groupFlag; + + /** 国家编码 */ + private String country; + + /** 国家名称 */ + private String countryName; + + /** 城市 */ + private String city; + + /** 邮编 */ + private String postcode; + + /** 法定代表人或负责人ID */ + private String legalPersonId; + + /** 法定代表人或负责人姓名 */ + private String legalPersonName; + + /** 法定代表人或负责人账户 */ + private String legalPersonAccount; + + /** 法定代表人身份证号(加密存储) */ + private String legalPersonCardId; + + /** 网站地址 */ + private String website; + + /** 自然人证件类型(idCard:身份证,passport:护照,other:其他) */ + private String certificateType; + + /** 自然人证件号码(加密存储) */ + private String certificateNum; + + /** TIN码(税务识别号) */ + private String tinCode; + + /** 境外公司活动证明编码 */ + private String abroadCode; + + /** 注册资金(单位:元) */ + private BigDecimal registeredCapital; + + /** 注册资本(文本描述,如:1000万人民币) */ + private String regCapital; + + /** 经营范围 */ + private String busScope; + + /** 相对方编码(业务分类编码) */ + private String oppositeCode; + + /** 状态(EFFECTUAL:有效,INVALID:无效) */ + private String oppositeStatus; + + /** 是否SGAT(1:是,0:否) */ + private String isSgat; + + /** 是否JTN(1:是,0:否) */ + private String isJtn; + + /** 组织性质(ZY:政府,QY:企业,QT:其他组织) */ + private String natureOfEnterpriseOrg; + + /** 组织性质子级(GNQY:国有企业,MYQY:民营企业,WZQY:外资企业,HZQY:合资企业,GYQZHKGQY:国有全资和控股企业,QT:其他) */ + private String natureOfEnterpriseOrgLev; + + /** 类型(client:客户,clientAndSup:客户及供应商,other:其他,Partner:合作伙伴,supplier:供应商) */ + private String relativeType; + + /** 法务系统删除标记(Y:是,N:否,逻辑删除) */ + private String isDeleted; + + /** 备注【法务】 */ + private String comments; + + /** 备注 */ + private String remark; + + // ============== 系统通用字段 ============== + + /** 创建人 */ + private String createBy; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime createTime; + + /** 更新人 */ + private String updateBy; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime updateTime; + + // ============== 同步状态字段 ============== + + /** 同步状态:unsynced/synced/failed */ + private String syncStatus; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime syncTime; + + /** 同步说明 */ + private String syncMessage; + + // ============== 非数据库字段 ============== + + /** 联系人列表 */ + @Builder.Default + private List contacts = new ArrayList<>(); +} \ No newline at end of file diff --git a/src/main/java/com/nbport/zgwl/partner/dto/PartnerQueryDto.java b/src/main/java/com/nbport/zgwl/partner/dto/PartnerQueryDto.java new file mode 100644 index 0000000..dbe99a3 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/dto/PartnerQueryDto.java @@ -0,0 +1,29 @@ +package com.nbport.zgwl.partner.dto; + +import com.nbport.zgwl.dto.BasePageDto; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 相对方列表查询参数 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class PartnerQueryDto extends BasePageDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private String customerNameC; + + private String relativeType; + + private String oppositeCharacter; + + private String groupFlag; + + private String syncStatus; +} diff --git a/src/main/java/com/nbport/zgwl/partner/handler/PartnerDataHandler.java b/src/main/java/com/nbport/zgwl/partner/handler/PartnerDataHandler.java new file mode 100644 index 0000000..39db79e --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/handler/PartnerDataHandler.java @@ -0,0 +1,219 @@ +package com.nbport.zgwl.partner.handler; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Validator; +import cn.hutool.core.util.StrUtil; +import com.nbport.zgwl.exception.ServiceException; +import com.nbport.zgwl.partner.dto.PartnerContactDto; +import com.nbport.zgwl.partner.dto.PartnerManageDto; +import com.nbport.zgwl.partner.utils.PartnerManageConstants; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 相对方数据处理器 + */ +@Component +public class PartnerDataHandler { + + public void normalizeBeforeSave(PartnerManageDto partner) { + partner.setCustomerNameC(StrUtil.trim(partner.getCustomerNameC())); + partner.setCustomerTaxno(StrUtil.trim(partner.getCustomerTaxno())); + partner.setCustomerRegaddr(StrUtil.trim(partner.getCustomerRegaddr())); + partner.setEmailAddress(StrUtil.trim(partner.getEmailAddress())); + partner.setCountry(StrUtil.trim(partner.getCountry())); + partner.setCountryName(StrUtil.trim(partner.getCountryName())); + partner.setLegalPersonName(StrUtil.trim(partner.getLegalPersonName())); + partner.setCertificateNum(StrUtil.trim(partner.getCertificateNum())); + partner.setTinCode(StrUtil.trim(partner.getTinCode())); + partner.setRegCapital(StrUtil.trim(partner.getRegCapital())); + partner.setOppositeCode(StrUtil.trim(partner.getOppositeCode())); + partner.setOppositeStatus(StrUtil.trim(partner.getOppositeStatus())); + partner.setComments(StrUtil.trim(partner.getComments())); + partner.setRemark(StrUtil.trim(partner.getRemark())); + partner.setSyncMessage(StrUtil.trim(partner.getSyncMessage())); + + if (!"QY".equals(partner.getNatureOfEnterpriseOrg())) { + partner.setNatureOfEnterpriseOrgLev(null); + } + + if (!isDomesticOrg(partner)) { + partner.setCustomerTaxno(null); + partner.setLegalPersonName(null); + } + + if (!isDomesticPerson(partner) && !isForeignPerson(partner)) { + partner.setCertificateType(null); + partner.setCertificateNum(null); + } + + if (!isForeignOrg(partner)) { + partner.setTinCode(null); + } + + if (!isForeignOrg(partner) && !isForeignPerson(partner)) { + partner.setCountry(null); + partner.setCountryName(null); + } + + if (!isDomesticOrg(partner) && !isForeignOrg(partner)) { + partner.setCustomerRegaddr(null); + partner.setRegCapital(null); + partner.setRegisteredCapital(null); + } + + if (!showGatFlag(partner)) { + partner.setGatFlag(PartnerManageConstants.GAT_FLAG_NO); + } + + partner.setGroupFlag(StrUtil.blankToDefault(partner.getGroupFlag(), PartnerManageConstants.GROUP_FLAG_NO)); + partner.setGatFlag(StrUtil.blankToDefault(partner.getGatFlag(), PartnerManageConstants.GAT_FLAG_NO)); + partner.setSyncStatus(StrUtil.blankToDefault(partner.getSyncStatus(), PartnerManageConstants.SYNC_STATUS_UNSYNCED)); + partner.setOppositeStatus(StrUtil.blankToDefault(partner.getOppositeStatus(), PartnerManageConstants.OPPOSITE_STATUS_EFFECTUAL)); + partner.setIsDeleted(StrUtil.blankToDefault(partner.getIsDeleted(), PartnerManageConstants.PARTNER_IS_DELETED_NORMAL)); + partner.setIsSgat(PartnerManageConstants.GAT_FLAG_YES.equals(partner.getGatFlag()) + ? PartnerManageConstants.FLAG_ONE + : PartnerManageConstants.FLAG_ZERO); + partner.setIsJtn(PartnerManageConstants.GROUP_FLAG_YES.equals(partner.getGroupFlag()) + ? PartnerManageConstants.FLAG_ONE + : PartnerManageConstants.FLAG_ZERO); + + List contacts = partner.getContacts() == null ? new ArrayList<>() : partner.getContacts(); + contacts = contacts.stream() + .filter(Objects::nonNull) + .peek(this::normalizeContact) + .filter(this::hasAnyContactValue) + .collect(Collectors.toList()); + partner.setContacts(contacts); + } + + public void validateForSave(PartnerManageDto partner) { + if (StrUtil.isBlank(partner.getCustomerNameC())) { + throw new ServiceException("公司名称不能为空"); + } + if (StrUtil.isBlank(partner.getRelativeType())) { + throw new ServiceException("公司类型不能为空"); + } + if (StrUtil.isBlank(partner.getOppositeCharacter())) { + throw new ServiceException("公司性质不能为空"); + } + if (StrUtil.isBlank(partner.getNatureOfEnterpriseOrg())) { + throw new ServiceException("组织性质不能为空"); + } + if ("QY".equals(partner.getNatureOfEnterpriseOrg()) && StrUtil.isBlank(partner.getNatureOfEnterpriseOrgLev())) { + throw new ServiceException("组织性质选择企业时,组织性质企业二级不能为空"); + } + if (StrUtil.isBlank(partner.getGroupFlag())) { + throw new ServiceException("是否集团内不能为空"); + } + if (isDomesticOrg(partner) && StrUtil.isBlank(partner.getCustomerTaxno())) { + throw new ServiceException("境内组织必须填写统一社会信用代码"); + } + if (isDomesticPerson(partner) && StrUtil.isBlank(partner.getCertificateType())) { + throw new ServiceException("境内个人必须选择自然人证件类型"); + } + if (isDomesticPerson(partner) && StrUtil.isBlank(partner.getCertificateNum())) { + throw new ServiceException("境内个人必须填写自然人证件号码"); + } + if (isForeignOrg(partner) && StrUtil.isBlank(partner.getTinCode())) { + throw new ServiceException("境外组织必须填写TIN号"); + } + if (isForeignOrg(partner) && StrUtil.isBlank(partner.getCountry())) { + throw new ServiceException("境外组织必须选择国家"); + } + if (isForeignPerson(partner) && StrUtil.isBlank(partner.getCountry())) { + throw new ServiceException("境外个人必须选择国家"); + } + if (isDomesticOrg(partner) && StrUtil.isBlank(partner.getLegalPersonName())) { + throw new ServiceException("境内组织必须填写法定代表人或负责人"); + } + if ((isDomesticOrg(partner) || isForeignOrg(partner)) && StrUtil.isBlank(partner.getCustomerRegaddr())) { + throw new ServiceException("组织类型必须填写注册地址"); + } + if ((isDomesticOrg(partner) || isForeignOrg(partner)) && StrUtil.isBlank(partner.getRegCapital())) { + throw new ServiceException("组织类型必须填写注册资本"); + } + validateContacts(partner); + } + + public void fillContactUiKeys(List contacts) { + if (contacts == null) { + return; + } + contacts.forEach(contact -> { + if (StrUtil.isBlank(contact.getUid())) { + contact.setUid(contact.getId() == null ? null : String.valueOf(contact.getId())); + } + }); + } + + private void validateContacts(PartnerManageDto partner) { + if (!needContacts(partner)) { + return; + } + if (CollUtil.isEmpty(partner.getContacts())) { + throw new ServiceException("组织类型至少需要维护一个联系人"); + } + for (PartnerContactDto contact : partner.getContacts()) { + if (StrUtil.isBlank(contact.getContactName())) { + throw new ServiceException("联系人姓名不能为空"); + } + if (StrUtil.isBlank(contact.getContactPhone())) { + throw new ServiceException("联系人联系电话不能为空"); + } + if (StrUtil.isBlank(contact.getPostalAddress())) { + throw new ServiceException("联系人通讯地址不能为空"); + } + if (StrUtil.isBlank(contact.getEmail())) { + throw new ServiceException("联系人电子邮箱不能为空"); + } + if (!Validator.isEmail(contact.getEmail())) { + throw new ServiceException("联系人电子邮箱格式不正确"); + } + } + } + + private void normalizeContact(PartnerContactDto contact) { + contact.setContactName(StrUtil.trim(contact.getContactName())); + contact.setContactPhone(StrUtil.trim(contact.getContactPhone())); + contact.setPostalAddress(StrUtil.trim(contact.getPostalAddress())); + contact.setEmail(StrUtil.trim(contact.getEmail())); + contact.setRemark(StrUtil.trim(contact.getRemark())); + contact.setDelFlag(PartnerManageConstants.CONTACT_DEL_FLAG_NORMAL); + } + + private boolean hasAnyContactValue(PartnerContactDto contact) { + return StrUtil.isNotBlank(contact.getContactName()) + || StrUtil.isNotBlank(contact.getContactPhone()) + || StrUtil.isNotBlank(contact.getPostalAddress()) + || StrUtil.isNotBlank(contact.getEmail()); + } + + private boolean needContacts(PartnerManageDto partner) { + return isDomesticOrg(partner) || isForeignOrg(partner); + } + + private boolean showGatFlag(PartnerManageDto partner) { + return isDomesticOrg(partner) || isDomesticPerson(partner); + } + + private boolean isDomesticOrg(PartnerManageDto partner) { + return "1".equals(partner.getOppositeCharacter()); + } + + private boolean isDomesticPerson(PartnerManageDto partner) { + return "2".equals(partner.getOppositeCharacter()); + } + + private boolean isForeignOrg(PartnerManageDto partner) { + return "3".equals(partner.getOppositeCharacter()); + } + + private boolean isForeignPerson(PartnerManageDto partner) { + return "4".equals(partner.getOppositeCharacter()); + } +} diff --git a/src/main/java/com/nbport/zgwl/partner/mapper/PartnerManageMapper.java b/src/main/java/com/nbport/zgwl/partner/mapper/PartnerManageMapper.java new file mode 100644 index 0000000..0afdafe --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/mapper/PartnerManageMapper.java @@ -0,0 +1,61 @@ +package com.nbport.zgwl.partner.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nbport.zgwl.partner.dto.PartnerContactDto; +import com.nbport.zgwl.partner.dto.PartnerManageDto; +import com.nbport.zgwl.partner.dto.PartnerQueryDto; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * 相对方管理 Mapper + */ +public interface PartnerManageMapper { + + Long selectPartnerSeqNextVal(); + + Long selectPartnerContactSeqNextVal(); + + IPage selectPartnerPage(Page page, @Param("query") PartnerQueryDto queryDto); + + PartnerManageDto selectPartnerById(@Param("customerSysid") Long customerSysid); + + int insertPartner(PartnerManageDto partner); + + int updatePartner(PartnerManageDto partner); + + int deletePartnerByIds(@Param("customerSysids") List customerSysids, + @Param("updateBy") String updateBy, + @Param("updateTime") LocalDateTime updateTime, + @Param("isDeleted") String isDeleted); + + List selectPartnerContactsByPartnerIds(@Param("partnerRecordIds") List partnerRecordIds); + + int markPartnerContactsDeletedByPartnerId(@Param("partnerRecordId") Long partnerRecordId, + @Param("updateBy") String updateBy, + @Param("updateTime") LocalDateTime updateTime, + @Param("delFlag") String delFlag); + + int markPartnerContactsDeletedByPartnerIds(@Param("partnerRecordIds") List partnerRecordIds, + @Param("updateBy") String updateBy, + @Param("updateTime") LocalDateTime updateTime, + @Param("delFlag") String delFlag); + + int batchInsertPartnerContacts(@Param("contacts") List contacts, + @Param("createBy") String createBy, + @Param("createTime") LocalDateTime createTime, + @Param("updateBy") String updateBy, + @Param("updateTime") LocalDateTime updateTime, + @Param("delFlag") String delFlag); + + int updatePartnerSyncInfo(@Param("customerSysid") Long customerSysid, + @Param("oppositeId") String oppositeId, + @Param("syncStatus") String syncStatus, + @Param("syncTime") LocalDateTime syncTime, + @Param("syncMessage") String syncMessage, + @Param("updateBy") String updateBy, + @Param("updateTime") LocalDateTime updateTime); +} diff --git a/src/main/java/com/nbport/zgwl/partner/service/PartnerManageService.java b/src/main/java/com/nbport/zgwl/partner/service/PartnerManageService.java new file mode 100644 index 0000000..fb46263 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/service/PartnerManageService.java @@ -0,0 +1,25 @@ +package com.nbport.zgwl.partner.service; + +import com.nbport.zgwl.common.PageResult; +import com.nbport.zgwl.partner.dto.PartnerManageDto; +import com.nbport.zgwl.partner.dto.PartnerQueryDto; + +import java.util.List; + +/** + * 相对方管理 Service + */ +public interface PartnerManageService { + + PageResult queryPartnerList(PartnerQueryDto queryDto); + + PartnerManageDto selectPartnerById(Long customerSysid); + + Long insertPartner(PartnerManageDto partner); + + void updatePartner(PartnerManageDto partner); + + void deletePartnerByIds(List customerSysids); + + PartnerManageDto mockSyncPartner(Long customerSysid); +} diff --git a/src/main/java/com/nbport/zgwl/partner/service/PartnerManageServiceImpl.java b/src/main/java/com/nbport/zgwl/partner/service/PartnerManageServiceImpl.java new file mode 100644 index 0000000..eb9d837 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/service/PartnerManageServiceImpl.java @@ -0,0 +1,260 @@ +package com.nbport.zgwl.partner.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nbport.zgwl.common.PageResult; +import com.nbport.zgwl.contractpush.dto.PushPayloadDTO; +import com.nbport.zgwl.exception.ServiceException; +import com.nbport.zgwl.partner.dto.PartnerContactDto; +import com.nbport.zgwl.partner.dto.PartnerManageDto; +import com.nbport.zgwl.partner.dto.PartnerQueryDto; +import com.nbport.zgwl.partner.handler.PartnerDataHandler; +import com.nbport.zgwl.partner.mapper.PartnerManageMapper; +import com.nbport.zgwl.partner.utils.PartnerIdUtils; +import com.nbport.zgwl.partner.utils.PartnerManageConstants; +import com.nbport.zgwl.partner.utils.PartnerSyncPayloadBuilder; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 相对方管理 Service 实现 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PartnerManageServiceImpl implements PartnerManageService { + + private final PartnerManageMapper partnerManageMapper; + + private final PartnerDataHandler partnerDataHandler; + + @Override + public PageResult queryPartnerList(PartnerQueryDto queryDto) { + Page page = new Page<>(queryDto.getPageNo(), queryDto.getPageSize()); + PageResult pageResult = new PageResult<>( + partnerManageMapper.selectPartnerPage(page, queryDto)); + attachContacts(pageResult.getRecords()); + return pageResult; + } + + @Override + public PartnerManageDto selectPartnerById(Long customerSysid) { + PartnerManageDto partner = partnerManageMapper.selectPartnerById(customerSysid); + if (partner == null) { + throw new ServiceException("相对方不存在"); + } + attachContacts(Collections.singletonList(partner)); + return partner; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long insertPartner(PartnerManageDto partner) { + partnerDataHandler.normalizeBeforeSave(partner); + partnerDataHandler.validateForSave(partner); + + LocalDateTime now = LocalDateTime.now(); + partner.setCustomerSysid(partnerManageMapper.selectPartnerSeqNextVal()); + partner.setOppositeCode(ensureOppositeCode(partner.getOppositeCode())); + partner.setOppositeId(null); + partner.setSyncStatus(PartnerManageConstants.SYNC_STATUS_UNSYNCED); + partner.setSyncTime(null); + partner.setSyncMessage("新增后尚未同步"); + partner.setOppositeStatus(PartnerManageConstants.OPPOSITE_STATUS_EFFECTUAL); + partner.setCreateBy(PartnerManageConstants.DEFAULT_OPERATOR); + partner.setCreateTime(now); + partner.setUpdateBy(PartnerManageConstants.DEFAULT_OPERATOR); + partner.setUpdateTime(now); + partner.setIsDeleted(PartnerManageConstants.PARTNER_IS_DELETED_NORMAL); + + partnerManageMapper.insertPartner(partner); + saveContacts(partner.getCustomerSysid(), partner.getContacts(), now); + return partner.getCustomerSysid(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updatePartner(PartnerManageDto partner) { + if (partner.getCustomerSysid() == null) { + throw new ServiceException("修改时 customerSysid 不能为空"); + } + + PartnerManageDto dbPartner = partnerManageMapper.selectPartnerById(partner.getCustomerSysid()); + if (dbPartner == null) { + throw new ServiceException("相对方不存在或已删除"); + } + + partnerDataHandler.normalizeBeforeSave(partner); + partnerDataHandler.validateForSave(partner); + + LocalDateTime now = LocalDateTime.now(); + partner.setOppositeCode(ensureOppositeCode(partner.getOppositeCode(), dbPartner.getOppositeCode())); + partner.setOppositeId(dbPartner.getOppositeId()); + partner.setOppositeStatus(ensureValue(partner.getOppositeStatus(), dbPartner.getOppositeStatus(), + PartnerManageConstants.OPPOSITE_STATUS_EFFECTUAL)); + partner.setSyncStatus(PartnerManageConstants.SYNC_STATUS_UNSYNCED); + partner.setSyncTime(null); + partner.setSyncMessage("信息已修改,待重新同步"); + partner.setUpdateBy(PartnerManageConstants.DEFAULT_OPERATOR); + partner.setUpdateTime(now); + partner.setIsDeleted(PartnerManageConstants.PARTNER_IS_DELETED_NORMAL); + + partnerManageMapper.updatePartner(partner); + partnerManageMapper.markPartnerContactsDeletedByPartnerId( + partner.getCustomerSysid(), + PartnerManageConstants.DEFAULT_OPERATOR, + now, + PartnerManageConstants.CONTACT_DEL_FLAG_DELETED); + saveContacts(partner.getCustomerSysid(), partner.getContacts(), now); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deletePartnerByIds(List customerSysids) { + if (customerSysids == null || customerSysids.isEmpty()) { + return; + } + LocalDateTime now = LocalDateTime.now(); + partnerManageMapper.markPartnerContactsDeletedByPartnerIds( + customerSysids, + PartnerManageConstants.DEFAULT_OPERATOR, + now, + PartnerManageConstants.CONTACT_DEL_FLAG_DELETED); + partnerManageMapper.deletePartnerByIds( + customerSysids, + PartnerManageConstants.DEFAULT_OPERATOR, + now, + PartnerManageConstants.PARTNER_IS_DELETED_DELETED); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public PartnerManageDto mockSyncPartner(Long customerSysid) { + PartnerManageDto partner = partnerManageMapper.selectPartnerById(customerSysid); + if (partner == null) { + throw new ServiceException("相对方不存在或已删除"); + } + + attachContacts(Collections.singletonList(partner)); + + LocalDateTime now = LocalDateTime.now(); + String oppositeId = StrUtilHelper.hasText(partner.getOppositeId()) + ? partner.getOppositeId() + : PartnerIdUtils.buildGroupPartnerId(); + + PartnerSyncPayloadBuilder.buildCollectOppositesPayload(partner); + // PushPayloadDTO payloadDTO = + // PartnerSyncPayloadBuilder.buildCollectOppositesPayload(partner); + // Map response = + // dataCollectionPushService.collectOpposites(payloadDTO); + String syncMessage = "本地测试模拟同步成功。TODO:后续在这里调用相对方信息采集接口 collectOpposites。"; + // // 从法务系统响应中取出返回的 oppositeId(比如 response 里有个 "jtId" 字段) + // String oppositeIdFromLawSystem = ...; // 具体 key 看法务返回的字段名 + // String syncMessage = response.containsKey("msg") + // ? String.valueOf(response.get("msg")) + // : "相对方信息采集同步成功"; + + // // 回写法务返回的 oppositeId,而不是本地生成的 + partnerManageMapper.updatePartnerSyncInfo( + customerSysid, + oppositeId, + PartnerManageConstants.SYNC_STATUS_SYNCED, + now, + syncMessage, + PartnerManageConstants.DEFAULT_OPERATOR, + now); + return selectPartnerById(customerSysid); + } + + private void attachContacts(List partnerList) { + if (partnerList == null || partnerList.isEmpty()) { + return; + } + + List customerSysids = partnerList.stream() + .map(PartnerManageDto::getCustomerSysid) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + if (customerSysids.isEmpty()) { + return; + } + + List contacts = partnerManageMapper.selectPartnerContactsByPartnerIds(customerSysids); + Map> contactMap = contacts.stream() + .collect(Collectors.groupingBy(PartnerContactDto::getPartnerRecordId)); + + partnerList.forEach(item -> { + List currentContacts = contactMap.getOrDefault(item.getCustomerSysid(), + Collections.emptyList()); + partnerDataHandler.fillContactUiKeys(currentContacts); + item.setContacts(currentContacts); + }); + } + + private void saveContacts(Long customerSysid, List contacts, LocalDateTime now) { + if (customerSysid == null || contacts == null || contacts.isEmpty()) { + return; + } + + int sortOrder = 1; + for (PartnerContactDto contact : contacts) { + contact.setId(partnerManageMapper.selectPartnerContactSeqNextVal()); + contact.setPartnerRecordId(customerSysid); + contact.setSortOrder(sortOrder++); + contact.setDelFlag(PartnerManageConstants.CONTACT_DEL_FLAG_NORMAL); + } + + partnerManageMapper.batchInsertPartnerContacts( + contacts, + PartnerManageConstants.DEFAULT_OPERATOR, + now, + PartnerManageConstants.DEFAULT_OPERATOR, + now, + PartnerManageConstants.CONTACT_DEL_FLAG_NORMAL); + } + + private String ensureOppositeCode(String oppositeCode) { + return ensureOppositeCode(oppositeCode, null); + } + + private String ensureOppositeCode(String oppositeCode, String fallback) { + if (StrUtilHelper.hasText(oppositeCode)) { + return oppositeCode; + } + if (StrUtilHelper.hasText(fallback)) { + return fallback; + } + return PartnerIdUtils.buildPartnerId(); + } + + private String ensureValue(String value, String fallback, String defaultValue) { + if (StrUtilHelper.hasText(value)) { + return value; + } + if (StrUtilHelper.hasText(fallback)) { + return fallback; + } + return defaultValue; + } + + /** + * 避免为了一个判空再引入新依赖,这里保留一个最小工具。 + */ + private static final class StrUtilHelper { + + private StrUtilHelper() { + } + + private static boolean hasText(String value) { + return value != null && !value.isBlank(); + } + } +} diff --git a/src/main/java/com/nbport/zgwl/partner/utils/PartnerIdUtils.java b/src/main/java/com/nbport/zgwl/partner/utils/PartnerIdUtils.java new file mode 100644 index 0000000..1f43903 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/utils/PartnerIdUtils.java @@ -0,0 +1,41 @@ +package com.nbport.zgwl.partner.utils; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.concurrent.ThreadLocalRandom; + +/** + * 相关方ID生成工具 + * + * 本地相关方ID:自己系统生成,后续同步给法务系统时对应 o_id。 + * 集团相对方ID:这里先做模拟生成,后续真实联调时用法务系统回传值覆盖。 + */ +public final class PartnerIdUtils { + + private static final String PARTNER_PREFIX = "OPP"; + + private static final String GROUP_PREFIX = "JT"; + + private PartnerIdUtils() { + } + + public static String buildPartnerId() { + return PARTNER_PREFIX + "-" + formatNow("yyyyMMddHHmmss") + "-" + randomDigits(4); + } + + public static String buildGroupPartnerId() { + return GROUP_PREFIX + "-" + formatNow("yyyyMMddHHmmss") + "-" + randomDigits(4); + } + + private static String formatNow(String pattern) { + return new SimpleDateFormat(pattern).format(new Date()); + } + + private static String randomDigits(int length) { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < length; i++) { + builder.append(ThreadLocalRandom.current().nextInt(10)); + } + return builder.toString(); + } +} diff --git a/src/main/java/com/nbport/zgwl/partner/utils/PartnerManageConstants.java b/src/main/java/com/nbport/zgwl/partner/utils/PartnerManageConstants.java new file mode 100644 index 0000000..f4652d6 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/utils/PartnerManageConstants.java @@ -0,0 +1,42 @@ +package com.nbport.zgwl.partner.utils; + +/** + * 相对方模块常量 + */ +public final class PartnerManageConstants { + + private PartnerManageConstants() { + } + + public static final String REQUEST_PREFIX = "/partner/manage"; + + public static final String DEFAULT_OPERATOR = "local_test"; + + public static final String PARTNER_IS_DELETED_NORMAL = "N"; + + public static final String PARTNER_IS_DELETED_DELETED = "Y"; + + public static final String CONTACT_DEL_FLAG_NORMAL = "0"; + + public static final String CONTACT_DEL_FLAG_DELETED = "2"; + + public static final String OPPOSITE_STATUS_EFFECTUAL = "EFFECTUAL"; + + public static final String GAT_FLAG_YES = "Y"; + + public static final String GAT_FLAG_NO = "N"; + + public static final String GROUP_FLAG_YES = "Y"; + + public static final String GROUP_FLAG_NO = "N"; + + public static final String FLAG_ONE = "1"; + + public static final String FLAG_ZERO = "0"; + + public static final String SYNC_STATUS_UNSYNCED = "unsynced"; + + public static final String SYNC_STATUS_SYNCED = "synced"; + + public static final String SYNC_STATUS_FAILED = "failed"; +} diff --git a/src/main/java/com/nbport/zgwl/partner/utils/PartnerSyncPayloadBuilder.java b/src/main/java/com/nbport/zgwl/partner/utils/PartnerSyncPayloadBuilder.java new file mode 100644 index 0000000..4c2ff35 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/partner/utils/PartnerSyncPayloadBuilder.java @@ -0,0 +1,71 @@ +package com.nbport.zgwl.partner.utils; + +import com.nbport.zgwl.contractpush.dto.PushPayloadDTO; +import com.nbport.zgwl.partner.dto.PartnerContactDto; +import com.nbport.zgwl.partner.dto.PartnerManageDto; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 相对方同步报文构造工具 + */ +public final class PartnerSyncPayloadBuilder { + + private PartnerSyncPayloadBuilder() { + } + + public static PushPayloadDTO buildCollectOppositesPayload(PartnerManageDto partner) { + Map payload = new LinkedHashMap<>(); + payload.put("o_id", partner.getCustomerSysid() == null ? null : String.valueOf(partner.getCustomerSysid())); + payload.put("o_name", partner.getCustomerNameC()); + payload.put("o_type", partner.getRelativeType()); + payload.put("o_nature", partner.getOppositeCharacter()); + payload.put("o_orgNature", convertOrgNature(partner.getNatureOfEnterpriseOrg())); + payload.put("o_orgNature_2", partner.getNatureOfEnterpriseOrgLev()); + payload.put("o_GAT", PartnerManageConstants.GAT_FLAG_YES.equals(partner.getGatFlag()) + ? PartnerManageConstants.FLAG_ONE + : PartnerManageConstants.FLAG_ZERO); + payload.put("o_isGroup", PartnerManageConstants.GROUP_FLAG_YES.equals(partner.getGroupFlag()) + ? PartnerManageConstants.FLAG_ONE + : PartnerManageConstants.FLAG_ZERO); + payload.put("o_creditCode", partner.getCustomerTaxno()); + payload.put("o_zjType", partner.getCertificateType()); + payload.put("o_zjNo", partner.getCertificateNum()); + payload.put("o_tin", partner.getTinCode()); + payload.put("o_country", partner.getCountry()); + payload.put("o_legalPerson", partner.getLegalPersonName()); + payload.put("o_address", partner.getCustomerRegaddr()); + payload.put("o_capital", partner.getRegCapital()); + payload.put("o_creator", partner.getCreateBy()); + payload.put("o_creationTime", partner.getCreateTime() == null ? null : partner.getCreateTime().toString().replace("T", " ")); + payload.put("o_contacts", buildContactList(partner.getContacts())); + + PushPayloadDTO requestDTO = new PushPayloadDTO(); + requestDTO.setPayload(payload); + return requestDTO; + } + + private static List> buildContactList(List contacts) { + if (contacts == null) { + return List.of(); + } + return contacts.stream().map(item -> { + Map contact = new LinkedHashMap<>(); + contact.put("name", item.getContactName()); + contact.put("phone", item.getContactPhone()); + contact.put("postalAddress", item.getPostalAddress()); + contact.put("email", item.getEmail()); + return contact; + }).collect(Collectors.toList()); + } + + private static String convertOrgNature(String natureOfEnterpriseOrg) { + if ("ZY".equals(natureOfEnterpriseOrg)) { + return "ZF"; + } + return natureOfEnterpriseOrg; + } +} diff --git a/src/main/java/com/nbport/zgwl/seal/config/SealConfig.java b/src/main/java/com/nbport/zgwl/seal/config/SealConfig.java new file mode 100644 index 0000000..1119424 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/seal/config/SealConfig.java @@ -0,0 +1,54 @@ +package com.nbport.zgwl.seal.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 签章平台配置类 + * 从application.yml中读取签章平台相关配置 + * + * 在application.yml中添加如下配置: + * seal: + * appKey: A7C4FD32BE454B5 + * appSecret: 你的appSecret(联系浙江CA获取) + * baseUrl: https://saasapi.certca.cn + * + * @author xiaofengzhou + */ +@Component +@ConfigurationProperties(prefix = "seal") +public class SealConfig { + + /** 应用Key,由浙江CA提供,用于获取访问令牌 */ + private String appKey; + + /** 应用密钥,由浙江CA提供,用于计算HMAC签名 */ + private String appSecret; + + /** 签章平台API基础地址,例如 https://saasapi.certca.cn */ + private String baseUrl; + + public String getAppKey() { + return appKey; + } + + public void setAppKey(String appKey) { + this.appKey = appKey; + } + + public String getAppSecret() { + return appSecret; + } + + public void setAppSecret(String appSecret) { + this.appSecret = appSecret; + } + + public String getBaseUrl() { + return baseUrl; + } + + public void setBaseUrl(String baseUrl) { + this.baseUrl = baseUrl; + } +} diff --git a/src/main/java/com/nbport/zgwl/seal/config/SealWebSocketConfig.java b/src/main/java/com/nbport/zgwl/seal/config/SealWebSocketConfig.java new file mode 100644 index 0000000..2813133 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/seal/config/SealWebSocketConfig.java @@ -0,0 +1,34 @@ +package com.nbport.zgwl.seal.config; + +import com.nbport.zgwl.seal.handler.SealWebSocketHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.config.annotation.WebSocketConfigurer; +import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; + +/** + * WebSocket配置类 + * + * 配置签章平台回调的WebSocket连接端点 + * 前端通过 ws://localhost:8080/seal/ws/callback 建立连接 + * + * 注意: + * 1. setAllowedOrigins("*") 允许所有来源,生产环境应限制为具体域名 + * 2. WebSocket不走Spring Security的HTTP认证,需要额外考虑安全性 + * + * @author xiaofengzhou + */ +@Configuration +@EnableWebSocket +public class SealWebSocketConfig implements WebSocketConfigurer { + + @Autowired + private SealWebSocketHandler sealWebSocketHandler; + + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(sealWebSocketHandler, "/seal/ws/callback") + .setAllowedOrigins("*"); + } +} diff --git a/src/main/java/com/nbport/zgwl/seal/controller/SealCallbackController.java b/src/main/java/com/nbport/zgwl/seal/controller/SealCallbackController.java new file mode 100644 index 0000000..cafc714 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/seal/controller/SealCallbackController.java @@ -0,0 +1,111 @@ +package com.nbport.zgwl.seal.controller; + +import com.alibaba.fastjson2.JSON; +import com.nbport.zgwl.common.R; +import com.nbport.zgwl.seal.handler.SealWebSocketHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * 签章平台回调接口控制器 + * + * @author xiaofengzhou + */ +@RestController +@RequestMapping("/seal/callback") +public class SealCallbackController { + + private static final Logger log = LoggerFactory.getLogger(SealCallbackController.class); + + @Autowired + private SealWebSocketHandler webSocketHandler; + + @PostMapping("/login") + public R loginCallback(@RequestBody Map params) { + log.info("收到身份认证回调: {}", JSON.toJSONString(params)); + + try { + String requestId = (String) params.get("requestId"); + webSocketHandler.sendCallbackMessage(requestId, "login", params); + return R.success("回调接收成功"); + } catch (Exception e) { + log.error("处理身份认证回调失败", e); + return R.error("回调处理失败: " + e.getMessage()); + } + } + + @PostMapping("/sign") + public R signCallback(@RequestBody Map params) { + log.info("收到签署回调: {}", JSON.toJSONString(params)); + + try { + String contractId = (String) params.get("contractId"); + String requestId = (String) params.get("requestId"); + webSocketHandler.sendCallbackMessage(requestId, "sign", params); + webSocketHandler.sendCallbackMessage(contractId, "contract_status", params); + return R.success("回调接收成功"); + } catch (Exception e) { + log.error("处理签署回调失败", e); + return R.error("回调处理失败: " + e.getMessage()); + } + } + + @PostMapping("/presign") + public R presignCallback(@RequestBody Map params) { + log.info("收到预盖章回调: {}", JSON.toJSONString(params)); + + try { + String contractId = (String) params.get("contractId"); + String requestId = (String) params.get("requestId"); + webSocketHandler.sendCallbackMessage(requestId, "presign", params); + webSocketHandler.sendCallbackMessage(contractId, "contract_status", params); + return R.success("回调接收成功"); + } catch (Exception e) { + log.error("处理预盖章回调失败", e); + return R.error("回调处理失败: " + e.getMessage()); + } + } + + @PostMapping("/trusteeship") + public R trusteeshipCallback(@RequestBody Map params) { + log.info("收到托管章回调: {}", JSON.toJSONString(params)); + + try { + String requestId = (String) params.get("requestId"); + webSocketHandler.sendCallbackMessage(requestId, "trusteeship", params); + return R.success("回调接收成功"); + } catch (Exception e) { + log.error("处理托管章回调失败", e); + return R.error("回调处理失败: " + e.getMessage()); + } + } + + @PostMapping("/signQrCode") + public R signQrCodeCallback(@RequestBody Map params) { + log.info("收到签名二维码回调: {}", JSON.toJSONString(params)); + + try { + String requestId = (String) params.get("requestId"); + webSocketHandler.sendCallbackMessage(requestId, "signQrCode", params); + return R.success("回调接收成功"); + } catch (Exception e) { + log.error("处理签名二维码回调失败", e); + return R.error("回调处理失败: " + e.getMessage()); + } + } + + @GetMapping("/poll/{requestId}") + public R> pollCallback(@PathVariable String requestId) { + Map callbackData = webSocketHandler.getCallbackData(requestId); + return R.success(callbackData); + } +} diff --git a/src/main/java/com/nbport/zgwl/seal/controller/SealProxyController.java b/src/main/java/com/nbport/zgwl/seal/controller/SealProxyController.java new file mode 100644 index 0000000..2c658c1 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/seal/controller/SealProxyController.java @@ -0,0 +1,353 @@ +package com.nbport.zgwl.seal.controller; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.nbport.zgwl.common.R; +import com.nbport.zgwl.seal.config.SealConfig; +import com.nbport.zgwl.seal.service.SealTokenService; +import com.nbport.zgwl.seal.utils.SealHttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.util.HashMap; +import java.util.Map; + +/** + * 签章平台代理控制器 + * + * @author xiaofengzhou + */ +@RestController +@RequestMapping("/seal/api") +public class SealProxyController { + + private static final Logger log = LoggerFactory.getLogger(SealProxyController.class); + + @Autowired + private SealConfig sealConfig; + + @Autowired + private SealTokenService sealTokenService; + + private String proxyPost(String apiPath, String requestBody) { + String accessToken = sealTokenService.getAccessToken(); + String url = sealConfig.getBaseUrl() + apiPath; + log.info("代理请求签章平台: {} body: {}", url, requestBody); + return SealHttpClient.post(url, requestBody, accessToken, MediaType.APPLICATION_JSON_VALUE); + } + + private String proxyPost(String apiPath) { + return proxyPost(apiPath, "{}"); + } + + private R parseSealResponse(String responseJson) { + try { + JSONObject result = JSON.parseObject(responseJson); + if (result.getBooleanValue("isSuccess")) { + return R.success(result.get("data")); + } else { + return R.error(result.getString("msg")); + } + } catch (Exception e) { + log.error("解析签章平台响应失败: {}", responseJson, e); + return R.error("解析签章平台响应失败: " + e.getMessage()); + } + } + + @PostMapping("/token/getAccessToken") + public R getAccessToken() { + try { + String token = sealTokenService.forceRefreshToken(); + Map data = new HashMap<>(); + data.put("access_token", token); + data.put("expires_in", 7200); + return R.success(data); + } catch (Exception e) { + log.error("获取Token失败", e); + return R.error("获取Token失败: " + e.getMessage()); + } + } + + @PostMapping("/token/clear") + public R clearToken() { + sealTokenService.clearToken(); + return R.success("Token已清除"); + } + + @PostMapping("/qrcode/getLoginQrCode") + public R getLoginQrCode(@RequestBody Map params) { + try { + String notifyUrl = params.get("notifyUrl"); + JSONObject body = new JSONObject(); + body.put("notifyUrl", notifyUrl); + String response = proxyPost("/saas/api/qrcode/getLoginQrCode", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取身份认证二维码失败", e); + return R.error("获取身份认证二维码失败: " + e.getMessage()); + } + } + + @PostMapping("/contract/start") + public R startContract(@RequestParam("file") MultipartFile file, + @RequestParam("contractName") String contractName, + @RequestParam(value = "description", required = false) String description) { + try { + String accessToken = sealTokenService.getAccessToken(); + String url = sealConfig.getBaseUrl() + "/saas/api/contract/start"; + String response = SealHttpClient.postMultipart(url, file, contractName, description, accessToken); + return parseSealResponse(response); + } catch (Exception e) { + log.error("创建签署流程失败", e); + return R.error("创建签署流程失败: " + e.getMessage()); + } + } + + @PostMapping("/qrcode/getStandardSignQrCode") + public R getStandardSignQrCode(@RequestBody Map params) { + try { + JSONObject body = buildSignQrCodeBody(params); + String response = proxyPost("/saas/api/qrcode/getStandardSignQrCode", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取标准签章二维码失败", e); + return R.error("获取标准签章二维码失败: " + e.getMessage()); + } + } + + @PostMapping("/qrcode/getPreSignQrCode") + public R getPreSignQrCode(@RequestBody Map params) { + try { + JSONObject body = buildPreSignBody(params); + String response = proxyPost("/saas/api/qrcode/getPreSignQrCode", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取预盖章二维码失败", e); + return R.error("获取预盖章二维码失败: " + e.getMessage()); + } + } + + @PostMapping("/qrcode/getTrusteeshipSealQrCode") + public R getTrusteeshipSealQrCode(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("notifyUrl", params.get("notifyUrl")); + String response = proxyPost("/saas/api/qrcode/getTrusteeshipSealQrCode", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取托管章二维码失败", e); + return R.error("获取托管章二维码失败: " + e.getMessage()); + } + } + + @PostMapping("/contract/confirmSign") + public R confirmSign(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(params); + String response = proxyPost("/saas/api/contract/confirmSign", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("托管签署失败", e); + return R.error("托管签署失败: " + e.getMessage()); + } + } + + @PostMapping("/seal/getTimestamp") + public R getTimestamp(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("formatPattern", params.getOrDefault("formatPattern", "yyyy-MM-dd")); + String response = proxyPost("/saas/api/seal/getTimestamp", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取时间戳印章失败", e); + return R.error("获取时间戳印章失败: " + e.getMessage()); + } + } + + @PostMapping("/contract/signTimestamp") + public R signTimestamp(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(params); + String response = proxyPost("/saas/api/contract/signTimestamp", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("签署时间签章失败", e); + return R.error("签署时间签章失败: " + e.getMessage()); + } + } + + @PostMapping("/seal/getCommentSeal") + public R getCommentSeal(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("text", params.get("text")); + body.put("fontSize", params.get("fontSize")); + String response = proxyPost("/saas/api/seal/getCommentSeal", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取批注章预览失败", e); + return R.error("获取批注章预览失败: " + e.getMessage()); + } + } + + @PostMapping("/contract/signCommentSeal") + public R signCommentSeal(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(params); + String response = proxyPost("/saas/api/contract/signCommentSeal", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("签署批注签章失败", e); + return R.error("签署批注签章失败: " + e.getMessage()); + } + } + + @PostMapping("/contract/complete") + public R completeContract(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("contractId", params.get("contractId")); + String response = proxyPost("/saas/api/contract/complete", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("完成签署流程失败", e); + return R.error("完成签署流程失败: " + e.getMessage()); + } + } + + @PostMapping("/contract/cancel") + public R cancelContract(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("contractId", params.get("contractId")); + String response = proxyPost("/saas/api/contract/cancel", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("取消签署流程失败", e); + return R.error("取消签署流程失败: " + e.getMessage()); + } + } + + @PostMapping("/user/getUserUniqueId") + public R getUserUniqueId(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("name", params.get("name")); + body.put("mobile", params.get("mobile")); + body.put("idCode", params.get("idCode")); + String response = proxyPost("/saas/api/user/getUserUniqueId ", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取用户身份编码失败", e); + return R.error("获取用户身份编码失败: " + e.getMessage()); + } + } + + @PostMapping("/seal/getSealBySignerId") + public R getSealBySignerId(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(params); + String response = proxyPost("/saas/api/seal/getSealBySignerId", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取用户印章失败", e); + return R.error("获取用户印章失败: " + e.getMessage()); + } + } + + @PostMapping("/contract/getDetail") + public R getContractDetail(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("contractId", params.get("contractId")); + String response = proxyPost("/saas/api/contract/getDetail", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取合约详情失败", e); + return R.error("获取合约详情失败: " + e.getMessage()); + } + } + + @PostMapping("/contract/preview") + public R previewContract(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("contractId", params.get("contractId")); + String response = proxyPost("/saas/api/contract/preview", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("预览合约文件失败", e); + return R.error("预览合约文件失败: " + e.getMessage()); + } + } + + @PostMapping("/contract/download") + public R downloadContract(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("contractId", params.get("contractId")); + String response = proxyPost("/saas/api/contract/download", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("下载合约文件失败", e); + return R.error("下载合约文件失败: " + e.getMessage()); + } + } + + @PostMapping("/user/getUserInfos") + public R getUserInfos(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("requestId", params.get("requestId")); + String response = proxyPost("/api/user/getUserInfos", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取用户隐私数据失败", e); + return R.error("获取用户隐私数据失败: " + e.getMessage()); + } + } + + @PostMapping("/qrcode/getSignQrCode") + public R getSignQrCode(@RequestBody Map params) { + try { + JSONObject body = new JSONObject(); + body.put("notifyUrl", params.get("notifyUrl")); + body.put("originalBase64Str", params.get("originalBase64Str")); + String response = proxyPost("/saas/api/qrcode/getSignQrCode", body.toJSONString()); + return parseSealResponse(response); + } catch (Exception e) { + log.error("获取签名二维码失败", e); + return R.error("获取签名二维码失败: " + e.getMessage()); + } + } + + private JSONObject buildSignQrCodeBody(Map params) { + JSONObject body = new JSONObject(); + body.put("contractId", params.get("contractId")); + body.put("notifyUrl", params.get("notifyUrl")); + body.put("isNeedUrlLink", params.getOrDefault("isNeedUrlLink", false)); + body.put("sealConfigs", params.get("sealConfigs")); + body.put("pagingSealConfig", params.get("pagingSealConfig")); + return body; + } + + private JSONObject buildPreSignBody(Map params) { + JSONObject body = new JSONObject(); + body.put("contractId", params.get("contractId")); + body.put("notifyUrl", params.get("notifyUrl")); + body.put("isNeedUrlLink", params.getOrDefault("isNeedUrlLink", false)); + body.put("sealConfigs", params.get("sealConfigs")); + body.put("pagingSealConfigs", params.get("pagingSealConfigs")); + body.put("timestampSealConfigs", params.get("timestampSealConfigs")); + return body; + } +} diff --git a/src/main/java/com/nbport/zgwl/seal/dto/SealApiDTO.java b/src/main/java/com/nbport/zgwl/seal/dto/SealApiDTO.java new file mode 100644 index 0000000..4872afa --- /dev/null +++ b/src/main/java/com/nbport/zgwl/seal/dto/SealApiDTO.java @@ -0,0 +1,923 @@ +package com.nbport.zgwl.seal.dto; + +import java.util.List; + +/** + * 签章平台API数据传输对象(DTO) + * + * 包含所有签章平台API的请求和响应数据结构 + * 统一管理在一个文件中,方便后续迁移和维护 + * + * @author xiaofengzhou + */ +public class SealApiDTO { + + public static class SealResponse { + private boolean isSuccess; + private String msg; + private int code; + private T data; + + public boolean isSuccess() { + return isSuccess; + } + + public void setSuccess(boolean success) { + isSuccess = success; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + } + + public static class TokenResponseData { + private String access_token; + private Integer expires_in; + + public String getAccess_token() { + return access_token; + } + + public void setAccess_token(String access_token) { + this.access_token = access_token; + } + + public Integer getExpires_in() { + return expires_in; + } + + public void setExpires_in(Integer expires_in) { + this.expires_in = expires_in; + } + } + + public static class ContractStartData { + private String contractId; + private Long fileSize; + private Integer imageWidth; + private Integer imageHeight; + private String pdfUrl; + private List pdfToImageList; + + public String getContractId() { + return contractId; + } + + public void setContractId(String contractId) { + this.contractId = contractId; + } + + public Long getFileSize() { + return fileSize; + } + + public void setFileSize(Long fileSize) { + this.fileSize = fileSize; + } + + public Integer getImageWidth() { + return imageWidth; + } + + public void setImageWidth(Integer imageWidth) { + this.imageWidth = imageWidth; + } + + public Integer getImageHeight() { + return imageHeight; + } + + public void setImageHeight(Integer imageHeight) { + this.imageHeight = imageHeight; + } + + public String getPdfUrl() { + return pdfUrl; + } + + public void setPdfUrl(String pdfUrl) { + this.pdfUrl = pdfUrl; + } + + public List getPdfToImageList() { + return pdfToImageList; + } + + public void setPdfToImageList(List pdfToImageList) { + this.pdfToImageList = pdfToImageList; + } + } + + public static class QrCodeResponseData { + private String requestId; + private Integer expiresIn; + private String qrCode; + private String urlLink; + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public Integer getExpiresIn() { + return expiresIn; + } + + public void setExpiresIn(Integer expiresIn) { + this.expiresIn = expiresIn; + } + + public String getQrCode() { + return qrCode; + } + + public void setQrCode(String qrCode) { + this.qrCode = qrCode; + } + + public String getUrlLink() { + return urlLink; + } + + public void setUrlLink(String urlLink) { + this.urlLink = urlLink; + } + } + + public static class SealConfigItem { + private String sealId; + private Float x; + private Float y; + private Double scale; + private Integer pageNum; + + public String getSealId() { + return sealId; + } + + public void setSealId(String sealId) { + this.sealId = sealId; + } + + public Float getX() { + return x; + } + + public void setX(Float x) { + this.x = x; + } + + public Float getY() { + return y; + } + + public void setY(Float y) { + this.y = y; + } + + public Double getScale() { + return scale; + } + + public void setScale(Double scale) { + this.scale = scale; + } + + public Integer getPageNum() { + return pageNum; + } + + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + } + + public static class PagingSealConfig { + private String sealId; + private Double scale; + private Integer startPage; + private Integer endPage; + private Integer coordinateY; + + public String getSealId() { + return sealId; + } + + public void setSealId(String sealId) { + this.sealId = sealId; + } + + public Double getScale() { + return scale; + } + + public void setScale(Double scale) { + this.scale = scale; + } + + public Integer getStartPage() { + return startPage; + } + + public void setStartPage(Integer startPage) { + this.startPage = startPage; + } + + public Integer getEndPage() { + return endPage; + } + + public void setEndPage(Integer endPage) { + this.endPage = endPage; + } + + public Integer getCoordinateY() { + return coordinateY; + } + + public void setCoordinateY(Integer coordinateY) { + this.coordinateY = coordinateY; + } + } + + public static class TimestampSealConfig { + private String formatPattern; + private Float x; + private Float y; + private Integer pageNum; + private Double scale; + private Integer width; + private Integer height; + + public String getFormatPattern() { + return formatPattern; + } + + public void setFormatPattern(String formatPattern) { + this.formatPattern = formatPattern; + } + + public Float getX() { + return x; + } + + public void setX(Float x) { + this.x = x; + } + + public Float getY() { + return y; + } + + public void setY(Float y) { + this.y = y; + } + + public Integer getPageNum() { + return pageNum; + } + + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + + public Double getScale() { + return scale; + } + + public void setScale(Double scale) { + this.scale = scale; + } + + public Integer getWidth() { + return width; + } + + public void setWidth(Integer width) { + this.width = width; + } + + public Integer getHeight() { + return height; + } + + public void setHeight(Integer height) { + this.height = height; + } + } + + public static class SignatureResult { + private String contractId; + private String contractName; + private Integer contractStatus; + private String signatureId; + private String signer; + private String signatureTime; + private List signatureList; + + public String getContractId() { + return contractId; + } + + public void setContractId(String contractId) { + this.contractId = contractId; + } + + public String getContractName() { + return contractName; + } + + public void setContractName(String contractName) { + this.contractName = contractName; + } + + public Integer getContractStatus() { + return contractStatus; + } + + public void setContractStatus(Integer contractStatus) { + this.contractStatus = contractStatus; + } + + public String getSignatureId() { + return signatureId; + } + + public void setSignatureId(String signatureId) { + this.signatureId = signatureId; + } + + public String getSigner() { + return signer; + } + + public void setSigner(String signer) { + this.signer = signer; + } + + public String getSignatureTime() { + return signatureTime; + } + + public void setSignatureTime(String signatureTime) { + this.signatureTime = signatureTime; + } + + public List getSignatureList() { + return signatureList; + } + + public void setSignatureList(List signatureList) { + this.signatureList = signatureList; + } + } + + public static class SignatureItem { + private String owner; + private String signatureId; + private String signer; + private String signatureTime; + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getSignatureId() { + return signatureId; + } + + public void setSignatureId(String signatureId) { + this.signatureId = signatureId; + } + + public String getSigner() { + return signer; + } + + public void setSigner(String signer) { + this.signer = signer; + } + + public String getSignatureTime() { + return signatureTime; + } + + public void setSignatureTime(String signatureTime) { + this.signatureTime = signatureTime; + } + } + + public static class SealInfo { + private String sealId; + private String sealName; + private String pictureUrl; + private Integer sealType; + private String owner; + + public String getSealId() { + return sealId; + } + + public void setSealId(String sealId) { + this.sealId = sealId; + } + + public String getSealName() { + return sealName; + } + + public void setSealName(String sealName) { + this.sealName = sealName; + } + + public String getPictureUrl() { + return pictureUrl; + } + + public void setPictureUrl(String pictureUrl) { + this.pictureUrl = pictureUrl; + } + + public Integer getSealType() { + return sealType; + } + + public void setSealType(Integer sealType) { + this.sealType = sealType; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + } + + public static class ContractDetail { + private String contractId; + private String contractName; + private Integer status; + private String statusName; + private String startTime; + private Integer fileSize; + private List signatureList; + private Integer imageWidth; + private Integer imageHeight; + private String pdfUrl; + private List pdfToImageList; + private String downloadUrl; + + public String getContractId() { + return contractId; + } + + public void setContractId(String contractId) { + this.contractId = contractId; + } + + public String getContractName() { + return contractName; + } + + public void setContractName(String contractName) { + this.contractName = contractName; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getStatusName() { + return statusName; + } + + public void setStatusName(String statusName) { + this.statusName = statusName; + } + + public String getStartTime() { + return startTime; + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public Integer getFileSize() { + return fileSize; + } + + public void setFileSize(Integer fileSize) { + this.fileSize = fileSize; + } + + public List getSignatureList() { + return signatureList; + } + + public void setSignatureList(List signatureList) { + this.signatureList = signatureList; + } + + public Integer getImageWidth() { + return imageWidth; + } + + public void setImageWidth(Integer imageWidth) { + this.imageWidth = imageWidth; + } + + public Integer getImageHeight() { + return imageHeight; + } + + public void setImageHeight(Integer imageHeight) { + this.imageHeight = imageHeight; + } + + public String getPdfUrl() { + return pdfUrl; + } + + public void setPdfUrl(String pdfUrl) { + this.pdfUrl = pdfUrl; + } + + public List getPdfToImageList() { + return pdfToImageList; + } + + public void setPdfToImageList(List pdfToImageList) { + this.pdfToImageList = pdfToImageList; + } + + public String getDownloadUrl() { + return downloadUrl; + } + + public void setDownloadUrl(String downloadUrl) { + this.downloadUrl = downloadUrl; + } + } + + public static class SignerIdData { + private String signerId; + + public String getSignerId() { + return signerId; + } + + public void setSignerId(String signerId) { + this.signerId = signerId; + } + } + + public static class UserInfoData { + private String name; + private String mobile; + private String code; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + } + + public static class LoginCallbackData { + private String requestId; + private String accountId; + private String accountType; + private String username; + private String entName; + private String entCode; + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public String getAccountType() { + return accountType; + } + + public void setAccountType(String accountType) { + this.accountType = accountType; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getEntName() { + return entName; + } + + public void setEntName(String entName) { + this.entName = entName; + } + + public String getEntCode() { + return entCode; + } + + public void setEntCode(String entCode) { + this.entCode = entCode; + } + } + + public static class SignCallbackData { + private String contractId; + private String contractName; + private Integer contractStatus; + private String signer; + private String signerId; + private String requestId; + + public String getContractId() { + return contractId; + } + + public void setContractId(String contractId) { + this.contractId = contractId; + } + + public String getContractName() { + return contractName; + } + + public void setContractName(String contractName) { + this.contractName = contractName; + } + + public Integer getContractStatus() { + return contractStatus; + } + + public void setContractStatus(Integer contractStatus) { + this.contractStatus = contractStatus; + } + + public String getSigner() { + return signer; + } + + public void setSigner(String signer) { + this.signer = signer; + } + + public String getSignerId() { + return signerId; + } + + public void setSignerId(String signerId) { + this.signerId = signerId; + } + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + } + + public static class TrusteeshipCallbackData { + private String requestId; + private List sealList; + private String signer; + private String signerId; + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public List getSealList() { + return sealList; + } + + public void setSealList(List sealList) { + this.sealList = sealList; + } + + public String getSigner() { + return signer; + } + + public void setSigner(String signer) { + this.signer = signer; + } + + public String getSignerId() { + return signerId; + } + + public void setSignerId(String signerId) { + this.signerId = signerId; + } + } + + public static class TrusteeshipSealItem { + private String sealId; + private String sealName; + private String entName; + private String pictureUrl; + private String owner; + private String ownerSubAccountId; + private Integer sealType; + + public String getSealId() { + return sealId; + } + + public void setSealId(String sealId) { + this.sealId = sealId; + } + + public String getSealName() { + return sealName; + } + + public void setSealName(String sealName) { + this.sealName = sealName; + } + + public String getEntName() { + return entName; + } + + public void setEntName(String entName) { + this.entName = entName; + } + + public String getPictureUrl() { + return pictureUrl; + } + + public void setPictureUrl(String pictureUrl) { + this.pictureUrl = pictureUrl; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getOwnerSubAccountId() { + return ownerSubAccountId; + } + + public void setOwnerSubAccountId(String ownerSubAccountId) { + this.ownerSubAccountId = ownerSubAccountId; + } + + public Integer getSealType() { + return sealType; + } + + public void setSealType(Integer sealType) { + this.sealType = sealType; + } + } + + public static class SignQrCodeCallbackData { + private String requestId; + private String accountId; + private String accountType; + private String username; + private String entName; + private String entCode; + private String signatureValue; + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public String getAccountType() { + return accountType; + } + + public void setAccountType(String accountType) { + this.accountType = accountType; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getEntName() { + return entName; + } + + public void setEntName(String entName) { + this.entName = entName; + } + + public String getEntCode() { + return entCode; + } + + public void setEntCode(String entCode) { + this.entCode = entCode; + } + + public String getSignatureValue() { + return signatureValue; + } + + public void setSignatureValue(String signatureValue) { + this.signatureValue = signatureValue; + } + } +} diff --git a/src/main/java/com/nbport/zgwl/seal/handler/SealWebSocketHandler.java b/src/main/java/com/nbport/zgwl/seal/handler/SealWebSocketHandler.java new file mode 100644 index 0000000..f93d788 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/seal/handler/SealWebSocketHandler.java @@ -0,0 +1,151 @@ +package com.nbport.zgwl.seal.handler; + +import com.alibaba.fastjson2.JSON; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; + +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 签章平台WebSocket处理器 + * + * 职责: + * 1. 管理WebSocket连接 + * 2. 接收签章平台回调后,实时推送给对应的前端页面 + * 3. 提供轮询兜底机制 + * + * @author xiaofengzhou + */ +@Component +public class SealWebSocketHandler extends TextWebSocketHandler { + + private static final Logger log = LoggerFactory.getLogger(SealWebSocketHandler.class); + + private static final ConcurrentHashMap sessions = new ConcurrentHashMap<>(); + + private static final ConcurrentHashMap requestSessionMap = new ConcurrentHashMap<>(); + + private static final ConcurrentHashMap> callbackCache = new ConcurrentHashMap<>(); + + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + String sessionId = session.getId(); + sessions.put(sessionId, session); + log.info("WebSocket连接建立: sessionId={}", sessionId); + sendMessage(session, "{\"type\":\"connected\",\"sessionId\":\"" + sessionId + "\"}"); + } + + @Override + protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { + String payload = message.getPayload(); + log.debug("收到WebSocket消息: sessionId={}, payload={}", session.getId(), payload); + + try { + Map msgMap = JSON.parseObject(payload, Map.class); + String action = (String) msgMap.get("action"); + + if ("subscribe".equals(action)) { + String requestId = (String) msgMap.get("requestId"); + if (requestId != null) { + requestSessionMap.put(requestId, session.getId()); + log.info("WebSocket订阅: requestId={}, sessionId={}", requestId, session.getId()); + + Map cached = callbackCache.get(requestId); + if (cached != null) { + sendCallbackToSession(session, requestId, (String) cached.get("callbackType"), cached); + callbackCache.remove(requestId); + } + } + } else if ("unsubscribe".equals(action)) { + String requestId = (String) msgMap.get("requestId"); + if (requestId != null) { + requestSessionMap.remove(requestId); + log.info("WebSocket取消订阅: requestId={}", requestId); + } + } else if ("ping".equals(action)) { + sendMessage(session, "{\"type\":\"pong\"}"); + } + } catch (Exception e) { + log.error("处理WebSocket消息失败", e); + } + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { + String sessionId = session.getId(); + sessions.remove(sessionId); + requestSessionMap.entrySet().removeIf(entry -> sessionId.equals(entry.getValue())); + log.info("WebSocket连接关闭: sessionId={}, status={}", sessionId, status); + } + + @Override + public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { + log.error("WebSocket传输错误: sessionId={}", session.getId(), exception); + sessions.remove(session.getId()); + } + + public void sendCallbackMessage(String requestId, String callbackType, Map data) { + if (requestId == null) { + return; + } + + Map cacheEntry = new ConcurrentHashMap<>(); + cacheEntry.put("callbackType", callbackType); + cacheEntry.putAll(data); + callbackCache.put(requestId, cacheEntry); + + String sessionId = requestSessionMap.get(requestId); + if (sessionId != null) { + WebSocketSession session = sessions.get(sessionId); + if (session != null && session.isOpen()) { + sendCallbackToSession(session, requestId, callbackType, data); + log.info("WebSocket推送回调成功: requestId={}, callbackType={}", requestId, callbackType); + } else { + log.warn("WebSocket session不存在或已关闭: sessionId={}, requestId={}", sessionId, requestId); + requestSessionMap.remove(requestId); + } + } else { + log.info("没有前端订阅此requestId的回调: requestId={}, 数据已缓存供轮询使用", requestId); + } + } + + private void sendCallbackToSession(WebSocketSession session, String requestId, String callbackType, Map data) { + try { + Map message = new ConcurrentHashMap<>(); + message.put("type", "callback"); + message.put("requestId", requestId); + message.put("callbackType", callbackType); + message.put("data", data); + sendMessage(session, JSON.toJSONString(message)); + } catch (Exception e) { + log.error("WebSocket推送失败: sessionId={}", session.getId(), e); + } + } + + private void sendMessage(WebSocketSession session, String message) { + try { + if (session.isOpen()) { + synchronized (session) { + session.sendMessage(new TextMessage(message)); + } + } + } catch (IOException e) { + log.error("WebSocket发送消息失败", e); + } + } + + public Map getCallbackData(String requestId) { + return callbackCache.remove(requestId); + } + + public int getOnlineCount() { + return sessions.size(); + } +} diff --git a/src/main/java/com/nbport/zgwl/seal/service/SealTokenService.java b/src/main/java/com/nbport/zgwl/seal/service/SealTokenService.java new file mode 100644 index 0000000..480c011 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/seal/service/SealTokenService.java @@ -0,0 +1,119 @@ +package com.nbport.zgwl.seal.service; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.nbport.zgwl.seal.config.SealConfig; +import com.nbport.zgwl.seal.utils.HMacSHA256Util; +import com.nbport.zgwl.seal.utils.SeaHttpUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; + +import java.util.concurrent.locks.ReentrantLock; + +/** + * 签章平台Token管理服务 + * + * @author xiaofengzhou + */ +@Service +public class SealTokenService { + + private static final Logger log = LoggerFactory.getLogger(SealTokenService.class); + + @Autowired + private SealConfig sealConfig; + + private volatile String cachedToken; + + private volatile long tokenExpireTime = 0; + + private final ReentrantLock lock = new ReentrantLock(); + + private static final long TOKEN_EXPIRE_SECONDS = 7200; + + private static final long REFRESH_BEFORE_SECONDS = 300; + + public String getAccessToken() { + long now = System.currentTimeMillis(); + if (cachedToken != null && now < tokenExpireTime - REFRESH_BEFORE_SECONDS * 1000) { + return cachedToken; + } + + try { + lock.lock(); + if (cachedToken != null && now < tokenExpireTime - REFRESH_BEFORE_SECONDS * 1000) { + return cachedToken; + } + refreshToken(); + return cachedToken; + } finally { + lock.unlock(); + } + } + + public String forceRefreshToken() { + try { + lock.lock(); + refreshToken(); + return cachedToken; + } finally { + lock.unlock(); + } + } + + private void refreshToken() { + try { + String appKey = sealConfig.getAppKey(); + String appSecret = sealConfig.getAppSecret(); + long timestamp = System.currentTimeMillis(); + + JSONObject signData = new JSONObject(); + signData.put("appKey", appKey); + signData.put("timestamp", timestamp); + String signatureStr = JSON.toJSONString(signData); + + String signature = HMacSHA256Util.encrypt(signatureStr, appSecret); + log.debug("签章平台Token请求 - 签名原文: {}, 签名值: {}", signatureStr, signature); + + JSONObject requestBody = new JSONObject(); + requestBody.put("appKey", appKey); + requestBody.put("timestamp", timestamp); + requestBody.put("signature", signature); + + String url = sealConfig.getBaseUrl() + "/saas/api/token/getAccessToken"; + log.info("请求签章平台获取Token, URL: {}", url); + String response = SeaHttpUtils.sendPost(url, requestBody.toJSONString(), MediaType.APPLICATION_JSON_VALUE); + + JSONObject result = JSON.parseObject(response); + if (result.getBooleanValue("isSuccess")) { + JSONObject data = result.getJSONObject("data"); + cachedToken = data.getString("access_token"); + long expiresIn = data.getLongValue("expires_in", TOKEN_EXPIRE_SECONDS); + tokenExpireTime = System.currentTimeMillis() + expiresIn * 1000; + log.info("签章平台Token获取成功, 有效期: {}秒", expiresIn); + } else { + String msg = result.getString("msg"); + log.error("签章平台Token获取失败: {}", msg); + throw new RuntimeException("获取签章平台Token失败: " + msg); + } + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + log.error("获取签章平台Token异常", e); + throw new RuntimeException("获取签章平台Token异常: " + e.getMessage(), e); + } + } + + public void clearToken() { + try { + lock.lock(); + cachedToken = null; + tokenExpireTime = 0; + } finally { + lock.unlock(); + } + } +} diff --git a/src/main/java/com/nbport/zgwl/seal/utils/HMacSHA256Util.java b/src/main/java/com/nbport/zgwl/seal/utils/HMacSHA256Util.java new file mode 100644 index 0000000..dfb0a83 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/seal/utils/HMacSHA256Util.java @@ -0,0 +1,40 @@ +package com.nbport.zgwl.seal.utils; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; + +/** + * HMacSHA256签名算法工具类 + * + * @author xiaofengzhou + */ +public class HMacSHA256Util { + + public static String encrypt(String message, String appSecret) { + final String algorithm = "HmacSHA256"; + try { + Mac hmacSha256 = Mac.getInstance(algorithm); + byte[] keyBytes = appSecret.getBytes(StandardCharsets.UTF_8); + byte[] messageBytes = message.getBytes(StandardCharsets.UTF_8); + hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, algorithm)); + byte[] digestBytes = hmacSha256.doFinal(messageBytes); + return byteArrayToHexString(digestBytes); + } catch (Exception e) { + throw new RuntimeException("HMacSHA256签名计算失败: " + e.getMessage(), e); + } + } + + private static String byteArrayToHexString(byte[] bytes) { + StringBuilder hs = new StringBuilder(); + String stmp; + for (int n = 0; (bytes != null) && (n < bytes.length); n++) { + stmp = Integer.toHexString(bytes[n] & 0xFF); + if (stmp.length() == 1) { + hs.append('0'); + } + hs.append(stmp); + } + return hs.toString().toLowerCase(); + } +} diff --git a/src/main/java/com/nbport/zgwl/seal/utils/SeaHttpUtils.java b/src/main/java/com/nbport/zgwl/seal/utils/SeaHttpUtils.java new file mode 100644 index 0000000..4b6fd94 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/seal/utils/SeaHttpUtils.java @@ -0,0 +1,16 @@ +package com.nbport.zgwl.seal.utils; + +/** + * 签章平台基础HTTP工具 + * + * 保留单独工具类名称,便于和原项目调用习惯保持一致。 + */ +public class SeaHttpUtils { + + private SeaHttpUtils() { + } + + public static String sendPost(String url, String jsonBody, String contentType) { + return SealHttpClient.post(url, jsonBody, null, contentType); + } +} diff --git a/src/main/java/com/nbport/zgwl/seal/utils/SealHttpClient.java b/src/main/java/com/nbport/zgwl/seal/utils/SealHttpClient.java new file mode 100644 index 0000000..19876da --- /dev/null +++ b/src/main/java/com/nbport/zgwl/seal/utils/SealHttpClient.java @@ -0,0 +1,179 @@ +package com.nbport.zgwl.seal.utils; + +import cn.hutool.core.util.StrUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.multipart.MultipartFile; + +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.security.cert.X509Certificate; +import java.util.UUID; + +/** + * 签章平台HTTP客户端工具类 + * + * @author xiaofengzhou + */ +public class SealHttpClient { + + private static final Logger log = LoggerFactory.getLogger(SealHttpClient.class); + + private static final int CONNECT_TIMEOUT = 30000; + + private static final int READ_TIMEOUT = 60000; + + public static String post(String url, String jsonBody, String accessToken, String contentType) { + HttpURLConnection conn = null; + try { + conn = createConnection(url); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestProperty("Content-Type", contentType); + conn.setRequestProperty("Accept", "application/json"); + if (StrUtil.isNotBlank(accessToken)) { + conn.setRequestProperty("access_token", accessToken); + } + conn.setRequestProperty("User-Agent", "Mozilla/5.0"); + + if (jsonBody != null && !jsonBody.isEmpty()) { + try (OutputStream os = conn.getOutputStream()) { + byte[] input = jsonBody.getBytes(StandardCharsets.UTF_8); + os.write(input, 0, input.length); + } + } + + return readResponse(conn); + } catch (Exception e) { + log.error("HTTP POST请求失败, URL: {}", url, e); + throw new RuntimeException("请求签章平台失败: " + e.getMessage(), e); + } finally { + if (conn != null) { + conn.disconnect(); + } + } + } + + public static String postMultipart(String url, MultipartFile file, String contractName, String description, String accessToken) { + HttpURLConnection conn = null; + String boundary = "----WebKitFormBoundary" + UUID.randomUUID().toString().replace("-", ""); + + try { + conn = createConnection(url); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); + if (StrUtil.isNotBlank(accessToken)) { + conn.setRequestProperty("access_token", accessToken); + } + conn.setRequestProperty("User-Agent", "Mozilla/5.0"); + + try (OutputStream os = conn.getOutputStream(); + PrintWriter writer = new PrintWriter(new OutputStreamWriter(os, StandardCharsets.UTF_8), true)) { + addFormField(writer, boundary, "contractName", contractName); + + if (description != null && !description.isEmpty()) { + addFormField(writer, boundary, "description", description); + } + + writer.append("--").append(boundary).append("\r\n"); + writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"") + .append(file.getOriginalFilename()).append("\"\r\n"); + writer.append("Content-Type: ").append(file.getContentType()).append("\r\n\r\n"); + writer.flush(); + os.write(file.getBytes()); + os.flush(); + writer.append("\r\n"); + + writer.append("--").append(boundary).append("--\r\n"); + writer.flush(); + } + + return readResponse(conn); + } catch (Exception e) { + log.error("文件上传请求失败, URL: {}", url, e); + throw new RuntimeException("文件上传失败: " + e.getMessage(), e); + } finally { + if (conn != null) { + conn.disconnect(); + } + } + } + + private static void addFormField(PrintWriter writer, String boundary, String name, String value) { + writer.append("--").append(boundary).append("\r\n"); + writer.append("Content-Disposition: form-data; name=\"") + .append(name).append("\"\r\n\r\n"); + writer.append(value).append("\r\n"); + writer.flush(); + } + + private static HttpURLConnection createConnection(String urlStr) throws Exception { + URL url = new URL(urlStr); + HttpURLConnection conn; + + if ("https".equalsIgnoreCase(url.getProtocol())) { + HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection(); + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, new TrustManager[]{new TrustAllManager()}, new java.security.SecureRandom()); + httpsConn.setSSLSocketFactory(sslContext.getSocketFactory()); + httpsConn.setHostnameVerifier((hostname, session) -> true); + conn = httpsConn; + } else { + conn = (HttpURLConnection) url.openConnection(); + } + + conn.setConnectTimeout(CONNECT_TIMEOUT); + conn.setReadTimeout(READ_TIMEOUT); + return conn; + } + + private static String readResponse(HttpURLConnection conn) throws IOException { + int responseCode = conn.getResponseCode(); + InputStream inputStream = responseCode >= 200 && responseCode < 300 ? conn.getInputStream() : conn.getErrorStream(); + + if (inputStream == null) { + return "{}"; + } + + StringBuilder response = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) { + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + } + + log.debug("签章平台响应 [{}]: {}", responseCode, response); + return response.toString(); + } + + private static class TrustAllManager implements X509TrustManager { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) { + } + + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + } +} diff --git a/src/main/java/com/nbport/zgwl/service/LocalFileService.java b/src/main/java/com/nbport/zgwl/service/LocalFileService.java new file mode 100644 index 0000000..f77c3f1 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/service/LocalFileService.java @@ -0,0 +1,81 @@ +package com.nbport.zgwl.service; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.nbport.zgwl.exception.ServiceErrorCodeRange; +import com.nbport.zgwl.exception.ServiceException; +import com.nbport.zgwl.utils.FileStorageUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.http.ContentDisposition; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.Objects; + +@Service +@Slf4j +@RequiredArgsConstructor +public class LocalFileService { + + @Value("${file.local.path:${user.dir}/upload-files}") + private String localPath; + + public String upload(MultipartFile file) { + if (file == null || file.isEmpty()) { + throw new ServiceException("上传文件不能为空"); + } + try { + Path rootPath = Paths.get(localPath).toAbsolutePath().normalize(); + Files.createDirectories(rootPath); + + String dateFolder = LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE); + String suffix = FileStorageUtils.getFileSuffix(Objects.requireNonNullElse(file.getOriginalFilename(), "")); + String fileName = IdUtil.simpleUUID() + suffix; + String relativePath = dateFolder + "/" + fileName; + Path targetPath = FileStorageUtils.resolveFilePath(rootPath, relativePath); + Files.createDirectories(targetPath.getParent()); + file.transferTo(targetPath); + log.info("文件上传成功,targetPath={}", targetPath); + return relativePath; + } catch (IOException e) { + log.error("文件上传失败", e); + throw new ServiceException("文件上传失败"); + } + } + + public ResponseEntity download(String fileName) { + try { + Path rootPath = Paths.get(localPath).toAbsolutePath().normalize(); + Path filePath = FileStorageUtils.resolveFilePath(rootPath, fileName); + if (!Files.exists(filePath) || Files.isDirectory(filePath)) { + throw new ServiceException(ServiceErrorCodeRange.FILE_NOT_FOUND, "文件不存在"); + } + byte[] bytes = Files.readAllBytes(filePath); + String contentType = Files.probeContentType(filePath); + MediaType mediaType = contentType == null ? MediaType.APPLICATION_OCTET_STREAM : MediaType.parseMediaType(contentType); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(mediaType); + headers.setContentLength(bytes.length); + headers.setContentDisposition(ContentDisposition.inline().filename(filePath.getFileName().toString()).build()); + return ResponseEntity.ok() + .headers(headers) + .body(new ByteArrayResource(bytes)); + } catch (IOException e) { + log.error("文件下载失败", e); + throw new ServiceException("文件下载失败"); + } + } +} diff --git a/src/main/java/com/nbport/zgwl/service/StudentService.java b/src/main/java/com/nbport/zgwl/service/StudentService.java new file mode 100644 index 0000000..f5ca6e7 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/service/StudentService.java @@ -0,0 +1,79 @@ +package com.nbport.zgwl.service; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nbport.zgwl.common.PageResult; +import com.nbport.zgwl.dto.StudentQueryDto; +import com.nbport.zgwl.dto.StudentSaveDto; +import com.nbport.zgwl.entity.StudentEntity; +import com.nbport.zgwl.entity.SysUserEntity; +import com.nbport.zgwl.exception.ServiceErrorCodeRange; +import com.nbport.zgwl.exception.ServiceException; +import com.nbport.zgwl.mapper.StudentMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Map; + +@Service +@Slf4j +@RequiredArgsConstructor +public class StudentService { + + private final StudentMapper studentMapper; + + public PageResult> queryList(StudentQueryDto queryDto, SysUserEntity user) { + try { + log.info("学生分页查询,user={}, queryDto={}", user, queryDto); + Page> page = new Page<>(queryDto.getPageNo(), queryDto.getPageSize()); + return new PageResult<>(studentMapper.queryList(page, queryDto)); + } catch (Exception e) { + log.error("分页查询学生失败", e); + throw new ServiceException("分页查询失败"); + } + } + + public StudentEntity detail(Long id) { + StudentEntity studentEntity = studentMapper.selectById(id); + if (studentEntity == null) { + throw new ServiceException(ServiceErrorCodeRange.DATA_NOT_FOUND, "学生信息不存在"); + } + return studentEntity; + } + + @Transactional(rollbackFor = Exception.class) + public void add(StudentSaveDto dto) { + boolean exists = studentMapper.exists(new LambdaQueryWrapper() + .eq(StudentEntity::getStudentNo, dto.getStudentNo())); + if (exists) { + throw new ServiceException("学号已存在"); + } + StudentEntity entity = BeanUtil.copyProperties(dto, StudentEntity.class); + studentMapper.insert(entity); + } + + @Transactional(rollbackFor = Exception.class) + public void update(StudentSaveDto dto) { + if (dto.getId() == null) { + throw new ServiceException("id 不能为空"); + } + StudentEntity dbEntity = detail(dto.getId()); + boolean exists = studentMapper.exists(new LambdaQueryWrapper() + .eq(StudentEntity::getStudentNo, dto.getStudentNo()) + .ne(StudentEntity::getId, dto.getId())); + if (exists) { + throw new ServiceException("学号已存在"); + } + BeanUtil.copyProperties(dto, dbEntity); + studentMapper.updateById(dbEntity); + } + + @Transactional(rollbackFor = Exception.class) + public void delete(Long id) { + detail(id); + studentMapper.deleteById(id); + } +} diff --git a/src/main/java/com/nbport/zgwl/utils/FileStorageUtils.java b/src/main/java/com/nbport/zgwl/utils/FileStorageUtils.java new file mode 100644 index 0000000..7f85d95 --- /dev/null +++ b/src/main/java/com/nbport/zgwl/utils/FileStorageUtils.java @@ -0,0 +1,28 @@ +package com.nbport.zgwl.utils; + +import cn.hutool.core.util.StrUtil; +import com.nbport.zgwl.exception.ServiceException; + +import java.nio.file.Path; + +public class FileStorageUtils { + + private FileStorageUtils() { + } + + public static String getFileSuffix(String originalFilename) { + if (StrUtil.isBlank(originalFilename) || !originalFilename.contains(".")) { + return ""; + } + return originalFilename.substring(originalFilename.lastIndexOf(".")); + } + + public static Path resolveFilePath(Path rootPath, String relativePath) { + String normalizedRelativePath = relativePath.replace("\\", "/"); + Path targetPath = rootPath.resolve(normalizedRelativePath).normalize(); + if (!targetPath.startsWith(rootPath)) { + throw new ServiceException("非法文件路径"); + } + return targetPath; + } +} diff --git a/src/main/java/com/nbport/zgwl/utils/MockSecurityManager.java b/src/main/java/com/nbport/zgwl/utils/MockSecurityManager.java new file mode 100644 index 0000000..e5b836a --- /dev/null +++ b/src/main/java/com/nbport/zgwl/utils/MockSecurityManager.java @@ -0,0 +1,17 @@ +package com.nbport.zgwl.utils; + +import com.nbport.zgwl.entity.SysUserEntity; +import org.springframework.stereotype.Component; + +@Component +public class MockSecurityManager { + + public SysUserEntity getLoginUser() { + SysUserEntity user = new SysUserEntity(); + user.setId(1L); + user.setUsername("admin"); + user.setMobilePhone("13800000000"); + user.setEmail("admin@test.com"); + return user; + } +} diff --git a/src/main/resources/application-mysql.yml b/src/main/resources/application-mysql.yml new file mode 100644 index 0000000..10e79a1 --- /dev/null +++ b/src/main/resources/application-mysql.yml @@ -0,0 +1,6 @@ +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/zgwl_end?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true + username: root + password: root diff --git a/src/main/resources/application-oracle.yml b/src/main/resources/application-oracle.yml new file mode 100644 index 0000000..a45f55d --- /dev/null +++ b/src/main/resources/application-oracle.yml @@ -0,0 +1,8 @@ +spring: + datasource: + driver-class-name: oracle.jdbc.OracleDriver + url: jdbc:oracle:thin:@//127.0.0.1:1521/XEPDB1 + username: developer + password: dev123 + hikari: + connection-test-query: SELECT 1 FROM DUAL diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..81ea3e1 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,64 @@ +server: + port: 8899 + +spring: + application: + name: zgwl-end + profiles: + active: ${SPRING_PROFILES_ACTIVE:oracle} + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + +mybatis-plus: + mapper-locations: classpath*:mapper/**/*.xml + type-aliases-package: com.nbport.zgwl.entity,com.nbport.zgwl.partner.domain,com.nbport.zgwl.manifest.domain + configuration: + map-underscore-to-camel-case: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + banner: false + +springdoc: + swagger-ui: + path: /swagger-ui.html + api-docs: + path: /v3/api-docs + +file: + local: + path: ${user.dir}/upload-files + +seal: + appKey: A7C4FD32BE454B5 + appSecret: 6c74358c28c149f18242bd614a101910 + baseUrl: https://saasapi.certca.cn + +contract-push: + settlement: + systemKey: stamp-settlement-test-key + secretKey: stamp-settlement-test-secret + tokenUrl: http://10.168.53.211:8888/grcv5/serverapi/restapi/other/v1/ecp/getToken + pushContractUrl: http://10.168.53.211:8888/grcv5/serverapi/restapi/other/v1/ecp/pushContract + approveQueryUrl: http://10.168.53.211:8888/grcv5/serverapi/restapi/other/v1/ecp/queryInfoByContractSysId + archiveUrl: http://10.168.53.211:8888/grcv5/serverapi/restapi/other/v1/ecp/collectContractArchive + approveViewBaseUrl: http://10.168.53.211:8888/wp/grcv5/contractView/G_1_viewContractApprove.htm + dataCollection: + systemKey: stamp-collection-test-key + secretKey: stamp-collection-test-secret + sysCode: stamp-end-demo + tokenUrl: http://10.168.53.211:8888/grcv5/cj/rest/dataCenter/getToken + uploadUrl: http://10.168.53.211:8888/grcv5/cj/rest/dataCenter/upload + collectOppositesUrl: http://10.168.53.211:8888/grcv5/cj/rest/dataCenter/collectOpposites + collectZtbsUrl: http://10.168.53.211:8888/grcv5/cj/rest/dataCenter/collectZtbs + collectContractUrl: http://10.168.53.211:8888/grcv5/cj/rest/dataCenter/collectContract + collectPlanFeedbackUrl: http://10.168.53.211:8888/grcv5/cj/rest/dataCenter/collectPlanFeedback + collectContractCloseUrl: http://10.168.53.211:8888/grcv5/cj/rest/dataCenter/collectContractClose + collectContractArchiveUrl: http://10.168.53.211:8888/grcv5/cj/rest/dataCenter/collectContractArchive + queryApproveInfoUrl: http://10.168.53.211:8888/grcv5/cj/rest/dataCenter/queryApproveInfo + approveViewBaseUrl: http://10.168.53.211:8888/grcv5/wp/contractView/G_1_viewContractApprove.htm + +logging: + level: + com.nbport.zgwl.mapper: debug diff --git a/src/main/resources/mapper/StudentMapper.xml b/src/main/resources/mapper/StudentMapper.xml new file mode 100644 index 0000000..dd0496a --- /dev/null +++ b/src/main/resources/mapper/StudentMapper.xml @@ -0,0 +1,59 @@ + + + + + + diff --git a/src/main/resources/mapper/manifest/ContractTemplateMapper.xml b/src/main/resources/mapper/manifest/ContractTemplateMapper.xml new file mode 100644 index 0000000..bfb749e --- /dev/null +++ b/src/main/resources/mapper/manifest/ContractTemplateMapper.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, template_code, template_name, source, contract_type, self_party_role, + version, status, variable_count, description, usage_tip, + template_file_name, template_file_path, + publish_org_ids_json, publish_org_names_json, variable_mappings_json, + create_by, created_time, updated_by, updated_time, del_flag + from contract_template_manage + + + + + + + + + + insert into contract_template_manage + ( + id, template_code, template_name, source, contract_type, self_party_role, + version, status, variable_count, description, usage_tip, + template_file_name, template_file_path, + publish_org_ids_json, publish_org_names_json, variable_mappings_json, + create_by, created_time, updated_by, updated_time, del_flag + ) + values + ( + #{id}, #{templateCode}, #{templateName}, #{source}, #{contractType}, #{selfPartyRole}, + #{version}, #{status}, #{variableCount}, #{description}, #{usageTip}, + #{templateFileName}, #{templateFilePath}, + #{publishOrgIdsJson}, #{publishOrgNamesJson}, #{variableMappingsJson}, + #{createBy}, #{createdTime}, #{updatedBy}, #{updatedTime}, #{delFlag} + ) + + + + update contract_template_manage + + template_name = #{templateName}, + source = #{source}, + contract_type = #{contractType}, + self_party_role = #{selfPartyRole}, + version = #{version}, + status = #{status}, + variable_count = #{variableCount}, + description = #{description}, + usage_tip = #{usageTip}, + template_file_name = #{templateFileName}, + template_file_path = #{templateFilePath}, + publish_org_ids_json = #{publishOrgIdsJson}, + publish_org_names_json = #{publishOrgNamesJson}, + variable_mappings_json = #{variableMappingsJson}, + updated_by = #{updatedBy}, + updated_time = #{updatedTime}, + + where id = #{id} and del_flag = '0' + + + + update contract_template_manage + set status = #{status}, + updated_by = #{updateBy}, + updated_time = #{updateTime} + where id = #{id} and del_flag = '0' + + + + update contract_template_manage + set del_flag = #{delFlag}, + updated_by = #{updateBy}, + updated_time = #{updateTime} + where id = #{id} and del_flag = '0' + + diff --git a/src/main/resources/mapper/partner/PartnerManageMapper.xml b/src/main/resources/mapper/partner/PartnerManageMapper.xml new file mode 100644 index 0000000..0807db2 --- /dev/null +++ b/src/main/resources/mapper/partner/PartnerManageMapper.xml @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select CUSTOMER_SYSID, CUSTOMER_NAME_C, CUSTOMER_TAXNO, CUSTOMER_REGADDR, + EMAIL_ADDRESS, OPPOSITE_ID, OPPOSITE_CHARACTER, GAT_FLAG, GROUP_FLAG, + COUNTRY, COUNTRY_NAME, LEGAL_PERSON_NAME, CERTIFICATE_TYPE, + CERTIFICATE_NUM, TIN_CODE, REGISTERED_CAPITAL, REG_CAPITAL, + OPPOSITE_CODE, OPPOSITE_STATUS, IS_SGAT, IS_JTN, + NATURE_OF_ENTERPRISE_ORG, NATURE_OF_ENTERPRISE_ORG_LEV, RELATIVE_TYPE, + IS_DELETED, COMMENTS, REMARK, CREATE_BY, CREATE_TIME, + UPDATE_BY, UPDATE_TIME, sync_status, sync_time, sync_message + from ILDM_FEE_CUSTOMER_INFO + + + + + + + + insert into ILDM_FEE_CUSTOMER_INFO + ( + CUSTOMER_SYSID, CUSTOMER_NAME_C, CUSTOMER_TAXNO, CUSTOMER_REGADDR, EMAIL_ADDRESS, + OPPOSITE_ID, OPPOSITE_CHARACTER, GAT_FLAG, GROUP_FLAG, COUNTRY, + COUNTRY_NAME, LEGAL_PERSON_NAME, CERTIFICATE_TYPE, CERTIFICATE_NUM, + TIN_CODE, REGISTERED_CAPITAL, REG_CAPITAL, OPPOSITE_CODE, + OPPOSITE_STATUS, IS_SGAT, IS_JTN, NATURE_OF_ENTERPRISE_ORG, + NATURE_OF_ENTERPRISE_ORG_LEV, RELATIVE_TYPE, IS_DELETED, COMMENTS, + REMARK, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, + sync_status, sync_time, sync_message + ) + values + ( + #{customerSysid}, #{customerNameC}, #{customerTaxno}, #{customerRegaddr}, #{emailAddress}, + #{oppositeId}, #{oppositeCharacter}, #{gatFlag}, #{groupFlag}, #{country}, + #{countryName}, #{legalPersonName}, #{certificateType}, #{certificateNum}, + #{tinCode}, #{registeredCapital}, #{regCapital}, #{oppositeCode}, + #{oppositeStatus}, #{isSgat}, #{isJtn}, #{natureOfEnterpriseOrg}, + #{natureOfEnterpriseOrgLev}, #{relativeType}, #{isDeleted}, #{comments}, + #{remark}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, + #{syncStatus}, #{syncTime}, #{syncMessage} + ) + + + + update ILDM_FEE_CUSTOMER_INFO + + CUSTOMER_NAME_C = #{customerNameC}, + CUSTOMER_TAXNO = #{customerTaxno}, + CUSTOMER_REGADDR = #{customerRegaddr}, + EMAIL_ADDRESS = #{emailAddress}, + OPPOSITE_CHARACTER = #{oppositeCharacter}, + GAT_FLAG = #{gatFlag}, + GROUP_FLAG = #{groupFlag}, + COUNTRY = #{country}, + COUNTRY_NAME = #{countryName}, + LEGAL_PERSON_NAME = #{legalPersonName}, + CERTIFICATE_TYPE = #{certificateType}, + CERTIFICATE_NUM = #{certificateNum}, + TIN_CODE = #{tinCode}, + REGISTERED_CAPITAL = #{registeredCapital}, + REG_CAPITAL = #{regCapital}, + OPPOSITE_CODE = #{oppositeCode}, + OPPOSITE_STATUS = #{oppositeStatus}, + IS_SGAT = #{isSgat}, + IS_JTN = #{isJtn}, + NATURE_OF_ENTERPRISE_ORG = #{natureOfEnterpriseOrg}, + NATURE_OF_ENTERPRISE_ORG_LEV = #{natureOfEnterpriseOrgLev}, + RELATIVE_TYPE = #{relativeType}, + COMMENTS = #{comments}, + REMARK = #{remark}, + UPDATE_BY = #{updateBy}, + UPDATE_TIME = #{updateTime}, + sync_status = #{syncStatus}, + sync_time = #{syncTime}, + sync_message = #{syncMessage}, + + where CUSTOMER_SYSID = #{customerSysid} + and IS_DELETED = 'N' + + + + update ILDM_FEE_CUSTOMER_INFO + set IS_DELETED = #{isDeleted}, + UPDATE_BY = #{updateBy}, + UPDATE_TIME = #{updateTime} + where CUSTOMER_SYSID in + + #{customerSysid} + + + + + + + update SEAL_PARTNER_CONTACT + set del_flag = #{delFlag}, + update_by = #{updateBy}, + update_time = #{updateTime} + where partner_record_id = #{partnerRecordId} + and del_flag = '0' + + + + update SEAL_PARTNER_CONTACT + set del_flag = #{delFlag}, + update_by = #{updateBy}, + update_time = #{updateTime} + where partner_record_id in + + #{partnerRecordId} + + and del_flag = '0' + + + + INSERT ALL + + INTO SEAL_PARTNER_CONTACT + ( + id, partner_record_id, contact_name, contact_phone, postal_address, email, + sort_order, del_flag, create_by, create_time, update_by, update_time, remark + ) + VALUES + ( + #{item.id}, #{item.partnerRecordId}, #{item.contactName}, #{item.contactPhone}, + #{item.postalAddress}, #{item.email}, #{item.sortOrder}, + #{delFlag}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{item.remark} + ) + + SELECT 1 FROM DUAL + + + + update ILDM_FEE_CUSTOMER_INFO + set OPPOSITE_ID = #{oppositeId}, + sync_status = #{syncStatus}, + sync_time = #{syncTime}, + sync_message = #{syncMessage}, + UPDATE_BY = #{updateBy}, + UPDATE_TIME = #{updateTime} + where CUSTOMER_SYSID = #{customerSysid} + and IS_DELETED = 'N' + + diff --git a/upload-files/20260522/2b9e71a7ef6b4c7d9da0ce936fde6b4f.docx b/upload-files/20260522/2b9e71a7ef6b4c7d9da0ce936fde6b4f.docx new file mode 100644 index 0000000000000000000000000000000000000000..b7358a54b05187cc4f33e9dbab8f1272603c3f07 GIT binary patch literal 10390 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 MDDXEQ@|%bM4}75?761SM literal 0 HcmV?d00001 diff --git a/upload-files/20260522/6a60ec1df60a44a792e27ed1d99ef7e0.docx b/upload-files/20260522/6a60ec1df60a44a792e27ed1d99ef7e0.docx new file mode 100644 index 0000000000000000000000000000000000000000..b7358a54b05187cc4f33e9dbab8f1272603c3f07 GIT binary patch literal 10390 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 MDDXEQ@|%bM4}75?761SM literal 0 HcmV?d00001 diff --git a/upload-files/20260522/6f244579546f41b49345cc4a8621f222.png b/upload-files/20260522/6f244579546f41b49345cc4a8621f222.png new file mode 100644 index 0000000000000000000000000000000000000000..1968008acac6176d0ae7bac39cf9438e78dac836 GIT binary patch literal 561565 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

WnNzhGp>d1*W#)GfFa;^RrkHPxH8%51g=^m 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�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�!&_@bWm$^ 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 literal 0 HcmV?d00001 diff --git a/upload-files/20260522/c7fc19bb4699442e947155619638e444.docx b/upload-files/20260522/c7fc19bb4699442e947155619638e444.docx new file mode 100644 index 0000000000000000000000000000000000000000..b7358a54b05187cc4f33e9dbab8f1272603c3f07 GIT binary patch literal 10390 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 MDDXEQ@|%bM4}75?761SM literal 0 HcmV?d00001 diff --git a/upload-files/20260522/d956ff6687dd432199e1c68b81e5ecd3.docx b/upload-files/20260522/d956ff6687dd432199e1c68b81e5ecd3.docx new file mode 100644 index 0000000000000000000000000000000000000000..b7358a54b05187cc4f33e9dbab8f1272603c3f07 GIT binary patch literal 10390 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 MDDXEQ@|%bM4}75?761SM literal 0 HcmV?d00001 diff --git a/zgwl_end.sql b/zgwl_end.sql new file mode 100644 index 0000000..32eec04 --- /dev/null +++ b/zgwl_end.sql @@ -0,0 +1,25 @@ +CREATE DATABASE IF NOT EXISTS zgwl_end DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +USE zgwl_end; + +DROP TABLE IF EXISTS BIZ_STUDENT; +CREATE TABLE BIZ_STUDENT ( + id BIGINT NOT NULL COMMENT '主键ID', + student_no VARCHAR(64) NOT NULL COMMENT '学号', + student_name VARCHAR(64) NOT NULL COMMENT '姓名', + gender VARCHAR(16) NOT NULL COMMENT '性别', + age INT NOT NULL COMMENT '年龄', + phone VARCHAR(32) DEFAULT NULL COMMENT '手机号', + address VARCHAR(255) DEFAULT NULL COMMENT '地址', + create_dt DATETIME DEFAULT NULL COMMENT '创建时间', + update_dt DATETIME DEFAULT NULL COMMENT '更新时间', + create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人', + update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人', + PRIMARY KEY (id), + UNIQUE KEY uk_student_no (student_no) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生表'; + +INSERT INTO BIZ_STUDENT (id, student_no, student_name, gender, age, phone, address, create_dt, update_dt, create_by, update_by) VALUES +(1925800000000000001, 'S2024001', '张三', '男', 20, '13800001111', '宁波市鄞州区', NOW(), NOW(), 'system', 'system'), +(1925800000000000002, 'S2024002', '李四', '女', 21, '13800002222', '宁波市北仑区', NOW(), NOW(), 'system', 'system'), +(1925800000000000003, 'S2024003', '王五', '男', 22, '13800003333', '宁波市镇海区', NOW(), NOW(), 'system', 'system'); diff --git a/zgwl_end_oracle.sql b/zgwl_end_oracle.sql new file mode 100644 index 0000000..8c941b0 --- /dev/null +++ b/zgwl_end_oracle.sql @@ -0,0 +1,68 @@ +-- ============================================= +-- Oracle version for zgwl_end.sql +-- Execute with: sqlplus developer/dev123@localhost/XEPDB1 @zgwl_end_oracle.sql +-- ============================================= + +WHENEVER SQLERROR EXIT SQL.SQLCODE; + +BEGIN + EXECUTE IMMEDIATE 'DROP TABLE BIZ_STUDENT'; +EXCEPTION + WHEN OTHERS THEN + IF SQLCODE != -942 THEN + RAISE; + END IF; +END; +/ + +BEGIN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_BIZ_STUDENT'; +EXCEPTION + WHEN OTHERS THEN + IF SQLCODE != -2289 THEN + RAISE; + END IF; +END; +/ + +CREATE TABLE BIZ_STUDENT ( + ID NUMBER(19) NOT NULL, + STUDENT_NO VARCHAR2(64 CHAR) NOT NULL, + STUDENT_NAME VARCHAR2(64 CHAR) NOT NULL, + GENDER VARCHAR2(16 CHAR) NOT NULL, + AGE NUMBER(10) NOT NULL, + PHONE VARCHAR2(32 CHAR), + ADDRESS VARCHAR2(255 CHAR), + CREATE_DT TIMESTAMP(6), + UPDATE_DT TIMESTAMP(6), + CREATE_BY VARCHAR2(64 CHAR), + UPDATE_BY VARCHAR2(64 CHAR), + CONSTRAINT PK_BIZ_STUDENT PRIMARY KEY (ID), + CONSTRAINT UK_BIZ_STUDENT_NO UNIQUE (STUDENT_NO) +); + +COMMENT ON TABLE BIZ_STUDENT IS '学生表'; +COMMENT ON COLUMN BIZ_STUDENT.ID IS '主键ID'; +COMMENT ON COLUMN BIZ_STUDENT.STUDENT_NO IS '学号'; +COMMENT ON COLUMN BIZ_STUDENT.STUDENT_NAME IS '姓名'; +COMMENT ON COLUMN BIZ_STUDENT.GENDER IS '性别'; +COMMENT ON COLUMN BIZ_STUDENT.AGE IS '年龄'; +COMMENT ON COLUMN BIZ_STUDENT.PHONE IS '手机号'; +COMMENT ON COLUMN BIZ_STUDENT.ADDRESS IS '地址'; +COMMENT ON COLUMN BIZ_STUDENT.CREATE_DT IS '创建时间'; +COMMENT ON COLUMN BIZ_STUDENT.UPDATE_DT IS '更新时间'; +COMMENT ON COLUMN BIZ_STUDENT.CREATE_BY IS '创建人'; +COMMENT ON COLUMN BIZ_STUDENT.UPDATE_BY IS '更新人'; + +INSERT INTO BIZ_STUDENT (ID, STUDENT_NO, STUDENT_NAME, GENDER, AGE, PHONE, ADDRESS, CREATE_DT, UPDATE_DT, CREATE_BY, UPDATE_BY) VALUES +(1925800000000000001, 'S2024001', '张三', '男', 20, '13800001111', '宁波市鄞州区', SYSTIMESTAMP, SYSTIMESTAMP, 'system', 'system'); +INSERT INTO BIZ_STUDENT (ID, STUDENT_NO, STUDENT_NAME, GENDER, AGE, PHONE, ADDRESS, CREATE_DT, UPDATE_DT, CREATE_BY, UPDATE_BY) VALUES +(1925800000000000002, 'S2024002', '李四', '女', 21, '13800002222', '宁波市北仑区', SYSTIMESTAMP, SYSTIMESTAMP, 'system', 'system'); +INSERT INTO BIZ_STUDENT (ID, STUDENT_NO, STUDENT_NAME, GENDER, AGE, PHONE, ADDRESS, CREATE_DT, UPDATE_DT, CREATE_BY, UPDATE_BY) VALUES +(1925800000000000003, 'S2024003', '王五', '男', 22, '13800003333', '宁波市镇海区', SYSTIMESTAMP, SYSTIMESTAMP, 'system', 'system'); + +CREATE SEQUENCE SEQ_BIZ_STUDENT + START WITH 1925800000000000004 + INCREMENT BY 1 + NOCACHE + NOCYCLE; diff --git a/zgwl_manifest_tables.sql b/zgwl_manifest_tables.sql new file mode 100644 index 0000000..d375d60 --- /dev/null +++ b/zgwl_manifest_tables.sql @@ -0,0 +1,37 @@ +-- ============================================= +-- 合同模板管理模块数据表 +-- 执行方式:在 MySQL 中直接执行本文件 +-- ============================================= + +USE zgwl_end; + +DROP TABLE IF EXISTS `contract_template_manage`; + +CREATE TABLE `contract_template_manage` ( + `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `template_code` VARCHAR(64) NOT NULL COMMENT '范本编号,后端自动生成', + `template_name` VARCHAR(200) NOT NULL COMMENT '范本名称', + `source` VARCHAR(32) NOT NULL COMMENT '范本类型:标准模板/推荐文本/示范文本/对方文本', + `contract_type` VARCHAR(64) NOT NULL COMMENT '合同类型', + `self_party_role` VARCHAR(16) NOT NULL COMMENT '我方地位:甲方/乙方/丙方', + `version` VARCHAR(32) NOT NULL COMMENT '版本号', + `status` VARCHAR(20) NOT NULL DEFAULT 'draft' COMMENT '状态:draft/published/disabled', + `variable_count` INT NOT NULL DEFAULT 0 COMMENT '变量数量', + `description` VARCHAR(1000) DEFAULT NULL COMMENT '范本描述', + `usage_tip` VARCHAR(1000) DEFAULT NULL COMMENT '使用提示', + `template_file_name` VARCHAR(255) NOT NULL COMMENT '模板文件名称', + `template_file_path` VARCHAR(500) NOT NULL COMMENT '模板文件相对路径', + `publish_org_ids_json` TEXT DEFAULT NULL COMMENT '发布范围 orgId JSON 数组', + `publish_org_names_json` TEXT DEFAULT NULL COMMENT '发布范围 orgName JSON 数组', + `variable_mappings_json` LONGTEXT DEFAULT NULL COMMENT '变量映射 JSON 数组', + `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人', + `created_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updated_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人', + `updated_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标记:0存在 2删除', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_template_code` (`template_code`), + KEY `idx_template_name` (`template_name`), + KEY `idx_contract_type` (`contract_type`), + KEY `idx_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='合同模板管理表'; diff --git a/zgwl_manifest_tables_oracle.sql b/zgwl_manifest_tables_oracle.sql new file mode 100644 index 0000000..cbdd54f --- /dev/null +++ b/zgwl_manifest_tables_oracle.sql @@ -0,0 +1,85 @@ +-- ============================================= +-- Oracle version for zgwl_manifest_tables.sql +-- Execute with: sqlplus developer/dev123@localhost/XEPDB1 @zgwl_manifest_tables_oracle.sql +-- ============================================= + +WHENEVER SQLERROR EXIT SQL.SQLCODE; + +BEGIN + EXECUTE IMMEDIATE 'DROP TABLE CONTRACT_TEMPLATE_MANAGE'; +EXCEPTION + WHEN OTHERS THEN + IF SQLCODE != -942 THEN + RAISE; + END IF; +END; +/ + +BEGIN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_CONTRACT_TEMPLATE_MANAGE'; +EXCEPTION + WHEN OTHERS THEN + IF SQLCODE != -2289 THEN + RAISE; + END IF; +END; +/ + +CREATE TABLE CONTRACT_TEMPLATE_MANAGE ( + ID NUMBER(19) NOT NULL, + TEMPLATE_CODE VARCHAR2(64 CHAR) NOT NULL, + TEMPLATE_NAME VARCHAR2(200 CHAR) NOT NULL, + SOURCE VARCHAR2(32 CHAR) NOT NULL, + CONTRACT_TYPE VARCHAR2(64 CHAR) NOT NULL, + SELF_PARTY_ROLE VARCHAR2(16 CHAR) NOT NULL, + VERSION VARCHAR2(32 CHAR) NOT NULL, + STATUS VARCHAR2(20 CHAR) DEFAULT 'draft' NOT NULL, + VARIABLE_COUNT NUMBER(10) DEFAULT 0 NOT NULL, + DESCRIPTION VARCHAR2(1000 CHAR), + USAGE_TIP VARCHAR2(1000 CHAR), + TEMPLATE_FILE_NAME VARCHAR2(255 CHAR) NOT NULL, + TEMPLATE_FILE_PATH VARCHAR2(500 CHAR) NOT NULL, + PUBLISH_ORG_IDS_JSON CLOB, + PUBLISH_ORG_NAMES_JSON CLOB, + VARIABLE_MAPPINGS_JSON CLOB, + CREATE_BY VARCHAR2(64 CHAR), + CREATED_TIME TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, + UPDATED_BY VARCHAR2(64 CHAR), + UPDATED_TIME TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, + DEL_FLAG CHAR(1 CHAR) DEFAULT '0' NOT NULL, + CONSTRAINT PK_CONTRACT_TEMPLATE_MANAGE PRIMARY KEY (ID), + CONSTRAINT UK_TEMPLATE_CODE UNIQUE (TEMPLATE_CODE) +); + +CREATE INDEX IDX_TEMPLATE_NAME ON CONTRACT_TEMPLATE_MANAGE (TEMPLATE_NAME); +CREATE INDEX IDX_CONTRACT_TYPE ON CONTRACT_TEMPLATE_MANAGE (CONTRACT_TYPE); +CREATE INDEX IDX_STATUS ON CONTRACT_TEMPLATE_MANAGE (STATUS); + +COMMENT ON TABLE CONTRACT_TEMPLATE_MANAGE IS '合同模板管理表'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.ID IS '主键ID'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.TEMPLATE_CODE IS '范本编号,后端自动生成'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.TEMPLATE_NAME IS '范本名称'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.SOURCE IS '范本类型:标准模板/推荐文本/示范文本/对方文本'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.CONTRACT_TYPE IS '合同类型'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.SELF_PARTY_ROLE IS '我方地位:甲方/乙方/丙方'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.VERSION IS '版本号'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.STATUS IS '状态:draft/published/disabled'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.VARIABLE_COUNT IS '变量数量'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.DESCRIPTION IS '范本描述'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.USAGE_TIP IS '使用提示'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.TEMPLATE_FILE_NAME IS '模板文件名称'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.TEMPLATE_FILE_PATH IS '模板文件相对路径'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.PUBLISH_ORG_IDS_JSON IS '发布范围 orgId JSON 数组'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.PUBLISH_ORG_NAMES_JSON IS '发布范围 orgName JSON 数组'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.VARIABLE_MAPPINGS_JSON IS '变量映射 JSON 数组'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.CREATE_BY IS '创建人'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.CREATED_TIME IS '创建时间'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.UPDATED_BY IS '更新人'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.UPDATED_TIME IS '更新时间'; +COMMENT ON COLUMN CONTRACT_TEMPLATE_MANAGE.DEL_FLAG IS '删除标记:0存在 2删除'; + +CREATE SEQUENCE SEQ_CONTRACT_TEMPLATE_MANAGE + START WITH 1 + INCREMENT BY 1 + NOCACHE + NOCYCLE; diff --git a/zgwl_partner_tables.sql b/zgwl_partner_tables.sql new file mode 100644 index 0000000..109b61f --- /dev/null +++ b/zgwl_partner_tables.sql @@ -0,0 +1,137 @@ +-- ============================================= +-- 相对方管理模块数据表 +-- 执行方式:在 MySQL 中直接执行本文件 +-- ============================================= + +USE zgwl_end; + +DROP TABLE IF EXISTS `seal_partner_contact`; +DROP TABLE IF EXISTS `ILDM_FEE_CUSTOMER_INFO`; + +CREATE TABLE `ILDM_FEE_CUSTOMER_INFO` ( + `CUSTOMER_SYSID` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '客户系统ID', + `CUSTOMER_REGNO` VARCHAR(64) DEFAULT NULL COMMENT '客户注册号', + `CUSTOMER_NO` VARCHAR(64) DEFAULT NULL COMMENT '客户编号', + `CUSTOMER_NAME_C` VARCHAR(200) DEFAULT NULL COMMENT '公司全称', + `CUSTOMER_NAME_EN` VARCHAR(200) DEFAULT NULL COMMENT '公司英文名称', + `CUSTOMER_SHORT_NAME` VARCHAR(100) DEFAULT NULL COMMENT '公司简称', + `CUSTOMER_SHORT_NAME_EN` VARCHAR(100) DEFAULT NULL COMMENT '公司英文简称', + `CUSTOMER_TAXNO` VARCHAR(50) DEFAULT NULL COMMENT '统一社会信用代码', + `CUSTOMER_ADDRESS` VARCHAR(200) DEFAULT NULL COMMENT '详细地址', + `OFFICEPHONE` VARCHAR(20) DEFAULT NULL COMMENT '联系电话', + `CUSTOMER_BANK` VARCHAR(100) DEFAULT NULL COMMENT '开户银行', + `CUSTOMER_BANKACCOUNT` VARCHAR(50) DEFAULT NULL COMMENT '银行账户', + `CUSTOMER_CHARACTER` VARCHAR(50) DEFAULT NULL COMMENT '客户性质', + `CUSTOMER_REGADDR` VARCHAR(200) DEFAULT NULL COMMENT '注册地址', + `CUSTOMER_REGDATE` DATE DEFAULT NULL COMMENT '注册日期', + `CUSTOMER_NATURE` VARCHAR(50) DEFAULT NULL COMMENT '客户性质分类', + `CUSTOMER_ZIP` VARCHAR(20) DEFAULT NULL COMMENT '邮编', + `CUSTOMER_1_TYPEFLAG` VARCHAR(10) DEFAULT NULL COMMENT '客户类型标识1', + `CUSTOMER_2_TYPEFLAG` VARCHAR(10) DEFAULT NULL COMMENT '客户类型标识2', + `CUSTOMER_3_TYPEFLAG` VARCHAR(10) DEFAULT NULL COMMENT '客户类型标识3', + `CUSTOMER_4_TYPEFLAG` VARCHAR(10) DEFAULT NULL COMMENT '客户类型标识4', + `PLACE_TYPE` VARCHAR(10) DEFAULT NULL COMMENT '境内外', + `ACTIVEFLAG` VARCHAR(10) DEFAULT NULL COMMENT '启用标识', + `CUSTOMER_SYSID_HT` VARCHAR(64) DEFAULT NULL COMMENT '海铁系统客户ID', + `DOWN_DATE` DATE DEFAULT NULL COMMENT '下载日期', + `OPEN_FLAG` VARCHAR(10) DEFAULT NULL COMMENT '开户标识', + `CREATE_BY` VARCHAR(64) DEFAULT NULL COMMENT '创建人', + `CREATE_TIME` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `UPDATE_BY` VARCHAR(64) DEFAULT NULL COMMENT '更新人', + `UPDATE_TIME` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `SYSTEM_TYPE` VARCHAR(20) DEFAULT NULL COMMENT '业务系统类型(ht:海铁联运系统;xg:箱管系统;qc:全程物流)', + `REMARK` VARCHAR(500) DEFAULT NULL COMMENT '备注', + `ORG_ID` VARCHAR(64) DEFAULT NULL COMMENT '组织体系对应的公司编码', + `EMAIL_ADDRESS` VARCHAR(100) DEFAULT NULL COMMENT '邮箱地址', + `OPPOSITE_ID` VARCHAR(64) DEFAULT NULL COMMENT '法务系统相对方ID(唯一标识)', + `OPPOSITE_CHARACTER` VARCHAR(10) DEFAULT NULL COMMENT '相对方性质分类(1:境内组织,2:境内个人,3:境外组织,4:境外个人)', + `GAT_FLAG` VARCHAR(2) DEFAULT NULL COMMENT '是否涉港澳台标识(Y:是,N:否,法务业务分类用)', + `GROUP_FLAG` VARCHAR(2) DEFAULT NULL COMMENT '是否集团内(Y:是,N:否,法务业务分类用)', + `COUNTRY` VARCHAR(20) DEFAULT NULL COMMENT '国家编码', + `COUNTRY_NAME` VARCHAR(50) DEFAULT NULL COMMENT '国家名称', + `CITY` VARCHAR(50) DEFAULT NULL COMMENT '城市', + `POSTCODE` VARCHAR(20) DEFAULT NULL COMMENT '邮编', + `LEGAL_PERSON_ID` VARCHAR(64) DEFAULT NULL COMMENT '法定代表人或负责人ID', + `LEGAL_PERSON_NAME` VARCHAR(50) DEFAULT NULL COMMENT '法定代表人或负责人姓名', + `LEGAL_PERSON_ACCOUNT` VARCHAR(64) DEFAULT NULL COMMENT '法定代表人或负责人账户', + `LEGAL_PERSON_CARD_ID` VARCHAR(100) DEFAULT NULL COMMENT '法定代表人身份证号(加密存储)', + `WEBSITE` VARCHAR(200) DEFAULT NULL COMMENT '网站地址', + `CERTIFICATE_TYPE` VARCHAR(20) DEFAULT NULL COMMENT '自然人证件类型(idCard:身份证,passport:护照,other:其他)', + `CERTIFICATE_NUM` VARCHAR(100) DEFAULT NULL COMMENT '自然人证件号码(加密存储)', + `TIN_CODE` VARCHAR(50) DEFAULT NULL COMMENT 'TIN码(税务识别号)', + `ABROAD_CODE` VARCHAR(50) DEFAULT NULL COMMENT '境外公司活动证明编码', + `REGISTERED_CAPITAL` DECIMAL(20,2) DEFAULT NULL COMMENT '注册资金(单位:元)', + `REG_CAPITAL` VARCHAR(100) DEFAULT NULL COMMENT '注册资本(文本描述,如:1000万人民币)', + `BUS_SCOPE` TEXT COMMENT '经营范围', + `OPPOSITE_CODE` VARCHAR(64) DEFAULT NULL COMMENT '相对方编码(业务分类编码)', + `OPPOSITE_STATUS` VARCHAR(20) DEFAULT 'EFFECTUAL' COMMENT '状态(EFFECTUAL:有效,INVALID:无效)', + `IS_SGAT` VARCHAR(2) DEFAULT '0' COMMENT '是否SGAT(1:是,0:否)', + `IS_JTN` VARCHAR(2) DEFAULT '0' COMMENT '是否JTN(1:是,0:否)', + `NATURE_OF_ENTERPRISE_ORG` VARCHAR(10) DEFAULT NULL COMMENT '组织性质(ZY:政府,QY:企业,QT:其他组织)', + `NATURE_OF_ENTERPRISE_ORG_LEV` VARCHAR(20) DEFAULT NULL COMMENT '组织性质子级(GNQY:国有企业,MYQY:民营企业,WZQY:外资企业,HZQY:合资企业,GYQZHKGQY:国有全资和控股企业,QT:其他)', + `RELATIVE_TYPE` VARCHAR(30) DEFAULT NULL COMMENT '类型(client:客户,clientAndSup:客户及供应商,other:其他,Partner:合作伙伴,supplier:供应商)', + `IS_DELETED` VARCHAR(2) DEFAULT 'N' COMMENT '法务系统删除标记(Y:是,N:否,逻辑删除)', + `COMMENTS` VARCHAR(500) DEFAULT NULL COMMENT '备注【法务】', + `sync_status` VARCHAR(20) NOT NULL DEFAULT 'unsynced' COMMENT '同步状态:unsynced/synced/failed', + `sync_time` DATETIME DEFAULT NULL COMMENT '最后同步时间', + `sync_message` VARCHAR(500) DEFAULT NULL COMMENT '同步说明', + PRIMARY KEY (`CUSTOMER_SYSID`), + KEY `idx_customer_no` (`CUSTOMER_NO`), + KEY `idx_opposite_id` (`OPPOSITE_ID`), + KEY `idx_customer_taxno` (`CUSTOMER_TAXNO`), + KEY `idx_system_type` (`SYSTEM_TYPE`), + KEY `idx_create_time` (`CREATE_TIME`), + KEY `idx_sync_status` (`sync_status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='客户/相对方信息表'; + +CREATE TABLE `seal_partner_contact` ( + `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `partner_record_id` BIGINT(20) NOT NULL COMMENT '关联相对方主表 CUSTOMER_SYSID', + `contact_name` VARCHAR(50) NOT NULL COMMENT '联系人姓名', + `contact_phone` VARCHAR(20) NOT NULL COMMENT '联系电话', + `postal_address` VARCHAR(100) NOT NULL COMMENT '通讯地址', + `email` VARCHAR(50) NOT NULL COMMENT '电子邮箱', + `sort_order` INT(11) NOT NULL DEFAULT 1 COMMENT '排序号', + `del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标记:0存在 2删除', + `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人', + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人', + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + KEY `idx_partner_record_id` (`partner_record_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='相对方联系人表'; + +INSERT INTO `ILDM_FEE_CUSTOMER_INFO` +(`CUSTOMER_SYSID`, `CUSTOMER_NAME_C`, `CUSTOMER_TAXNO`, `CUSTOMER_REGADDR`, `CREATE_BY`, `CREATE_TIME`, `UPDATE_BY`, `UPDATE_TIME`, + `EMAIL_ADDRESS`, `OPPOSITE_ID`, `OPPOSITE_CHARACTER`, `GAT_FLAG`, `GROUP_FLAG`, `COUNTRY`, `COUNTRY_NAME`, + `LEGAL_PERSON_NAME`, `REG_CAPITAL`, `OPPOSITE_CODE`, `OPPOSITE_STATUS`, `IS_SGAT`, `IS_JTN`, + `NATURE_OF_ENTERPRISE_ORG`, `NATURE_OF_ENTERPRISE_ORG_LEV`, `RELATIVE_TYPE`, `IS_DELETED`, + `COMMENTS`, `sync_status`, `sync_time`, `sync_message`) +VALUES +(1, '宁波港船务货运代理有限公司', '91330201MA2ABCDE9X', '宁波市北仑区明州西路188号', 'local_test', '2026-05-20 09:12:33', 'local_test', '2026-05-20 09:15:10', + 'zhoujingli@example.com', 'JT-10256', '1', 'N', 'N', NULL, NULL, + '李四', '5000万元', 'OPP-202605210001', 'EFFECTUAL', '0', '0', + 'QY', 'GNQY', 'supplier', 'N', + '本地初始化测试数据', 'synced', '2026-05-20 09:15:10', '已按数据采集接口规范同步到法务系统'), +(2, '王小明', NULL, NULL, 'local_test', '2026-05-20 14:20:05', 'local_test', '2026-05-20 14:20:05', + NULL, NULL, '2', 'N', 'N', NULL, NULL, + NULL, NULL, 'OPP-202605210002', 'EFFECTUAL', '0', '0', + 'QT', NULL, 'client', 'N', + '个人类型测试数据', 'unsynced', NULL, '新增后尚未同步'), +(3, 'Ocean Energy Pte. Ltd.', NULL, '88 Harbour Street, London', 'local_test', '2026-05-18 11:08:22', 'local_test', '2026-05-18 11:10:40', + 'alice.brown@ocean-energy.com', 'JT-10888', '3', 'N', 'N', 'GJ826', '英国', + NULL, 'USD 2,000,000', 'OPP-202605210003', 'EFFECTUAL', '0', '0', + 'QY', 'WZQY', 'Partner', 'N', + '境外组织测试数据', 'failed', '2026-05-18 11:10:40', '法务系统返回:注册地址长度超限,请修正后重试'); + +INSERT INTO `seal_partner_contact` +(`id`, `partner_record_id`, `contact_name`, `contact_phone`, `postal_address`, `email`, + `sort_order`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) +VALUES +(1, 1, '周经理', '15757460062', '宁波市北仑区明州西路188号A座', 'zhoujingli@example.com', + 1, '0', 'local_test', '2026-05-20 09:12:33', 'local_test', '2026-05-20 09:12:33', '主联系人'), +(2, 3, 'Alice Brown', '+44-20-8899-0001', '88 Harbour Street, London', 'alice.brown@ocean-energy.com', + 1, '0', 'local_test', '2026-05-18 11:08:22', 'local_test', '2026-05-18 11:08:22', '海外主联系人'), +(3, 3, 'Tom Lee', '+44-20-8899-0002', '88 Harbour Street, London', 'tom.lee@ocean-energy.com', + 2, '0', 'local_test', '2026-05-18 11:08:22', 'local_test', '2026-05-18 11:08:22', '备用联系人'); diff --git a/zgwl_partner_tables_oracle.sql b/zgwl_partner_tables_oracle.sql new file mode 100644 index 0000000..1eeac13 --- /dev/null +++ b/zgwl_partner_tables_oracle.sql @@ -0,0 +1,264 @@ +-- ============================================= +-- Oracle version for zgwl_partner_tables.sql +-- Execute with: sqlplus developer/dev123@localhost/XEPDB1 @zgwl_partner_tables_oracle.sql +-- ============================================= + +WHENEVER SQLERROR EXIT SQL.SQLCODE; + +BEGIN + EXECUTE IMMEDIATE 'DROP TABLE SEAL_PARTNER_CONTACT'; +EXCEPTION + WHEN OTHERS THEN + IF SQLCODE != -942 THEN + RAISE; + END IF; +END; +/ + +BEGIN + EXECUTE IMMEDIATE 'DROP TABLE ILDM_FEE_CUSTOMER_INFO'; +EXCEPTION + WHEN OTHERS THEN + IF SQLCODE != -942 THEN + RAISE; + END IF; +END; +/ + +BEGIN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_SEAL_PARTNER_CONTACT'; +EXCEPTION + WHEN OTHERS THEN + IF SQLCODE != -2289 THEN + RAISE; + END IF; +END; +/ + +BEGIN + EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_ILDM_FEE_CUSTOMER_INFO'; +EXCEPTION + WHEN OTHERS THEN + IF SQLCODE != -2289 THEN + RAISE; + END IF; +END; +/ + +CREATE TABLE ILDM_FEE_CUSTOMER_INFO ( + CUSTOMER_SYSID NUMBER(19) NOT NULL, + CUSTOMER_REGNO VARCHAR2(64 CHAR), + CUSTOMER_NO VARCHAR2(64 CHAR), + CUSTOMER_NAME_C VARCHAR2(200 CHAR), + CUSTOMER_NAME_EN VARCHAR2(200 CHAR), + CUSTOMER_SHORT_NAME VARCHAR2(100 CHAR), + CUSTOMER_SHORT_NAME_EN VARCHAR2(100 CHAR), + CUSTOMER_TAXNO VARCHAR2(50 CHAR), + CUSTOMER_ADDRESS VARCHAR2(200 CHAR), + OFFICEPHONE VARCHAR2(20 CHAR), + CUSTOMER_BANK VARCHAR2(100 CHAR), + CUSTOMER_BANKACCOUNT VARCHAR2(50 CHAR), + CUSTOMER_CHARACTER VARCHAR2(50 CHAR), + CUSTOMER_REGADDR VARCHAR2(200 CHAR), + CUSTOMER_REGDATE DATE, + CUSTOMER_NATURE VARCHAR2(50 CHAR), + CUSTOMER_ZIP VARCHAR2(20 CHAR), + CUSTOMER_1_TYPEFLAG VARCHAR2(10 CHAR), + CUSTOMER_2_TYPEFLAG VARCHAR2(10 CHAR), + CUSTOMER_3_TYPEFLAG VARCHAR2(10 CHAR), + CUSTOMER_4_TYPEFLAG VARCHAR2(10 CHAR), + PLACE_TYPE VARCHAR2(10 CHAR), + ACTIVEFLAG VARCHAR2(10 CHAR), + CUSTOMER_SYSID_HT VARCHAR2(64 CHAR), + DOWN_DATE DATE, + OPEN_FLAG VARCHAR2(10 CHAR), + CREATE_BY VARCHAR2(64 CHAR), + CREATE_TIME TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, + UPDATE_BY VARCHAR2(64 CHAR), + UPDATE_TIME TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, + SYSTEM_TYPE VARCHAR2(20 CHAR), + REMARK VARCHAR2(500 CHAR), + ORG_ID VARCHAR2(64 CHAR), + EMAIL_ADDRESS VARCHAR2(100 CHAR), + OPPOSITE_ID VARCHAR2(64 CHAR), + OPPOSITE_CHARACTER VARCHAR2(10 CHAR), + GAT_FLAG VARCHAR2(2 CHAR), + GROUP_FLAG VARCHAR2(2 CHAR), + COUNTRY VARCHAR2(20 CHAR), + COUNTRY_NAME VARCHAR2(50 CHAR), + CITY VARCHAR2(50 CHAR), + POSTCODE VARCHAR2(20 CHAR), + LEGAL_PERSON_ID VARCHAR2(64 CHAR), + LEGAL_PERSON_NAME VARCHAR2(50 CHAR), + LEGAL_PERSON_ACCOUNT VARCHAR2(64 CHAR), + LEGAL_PERSON_CARD_ID VARCHAR2(100 CHAR), + WEBSITE VARCHAR2(200 CHAR), + CERTIFICATE_TYPE VARCHAR2(20 CHAR), + CERTIFICATE_NUM VARCHAR2(100 CHAR), + TIN_CODE VARCHAR2(50 CHAR), + ABROAD_CODE VARCHAR2(50 CHAR), + REGISTERED_CAPITAL NUMBER(20, 2), + REG_CAPITAL VARCHAR2(100 CHAR), + BUS_SCOPE CLOB, + OPPOSITE_CODE VARCHAR2(64 CHAR), + OPPOSITE_STATUS VARCHAR2(20 CHAR) DEFAULT 'EFFECTUAL', + IS_SGAT VARCHAR2(2 CHAR) DEFAULT '0', + IS_JTN VARCHAR2(2 CHAR) DEFAULT '0', + NATURE_OF_ENTERPRISE_ORG VARCHAR2(10 CHAR), + NATURE_OF_ENTERPRISE_ORG_LEV VARCHAR2(20 CHAR), + RELATIVE_TYPE VARCHAR2(30 CHAR), + IS_DELETED VARCHAR2(2 CHAR) DEFAULT 'N', + COMMENTS VARCHAR2(500 CHAR), + SYNC_STATUS VARCHAR2(20 CHAR) DEFAULT 'unsynced' NOT NULL, + SYNC_TIME TIMESTAMP(6), + SYNC_MESSAGE VARCHAR2(500 CHAR), + CONSTRAINT PK_ILDM_FEE_CUSTOMER_INFO PRIMARY KEY (CUSTOMER_SYSID) +); + +CREATE INDEX IDX_CUSTOMER_NO ON ILDM_FEE_CUSTOMER_INFO (CUSTOMER_NO); +CREATE INDEX IDX_OPPOSITE_ID ON ILDM_FEE_CUSTOMER_INFO (OPPOSITE_ID); +CREATE INDEX IDX_CUSTOMER_TAXNO ON ILDM_FEE_CUSTOMER_INFO (CUSTOMER_TAXNO); +CREATE INDEX IDX_SYSTEM_TYPE ON ILDM_FEE_CUSTOMER_INFO (SYSTEM_TYPE); +CREATE INDEX IDX_CREATE_TIME ON ILDM_FEE_CUSTOMER_INFO (CREATE_TIME); +CREATE INDEX IDX_SYNC_STATUS ON ILDM_FEE_CUSTOMER_INFO (SYNC_STATUS); + +COMMENT ON TABLE ILDM_FEE_CUSTOMER_INFO IS '客户/相对方信息表'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.CUSTOMER_SYSID IS '客户系统ID'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.CUSTOMER_NAME_C IS '公司全称'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.CUSTOMER_TAXNO IS '统一社会信用代码'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.CUSTOMER_REGADDR IS '注册地址'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.EMAIL_ADDRESS IS '邮箱地址'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.OPPOSITE_ID IS '法务系统相对方ID(唯一标识)'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.OPPOSITE_CHARACTER IS '相对方性质分类'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.GAT_FLAG IS '是否涉港澳台标识'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.GROUP_FLAG IS '是否集团内'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.COUNTRY IS '国家编码'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.COUNTRY_NAME IS '国家名称'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.LEGAL_PERSON_NAME IS '法定代表人或负责人姓名'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.CERTIFICATE_TYPE IS '自然人证件类型'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.CERTIFICATE_NUM IS '自然人证件号码'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.TIN_CODE IS 'TIN码(税务识别号)'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.REGISTERED_CAPITAL IS '注册资金(单位:元)'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.REG_CAPITAL IS '注册资本'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.OPPOSITE_CODE IS '相对方编码'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.OPPOSITE_STATUS IS '状态(EFFECTUAL:有效,INVALID:无效)'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.IS_SGAT IS '是否SGAT(1:是,0:否)'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.IS_JTN IS '是否JTN(1:是,0:否)'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.NATURE_OF_ENTERPRISE_ORG IS '组织性质'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.NATURE_OF_ENTERPRISE_ORG_LEV IS '组织性质子级'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.RELATIVE_TYPE IS '类型'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.IS_DELETED IS '法务系统删除标记'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.COMMENTS IS '备注【法务】'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.SYNC_STATUS IS '同步状态'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.SYNC_TIME IS '最后同步时间'; +COMMENT ON COLUMN ILDM_FEE_CUSTOMER_INFO.SYNC_MESSAGE IS '同步说明'; + +CREATE TABLE SEAL_PARTNER_CONTACT ( + ID NUMBER(19) NOT NULL, + PARTNER_RECORD_ID NUMBER(19) NOT NULL, + CONTACT_NAME VARCHAR2(50 CHAR) NOT NULL, + CONTACT_PHONE VARCHAR2(20 CHAR) NOT NULL, + POSTAL_ADDRESS VARCHAR2(100 CHAR) NOT NULL, + EMAIL VARCHAR2(50 CHAR) NOT NULL, + SORT_ORDER NUMBER(10) DEFAULT 1 NOT NULL, + DEL_FLAG CHAR(1 CHAR) DEFAULT '0' NOT NULL, + CREATE_BY VARCHAR2(64 CHAR), + CREATE_TIME TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, + UPDATE_BY VARCHAR2(64 CHAR), + UPDATE_TIME TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP, + REMARK VARCHAR2(500 CHAR), + CONSTRAINT PK_SEAL_PARTNER_CONTACT PRIMARY KEY (ID) +); + +CREATE INDEX IDX_PARTNER_RECORD_ID ON SEAL_PARTNER_CONTACT (PARTNER_RECORD_ID); + +COMMENT ON TABLE SEAL_PARTNER_CONTACT IS '相对方联系人表'; +COMMENT ON COLUMN SEAL_PARTNER_CONTACT.ID IS '主键ID'; +COMMENT ON COLUMN SEAL_PARTNER_CONTACT.PARTNER_RECORD_ID IS '关联相对方主表 CUSTOMER_SYSID'; +COMMENT ON COLUMN SEAL_PARTNER_CONTACT.CONTACT_NAME IS '联系人姓名'; +COMMENT ON COLUMN SEAL_PARTNER_CONTACT.CONTACT_PHONE IS '联系电话'; +COMMENT ON COLUMN SEAL_PARTNER_CONTACT.POSTAL_ADDRESS IS '通讯地址'; +COMMENT ON COLUMN SEAL_PARTNER_CONTACT.EMAIL IS '电子邮箱'; +COMMENT ON COLUMN SEAL_PARTNER_CONTACT.SORT_ORDER IS '排序号'; +COMMENT ON COLUMN SEAL_PARTNER_CONTACT.DEL_FLAG IS '删除标记:0存在 2删除'; + +INSERT INTO ILDM_FEE_CUSTOMER_INFO +(CUSTOMER_SYSID, CUSTOMER_NAME_C, CUSTOMER_TAXNO, CUSTOMER_REGADDR, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, + EMAIL_ADDRESS, OPPOSITE_ID, OPPOSITE_CHARACTER, GAT_FLAG, GROUP_FLAG, COUNTRY, COUNTRY_NAME, + LEGAL_PERSON_NAME, REG_CAPITAL, OPPOSITE_CODE, OPPOSITE_STATUS, IS_SGAT, IS_JTN, + NATURE_OF_ENTERPRISE_ORG, NATURE_OF_ENTERPRISE_ORG_LEV, RELATIVE_TYPE, IS_DELETED, + COMMENTS, SYNC_STATUS, SYNC_TIME, SYNC_MESSAGE) +VALUES +(1, '宁波港船务货运代理有限公司', '91330201MA2ABCDE9X', '宁波市北仑区明州西路188号', 'local_test', + TO_TIMESTAMP('2026-05-20 09:12:33', 'YYYY-MM-DD HH24:MI:SS'), + 'local_test', TO_TIMESTAMP('2026-05-20 09:15:10', 'YYYY-MM-DD HH24:MI:SS'), + 'zhoujingli@example.com', 'JT-10256', '1', 'N', 'N', NULL, NULL, + '李四', '5000万元', 'OPP-202605210001', 'EFFECTUAL', '0', '0', + 'QY', 'GNQY', 'supplier', 'N', + '本地初始化测试数据', 'synced', TO_TIMESTAMP('2026-05-20 09:15:10', 'YYYY-MM-DD HH24:MI:SS'), '已按数据采集接口规范同步到法务系统'); + +INSERT INTO ILDM_FEE_CUSTOMER_INFO +(CUSTOMER_SYSID, CUSTOMER_NAME_C, CUSTOMER_TAXNO, CUSTOMER_REGADDR, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, + EMAIL_ADDRESS, OPPOSITE_ID, OPPOSITE_CHARACTER, GAT_FLAG, GROUP_FLAG, COUNTRY, COUNTRY_NAME, + LEGAL_PERSON_NAME, REG_CAPITAL, OPPOSITE_CODE, OPPOSITE_STATUS, IS_SGAT, IS_JTN, + NATURE_OF_ENTERPRISE_ORG, NATURE_OF_ENTERPRISE_ORG_LEV, RELATIVE_TYPE, IS_DELETED, + COMMENTS, SYNC_STATUS, SYNC_TIME, SYNC_MESSAGE) +VALUES +(2, '王小明', NULL, NULL, 'local_test', + TO_TIMESTAMP('2026-05-20 14:20:05', 'YYYY-MM-DD HH24:MI:SS'), + 'local_test', TO_TIMESTAMP('2026-05-20 14:20:05', 'YYYY-MM-DD HH24:MI:SS'), + NULL, NULL, '2', 'N', 'N', NULL, NULL, + NULL, NULL, 'OPP-202605210002', 'EFFECTUAL', '0', '0', + 'QT', NULL, 'client', 'N', + '个人类型测试数据', 'unsynced', NULL, '新增后尚未同步'); + +INSERT INTO ILDM_FEE_CUSTOMER_INFO +(CUSTOMER_SYSID, CUSTOMER_NAME_C, CUSTOMER_TAXNO, CUSTOMER_REGADDR, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, + EMAIL_ADDRESS, OPPOSITE_ID, OPPOSITE_CHARACTER, GAT_FLAG, GROUP_FLAG, COUNTRY, COUNTRY_NAME, + LEGAL_PERSON_NAME, REG_CAPITAL, OPPOSITE_CODE, OPPOSITE_STATUS, IS_SGAT, IS_JTN, + NATURE_OF_ENTERPRISE_ORG, NATURE_OF_ENTERPRISE_ORG_LEV, RELATIVE_TYPE, IS_DELETED, + COMMENTS, SYNC_STATUS, SYNC_TIME, SYNC_MESSAGE) +VALUES +(3, 'Ocean Energy Pte. Ltd.', NULL, '88 Harbour Street, London', 'local_test', + TO_TIMESTAMP('2026-05-18 11:08:22', 'YYYY-MM-DD HH24:MI:SS'), + 'local_test', TO_TIMESTAMP('2026-05-18 11:10:40', 'YYYY-MM-DD HH24:MI:SS'), + 'alice.brown@ocean-energy.com', 'JT-10888', '3', 'N', 'N', 'GJ826', '英国', + NULL, 'USD 2,000,000', 'OPP-202605210003', 'EFFECTUAL', '0', '0', + 'QY', 'WZQY', 'Partner', 'N', + '境外组织测试数据', 'failed', TO_TIMESTAMP('2026-05-18 11:10:40', 'YYYY-MM-DD HH24:MI:SS'), '法务系统返回:注册地址长度超限,请修正后重试'); + +INSERT INTO SEAL_PARTNER_CONTACT +(ID, PARTNER_RECORD_ID, CONTACT_NAME, CONTACT_PHONE, POSTAL_ADDRESS, EMAIL, + SORT_ORDER, DEL_FLAG, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, REMARK) +VALUES +(1, 1, '周经理', '15757460062', '宁波市北仑区明州西路188号A座', 'zhoujingli@example.com', + 1, '0', 'local_test', TO_TIMESTAMP('2026-05-20 09:12:33', 'YYYY-MM-DD HH24:MI:SS'), + 'local_test', TO_TIMESTAMP('2026-05-20 09:12:33', 'YYYY-MM-DD HH24:MI:SS'), '主联系人'); + +INSERT INTO SEAL_PARTNER_CONTACT +(ID, PARTNER_RECORD_ID, CONTACT_NAME, CONTACT_PHONE, POSTAL_ADDRESS, EMAIL, + SORT_ORDER, DEL_FLAG, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, REMARK) +VALUES +(2, 3, 'Alice Brown', '+44-20-8899-0001', '88 Harbour Street, London', 'alice.brown@ocean-energy.com', + 1, '0', 'local_test', TO_TIMESTAMP('2026-05-18 11:08:22', 'YYYY-MM-DD HH24:MI:SS'), + 'local_test', TO_TIMESTAMP('2026-05-18 11:08:22', 'YYYY-MM-DD HH24:MI:SS'), '海外主联系人'); + +INSERT INTO SEAL_PARTNER_CONTACT +(ID, PARTNER_RECORD_ID, CONTACT_NAME, CONTACT_PHONE, POSTAL_ADDRESS, EMAIL, + SORT_ORDER, DEL_FLAG, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME, REMARK) +VALUES +(3, 3, 'Tom Lee', '+44-20-8899-0002', '88 Harbour Street, London', 'tom.lee@ocean-energy.com', + 2, '0', 'local_test', TO_TIMESTAMP('2026-05-18 11:08:22', 'YYYY-MM-DD HH24:MI:SS'), + 'local_test', TO_TIMESTAMP('2026-05-18 11:08:22', 'YYYY-MM-DD HH24:MI:SS'), '备用联系人'); + +CREATE SEQUENCE SEQ_ILDM_FEE_CUSTOMER_INFO + START WITH 4 + INCREMENT BY 1 + NOCACHE + NOCYCLE; + +CREATE SEQUENCE SEQ_SEAL_PARTNER_CONTACT + START WITH 4 + INCREMENT BY 1 + NOCACHE + NOCYCLE;