From c427840445fefb679a287dbeaba81bd417388aeb Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期五, 04 九月 2026 17:10:44 +0800
Subject: [PATCH] feat:开票和bip推送分离 新增bip报账单  新增合同标的物变更

---
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/BankStatementServiceImpl.java |  133 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 110 insertions(+), 23 deletions(-)

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 ad2c82a..6e01709 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
@@ -6,7 +6,6 @@
 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.toolkit.Wrappers;
@@ -16,12 +15,10 @@
 import com.by4cloud.platformx.business.dto.BankStatementUpdateDTO;
 import com.by4cloud.platformx.business.dto.PaymentConfirmAddDTO;
 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.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.StatementContractVo;
 import com.by4cloud.platformx.common.core.util.R;
 import com.by4cloud.platformx.common.security.util.SecurityUtils;
@@ -33,6 +30,7 @@
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -53,12 +51,20 @@
 	private final StringRedisTemplate redisTemplate;
 	private final RemoteDeptService remoteDeptService;
 	private final BankStatementItemMapper bankStatementItemMapper;
+	private final ErpRequestRecordMapper erpRequestRecordMapper;
+	private final BipViewMapper bipViewMapper;
 
 	@Value("${bip.url}")
 	private String url;
 
 	@Value("${bip.flag}")
 	private Boolean bipFlag;
+
+	@Value("${dept.sgb}")
+	private String sgb;
+
+	@Value("${erp.sgb}")
+	private String sgbErp;
 
 	@Override
 	public R edit(BankStatementUpdateDTO updateDTO) {
@@ -68,16 +74,8 @@
 		}
 		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("纭鏀舵鎬婚涓嶈兘瓒呰繃浜ゆ槗娴佹按閲戦");
-		}
-
-		//bip鎺ㄩ��
-		if (bipFlag) {
-			R r = pushSaveCollection(statement, updateDTO.getContractCollectionList());
-			if (!r.isOk()){
-				return r;
-			}
+		if (toPaidTotal.compareTo(statement.getTranAmount().subtract(statement.getConfirmAmount()))!=0){
+			return R.failed("纭鏀舵鎬婚蹇呴』涓庝氦鏄撴祦姘撮噾棰濅竴鑷�");
 		}
 
 		statement.setConfirmAmount(statement.getConfirmAmount().add(toPaidTotal));
@@ -96,13 +94,86 @@
 			addDTO.setBusGuestId(statement.getBusGuestId()+"");
 			addDTO.setConfirmTime(statement.getTranDate());
 			addDTO.setContractNo(contract.getContractNo());
-			addDTO.setInOrOut("1");
+			addDTO.setInOrOut(statement.getDcFlag());
 			addDTO.setTransationAmount(statementContractDTO.getToPaidAmount());
 			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();
+		}
+		//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);
+
+			try {
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}).start();
+	}
+
+	private void saveErpRequestRecord(String ymj,String medthodName, String toJSONString, String result) {
+		ErpRequestRecord record = new ErpRequestRecord();
+		record.setErpName(ymj);
+		record.setMothedName(medthodName);
+		record.setRequestParams(toJSONString);
+		record.setResponseParams(result);
+		erpRequestRecordMapper.insert(record);
+	}
+
+	private JSONObject genErpParam(BankStatement statement, Contract contract,BusinessCustomer customer,BankStatementItem item) {
+		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);
+		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);
+		return req;
 	}
 
 	private R pushSaveCollection(BankStatement statement, List<StatementContractDTO> contractDTOList) {
@@ -118,11 +189,6 @@
 		}
 		String finalAccessToken = accessToken;
 
-		BusinessCustomer customer = businessCustomerMapper.selectById(statement.getBusGuestId());
-		if (ObjUtil.isNull(customer)||StrUtil.isEmpty(customer.getBipCode())){
-			log.error("鏌ヨ瀹㈡埛淇℃伅寮傚父");
-			return R.failed("鏌ヨ瀹㈡埛淇℃伅寮傚父");
-		}
 		R<SysDept> r = remoteDeptService.getById(SecurityUtils.getUser().getCompId());
 		log.info("鏌ヨ鍗曚綅淇℃伅:{}",JSONObject.toJSONString(r.getData()));
 		if (!r.isOk()){
@@ -130,7 +196,7 @@
 			return R.failed("鏌ヨ鍗曚綅淇℃伅寮傚父");
 		}
 		SysDept dept = r.getData();
-		JSONObject params = genRequestParam(statement,dept,customer,contractDTOList);
+		JSONObject params = genRequestParam(statement,dept,contractDTOList);
 
 		log.info("鏀舵鍗曢泦鎴� Request:{}", params.toJSONString());
 		String result = HttpUtil.post(url + "/yonbip/EFI/collection/saveandsubmit?access_token=" + finalAccessToken, params.toJSONString());
@@ -143,7 +209,9 @@
 		return R.ok();
 	}
 
-	private JSONObject genRequestParam(BankStatement statement,SysDept dept,BusinessCustomer customer,List<StatementContractDTO> contractDTOList) {
+	private JSONObject genRequestParam(BankStatement statement,SysDept dept,List<StatementContractDTO> contractDTOList) {
+		Contract contract1 = contractMapper.selectById(contractDTOList.get(0).getId());
+		BusinessCustomer customer = businessCustomerMapper.selectById(contract1.getPartyAId());
 		JSONObject jsonObject = new JSONObject();
 		JSONObject data = new JSONObject();
 		data.put("billDate",DateUtil.format(statement.getTranDate(), DatePattern.NORM_DATETIME_FORMAT));
@@ -182,6 +250,7 @@
 				.select(Contract::getAmount)
 				.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));
 	}
@@ -468,4 +537,22 @@
 		jsonObject.put("data",data);
 		return  jsonObject;
 	}
+
+	@Override
+	public R pushBip(Long itemId) {
+		BankStatementItem item = bankStatementItemMapper.selectById(itemId);
+		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;
+	}
 }
\ No newline at end of file

--
Gitblit v1.9.1