From 9171db8f5ddd91b4619bf6a928dcbe98b82f33a0 Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期三, 09 九月 2026 15:34:14 +0800
Subject: [PATCH] feat:工业泵收款推送 bip收款单与收款确认分离  开票前校验产品是否维护税收分类信息

---
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BankStatementServiceImpl.java   |  491 +++++++++++++++++++++-------------
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java |  114 ++++++-
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BankStatementController.java      |   26 +
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatement.java                    |   12 
 platformx-business-finance-biz/src/main/resources/mapper/BankStatementMapper.xml                                          |   28 ++
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ReceiveBipVo.java                         |   41 ++
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/BankStatementUpdateDTO.java              |    4 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BankStatementMapper.java              |    6 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BankStatementItem.java                |   15 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java        |    4 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BankStatementService.java            |    6 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/BipQueryDTO.java                         |   14 +
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/HomeInvoiceVo.java                        |    2 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/InvoiceItemVo.java                        |    2 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/BankStatementItemPageVo.java              |   45 +++
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ReceiveItemVo.java                        |   25 +
 16 files changed, 603 insertions(+), 232 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 c2309f2..4e6db5d 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
@@ -8,7 +8,9 @@
 @Data
 public class BankStatementUpdateDTO {
 
-	private Long id;
+	private String id;
+
+	private String bipParam;
 
 	private List<StatementContractDTO> contractCollectionList;
 
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/BipQueryDTO.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/BipQueryDTO.java
new file mode 100644
index 0000000..9d8b4ad
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/BipQueryDTO.java
@@ -0,0 +1,14 @@
+package com.by4cloud.platformx.business.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class BipQueryDTO {
+
+	@Schema(description = "鏀舵閾惰璐︽埛鎴峰悕")
+	private String receiveBankAccName;
+
+	@Schema(description = "浠樻閾惰璐︽埛鎴峰悕")
+	private String payBankAccName;
+}
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 7dd8e58..afcf544 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
@@ -84,4 +84,16 @@
 	@Column(columnDefinition="char comment '鍊熻捶鏍囪瘑锛�1鍊燂紱2璐�'")
 	private String dcFlag;
 
+	@Schema(description = "瀛愬叕鍙告帹閫佸弬鏁�")
+	@Column(columnDefinition="text comment '瀛愬叕鍙告帹閫佸弬鏁�'")
+	private String pushParam;
+
+	@Schema(description = "瀛愬叕鍙告帹閫佹爣璇�")
+	@Column(columnDefinition="tinyint(1) default 0 comment '瀛愬叕鍙告帹閫佹爣璇� 1/宸叉帹閫� 0/鏈帹閫�'")
+	private Integer pushFlag;
+
+	@Schema(description = "瀛愬叕鍙告帹閫佹垚鍔熷悗鍗曟嵁鍙�")
+	@Column(columnDefinition="varchar(64) comment '瀛愬叕鍙告帹閫佹垚鍔熷悗鍗曟嵁鍙�'")
+	private String pushVouchNo;
+
 }
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
index 56c00a3..69795b1 100644
--- 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
@@ -38,7 +38,16 @@
 	@Column(columnDefinition = "decimal(10,2) comment '鍚堝悓纭閲戦'")
 	private BigDecimal confirmAmount;
 
