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