From 2db76f2066701cbe292f206ad49a7f8523b8aa9f Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期五, 14 八月 2026 16:30:25 +0800
Subject: [PATCH] feat:银行流水关联多个合同,新增预收款开票,所有List校验调整为ColUtil

---
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BusinessCustomerController.java                  |    2 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java                        |   15 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/StatisticServiceImpl.java                      |  112 +-
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BwRequestRecord.java                                 |    8 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BankStatementServiceImpl.java                  |  144 ++-
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BipViewMapper.java                                   |    2 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/StatementContractDTO.java                            |   14 
 platformx-business-finance-biz/src/main/resources/mapper/ProductMapper.xml                                                               |    3 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractPaymentScheduleProcessServiceImpl.java |   27 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BipRequestRecord.java                                |    2 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BusinessCustomerServiceImpl.java               |   25 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractInvoiceController.java                   |    9 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractInvoice.java                                 |   18 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/GenInvoiceInfoDTO.java                                  |    2 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatementItem.java                               |   41 +
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java                       |   63 +
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java                 |   91 +-
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/SyncPaymentRecepitDTO.java                              |    4 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java                           |    4 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/PaymentConfirmAddDTO.java                               |    3 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java                       |   44 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentOffsetServiceImpl.java                  |   10 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java                                    |    9 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractQueryDTO.java                                   |    5 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java                |  569 +++++++++---
 platformx-business-finance-biz/src/main/resources/mapper/ContractInvoiceMapper.xml                                                       | 1117 ++++++++++++--------------
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoiceOutBoundVo.java                           |   13 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatement.java                                   |    9 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java                |    6 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoicePageVo.java                               |    3 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/BankStatementUpdateDTO.java                             |    5 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/CustInfoVo.java                                          |    2 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BusinessCustomer.java                                |    4 
 platformx-business-finance-biz/src/main/resources/mapper/BankStatementItemMapper.xml                                                     |   16 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductController.java                           |    2 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BankStatementItemMapper.java                         |   11 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/PaymentSlip.java                                     |    4 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/GenInvoiceInfoVo.java                                    |    3 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractOutBound.java                                |    4 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ErpRequestRecord.java                                |    4 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractInvoiceService.java                         |    2 
 41 files changed, 1,397 insertions(+), 1,034 deletions(-)

diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/BankStatementUpdateDTO.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/BankStatementUpdateDTO.java
index 711ac8d..c2309f2 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/BankStatementUpdateDTO.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/BankStatementUpdateDTO.java
@@ -1,12 +1,15 @@
 package com.by4cloud.platformx.business.dto;
 
+import com.by4cloud.platformx.business.entity.StatementContractDTO;
 import lombok.Data;