-	@Schema(description = "鎺ㄩ�佹爣璇�")
-	@Column(columnDefinition="char default '0' comment '鎺ㄩ�佹爣璇� 0/鏈帹 1/宸叉帹'")
-	private String pushFlag;
+	@Schema(description = "bip鎺ㄩ�佹爣璇�")
+	@Column(columnDefinition="char comment 'bip鎺ㄩ�佹爣璇� 1/宸叉帹閫� 0/鏈帹閫�'")
+	private String bipPush;
+
+	@Schema(description = "bip鎺ㄩ�佹垚鍔熷悗杩斿洖鏁版嵁ID")
+	@Column(columnDefinition="bigint comment 'bip鎺ㄩ�佹垚鍔熷悗杩斿洖鏁版嵁ID'")
+	private Long bipId;
+
+	@Schema(description = "bip鎺ㄩ�佸弬鏁�")
+	@Column(columnDefinition="text comment '瀛愬叕鍙告帹閫佸弬鏁�'")
+	private String bipParam;
+
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/BankStatementItemPageVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/BankStatementItemPageVo.java
new file mode 100644
index 0000000..186481a
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/BankStatementItemPageVo.java
@@ -0,0 +1,45 @@
+package com.by4cloud.platformx.business.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class BankStatementItemPageVo {
+
+	private Long id;
+
+	@Schema(description = "鏀舵閾惰璐︽埛璐﹀彿")
+	private String receiveBankAccAcc;
+
+	@Schema(description = "鏀舵閾惰璐︽埛鎴峰悕")
+	private String receiveBankAccName;
+
+	@Schema(description = "浠樻閾惰璐︽埛")
+	private String payBankNo;
+
+	@Schema(description = "浠樻閾惰璐︽埛鎴峰悕")
+	private String payBankAccName;
+
+	@Schema(description = "浜ゆ槗娴佹按")
+	private String bankSeqNo;
+
+	@Schema(description = "鍚堝悓ID")
+	private Long contractId;
+
+	@Schema(description = "鍚堝悓纭閲戦")
+	private BigDecimal confirmAmount;
+
+	@Schema(description = "bip鎺ㄩ�佹爣璇�")
+	private String bipPush;
+
+	@Schema(description = "bip鎺ㄩ�佹垚鍔熷悗杩斿洖鏁版嵁ID")
+	private Long bipId;
+
+	@Schema(description = "bip鎺ㄩ�佸弬鏁�")
+	private String bipParam;
+
+	private String remark;
+
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/HomeInvoiceVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/HomeInvoiceVo.java
index 6890685..d51a082 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/HomeInvoiceVo.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/HomeInvoiceVo.java
@@ -38,4 +38,6 @@
 	private String redReversal;
 
 	private String approvalStatus;
+
+	private String bipPush;
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/InvoiceItemVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/InvoiceItemVo.java
index 88e999e..2e03e08 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/InvoiceItemVo.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/InvoiceItemVo.java
@@ -54,4 +54,6 @@
 	private String zyys;
 
 	private String bkfl;
+
+	private String zy;
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ReceiveBipVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ReceiveBipVo.java
new file mode 100644
index 0000000..8efee98
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ReceiveBipVo.java
@@ -0,0 +1,41 @@
+package com.by4cloud.platformx.business.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReceiveBipVo {
+
+	private String id;
+
+	private String djrq;
+
+	private String kpzz;
+
+	private String ywzz;
+
+	private String bm;
+
+	private String ywy;
+
+	private String djfx;
+	private String jylx;
+	private String wldxlx;
+
+	private String kh;
+	private String bz;
+
+	private String fjzs;
+	private String pzzdr;
+
+	private String sfzy;
+	private String hsdy;
+	private String sfnbwl;
+	private String sfjyjs;
+
+	private String zy;
+
+
+	private List<ReceiveItemVo> itemList;
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ReceiveItemVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ReceiveItemVo.java
new file mode 100644
index 0000000..1325b13
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ReceiveItemVo.java
@@ -0,0 +1,25 @@
+package com.by4cloud.platformx.business.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ReceiveItemVo {
+
+	@Schema(description = "閲戦鍚◣")
+	private BigDecimal confirmAmount;
+
+	private String jjsx;
+
+	private String hsjylx;
+
+	private String kxmx;
+
+	private String cpwlfl;
+
+	private String hsdy;
+
+	private String zy;
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BankStatementController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BankStatementController.java
index 7ea0713..41c3145 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BankStatementController.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/BankStatementController.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.by4cloud.platformx.business.dto.BankStatementUpdateDTO;
+import com.by4cloud.platformx.business.dto.BipQueryDTO;
 import com.by4cloud.platformx.business.entity.BankStatement;
 import com.by4cloud.platformx.common.core.util.R;
 import com.by4cloud.platformx.common.log.annotation.SysLog;
@@ -176,15 +177,26 @@
 		return bankStatementService.backAll(id);
 	}
 
-
 	/**
-	 * 閫氳繃id鎺ㄩ�乥ip
-	 * @param itemId id
+	 * 鐢熸垚鏀舵鍗曢淇℃伅骞舵帹閫�
+	 * @param updateDTO
 	 * @return R
 	 */
-	@Operation(summary = "閫氳繃id鍒犻櫎閾惰娴佹按鍘嗗彶纭" , description = "閫氳繃id鍒犻櫎閾惰娴佹按鍘嗗彶纭" )
-	@GetMapping("/pushBip/{itemId}" )
-	public R pushBip(@PathVariable("itemId" ) Long itemId) {
-		return bankStatementService.pushBip(itemId);
+	@Operation(summary = "鐢熸垚鏀舵鍗曢淇℃伅骞舵帹閫�" , description = "鐢熸垚鏀舵鍗曢淇℃伅骞舵帹閫�" )
+	@PostMapping("/saveAndPush" )
+	public R saveAndPush(@RequestBody BankStatementUpdateDTO updateDTO) {
+		return bankStatementService.saveAndPush(updateDTO);
+	}
+
+	/**
+	 * 鍒嗛〉鏌ヨ
+	 * @param page 鍒嗛〉瀵硅薄
+	 * @param queryDTO 閾惰娴佹按
+	 * @return
+	 */
+	@Operation(summary = "鍒嗛〉鏌ヨ" , description = "鍒嗛〉鏌ヨ" )
+	@GetMapping("/pageBip" )
+	public R pageBip(@ParameterObject Page page, @ParameterObject BipQueryDTO queryDTO) {
+		return R.ok(bankStatementService.pageBip(page, queryDTO));
 	}
 }
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BankStatementMapper.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BankStatementMapper.java
index 5e13939..69f317a 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BankStatementMapper.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/BankStatementMapper.java
@@ -1,11 +1,17 @@
 package com.by4cloud.platformx.business.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.by4cloud.platformx.business.dto.BipQueryDTO;
+import com.by4cloud.platformx.business.vo.BankStatementItemPageVo;
+import com.by4cloud.platformx.common.data.datascope.DataScope;
 import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
 import com.by4cloud.platformx.business.entity.BankStatement;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 @Mapper
 public interface BankStatementMapper extends PlatformxBaseMapper<BankStatement> {
 
 
+    Page<BankStatementItemPageVo> pageBip(Page page, @Param("queryDTO") BipQueryDTO queryDTO, DataScope comp_id);
 }
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BankStatementService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BankStatementService.java
index 1c60d9a..29bff5f 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BankStatementService.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/BankStatementService.java
@@ -1,6 +1,8 @@
 package com.by4cloud.platformx.business.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.by4cloud.platformx.business.dto.BankStatementUpdateDTO;
+import com.by4cloud.platformx.business.dto.BipQueryDTO;
 import com.by4cloud.platformx.business.entity.BankStatement;
 import com.by4cloud.platformx.common.core.util.R;
 import com.by4cloud.platformx.common.data.mybatis.IIService;
@@ -19,5 +21,7 @@
 
 	R backHis(Long id);
 
-	R pushBip(Long itemId);
+	Page pageBip(Page page, BipQueryDTO queryDTO);
+
+	R saveAndPush(BankStatementUpdateDTO updateDTO);
 }
\ No newline at end of file
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 6e01709..91a2cb4 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,37 +1,47 @@
 package com.by4cloud.platformx.business.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.BipQueryDTO;
 import com.by4cloud.platformx.business.dto.PaymentConfirmAddDTO;
 import com.by4cloud.platformx.business.entity.*;
 import com.by4cloud.platformx.business.mapper.*;
 import com.by4cloud.platformx.business.service.BankStatementService;
 import com.by4cloud.platformx.business.service.PaymentConfirmService;
-import com.by4cloud.platformx.business.vo.CustInfoVo;
+import com.by4cloud.platformx.business.vo.ReceiveBipVo;
+import com.by4cloud.platformx.business.vo.ReceiveItemVo;
 import com.by4cloud.platformx.business.vo.StatementContractVo;
 import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.data.datascope.DataScope;
 import com.by4cloud.platformx.common.security.util.SecurityUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -69,12 +79,12 @@
 	@Override
 	public R edit(BankStatementUpdateDTO updateDTO) {
 		BankStatement statement = baseMapper.selectById(updateDTO.getId());
-		if (CollUtil.isEmpty(updateDTO.getContractCollectionList())){
+		if (CollUtil.isEmpty(updateDTO.getContractCollectionList())) {
 			return R.failed("璇烽�夋嫨鏀舵鍚堝悓鍚庡湪鎻愪氦");
 		}
-		BigDecimal toPaidTotal = updateDTO.getContractCollectionList().stream() .map(StatementContractDTO::getToPaidAmount)
+		BigDecimal toPaidTotal = updateDTO.getContractCollectionList().stream().map(StatementContractDTO::getToPaidAmount)
 				.reduce(BigDecimal.ZERO, BigDecimal::add);
-		if (toPaidTotal.compareTo(statement.getTranAmount().subtract(statement.getConfirmAmount()))!=0){
+		if (toPaidTotal.compareTo(statement.getTranAmount().subtract(statement.getConfirmAmount())) != 0) {
 			return R.failed("纭鏀舵鎬婚蹇呴』涓庝氦鏄撴祦姘撮噾棰濅竴鑷�");
 		}
 
@@ -82,16 +92,20 @@
 		baseMapper.updateById(statement);
 
 		updateDTO.getContractCollectionList().stream().forEach(statementContractDTO -> {
+			Contract contract = contractMapper.selectById(statementContractDTO.getId());
+			R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
+			SysDept b = r.getData();
+			BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId());
 			BankStatementItem item = new BankStatementItem();
 			item.setStatetId(statement.getId());
 			item.setBankSeqNo(statement.getBankSeqNo());
 			item.setConfirmAmount(statementContractDTO.getToPaidAmount());
 			item.setContractId(statementContractDTO.getId());
+			ReceiveBipVo bipVo = tranBipVo(statement, item, b, customer);
+			item.setBipParam(JSONObject.toJSONString(bipVo));
 			bankStatementItemMapper.insert(item);
-
-			Contract contract = contractMapper.selectById(statementContractDTO.getId());
 			PaymentConfirmAddDTO addDTO = new PaymentConfirmAddDTO();
-			addDTO.setBusGuestId(statement.getBusGuestId()+"");
+			addDTO.setBusGuestId(statement.getBusGuestId() + "");
 			addDTO.setConfirmTime(statement.getTranDate());
 			addDTO.setContractNo(contract.getContractNo());
 			addDTO.setInOrOut(statement.getDcFlag());
@@ -99,54 +113,74 @@
 			addDTO.setBankSeqNo(statement.getBankSeqNo());
 			paymentConfirmService.add(addDTO);
 
-
-			//鐭冲伐娉典富鍔ㄦ帹閫佺郴缁�
-			if ((StrUtil.equals(SecurityUtils.getUser().getCompId() + "", sgb)) && StrUtil.isNotEmpty(sgbErp)) {
-				BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId());
-				if (ObjUtil.isNotNull(customer)) {
-					pushCollection(statement, contract,customer,item);
-				}
-			}
-
 		});
 
-		//鍒ゆ柇鏄惁鍐呴儴鍗曚綅
-		CustInfoVo custInfoVo = bipViewMapper.selectBaseInfoByCustName(statement.getPayBankAccName());
-		if (ObjUtil.isNull(custInfoVo)){
-			return R.ok();
+		//鐭冲伐娉典富鍔ㄦ帹閫佺郴缁�
+		if ((StrUtil.equals(SecurityUtils.getUser().getCompId() + "", sgb)) && StrUtil.isNotEmpty(sgbErp)) {
+			pushCollectionSgb(statement, updateDTO.getContractCollectionList());
 		}
-		//bip鎺ㄩ��
-		if (bipFlag&&custInfoVo.getCustCode().equals("01")) {
-			return pushSaveCollection(statement, updateDTO.getContractCollectionList());
-		}
-		log.info("鍐呴儴寰�鏉ユ敹娆惧崟锛屽鎴峰悕绉帮細{},瀹㈡埛绫诲瀷锛歿},涓嶇敤淇濆瓨鏀舵鍗�",custInfoVo.getCustName(),custInfoVo.getCustclass());
+
+//		//鍒ゆ柇鏄惁鍐呴儴鍗曚綅
+//		CustInfoVo custInfoVo = bipViewMapper.selectBaseInfoByCustName(statement.getPayBankAccName());
+//		if (ObjUtil.isNull(custInfoVo)){
+//			return R.ok();
+//		}
+//		//bip鎺ㄩ��
+//		if (bipFlag&&custInfoVo.getCustCode().equals("01")) {
+//			return pushSaveCollection(statement, updateDTO.getContractCollectionList());
+//		}
+//		log.info("鍐呴儴寰�鏉ユ敹娆惧崟锛屽鎴峰悕绉帮細{},瀹㈡埛绫诲瀷锛歿},涓嶇敤淇濆瓨鏀舵鍗�",custInfoVo.getCustName(),custInfoVo.getCustclass());
 		return R.ok();
 	}
 
-	private void pushCollection(BankStatement statement,Contract contract,BusinessCustomer customer,BankStatementItem item) {
-		new Thread(() -> {
-			JSONObject request = genErpParam(statement,contract,customer,item);
-			String resp = "";
-			String reqPath = "";
-			log.info("宸ヤ笟娉垫敹娆�/閫�娆撅細{},鍏ュ弬:{}",statement.getDcFlag(),request.toJSONString());
-			if (statement.getDcFlag().equals("1")){
-				reqPath = sgbErp + "/arpclose/create";
-			}
-			if (statement.getDcFlag().equals("2")){
-				reqPath = sgbErp+"/arpclose/create";
-			}
-			resp = HttpUtil.post(reqPath,request.toJSONString());
-			saveErpRequestRecord("sgb",reqPath,request.toJSONString(),resp);
-			log.info("宸ヤ笟娉垫敹娆�/閫�娆惧洖鍙傦細{}",resp);
+	private void pushCollectionSgb(BankStatement statement, List<StatementContractDTO> contractCollectionList) {
+		JSONObject request = genErpParam(statement, contractCollectionList);
+		statement.setPushParam(request.toJSONString());
+		log.info("宸ヤ笟娉垫敹娆惧湴鍧�:{}", sgbErp + "/apilink/arclose/create?corpsecret=12345678&appserver=appserver1&accountid=888&tradeid=" + IdUtil.fastUUID());
 
-			try {
-			} catch (Exception e) {
-				e.printStackTrace();
+//		HttpResponse resp = HttpUtil.createPost(sgbErp + "/apilink/arclose/create?corpsecret=12345678&appserver=appserver1&accountid=888&tradeid="
+//				+ IdUtil.fastUUID())
+//				.header("Content-Type","application/x-www-form-urlencoded")
+//				.body(URLEncodeUtil.encode(request.toJSONString(), StandardCharsets.UTF_8))
+//				.timeout(30000)
+//				// 鎸囧畾缂栫爜鏍煎紡
+//				.charset(StandardCharsets.UTF_8)
+//				.execute();
+
+			log.info("宸ヤ笟娉垫敹娆惧叆鍙�:{}", "=" +request.toJSONString());
+			OkHttpClient client = new OkHttpClient().newBuilder()
+					.build();
+			MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
+			RequestBody body = RequestBody.create(mediaType, "=" + request.toJSONString());
+			Request req = new Request.Builder()
+					.url(sgbErp + "/apilink/arclose/create?corpsecret=12345678&appserver=appserver1&accountid=888&tradeid=" + IdUtil.fastUUID())
+					.method("POST", body)
+					.addHeader("Content-Type", "application/x-www-form-urlencoded")
+					.build();
+			String result = "";
+			try (Response response = client.newCall(req).execute()){
+				if (response.isSuccessful()) {
+					// 浠呰皟鐢ㄤ竴娆tring()锛岀粨鏋滃瓨鍏ュ彉閲忓鐢紝鍚庣画鎵�鏈夐�昏緫鐩存帴璇诲彇璇ュ彉閲�
+					result = response.body().string();
+					// 涓氬姟閫昏緫鐩存帴浣跨敤result锛岀姝㈠啀娆¤皟鐢╮esponse.body().string()
+				}
+			log.info("宸ヤ笟娉垫敹娆惧洖鍙傦細{}", result);
+			saveErpRequestRecord("sgb", "/apilink/arclose/create", request.toJSONString(), result);
+			JSONObject respJson = JSONObject.parseObject(result);
+			if (respJson.containsKey("errcode") && respJson.getString("errcode").equals("0")) {
+				statement.setPushFlag(1);
+				statement.setPushVouchNo(respJson.getString("code"));
+				baseMapper.updateById(statement);
+				return;
 			}
-		}).start();
+			log.error("宸ヤ笟娉垫敹娆炬帹閫佸け璐ワ細{}", response.body().string());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
 	}
 
-	private void saveErpRequestRecord(String ymj,String medthodName, String toJSONString, String result) {
+	private void saveErpRequestRecord(String ymj, String medthodName, String toJSONString, String result) {
 		ErpRequestRecord record = new ErpRequestRecord();
 		record.setErpName(ymj);
 		record.setMothedName(medthodName);
@@ -155,28 +189,51 @@
 		erpRequestRecordMapper.insert(record);
 	}
 
-	private JSONObject genErpParam(BankStatement statement, Contract contract,BusinessCustomer customer,BankStatementItem item) {
+	private JSONObject genErpParam(BankStatement statement, List<StatementContractDTO> contractCollectionList) {
 		JSONObject req = new JSONObject();
-		JSONObject djt = new JSONObject();
-		djt.put("iAmt",item.getConfirmAmount());
-		djt.put("iAmt_f",item.getConfirmAmount());
-		djt.put("cCusVen",customer.getErpCompanyCode());
-		djt.put("cexch_name","浜烘皯甯�");
-		djt.put("iAmount",item.getConfirmAmount());
-		req.put("鍗曟嵁澶�",djt);
+		Map<String, Object> djt = new LinkedHashMap<>();
+		Contract contract = contractMapper.selectById(contractCollectionList.get(0).getId());
+		BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId());
+		djt.put("dVouchDate", DateUtil.formatDate(statement.getTranDate()));//鍗曟嵁鏃ユ湡
+		if (ObjUtil.isNotNull(customer)) {
+			djt.put("cDwCode", customer.getErpCompanyCode());//鍗曚綅缂栫爜
+		}
+		djt.put("cexch_name", "浜烘皯甯�");//鍗曚綅缂栫爜
+		djt.put("cOperator", "10123");//褰曞叆浜虹紪鐮�
+		djt.put("cSSCode", "01");//褰曞叆浜虹紪鐮�
+		djt.put("iAmount", statement.getConfirmAmount());//浜烘皯甯侀噾棰�
+		djt.put("cBankAccount", statement.getReceiveBankAccAcc());//鏈柟閾惰璐﹀彿
+		djt.put("cBank", statement.getPayBankAccName());//鏈柟閾惰璐﹀彿
+		djt.put("cContractType", "161");
+		if (CollUtil.size(contractCollectionList)==1) {
+			Contract contractHeader = contractMapper.selectById(contractCollectionList.get(0).getId());
+			djt.put("cContractID", contractHeader.getErpContractNo());
+		}
+		req.put("鍗曟嵁澶�", djt);
+		JSONObject line = new JSONObject();
 		JSONArray array = new JSONArray();
-		JSONObject djti = new JSONObject();
-		djti.put("cVouchID",statement.getBankSeqNo());
-		djti.put("dVouchDate",DateUtil.formatDate(statement.getTranDate()));
-		djti.put("cDwCode",customer.getErpCompanyCode());
-		djti.put("cexch_name","浜烘皯甯�");
-		djti.put("iAmount",item.getConfirmAmount());
-		array.add(djti);
-		req.put("鍗曟嵁澶�",array);
+
+		contractCollectionList.stream().forEach(statementContractDTO -> {
+			JSONObject djti = new JSONObject();
+			djti.put("cCusVen", customer.getErpCompanyCode());//寰�鏉ュ崟浣嶇紪鐮�
+			djti.put("iAmt_f", statementContractDTO.getToPaidAmount());//鏈鏈竵閲戦
+			djti.put("iAmt", statementContractDTO.getToPaidAmount());//鏈鏈竵閲戦
+			djti.put("cPersonCode", "00164");//涓氬姟鍛樼紪鐮�
+			djti.put("cConID", contract.getErpContractNo());//鍚堝悓缂栫爜
+			djti.put("娆鹃」绫诲瀷", "搴旀敹娆�");
+			djti.put("cConType","闀囨睙甯�");
+			array.add(djti);
+		});
+
+		line.put("琛�", array);
+		req.put("鍗曟嵁浣�", line);
+		JSONObject apicontext = new JSONObject();
+		apicontext.put("username", "");
+		req.put("apicontext", apicontext);
 		return req;
 	}
 
-	private R pushSaveCollection(BankStatement statement, List<StatementContractDTO> contractDTOList) {
+	private R pushSaveCollection(BankStatement statement, BankStatementItem bankStatementItem) {
 		String accessToken = "";
 		if (redisTemplate.hasKey("BIP_TOKEN")) {
 			accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
@@ -190,13 +247,13 @@
 		String finalAccessToken = accessToken;
 
 		R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
-		log.info("鏌ヨ鍗曚綅淇℃伅:{}",JSONObject.toJSONString(r.getData()));
-		if (!r.isOk()){
+		log.info("鏌ヨ鍗曚綅淇℃伅:{}", JSONObject.toJSONString(r.getData()));
+		if (!r.isOk()) {
 			log.error("鏌ヨ鍗曚綅淇℃伅寮傚父");
 			return R.failed("鏌ヨ鍗曚綅淇℃伅寮傚父");
 		}
 		SysDept dept = r.getData();
-		JSONObject params = genRequestParam(statement,dept,contractDTOList);
+		JSONObject params = genRequestParam(statement, dept, bankStatementItem);
 
 		log.info("鏀舵鍗曢泦鎴� Request:{}", params.toJSONString());
 		String result = HttpUtil.post(url + "/yonbip/EFI/collection/saveandsubmit?access_token=" + finalAccessToken, params.toJSONString());
@@ -206,39 +263,64 @@
 		if (!resultJson.getString("code").equals("200")) {
 			return R.failed(resultJson.getString("message"));
 		}
+		bankStatementItem.setBipPush("1");
+		bankStatementItem.setBipId(resultJson.getJSONObject("data").getLong("id"));
+		bankStatementItemMapper.updateById(bankStatementItem);
 		return R.ok();
 	}
 
-	private JSONObject genRequestParam(BankStatement statement,SysDept dept,List<StatementContractDTO> contractDTOList) {
-		Contract contract1 = contractMapper.selectById(contractDTOList.get(0).getId());
-		BusinessCustomer customer = businessCustomerMapper.selectById(contract1.getPartyAId());
+	private JSONObject genRequestParam(BankStatement statement, SysDept dept, BankStatementItem statementItem) {
+		Contract contract = contractMapper.selectById(statementItem.getContractId());
+		BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId());
+		ReceiveBipVo bipVo = BeanUtil.copyProperties(JSONObject.parseObject(statementItem.getBipParam()), ReceiveBipVo.class);
 		JSONObject jsonObject = new JSONObject();
 		JSONObject data = new JSONObject();
-		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.getBipCode());//瀹㈡埛缂栫爜
-		data.put("financeOrgCode",dept.getBipCode());//寮�绁ㄧ粍缁囩紪鐮�
-		data.put("orgCode",dept.getBipCode());//涓氬姟缁勭粐缂栫爜
-		data.put("bustypeCode","ar_colsale");// TODO 浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岃澶囬粯璁BYXGLXT鏆傛椂涓嶈兘鐢�
-		data.put("oriCurrencyCode","CNY");//甯佺
-		data.put("srcBillType","38");
-		data.put("srcBillNo",statement.getBankSeqNo());
-		data.put("_status","Insert");
+		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.getBipCode());//瀹㈡埛缂栫爜
+		data.put("financeOrgCode", dept.getBipCode());//寮�绁ㄧ粍缁囩紪鐮�
+		data.put("orgCode", dept.getBipCode());//涓氬姟缁勭粐缂栫爜
+		data.put("bustypeCode", "ar_colsale");// TODO 浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岃澶囬粯璁BYXGLXT鏆傛椂涓嶈兘鐢�
+		data.put("oriCurrencyCode", "CNY");//甯佺
+		data.put("srcBillType", "38");
+		data.put("srcBillNo", statement.getBankSeqNo());
+		data.put("_status", "Insert");
 		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;
+
+		JSONObject item = new JSONObject();
+		item.put("oriTaxIncludedAmount", statementItem.getConfirmAmount());
+		item.put("contractNo", contract.getContractNo());
+		item.put("quickTypeCode", "1");
+		item.put("_status", "Insert");
+
+		item.put("expenseItemCode", bipVo.getItemList().get(0).getJjsx());//缁忔祹浜嬮」
+		item.put("remarks", bipVo.getItemList().get(0).getZy());//鎽樿
+		JSONObject freeChId = new JSONObject();
+		freeChId.put("GX08", bipVo.getItemList().get(0).getHsdy());//鏍哥畻鍗曞厓
+		freeChId.put("YSYF14", "1");//娆鹃」绫诲瀷 1 棰勬敹娆� 2 搴旀敹娆�
+		freeChId.put("JT04", bipVo.getItemList().get(0).getHsjylx());//鏍哥畻浜ゆ槗绫诲瀷 0101 闆嗗洟澶栭儴 01020301 涓夌骇鍒嗗瓙鍏徃闂� 01020302 涓夌骇鍒嗗叕鍙镐笌瀛愬瓙鍏徃涔嬮棿
+		freeChId.put("JT06", bipVo.getItemList().get(0).getKxmx());//娆鹃」鏄庣粏
+		freeChId.put("JT12", bipVo.getItemList().get(0).getCpwlfl());//浜у搧鐗╂枡鍒嗙被
+
+		item.put("freeChId", freeChId);
+
+
+		bodyItem.add(item);
+		data.put("bodyItem", bodyItem);
+		JSONObject datafreeChId = new JSONObject();
+		datafreeChId.put("YSYF_SFZY", bipVo.getSfzy());//鏄惁涓昏惀
+		datafreeChId.put("fk_038", bipVo.getPzzdr());//鍑瘉鍒跺崟浜�
+		datafreeChId.put("YSYF_08", bipVo.getSfnbwl());//鏄惁鍐呴儴寰�鏉�
+		datafreeChId.put("YSYF24", bipVo.getSfjyjs());//鏄惁绠�鏄撹绋�
+		datafreeChId.put("fk_002", bipVo.getFjzs());//闄勪欢1
+		datafreeChId.put("GX08", bipVo.getHsdy());//鏍哥畻鍗曞厓
+		datafreeChId.put("TzMY042", contract.getExpirationDate());//棰勮鍥炴鏃ユ湡
+		data.put("freeChId", datafreeChId);
+		data.put("remarks", bipVo.getZy());//鎽樿
+		jsonObject.put("data", data);
+		return jsonObject;
 	}
 
 	@Override
@@ -248,9 +330,9 @@
 				.select(Contract::getContractNo)
 				.select(Contract::getPartyA)
 				.select(Contract::getAmount)
-				.leftJoin(Contract.class,Contract::getId,BankStatementItem::getContractId)
-				.eq(BankStatementItem::getCompId,SecurityUtils.getUser().getCompId())
-				.eq(BankStatementItem::getStatetId,id)
+				.leftJoin(Contract.class, Contract::getId, BankStatementItem::getContractId)
+				.eq(BankStatementItem::getCompId, SecurityUtils.getUser().getCompId())
+				.eq(BankStatementItem::getStatetId, id)
 				.orderByDesc(BankStatementItem::getCreateTime);
 		return R.ok(bankStatementItemMapper.selectJoinList(StatementContractVo.class, wrapper));
 	}
@@ -261,15 +343,15 @@
 		BankStatementItem statement = bankStatementItemMapper.selectById(id);
 		BankStatement bankStatement = baseMapper.selectById(statement.getStatetId());
 		Contract contract = contractMapper.selectById(statement.getContractId());
-		if (ObjUtil.isNull(contract)){
+		if (ObjUtil.isNull(contract)) {
 			return R.failed("鍚堝悓淇℃伅寮傚父");
 		}
 		BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId());
-		if (ObjUtil.isNull(customer)){
+		if (ObjUtil.isNull(customer)) {
 			return R.failed("瀹㈡埛淇℃伅淇℃伅寮傚父");
 		}
 		R<SysDept> r = remoteDeptService.getById(contract.getPartyBId());
-		if (!r.isOk()){
+		if (!r.isOk()) {
 			return r;
 		}
 		//bip鎺ㄩ��
@@ -285,7 +367,7 @@
 				return R.failed("bip accessToken 鑾峰彇寮傚父");
 			}
 			String finalAccessToken = accessToken;
-			JSONObject request = genRefundParam(bankStatement,statement, contract, customer, r.getData());
+			JSONObject request = genRefundParam(bankStatement, statement, contract, customer, r.getData());
 			log.info("鏀舵閫�娆惧崟-閫�娆惧崟涓�鍘嗗彶纭璇锋眰鍏ュ弬锛歿}", request.toJSONString());
 			String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString());
 			log.info("鏀舵閫�娆惧崟-閫�娆惧崟涓�鍘嗗彶纭璇锋眰鍥炲弬:{}", result);
@@ -301,21 +383,21 @@
 		return R.ok();
 	}
 
-	private JSONObject genRefundParam(BankStatement bankStatement,BankStatementItem statement, Contract contract,BusinessCustomer customer, SysDept dept) {
+	private JSONObject genRefundParam(BankStatement bankStatement, BankStatementItem statement, Contract contract, BusinessCustomer customer, SysDept dept) {
 		JSONObject jsonObject = new JSONObject();
 		JSONObject data = new JSONObject();
-		data.put("billDate",DateUtil.now());
-		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","ar_refsale");//浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岄攢鍞粯璁JHYXGLXT
-		data.put("oriCurrencyCode","CNY");//甯佺
-		data.put("srcBillType","38");
-		data.put("srcBillNo",bankStatement.getBankSeqNo());
-		data.put("_status","Insert");
+		data.put("billDate", DateUtil.now());
+		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", "ar_refsale");//浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岄攢鍞粯璁JHYXGLXT
+		data.put("oriCurrencyCode", "CNY");//甯佺
+		data.put("srcBillType", "38");
+		data.put("srcBillNo", bankStatement.getBankSeqNo());
+		data.put("_status", "Insert");
 		JSONArray bodyItem = new JSONArray();
 		JSONObject item = new JSONObject();
 		item.put("oriTaxIncludedAmount", statement.getConfirmAmount());
@@ -323,28 +405,28 @@
 		item.put("quickTypeCode", "1");
 		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
 	public R backBal(Long id) {
 		BankStatement bankStatement = baseMapper.selectById(id);
 		BusinessCustomer customer = businessCustomerMapper.selectById(bankStatement.getBusGuestId());
-		if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){
+		if (ObjUtil.isNull(customer) || StrUtil.isEmpty(customer.getBipCode())) {
 			log.error("鏌ヨ瀹㈡埛淇℃伅寮傚父");
 			return R.failed("鏌ヨ瀹㈡埛淇℃伅寮傚父");
 		}
 		R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
-		if (!r.isOk()){
+		if (!r.isOk()) {
 			log.error("鏌ヨ鍗曚綅淇℃伅寮傚父");
 			return R.failed("鏌ヨ鍗曚綅淇℃伅寮傚父");
 		}
 		SysDept dept = r.getData();
 		List<BankStatementItem> items = bankStatementItemMapper.selectList(Wrappers.<BankStatementItem>lambdaQuery()
-				.eq(BankStatementItem::getStatetId,id));
-		if (bipFlag){
+				.eq(BankStatementItem::getStatetId, id));
+		if (bipFlag) {
 			String accessToken = "";
 			if (redisTemplate.hasKey("BIP_TOKEN")) {
 				accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
@@ -356,7 +438,7 @@
 				return R.failed("bip accessToken 鑾峰彇寮傚父");
 			}
 			String finalAccessToken = accessToken;
-			JSONObject request = genBackBalParam(bankStatement,customer,dept,items);
+			JSONObject request = genBackBalParam(bankStatement, customer, dept, items);
 			log.info("鏀舵閫�娆惧崟-閫�娆句綑棰濊姹傚叆鍙傦細{}", request.toJSONString());
 			String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString());
 			log.info("鏀舵閫�娆惧崟-閫�娆句綑棰濊姹傚洖鍙�:{}", result);
@@ -373,46 +455,46 @@
 	private JSONObject genBackBalParam(BankStatement bankStatement, BusinessCustomer customer, SysDept dept, List<BankStatementItem> items) {
 		JSONObject jsonObject = new JSONObject();
 		JSONObject data = new JSONObject();
-		data.put("billDate",DateUtil.now());
-		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","ar_refsale");//浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岄攢鍞粯璁JHYXGLXT
-		data.put("oriCurrencyCode","CNY");//甯佺
-		data.put("srcBillType","38");
-		data.put("srcBillNo",bankStatement.getBankSeqNo());
-		data.put("_status","Insert");
+		data.put("billDate", DateUtil.now());
+		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", "ar_refsale");//浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岄攢鍞粯璁JHYXGLXT
+		data.put("oriCurrencyCode", "CNY");//甯佺
+		data.put("srcBillType", "38");
+		data.put("srcBillNo", bankStatement.getBankSeqNo());
+		data.put("_status", "Insert");
 		JSONArray bodyItem = new JSONArray();
 		JSONObject item = new JSONObject();
 		item.put("oriTaxIncludedAmount", bankStatement.getTranAmount().subtract(bankStatement.getConfirmAmount()));
 		item.put("quickTypeCode", "1");
 		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
 	public R backAll(Long id) {
 		BankStatement bankStatement = baseMapper.selectById(id);
 		BusinessCustomer customer = businessCustomerMapper.selectById(bankStatement.getBusGuestId());
-		if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){
+		if (ObjUtil.isNull(customer) || StrUtil.isEmpty(customer.getBipCode())) {
 			log.error("鏌ヨ瀹㈡埛淇℃伅寮傚父");
 			return R.failed("鏌ヨ瀹㈡埛淇℃伅寮傚父");
 		}
 		R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
-		if (!r.isOk()){
+		if (!r.isOk()) {
 			log.error("鏌ヨ鍗曚綅淇℃伅寮傚父");
 			return R.failed("鏌ヨ鍗曚綅淇℃伅寮傚父");
 		}
 		SysDept dept = r.getData();
 		List<BankStatementItem> items = bankStatementItemMapper.selectList(Wrappers.<BankStatementItem>lambdaQuery()
-				.eq(BankStatementItem::getStatetId,id));
-		if (bipFlag){
+				.eq(BankStatementItem::getStatetId, id));
+		if (bipFlag) {
 			String accessToken = "";
 			if (redisTemplate.hasKey("BIP_TOKEN")) {
 				accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
@@ -424,7 +506,7 @@
 				return R.failed("bip accessToken 鑾峰彇寮傚父");
 			}
 			String finalAccessToken = accessToken;
-			JSONObject request = genBackAllParam(bankStatement,customer,dept,items);
+			JSONObject request = genBackAllParam(bankStatement, customer, dept, items);
 			log.info("鏀舵閫�娆惧崟-閫�娆炬墍鏈夎姹傚叆鍙傦細{}", request.toJSONString());
 			String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString());
 			log.info("鏀舵閫�娆惧崟-閫�娆炬墍鏈夎姹傚洖鍙�:{}", result);
@@ -441,46 +523,46 @@
 	private JSONObject genBackAllParam(BankStatement bankStatement, BusinessCustomer customer, SysDept dept, List<BankStatementItem> items) {
 		JSONObject jsonObject = new JSONObject();
 		JSONObject data = new JSONObject();
-		data.put("billDate",DateUtil.now());
-		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","ar_refsale");//浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岄攢鍞粯璁JHYXGLXT
-		data.put("oriCurrencyCode","CNY");//甯佺
-		data.put("srcBillType","38");
-		data.put("srcBillNo",bankStatement.getBankSeqNo());
-		data.put("_status","Insert");
+		data.put("billDate", DateUtil.now());
+		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", "ar_refsale");//浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岄攢鍞粯璁JHYXGLXT
+		data.put("oriCurrencyCode", "CNY");//甯佺
+		data.put("srcBillType", "38");
+		data.put("srcBillNo", bankStatement.getBankSeqNo());
+		data.put("_status", "Insert");
 		JSONArray bodyItem = new JSONArray();
 		JSONObject item = new JSONObject();
 		item.put("oriTaxIncludedAmount", bankStatement.getTranAmount());
 		item.put("quickTypeCode", "1");
 		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
 	public R backHis(Long id) {
 		BankStatement bankStatement = baseMapper.selectById(id);
 		BusinessCustomer customer = businessCustomerMapper.selectById(bankStatement.getBusGuestId());
-		if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){
+		if (ObjUtil.isNull(customer) || StrUtil.isEmpty(customer.getBipCode())) {
 			log.error("鏌ヨ瀹㈡埛淇℃伅寮傚父");
 			return R.failed("鏌ヨ瀹㈡埛淇℃伅寮傚父");
 		}
 		R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
-		if (!r.isOk()){
+		if (!r.isOk()) {
 			log.error("鏌ヨ鍗曚綅淇℃伅寮傚父");
 			return R.failed("鏌ヨ鍗曚綅淇℃伅寮傚父");
 		}
 		SysDept dept = r.getData();
 		List<BankStatementItem> items = bankStatementItemMapper.selectList(Wrappers.<BankStatementItem>lambdaQuery()
-				.eq(BankStatementItem::getStatetId,id));
-		if (bipFlag){
+				.eq(BankStatementItem::getStatetId, id));
+		if (bipFlag) {
 			String accessToken = "";
 			if (redisTemplate.hasKey("BIP_TOKEN")) {
 				accessToken = (String) redisTemplate.opsForValue().get("BIP_TOKEN");
@@ -492,7 +574,7 @@
 				return R.failed("bip accessToken 鑾峰彇寮傚父");
 			}
 			String finalAccessToken = accessToken;
-			JSONObject request = genBackHisParam(bankStatement,customer,dept,items);
+			JSONObject request = genBackHisParam(bankStatement, customer, dept, items);
 			log.info("鏀舵閫�娆惧崟-閫�娆惧巻鍙茬‘璁よ姹傚叆鍙傦細{}", request.toJSONString());
 			String result = HttpUtil.post(url + "/yonbip/EFI/arRefund/saveandsubmit?access_token=" + finalAccessToken, request.toJSONString());
 			log.info("鏀舵閫�娆惧崟-閫�娆惧巻鍙茬‘璁よ姹傚洖鍙�:{}", result);
@@ -504,27 +586,27 @@
 
 		bankStatement.setConfirmAmount(new BigDecimal("0"));
 		baseMapper.updateById(bankStatement);
-		bankStatementItemMapper.deleteByIds(items.stream().map(item->item.getId()).collect(Collectors.toList()));
+		bankStatementItemMapper.deleteByIds(items.stream().map(item -> item.getId()).collect(Collectors.toList()));
 		return R.ok();
 	}
 
-	private JSONObject genBackHisParam(BankStatement bankStatement, BusinessCustomer customer, SysDept dept,List<BankStatementItem> items) {
+	private JSONObject genBackHisParam(BankStatement bankStatement, BusinessCustomer customer, SysDept dept, List<BankStatementItem> items) {
 		JSONObject jsonObject = new JSONObject();
 		JSONObject data = new JSONObject();
-		data.put("billDate",DateUtil.now());
-		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","ar_refsale");//浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岄攢鍞粯璁JHYXGLXT
-		data.put("oriCurrencyCode","CNY");//甯佺
-		data.put("srcBillType","38");
-		data.put("srcBillNo",bankStatement.getBankSeqNo());
-		data.put("_status","Insert");
+		data.put("billDate", DateUtil.now());
+		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", "ar_refsale");//浜ゆ槗绫诲瀷缂栫爜 鏆備及榛樿ZGYSFP锛岄攢鍞粯璁JHYXGLXT
+		data.put("oriCurrencyCode", "CNY");//甯佺
+		data.put("srcBillType", "38");
+		data.put("srcBillNo", bankStatement.getBankSeqNo());
+		data.put("_status", "Insert");
 		JSONArray bodyItem = new JSONArray();
-		for (BankStatementItem statementItem:items) {
+		for (BankStatementItem statementItem : items) {
 			Contract contract = contractMapper.selectById(statementItem.getContractId());
 			JSONObject item = new JSONObject();
 			item.put("oriTaxIncludedAmount", statementItem.getConfirmAmount());
@@ -533,26 +615,51 @@
 			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;
+	}
+
+	private ReceiveBipVo tranBipVo(BankStatement statement, BankStatementItem bankStatementItem, SysDept b, BusinessCustomer customer) {
+		ReceiveBipVo bipVo = new ReceiveBipVo();
+		bipVo.setDjrq(DateUtil.formatDate(statement.getTranDate()));
+		bipVo.setKpzz(b.getBipCode());
+		bipVo.setYwzz(b.getBipCode());
+		R<SysDept> rDept = remoteDeptService.getById(SecurityUtils.getUser().getDeptId());
+		if (rDept.isOk()) {
+			bipVo.setBm(rDept.getData().getOrgCode());
+			bipVo.setHsdy(rDept.getData().getOrgCode());
+		}
+		bipVo.setYwy(SecurityUtils.getUser().getNickname());
+		bipVo.setPzzdr(SecurityUtils.getUser().getNickname());
+		bipVo.setJylx("ZBYXGLXT");
+		bipVo.setWldxlx("1");
+		bipVo.setKh(customer.getCreditCode());
+		bipVo.setBz("CNY");
+		bipVo.setFjzs("0");
+		bipVo.setSfzy("1");
+		bipVo.setSfnbwl("1");
+		bipVo.setSfjyjs("0");
+		bipVo.setDjfx("1");
+		List<ReceiveItemVo> list = new ArrayList<>();
+		ReceiveItemVo itemVo = new ReceiveItemVo();
+		itemVo.setConfirmAmount(bankStatementItem.getConfirmAmount());
+		list.add(itemVo);
+		bipVo.setItemList(list);
+		return bipVo;
 	}
 
 	@Override
-	public R pushBip(Long itemId) {
-		BankStatementItem item = bankStatementItemMapper.selectById(itemId);
+	public Page pageBip(Page page, BipQueryDTO queryDTO) {
+		return baseMapper.pageBip(page, queryDTO, DataScope.of("comp_id"));
+	}
+
+	@Override
+	public R saveAndPush(BankStatementUpdateDTO updateDTO) {
+		BankStatementItem item = bankStatementItemMapper.selectById(updateDTO.getId());
+		item.setBipParam(updateDTO.getBipParam());
+		bankStatementItemMapper.updateById(item);
 		BankStatement statement = baseMapper.selectById(item.getStatetId());
-		List<StatementContractDTO> statementContractDTOList = new ArrayList<>();
-		StatementContractDTO contractDTO = new StatementContractDTO();
-		contractDTO.setId(item.getContractId());
-		contractDTO.setToPaidAmount(item.getConfirmAmount());
-		statementContractDTOList.add(contractDTO);
-		R r = pushSaveCollection(statement,statementContractDTOList);
-		if (r.isOk()){
-			item.setPushFlag("1");
-			bankStatementItemMapper.updateById(item);
-			return r;
-		}
-		return r;
+		return pushSaveCollection(statement, item);
 	}
 }
\ No newline at end of file
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 b2dae0a..18650c8 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
@@ -229,6 +229,24 @@
 				if (ObjUtil.isNotNull(subjectMatter)) {
 					advanceAmount = advanceAmount.add(contractOutBoundInvoiceVo.getInvoiceNum().multiply(subjectMatter.getUnitPrice()));
 				}
+				List<String> smjList = new ArrayList<>();
+				smjList.add(smj);
+				smjList.add(smjsc);
+				smjList.add(smjzt);
+				if (("" + SecurityUtils.getUser().getCompId()).equals(smj) || ("" + SecurityUtils.getUser().getCompId()).equals(smjsc) ||
+						("" + SecurityUtils.getUser().getCompId()).equals(smjzt)) {
+					Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode, subjectMatter.getMaterialCode())
+							.in(Product::getCompId, smjList).last("limit 1"));
+					if (ObjUtil.isNull(product) || StrUtil.isBlank(product.getTaxClass()) || StrUtil.isBlank(product.getTaxCode())) {
+						return R.failed("璇峰湪浜у搧淇℃伅涓ˉ鍏呯◣鏀跺垎绫讳俊鎭�");
+					}
+				} else {
+					Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode, subjectMatter.getMaterialCode())
+							.eq(Product::getCompId, SecurityUtils.getUser().getCompId()).last("limit 1"));
+					if (ObjUtil.isNull(product) || StrUtil.isBlank(product.getTaxClass()) || StrUtil.isBlank(product.getTaxCode())) {
+						return R.failed("璇峰湪浜у搧淇℃伅涓ˉ鍏呯◣鏀跺垎绫讳俊鎭�");
+					}
+				}
 			}
 			log.info("advanceAmount:{}", advanceAmount);
 			log.info("schedule.getPlannedAmount:{}", schedule.getPlannedAmount());
@@ -260,6 +278,28 @@
 		BusinessCustomer customer = businessCustomerMapper.selectById(contract.getPartyAId());
 		if (ObjUtil.isNull(customer)) {
 			return R.failed("鑾峰彇璐柟鍗曚綅寮傚父");
+		}
+		for (ContractOutBoundInvoiceVo contractOutBoundInvoiceVo : genInvoiceInfoDTO.getOutBoundInvoiceList()) {
+			ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
+			List<String> smjList = new ArrayList<>();
+			smjList.add(smj);
+			smjList.add(smjsc);
+			smjList.add(smjzt);
+			if (("" + SecurityUtils.getUser().getCompId()).equals(smj) || ("" + SecurityUtils.getUser().getCompId()).equals(smjsc) ||
+					("" + SecurityUtils.getUser().getCompId()).equals(smjzt)) {
+				Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode, contractOutBound.getSubjectMatterCode())
+						.in(Product::getCompId, smjList).last("limit 1"));
+				if (ObjUtil.isNull(product) || StrUtil.isBlank(product.getTaxClass()) || StrUtil.isBlank(product.getTaxCode())) {
+					return R.failed("璇峰湪浜у搧淇℃伅涓ˉ鍏呯◣鏀跺垎绫讳俊鎭�");
+				}
+			} else {
+				Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode, contractOutBound.getSubjectMatterCode())
+						.eq(Product::getCompId, SecurityUtils.getUser().getCompId()).last("limit 1"));
+				if (ObjUtil.isNull(product) || StrUtil.isBlank(product.getTaxClass()) || StrUtil.isBlank(product.getTaxCode())) {
+					return R.failed("璇峰湪浜у搧淇℃伅涓ˉ鍏呯◣鏀跺垎绫讳俊鎭�");
+				}
+			}
+
 		}
 		//鏈哄姩杞﹀紑绁�
 		if (StrUtil.equals(genInvoiceInfoDTO.getInvoiceType(), "4")) {
@@ -300,7 +340,28 @@
 		if (ObjUtil.isNull(customer)) {
 			return R.failed("鑾峰彇璐柟鍗曚綅寮傚父");
 		}
+		for (ContractOutBoundInvoiceVo contractOutBoundInvoiceVo : mergeInvoiceDTO.getOutBoundInvoiceList()) {
+			ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId());
+			List<String> smjList = new ArrayList<>();
+			smjList.add(smj);
+			smjList.add(smjsc);
+			smjList.add(smjzt);
+			if (("" + SecurityUtils.getUser().getCompId()).equals(smj) || ("" + SecurityUtils.getUser().getCompId()).equals(smjsc) ||
+					("" + SecurityUtils.getUser().getCompId()).equals(smjzt)) {
+				Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode, contractOutBound.getSubjectMatterCode())
+						.in(Product::getCompId, smjList).last("limit 1"));
+				if (ObjUtil.isNull(product) || StrUtil.isBlank(product.getTaxClass()) || StrUtil.isBlank(product.getTaxCode())) {
+					return R.failed("璇峰湪浜у搧淇℃伅涓ˉ鍏呯◣鏀跺垎绫讳俊鎭�");
+				}
+			} else {
+				Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery().eq(Product::getErpCode, contractOutBound.getSubjectMatterCode())
+						.eq(Product::getCompId, SecurityUtils.getUser().getCompId()).last("limit 1"));
+				if (ObjUtil.isNull(product) || StrUtil.isBlank(product.getTaxClass()) || StrUtil.isBlank(product.getTaxCode())) {
+					return R.failed("璇峰湪浜у搧淇℃伅涓ˉ鍏呯◣鏀跺垎绫讳俊鎭�");
+				}
+			}
 
+		}
 		GenInvoiceInfoVo vo = genMergeInvoiceVo(mergeInvoiceDTO, customer, b);
 		vo = transBipVo(vo, b, customer);
 		return R.ok(vo);
@@ -532,7 +593,7 @@
 		List<InvoiceItemVo> invoiceItemVoList = new ArrayList<>();
 		List<String> erpCode = new ArrayList<>();
 		List<ContractOutBoundMergeVo> mergeOutBounds = new ArrayList<>();
-		if (genInvoiceInfoDTO.getInvoiceType().equals("3")){
+		if (genInvoiceInfoDTO.getInvoiceType().equals("3")) {
 			String[] vehiclenNoList = genInvoiceInfoDTO.getVehicleNo().split(",");
 			for (int i = 0; i < vehiclenNoList.length; i++) {
 				ContractOutBound contractOutBound = contractOutBoundMapper.selectById(genInvoiceInfoDTO.getOutBoundInvoiceList().get(0).getContractOutBoundId());
@@ -856,7 +917,7 @@
 			}
 			GenInvoiceInfoVo vo = BeanUtil.copyProperties(toInvoiceDTO, GenInvoiceInfoVo.class);
 			//鍙戠エ淇濆瓨
-			ContractInvoice invoice = saveContractInvoice(vo, contract, toInvoiceDTO.getOutBoundInvoiceList(), DateUtil.current() + "", "1",null);
+			ContractInvoice invoice = saveContractInvoice(vo, contract, toInvoiceDTO.getOutBoundInvoiceList(), DateUtil.current() + "", "1", null);
 			//鍚姩娴佺▼
 			ProcessInstanceParamDto dto = new ProcessInstanceParamDto();
 			Map<String, Object> map = BeanUtil.beanToMap(invoice);
@@ -876,7 +937,7 @@
 		}
 		GenInvoiceInfoVo vo = BeanUtil.copyProperties(toInvoiceDTO, GenInvoiceInfoVo.class);
 		//鍙戠エ淇濆瓨
-		ContractInvoice invoice = saveContractInvoice(vo, contract, toInvoiceDTO.getOutBoundInvoiceList(), DateUtil.current() + "", "0",null);
+		ContractInvoice invoice = saveContractInvoice(vo, contract, toInvoiceDTO.getOutBoundInvoiceList(), DateUtil.current() + "", "0", null);
 		//鍚姩娴佺▼
 		ProcessInstanceParamDto dto = new ProcessInstanceParamDto();
 		Map<String, Object> map = BeanUtil.beanToMap(invoice);
@@ -1036,7 +1097,7 @@
 		List<ContractInvoice> invoiceList = baseMapper.selectList(Wrappers.<ContractInvoice>lambdaQuery()
 				.eq(ContractInvoice::getContractId, contractId)
 				.or()
-				.like(ContractInvoice::getContractIds,contractId)
+				.like(ContractInvoice::getContractIds, contractId)
 				.orderByDesc(ContractInvoice::getCreateTime));
 		return R.ok(invoiceList);
 	}
@@ -1047,10 +1108,10 @@
 		blueInvoice.setRedReversal("2");
 		baseMapper.updateById(blueInvoice);
 		ContractInvoice invoice = new ContractInvoice();
-		if (!blueInvoice.getIsMerge()){
+		if (!blueInvoice.getIsMerge()) {
 			invoice.setContractId(blueInvoice.getContractId());
 		}
-		if (blueInvoice.getIsMerge()){
+		if (blueInvoice.getIsMerge()) {
 			invoice.setContractIds(blueInvoice.getContractIds());
 			invoice.setIsMerge(true);
 		}
@@ -1091,7 +1152,7 @@
 		ProcessInstanceParamDto dto = new ProcessInstanceParamDto();
 		Map<String, Object> map = BeanUtil.beanToMap(invoice);
 		dto.setParamMap(map);
-		if (!blueInvoice.getIsMerge()){
+		if (!blueInvoice.getIsMerge()) {
 			Contract contract = contractMapper.selectById(blueInvoice.getContractId());
 			if (StrUtil.equals(contract.getContractCategory(), "water_house")) {
 				map.put("contractCategory", "water_house");
@@ -1141,7 +1202,7 @@
 //			invoiceDetail.put("goodsPrice", invoiceItemVo.getUnitPrice());
 			invoiceDetail.put("goodsTotalPrice", invoiceItemVo.getPriceNoTax());
 			invoiceDetail.put("goodsTotalTax", invoiceItemVo.getPriceTax());
-			if (StrUtil.isNotBlank(vo.getInvoiceVehicleType())&&(vo.getInvoiceVehicleType().equals("3") || vo.getInvoiceVehicleType().equals("4"))) {
+			if (StrUtil.isNotBlank(vo.getInvoiceVehicleType()) && (vo.getInvoiceVehicleType().equals("3") || vo.getInvoiceVehicleType().equals("4"))) {
 				invoiceDetail.put("goodsSpecification", invoiceItemVo.getSpecification());
 			}
 			invoiceDetailsList.add(invoiceDetail);
@@ -1422,15 +1483,18 @@
 			item.put("taxRate", invoiceItemVo.getTaxRate());
 			item.put("oriTaxAmount", invoiceItemVo.getPriceTax());
 			item.put("oriTaxIncludedAmount", invoiceItemVo.getPriceAndTax());
+			item.put("remarks", invoiceItemVo.getZy());//鎽樿
 			item.put("_status", "Insert");
 			JSONObject freeChId = new JSONObject();
 			freeChId.put("GX08", invoiceItemVo.getHsdy());//鏍哥畻鍗曞厓
+			freeChId.put("YSYF14", "2");//娆鹃」绫诲瀷 1 棰勬敹娆� 2 搴旀敹娆�
 			freeChId.put("YSYF31", invoiceItemVo.getSfjs());//鏄惁璁$◣
 			freeChId.put("JT04", invoiceItemVo.getHsjylx());//鏍哥畻浜ゆ槗绫诲瀷 0101 闆嗗洟澶栭儴 01020301 涓夌骇鍒嗗瓙鍏徃闂� 01020302 涓夌骇鍒嗗叕鍙镐笌瀛愬瓙鍏徃涔嬮棿
 			freeChId.put("JT06", invoiceItemVo.getKxmx());//娆鹃」鏄庣粏
 			freeChId.put("JT32", invoiceItemVo.getZyys());//浣滀笟瑕佺礌
 			freeChId.put("zzbkfl", invoiceItemVo.getBkfl());//鏉垮潡鍒嗙被
 			freeChId.put("JT12", invoiceItemVo.getCpwlfl());//浜у搧鐗╂枡鍒嗙被
+
 			item.put("freeChId", freeChId);
 			bodyItem.add(item);
 		}
@@ -1547,7 +1611,7 @@
 		//钃濈エ
 		if (invoice.getInvoiceCategory().equals("1")) {
 			// TODO 寮�钃濈エ鎺ュ彛鏈哄姩杞﹂攢鍞�
-			if (StrUtil.equals(vo.getInvoiceVehicleType(), "4")&&bwFlag) {
+			if (StrUtil.equals(vo.getInvoiceVehicleType(), "4") && bwFlag) {
 				JSONObject request = genBlueInvoiceVehicle(vo, invoice.getSerialNo(), dept);
 				String requestId = IdUtil.fastUUID();
 				invoice.setBwRequestId(requestId);
@@ -1573,7 +1637,7 @@
 			}
 
 			// TODO 寮�钃濈エ鎺ュ彛鏈哄姩杞︿笓鐢�
-			if (StrUtil.equals(vo.getInvoiceVehicleType(), "3")&&bwFlag) {
+			if (StrUtil.equals(vo.getInvoiceVehicleType(), "3") && bwFlag) {
 				JSONObject request = genBlueInvoiceVehiclePre(vo, invoice.getSerialNo(), dept);
 				String requestId = IdUtil.fastUUID();
 				invoice.setBwRequestId(requestId);
@@ -1599,7 +1663,7 @@
 			}
 
 			// TODO 寮�钃濈エ鎺ュ彛 闈炴満鍔ㄨ溅
-			if (!StrUtil.equals(vo.getInvoiceVehicleType(), "3") && !StrUtil.equals(vo.getInvoiceVehicleType(), "4")&&bwFlag) {
+			if (!StrUtil.equals(vo.getInvoiceVehicleType(), "3") && !StrUtil.equals(vo.getInvoiceVehicleType(), "4") && bwFlag) {
 				JSONObject request = genBlueInvoice(vo, invoice.getSerialNo(), dept);
 				String requestId = IdUtil.fastUUID();
 				invoice.setBwRequestId(requestId);
@@ -1833,7 +1897,7 @@
 						});
 					}
 				}
-			}else {
+			} else {
 				blueInvoice.setRedReversal("1");
 				baseMapper.updateById(blueInvoice);
 				//鍚堝苟寮�绁�
@@ -1848,18 +1912,18 @@
 							for (ContractOutBoundInvoiceVo outBoundInvoiceVo : vo.getOutBoundInvoiceList()) {
 								BigDecimal contractBillAmount = new BigDecimal("0");
 								if (CollUtil.isNotEmpty(vo.getOutBoundInvoiceList())) {
-										ContractOutBound contractOutBound = contractOutBoundMapper.selectById(outBoundInvoiceVo.getContractOutBoundId());
-										if (ObjUtil.isNotNull(contractOutBound) && contractOutBound.getContractId().equals(contract.getId())) {
-											ContractSubjectMatter subjectMatter = subjectMatterMapper.selectOne(Wrappers.<ContractSubjectMatter>lambdaQuery()
-													.eq(ContractSubjectMatter::getMaterialCode, contractOutBound.getSubjectMatterCode())
-													.eq(StrUtil.isNotBlank(contractOutBound.getLineNo()), ContractSubjectMatter::getLineNo, contractOutBound.getLineNo())
-													.eq(ContractSubjectMatter::getContractId, contract.getId()).last("limit 1"));
-											if (ObjUtil.isNotNull(subjectMatter) && ObjUtil.isNotNull(subjectMatter.getUnitPrice())) {
-												contractBillAmount = contractBillAmount.add(outBoundInvoiceVo.getInvoiceNum().multiply(subjectMatter.getUnitPrice()));
-											}
-											contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().subtract(outBoundInvoiceVo.getInvoiceNum()));
-											contractOutBoundMapper.updateById(contractOutBound);
+									ContractOutBound contractOutBound = contractOutBoundMapper.selectById(outBoundInvoiceVo.getContractOutBoundId());
+									if (ObjUtil.isNotNull(contractOutBound) && contractOutBound.getContractId().equals(contract.getId())) {
+										ContractSubjectMatter subjectMatter = subjectMatterMapper.selectOne(Wrappers.<ContractSubjectMatter>lambdaQuery()
+												.eq(ContractSubjectMatter::getMaterialCode, contractOutBound.getSubjectMatterCode())
+												.eq(StrUtil.isNotBlank(contractOutBound.getLineNo()), ContractSubjectMatter::getLineNo, contractOutBound.getLineNo())
+												.eq(ContractSubjectMatter::getContractId, contract.getId()).last("limit 1"));
+										if (ObjUtil.isNotNull(subjectMatter) && ObjUtil.isNotNull(subjectMatter.getUnitPrice())) {
+											contractBillAmount = contractBillAmount.add(outBoundInvoiceVo.getInvoiceNum().multiply(subjectMatter.getUnitPrice()));
 										}
+										contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().subtract(outBoundInvoiceVo.getInvoiceNum()));
+										contractOutBoundMapper.updateById(contractOutBound);
+									}
 								}
 								//鏇存柊鍚堝悓寮�绁ㄧ姸鎬� 鍓嶆彁鍑哄簱瀹屾垚
 								contract.setBillingStatus("2");
@@ -2160,7 +2224,7 @@
 				baseMapper.updateById(contractInvoice);
 				return R.ok();
 			}
-			return R.failed(resultJson, "搴旀敹鍙戠エ闆嗘垚澶辫触");
+			return R.failed(result);
 		}
 		//绾㈢エ
 		if (StrUtil.equals(contractInvoice.getInvoiceCategory(), "2")) {
@@ -2179,7 +2243,7 @@
 				baseMapper.updateById(contractInvoice);
 				return R.ok();
 			}
-			return R.failed(resultJson, "搴旀敹鍙戠エ鍒犻櫎澶辫触");
+			return R.failed(result);
 		}
 		return R.ok();
 	}
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 e348f89..101e539 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
@@ -708,9 +708,7 @@
 				if (StrUtil.equals(contract.getPartyBId() + "", tfgs) && StrUtil.isNotEmpty(tfgsErp)) {
 					//閫氭柟鍏徃閫氳繃绯荤粺褰曞叆
 				}
-				if (StrUtil.equals(contract.getPartyBId() + "", sgb) && StrUtil.isNotEmpty(sgbErp)) {
-					//鐭冲伐娉典富鍔ㄦ帹閫佺郴缁�
-				}
+
 			} catch (Exception e) {
 				e.printStackTrace();
 			}
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/BankStatementMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/BankStatementMapper.xml
index 7f67546..de54df8 100644
--- a/platformx-business-finance-biz/src/main/resources/mapper/BankStatementMapper.xml
+++ b/platformx-business-finance-biz/src/main/resources/mapper/BankStatementMapper.xml
@@ -22,4 +22,32 @@
         <result property="updateTime" column="update_time"/>
         <result property="delFlag" column="del_flag"/>
   </resultMap>
+    <select id="pageBip" resultType="com.by4cloud.platformx.business.vo.BankStatementItemPageVo">
+		SELECT
+			bsi.id,
+			bsi.confirm_amount,
+			bsi.bip_id,
+			bsi.bip_param,
+			bsi.bip_push,
+			bs.pay_bank_acc_name,
+			bs.pay_bank_no,
+			bs.receive_bank_acc_acc,
+			bs.receive_bank_acc_name,
+			bs.bank_seq_no ,
+			bs.remark ,
+		    bsi.comp_id
+		FROM
+			bank_statement_item bsi
+				LEFT JOIN bank_statement bs ON bs.id = bsi.statet_id
+		where
+			bsi.del_flag='0'
+		and bs.del_flag='0'
+		<if test="queryDTO.payBankAccName!=null and queryDTO.payBankAccName != ''">
+			and pay_bank_acc_name like  CONCAT('%', #{queryDTO.payBankAccName}, '%')
+		</if>
+		<if test="queryDTO.receiveBankAccName!=null and queryDTO.receiveBankAccName != ''">
+			and receive_bank_acc_name like  CONCAT('%', #{queryDTO.receiveBankAccName}, '%')
+		</if>
+		order by bsi.create_time desc
+	</select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1