+
+import java.util.List;
 
 @Data
 public class BankStatementUpdateDTO {
 
 	private Long id;
 
-	private Long contractId;
+	private List<StatementContractDTO> contractCollectionList;
 
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractQueryDTO.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractQueryDTO.java
index 2784903..95af972 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractQueryDTO.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractQueryDTO.java
@@ -17,4 +17,9 @@
 	 * 1 鏄� 0 鍚�
 	 */
 	private String invoiceType;
+
+	/**
+	 * 棰勬敹鍙戠エ鏍囪瘑
+	 */
+	private String advanceType;
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/GenInvoiceInfoDTO.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/GenInvoiceInfoDTO.java
index 60448be..a8c1a55 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/GenInvoiceInfoDTO.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/GenInvoiceInfoDTO.java
@@ -12,4 +12,6 @@
 
 	private String contractCategory;
 
+	private String contractId;
+
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/PaymentConfirmAddDTO.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/PaymentConfirmAddDTO.java
index 67458b7..d10f9fb 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/PaymentConfirmAddDTO.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/PaymentConfirmAddDTO.java
@@ -26,4 +26,7 @@
 	private String payType;
 
 	private BigDecimal transationAmount;
+
+	private String bankSeqNo;
+
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/SyncPaymentRecepitDTO.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/SyncPaymentRecepitDTO.java
index af12f6d..5817338 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/SyncPaymentRecepitDTO.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/SyncPaymentRecepitDTO.java
@@ -11,4 +11,8 @@
 
 	private String bipCode;
 
+	private Integer pageSize;
+
+	private Integer pageNum;
+
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatement.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatement.java
index f720190..3efb129 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatement.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatement.java
@@ -71,4 +71,13 @@
 	@Schema(description = "鍚堝悓ID")
 	@Column(columnDefinition="bigint comment '鍚堝悓ID'")
 	private Long contractId;
+
+	@Schema(description = "鍚堝悓纭閲戦")
+	@Column(columnDefinition = "decimal(10,2) comment '鍚堝悓纭閲戦'")
+	private BigDecimal confirmAmount;
+
+	@Schema(description = "浜ゆ槗璇存槑")
+	@Column(columnDefinition="VARCHAR(255) comment '浜ゆ槗璇存槑'")
+	private String remark;
+
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatementItem.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatementItem.java
new file mode 100644
index 0000000..291abed
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatementItem.java
@@ -0,0 +1,41 @@
+package com.by4cloud.platformx.business.entity;
+
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import lombok.Data;
+import org.hibernate.annotations.Table;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 2026骞�8鏈�7鏃� 16:04:22
+ * syt
+ */
+@Data
+@Entity//鍔犱簡鎵嶈兘鑷姩鐢熸垚琛�
+@Table(appliesTo="bank_statement_item",comment = "閾惰娴佹按鍚堝悓纭鏄庣粏")//缁欒〃鍔犳敞閲�
+@jakarta.persistence.Table(name = "bank_statement_item")//鏁版嵁搴撳垱寤虹殑琛ㄦ槑
+public class BankStatementItem extends BaseModel<BankStatementItem> {
+
+	@Schema(description = "閾惰娴佹按ID")
+	@Column(columnDefinition="bigint comment '閾惰娴佹按ID'")
+	private Long statetId;
+
+	@Schema(description = "浜ゆ槗娴佹按")
+	@Column(columnDefinition="VARCHAR(128) comment '浜ゆ槗娴佹按'")
+	private String bankSeqNo;
+
+	@Schema(description = "鍚堝悓ID")
+	@Column(columnDefinition="bigint comment '鍚堝悓ID'")
+	private Long contractId;
+
+	@Schema(description = "鍚堝悓纭閲戦")
+	@Column(columnDefinition = "decimal(10,2) comment '鍚堝悓纭閲戦'")
+	private BigDecimal confirmAmount;
+
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BipRequestRecord.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BipRequestRecord.java
index e77262b..73f9124 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BipRequestRecord.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BipRequestRecord.java
@@ -26,7 +26,7 @@
 	private String requestParams;
 
 	@Schema(description = "鍥炲弬")
-	@Column(columnDefinition="text comment '鍥炲弬'")
+	@Column(columnDefinition="longtext comment '鍥炲弬'")
 	private String responseParams;
 
 	@Schema(description = "缁撴灉鐮�")
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BusinessCustomer.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BusinessCustomer.java
index 3e1f04e..fcc8b14 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BusinessCustomer.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BusinessCustomer.java
@@ -138,4 +138,8 @@
 	@Schema(description = "erp浼佷笟缂栫爜")
 	@Column(columnDefinition = "VARCHAR(64) comment 'erp浼佷笟缂栫爜'")
 	private String erpCompanyCode;
+
+	@Schema(description = "瀹㈡埛bip缂栫爜")
+	@Column(columnDefinition = "VARCHAR(64) comment '瀹㈡埛bip缂栫爜'")
+	private String bipCode;
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BwRequestRecord.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BwRequestRecord.java
index 18fb539..f996cb2 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BwRequestRecord.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BwRequestRecord.java
@@ -21,12 +21,12 @@
 	@Column(columnDefinition="VARCHAR(128) comment '鎺ュ彛鍚嶇О'")
 	private String interfaceName;
 
-	@Schema(description = "鎺ュ彛鍚嶇О")
-	@Column(columnDefinition="VARCHAR(128) comment '鎺ュ彛鍚嶇О'")
+	@Schema(description = "璇锋眰鍞竴鏍囪瘑")
+	@Column(columnDefinition="VARCHAR(128) comment '璇锋眰鍞竴鏍囪瘑'")
 	private String requestId;
 
-	@Schema(description = "璇锋眰鍞竴鏍囪瘑")
-	@Column(columnDefinition="VARCHAR(64) comment '璇锋眰鍞竴鏍囪瘑'")
+	@Schema(description = "鍏ュ弬")
+	@Column(columnDefinition="text comment '鍏ュ弬'")
 	private String requestParams;
 
 	@Schema(description = "鍥炲弬")
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractInvoice.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractInvoice.java
index 4c8a4f1..d1c7a42 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractInvoice.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractInvoice.java
@@ -76,7 +76,7 @@
 
 	@Schema(description = "鏈烘瀯绋庡彿")
 	@Column(columnDefinition="varchar(64) comment '鏈烘瀯绋庡彿'")
-	private String texNo;
+	private String taxNo;
 
 	@Schema(description = "閿�鍞柟鍚嶇О")
 	@Column(columnDefinition="varchar(128) comment '閿�鍞柟鍚嶇О'")
@@ -85,6 +85,10 @@
 	@Schema(description = "璐拱鏂瑰悕绉�")
 	@Column(columnDefinition="varchar(128) comment '璐拱鏂瑰悕绉�'")
 	private String buyerTaxName;
+
+	@Schema(description = "璐拱鏂圭◣鍙�")
+	@Column(columnDefinition="varchar(128) comment '璐拱鏂瑰悕绉�'")
+	private String buyerTaxNo;
 
 	@Schema(description = "鍙戠エ棰勮淇℃伅")
 	@Column(columnDefinition="text comment '鍙戠エ棰勮淇℃伅'")
@@ -103,10 +107,18 @@
 	private String bipPush;
 
 	@Schema(description = "bip鎺ㄩ�佹垚鍔熷悗杩斿洖鏁版嵁ID")
-	@Column(columnDefinition="bigint comment 'bip鎺ㄩ�佹爣璇� 1/宸叉帹閫� 0/鏈帹閫�'")
+	@Column(columnDefinition="bigint comment 'bip鎺ㄩ�佹垚鍔熷悗杩斿洖鏁版嵁ID'")
 	private Long bipId;
 
 	@Schema(description = "鍙戠エ棰勮bip鎺ㄩ�佹垚鍔熷悗杩斿洖鐨勬暟鎹粨鏋�")
-	@Column(columnDefinition="text comment '鍙戠エ棰勮淇℃伅'")
+	@Column(columnDefinition="text comment '鍙戠エ棰勮bip鎺ㄩ�佹垚鍔熷悗杩斿洖鐨勬暟鎹粨鏋�'")
 	private String bipBody;
+
+	@Schema(description = "鍏宠仈璇锋眰ID")
+	@Column(columnDefinition = "varchar(64) comment '鍏宠仈璇锋眰ID'")
+	private String bwRequestId;
+
+	@Schema(description = "棰勬敹寮�绁ㄦ爣璇�")
+	@Column(columnDefinition = "char default '0' comment '0/鍚� 1/鏄�'")
+	private String advanceFlag;
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractOutBound.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractOutBound.java
index ae5273e..d92d7d2 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractOutBound.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractOutBound.java
@@ -91,6 +91,10 @@
 	@Column(columnDefinition="decimal(10,2) comment '宸插紑绁ㄦ暟閲�'")
 	private BigDecimal invoiceNum;
 
+	@Schema(description = "棰勫紑绁ㄦ暟閲�")
+	@Column(columnDefinition="decimal(10,2) DEFAULT 0.00 comment '棰勫紑绁ㄦ暟閲�'")
+	private BigDecimal advanceNum;
+
 
 //	//浠ヤ笅寮�绁ㄧ浉鍏�
 //
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java
index 9e6e16d..5101ab4 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java
@@ -174,6 +174,10 @@
 	@Column(columnDefinition = "decimal(10,2) comment '鎬婚噸 /kg'")
 	private BigDecimal totalWight;
 
+	@Schema(description = "棰勫紑绁ㄦ暟閲�")
+	@Column(columnDefinition="decimal(10,2) DEFAULT 0.00 comment '棰勫紑绁ㄦ暟閲�'")
+	private BigDecimal advanceNum;
+
 	@Schema(description = "澶囨敞")
 	@Column(columnDefinition="text comment '澶囨敞'")
 	private String remarks;
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ErpRequestRecord.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ErpRequestRecord.java
index c04bfb8..52cc117 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ErpRequestRecord.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ErpRequestRecord.java
@@ -21,8 +21,8 @@
 	@Column(columnDefinition="VARCHAR(128) comment '鎺ュ彛鍚嶇О'")
 	private String erpName;
 
-	@Schema(description = "璇锋眰鍞竴鏍囪瘑")
-	@Column(columnDefinition="VARCHAR(64) comment '璇锋眰鍞竴鏍囪瘑'")
+	@Schema(description = "鍏ュ弬")
+	@Column(columnDefinition="text comment '鍏ュ弬'")
 	private String requestParams;
 
 	@Schema(description = "鍥炲弬")
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/PaymentSlip.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/PaymentSlip.java
index e4ce98f..ea632ce 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/PaymentSlip.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/PaymentSlip.java
@@ -55,4 +55,8 @@
 	@Schema(description = "鍚堝悓ID")
 	@Column(columnDefinition="bigint comment '鍚堝悓ID'")
 	private Long contractId;
+
+	@Schema(description = "閾惰娴佹按鍙�")
+	@Column(columnDefinition="VARCHAR(255) comment '閾惰娴佹按鍙�'")
+	private String bankSeqNo;
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/StatementContractDTO.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/StatementContractDTO.java
new file mode 100644
index 0000000..c345c3b
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/StatementContractDTO.java
@@ -0,0 +1,14 @@
+package com.by4cloud.platformx.business.entity;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class StatementContractDTO {
+
+	private Long id;
+
+	private BigDecimal toPaidAmount;
+
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java
index 1492a17..091e25e 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java
@@ -1,7 +1,6 @@
 package com.by4cloud.platformx.business.vo;
 
-import com.by4cloud.platformx.business.entity.ContractPaymentSchedule;
-import com.by4cloud.platformx.business.entity.ContractSubjectMatter;
+import com.by4cloud.platformx.business.entity.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.persistence.Column;
@@ -245,4 +244,10 @@
 	private List<ContractPaymentSchedule> contractPaymentSchedule;
 
 	private List<ContractSubjectMatter> contractSubjectMatter;
+
+	private List<ContractOutBound> contractOutBound;
+
+	private List<PaymentSlip> paymentSlip;
+
+	private List<ContractInvoice> contractInvoice;
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoiceOutBoundVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoiceOutBoundVo.java
index 7f9b4a2..9fb41ea 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoiceOutBoundVo.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoiceOutBoundVo.java
@@ -13,6 +13,9 @@
 
 	private Long id;
 
+	@Schema(description = "鏍囩殑鐗╄鍙�")
+	private String lineNo;
+
 	@Schema(description = "鏍囩殑鐗╁悕绉�")
 	private String subjectMatterName;
 
@@ -25,20 +28,16 @@
 	@Schema(description = "鍑哄簱鏁伴噺")
 	private BigDecimal outBoundNum;
 
-	@Schema(description = "鍑哄簱鏃ユ湡")
-	@JsonFormat(pattern = "yyyy-MM-dd")
-	private Date outBoundTime;
-
 	@Schema(description = "寮�绁ㄦ暟閲�")
 	private BigDecimal invoiceNum;
 
 	@Schema(description = "鎷熷紑绁ㄦ暟閲�")
 	private BigDecimal toInvoiceNum;
 
+	@Schema(description = "棰勫紑绁ㄦ暟閲�")
+	private BigDecimal advanceNum;
+
 	@Schema(description = "鍗曚环")
 	private BigDecimal unitPrice;
-
-	@Schema(description = "寮�绁ㄧ姸鎬侊紙0-鏈紑绁� 1-寮�绁ㄤ腑 2-宸插紑绁級")
-	private String invoiceStatus;
 
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoicePageVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoicePageVo.java
index ee3996a..c1124b6 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoicePageVo.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractInvoicePageVo.java
@@ -89,4 +89,7 @@
 
 	@Schema(description = "鍚堝悓鍒嗙被")
 	private Integer invoiceNum;
+
+	@Schema(description = "棰勬敹娆�")
+	private BigDecimal advanceAmount;
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/CustInfoVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/CustInfoVo.java
index eb74d32..22e53f2 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/CustInfoVo.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/CustInfoVo.java
@@ -9,6 +9,8 @@
 
 	private String custName;
 
+	private String custCode;
+
 	private String legalPerson;
 
 	private String registrationAddress;
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/GenInvoiceInfoVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/GenInvoiceInfoVo.java
index 7a46019..40a2eaa 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/GenInvoiceInfoVo.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/GenInvoiceInfoVo.java
@@ -12,6 +12,9 @@
 	@Schema(description = "鍚堝悓绫诲瀷")
 	private String contractCategory;
 
+	@Schema(description = "棰勫紑鍙戠エ")
+	private String advanceInvoice;
+
 	@Schema(description = "鐢叉柟鍚嶇О")
 	private String partyA;
 
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BusinessCustomerController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BusinessCustomerController.java
index af46a66..db0ce40 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BusinessCustomerController.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BusinessCustomerController.java
@@ -71,7 +71,7 @@
         LambdaQueryWrapper<BusinessCustomer> wrapper = Wrappers.lambdaQuery();
         wrapper.like(StrUtil.isNotEmpty(businessCustomer.getCompanyName()),BusinessCustomer::getCompanyName,businessCustomer.getCompanyName());
 		List<BusinessCustomer> businessCustomerList = businessCustomerService.listByScope(wrapper);
-		if (ArrayUtil.isNotEmpty(businessCustomerList.toArray())){
+		if (CollUtil.isNotEmpty(businessCustomerList)){
 			List<BusinessCustomerSelectVo> voList = BeanUtil.copyToList(businessCustomerList, BusinessCustomerSelectVo.class);
 			if (voList.size()>1000){
 				return R.ok(voList.subList(0,1000));
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractInvoiceController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractInvoiceController.java
index b5eb269..95c50e3 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractInvoiceController.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ContractInvoiceController.java
@@ -77,6 +77,15 @@
 	}
 
 	/**
+	 * 鑾峰彇鍚堝悓棰勫紑绁ㄤ俊鎭�
+	 * @return
+	 */
+	@GetMapping("/getContractAdvance/{contractId}" )
+	public R getContractAdvance(@PathVariable("contractId")Long contractId) {
+		return contractInvoiceService.getContractAdvance(contractId);
+	}
+
+	/**
 	 * 鑾峰彇鍚堝悓鎴跨 姘寸數 璐圭敤淇℃伅
 	 * @return
 	 */
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductController.java
index 47f7e8e..e510114 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductController.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductController.java
@@ -146,7 +146,7 @@
     @PostMapping
     @PreAuthorize("@pms.hasPermission('business_product_add')" )
     public R save(@RequestBody Product product) {
-		if (ArrayUtil.isNotEmpty(productService.listByScope(Wrappers.lambdaQuery(product).eq(Product::getErpCode,product.getErpCode())).toArray())){
+		if (CollUtil.isNotEmpty(productService.listByScope(Wrappers.lambdaQuery(product).eq(Product::getErpCode,product.getErpCode())))){
 			return R.failed("浜у搧Erp缂栫爜宸插瓨鍦�");
 		}
         return R.ok(productService.save(product));
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BankStatementItemMapper.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BankStatementItemMapper.java
new file mode 100644
index 0000000..e978de2
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BankStatementItemMapper.java
@@ -0,0 +1,11 @@
+package com.by4cloud.platformx.business.mapper;
+
+import com.by4cloud.platformx.business.entity.BankStatementItem;
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface BankStatementItemMapper extends PlatformxBaseMapper<BankStatementItem> {
+
+
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BipViewMapper.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BipViewMapper.java
index b80a290..fee92c6 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BipViewMapper.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BipViewMapper.java
@@ -12,7 +12,7 @@
 @DS("druid_bip_view")
 public interface BipViewMapper {
 
-	@Select("select  certificate_id, cust_name,legal_person,registration_address from mdm_send.mdm_cust_base_info_tra_send WHERE is_deleted = '0' and cust_name = #{companyName}")
+	@Select("select  certificate_id, cust_name,legal_person,registration_address,cust_code from mdm_send.mdm_cust_base_info_tra_send WHERE is_deleted = '0' and cust_name = #{companyName}")
 	CustInfoVo selectBaseInfoByCustName(String companyName);
 
 	@Select("SELECT mcbats.bank_account,mcbats.bank_name FROM mdm_send.mdm_cust_bank_account_tra_send AS mcbats  WHERE is_deleted = '0' and holder_name = #{companyName}")
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractInvoiceService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractInvoiceService.java
index a38f49e..8aeb719 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractInvoiceService.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ContractInvoiceService.java
@@ -9,6 +9,8 @@
 public interface ContractInvoiceService {
 	R getContractOutBound(Long contractId);
 
+	R getContractAdvance(Long contractId);
+
 	R genInvoiceInfo(GenInvoiceInfoDTO genInvoiceInfoDTO);
 
 	R toInvoice(GenInvoiceInfoDTO genInvoiceInfoDTO);
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BankStatementServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BankStatementServiceImpl.java
index 15acf79..0bc4219 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BankStatementServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BankStatementServiceImpl.java
@@ -1,5 +1,7 @@
 package com.by4cloud.platformx.business.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
@@ -7,22 +9,28 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.admin.api.entity.SysDept;
+import com.by4cloud.platformx.admin.api.feign.RemoteDeptService;
 import com.by4cloud.platformx.business.dto.BankStatementUpdateDTO;
 import com.by4cloud.platformx.business.dto.PaymentConfirmAddDTO;
-import com.by4cloud.platformx.business.entity.BankStatement;
-import com.by4cloud.platformx.business.entity.BusinessCustomer;
-import com.by4cloud.platformx.business.entity.Contract;
+import com.by4cloud.platformx.business.entity.*;
+import com.by4cloud.platformx.business.mapper.BankStatementItemMapper;
 import com.by4cloud.platformx.business.mapper.BankStatementMapper;
 import com.by4cloud.platformx.business.mapper.BusinessCustomerMapper;
 import com.by4cloud.platformx.business.mapper.ContractMapper;
 import com.by4cloud.platformx.business.service.BankStatementService;
 import com.by4cloud.platformx.business.service.PaymentConfirmService;
 import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.security.util.SecurityUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * 閾惰娴佹按
  *
@@ -38,48 +46,82 @@
 	private final ContractMapper contractMapper;
 	private final BusinessCustomerMapper businessCustomerMapper;
 	private final StringRedisTemplate redisTemplate;
+	private final RemoteDeptService remoteDeptService;
+	private final BankStatementItemMapper bankStatementItemMapper;
 
 	@Value("${bip.url}")
 	private String url;
 
+	@Value("${BWInvoice.flag}")
+	private Boolean bwFlag;
+
 	@Override
 	public R edit(BankStatementUpdateDTO updateDTO) {
 		BankStatement statement = baseMapper.selectById(updateDTO.getId());
-		Contract contract = contractMapper.selectById(updateDTO.getContractId());
-		if (ObjUtil.isNull(contract)){
-			return R.failed("鍚堝悓鏌ヨ澶辫触");
+		if (CollUtil.isEmpty(updateDTO.getContractCollectionList())){
+			return R.failed("璇烽�夋嫨鏀舵鍚堝悓鍚庡湪鎻愪氦");
 		}
-		PaymentConfirmAddDTO addDTO = new PaymentConfirmAddDTO();
-		addDTO.setBusGuestId(statement.getBusGuestId()+"");
-		addDTO.setConfirmTime(statement.getTranDate());
-		addDTO.setContractNo(contract.getContractNo());
-		addDTO.setInOrOut("1");
-		addDTO.setTransationAmount(statement.getTranAmount());
-		R r = paymentConfirmService.add(addDTO);
-		if (!r.isOk()){
-			return r;
+		BigDecimal toPaidTotal = updateDTO.getContractCollectionList().stream() .map(StatementContractDTO::getToPaidAmount)
+				.reduce(BigDecimal.ZERO, BigDecimal::add);
+		if (toPaidTotal.compareTo(statement.getTranAmount().subtract(statement.getConfirmAmount()))>0){
+			return R.failed("纭鏀舵鎬婚涓嶈兘瓒呰繃浜ゆ槗娴佹按閲戦");
 		}
-		statement.setContractId(updateDTO.getContractId());
+		statement.setConfirmAmount(statement.getConfirmAmount().add(toPaidTotal));
 		baseMapper.updateById(statement);
 
+		updateDTO.getContractCollectionList().stream().forEach(statementContractDTO -> {
+			BankStatementItem item = new BankStatementItem();
+			item.setStatetId(statement.getId());
+			item.setBankSeqNo(statement.getBankSeqNo());
+			item.setConfirmAmount(statementContractDTO.getToPaidAmount());
+			item.setContractId(statementContractDTO.getId());
+			bankStatementItemMapper.insert(item);
+
+			Contract contract = contractMapper.selectById(statementContractDTO.getId());
+			PaymentConfirmAddDTO addDTO = new PaymentConfirmAddDTO();
+			addDTO.setBusGuestId(statement.getBusGuestId()+"");
+			addDTO.setConfirmTime(statement.getTranDate());
+			addDTO.setContractNo(contract.getContractNo());
+			addDTO.setInOrOut("1");
+			addDTO.setTransationAmount(statementContractDTO.getToPaidAmount());
+			addDTO.setBankSeqNo(statement.getBankSeqNo());
+			paymentConfirmService.add(addDTO);
+		});
+
+
+
 		//bip鎺ㄩ��
-		pushSaveCollection(statement);
+		if (bwFlag) {
+			pushSaveCollection(statement, updateDTO.getContractCollectionList());
+		}
 		return R.ok();
 	}
 
-	private void pushSaveCollection(BankStatement statement) {
+	private void pushSaveCollection(BankStatement statement, List<StatementContractDTO> contractDTOList) {
 		String accessToken = "";
 		if (redisTemplate.hasKey("BIP_TOKEN")) {
 			accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
 		} else {
-			paymentConfirmService.getAccessToken(accessToken);
+			accessToken = paymentConfirmService.getAccessToken(accessToken);
 		}
 		if (StrUtil.isEmpty(accessToken)) {
 			log.error("bip accessToken 鑾峰彇寮傚父");
 			return;
 		}
 		String finalAccessToken = accessToken;
-		JSONObject params = genRequestParam(statement);
+
+		BusinessCustomer customer = businessCustomerMapper.selectById(statement.getBusGuestId());
+		if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){
+			log.error("鏌ヨ瀹㈡埛淇℃伅寮傚父");
+			return;
+		}
+		R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
+		if (!r.isOk()){
+			log.error("鏌ヨ鍗曚綅淇℃伅寮傚父");
+			return;
+		}
+		SysDept dept = r.getData();
+		JSONObject params = genRequestParam(statement,dept,customer,contractDTOList);
 
 		log.info("鏀舵鍗曢泦鎴� Request:{}", params.toJSONString());
 		String result = HttpUtil.post(url + "/yonbip/EFI/receivable/save?access_token=" + finalAccessToken, params.toJSONString());
@@ -87,47 +129,31 @@
 
 	}
 
-	private JSONObject genRequestParam(BankStatement statement) {
-		BusinessCustomer customer = businessCustomerMapper.selectById(statement.getBusGuestId());
-		Contract contract = contractMapper.selectById(statement.getContractId());
-		JSONObject req = new JSONObject();
-
+	private JSONObject genRequestParam(BankStatement statement,SysDept dept,BusinessCustomer customer,List<StatementContractDTO> contractDTOList) {
+		JSONObject jsonObject = new JSONObject();
 		JSONObject data = new JSONObject();
-
-
-		JSONObject freeCh = new JSONObject();
-		freeCh.put("YSYF57","MJHYXGLXT");
-
-		data.put("freeChId",freeCh);
-		data.put("extVouchCode",statement.getBankSeqNo());
-		data.put("billDate",statement.getTranDate());
+		data.put("billDate",DateUtil.format(statement.getTranDate(), DatePattern.NORM_DATETIME_FORMAT));
+		data.put("exchangeRate","1");//姹囩巼
+		data.put("exchangeRateDate",DateUtil.now());//姹囩巼鏃堕棿
 		data.put("objectType","1");
-		data.put("customerCode",customer.getCreditCode());
-		data.put("exchangeRate",1);
-		data.put("exchangeRateDate", DateUtil.now());
-		data.put("contractNo",contract.getContractNo());
-
-		JSONArray bodyItems = new JSONArray();
-
-		JSONObject bodyItem = new JSONObject();
-		bodyItem.put("srcBillType","38");
-		bodyItem.put("srcBillNo",statement.getBankSeqNo());
-
-		JSONObject freeChItem = new JSONObject();
-		freeChItem.put("YSZJX01A","涓氬姟璧勯噾棰勭畻椤圭洰");
-		freeChItem.put("YSZJX05","");
-		freeChItem.put("YSZJX11","2146820445301112836");
-		freeChItem.put("zzbkfl","");
-		bodyItem.put("freeChId",freeChItem);
-
-		bodyItems.add(bodyItem);
-		data.put("bodyItem",bodyItems);
-
+		data.put("customerCode",customer.getBipCode());//瀹㈡埛缂栫爜
+		data.put("financeOrgCode",dept.getBipCode());//寮�绁ㄧ粍缁囩紪鐮�
+		data.put("orgCode",dept.getBipCode());//涓氬姟缁勭粐缂栫爜
+		data.put("bustypeCode","");//浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岄攢鍞粯璁JHYXGLXT
+		data.put("oriCurrencyCode","CNY");//甯佺
 		data.put("_status","Insert");
-		data.put("oriTaxIncludedAmount",statement.getTranAmount());
-
-		req.put("data",data);
-		return req;
-
+		JSONArray bodyItem = new JSONArray();
+		for (StatementContractDTO statementContractDTO:contractDTOList) {
+			Contract contract = contractMapper.selectById(statementContractDTO.getId());
+			JSONObject item = new JSONObject();
+			item.put("oriTaxIncludedAmount", statementContractDTO.getToPaidAmount());
+			item.put("contractNo", contract.getContractNo());
+			item.put("quickTypeCode", "1");
+			item.put("_status", "Insert");
+			bodyItem.add(item);
+		}
+		data.put("bodyItem",bodyItem);
+		jsonObject.put("data",data);
+		return  jsonObject;
 	}
 }
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BusinessCustomerServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BusinessCustomerServiceImpl.java
index 0767e4d..3be2168 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BusinessCustomerServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BusinessCustomerServiceImpl.java
@@ -1,6 +1,7 @@
 package com.by4cloud.platformx.business.service.impl;
 
-import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.collection.CollUtil;
+
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -43,30 +44,38 @@
 				.or().isNull(BusinessCustomer::getLegalPerson)
 				.or().isNull(BusinessCustomer::getBankName)
 				.or().isNull(BusinessCustomer::getBankAccount)
-				.or().isNull(BusinessCustomer::getRegisterName))
+				.or().isNull(BusinessCustomer::getRegisterName)
+				.or().isNull(BusinessCustomer::getBipCode))
 		);
-		if (ArrayUtil.isNotEmpty(bcList.toArray())){
+		if (CollUtil.isNotEmpty(bcList)){
 			for (BusinessCustomer bc:bcList
 				 ) {
 				log.info("寮�濮嬪悓姝}淇℃伅",bc.getCompanyName());
 				CustInfoVo custInfo = bipViewMapper.selectBaseInfoByCustName(bc.getCompanyName());
+				if (ObjUtil.isNull(custInfo)){
+					continue;
+				}
 				if (ObjUtil.isNotNull(custInfo)){
 					bc.setCreditCode(custInfo.getCertificateId());
 					bc.setRegisterName(custInfo.getCustName());
 					bc.setLegalPerson(custInfo.getLegalPerson());
 					bc.setAddress(custInfo.getRegistrationAddress());
+					bc.setBipCode(custInfo.getCustCode());
 					baseMapper.updateById(bc);
-					log.info("{}鍚屾鍚嶇О銆佹硶浜恒�佸湴鍧�銆佷俊鐢ㄧ爜淇℃伅鎴愬姛",bc.getCompanyName());
+					log.info("{}鍚屾鍚嶇О銆佹硶浜恒�佸湴鍧�銆佷俊鐢ㄧ爜銆乥ipcode淇℃伅鎴愬姛",bc.getCompanyName());
 				}
 				List<CustBankVo> bankVoList = bipViewMapper.selectBankByCustName(bc.getCompanyName());
-				if (ArrayUtil.isNotEmpty(bankVoList.toArray())){
+				if (CollUtil.isEmpty(bankVoList)){
+					continue;
+				}
+				if (CollUtil.isNotEmpty(bankVoList)){
 					if (StrUtil.isEmpty(bc.getBankAccount())){
 						bc.setBankAccount(bankVoList.get(0).getBankAccount());
 						baseMapper.updateById(bc);
 						log.info("{}鍚屾閾惰鍗″彿淇℃伅鎴愬姛",bc.getCompanyName());
 					}
 					List<BankNameVo> bankNameVoList = bipBanklViewMapper.selectBankByCode(bankVoList.get(0).getBankName());
-					if (ArrayUtil.isNotEmpty(bankNameVoList.toArray())){
+					if (CollUtil.isNotEmpty(bankNameVoList)){
 						bc.setBankName(bankNameVoList.get(0).getBankNameName());
 						baseMapper.updateById(bc);
 						log.info("{}鍚屾閾惰鍚嶇О淇℃伅鎴愬姛",bc.getCompanyName());
@@ -92,13 +101,13 @@
 			log.info("{}涓绘暟鎹煡璇㈠悕绉般�佹硶浜恒�佸湴鍧�銆佷俊鐢ㄧ爜淇℃伅鎴愬姛",companyName);
 		}
 		List<CustBankVo> bankVoList = bipViewMapper.selectBankByCustName(bc.getCompanyName());
-		if (ArrayUtil.isNotEmpty(bankVoList.toArray())){
+		if (CollUtil.isNotEmpty(bankVoList)){
 			if (StrUtil.isEmpty(bc.getBankAccount())){
 				bc.setBankAccount(bankVoList.get(0).getBankAccount());
 				log.info("{}涓绘暟鎹煡璇㈤摱琛屽崱鍙蜂俊鎭垚鍔�",companyName);
 			}
 			List<BankNameVo> bankNameVoList = bipBanklViewMapper.selectBankByCode(bankVoList.get(0).getBankName());
-			if (ArrayUtil.isNotEmpty(bankNameVoList.toArray())){
+			if (CollUtil.isNotEmpty(bankNameVoList)){
 				bc.setBankName(bankNameVoList.get(0).getBankNameName());
 				log.info("{}涓绘暟鎹煡璇㈤摱琛屽悕绉颁俊鎭垚鍔�",companyName);
 			}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java
index d2bb434..9325098 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java
@@ -1,6 +1,7 @@
 package com.by4cloud.platformx.business.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
@@ -9,10 +10,8 @@
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -30,23 +29,21 @@
 import com.by4cloud.platformx.business.vo.*;
 import com.by4cloud.platformx.common.core.util.R;
 import com.by4cloud.platformx.common.data.datascope.DataScope;
-import com.by4cloud.platformx.common.data.mybatis.BaseModel;
 import com.by4cloud.platformx.common.security.util.SecurityUtils;
 import com.by4cloud.platformx.flow.task.dto.ProcessInstanceParamDto;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springdoc.core.annotations.ParameterObject;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.GetMapping;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -55,6 +52,7 @@
 public class ContractInvoiceServiceImpl extends ServiceImpl<ContractInvoiceMapper, ContractInvoice> implements ContractInvoiceService {
 
 	private final ContractMapper contractMapper;
+	private final ContractSubjectMatterMapper contractSubjectMatterMapper;
 	private final BusinessCustomerMapper businessCustomerMapper;
 	private final ContractOutBoundMapper contractOutBoundMapper;
 	private final PaymentConfirmMapper paymentConfirmMapper;
@@ -67,7 +65,7 @@
 	private final RemoteDeptService remoteDeptService;
 	private final RemoteFlowProcessService remoteFlowProcessService;
 	private final PaymentConfirmService paymentConfirmService;
-	private final RedisTemplate redisTemplate;
+	private final StringRedisTemplate redisTemplate;
 
 
 	@Value("${BWInvoice.url}")
@@ -92,9 +90,35 @@
 				.selectAll(ContractOutBound.class)
 				.eq(ContractOutBound::getContractId, contractId);
 		List<ContractInvoiceOutBoundVo> invoiceOutBoundVoList = contractOutBoundMapper.selectJoinList(ContractInvoiceOutBoundVo.class, wrapper);
-		if (ArrayUtil.isNotEmpty(invoiceOutBoundVoList.toArray())) {
+		if (CollUtil.isNotEmpty(invoiceOutBoundVoList)) {
 			invoiceOutBoundVoList.stream().forEach(contractInvoiceOutBoundVo -> {
+
 				contractInvoiceOutBoundVo.setInvoiceNum(contractInvoiceOutBoundVo.getOutBoundNum().subtract(contractInvoiceOutBoundVo.getInvoiceNum()));
+				ContractSubjectMatter subjectMatter = contractSubjectMatterMapper.selectOne(Wrappers.<ContractSubjectMatter>lambdaQuery().eq(ContractSubjectMatter::getContractId,contractId)
+						.eq(ContractSubjectMatter::getMaterialCode,contractInvoiceOutBoundVo.getSubjectMatterCode())
+						.eq(StrUtil.isNotBlank(contractInvoiceOutBoundVo.getLineNo()),ContractSubjectMatter::getLineNo,contractInvoiceOutBoundVo.getLineNo())
+						.last("limit 1"));
+				if (ObjUtil.isNotNull(subjectMatter)&&subjectMatter.getAdvanceNum().compareTo(new BigDecimal("0"))>0){
+					contractInvoiceOutBoundVo.setInvoiceNum(contractInvoiceOutBoundVo.getOutBoundNum().subtract(subjectMatter.getAdvanceNum()));
+				}
+				contractInvoiceOutBoundVo.setToInvoiceNum(contractInvoiceOutBoundVo.getInvoiceNum());
+			});
+		}
+		return R.ok(invoiceOutBoundVoList);
+	}
+
+	@Override
+	public R getContractAdvance(Long contractId) {
+		MPJLambdaWrapper<ContractSubjectMatter> wrapper = new MPJLambdaWrapper<ContractSubjectMatter>()
+				.selectAll(ContractSubjectMatter.class)
+				.selectAs(ContractSubjectMatter::getMaterialCode, "subjectMatterCode")
+				.selectAs(ContractSubjectMatter::getMaterialName, "subjectMatterName")
+				.selectAs(ContractSubjectMatter::getQuantity, "outBoundNum")
+				.eq(ContractSubjectMatter::getContractId, contractId);
+		List<ContractInvoiceOutBoundVo> invoiceOutBoundVoList = contractSubjectMatterMapper.selectJoinList(ContractInvoiceOutBoundVo.class, wrapper);
+		if (ArrayUtil.isNotEmpty(invoiceOutBoundVoList)) {
+			invoiceOutBoundVoList.stream().forEach(contractInvoiceOutBoundVo -> {
+				contractInvoiceOutBoundVo.setInvoiceNum(contractInvoiceOutBoundVo.getOutBoundNum().subtract(contractInvoiceOutBoundVo.getAdvanceNum()));
 				contractInvoiceOutBoundVo.setToInvoiceNum(contractInvoiceOutBoundVo.getInvoiceNum());
 			});
 		}
@@ -117,10 +141,43 @@
 			return R.failed("璇烽�夋嫨寮�绁ㄥ嚭搴撳崟鍚庡啀鎿嶄綔");
 		}
 		Long contractId = null;
-		if (!StrUtil.equals(genInvoiceInfoDTO.getContractCategory(),"water_house")) {
+		if (StrUtil.isNotBlank(genInvoiceInfoDTO.getContractId())) {
+			ContractPaymentSchedule schedule = contractPaymentScheduleMapper.selectOne(Wrappers.<ContractPaymentSchedule>lambdaQuery()
+					.eq(ContractPaymentSchedule::getStageName, "鍚堝悓绛捐").eq(ContractPaymentSchedule::getContractId,genInvoiceInfoDTO.getContractId())
+					.last("limit 1"));
+			if (ObjUtil.isNull(schedule)) {
+				return R.failed("鍚堝悓棰勬敹娆鹃樁娈靛紓甯革紝璇疯仈绯绘妧鏈汉鍛�");
+			}
+			Contract contract = contractMapper.selectById(genInvoiceInfoDTO.getContractId());
+			if (ObjUtil.isNull(contract)) {
+				return R.failed("鍚堝悓淇℃伅寮傚父锛岃鑱旂郴鎶�鏈汉鍛�");
+			}
+			R<SysDept> r = remoteDeptService.getById(contract.getPartyBId());
+			if (!r.isOk()) {
+				return R.failed("鑾峰彇寮�绁ㄥ崟浣嶅紓甯�");
+			}
+			SysDept b = r.getData();
+			BigDecimal advanceAmount = new BigDecimal("0");
+			for (ContractOutBoundInvoiceVo contractOutBoundInvoiceVo : genInvoiceInfoDTO.getOutBoundInvoiceList()) {
+				ContractSubjectMatter subjectMatter = contractSubjectMatterMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
+				if (ObjUtil.isNotNull(subjectMatter)) {
+					advanceAmount = advanceAmount.add(contractOutBoundInvoiceVo.getInvoiceNum().multiply(subjectMatter.getUnitPrice()));
+				}
+			}
+			log.info("advanceAmount:{}",advanceAmount);
+			log.info("schedule.getPlannedAmount:{}",schedule.getPlannedAmount());
+			if (advanceAmount.compareTo(schedule.getPlannedAmount()) > 0) {
+				return R.failed("寮�绁ㄩ噾棰濊秴鍑哄悎鍚岀璁㈤樁娈靛簲鏀堕噾棰�:" + schedule.getPlannedAmount() + ",璇疯皟鏁村紑绁ㄦ暟閲�");
+			}
+			GenInvoiceInfoVo vo = genAdvanceInvoiceInfoVo(genInvoiceInfoDTO, contract, b);
+
+			return R.ok(vo);
+		}
+
+		if (!StrUtil.equals(genInvoiceInfoDTO.getContractCategory(), "water_house")) {
 			ContractOutBound outBound = contractOutBoundMapper.selectById(genInvoiceInfoDTO.getOutBoundInvoiceList().get(0).getContractOutBoundId());
 			contractId = outBound.getContractId();
-		}else {
+		} else {
 			ContractPaymentSchedule schedule = contractPaymentScheduleMapper.selectById(genInvoiceInfoDTO.getOutBoundInvoiceList().get(0).getContractOutBoundId());
 			contractId = schedule.getContractId();
 		}
@@ -154,12 +211,12 @@
 		List<ContractOutBoundMergeVo> mergeOutBounds = new ArrayList<>();
 //		List<ContractOutBound> outBounds = contractOutBoundMapper.selectList(Wrappers.<ContractOutBound>lambdaQuery()
 //				.in(ContractOutBound::getId, genInvoiceInfoDTO.getOutBoundInvoiceList().stream().map(item->item.getContractOutBoundId()).collect(Collectors.toList())));
-		if (!StrUtil.equals(contract.getContractCategory(), "water_house")){
-			if (ArrayUtil.isNotEmpty(genInvoiceInfoDTO.getOutBoundInvoiceList().toArray())) {
+		if (!StrUtil.equals(contract.getContractCategory(), "water_house")) {
+			if (CollUtil.isNotEmpty(genInvoiceInfoDTO.getOutBoundInvoiceList())) {
 				genInvoiceInfoDTO.getOutBoundInvoiceList().stream().forEach(contractOutBoundInvoiceVo -> {
 					ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
 
-					if (!ArrayUtil.contains(erpCode.toArray(), contractOutBound.getSubjectMatterCode())) {
+					if (!CollUtil.contains(erpCode, contractOutBound.getSubjectMatterCode())) {
 						erpCode.add(contractOutBound.getSubjectMatterCode());
 						ContractOutBoundMergeVo mergeVo = new ContractOutBoundMergeVo();
 						mergeVo.setMaterialCode(contractOutBound.getSubjectMatterCode());
@@ -198,12 +255,12 @@
 						List<ContractOutBoundMergeVo> filteredList = mergeOutBounds.stream()
 								.filter(item -> contractOutBound.getSubjectMatterCode().equals(item.getMaterialCode())) // 闃叉绌烘寚閽堬紝寤鸿甯搁噺鍦ㄥ墠
 								.collect(Collectors.toList());
-						if (ArrayUtil.isNotEmpty(filteredList.toArray())) {
+						if (ArrayUtil.isNotEmpty(filteredList)) {
 							filteredList.get(0).setQuantity(filteredList.get(0).getQuantity().add(contractOutBound.getOutBoundNum()));
 						}
 					}
 				});
-				if (ArrayUtil.isNotEmpty(mergeOutBounds.toArray())) {
+				if (ArrayUtil.isNotEmpty(mergeOutBounds)) {
 					invoiceItemVoList = BeanUtil.copyToList(mergeOutBounds, InvoiceItemVo.class);
 					invoiceItemVoList.stream().forEach(invoiceItemVo -> {
 //				for (InvoiceItemVo invoiceItemVo:invoiceItemVoList) {
@@ -217,12 +274,12 @@
 					vo.setPriceWords(Convert.digitToChinese(vo.getTotalPrice()));
 				}
 			}
-		}else {
-			if (ArrayUtil.isNotEmpty(genInvoiceInfoDTO.getOutBoundInvoiceList().toArray())) {
+		} else {
+			if (ArrayUtil.isNotEmpty(genInvoiceInfoDTO.getOutBoundInvoiceList())) {
 				genInvoiceInfoDTO.getOutBoundInvoiceList().stream().forEach(contractOutBoundInvoiceVo -> {
 					ContractPaymentSchedule schedule = contractPaymentScheduleMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
 
-					if (!ArrayUtil.contains(erpCode.toArray(), schedule.getSubjectMatterCode())) {
+					if (!CollUtil.contains(erpCode, schedule.getSubjectMatterCode())) {
 						erpCode.add(schedule.getSubjectMatterCode());
 						ContractOutBoundMergeVo mergeVo = new ContractOutBoundMergeVo();
 						mergeVo.setMaterialCode(schedule.getSubjectMatterCode());
@@ -256,15 +313,15 @@
 							mergeVo.setUnitPrice(subjectMatter.getUnitPrice());
 						}
 						mergeOutBounds.add(mergeVo);
-					}else {
-						List<ContractOutBoundMergeVo> filterMergeVo = mergeOutBounds.stream().filter(item->item.getMaterialCode()
+					} else {
+						List<ContractOutBoundMergeVo> filterMergeVo = mergeOutBounds.stream().filter(item -> item.getMaterialCode()
 								.equals(schedule.getSubjectMatterCode())).collect(Collectors.toList());
-						if (ArrayUtil.isNotEmpty(filterMergeVo.toArray())){
+						if (ArrayUtil.isNotEmpty(filterMergeVo)) {
 							filterMergeVo.get(0).setPriceAndTax(schedule.getPlannedAmount().add(filterMergeVo.get(0).getPriceAndTax()));
 						}
 					}
 				});
-				if (ArrayUtil.isNotEmpty(mergeOutBounds.toArray())) {
+				if (ArrayUtil.isNotEmpty(mergeOutBounds)) {
 					invoiceItemVoList = BeanUtil.copyToList(mergeOutBounds, InvoiceItemVo.class);
 					invoiceItemVoList.stream().forEach(invoiceItemVo -> {
 //				for (InvoiceItemVo invoiceItemVo:invoiceItemVoList) {
@@ -282,16 +339,141 @@
 		return vo;
 	}
 
+	private GenInvoiceInfoVo genAdvanceInvoiceInfoVo(GenInvoiceInfoDTO genInvoiceInfoDTO, Contract contract, SysDept b) {
+		GenInvoiceInfoVo vo = new GenInvoiceInfoVo();
+		BusinessCustomer a = businessCustomerMapper.selectById(contract.getPartyAId());
+		vo.setAdvanceInvoice("111");
+		vo.setPartyA(a.getCompanyName());
+		vo.setPartyAOrgCode(a.getCreditCode());
+		vo.setPartyAOpenBank(a.getBankName());
+		vo.setPartyABankAccount(a.getBankAccount());
+		vo.setPartyB(b.getOrgName());
+		vo.setPartyBOrgCode(b.getOrgCode());
+		vo.setPartyBOpenBank(b.getOrgBank());
+		vo.setPartyBBankAccount(b.getOrgBankAccount());
+		List<InvoiceItemVo> invoiceItemVoList = new ArrayList<>();
+		List<String> erpCode = new ArrayList<>();
+		List<ContractOutBoundMergeVo> mergeOutBounds = new ArrayList<>();
+
+		if (CollUtil.isNotEmpty(genInvoiceInfoDTO.getOutBoundInvoiceList())) {
+			genInvoiceInfoDTO.getOutBoundInvoiceList().stream().forEach(contractOutBoundInvoiceVo -> {
+				ContractSubjectMatter subjectMatter = contractSubjectMatterMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
+				if (ObjUtil.isNotNull(subjectMatter)) {
+					if (!CollUtil.contains(erpCode, subjectMatter.getMaterialCode())) {
+						erpCode.add(subjectMatter.getMaterialCode());
+						ContractOutBoundMergeVo mergeVo = new ContractOutBoundMergeVo();
+						mergeVo.setMaterialCode(subjectMatter.getMaterialCode());
+						mergeVo.setMaterialInternalName(subjectMatter.getMaterialName());
+						mergeVo.setQuantity(contractOutBoundInvoiceVo.getInvoiceNum());
+						Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode, subjectMatter.getMaterialCode())
+								.eq(Product::getCompId, SecurityUtils.getUser().getCompId()).last("limit 1"));
+						if (ObjUtil.isNotNull(product)) {
+							mergeVo.setTaxClass(product.getTaxClass());
+							mergeVo.setSpecification(product.getProductType());
+							mergeVo.setTaxRate(new BigDecimal(product.getTaxRate()));
+							mergeVo.setTaxCode(product.getTaxCode());
+							Product productClass = productMapper.selectById(product.getParentId());
+							if (ObjUtil.isNotNull(product)) {
+								if (StrUtil.equals(product.getErpCode(), "water_bill")) {
+									mergeVo.setItemName("*" + product.getTaxClass() + "*姘磋垂");
+								} else if (StrUtil.equals(product.getErpCode(), "electricity_bill")) {
+									mergeVo.setItemName("*" + product.getTaxClass() + "*鐢佃垂");
+								} else if (StrUtil.equals(product.getErpCode(), "house_rental")) {
+									mergeVo.setItemName("*" + product.getTaxClass() + "*鎴垮眿绉熻祦");
+								} else {
+									mergeVo.setItemName("*" + product.getTaxClass() + "*" + productClass.getProductName());
+								}
+
+							}
+						}
+						mergeVo.setUnitPrice(subjectMatter.getUnitPrice());
+						mergeVo.setUnit(subjectMatter.getUnit());
+						mergeOutBounds.add(mergeVo);
+					}
+
+				}
+			});
+			if (ArrayUtil.isNotEmpty(mergeOutBounds)) {
+				invoiceItemVoList = BeanUtil.copyToList(mergeOutBounds, InvoiceItemVo.class);
+				invoiceItemVoList.stream().forEach(invoiceItemVo -> {
+//				for (InvoiceItemVo invoiceItemVo:invoiceItemVoList) {
+					BigDecimal itemPrice = invoiceItemVo.getUnitPrice().multiply(invoiceItemVo.getQuantity());
+					BigDecimal itemPriceTax = itemPrice.divide(new BigDecimal("100").add(invoiceItemVo.getTaxRate()), 2, RoundingMode.HALF_UP).multiply(invoiceItemVo.getTaxRate());
+					invoiceItemVo.setPriceTax(itemPriceTax);
+					invoiceItemVo.setPriceNoTax(itemPrice.subtract(itemPriceTax));
+				});
+				vo.setTotalPrice(invoiceItemVoList.stream().map(item -> item.getPriceTax().add(item.getPriceNoTax())).reduce(BigDecimal.ZERO, BigDecimal::add));
+				vo.setInvoiceItemList(invoiceItemVoList);
+				vo.setPriceWords(Convert.digitToChinese(vo.getTotalPrice()));
+			}
+		}
+
+		return vo;
+	}
+
 	@Override
 	public R toInvoice(GenInvoiceInfoDTO genInvoiceInfoDTO) {
-		if (ArrayUtil.isEmpty(genInvoiceInfoDTO.getOutBoundInvoiceList().toArray())) {
+		if (ArrayUtil.isEmpty(genInvoiceInfoDTO.getOutBoundInvoiceList())) {
 			return R.failed("璇烽�夋嫨寮�绁ㄥ嚭搴撳崟鍚庡啀鎿嶄綔");
 		}
 		Long contractId = null;
-		if (!StrUtil.equals(genInvoiceInfoDTO.getContractCategory(),"water_house")) {
+		if (StrUtil.isNotBlank(genInvoiceInfoDTO.getContractId())) {
+
+			ContractPaymentSchedule schedule = contractPaymentScheduleMapper.selectOne(Wrappers.<ContractPaymentSchedule>lambdaQuery()
+					.eq(ContractPaymentSchedule::getStageName, "鍚堝悓绛捐").eq(ContractPaymentSchedule::getContractId,genInvoiceInfoDTO.getContractId())
+					.last("limit 1"));
+			if (ObjUtil.isNull(schedule)) {
+				return R.failed("鍚堝悓棰勬敹娆鹃樁娈靛紓甯革紝璇疯仈绯绘妧鏈汉鍛�");
+			}
+			Contract contract = contractMapper.selectById(genInvoiceInfoDTO.getContractId());
+			if (ObjUtil.isNull(contract)) {
+				return R.failed("鍚堝悓淇℃伅寮傚父锛岃鑱旂郴鎶�鏈汉鍛�");
+			}
+			ContractInvoice lastInvoice = baseMapper.selectOne(Wrappers.<ContractInvoice>lambdaQuery().eq(ContractInvoice::getContractId,contract.getId())
+					.orderByDesc(ContractInvoice::getCreateTime).last("limit 1"));
+			if (ObjUtil.isNotNull(lastInvoice)&&StrUtil.equals(lastInvoice.getApprovalStatus(),"0")){
+				return R.failed("璇风瓑寰呮渶杩戠殑鍙戠エ瀹℃牳瀹屾垚鍚庡啀杩涜棰勬敹寮�绁�");
+			}
+			R<SysDept> r = remoteDeptService.getById(contract.getPartyBId());
+			if (!r.isOk()) {
+				return R.failed("鑾峰彇寮�绁ㄥ崟浣嶅紓甯�");
+			}
+			SysDept b = r.getData();
+			BigDecimal advanceAmount = new BigDecimal("0");
+			for (ContractOutBoundInvoiceVo contractOutBoundInvoiceVo : genInvoiceInfoDTO.getOutBoundInvoiceList()) {
+				ContractSubjectMatter subjectMatter = contractSubjectMatterMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
+				if (ObjUtil.isNotNull(subjectMatter)) {
+					advanceAmount = advanceAmount.add(contractOutBoundInvoiceVo.getInvoiceNum().multiply(subjectMatter.getUnitPrice()));
+				}
+			}
+
+			if (advanceAmount.compareTo(schedule.getPlannedAmount()) > 0) {
+				return R.failed("寮�绁ㄩ噾棰濊秴鍑哄悎鍚岀璁㈤樁娈靛簲鏀堕噾棰�:" + schedule.getPlannedAmount() + ",璇疯皟鏁村紑绁ㄦ暟閲�");
+			}
+			GenInvoiceInfoVo vo = genAdvanceInvoiceInfoVo(genInvoiceInfoDTO, contract, b);
+			//鍙戠エ淇濆瓨
+			ContractInvoice invoice = saveContractInvoice(vo, contract, genInvoiceInfoDTO.getOutBoundInvoiceList(), DateUtil.current() + "","1");
+			//鍚姩娴佺▼
+			ProcessInstanceParamDto dto = new ProcessInstanceParamDto();
+			Map<String, Object> map = BeanUtil.beanToMap(invoice);
+			dto.setParamMap(map);
+			dto.setFlowName(FlowNameEnum.閿�鍞寕璐﹀鎵�.name());
+			R r1 = remoteFlowProcessService.startProcessInstance(dto);
+			if (r1.getCode() == 1) {
+				return R.failed("娴佺▼鍚姩澶辫触");
+			}
+			//鏇存柊鍚堝悓鍑哄簱鍗曠姸鎬�
+			genInvoiceInfoDTO.getOutBoundInvoiceList().stream().forEach(contractOutBoundInvoiceVo -> {
+				ContractSubjectMatter subjectMatter = contractSubjectMatterMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
+				subjectMatter.setAdvanceNum(subjectMatter.getAdvanceNum().add(contractOutBoundInvoiceVo.getInvoiceNum()));
+				contractSubjectMatterMapper.updateById(subjectMatter);
+			});
+			return R.ok();
+		}
+		if (!StrUtil.equals(genInvoiceInfoDTO.getContractCategory(), "water_house")) {
 			ContractOutBound outBound = contractOutBoundMapper.selectById(genInvoiceInfoDTO.getOutBoundInvoiceList().get(0).getContractOutBoundId());
 			contractId = outBound.getContractId();
-		}else {
+		} else {
 			ContractPaymentSchedule schedule = contractPaymentScheduleMapper.selectById(genInvoiceInfoDTO.getOutBoundInvoiceList().get(0).getContractOutBoundId());
 			contractId = schedule.getContractId();
 		}
@@ -306,12 +488,12 @@
 		SysDept b = r.getData();
 		GenInvoiceInfoVo vo = genInvoiceInfoVo(genInvoiceInfoDTO, contract, b);
 		//鍙戠エ淇濆瓨
-		ContractInvoice invoice = saveContractInvoice(vo, contract, genInvoiceInfoDTO.getOutBoundInvoiceList(), DateUtil.current() + "");
+		ContractInvoice invoice = saveContractInvoice(vo, contract, genInvoiceInfoDTO.getOutBoundInvoiceList(), DateUtil.current() + "","0");
 		//鍚姩娴佺▼
 		ProcessInstanceParamDto dto = new ProcessInstanceParamDto();
 		Map<String, Object> map = BeanUtil.beanToMap(invoice);
-		if (StrUtil.equals(genInvoiceInfoDTO.getContractCategory(),"water_house")) {
-			map.put("contractCategory","water_house");
+		if (StrUtil.equals(genInvoiceInfoDTO.getContractCategory(), "water_house")) {
+			map.put("contractCategory", "water_house");
 		}
 		dto.setParamMap(map);
 		dto.setFlowName(FlowNameEnum.閿�鍞寕璐﹀鎵�.name());
@@ -319,23 +501,23 @@
 		if (r1.getCode() == 1) {
 			return R.failed("娴佺▼鍚姩澶辫触");
 		}
-		if (!StrUtil.equals(contract.getContractCategory(),"water_house")) {
+		if (!StrUtil.equals(contract.getContractCategory(), "water_house")) {
 			//鏇存柊鍚堝悓鍑哄簱鍗曠姸鎬�
 			genInvoiceInfoDTO.getOutBoundInvoiceList().stream().forEach(contractOutBoundInvoiceVo -> {
 				ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
 				contractOutBound.setInvoiceStatus("1");
-				if (contractOutBoundInvoiceVo.getInvoiceNum().compareTo(contractOutBound.getOutBoundNum().subtract(contractOutBound.getInvoiceNum()))<=0) {
+				if (contractOutBoundInvoiceVo.getInvoiceNum().compareTo(contractOutBound.getOutBoundNum().subtract(contractOutBound.getInvoiceNum())) <= 0) {
 					contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().subtract(contractOutBoundInvoiceVo.getInvoiceNum()));
 				}
 				contractOutBoundMapper.updateById(contractOutBound);
 			});
-		}else {
+		} else {
 			//鏇存柊鍚堝悓鎴跨 姘寸數 璐瑰紑绁ㄧ姸鎬�
 			genInvoiceInfoDTO.getOutBoundInvoiceList().stream().forEach(contractOutBoundInvoiceVo -> {
-					ContractPaymentSchedule schedule = contractPaymentScheduleMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
-					schedule.setInvoiceFlag("1");
-					contractPaymentScheduleMapper.updateById(schedule);
-				});
+				ContractPaymentSchedule schedule = contractPaymentScheduleMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
+				schedule.setInvoiceFlag("1");
+				contractPaymentScheduleMapper.updateById(schedule);
+			});
 		}
 		return R.ok();
 	}
@@ -355,7 +537,6 @@
 		//閿�鏂�
 		jsonObject.put("taxNo", vo.getPartyBOrgCode());//绋庡彿
 		jsonObject.put("isSplit", false);//瓒呰繃鍙戠エ鍗曞紶闄愰鏄惁闇�瑕佹媶鍒嗗紑鍏凤紝榛樿涓嶆媶鍒嗭紙鎷嗗垎鍙敮鎸佸彂绁ㄧ被鍨嬩唬鐮佷负 涓撶エ 004 鏅エ 007 鐢靛瓙绁� 026鐨�
-		jsonObject.put("taxUserName", "");//鐧诲綍鍚嶄负绋庡眬椤甸潰鐧�		褰曞悕
 		jsonObject.put("formatGenerate", false);//鏄惁闇�瑕佺敓鎴愮増寮忚繑鍥炵増寮忛摼鎺�(true / false)
 		jsonObject.put("formatPushType", false);//鐗堝紡鐢熸垚鏄惁鎺ㄩ��(true / false)
 		//data
@@ -374,10 +555,10 @@
 			invoiceDetail.put("goodsUnit", invoiceItemVo.getUnit());
 			invoiceDetail.put("goodsQuantity", invoiceItemVo.getQuantity());
 			invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice());
-			if (!StrUtil.equals(vo.getContractCategory(),"water_house")) {
-				invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getUnitPrice().multiply(invoiceItemVo.getQuantity()));
-			}else {
-				invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getPriceAndTax());
+			if (!StrUtil.equals(vo.getContractCategory(), "water_house")) {
+				invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getPriceNoTax());
+			} else {
+				invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getPriceNoTax());
 			}
 			invoiceDetail.put("goodsTotalTax", invoiceItemVo.getPriceTax());
 
@@ -388,8 +569,7 @@
 		//璐柟
 		data.put("buyerTaxNo", vo.getPartyAOrgCode());
 		data.put("buyerName", vo.getPartyA());
-		data.put("invoiceTotalPrice", vo.getTotalPrice().subtract(vo.getInvoiceItemList().stream().map(item -> item.getPriceTax()).reduce(BigDecimal.ZERO, BigDecimal::add)));
-		data.put("invoiceTotalTax", vo.getInvoiceItemList().stream().map(item -> item.getPriceTax()).reduce(BigDecimal.ZERO, BigDecimal::add));
+		data.put("drawer", SecurityUtils.getUser().getPhone());// TODO 绋庡姟鎬诲眬绯荤粺鐧婚檰浜烘墜鏈哄彿
 		data.put("invoiceTotalPriceTax", vo.getTotalPrice());
 		data.put("buyerBankName", vo.getPartyAOpenBank());
 		data.put("buyerBankNumber", vo.getPartyABankAccount());
@@ -398,15 +578,17 @@
 		return jsonObject;
 	}
 
-	private ContractInvoice saveContractInvoice(GenInvoiceInfoVo genInvoiceInfoVo, Contract contract, List<ContractOutBoundInvoiceVo> outBoundInvoiceVoList, String serialNo) {
+	private ContractInvoice saveContractInvoice(GenInvoiceInfoVo genInvoiceInfoVo, Contract contract,
+				List<ContractOutBoundInvoiceVo> outBoundInvoiceVoList, String serialNo,String advanceFlag) {
 		ContractInvoice invoice = new ContractInvoice();
 		invoice.setContractId(contract.getId());
 		invoice.setInvoiceCategory("1");
 		invoice.setRedReversal("0");
 		invoice.setSerialNo(serialNo);
-		invoice.setTexNo(genInvoiceInfoVo.getPartyBOrgCode());
+		invoice.setTaxNo(genInvoiceInfoVo.getPartyBOrgCode());
 		invoice.setSellerTaxName(genInvoiceInfoVo.getPartyB());
 		invoice.setBuyerTaxName(genInvoiceInfoVo.getPartyA());
+		invoice.setBuyerTaxNo(genInvoiceInfoVo.getPartyAOrgCode());
 		invoice.setInvoiceTotalTax(genInvoiceInfoVo.getInvoiceItemList().stream().map(item -> item.getPriceTax()).reduce(BigDecimal.ZERO, BigDecimal::add));
 		invoice.setInvoiceTotalPrice(genInvoiceInfoVo.getTotalPrice().subtract(invoice.getInvoiceTotalTax()));
 		invoice.setInvoiceTotalPriceTax(genInvoiceInfoVo.getTotalPrice());
@@ -414,9 +596,10 @@
 		invoice.setInvoiceStatus("1");
 		invoice.setApprovalStatus("0");
 		invoice.setOutBoundId(outBoundInvoiceVoList.stream()
-				.map(item-> String.valueOf(item.getContractOutBoundId())) // 鎴栬�� .map(Object::toString)
+				.map(item -> String.valueOf(item.getContractOutBoundId())) // 鎴栬�� .map(Object::toString)
 				.collect(Collectors.joining(",")));
 		invoice.setInvoicePreviewParam(JSONObject.toJSONString(outBoundInvoiceVoList));
+		invoice.setAdvanceFlag(advanceFlag);
 		baseMapper.insert(invoice);
 		return invoice;
 	}
@@ -438,9 +621,10 @@
 		Contract contract = contractMapper.selectById(blueInvoice.getContractId());
 		ContractInvoice invoice = new ContractInvoice();
 		invoice.setContractId(blueInvoice.getContractId());
-		invoice.setTexNo(blueInvoice.getTexNo());
+		invoice.setTaxNo(blueInvoice.getTaxNo());
 		invoice.setSellerTaxName(blueInvoice.getSellerTaxName());
 		invoice.setBuyerTaxName(blueInvoice.getBuyerTaxName());
+		invoice.setBuyerTaxNo(blueInvoice.getBuyerTaxNo());
 		invoice.setInvoiceTotalTax(blueInvoice.getInvoiceTotalTax());
 		invoice.setInvoiceTotalPrice(blueInvoice.getInvoiceTotalPrice());
 		invoice.setInvoiceTotalPriceTax(blueInvoice.getInvoiceTotalPriceTax());
@@ -457,13 +641,14 @@
 		invoice.setBlueInvoiceId(invoiceId);
 		invoice.setApprovalStatus("0");
 		invoice.setInvoicePreviewParam(blueInvoice.getInvoicePreviewParam());
+		invoice.setAdvanceFlag(blueInvoice.getAdvanceFlag());
 		baseMapper.insert(invoice);
 		//鍚姩娴佺▼
 		ProcessInstanceParamDto dto = new ProcessInstanceParamDto();
 		Map<String, Object> map = BeanUtil.beanToMap(invoice);
 		dto.setParamMap(map);
-		if (StrUtil.equals(contract.getContractCategory(),"water_house")) {
-			map.put("contractCategory","water_house");
+		if (StrUtil.equals(contract.getContractCategory(), "water_house")) {
+			map.put("contractCategory", "water_house");
 		}
 		dto.setParamMap(map);
 		dto.setFlowName(FlowNameEnum.閿�鍞寕璐﹀鎵�.name());
@@ -475,42 +660,40 @@
 		return R.ok();
 	}
 
-	private JSONObject genRedInvoice(Contract contract,ContractInvoice blueInvoice, String redConfirmSerialNo) {
+	private JSONObject genRedInvoice(Contract contract, ContractInvoice blueInvoice, String redConfirmSerialNo) {
 		JSONObject jsonObject = new JSONObject();
-		jsonObject.put("taxNo", blueInvoice.getTexNo());
+		jsonObject.put("taxNo", blueInvoice.getTaxNo());
 		jsonObject.put("redConfirmSerialNo", redConfirmSerialNo);
 		jsonObject.put("entryIdentity", "01");
-		jsonObject.put("sellerTaxNo", blueInvoice.getTexNo());
+		jsonObject.put("sellerTaxNo", blueInvoice.getTaxNo());
 		jsonObject.put("sellerTaxName", blueInvoice.getSellerTaxName());
 		jsonObject.put("buyerTaxName", blueInvoice.getBuyerTaxName());
-		jsonObject.put("originalInvoiceNo", blueInvoice.getInvoiceNo());
-		jsonObject.put("originInvoiceIsPaper", "N");
+		jsonObject.put("buyerTaxNo", blueInvoice.getBuyerTaxNo());
 		jsonObject.put("originInvoiceDate", blueInvoice.getInvoiceTime());
 		jsonObject.put("originInvoiceTotalPrice", blueInvoice.getInvoiceTotalPrice());
-		jsonObject.put("originInvoiceTotalTax", blueInvoice.getInvoiceTotalPrice());
+		jsonObject.put("originInvoiceTotalTax", blueInvoice.getInvoiceTotalTax());
+		jsonObject.put("invoiceTotalPrice", blueInvoice.getInvoiceTotalPrice().multiply(new BigDecimal("-1")));
+		jsonObject.put("invoiceTotalTax", blueInvoice.getInvoiceTotalTax().multiply(new BigDecimal("-1")));
+		jsonObject.put("originInvoiceIsPaper", "N");
 		jsonObject.put("originInvoiceType", "01");
-		jsonObject.put("invoiceTotalPrice", blueInvoice.getInvoiceTotalPrice());
-		jsonObject.put("invoiceTotalTax", blueInvoice.getInvoiceTotalPrice());
-		jsonObject.put("redInvoiceLabel", "2");
+		jsonObject.put("redInvoiceLabel", "01");
+		jsonObject.put("invoiceSource", "2");
+		jsonObject.put("originalInvoiceNo", blueInvoice.getInvoiceNo());
 		GenInvoiceInfoVo vo = BeanUtil.copyProperties(JSONObject.parseObject(blueInvoice.getInvoicePreview()), GenInvoiceInfoVo.class);
 		JSONArray invoiceDetailsList = new JSONArray();
 		Integer lineNo = 1;
 		for (InvoiceItemVo invoiceItemVo : vo.getInvoiceItemList()) {
 			JSONObject invoiceDetail = new JSONObject();
 			invoiceDetail.put("originalInvoiceDetailNo", lineNo);
+			invoiceDetail.put("projectName", invoiceItemVo.getItemName());
 			invoiceDetail.put("goodsLineNo", lineNo);
 			invoiceDetail.put("goodsCode", invoiceItemVo.getTaxCode());
 			invoiceDetail.put("goodsTaxRate", invoiceItemVo.getTaxRate().divide(new BigDecimal("100")));
 			invoiceDetail.put("goodsUnit", invoiceItemVo.getUnit());
 			invoiceDetail.put("goodsQuantity", invoiceItemVo.getQuantity());
 			invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice());
-			if (!StrUtil.equals(contract.getContractCategory(),"water_house")) {
-				invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getUnitPrice().multiply(invoiceItemVo.getQuantity()));
-			}else {
-				invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getPriceAndTax());
-			}
-			invoiceDetail.put("goodsTotalTax", invoiceItemVo.getPriceTax());
-
+			invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getPriceNoTax().multiply(new BigDecimal("-1")));
+			invoiceDetail.put("goodsTotalTax", invoiceItemVo.getPriceTax().multiply(new BigDecimal("-1")));
 			invoiceDetailsList.add(invoiceDetail);
 			lineNo++;
 		}
@@ -524,14 +707,16 @@
 		if (bwFlag) {
 			List<ContractInvoice> contractInvoices = baseMapper.selectList(Wrappers.<ContractInvoice>lambdaQuery()
 					.eq(ContractInvoice::getInvoiceCategory, "1").eq(ContractInvoice::getInvoiceStatus, "1"));
-			if (ArrayUtil.isNotEmpty(contractInvoices.toArray())) {
+			if (ArrayUtil.isNotEmpty(contractInvoices)) {
 				contractInvoices.stream().forEach(contractInvoice -> {
 					JSONObject request = new JSONObject();
-					request.put("tax_no", contractInvoice.getTexNo());
+					request.put("taxNo", contractInvoice.getTaxNo());
 					JSONObject data = new JSONObject();
-					data.put("serial_no", contractInvoice.getSerialNo());
-					data.put("return_type", "1");
+					data.put("taxNo", contractInvoice.getSerialNo());
+					data.put("returnType", "3");
+					data.put("invoiceIssueMode", "1");
 					String requestId = IdUtil.fastUUID();
+
 					log.info("serial_no:{},鍙戠エ鏌ヨ鍏ュ弬锛歿},", contractInvoice.getSerialNo(), request.toJSONString());
 					String result = HttpUtil.post("method=baiwang.output.format.query&version=1.0&request_id=" + requestId, request.toJSONString());
 					log.info("serial_no:{},鍙戠エ鏌ヨ鍥炲弬锛歿},", contractInvoice.getSerialNo(), result);
@@ -539,7 +724,7 @@
 					JSONObject resultObj = JSONObject.parseObject(result);
 					if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) && resultObj.getBoolean("success")) {
 						JSONObject model = resultObj.getJSONObject("model");
-						contractInvoice.setInvoicePath(model.getString("query_data"));
+						contractInvoice.setInvoicePath(model.getString("queryData"));
 						contractInvoice.setInvoiceStatus("2");
 						baseMapper.updateById(contractInvoice);
 					}
@@ -556,18 +741,34 @@
 		if (redisTemplate.hasKey("BIP_TOKEN")) {
 			accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
 		} else {
-			paymentConfirmService.getAccessToken(accessToken);
+			accessToken = paymentConfirmService.getAccessToken(accessToken);
 		}
 		if (StrUtil.isEmpty(accessToken)) {
 			log.error("bip accessToken 鑾峰彇寮傚父");
 			return;
 		}
+		Contract contract = contractMapper.selectById(contractInvoice.getContractId());
+		if (ObjUtil.isNull(contract)) {
+			log.error("鏌ヨ鍚堝悓淇℃伅寮傚父");
+			return;
+		}
+		BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId());
+		if (ObjUtil.isNull(customer) || StrUtil.isEmpty(customer.getBipCode())) {
+			log.error("鏌ヨ鍚堝悓淇℃伅寮傚父");
+			return;
+		}
+		R<SysDept> r = remoteDeptService.getById(contract.getPartyBId());
+		if (!r.isOk()) {
+			log.error("鏌ヨ鍗曚綅淇℃伅寮傚父");
+			return;
+		}
+		SysDept dept = r.getData();
 		//钃濈エ
-		if (StrUtil.equals(contractInvoice.getInvoiceCategory(),"1")) {
-			JSONObject params = genBlueReceiveParams(contractInvoice);
+		if (StrUtil.equals(contractInvoice.getInvoiceCategory(), "1")) {
+			JSONObject params = genBlueReceiveParams(contractInvoice, contract, customer, dept);
 			String finalAccessToken = accessToken;
 
-			log.info("XSJZ_YS_DJ_INSERT Request:", params.toJSONString());
+			log.info("XSJZ_YS_DJ_INSERT Request:{}", params.toJSONString());
 			String result = HttpUtil.post(url + "/yonbip/EFI/receivable/save?access_token=" + finalAccessToken, params.toJSONString());
 			log.info("XSJZ_YS_DJ_INSERT Response:{}", result);
 			//淇濆瓨璇锋眰璁板綍
@@ -582,7 +783,7 @@
 			}
 		}
 		//绾㈢エ
-		if (StrUtil.equals(contractInvoice.getInvoiceCategory(),"2")) {
+		if (StrUtil.equals(contractInvoice.getInvoiceCategory(), "2")) {
 			JSONObject params = genRedReceiveParams(contractInvoice);
 			String finalAccessToken = accessToken;
 
@@ -600,48 +801,48 @@
 	}
 
 	private JSONObject genRedReceiveParams(ContractInvoice contractInvoice) {
+		ContractInvoice blue = contractInvoice.selectById(contractInvoice.getBlueInvoiceId());
 		JSONObject jsonObject = new JSONObject();
 		JSONObject data = new JSONObject();
-		data.put("id",contractInvoice.getBipId());
-		jsonObject.put("data",data);
-		return  jsonObject;
+		data.put("id", blue.getBipId());
+		jsonObject.put("data", data);
+		return jsonObject;
 	}
 
-	private JSONObject genBlueReceiveParams(ContractInvoice contractInvoice) {
+	private JSONObject genBlueReceiveParams(ContractInvoice contractInvoice, Contract contract, BusinessCustomer customer, SysDept dept) {
 		JSONObject jsonObject = new JSONObject();
 		JSONObject data = new JSONObject();
-		if (contractInvoice.getInvoiceCategory().equals("1")){
-			data.put("direction","1");
-		}else {
-			data.put("direction","-1");
+		if (contractInvoice.getInvoiceCategory().equals("1")) {
+			data.put("direction", "1");
+		} else {
+			data.put("direction", "-1");
 		}
-		data.put("billDate",DateUtil.format(contractInvoice.getInvoiceTime(),DatePattern.NORM_DATETIME_FORMAT));
-		data.put("objectType","1");
-		data.put("exchangeRate","1");
-		data.put("exchangeRateDate",DateUtil.now());
-		data.put("_status","Insert");
+		data.put("billDate", DateUtil.format(contractInvoice.getInvoiceTime(), DatePattern.NORM_DATETIME_FORMAT));
+		data.put("exchangeRate", "1");//姹囩巼
+		data.put("exchangeRateDate", DateUtil.now());//姹囩巼鏃堕棿
+		data.put("objectType", "1");
+		data.put("customerCode", customer.getBipCode());//瀹㈡埛缂栫爜
+		data.put("financeOrgCode", dept.getBipCode());//寮�绁ㄧ粍缁囩紪鐮�
+		data.put("orgCode", dept.getBipCode());//涓氬姟缁勭粐缂栫爜
+		data.put("bustypeCode", "");//浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岄攢鍞粯璁JHYXGLXT
+		data.put("contractNo", contract.getContractNo());
+		data.put("oriCurrencyCode", "CNY");//甯佺
+		data.put("_status", "Insert");
 		GenInvoiceInfoVo vo = BeanUtil.copyProperties(JSONObject.parseObject(contractInvoice.getInvoicePreview()), GenInvoiceInfoVo.class);
 		JSONArray bodyItem = new JSONArray();
 		for (InvoiceItemVo invoiceItemVo : vo.getInvoiceItemList()) {
 			JSONObject item = new JSONObject();
-
-			JSONObject freeCh = new JSONObject();
-			freeCh.put("JT32","");
-			item.put("freeChId",freeCh);
-
-			item.put("invoiceNo",contractInvoice.getInvoiceNo());
-			item.put("materialCode",invoiceItemVo.getErpCode());
+			item.put("invoiceNo", contractInvoice.getInvoiceNo());
 			item.put("taxRate", invoiceItemVo.getTaxRate());
 			item.put("oriTaxAmount", invoiceItemVo.getPriceTax());
-			item.put("oriTaxExcludedAmount", invoiceItemVo.getPriceNoTax());
-			item.put("oriTaxIncludedAmount", invoiceItemVo.getUnitPrice().multiply(invoiceItemVo.getQuantity()));
-			item.put("_status","Insert");
+			item.put("oriTaxIncludedAmount", invoiceItemVo.getPriceAndTax());
+			item.put("_status", "Insert");
 
 			bodyItem.add(item);
 		}
-		data.put("bodyItem",bodyItem);
-		jsonObject.put("data",data);
-		return  jsonObject;
+		data.put("bodyItem", bodyItem);
+		jsonObject.put("data", data);
+		return jsonObject;
 	}
 
 	@Override
@@ -649,25 +850,36 @@
 		if (bwFlag) {
 			List<ContractInvoice> contractInvoices = baseMapper.selectList(Wrappers.<ContractInvoice>lambdaQuery()
 					.eq(ContractInvoice::getInvoiceCategory, "2").eq(ContractInvoice::getInvoiceStatus, "3"));
-			if (ArrayUtil.isNotEmpty(contractInvoices.toArray())) {
+			if (ArrayUtil.isNotEmpty(contractInvoices)) {
 				contractInvoices.stream().forEach(contractInvoice -> {
 					JSONObject request = new JSONObject();
-					request.put("taxNo", contractInvoice.getTexNo());
-					JSONObject data = new JSONObject();
-					data.put("redConfirmSerialNo", contractInvoice.getSerialNo());
-					data.put("buySelSelector", "1");
+					request.put("taxNo", contractInvoice.getTaxNo());
+					request.put("redConfirmSerialNo", contractInvoice.getSerialNo());
+					request.put("buySelSelector", "0");
+					request.put("invoiceStartDate", DateUtil.formatDate(DateUtil.beginOfYear(new Date())));
+					request.put("invoiceEndDate", DateUtil.formatDate(DateUtil.endOfYear(new Date())));
 					String requestId = IdUtil.fastUUID();
 					log.info("serial_no:{},绾㈠瓧纭鍗曟煡璇㈠叆鍙傦細{},", contractInvoice.getSerialNo(), request.toJSONString());
 					String result = HttpUtil.post("method=baiwang.output.redinvoice.formlist&&version=1.0&request_id=" + requestId, request.toJSONString());
 					log.info("serial_no:{},绾㈠瓧纭鍗曟煡璇㈠洖鍙傦細{},", contractInvoice.getSerialNo(), result);
 					JSONObject resultObj = JSONObject.parseObject(result);
 					saveBwRequestRecord("baiwang.output.redinvoice.formlist", requestId, request.toJSONString(), result);
-					if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) && resultObj.getBoolean("success")) {
-						JSONArray models = JSONArray.parseArray(resultObj.getString("model"));
-						if (ArrayUtil.isNotEmpty(models.toArray())) {
-							contractInvoice.setInvoiceStatus("2");
+					if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) &&
+							!resultObj.getBoolean("success")) {
+						log.error("绾㈠瓧纭鍗曞け璐ワ紒锛侊紒");
+						return;
+					}
+					JSONArray models = resultObj.getJSONArray("model");
+					if (ArrayUtil.isNotEmpty(models)) {
+						JSONObject model = (JSONObject) models.get(0);
+
+						if (StrUtil.isEmpty(model.getString("confirmBillingMark")) || StrUtil.equals(model.getString("confirmBillingMark"), "N")) {
+							//绾㈠啿澶辫触
+							contractInvoice.setRedReversal("2");
+						} else if (StrUtil.equals(model.getString("confirmBillingMark"), "Y")) {
+							//纭鍗冲紑
+							contractInvoice.setInvoiceNo(model.getString("redInvoiceNo"));
 							contractInvoice.setRedReversal("1");
-							baseMapper.updateById(contractInvoice);
 							//鎺ㄩ�丅IP
 							pushBipInvoice(contractInvoice);
 						}
@@ -684,12 +896,15 @@
 		Contract contract = contractMapper.selectById(invoice.getContractId());
 		GenInvoiceInfoVo vo = BeanUtil.copyProperties(JSONObject.parseObject(invoice.getInvoicePreview()), GenInvoiceInfoVo.class);
 		vo.setContractCategory(contract.getContractCategory());
+		invoice.setApprovalStatus("1");
+		baseMapper.updateById(invoice);
 		//钃濈エ
 		if (invoice.getInvoiceCategory().equals("1")) {
 			// TODO 寮�钃濈エ鎺ュ彛
 			JSONObject request = genBlueInvoice(vo, invoice.getSerialNo());
 			if (bwFlag) {
 				String requestId = IdUtil.fastUUID();
+				invoice.setBwRequestId(requestId);
 				log.info("钃濈エ璇锋眰鎺ュ彛鍏ュ弬", request.toJSONString());
 				String result = HttpUtil.post(bwUrl + "method=baiwang.output.invoice.issue&version=1.0&requestId=" + requestId, request.toJSONString());
 				log.info("钃濈エ璇锋眰鎺ュ彛鍥炲弬", result);
@@ -697,16 +912,24 @@
 				JSONObject resultObj = JSONObject.parseObject(result);
 				if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) &&
 						!resultObj.getBoolean("success")) {
+					log.error("寮�绁ㄥけ璐ワ紒锛侊紒");
+					return;
 				}
-				JSONArray models = JSONArray.parseArray(resultObj.getString("success"));
-				if (ArrayUtil.isNotEmpty(models.toArray())) {
+				JSONObject modelJson = resultObj.getJSONObject("model");
+				JSONArray models = modelJson.getJSONArray("success");
+				if (ArrayUtil.isNotEmpty(models)) {
 					JSONObject model = (JSONObject) models.get(0);
 					Date invoiceDate = DateUtil.parse(model.getString("invoiceDate"), DatePattern.PURE_DATETIME_PATTERN);
 					invoice.setInvoiceTime(invoiceDate);
 					invoice.setInvoiceNo(model.getString("invoiceNo"));
 				}
 			}
-			if (!StrUtil.equals(contract.getContractCategory(),"water_house")) {
+			if (StrUtil.isNotBlank(vo.getAdvanceInvoice())){
+				contract.setBillingAmout(vo.getTotalPrice().add(contract.getBillingAmout()));
+				contractMapper.updateById(contract);
+				return;
+			}
+			if (!StrUtil.equals(contract.getContractCategory(), "water_house")) {
 				//鍚堝悓鐘舵��
 				if (StrUtil.equals(contract.getBillingStatus(), "2")) {
 					contract.setBillingAmout(vo.getTotalPrice().add(contract.getBillingAmout()));
@@ -717,41 +940,41 @@
 						contract.setBillingStatus("1");
 					}
 					//闃叉閲嶅瀹″紑绁ㄥ鏍搁�氳繃鍚� 寮�绁ㄩ噾棰濊秴鍑哄悎鍚岄噾棰�
-					if (contract.getBillingAmout().compareTo(contract.getAmount())>0){
+					if (contract.getBillingAmout().compareTo(contract.getAmount()) > 0) {
 						contract.setBillingAmout(contract.getAmount());
 					}
 					contractMapper.updateById(contract);
 				}
-			}else {
+			} else {
 				//鍒ゆ柇 寰幆鏄惁瀹屾垚
-				List<ContractExecDate> execDateList = contractExecDateMapper.selectList(Wrappers.<ContractExecDate>lambdaQuery().eq(ContractExecDate::getContractId,contract.getId())
-						.eq(ContractExecDate::getGenFlag,"0"));
+				List<ContractExecDate> execDateList = contractExecDateMapper.selectList(Wrappers.<ContractExecDate>lambdaQuery().eq(ContractExecDate::getContractId, contract.getId())
+						.eq(ContractExecDate::getGenFlag, "0"));
 				List<MeterReadRecord> recordList = meterReadRecordMapper.selectList(Wrappers.<MeterReadRecord>lambdaQuery()
-						.eq(MeterReadRecord::getContractId,contract.getId())
+						.eq(MeterReadRecord::getContractId, contract.getId())
 						.isNull(MeterReadRecord::getMeterReadNum));
-				if (ArrayUtil.isEmpty(execDateList.toArray())&&ArrayUtil.isEmpty(recordList.toArray())) {
+				if (ArrayUtil.isEmpty(execDateList) && ArrayUtil.isEmpty(recordList)) {
 					//鍒ゆ柇鏄惁鏈夊彲寮�绁ㄨ褰�
 					List<ContractPaymentSchedule> scheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
-							.eq(ContractPaymentSchedule::getContractId,contract.getId()).eq(ContractPaymentSchedule::getInvoiceFlag,"0"));
-					if (ArrayUtil.isEmpty(scheduleList.toArray())){
+							.eq(ContractPaymentSchedule::getContractId, contract.getId()).eq(ContractPaymentSchedule::getInvoiceFlag, "0"));
+					if (ArrayUtil.isEmpty(scheduleList)) {
 						contract.setBillingStatus("3");
-					}else {
+					} else {
 						contract.setBillingStatus("2");
 					}
 
-				}else {
+				} else {
 					//鍒ゆ柇鏄惁鏈夊彲寮�绁ㄨ褰�
 					List<ContractPaymentSchedule> scheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
-							.eq(ContractPaymentSchedule::getContractId,contract.getId()));
-					if (ArrayUtil.isEmpty(scheduleList.toArray())){
+							.eq(ContractPaymentSchedule::getContractId, contract.getId()));
+					if (ArrayUtil.isEmpty(scheduleList)) {
 						contract.setBillingStatus("1");
-					}else {
+					} else {
 						contract.setBillingStatus("2");
 					}
 				}
 				contract.setBillingAmout(vo.getTotalPrice().add(contract.getBillingAmout()));
 				//闃叉閲嶅瀹″紑绁ㄥ鏍搁�氳繃鍚� 寮�绁ㄩ噾棰濊秴鍑哄悎鍚岄噾棰�
-				if (contract.getBillingAmout().compareTo(contract.getAmount())>0){
+				if (contract.getBillingAmout().compareTo(contract.getAmount()) > 0) {
 					contract.setBillingAmout(contract.getAmount());
 				}
 				contractMapper.updateById(contract);
@@ -761,59 +984,80 @@
 		if (invoice.getInvoiceCategory().equals("2")) {
 			// TODO 寮�绾㈢エ鎺ュ彛
 			ContractInvoice blueInvoice = baseMapper.selectById(invoice.getBlueInvoiceId());
-			JSONObject request = genRedInvoice(contract,blueInvoice, invoice.getSerialNo());
+			JSONObject request = genRedInvoice(contract, blueInvoice, invoice.getSerialNo());
 			String requestId = IdUtil.fastUUID();
+			invoice.setBwRequestId(requestId);
 			if (bwFlag) {
-				log.info("绾㈠瓧纭鍗曡姹傛帴鍙e叆鍙�", request.toJSONString());
+				log.info("绾㈠瓧纭鍗曡姹傛帴鍙e叆鍙�:{}", request.toJSONString());
 				String result = HttpUtil.post(bwUrl + "method=baiwang.output.redinvoice.add&version=1.0&requestId=" + requestId, request.toJSONString());
-				log.info("绾㈠瓧纭鍗曡姹傛帴鍙e洖鍙�", result);
+				log.info("绾㈠瓧纭鍗曡姹傛帴鍙e洖鍙�:{}", result);
 				saveBwRequestRecord("baiwang.output.redinvoice.add", requestId, request.toJSONString(), result);
 				JSONObject resultObj = JSONObject.parseObject(result);
 				if (resultObj.containsKey("requestId") && StrUtil.equals(resultObj.getString("requestId"), requestId) &&
 						!resultObj.getBoolean("success")) {
-					JSONArray models = JSONArray.parseArray(resultObj.getString("success"));
-					if (ArrayUtil.isNotEmpty(models.toArray())) {
-						JSONObject model = (JSONObject) models.get(0);
+					log.error("绾㈠瓧纭鍗曞け璐ワ紒锛侊紒");
+					return;
+				}
+				JSONArray models = resultObj.getJSONArray("model");
+				if (ArrayUtil.isNotEmpty(models)) {
+					JSONObject model = (JSONObject) models.get(0);
 
-						if (StrUtil.isEmpty(model.getString("confirmBillingMark"))||StrUtil.equals(model.getString("confirmBillingMark"),"N")) {
-							//绛夊緟纭
-							invoice.setRedReversal("3");
-						}else if (StrUtil.equals(model.getString("confirmBillingMark"),"Y")) {
-							//纭鍗冲紑
-							invoice.setInvoiceNo(model.getString("redInvoiceNo"));
-							invoice.setRedReversal("1");
-							//鎺ㄩ�丅IP
-							pushBipInvoice(invoice);
-						}
+					if (StrUtil.isEmpty(model.getString("confirmBillingMark")) || StrUtil.equals(model.getString("confirmBillingMark"), "N")) {
+						//绛夊緟纭
+						invoice.setRedReversal("3");
+					} else if (StrUtil.equals(model.getString("confirmBillingMark"), "Y")) {
+						//纭鍗冲紑
+						invoice.setInvoiceNo(model.getString("redInvoiceNo"));
+						invoice.setRedReversal("1");
+						//鎺ㄩ�丅IP
+						pushBipInvoice(invoice);
 					}
 				}
 			}
 			contract.setBillingAmout(contract.getBillingAmout().subtract(invoice.getInvoiceTotalPriceTax()));
 			//闃叉閲嶅瀹″紑绁ㄥ鏍搁�氳繃鍚� 寮�绁ㄩ噾棰濅负璐�
-			if (contract.getBillingAmout().compareTo(new BigDecimal("0"))<0){
+			if (contract.getBillingAmout().compareTo(new BigDecimal("0")) < 0) {
 				contract.setBillingAmout(new BigDecimal("0"));
+			}
+			contractMapper.updateById(contract);
+			blueInvoice.setRedReversal("1");
+			baseMapper.updateById(blueInvoice);
+			if (StrUtil.isNotBlank(vo.getAdvanceInvoice())){
+				//杩樺師棰勫紑鏁伴噺
+				List<ContractOutBoundInvoiceVo> outBoundInvoiceVoList = BeanUtil.copyToList(JSONArray.parseArray(blueInvoice.getInvoicePreviewParam()), ContractOutBoundInvoiceVo.class);
+				if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList)) {
+					outBoundInvoiceVoList.stream().forEach(contractOutBoundInvoiceVo -> {
+						ContractSubjectMatter subjectMatter = contractSubjectMatterMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
+						if (ObjUtil.isNotNull(subjectMatter)){
+							subjectMatter.setAdvanceNum(subjectMatter.getAdvanceNum().subtract(contractOutBoundInvoiceVo.getInvoiceNum()));
+							if (subjectMatter.getAdvanceNum().compareTo(new BigDecimal("0"))<=0){
+								subjectMatter.setAdvanceNum(new BigDecimal("0"));
+							}
+							contractSubjectMatterMapper.updateById(subjectMatter);
+						}
+					});
+				}
+				return;
 			}
 			//鏇存柊鍚堝悓寮�绁ㄧ姸鎬� 鍓嶆彁鍑哄簱瀹屾垚
 			contract.setBillingStatus("2");
 			contractMapper.updateById(contract);
-			blueInvoice.setRedReversal("1");
-			baseMapper.updateById(blueInvoice);
-			if (!StrUtil.equals(contract.getContractCategory(),"water_house")) {
+			if (!StrUtil.equals(contract.getContractCategory(), "water_house")) {
 				//鏇存柊鍚堝悓鍑哄簱鍗曠姸鎬�
 				List<ContractOutBoundInvoiceVo> outBoundInvoiceVoList = BeanUtil.copyToList(JSONArray.parseArray(blueInvoice.getInvoicePreviewParam()), ContractOutBoundInvoiceVo.class);
-				if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList.toArray())) {
+				if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList)) {
 					outBoundInvoiceVoList.stream().forEach(contractOutBoundInvoiceVo -> {
 						ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
-						if (contractOutBoundInvoiceVo.getInvoiceNum().compareTo(contractOutBound.getOutBoundNum().subtract(contractOutBound.getInvoiceNum()))<=0) {
+						if (contractOutBoundInvoiceVo.getInvoiceNum().compareTo(contractOutBound.getOutBoundNum().subtract(contractOutBound.getInvoiceNum())) <= 0) {
 							contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().subtract(contractOutBoundInvoiceVo.getInvoiceNum()));
 							contractOutBoundMapper.updateById(contractOutBound);
 						}
 					});
 				}
-			}else {
+			} else {
 				//鏇存柊鍚堝悓鎴跨 姘寸數 璐瑰紑绁ㄧ姸鎬�
 				List<ContractOutBoundInvoiceVo> outBoundInvoiceVoList = BeanUtil.copyToList(JSONArray.parseArray(blueInvoice.getInvoicePreviewParam()), ContractOutBoundInvoiceVo.class);
-				if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList.toArray())) {
+				if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList)) {
 					outBoundInvoiceVoList.stream().forEach(contractOutBoundInvoiceVo -> {
 						ContractPaymentSchedule schedule = contractPaymentScheduleMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
 						schedule.setInvoiceFlag("0");
@@ -822,8 +1066,7 @@
 				}
 			}
 		}
-		invoice.setApprovalStatus("1");
-		baseMapper.updateById(invoice);
+
 	}
 
 	@Override
@@ -834,22 +1077,22 @@
 		Contract contract = contractMapper.selectById(invoice.getContractId());
 		//钃濈エ
 		if (invoice.getInvoiceCategory().equals("1")) {
-			if (!StrUtil.equals(contract.getContractCategory(),"water_house")) {
+			if (!StrUtil.equals(contract.getContractCategory(), "water_house")) {
 				//鏇存柊鍚堝悓鍑哄簱鍗曠姸鎬�
 				List<ContractOutBoundInvoiceVo> outBoundInvoiceVoList = BeanUtil.copyToList(JSONArray.parseArray(invoice.getInvoicePreviewParam()), ContractOutBoundInvoiceVo.class);
-				if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList.toArray())) {
+				if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList)) {
 					outBoundInvoiceVoList.stream().forEach(contractOutBoundInvoiceVo -> {
 						ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
-						if (contractOutBoundInvoiceVo.getInvoiceNum().compareTo(contractOutBound.getOutBoundNum().subtract(contractOutBound.getInvoiceNum()))<=0) {
+						if (contractOutBoundInvoiceVo.getInvoiceNum().compareTo(contractOutBound.getOutBoundNum().subtract(contractOutBound.getInvoiceNum())) <= 0) {
 							contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().subtract(contractOutBoundInvoiceVo.getInvoiceNum()));
 							contractOutBoundMapper.updateById(contractOutBound);
 						}
 					});
 				}
-			}else {
+			} else {
 				//鏇存柊鍚堝悓鎴跨 姘寸數 璐瑰紑绁ㄧ姸鎬�
 				List<ContractOutBoundInvoiceVo> outBoundInvoiceVoList = BeanUtil.copyToList(JSONArray.parseArray(invoice.getInvoicePreviewParam()), ContractOutBoundInvoiceVo.class);
-				if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList.toArray())) {
+				if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList)) {
 					outBoundInvoiceVoList.stream().forEach(contractOutBoundInvoiceVo -> {
 						ContractPaymentSchedule schedule = contractPaymentScheduleMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
 						schedule.setInvoiceFlag("0");
@@ -870,11 +1113,11 @@
 
 	@Override
 	public Page pageInvoice(Page page, ContractInvoiceQueryDTO queryDTO) {
-		return baseMapper.pageInvoice(page,queryDTO, DataScope.of("comp_id"));
+		return baseMapper.pageInvoice(page, queryDTO, DataScope.of("comp_id"));
 	}
 
 	@Override
 	public Page pageScope(Page page, ContractQueryDTO queryDTO) {
-		return baseMapper.pageScope(page,queryDTO, DataScope.of("comp_id"));
+		return baseMapper.pageScope(page, queryDTO, DataScope.of("comp_id"));
 	}
 }
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractPaymentScheduleProcessServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractPaymentScheduleProcessServiceImpl.java
index d653e4e..c1a18c9 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractPaymentScheduleProcessServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractPaymentScheduleProcessServiceImpl.java
@@ -1,8 +1,8 @@
 package com.by4cloud.platformx.business.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -12,7 +12,6 @@
 import com.by4cloud.platformx.business.mapper.*;
 import com.by4cloud.platformx.business.service.ContractPaymentScheduleProcessService;
 import com.by4cloud.platformx.business.vo.ContractPaymentScheduleVo;
-import com.by4cloud.platformx.business.vo.ScheduleProcessVo;
 import com.by4cloud.platformx.common.core.util.R;
 import com.by4cloud.platformx.common.security.util.SecurityUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -45,13 +44,13 @@
 		if (ObjUtil.isNull(schedule)) {
 			return R.failed("灞ョ害闃舵涓庡悎鍚屼笉涓�鑷达紝璇疯仈绯绘妧鏈汉鍛�");
 		}
-		if (schedule.getStageName().equals("璐у埌绛炬敹") && ArrayUtil.isEmpty(addDTO.getContractOutBoundIds().toArray())) {
+		if (schedule.getStageName().equals("璐у埌绛炬敹") && CollUtil.isEmpty(addDTO.getContractOutBoundIds())) {
 			return R.failed("璇烽�夋嫨鍒拌揣鐨勫嚭搴撲俊鎭�");
 		}
 		//鍚堝悓
 		Contract contract = contractMapper.selectById(schedule.getContractId());
 		List<ContractSubjectMatter> subjectMatterList = subjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery().eq(ContractSubjectMatter::getContractId, contract.getId()));
-		if (ArrayUtil.isEmpty(subjectMatterList.toArray())) {
+		if (CollUtil.isEmpty(subjectMatterList)) {
 			return R.failed("璇ュ悎鍚屾爣鐨勭墿寮傚父锛岃鑱旂郴鎶�鏈汉鍛�");
 		}
 //		if (!subjectMatterList.stream().allMatch(item -> item.getDeliveryStatus() == 2)) {
@@ -96,8 +95,8 @@
 		List<ContractOutBound> contractOutBoundList = contractOutBoundMapper.selectList(Wrappers.<ContractOutBound>lambdaQuery().eq(ContractOutBound::getContractId, contract.getId())
 				.isNotNull(ContractOutBound::getArrivalTime));
 		if (schedule.getStageName().equals("璐у埌绛炬敹")) {
-			if (ArrayUtil.isNotEmpty(contractOutBoundList.toArray())
-					&& ArrayUtil.isNotEmpty(subjectMatterList.toArray())) {
+			if (CollUtil.isNotEmpty(contractOutBoundList)
+					&& CollUtil.isNotEmpty(subjectMatterList)) {
 				Map<String, BigDecimal> sumMap = contractOutBoundList.stream()
 						.collect(Collectors.groupingBy(
 								ContractOutBound::getSubjectMatterCode,
@@ -132,7 +131,7 @@
 						//瀹㈡埛浠樻瀹屾垚鍚堝悓
 						List<Contract> customerCompleteContractList = contractMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getPartyAId, contract.getPartyAId())
 								.eq(Contract::getPartyBId, SecurityUtils.getUser().getCompId()).apply(" amount = paid_amount"));
-						if (ArrayUtil.isNotEmpty(customerCompleteContractList)){
+						if (CollUtil.isNotEmpty(customerCompleteContractList)){
 							List<BigDecimal> outAmountList = new ArrayList<>();
 							for (Contract completeContract:customerCompleteContractList
 							) {
@@ -151,7 +150,7 @@
 									outAmountList.add(outConfirm.getTransationAmount());
 								}
 							}
-							if (ArrayUtil.isNotEmpty(outAmountList.toArray())){
+							if (CollUtil.isNotEmpty(outAmountList)){
 								BigDecimal currentSum = new BigDecimal("0");
 								for (BigDecimal currentAmount:outAmountList
 								) {
@@ -194,7 +193,7 @@
 					List<ContractPaymentSchedule> afterSchedule = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
 							.eq(ContractPaymentSchedule::getContractId, schedule.getContractId())
 							.gt(ContractPaymentSchedule::getStageOrder, schedule.getStageOrder()));
-					if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() == 1) {
+					if (CollUtil.isNotEmpty(afterSchedule) && afterSchedule.size() == 1) {
 						//鏈�鍚庨樁娈电敓鏁堟椂闂�
 						ContractPaymentSchedule endSchedule = afterSchedule.get(0);
 						if (StrUtil.equals(endSchedule.getStageName(), "璐ㄤ繚閲�")) {
@@ -233,12 +232,12 @@
 						contract.setNextScheduleName(endSchedule.getStageName());
 						contractMapper.updateById(contract);
 					}
-					if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() > 1) {
+					if (CollUtil.isNotEmpty(afterSchedule) && afterSchedule.size() > 1) {
 						//鏇存柊鍚堝悓涓嬩釜闃舵
 						contract.setNextScheduleName(afterSchedule.get(0).getStageName());
 						contractMapper.updateById(contract);
 					}
-					if (ArrayUtil.isEmpty(afterSchedule.toArray())) {
+					if (CollUtil.isEmpty(afterSchedule)) {
 //						schedule.setEffectiveEndDate(contract.getExpirationDate());
 //						contractPaymentScheduleMapper.updateById(schedule);
 						//鏇存柊鍚堝悓涓嬩釜闃舵
@@ -296,7 +295,7 @@
 					.eq(ContractPaymentSchedule::getContractId, schedule.getContractId())
 					.gt(ContractPaymentSchedule::getStageOrder, schedule.getStageOrder())
 					.gt(ContractPaymentSchedule::getPaymentRatio,"0"));
-			if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() == 1) {
+			if (CollUtil.isNotEmpty(afterSchedule) && afterSchedule.size() == 1) {
 				//鏈�鍚庨樁娈电敓鏁堟椂闂�
 				ContractPaymentSchedule endSchedule = afterSchedule.get(0);
 //				if (StrUtil.equals(endSchedule.getStageName(), "璐ㄤ繚閲�")) {
@@ -345,12 +344,12 @@
 				contract.setNextScheduleName(endSchedule.getStageName());
 				contractMapper.updateById(contract);
 			}
-			if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() > 1) {
+			if (CollUtil.isNotEmpty(afterSchedule) && afterSchedule.size() > 1) {
 				//鏇存柊鍚堝悓涓嬩釜闃舵
 				contract.setNextScheduleName(afterSchedule.get(0).getStageName());
 				contractMapper.updateById(contract);
 			}
-			if (ArrayUtil.isEmpty(afterSchedule.toArray())) {
+			if (CollUtil.isEmpty(afterSchedule)) {
 //				schedule.setEffectiveEndDate(contract.getExpirationDate());
 //				contractPaymentScheduleMapper.updateById(schedule);
 				//鏇存柊鍚堝悓涓嬩釜闃舵
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
index a0d71bb..8b4e1b6 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
@@ -1,6 +1,7 @@
 package com.by4cloud.platformx.business.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
@@ -54,6 +55,8 @@
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
+;
+
 /**
  * @author cd
  * @description
@@ -80,6 +83,7 @@
 	private final PaymentSlipMapper paymentSlipMapper;
 	private final ContractInvoiceMapper contractInvoiceMapper;
 	private final StringRedisTemplate redisTemplate;
+	private final ContractOutBoundMapper contractOutBoundMapper;
 
 	@Value("${erp.ymj}")
 	private String ymjErp;
@@ -155,7 +159,7 @@
 			}
 		}
 
-		if (ArrayUtil.isEmpty(addDTO.getContractSubjectMatter().toArray())){
+		if (CollUtil.isEmpty(addDTO.getContractSubjectMatter())){
 			return R.failed("鏍囩殑鐗╀笉鑳戒负绌�");
 		}
 
@@ -183,7 +187,7 @@
 		}
 		baseMapper.insert(contract);
 
-		if (ArrayUtil.isNotEmpty(addDTO.getContractSubjectMatter())) {
+		if (CollUtil.isNotEmpty(addDTO.getContractSubjectMatter())) {
 			addDTO.getContractSubjectMatter().stream().forEach(contractSubjectMatterAddDTO -> {
 				ContractSubjectMatter subjectMatter = BeanUtil.copyProperties(contractSubjectMatterAddDTO, ContractSubjectMatter.class);
 				subjectMatter.setContractId(contract.getId());
@@ -214,7 +218,7 @@
 
 		}
 
-		if (ArrayUtil.isNotEmpty(addDTO.getContractPaymentSchedule())) {
+		if (CollUtil.isNotEmpty(addDTO.getContractPaymentSchedule())) {
 			AtomicInteger index = new AtomicInteger(1);
 			addDTO.getContractPaymentSchedule().stream().forEach(contractPaymentScheduleAddDTO -> {
 				int currentIndex = index.getAndIncrement();
@@ -323,7 +327,7 @@
 		}
 		baseMapper.updateById(contract);
 
-		if (ArrayUtil.isNotEmpty(updateDTO.getContractSubjectMatter())) {
+		if (CollUtil.isNotEmpty(updateDTO.getContractSubjectMatter())) {
 			contractSubjectMatterMapper.delete(Wrappers.<ContractSubjectMatter>lambdaQuery().eq(ContractSubjectMatter::getContractId, contract.getId()));
 
 			updateDTO.getContractSubjectMatter().stream().forEach(contractSubjectMatterAddDTO -> {
@@ -350,7 +354,7 @@
 			});
 		}
 
-		if (ArrayUtil.isNotEmpty(updateDTO.getContractPaymentSchedule())) {
+		if (CollUtil.isNotEmpty(updateDTO.getContractPaymentSchedule())) {
 			contractPaymentScheduleMapper.delete(Wrappers.<ContractPaymentSchedule>lambdaQuery().eq(ContractPaymentSchedule::getContractId, contract.getId()));
 
 			AtomicInteger index = new AtomicInteger(1);
@@ -398,6 +402,21 @@
 		if (ObjUtil.isNotNull(a)){
 			detailVo.setPartyAOrgCode(a.getCreditCode());
 		}
+		List<ContractOutBound> outBoundList = contractOutBoundMapper.selectList(Wrappers.<ContractOutBound>lambdaQuery()
+				.eq(ContractOutBound::getContractId,id).orderByAsc(ContractOutBound::getOutBoundTime));
+		if (CollUtil.isNotEmpty(outBoundList)){
+			detailVo.setContractOutBound(outBoundList);
+		}
+		List<ContractInvoice> invoiceList = contractInvoiceMapper.selectList(Wrappers.<ContractInvoice>lambdaQuery()
+				.eq(ContractInvoice::getContractId,id).orderByAsc(ContractInvoice::getCreateTime));
+		if (CollUtil.isNotEmpty(invoiceList)){
+			detailVo.setContractInvoice(invoiceList);
+		}
+		List<PaymentSlip> slipList = paymentSlipMapper.selectList(Wrappers.<PaymentSlip>lambdaQuery()
+				.eq(PaymentSlip::getContractId,id).orderByAsc(PaymentSlip::getPaymentTime));
+		if (CollUtil.isNotEmpty(slipList)){
+			detailVo.setPaymentSlip(slipList);
+		}
 		return detailVo;
 	}
 
@@ -426,7 +445,7 @@
 		List<ContractSubjectMatter> subjectMatterList = contractSubjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery()
 				.eq(ContractSubjectMatter::getContractId,id));
 		if (StrUtil.isNotEmpty(contract.getContractCategory()) && StrUtil.equals(contract.getContractCategory(), "water_house")) {
-			if (ArrayUtil.isNotEmpty(subjectMatterList.toArray())) {
+			if (CollUtil.isNotEmpty(subjectMatterList)) {
 				for (ContractSubjectMatter contractSubjectMatter: subjectMatterList)  {
 					if (StrUtil.equals(contract.getExecFrequency(), "1")) {
 						Long weeksTrue = DateUtil.betweenWeek(DateUtil.beginOfWeek(contract.getEffectiveDate()),
@@ -576,7 +595,7 @@
 					.eq(ContractPaymentSchedule::getContractId, fitstSchedule.getContractId())
 					.gt(ContractPaymentSchedule::getStageOrder, fitstSchedule.getStageOrder())
 					.orderByAsc(ContractPaymentSchedule::getCreateTime));
-			if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() == 1) {
+			if (ArrayUtil.isNotEmpty(afterSchedule) && afterSchedule.size() == 1) {
 				//鏈�鍚庨樁娈电敓鏁堟椂闂�
 				ContractPaymentSchedule endSchedule = afterSchedule.get(0);
 				if (StrUtil.equals(endSchedule.getStageName(), "璐ㄤ繚閲�")) {
@@ -610,7 +629,7 @@
 				contract.setNextScheduleName(endSchedule.getStageName());
 				baseMapper.updateById(contract);
 			}
-			if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() > 1) {
+			if (ArrayUtil.isNotEmpty(afterSchedule) && afterSchedule.size() > 1) {
 				//绗竴闃舵鐢熸晥鏃堕棿
 //			fitstSchedule.setEffectiveEndDate(DateUtil.offsetDay(contract.getSignDate(),fitstSchedule.getAgreedDays()));
 //			contractPaymentScheduleMapper.updateById(fitstSchedule);
@@ -619,7 +638,7 @@
 				baseMapper.updateById(contract);
 			}
 			//鍙湁褰撳墠鍚堝悓绛惧瓧闃舵
-//		if(ArrayUtil.isEmpty(afterSchedule.toArray())){
+//		if(ArrayUtil.isEmpty(afterSchedule)){
 //			fitstSchedule.setEffectiveEndDate(DateUtil.offsetDay(contract.getSignDate(),fitstSchedule.getAgreedDays()));
 //			contractPaymentScheduleMapper.updateById(fitstSchedule);
 //		}
@@ -641,7 +660,7 @@
 					request.put("moneySum",contract.getAmount());
 					request.put("signManner","闈㈢");
 					request.put("salesman","");
-					if (ArrayUtil.isNotEmpty(subjectMatterList.toArray())){
+					if (ArrayUtil.isNotEmpty(subjectMatterList)){
 						JSONArray subjectMatter = new JSONArray();
 						subjectMatterList.stream().forEach(contractSubjectMatter -> {
 							JSONObject subjectMatterItem = new JSONObject();
@@ -834,7 +853,7 @@
 					outAmountList.add(outConfirm.getTransationAmount());
 				}
 			}
-			if (ArrayUtil.isNotEmpty(outAmountList.toArray())) {
+			if (ArrayUtil.isNotEmpty(outAmountList)) {
 				BigDecimal currentInSum = outAmountList.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
 				//鏂板褰撳墠鍚堝悓 璧勯噾杞叆
 				PaymentConfirm inConfirm = BeanUtil.copyProperties(paymentConfirm, PaymentConfirm.class, "id", "transationAmount",
@@ -870,7 +889,7 @@
 				.lt(ContractPaymentSchedule::getEffectiveEndDate, DateUtil.today())
 				.ne(ContractPaymentSchedule::getPaymentStatus, "2")
 				.ne(ContractPaymentSchedule::getPaymentStatus, 3));
-		if (ArrayUtil.isNotEmpty(scheduleList.toArray())) {
+		if (ArrayUtil.isNotEmpty(scheduleList)) {
 			scheduleList.stream().forEach(contractPaymentSchedule -> {
 				Contract contract = baseMapper.selectById(contractPaymentSchedule.getContractId());
 				if (ObjUtil.isNotNull(contract)) {
@@ -1077,7 +1096,7 @@
 	public R genCycleReceiced() {
 		List<ContractExecDate> execDateList = contractExecDateMapper.selectList(Wrappers.<ContractExecDate>lambdaQuery()
 				.le(ContractExecDate::getExecDate, DateUtil.today()).eq(ContractExecDate::getGenFlag,"0"));
-		if (ArrayUtil.isNotEmpty(execDateList.toArray())) {
+		if (ArrayUtil.isNotEmpty(execDateList)) {
 			execDateList.stream().forEach(contractExecDate -> {
 				Contract contract = baseMapper.selectById(contractExecDate.getContractId());
 				ContractSubjectMatter subjectMatter = contractSubjectMatterMapper.selectOne(Wrappers.<ContractSubjectMatter>lambdaQuery()
@@ -1587,10 +1606,10 @@
 
 	@Override
 	public R addContractSgb(ContractAddDTO addDTO) {
-		if (ArrayUtil.isEmpty(addDTO.getContractSubjectMatter().toArray())){
+		if (ArrayUtil.isEmpty(addDTO.getContractSubjectMatter())){
 			return R.failed("璇锋坊鍔犳爣鐨勭墿");
 		}
-		if (ArrayUtil.isEmpty(addDTO.getContractPaymentSchedule().toArray())){
+		if (ArrayUtil.isEmpty(addDTO.getContractPaymentSchedule())){
 			return R.failed("璇锋坊鍔犱粯娆鹃樁娈垫垨浠樻闃舵缂哄皯");
 		}
 		if (!isValidPaymentStages(addDTO.getContractPaymentSchedule())){
@@ -1710,10 +1729,10 @@
 
 	@Override
 	public R updateContractSgb(ContractUpdateDTO updateDTO) {
-		if (ArrayUtil.isEmpty(updateDTO.getContractSubjectMatter().toArray())){
+		if (ArrayUtil.isEmpty(updateDTO.getContractSubjectMatter())){
 			return R.failed("璇锋坊鍔犳爣鐨勭墿");
 		}
-		if (ArrayUtil.isEmpty(updateDTO.getContractPaymentSchedule().toArray())){
+		if (ArrayUtil.isEmpty(updateDTO.getContractPaymentSchedule())){
 			return R.failed("璇锋坊鍔犱粯娆鹃樁娈垫垨浠樻闃舵缂哄皯");
 		}
 		if (!isValidPaymentStages(updateDTO.getContractPaymentSchedule())){
@@ -1964,20 +1983,22 @@
 	@Override
 	public Page fourAssociation(Page page,ContractQueryDTO queryDTO) {
 		Page<FourAssociationPageVo> page1 = baseMapper.fourAssociation(page,queryDTO,DataScope.of("comp_id"));
-		if (ArrayUtil.isNotEmpty(page1.getRecords().toArray())){
+		if (ArrayUtil.isNotEmpty(page1.getRecords())){
 			page1.getRecords().stream().forEach(fourAssociationPageVo -> {
 				List<PaymentSlip> slips = paymentSlipMapper.selectList(Wrappers.<PaymentSlip>lambdaQuery().eq(PaymentSlip::getContractId,fourAssociationPageVo.getId())
 						.orderByAsc(PaymentSlip::getPaymentTime));
-				if (ArrayUtil.isNotEmpty(slips.toArray())){
+				if (ArrayUtil.isNotEmpty(slips)){
 					fourAssociationPageVo.setSlipVoList(BeanUtil.copyToList(slips,ContractSlipVo.class));
 				}
 				List<ContractInvoice> invoices = contractInvoiceMapper.selectList(Wrappers.<ContractInvoice>lambdaQuery().eq(ContractInvoice::getContractId,fourAssociationPageVo.getId())
 						.orderByAsc(ContractInvoice::getInvoiceTime));
-				if (ArrayUtil.isNotEmpty(invoices.toArray())){
+				if (ArrayUtil.isNotEmpty(invoices)){
 					fourAssociationPageVo.setInvoiceVoList(BeanUtil.copyToList(invoices, ContractInvoiceVo.class));
 				}
 				if (fourAssociationPageVo.getAmount().compareTo(fourAssociationPageVo.getPaidAmount())==0&&
-						fourAssociationPageVo.getAmount().compareTo(fourAssociationPageVo.getBillingAmout())==0){
+						fourAssociationPageVo.getAmount().compareTo(fourAssociationPageVo.getBillingAmout())==0&&
+					ArrayUtil.isNotEmpty(slips)&&ArrayUtil.isNotEmpty(invoices)
+				){
 					fourAssociationPageVo.setAssociation("宸插畬鎴�");
 				}
 			});
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java
index f219846..c695e47 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java
@@ -16,6 +16,8 @@
 import java.math.BigDecimal;
 import java.util.List;
 
+;
+
 /**
  * 姘寸數鎶勮〃
  *
@@ -137,7 +139,7 @@
 		List<MeterReadRecord> recordList = baseMapper.selectList(Wrappers.<MeterReadRecord>lambdaQuery()
 				.eq(MeterReadRecord::getContractId,contract.getId())
 				.isNull(MeterReadRecord::getMeterReadNum));
-		if (ArrayUtil.isEmpty(execDateList.toArray())&&ArrayUtil.isEmpty(recordList.toArray())){
+		if (ArrayUtil.isEmpty(execDateList)&&ArrayUtil.isEmpty(recordList)){
 			List<PaymentConfirm> confirmList = paymentConfirmMapper.selectList(Wrappers.<PaymentConfirm>lambdaQuery()
 					.eq(PaymentConfirm::getContractId, contract.getId())
 					.and(wrapper -> wrapper
@@ -147,7 +149,7 @@
 							.or()
 							.eq(PaymentConfirm::getBusinessType, "涓嶅緛绋庤嚜鏉ユ按搴旀敹")
 					));
-			if (ArrayUtil.isNotEmpty(confirmList.toArray())){
+			if (ArrayUtil.isNotEmpty(confirmList)){
 				BigDecimal total = confirmList.stream().map(PaymentConfirm::getTransationAmount).filter(amount -> amount != null).reduce(BigDecimal.ZERO, BigDecimal::add);
 				contract.setAmount(total);
 				contractMapper.updateById(contract);
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
index c0a5002..2a7809e 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
@@ -1,9 +1,8 @@
 package com.by4cloud.platformx.business.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -26,6 +25,8 @@
 import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
+
+;
 
 /**
  * EPR鍑哄簱璁板綍
@@ -63,7 +64,7 @@
 
 	@Override
 	public R add(OutBoundAddDTO addDTO) {
-		if (ArrayUtil.isEmpty(addDTO.getSubjectMatterList().toArray())) {
+		if (CollUtil.isEmpty(addDTO.getSubjectMatterList())) {
 			return R.failed("鍑哄簱鏍囩殑鐗╀笉鑳戒负绌�");
 		}
 		MPJLambdaWrapper<ContractSubjectMatter> wrapper = new MPJLambdaWrapper<ContractSubjectMatter>()
@@ -79,7 +80,7 @@
 				)
 				.orderByAsc(ContractSubjectMatter::getCreateTime);
 		List<ContractSubjectMatter> subjectMatterList = contractSubjectMatterMapper.selectList(wrapper);
-		if (ArrayUtil.isEmpty(subjectMatterList.toArray())) {
+		if (CollUtil.isEmpty(subjectMatterList)) {
 			return R.failed("娌℃湁鏌ヨ鍒扮浉鍏冲悎鍚岃鍗�");
 		}
 		List<String> erpCodeList = subjectMatterList.stream().map(ContractSubjectMatter::getMaterialCode).collect(Collectors.toList());
@@ -185,7 +186,7 @@
 		});
 
 		//鍑哄簱搴旀敹娆炬槑缁�
-		if (ArrayUtil.isNotEmpty(currentOutMap.keySet())) {
+		if (CollUtil.isNotEmpty(currentOutMap.keySet())) {
 			for (Long contractId : currentOutMap.keySet()) {
 				//褰撳墠鍑哄簱鍚堝悓鍑哄簱鏍囩殑鐗�
 				List<ContractSubjectMatter> contractSubjectMatterList = contractSubjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery()
@@ -264,7 +265,7 @@
 							//瀹㈡埛浠樻瀹屾垚鍚堝悓
 							List<Contract> customerCompleteContractList = contractMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getPartyAId, contract.getPartyAId())
 									.eq(Contract::getPartyBId, SecurityUtils.getUser().getCompId()).apply(" amount = paid_amount"));
-							if (ArrayUtil.isNotEmpty(customerCompleteContractList)) {
+							if (CollUtil.isNotEmpty(customerCompleteContractList)) {
 								List<BigDecimal> outAmountList = new ArrayList<>();
 								for (Contract completeContract : customerCompleteContractList
 								) {
@@ -283,7 +284,7 @@
 										outAmountList.add(outConfirm.getTransationAmount());
 									}
 								}
-								if (ArrayUtil.isNotEmpty(outAmountList.toArray())) {
+								if (CollUtil.isNotEmpty(outAmountList)) {
 									BigDecimal currentInSum = outAmountList.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
 									//鏂板褰撳墠鍚堝悓 璧勯噾杞叆
 									PaymentConfirm inConfirm = BeanUtil.copyProperties(paymentConfirm, PaymentConfirm.class, "id", "transationAmount",
@@ -316,7 +317,7 @@
 						//鏌ヨ鏄惁鏈夊悗缁樁娈�
 //						List<ContractPaymentSchedule> afterSchedule = scheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery().eq(ContractPaymentSchedule::getContractId, contractId)
 //								.gt(ContractPaymentSchedule::getStageOrder, schedule.getStageOrder()));
-//						if (ArrayUtil.isEmpty(afterSchedule.toArray())) {
+//						if (.isEmpty(afterSchedule)) {
 //							schedule.setEffectiveEndDate(contract.getExpirationDate());
 //						}
 						scheduleMapper.updateById(schedule);
@@ -346,7 +347,7 @@
 							.eq(ContractPaymentSchedule::getContractId, schedule.getContractId())
 							.gt(ContractPaymentSchedule::getStageOrder, schedule.getStageOrder())
 							.orderByAsc(ContractPaymentSchedule::getCreateTime));
-					if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() == 1) {
+					if (CollUtil.isNotEmpty(afterSchedule) && afterSchedule.size() == 1) {
 						//鏈�鍚庨樁娈电敓鏁堟椂闂�
 						ContractPaymentSchedule endSchedule = afterSchedule.get(0);
 						if (StrUtil.equals(endSchedule.getStageName(), "璐ㄤ繚閲�")) {
@@ -383,12 +384,12 @@
 						contract.setNextScheduleName(endSchedule.getStageName());
 						contractMapper.updateById(contract);
 					}
-					if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() > 1) {
+					if (CollUtil.isNotEmpty(afterSchedule) && afterSchedule.size() > 1) {
 						//鏇存柊鍚堝悓涓嬩釜闃舵
 						contract.setNextScheduleName(afterSchedule.get(0).getStageName());
 						contractMapper.updateById(contract);
 					}
-					if (ArrayUtil.isEmpty(afterSchedule.toArray())) {
+					if (CollUtil.isEmpty(afterSchedule)) {
 //						schedule.setEffectiveEndDate(contract.getExpirationDate());
 //						scheduleMapper.updateById(schedule);
 						//鏇存柊鍚堝悓涓嬩釜闃舵
@@ -460,7 +461,7 @@
 
 	@Override
 	public R addContractOut(OutBoundAddDTO addDTO) {
-		if (ArrayUtil.isEmpty(addDTO.getSubjectMatterList().toArray())) {
+		if (CollUtil.isEmpty(addDTO.getSubjectMatterList())) {
 			return R.failed("鍑哄簱鏍囩殑鐗╀笉鑳戒负绌�");
 		}
 		// 1. 纭畾鏌ヨ鐢ㄧ殑鍚堝悓缂栧彿瀛楁鍊�
@@ -486,6 +487,10 @@
 		if (ObjUtil.isNull(contract)) {
 			return R.failed("鍚堝悓淇℃伅鏌ヨ澶辫触");
 		}
+		if (addDTO.getSubjectMatterList().stream().allMatch(item->item.getOutBoundNum().compareTo(new BigDecimal("0"))==0)){
+			return R.failed("鍑哄簱鏁伴噺涓嶈兘閮戒负涓�0");
+		}
+		addDTO.setSubjectMatterList(addDTO.getSubjectMatterList().stream().filter(item->item.getOutBoundNum().compareTo(new BigDecimal("0"))>0).collect(Collectors.toList()));
 		//鍑哄簱鏁伴噺鏍¢獙
 		for (OutSubjectMatterAddDTO outSubjectMatterAddDTO:	addDTO.getSubjectMatterList()) {
 			ContractSubjectMatter subjectMatter = contractSubjectMatterMapper.selectOne(Wrappers.<ContractSubjectMatter>lambdaQuery()
@@ -495,9 +500,6 @@
 					.last("limit 1"));
 			if (ObjUtil.isNull(subjectMatter)){
 				continue;
-			}
-			if (outSubjectMatterAddDTO.getOutBoundNum().compareTo(new BigDecimal("0"))==0){
-				return R.failed(outSubjectMatterAddDTO.getSubjectMatterCode()+"鍑哄簱鏁伴噺涓嶈兘涓�0");
 			}
 			if (subjectMatter.getDeliveryStatus()==0){
 				if (outSubjectMatterAddDTO.getOutBoundNum().compareTo(subjectMatter.getQuantity())>0){
@@ -644,7 +646,7 @@
 					//瀹㈡埛浠樻瀹屾垚鍚堝悓
 					List<Contract> customerCompleteContractList = contractMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getPartyAId, contract.getPartyAId())
 							.eq(Contract::getPartyBId, SecurityUtils.getUser().getCompId()).apply(" amount = paid_amount"));
-					if (ArrayUtil.isNotEmpty(customerCompleteContractList)) {
+					if (CollUtil.isNotEmpty(customerCompleteContractList)) {
 						List<BigDecimal> outAmountList = new ArrayList<>();
 						for (Contract completeContract : customerCompleteContractList
 						) {
@@ -663,7 +665,7 @@
 								outAmountList.add(outConfirm.getTransationAmount());
 							}
 						}
-						if (ArrayUtil.isNotEmpty(outAmountList.toArray())) {
+						if (CollUtil.isNotEmpty(outAmountList)) {
 							BigDecimal currentInSum = outAmountList.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
 							//鏂板褰撳墠鍚堝悓 璧勯噾杞叆
 							PaymentConfirm inConfirm = BeanUtil.copyProperties(paymentConfirm, PaymentConfirm.class, "id", "transationAmount",
@@ -712,12 +714,12 @@
 					.eq(ContractPaymentSchedule::getContractId, schedule.getContractId())
 					.gt(ContractPaymentSchedule::getStageOrder, schedule.getStageOrder())
 					.orderByAsc(ContractPaymentSchedule::getCreateTime));
-			if (ArrayUtil.isNotEmpty(afterSchedule.toArray())&&contract.getOutBoundAmout().compareTo(contract.getAmount())==0) {
+			if (CollUtil.isNotEmpty(afterSchedule)&&contract.getOutBoundAmout().compareTo(contract.getAmount())==0) {
 				contract.setNextScheduleName(afterSchedule.get(0).getStageName());
 				contractMapper.updateById(contract);
 			}
 
-			if (ArrayUtil.isEmpty(afterSchedule.toArray())) {
+			if (CollUtil.isEmpty(afterSchedule)) {
 				schedule.setEffectiveEndDate(contract.getExpirationDate());
 				scheduleMapper.updateById(schedule);
 				//鏇存柊鍚堝悓涓嬩釜闃舵
@@ -832,12 +834,12 @@
 	@Override
 	public R delOutBound(String batchNumber) {
 		List<OutBound> outBoundList = baseMapper.selectList(Wrappers.<OutBound>lambdaQuery().eq(OutBound::getBatchNumber,batchNumber));
-		if (ArrayUtil.isEmpty(outBoundList)){
+		if (CollUtil.isEmpty(outBoundList)){
 			return R.failed("鍑哄簱淇℃伅寮傚父锛岃鑱旂郴钀ラ攢绯荤粺绠$悊浜哄憳");
 		}
 		List<ContractOutBound> contractOutBoundList = contractOutBoundMapper.selectList(Wrappers.<ContractOutBound>lambdaQuery()
 				.in(ContractOutBound::getOutBoundId,outBoundList.stream().map(OutBound::getId).collect(Collectors.toList())));
-		if (ArrayUtil.isEmpty(contractOutBoundList)){
+		if (CollUtil.isEmpty(contractOutBoundList)){
 			return R.failed("鍑哄簱淇℃伅寮傚父锛岃鑱旂郴钀ラ攢绯荤粺绠$悊浜哄憳");
 		}
 		boolean allZero = true;
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
index fb66342..2df9d21 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
@@ -1,7 +1,7 @@
 package com.by4cloud.platformx.business.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjUtil;
@@ -31,7 +31,7 @@
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
 import java.io.UnsupportedEncodingException;
@@ -43,6 +43,8 @@
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
+
+;
 
 /**
  * 鏀舵纭
@@ -66,7 +68,7 @@
 	private final MeterReadRecordMapper meterReadRecordMapper;
 	private final BankStatementMapper bankStatementMapper;
 	private final RemoteDeptService remoteDeptService;
-	private final RedisTemplate redisTemplate;
+	private final StringRedisTemplate redisTemplate;
 
 	@Value("${bip.url}")
 	private String url;
@@ -112,6 +114,7 @@
 				slip.setPaymentTime(addDTO.getConfirmTime());
 				slip.setPaymentAmount(addDTO.getTransationAmount());
 				slip.setPayType(addDTO.getPayType());
+				slip.setContractId(contract.getId());
 				paymentSlipMapper.insert(slip);
 
 				BigDecimal newtotal = addDTO.getTransationAmount().add(lastTotal);
@@ -149,7 +152,7 @@
 					List<ContractPaymentSchedule> scheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
 							.eq(ContractPaymentSchedule::getContractId, contract.getId()).ne(ContractPaymentSchedule::getPaymentStatus, 2).ne(ContractPaymentSchedule::getPaymentStatus, 3)
 							.orderByAsc(ContractPaymentSchedule::getCreateTime));
-					if (ArrayUtil.isNotEmpty(scheduleList.toArray())) {
+					if (CollUtil.isNotEmpty(scheduleList)) {
 						BigDecimal remain = addDTO.getTransationAmount();
 						for (ContractPaymentSchedule schedule : scheduleList) {
 							BigDecimal lastRemain = remain;
@@ -217,7 +220,7 @@
 				List<MeterReadRecord> recordList = meterReadRecordMapper.selectList(Wrappers.<MeterReadRecord>lambdaQuery()
 						.eq(MeterReadRecord::getContractId,contract.getId())
 						.isNull(MeterReadRecord::getMeterReadNum));
-				if (ArrayUtil.isEmpty(execDateList.toArray())&&ArrayUtil.isEmpty(recordList.toArray())){
+				if (CollUtil.isEmpty(execDateList)&&CollUtil.isEmpty(recordList)){
 					//鏇存柊鍚堝悓宸蹭粯娆�
 					BigDecimal paid = new BigDecimal("0");
 					if (ObjUtil.isNotNull(contract.getPaidAmount())) {
@@ -262,7 +265,7 @@
 //			List<Contract> customerContractList = contractService.list(Wrappers.<Contract>lambdaQuery().eq(Contract::getPartyAId, addDTO.getBusGuestId())
 //					.eq(Contract::getPartyBId, SecurityUtils.getUser().getCompId()).orderByAsc(Contract::getCreateTime)
 //					.apply(" ((contract_category != 'water_house' and amount != paid_amount) or contract_category = 'water_house')"));
-//			if (ArrayUtil.isEmpty(customerContractList.toArray())) {
+//			if (ArrayUtil.isEmpty(customerContractList)) {
 //				return R.failed("涓烘煡璇㈠埌鏈粯娆惧悎鍚�");
 //			}
 //			BusinessCustomer customer = businessCustomerService.getOne(Wrappers.<BusinessCustomer>lambdaQuery()
@@ -365,7 +368,7 @@
 //						.eq(ContractPaymentSchedule::getContractId, contract.getId()).ne(ContractPaymentSchedule::getPaymentStatus, 2)
 //						.ne(ContractPaymentSchedule::getPaymentStatus, 3)
 //						.orderByAsc(ContractPaymentSchedule::getCreateTime));
-//				if (ArrayUtil.isNotEmpty(scheduleList.toArray())) {
+//				if (ArrayUtil.isNotEmpty(scheduleList)) {
 //					BigDecimal remain = transtionAmount;
 //					for (ContractPaymentSchedule schedule : scheduleList) {
 //						BigDecimal lastRemain = remain;
@@ -419,7 +422,7 @@
 //				List<ContractPaymentSchedule> payComScheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
 //						.eq(ContractPaymentSchedule::getContractId, contract.getId()).ne(ContractPaymentSchedule::getPaymentStatus, 0)
 //						.ne(ContractPaymentSchedule::getPaymentStatus, 3));
-//				if (ArrayUtil.isNotEmpty(payComScheduleList.toArray())) {
+//				if (ArrayUtil.isNotEmpty(payComScheduleList)) {
 //					BigDecimal payTotal = payComScheduleList.stream().map(item -> StrUtil.equals(item.getPaymentStatus() + "", "2") ? item.getPlannedAmount() :
 //							item.getActualAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
 //					contract.setPaidAmount(payTotal);
@@ -438,10 +441,10 @@
 //					if (StrUtil.isNotEmpty(contract.getContractCategory()) && StrUtil.equals(contract.getContractCategory(), "water_house")) {
 //						List<ContractExecDate> execDateList = contractExecDateMapper.selectList(Wrappers.<ContractExecDate>lambdaQuery()
 //								.eq(ContractExecDate::getContractId, contract.getId()).eq(ContractExecDate::getGenFlag, "0"));
-//						if (ArrayUtil.isEmpty(execDateList.toArray())) {
+//						if (ArrayUtil.isEmpty(execDateList)) {
 //							List<ContractPaymentSchedule> contractPaymentScheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
 //									.eq(ContractPaymentSchedule::getContractId, contract.getId()));
-//							if (ArrayUtil.isNotEmpty(contractPaymentScheduleList.toArray()) && contractPaymentScheduleList.stream().allMatch(item -> Objects.equals(item.getPaymentStatus(), 2))) {
+//							if (ArrayUtil.isNotEmpty(contractPaymentScheduleList) && contractPaymentScheduleList.stream().allMatch(item -> Objects.equals(item.getPaymentStatus(), 2))) {
 //								contract.setContractStatus(3);
 //								contractService.updateById(contract);
 //							}
@@ -455,20 +458,20 @@
 
 			//瀹㈡埛棰勪粯鏈夊墿浣� 涓� 鏈夐浠樻鐨勫悎鍚�
 //			if (transtionRemainAmount.compareTo(new BigDecimal("0")) > 0) {
-//				if (ArrayUtil.isNotEmpty(payNoCompleteContractList.toArray())){
+//				if (ArrayUtil.isNotEmpty(payNoCompleteContractList)){
 //					//浣欓 鏀惧埌浠樻鏈畬鎴愬悎鍚� 棰勬敹
 //					Contract lastContract = payNoCompleteContractList.get(0);
 //					//淇濆瓨鏄庣粏
 //					saveNewPaymentConfirm(customer,null,lastContract,transtionRemainAmount,payDate);
 //				}
-//				if (ArrayUtil.isEmpty(payNoCompleteContractList.toArray())&&ArrayUtil.isNotEmpty(advanceContractList.toArray())){
+//				if (ArrayUtil.isEmpty(payNoCompleteContractList)&&ArrayUtil.isNotEmpty(advanceContractList)){
 //					//瀹㈡埛棰勪粯鏈夊墿浣� 娌℃湁棰勪粯娆剧殑鍚堝悓
 //					Contract lastContract = advanceContractList.get(0);
 //					//淇濆瓨鏄庣粏
 //					saveNewPaymentConfirm(customer,null,lastContract,transtionRemainAmount,payDate);
 //				}
-//				if (ArrayUtil.isEmpty(payNoCompleteContractList.toArray())&&ArrayUtil.isEmpty(advanceContractList.toArray())
-//						&&ArrayUtil.isNotEmpty(payCompleteContractList.toArray())) {
+//				if (ArrayUtil.isEmpty(payNoCompleteContractList)&&ArrayUtil.isEmpty(advanceContractList)
+//						&&ArrayUtil.isNotEmpty(payCompleteContractList)) {
 //					//瀹㈡埛棰勪粯鏈夊墿浣� 娌℃湁棰勪粯娆剧殑鍚堝悓
 //					Contract lastContract = payCompleteContractList.get(payCompleteContractList.size() - 1);
 //					//淇濆瓨鏄庣粏
@@ -486,7 +489,7 @@
 		if (redisTemplate.hasKey("BIP_TOKEN")) {
 			accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
 		} else {
-			getAccessToken(accessToken);
+			accessToken = getAccessToken(accessToken);
 		}
 		if (StrUtil.isEmpty(accessToken)) {
 			return R.failed("鑾峰彇token澶辫触");
@@ -495,6 +498,16 @@
 		for (String bipCode : bipCodeArr) {
 			//鍏ュ弬
 			JSONObject params = new JSONObject();
+			if (ObjUtil.isNotEmpty(dto.getPageSize())){
+				params.put("pageSize",dto.getPageSize());
+			}else {
+				params.put("pageSize",999);
+			}
+			if (ObjUtil.isNotEmpty(dto.getPageNum())){
+				params.put("pageNum",dto.getPageNum());
+			}else {
+				params.put("pageNum",1);
+			}
 			if (StrUtil.isNotBlank(dto.getStartDate())){
 				params.put("begindate",dto.getStartDate());
 			}else {
@@ -580,13 +593,13 @@
 			return;
 		}
 		SysDept dept = r.getData();
-		JSONObject dataJson = JSONObject.parseObject(resultJson.getString("data"));
+		JSONObject dataJson = resultJson.getJSONObject("data");
 		if (ObjUtil.isNull(dataJson)) {
 			log.error("杩斿洖缁撴灉涓璬ata瑙f瀽澶辫触");
 			return;
 		}
-		JSONArray recordList = JSONArray.parseArray(resultJson.getString("recordList"));
-		if (ArrayUtil.isEmpty(recordList.toArray())) {
+		JSONArray recordList = dataJson.getJSONArray("recordList");
+		if (CollUtil.isEmpty(recordList)) {
 			log.error("杩斿洖缁撴灉涓璻ecordList涓虹┖");
 			return;
 		}
@@ -600,24 +613,13 @@
 
 	private void savePaymentConfirm(JSONObject record, SysDept dept) {
 
-		if (record.containsKey("to_acct_name")){
-			log.error("浠樻鍗昳d锛歿},浠樻鍏徃涓虹┖", record.getString("id"));
-			return;
-		}
+
 		BusinessCustomer customer = businessCustomerService.getOne(Wrappers.<BusinessCustomer>lambdaQuery()
 				.eq(BusinessCustomer::getCompanyName, record.getString("to_acct_name"))
 				.eq(BusinessCustomer::getCompId,dept.getDeptId())
 		);
-		if (ObjUtil.isNull(customer)) {
-			log.error("浠樻鍗昳d锛歿},瀹㈠晢鏌ヨ澶辫触锛岃妫�鏌ュ鍟�", record.getString("id"));
-			return;
-		}
-		if (ObjUtil.isNull(record.getBigDecimal("tran_amt"))) {
-			log.error("浠樻鍗昳d锛歿},浜ゆ槗閲戦寮傚父", record.getString("id"));
-			return;
-		}
-		//淇濆瓨浠樻鍗�
-		Boolean codeFlag = saveBankStatement(customer, record);
+				//淇濆瓨浠樻鍗�
+		Boolean codeFlag = saveBankStatement(customer, record,dept);
 		if (codeFlag) {
 			log.error("浠樻鍗昳d锛歿},浠樻鍗曞凡瀛樺湪");
 			return;
@@ -625,7 +627,7 @@
 
 	}
 
-	private Boolean saveBankStatement(BusinessCustomer customer, JSONObject record) {
+	private Boolean saveBankStatement(BusinessCustomer customer, JSONObject record,SysDept dept) {
 		BankStatement bankStatement = new BankStatement();
 		bankStatement.setBankSeqNo(record.getString("bank_seq_no"));
 		bankStatement.setReceiveBankAcc(record.getString("bank_seq_no"));
@@ -637,12 +639,15 @@
 		bankStatement.setTranAmount(record.getBigDecimal("tran_amt"));
 		bankStatement.setDataId(record.getLong("id"));
 		bankStatement.setDataJson(record.toJSONString());
-		bankStatement.setBusGuestId(customer.getId());
+		if (ObjUtil.isNotNull(customer)) {
+			bankStatement.setBusGuestId(customer.getId());
+		}
 		BankStatement statement = bankStatementMapper.selectOne(Wrappers.<BankStatement>lambdaQuery().eq(BankStatement::getDataId,record.getLong("id")));
 		if (ObjUtil.isNotNull(statement)){
 			return false;
 		}
-		statement.setCompId(customer.getCompId());
+		bankStatement.setRemark(record.getString("remark"));
+		bankStatement.setCompId(dept.getDeptId());
 		bankStatementMapper.insert(bankStatement);
 		return true;
 	}
@@ -657,7 +662,7 @@
 	@Override
 	public R queryAging() {
 		List<AgingCompanyVo> companys = contractPaymentScheduleMapper.selectAgingCompany(null, DataScope.of("comp_id"));
-		if (ArrayUtil.isEmpty(companys.toArray())) {
+		if (CollUtil.isEmpty(companys)) {
 			return R.failed("鏆傛棤璐﹂緞");
 		}
 		List<AgingAnalysisVo> result = new ArrayList<>();
@@ -670,7 +675,7 @@
 			queryDTO.setCompanyId(company.getCompanyId());
 			List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotal(queryDTO);
 			//琛ュ叏鏁版嵁
-			if (ArrayUtil.isEmpty(companyAgingVo.toArray())) {
+			if (CollUtil.isEmpty(companyAgingVo)) {
 				companyAgingVo = new ArrayList<>();
 				AgingVo agingVo1 = new AgingVo(1L,"0-30澶�", new BigDecimal("0"), null);
 				AgingVo agingVo2 = new AgingVo(2L,"31-60澶�", new BigDecimal("0"), null);
@@ -686,27 +691,27 @@
 				companyAgingVo.add(agingVo6);
 			} else {
 				List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
-				if (!ArrayUtil.contains(overdueRanges.toArray(), "0-30澶�")) {
+				if (!CollUtil.contains(overdueRanges, "0-30澶�")) {
 					AgingVo agingVo1 = new AgingVo(1L,"0-30澶�", new BigDecimal("0"), null);
 					companyAgingVo.add(agingVo1);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(), "31-60澶�")) {
+				if (!CollUtil.contains(overdueRanges, "31-60澶�")) {
 					AgingVo agingVo2 = new AgingVo(2L,"31-60澶�", new BigDecimal("0"), null);
 					companyAgingVo.add(agingVo2);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(), "61-90澶�")) {
+				if (!CollUtil.contains(overdueRanges, "61-90澶�")) {
 					AgingVo agingVo3 = new AgingVo(3L,"61-90澶�", new BigDecimal("0"), null);
 					companyAgingVo.add(agingVo3);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(), "91-180澶�")) {
+				if (!CollUtil.contains(overdueRanges, "91-180澶�")) {
 					AgingVo agingVo4 = new AgingVo(4L,"91-180澶�", new BigDecimal("0"), null);
 					companyAgingVo.add(agingVo4);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(), "181-365澶�")) {
+				if (!CollUtil.contains(overdueRanges, "181-365澶�")) {
 					AgingVo agingVo5 = new AgingVo(5L,"181-365澶�", new BigDecimal("0"), null);
 					companyAgingVo.add(agingVo5);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(), "1骞翠互涓�")) {
+				if (!CollUtil.contains(overdueRanges, "1骞翠互涓�")) {
 					AgingVo agingVo6 = new AgingVo(6L,"1骞翠互涓�", new BigDecimal("0"), null);
 					companyAgingVo.add(agingVo6);
 				}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentOffsetServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentOffsetServiceImpl.java
index 5fe305a..aed8023 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentOffsetServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentOffsetServiceImpl.java
@@ -1,7 +1,7 @@
 package com.by4cloud.platformx.business.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -11,13 +11,13 @@
 import com.by4cloud.platformx.business.service.ContractService;
 import com.by4cloud.platformx.business.service.PaymentOffsetService;
 import com.by4cloud.platformx.common.core.util.R;
-import com.by4cloud.platformx.common.security.util.SecurityUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.util.List;
-import java.util.Objects;
+
+;
 
 /**
  * 鎶垫姽璐�
@@ -80,7 +80,7 @@
 		List<ContractPaymentSchedule> scheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
 				.eq(ContractPaymentSchedule::getContractId,contract.getId()).ne(ContractPaymentSchedule::getPaymentStatus,2)
 				.ne(ContractPaymentSchedule::getPaymentStatus,3).orderByAsc(ContractPaymentSchedule::getCreateTime));
-		if (ArrayUtil.isNotEmpty(scheduleList.toArray())){
+		if (CollUtil.isNotEmpty(scheduleList)){
 			BigDecimal remain = paymentOffset.getOffsetAmount();
 			for (ContractPaymentSchedule schedule:scheduleList) {
 				BigDecimal lastRemain = remain;
@@ -143,7 +143,7 @@
 		}
 		contractService.updateById(contract);
 		// 鏌ヨ鎵�鏈変粯娆鹃樁娈垫槸鍚﹂兘浠樻瀹屾垚
-//		if (ArrayUtil.isNotEmpty(scheduleList.toArray())){
+//		if (.isNotEmpty(scheduleList)){
 //			if (scheduleList.stream().allMatch(item -> Objects.equals(item.getPaymentStatus(), 2))){
 //				contract.setContractStatus(3);
 //				contractService.updateById(contract);
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java
index 7e8d4a8..5259cca 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java
@@ -4,12 +4,10 @@
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.TreeNode;
 import cn.hutool.core.lang.tree.TreeUtil;
-import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.by4cloud.platformx.admin.api.entity.SysDept;
 import com.by4cloud.platformx.business.dto.ProductAddDTO;
 import com.by4cloud.platformx.business.dto.ProductQueryDTO;
 import com.by4cloud.platformx.business.entity.Product;
@@ -27,11 +25,12 @@
 import org.springframework.stereotype.Service;
 import org.springframework.validation.BindingResult;
 
-
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
+
+;
 
 /**
  * 浜у搧淇℃伅
@@ -121,14 +120,14 @@
 
 	@Override
 	public R saveErpProduct(List<ProductAddDTO> addDTOS) {
-		if (ArrayUtil.isNotEmpty(addDTOS.toArray())){
+		if (CollUtil.isNotEmpty(addDTOS)){
 			for (ProductAddDTO addDTO:addDTOS
 				 ) {
 				List<Product> classPro = baseMapper.selectListByScope(Wrappers.<Product>lambdaQuery()
 								.eq(StrUtil.isNotEmpty(addDTO.getErpTypeCode()),Product::getErpCode,addDTO.getErpTypeCode())
 								.eq(StrUtil.isNotEmpty(addDTO.getErpTypeName()),Product::getProductName,addDTO.getErpTypeName())
 						, DataScope.of("comp_id"));
-				if (ArrayUtil.isEmpty(classPro.toArray())){
+				if (CollUtil.isEmpty(classPro)){
 					Product product = new Product();
 					product.setProductName(addDTO.getErpTypeName());
 					product.setProductType(addDTO.getSpecification());
@@ -163,7 +162,7 @@
 	@Override
 	public R importProduct(List<ProductExcelVO> excelVOList, BindingResult bindingResult) {
 		List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
-		if (ArrayUtil.isNotEmpty(excelVOList.toArray())) {
+		if (CollUtil.isNotEmpty(excelVOList)) {
 			List<List<ProductExcelVO>> groups = splitList(excelVOList, 5000);
 			groups.stream().forEach(group->{
 				for (ProductExcelVO addDTO:group
@@ -174,7 +173,7 @@
 						errorMsg.add("浜у搧鍒嗙被淇℃伅娌℃湁");
 					}
 					List<Product> one = this.listByScope(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode, addDTO.getErpCode()));
-					if (ArrayUtil.isNotEmpty(one.toArray())){
+					if (CollUtil.isNotEmpty(one)){
 						errorMsg.add("浜у搧erp缂栫爜宸插瓨鍦�");
 					}
 					if (CollUtil.isEmpty(errorMsg)){
@@ -182,7 +181,7 @@
 										.eq(StrUtil.isNotEmpty(addDTO.getErpTypeCode()),Product::getErpCode,addDTO.getErpTypeCode())
 										.eq(StrUtil.isNotEmpty(addDTO.getErpTypeName()),Product::getProductName,addDTO.getErpTypeName())
 								, DataScope.of("comp_id"));
-						if (ArrayUtil.isEmpty(classPro.toArray())){
+						if (CollUtil.isEmpty(classPro)){
 							Product product = new Product();
 							product.setProductName(addDTO.getErpTypeName());
 							product.setProductType(addDTO.getSpecification());
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/StatisticServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/StatisticServiceImpl.java
index 98f4ba0..ade6a99 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/StatisticServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/StatisticServiceImpl.java
@@ -1,6 +1,6 @@
 package com.by4cloud.platformx.business.service.impl;
 
-import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -92,7 +92,7 @@
 		compIds.add(Long.valueOf(ymj));
 		compIds.add(Long.valueOf(jxc));
 		List<ContractIncomeAnalysisVo> contractIncomeAnalysisVoList = contractMapper.contractIncomeAnalysis(commonDTO,compIds);
-		if (ArrayUtil.isNotEmpty(contractIncomeAnalysisVoList.toArray())){
+		if (CollUtil.isNotEmpty(contractIncomeAnalysisVoList)){
 			contractIncomeAnalysisVoList.stream().forEach(contractIncomeAnalysisVo -> {
 				if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),sgb)){
 					contractIncomeAnalysisVo.setCompName("鐭冲伐娉�");
@@ -124,7 +124,7 @@
 	public R contractAmountAnalysisByArea(AnalysisCommonDTO commonDTO) {
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("company_area");
 		List<SysDictItem> items = r.getData();
-		if (ArrayUtil.isEmpty(items.toArray())){
+		if (CollUtil.isEmpty(items)){
 			return R.failed("鍦板尯瀛楀吀鍒嗙被鑾峰彇寮傚父");
 		}
 		List<Long> compIds = new ArrayList<>();
@@ -164,7 +164,7 @@
 	public R contractAmountAnalysisByIndustry(AnalysisCommonDTO commonDTO) {
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("industry_sector");
 		List<SysDictItem> items = r.getData();
-		if (ArrayUtil.isEmpty(items.toArray())){
+		if (CollUtil.isEmpty(items)){
 			return R.failed("琛屼笟瀛楀吀鍒嗙被鑾峰彇寮傚父");
 		}
 		List<Long> compIds = new ArrayList<>();
@@ -204,7 +204,7 @@
 	public R contractAmountAnalysisByMarket(AnalysisCommonDTO commonDTO) {
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("market_type");
 		List<SysDictItem> items = r.getData();
-		if (ArrayUtil.isEmpty(items.toArray())){
+		if (CollUtil.isEmpty(items)){
 			return R.failed("甯傚満绫诲瀷瀛楀吀鍒嗙被鑾峰彇寮傚父");
 		}
 		List<Long> compIds = new ArrayList<>();
@@ -244,7 +244,7 @@
 	public R contractAmountAnalysisBySpcBus(AnalysisCommonDTO commonDTO) {
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("supply_attribute");
 		List<SysDictItem> items = r.getData();
-		if (ArrayUtil.isEmpty(items.toArray())){
+		if (CollUtil.isEmpty(items)){
 			return R.failed("渚涘簲灞炴�у瓧鍏稿垎绫昏幏鍙栧紓甯�");
 		}
 		List<Long> compIds = new ArrayList<>();
@@ -284,7 +284,7 @@
 	public R contractAmountAnalysisByExportBus(AnalysisCommonDTO commonDTO) {
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("export_attr");
 		List<SysDictItem> items = r.getData();
-		if (ArrayUtil.isEmpty(items.toArray())){
+		if (CollUtil.isEmpty(items)){
 			return R.failed("鍖哄煙瀛楁鑾峰彇寮傚父");
 		}
 		List<Long> compIds = new ArrayList<>();
@@ -325,7 +325,7 @@
 	public R contractAmountAnalysisBySaleModel(AnalysisCommonDTO commonDTO) {
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("sales_model");
 		List<SysDictItem> items = r.getData();
-		if (ArrayUtil.isEmpty(items.toArray())){
+		if (CollUtil.isEmpty(items)){
 			return R.failed("閿�鍞ā寮忓瓧鍏稿垎绫昏幏鍙栧紓甯�");
 		}
 		List<Long> compIds = new ArrayList<>();
@@ -366,11 +366,11 @@
 	public R agingAnalysisByArea(AnalysisCommonDTO commonDTO) {
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("company_area");
 		List<SysDictItem> items = r.getData();
-		if (ArrayUtil.isEmpty(items.toArray())){
+		if (CollUtil.isEmpty(items)){
 			return R.failed("鍦板尯瀛楀吀鍒嗙被鑾峰彇寮傚父");
 		}
 //		List<AgingCompanyVo> companys = contractPaymentScheduleMapper.selectAgingCompany(DataScope.of("comp_id"));
-//		if (ArrayUtil.isEmpty(companys.toArray())){
+//		if (CollUtil.isEmpty(companys)){
 //			return R.failed("鏆傛棤璐﹂緞");
 //		}
 		List<Long> compIds = new ArrayList<>();
@@ -382,7 +382,7 @@
 
 		List<AgingAnalysisVo> result = new ArrayList<>();
 		AgingQueryDTO queryDTO = new AgingQueryDTO();
-		if (ArrayUtil.contains(compIds.toArray(),SecurityUtils.getUser().getCompId())){
+		if (CollUtil.contains(compIds,SecurityUtils.getUser().getCompId())){
 			queryDTO.setCompanyId(SecurityUtils.getUser().getCompId());
 		}
 		List<AgingVo> agingVoList = contractPaymentScheduleMapper.selectAgingTotal(queryDTO);
@@ -392,7 +392,7 @@
 			queryDTO.setAreaId(item.getItemValue());
 			List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotal(queryDTO);
 			//琛ュ叏鏁版嵁
-			if (ArrayUtil.isEmpty(companyAgingVo.toArray())){
+			if (CollUtil.isEmpty(companyAgingVo)){
 				companyAgingVo = new ArrayList<>();
 				AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 				AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
@@ -408,27 +408,27 @@
 				companyAgingVo.add(agingVo6);
 			}else {
 				List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30澶�")){
+				if (!CollUtil.contains(overdueRanges,"0-30澶�")){
 					AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo1);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60澶�")){
+				if (!CollUtil.contains(overdueRanges,"31-60澶�")){
 					AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo2);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90澶�")){
+				if (!CollUtil.contains(overdueRanges,"61-90澶�")){
 					AgingVo agingVo3 = new AgingVo(3L,"61-90澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo3);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180澶�")){
+				if (!CollUtil.contains(overdueRanges,"91-180澶�")){
 					AgingVo agingVo4 = new AgingVo(4L,"91-180澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo4);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365澶�")){
+				if (!CollUtil.contains(overdueRanges,"181-365澶�")){
 					AgingVo agingVo5 = new AgingVo(5L,"181-365澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo5);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"1骞翠互涓�")){
+				if (!CollUtil.contains(overdueRanges,"1骞翠互涓�")){
 					AgingVo agingVo6 = new AgingVo(6L,"1骞翠互涓�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo6);
 				}
@@ -473,7 +473,7 @@
 	public R agingAnalysisByIndustry(AnalysisCommonDTO commonDTO) {
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("industry_sector");
 		List<SysDictItem> items = r.getData();
-		if (ArrayUtil.isEmpty(items.toArray())){
+		if (CollUtil.isEmpty(items)){
 			return R.failed("琛屼笟瀛楀吀鍒嗙被鑾峰彇寮傚父");
 		}
 		List<Long> compIds = new ArrayList<>();
@@ -485,7 +485,7 @@
 
 		List<AgingAnalysisVo> result = new ArrayList<>();
 		AgingQueryDTO queryDTO = new AgingQueryDTO();
-		if (ArrayUtil.contains(compIds.toArray(),SecurityUtils.getUser().getCompId())){
+		if (CollUtil.contains(compIds,SecurityUtils.getUser().getCompId())){
 			queryDTO.setCompanyId(SecurityUtils.getUser().getCompId());
 		}
 		List<AgingVo> agingVoList = contractPaymentScheduleMapper.selectAgingTotal(queryDTO);
@@ -495,7 +495,7 @@
 			queryDTO.setIndustryId(item.getItemValue());
 			List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotal(queryDTO);
 			//琛ュ叏鏁版嵁
-			if (ArrayUtil.isEmpty(companyAgingVo.toArray())){
+			if (CollUtil.isEmpty(companyAgingVo)){
 				companyAgingVo = new ArrayList<>();
 				AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 				AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
@@ -511,27 +511,27 @@
 				companyAgingVo.add(agingVo6);
 			}else {
 				List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30澶�")){
+				if (!CollUtil.contains(overdueRanges,"0-30澶�")){
 					AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo1);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60澶�")){
+				if (!CollUtil.contains(overdueRanges,"31-60澶�")){
 					AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo2);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90澶�")){
+				if (!CollUtil.contains(overdueRanges,"61-90澶�")){
 					AgingVo agingVo3 = new AgingVo(3L,"61-90澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo3);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180澶�")){
+				if (!CollUtil.contains(overdueRanges,"91-180澶�")){
 					AgingVo agingVo4 = new AgingVo(4L,"91-180澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo4);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365澶�")){
+				if (!CollUtil.contains(overdueRanges,"181-365澶�")){
 					AgingVo agingVo5 = new AgingVo(5L,"181-365澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo5);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"1骞翠互涓�")){
+				if (!CollUtil.contains(overdueRanges,"1骞翠互涓�")){
 					AgingVo agingVo6 = new AgingVo(6L,"1骞翠互涓�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo6);
 				}
@@ -595,7 +595,7 @@
 				queryDTO.setCompanyId(dept.getDeptId());
 				List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotalShip(queryDTO);
 				//琛ュ叏鏁版嵁
-				if (ArrayUtil.isEmpty(companyAgingVo.toArray())){
+				if (CollUtil.isEmpty(companyAgingVo)){
 					companyAgingVo = new ArrayList<>();
 					AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 					AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
@@ -611,27 +611,27 @@
 					companyAgingVo.add(agingVo6);
 				}else {
 					List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30澶�")){
+					if (!CollUtil.contains(overdueRanges,"0-30澶�")){
 						AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo1);
 					}
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60澶�")){
+					if (!CollUtil.contains(overdueRanges,"31-60澶�")){
 						AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo2);
 					}
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90澶�")){
+					if (!CollUtil.contains(overdueRanges,"61-90澶�")){
 						AgingVo agingVo3 = new AgingVo(3L,"61-90澶�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo3);
 					}
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180澶�")){
+					if (!CollUtil.contains(overdueRanges,"91-180澶�")){
 						AgingVo agingVo4 = new AgingVo(4L,"91-180澶�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo4);
 					}
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365澶�")){
+					if (!CollUtil.contains(overdueRanges,"181-365澶�")){
 						AgingVo agingVo5 = new AgingVo(5L,"181-365澶�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo5);
 					}
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"1骞翠互涓�")){
+					if (!CollUtil.contains(overdueRanges,"1骞翠互涓�")){
 						AgingVo agingVo6 = new AgingVo(6L,"1骞翠互涓�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo6);
 					}
@@ -692,7 +692,7 @@
 				queryDTO.setCompanyId(dept.getDeptId());
 				List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotalInvoice(queryDTO);
 				//琛ュ叏鏁版嵁
-				if (ArrayUtil.isEmpty(companyAgingVo.toArray())){
+				if (CollUtil.isEmpty(companyAgingVo)){
 					companyAgingVo = new ArrayList<>();
 					AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 					AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
@@ -708,27 +708,27 @@
 					companyAgingVo.add(agingVo6);
 				}else {
 					List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30澶�")){
+					if (!CollUtil.contains(overdueRanges,"0-30澶�")){
 						AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo1);
 					}
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60澶�")){
+					if (!CollUtil.contains(overdueRanges,"31-60澶�")){
 						AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo2);
 					}
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90澶�")){
+					if (!CollUtil.contains(overdueRanges,"61-90澶�")){
 						AgingVo agingVo3 = new AgingVo(3L,"61-90澶�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo3);
 					}
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180澶�")){
+					if (!CollUtil.contains(overdueRanges,"91-180澶�")){
 						AgingVo agingVo4 = new AgingVo(4L,"91-180澶�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo4);
 					}
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365澶�")){
+					if (!CollUtil.contains(overdueRanges,"181-365澶�")){
 						AgingVo agingVo5 = new AgingVo(5L,"181-365澶�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo5);
 					}
-					if (!ArrayUtil.contains(overdueRanges.toArray(),"1骞翠互涓�")){
+					if (!CollUtil.contains(overdueRanges,"1骞翠互涓�")){
 						AgingVo agingVo6 = new AgingVo(6L,"1骞翠互涓�",new BigDecimal("0"),null);
 						companyAgingVo.add(agingVo6);
 					}
@@ -775,7 +775,7 @@
 	public R agingAnalysisByMarket(AnalysisCommonDTO commonDTO) {
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("market_type");
 		List<SysDictItem> items = r.getData();
-		if (ArrayUtil.isEmpty(items.toArray())){
+		if (CollUtil.isEmpty(items)){
 			return R.failed("甯傚満绫诲瀷瀛楀吀鍒嗙被鑾峰彇寮傚父");
 		}
 		List<AgingAnalysisVo> result = new ArrayList<>();
@@ -787,7 +787,7 @@
 			queryDTO.setClassId(item.getItemValue());
 			List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotal(queryDTO);
 			//琛ュ叏鏁版嵁
-			if (ArrayUtil.isEmpty(companyAgingVo.toArray())){
+			if (CollUtil.isEmpty(companyAgingVo)){
 				companyAgingVo = new ArrayList<>();
 				AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 				AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
@@ -803,27 +803,27 @@
 				companyAgingVo.add(agingVo6);
 			}else {
 				List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30澶�")){
+				if (!CollUtil.contains(overdueRanges,"0-30澶�")){
 					AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo1);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60澶�")){
+				if (!CollUtil.contains(overdueRanges,"31-60澶�")){
 					AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo2);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90澶�")){
+				if (!CollUtil.contains(overdueRanges,"61-90澶�")){
 					AgingVo agingVo3 = new AgingVo(3L,"61-90澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo3);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180澶�")){
+				if (!CollUtil.contains(overdueRanges,"91-180澶�")){
 					AgingVo agingVo4 = new AgingVo(4L,"91-180澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo4);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365澶�")){
+				if (!CollUtil.contains(overdueRanges,"181-365澶�")){
 					AgingVo agingVo5 = new AgingVo(5L,"181-365澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo5);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"1骞翠互涓�")){
+				if (!CollUtil.contains(overdueRanges,"1骞翠互涓�")){
 					AgingVo agingVo6 = new AgingVo(6L,"1骞翠互涓�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo6);
 				}
@@ -886,7 +886,7 @@
 			queryDTO.setCompanyId(dept.getDeptId());
 			List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotalScale(queryDTO);
 			//琛ュ叏鏁版嵁
-			if (ArrayUtil.isEmpty(companyAgingVo.toArray())){
+			if (CollUtil.isEmpty(companyAgingVo)){
 				companyAgingVo = new ArrayList<>();
 				AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 				AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
@@ -902,27 +902,27 @@
 				companyAgingVo.add(agingVo6);
 			}else {
 				List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30澶�")){
+				if (!CollUtil.contains(overdueRanges,"0-30澶�")){
 					AgingVo agingVo1 = new AgingVo(1L,"0-30澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo1);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60澶�")){
+				if (!CollUtil.contains(overdueRanges,"31-60澶�")){
 					AgingVo agingVo2 = new AgingVo(2L,"31-60澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo2);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90澶�")){
+				if (!CollUtil.contains(overdueRanges,"61-90澶�")){
 					AgingVo agingVo3 = new AgingVo(3L,"61-90澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo3);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180澶�")){
+				if (!CollUtil.contains(overdueRanges,"91-180澶�")){
 					AgingVo agingVo4 = new AgingVo(4L,"91-180澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo4);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365澶�")){
+				if (!CollUtil.contains(overdueRanges,"181-365澶�")){
 					AgingVo agingVo5 = new AgingVo(5L,"181-365澶�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo5);
 				}
-				if (!ArrayUtil.contains(overdueRanges.toArray(),"1骞翠互涓�")){
+				if (!CollUtil.contains(overdueRanges,"1骞翠互涓�")){
 					AgingVo agingVo6 = new AgingVo(6L,"1骞翠互涓�",new BigDecimal("0"),null);
 					companyAgingVo.add(agingVo6);
 				}
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/BankStatementItemMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/BankStatementItemMapper.xml
new file mode 100644
index 0000000..d903ce5
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/resources/mapper/BankStatementItemMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.by4cloud.platformx.business.mapper.BankStatementItemMapper">
+
+  <resultMap id="bankStatementItemMap" type="com.by4cloud.platformx.business.entity.BankStatementItem">
+        <id property="id" column="id"/>
+        <result property="compId" column="comp_id"/>
+        <result property="bankSeqNo" column="bank_seq_no"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+  </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/ContractInvoiceMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/ContractInvoiceMapper.xml
index 767a077..20efb7b 100644
--- a/platformx-business-finance-biz/src/main/resources/mapper/ContractInvoiceMapper.xml
+++ b/platformx-business-finance-biz/src/main/resources/mapper/ContractInvoiceMapper.xml
@@ -3,535 +3,425 @@
 
 <mapper namespace="com.by4cloud.platformx.business.mapper.ContractInvoiceMapper">
 
-  <resultMap id="ContractInvoiceMap" type="com.by4cloud.platformx.business.entity.ContractInvoice">
-        <id property="id" column="id"/>
-        <result property="compId" column="comp_id"/>
-        <result property="contractId" column="contract_id"/>
-        <result property="invoicePrice" column="invoice_total_price_tax"/>
-        <result property="invoiceTime" column="invoice_time"/>
-        <result property="invoicePath" column="invoice_path"/>
-	  	<result property="invoiceCategory" column="invoice_category"/>
-	    <result property="redReversal" column="red_reversal"/>
-        <result property="createBy" column="create_by"/>
-        <result property="createTime" column="create_time"/>
-        <result property="updateBy" column="update_by"/>
-        <result property="updateTime" column="update_time"/>
-        <result property="delFlag" column="del_flag"/>
-  </resultMap>
-    <select id="homeZbjt" resultType="com.by4cloud.platformx.business.vo.HomeZbjtVo">
-		SELECT
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556196124250113
-		AND ci.invoice_time &gt;= CURDATE()
-		AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) sgbbr,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556196124250113
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) sgbby,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556196124250113
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) sgbbn,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056555602756063234
-		AND ci.invoice_time &gt;= CURDATE()
-		AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) smjbr,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056555602756063234
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) smjby,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056555602756063234
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) smjbn,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556317461270529
-		AND ci.invoice_time &gt;= CURDATE()
-		AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) jxcbr,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556317461270529
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) jxcby,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556317461270529
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) jxcbn,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556421857497090
-		AND ci.invoice_time &gt;= CURDATE()
-		AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) tfbr,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556421857497090
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) tfby,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556421857497090
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) tfbn,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556535640576002
-		AND ci.invoice_time &gt;= CURDATE()
-		AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) ymjbr,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556535640576002
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) ymjby,
-		(
-		SELECT
-		sum(ci.invoice_total_price_tax)
-		FROM
-		contract_invoice ci
-		WHERE
-		ci.del_flag = '0'
-		AND comp_id = 2056556535640576002
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) ymjbn
+	<resultMap id="ContractInvoiceMap" type="com.by4cloud.platformx.business.entity.ContractInvoice">
+		<id property="id" column="id"/>
+		<result property="compId" column="comp_id"/>
+		<result property="contractId" column="contract_id"/>
+		<result property="invoicePrice" column="invoice_total_price_tax"/>
+		<result property="invoiceTime" column="invoice_time"/>
+		<result property="invoicePath" column="invoice_path"/>
+		<result property="invoiceCategory" column="invoice_category"/>
+		<result property="redReversal" column="red_reversal"/>
+		<result property="createBy" column="create_by"/>
+		<result property="createTime" column="create_time"/>
+		<result property="updateBy" column="update_by"/>
+		<result property="updateTime" column="update_time"/>
+		<result property="delFlag" column="del_flag"/>
+	</resultMap>
+	<select id="homeZbjt" resultType="com.by4cloud.platformx.business.vo.HomeZbjtVo">
+		SELECT (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556196124250113
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            sgbbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556196124250113
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) sgbby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556196124250113
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  sgbbn,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056555602756063234
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            smjbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056555602756063234
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) smjby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056555602756063234
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  smjbn,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556317461270529
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            jxcbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556317461270529
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) jxcby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556317461270529
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  jxcbn,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556421857497090
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            tfbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556421857497090
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) tfby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556421857497090
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  tfbn,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556535640576002
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            ymjbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556535640576002
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) ymjby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci
+				   WHERE ci.del_flag = '0'
+					 AND comp_id = 2056556535640576002
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  ymjbn
 	</select>
-    <select id="homeZgs" resultType="com.by4cloud.platformx.business.vo.HomeZgsVo">
-		SELECT
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.area_id = '2'
-		AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= CURDATE()
-		AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) hbbr,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.area_id = '2'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) hbby,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.area_id = '2'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) hbbn,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.area_id = '6'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= CURDATE()
-		AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) xbbr,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.area_id = '6'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) xbby,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.area_id = '2'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) xbbn,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.area_id = '1'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= CURDATE()
-		AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) dbbr,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.area_id = '1'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) dbby,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.area_id = '1'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) dbbn,
-		(
-			SELECT
-				sum( ci.invoice_total_price_tax )
-			FROM
-				contract_invoice ci,
-				contract c,
-				business_customer bc
-			WHERE
-				ci.del_flag = '0'
-			  AND bc.del_flag = '0'
-			  AND c.del_flag = '0'
-			  AND ci.contract_id = c.id
-			  AND bc.id = c.party_a_id
-			  AND bc.area_id = '3'
-			  AND ci.comp_id = #{compId}
-			  AND ci.invoice_time &gt;= CURDATE()
-			  AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) hdbr,
-		(
-			SELECT
-				sum( ci.invoice_total_price_tax )
-			FROM
-				contract_invoice ci,
-				contract c,
-				business_customer bc
-			WHERE
-				ci.del_flag = '0'
-			  AND bc.del_flag = '0'
-			  AND c.del_flag = '0'
-			  AND ci.contract_id = c.id
-			  AND bc.id = c.party_a_id
-			  AND bc.area_id = '3'
-			  AND ci.comp_id = #{compId}
-			  AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-			  AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) hdby,
-		(
-			SELECT
-				sum( ci.invoice_total_price_tax )
-			FROM
-				contract_invoice ci,
-				contract c,
-				business_customer bc
-			WHERE
-				ci.del_flag = '0'
-			  AND bc.del_flag = '0'
-			  AND c.del_flag = '0'
-			  AND ci.contract_id = c.id
-			  AND bc.id = c.party_a_id
-			  AND bc.area_id = '3'
-			  AND ci.comp_id = #{compId}
-			  AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-			  AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) hdbn,
-		(
-			SELECT
-				sum( ci.invoice_total_price_tax )
-			FROM
-				contract_invoice ci,
-				contract c,
-				business_customer bc
-			WHERE
-				ci.del_flag = '0'
-			  AND bc.del_flag = '0'
-			  AND c.del_flag = '0'
-			  AND ci.contract_id = c.id
-			  AND bc.id = c.party_a_id
-			  AND bc.area_id = '4'
-			  AND ci.comp_id = #{compId}
-			  AND ci.invoice_time &gt;= CURDATE()
-			  AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) znbr,
-		(
-			SELECT
-				sum( ci.invoice_total_price_tax )
-			FROM
-				contract_invoice ci,
-				contract c,
-				business_customer bc
-			WHERE
-				ci.del_flag = '0'
-			  AND bc.del_flag = '0'
-			  AND c.del_flag = '0'
-			  AND ci.contract_id = c.id
-			  AND bc.id = c.party_a_id
-			  AND bc.area_id = '4'
-			  AND ci.comp_id = #{compId}
-			  AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-			  AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) znby,
-		(
-			SELECT
-				sum( ci.invoice_total_price_tax )
-			FROM
-				contract_invoice ci,
-				contract c,
-				business_customer bc
-			WHERE
-				ci.del_flag = '0'
-			  AND bc.del_flag = '0'
-			  AND c.del_flag = '0'
-			  AND ci.contract_id = c.id
-			  AND bc.id = c.party_a_id
-			  AND bc.area_id = '4'
-			  AND ci.comp_id = #{compId}
-			  AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-			  AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) znbn,
-		(
-			SELECT
-				sum( ci.invoice_total_price_tax )
-			FROM
-				contract_invoice ci,
-				contract c,
-				business_customer bc
-			WHERE
-				ci.del_flag = '0'
-			  AND bc.del_flag = '0'
-			  AND c.del_flag = '0'
-			  AND ci.contract_id = c.id
-			  AND bc.id = c.party_a_id
-			  AND bc.area_id = '5'
-			  AND ci.comp_id = #{compId}
-			  AND ci.invoice_time &gt;= CURDATE()
-			  AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) xnbr,
-		(
-			SELECT
-				sum( ci.invoice_total_price_tax )
-			FROM
-				contract_invoice ci,
-				contract c,
-				business_customer bc
-			WHERE
-				ci.del_flag = '0'
-			  AND bc.del_flag = '0'
-			  AND c.del_flag = '0'
-			  AND ci.contract_id = c.id
-			  AND bc.id = c.party_a_id
-			  AND bc.area_id = '5'
-			  AND ci.comp_id = #{compId}
-			  AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-			  AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) xnby,
-		(
-			SELECT
-				sum( ci.invoice_total_price_tax )
-			FROM
-				contract_invoice ci,
-				contract c,
-				business_customer bc
-			WHERE
-				ci.del_flag = '0'
-			  AND bc.del_flag = '0'
-			  AND c.del_flag = '0'
-			  AND ci.contract_id = c.id
-			  AND bc.id = c.party_a_id
-			  AND bc.area_id = '5'
-			  AND ci.comp_id = #{compId}
-			  AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-			  AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) xnbn,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.export_service_attr = '2'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= CURDATE()
-		AND ci.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )) hwbr,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.export_service_attr = '2'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-%m-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01' )) hwby,
-		(
-		SELECT
-		sum( ci.invoice_total_price_tax )
-		FROM
-		contract_invoice ci,
-		contract c,
-		business_customer bc
-		WHERE
-		ci.del_flag = '0'
-		AND bc.del_flag = '0'
-		AND c.del_flag = '0'
-		AND ci.contract_id = c.id
-		AND bc.id = c.party_a_id
-		AND bc.area_id = '2'
-		  AND ci.comp_id = #{compId}
-		AND ci.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-		AND ci.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )) hwbn
+	<select id="homeZgs" resultType="com.by4cloud.platformx.business.vo.HomeZgsVo">
+		SELECT (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '2'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            hbbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '2'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) hbby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '2'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  hbbn,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '6'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            xbbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '6'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) xbby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '2'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  xbbn,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '1'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            dbbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '1'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) dbby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '1'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  dbbn,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '3'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            hdbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '3'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) hdby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '3'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  hdbn,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '4'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            znbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '4'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) znby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '4'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  znbn,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '5'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            xnbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '5'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) xnby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '5'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  xnbn,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.export_service_attr = '2'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= CURDATE()
+					 AND ci.invoice_time &lt; DATE_ADD(CURDATE(), INTERVAL 1 DAY ))                            hwbr,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.export_service_attr = '2'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-%m-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH ), '%Y-%m-01')) hwby,
+			   (
+				   SELECT sum(ci.invoice_total_price_tax)
+				   FROM contract_invoice ci,
+						contract c,
+						business_customer bc
+				   WHERE ci.del_flag = '0'
+					 AND bc.del_flag = '0'
+					 AND c.del_flag = '0'
+					 AND ci.contract_id = c.id
+					 AND bc.id = c.party_a_id
+					 AND bc.area_id = '2'
+					 AND ci.comp_id = #{compId}
+					 AND ci.invoice_time &gt;= DATE_FORMAT(CURDATE(), '%Y-01-01')
+					 AND ci.invoice_time &lt; DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01'))  hwbn
 	</select>
-    <select id="pageInvoice" resultType="com.by4cloud.platformx.business.vo.HomeInvoiceVo">
+	<select id="pageInvoice" resultType="com.by4cloud.platformx.business.vo.HomeInvoiceVo">
 		SELECT
 		t.id,
 		t.contract_id,
@@ -572,10 +462,10 @@
 		WHERE
 		t.del_flag = '0'
 		<if test="queryDTO.queryCompId !=null and queryDTO.queryCompId !=''">
-			AND t.comp_id =  #{queryDTO.queryCompId}
+			AND t.comp_id = #{queryDTO.queryCompId}
 		</if>
 		<if test="queryDTO.invoiceCategory !=null and queryDTO.invoiceCategory !=''">
-			AND t.invoice_category =  #{queryDTO.invoiceCategory}
+			AND t.invoice_category = #{queryDTO.invoiceCategory}
 		</if>
 		<if test="queryDTO.contractNo !=null and queryDTO.contractNo !=''">
 			AND t1.contract_no LIKE CONCAT('%', #{queryDTO.contractNo}, '%')
@@ -584,103 +474,104 @@
 			AND t2.company_name LIKE CONCAT('%', #{queryDTO.partyA}, '%')
 		</if>
 		<if test="queryDTO.queryArea !=null and queryDTO.queryArea !=''">
-			AND t2.class_id =  #{queryDTO.queryArea}
+			AND t2.class_id = #{queryDTO.queryArea}
 		</if>
 		<if test="queryDTO.queryServiceAttr !=null and queryDTO.queryServiceAttr !=''">
-			AND t2.export_service_attr =  #{queryDTO.queryServiceAttr}
+			AND t2.export_service_attr = #{queryDTO.queryServiceAttr}
 		</if>
 		<if test="queryDTO.queryType !=null and queryDTO.queryType !='' and queryDTO.queryType =='1'.toString()">
-			AND  t.invoice_time &gt;= CURDATE()
-			AND  t.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )
+			AND t.invoice_time &gt;= CURDATE()
+			AND t.invoice_time &lt; DATE_ADD( CURDATE(), INTERVAL 1 DAY )
 		</if>
 		<if test="queryDTO.queryType !=null and queryDTO.queryType !='' and queryDTO.queryType =='2'.toString()">
-			AND  t.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-			AND  t.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )
+			AND t.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
+			AND t.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )
 		</if>
 		<if test="queryDTO.queryType !=null and queryDTO.queryType !='' and queryDTO.queryType =='3'.toString()">
-			AND  t.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
-			AND  t.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )
+			AND t.invoice_time &gt;= DATE_FORMAT( CURDATE(), '%Y-01-01' )
+			AND t.invoice_time &lt; DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 1 YEAR ), '%Y-01-01' )
 		</if>
 		<if test="queryDTO.startTime !=null and queryDTO.endTime !=null">
-			AND  t.invoice_time &gt;=  #{queryDTO.startTime}
-			AND  t.invoice_time &lt;=  #{queryDTO.endTime}
+			AND t.invoice_time &gt;= #{queryDTO.startTime}
+			AND t.invoice_time &lt;= #{queryDTO.endTime}
 		</if>
 		ORDER BY
 		t.create_time DESC
 	</select>
-    <select id="pageScope" resultType="com.by4cloud.platformx.business.vo.ContractInvoicePageVo">
+	<select id="pageScope" resultType="com.by4cloud.platformx.business.vo.ContractInvoicePageVo">
 		SELECT
-			id,
-			contract_no,
-			contract_name,
-			party_a_id,
-			party_a,
-			party_b_id,
-			party_b,
-			amount,
-			currency,
-			contract_type,
-			supply_attribute,
-			contract_status,
-			contract_attribute,
-			sign_date,
-			sign_place,
-			effective_date,
-			delivery_cycle,
-			expiration_date,
-			attachment_url,
-			remark,
-			parent_id,
-			approve_time,
-			arrival_schedule_id,
-			accept_schedule_id,
-			warranty_schedule_id,
-			erp_push_flag,
-			billing_status,
-			billing_amout,
-			next_schedule_name,
-			template_id,
-			sales_model,
-			paid_amount,
-			contract_category,
-			exec_frequency,
-			exec_times,
-			exec_day,
-			environment,
-			standard,
-			use_month,
-			after_ship_month,
-			ship_method,
-			ship_address,
-			packaging,
-			repair_period,
-			repair_breach_amount,
-			goods_short,
-			goods_short_breach_amount,
-			overdue_breach_amount,
-			terminate_contract,
-			court,
-			contract_attchment,
-			city,
-			region,
-			invoice_notice,
-			contract_tax,
-			economic_matters,
-			erp_contract_no,
-			data_id,
-			industry_code,
-			area_code,
-			create_by,
-			update_by,
-			create_time,
-			update_time,
-			del_flag,
-			comp_id,
-		       (select count(1) from contract_invoice ci where ci.del_flag = '0' and ci.contract_id = c.id) invoiceNum
+		id,
+		contract_no,
+		contract_name,
+		party_a_id,
+		party_a,
+		party_b_id,
+		party_b,
+		amount,
+		currency,
+		contract_type,
+		supply_attribute,
+		contract_status,
+		contract_attribute,
+		sign_date,
+		sign_place,
+		effective_date,
+		delivery_cycle,
+		expiration_date,
+		attachment_url,
+		remark,
+		parent_id,
+		approve_time,
+		arrival_schedule_id,
+		accept_schedule_id,
+		warranty_schedule_id,
+		erp_push_flag,
+		billing_status,
+		billing_amout,
+		next_schedule_name,
+		template_id,
+		sales_model,
+		paid_amount,
+		contract_category,
+		exec_frequency,
+		exec_times,
+		exec_day,
+		environment,
+		standard,
+		use_month,
+		after_ship_month,
+		ship_method,
+		ship_address,
+		packaging,
+		repair_period,
+		repair_breach_amount,
+		goods_short,
+		goods_short_breach_amount,
+		overdue_breach_amount,
+		terminate_contract,
+		court,
+		contract_attchment,
+		city,
+		region,
+		invoice_notice,
+		contract_tax,
+		economic_matters,
+		erp_contract_no,
+		data_id,
+		industry_code,
+		area_code,
+		create_by,
+		update_by,
+		create_time,
+		update_time,
+		del_flag,
+		comp_id,
+		(select count(1) from contract_invoice ci where ci.del_flag = '0' and ci.contract_id = c.id) invoiceNum,
+		(select planned_amount from contract_payment_schedule cps where cps.del_flag='0' and cps.stage_name='鍚堝悓绛捐' and cps.contract_id = c.id) advanceAmount
 		FROM
-			contract c
+		contract c
 		WHERE
-			del_flag = '0'
+		del_flag = '0'
 		<if test="queryDTO.contractNo !=null and queryDTO.contractNo !=''">
 			AND contract_no LIKE CONCAT('%', #{queryDTO.contractNo}, '%')
 		</if>
@@ -690,7 +581,13 @@
 		<if test="queryDTO.billingStatus !=null and queryDTO.billingStatus !=''">
 			AND billing_status = #{queryDTO.billingStatus}
 		</if>
+		<if test="queryDTO.advanceType !=null and queryDTO.advanceType !=''">
+			AND exists (select * from contract_payment_schedule cps where cps.del_flag='0' and
+			cps.stage_name='鍚堝悓绛捐' and cps.payment_ratio &gt; 0 and cps.contract_id = c.id)
+			AND not exists (select * from contract_out_bound cps where cps.del_flag='0' and
+			cps.contract_id = c.id)
+		</if>
 		ORDER BY
-			create_time ASC
+		create_time ASC
 	</select>
 </mapper>
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/ProductMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/ProductMapper.xml
index e9319cd..ca39318 100644
--- a/platformx-business-finance-biz/src/main/resources/mapper/ProductMapper.xml
+++ b/platformx-business-finance-biz/src/main/resources/mapper/ProductMapper.xml
@@ -66,7 +66,8 @@
 		WHERE
 			del_flag = '0'
 		<if test="queryDTO.productName !=null and queryDTO.productName !=''">
-			and t.product_name LIKE CONCAT('%', #{queryDTO.productName}, '%')
+			and ( t.product_name LIKE CONCAT('%', #{queryDTO.productName}, '%') or
+			t.erp_code LIKE CONCAT('%', #{queryDTO.productName}, '%'))
 		</if>
 		<if test="queryDTO.parentId !=null ">
 			and t.parent_id = #{queryDTO.parentId}

--
Gitblit v1.9.1