From 849648e82e5dec96f9f30fcc9c9bd799268b1f4c Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期四, 09 四月 2026 10:40:44 +0800
Subject: [PATCH] 新增资金流水导入
---
service/src/main/java/com/ruoyi/cwgl/service/impl/InvoiceManageServiceImpl.java | 581 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 522 insertions(+), 59 deletions(-)
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/impl/InvoiceManageServiceImpl.java b/service/src/main/java/com/ruoyi/cwgl/service/impl/InvoiceManageServiceImpl.java
index 675ba4e..f650e2a 100644
--- a/service/src/main/java/com/ruoyi/cwgl/service/impl/InvoiceManageServiceImpl.java
+++ b/service/src/main/java/com/ruoyi/cwgl/service/impl/InvoiceManageServiceImpl.java
@@ -1,16 +1,28 @@
package com.ruoyi.cwgl.service.impl;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.SystemDataNoEnum;
+import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import javax.annotation.Resource;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.cwgl.domain.InvoiceDetail;
+import com.ruoyi.cwgl.domain.*;
+import com.ruoyi.cwgl.domain.dto.CallbackReceiptDto;
+import com.ruoyi.cwgl.mapper.*;
+import com.ruoyi.cwgl.service.IInvoiceBillDetailService;
+import com.ruoyi.cwgl.service.IInvoiceBusinessService;
+import com.ruoyi.system.service.ISystemDataNoService;
+import lombok.NonNull;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.scheduling.annotation.Async;
@@ -22,9 +34,6 @@
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.core.service.BaseService;
-import com.ruoyi.cwgl.mapper.InvoiceManageMapper;
-import com.ruoyi.cwgl.domain.InvoiceManage;
-import com.ruoyi.cwgl.domain.InvoiceManageLog;
import com.ruoyi.cwgl.service.IInvoiceManageService;
import com.ruoyi.cwgl.service.IInvoiceManageLogService;
import com.ruoyi.common.core.text.Convert;
@@ -37,16 +46,46 @@
*/
@Service
@Transactional(rollbackFor = Exception.class)
-public class InvoiceManageServiceImpl extends BaseService<InvoiceManageMapper, InvoiceManage> implements IInvoiceManageService
-{
+public class InvoiceManageServiceImpl extends BaseService<InvoiceManageMapper, InvoiceManage> implements IInvoiceManageService {
protected final Logger logger = LoggerFactory.getLogger(getClass());
@Resource
private InvoiceManageMapper invoiceManageMapper;
-
+
+ @Resource
+ private InvoiceBillDetailMapper invoiceBillDetailMapper;
+
+ @Resource
+ private IInvoiceBillDetailService invoiceBillDetailService;
+
@Resource
private IInvoiceManageLogService invoiceManageLogService;
+ @Autowired
+ private ISystemDataNoService systemDataNoService;
+ @Autowired
+ private IInvoiceBusinessService businessService;
+ @Value("${custom.gdpaasApi.extensionNumber}")
+ private String extensionNumber;
+
+
+ @Value("${custom.gdpaasApi.clerk}")
+ private String clerk;
+ @Value("${custom.gdpaasApi.invoicingAddress}")
+ private String invoicingAddress;
+ @Value("${custom.gdpaasApi.returnAddress}")
+ private String returnAddress;
+ @Autowired
+ private IInvoiceBusinessService invoiceBusinessService;
+
+ @Resource
+ private ReceivableInvoiceBusinessMapper receivableInvoiceBusinessMapper;
+ @Resource
+ private ReceivableBillManagementMapper receivableBillManagementMapper;
+ @Resource
+ private PayableInvoiceBusinessMapper payableInvoiceBusinessMapper;
+ @Resource
+ private PayableBillManagementMapper payableBillManagementMapper;
/**
* 鏌ヨ鍙戠エ绠$悊
*
@@ -55,8 +94,7 @@
*/
@DataSource(DataSourceType.SLAVE)
@Override
- public InvoiceManage selectInvoiceManageById(Integer id)
- {
+ public InvoiceManage selectInvoiceManageById(Integer id) {
return invoiceManageMapper.selectInvoiceManageById(id);
}
@@ -68,8 +106,7 @@
*/
@DataSource(DataSourceType.SLAVE)
@Override
- public int selectInvoiceManageCount(InvoiceManage invoiceManage)
- {
+ public int selectInvoiceManageCount(InvoiceManage invoiceManage) {
return invoiceManageMapper.selectInvoiceManageCount(invoiceManage);
}
@@ -81,8 +118,7 @@
*/
@DataSource(DataSourceType.SLAVE)
@Override
- public List<InvoiceManage> selectInvoiceManageList(InvoiceManage invoiceManage)
- {
+ public List<InvoiceManage> selectInvoiceManageList(InvoiceManage invoiceManage) {
return invoiceManageMapper.selectInvoiceManageList(invoiceManage);
}
@@ -90,15 +126,15 @@
* 鏌ヨ鍙戠エ绠$悊鍒楄〃 寮傛 瀵煎嚭
*
* @param invoiceManage 鍙戠エ绠$悊
- * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+ * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
* @return 鍙戠エ绠$悊闆嗗悎
*/
@DataSource(DataSourceType.SLAVE)
@Async
@Override
- public void export(InvoiceManage invoiceManage,String exportKey) {
+ public void export(InvoiceManage invoiceManage, String exportKey) {
- super.export(InvoiceManage.class,exportKey,"invoiceManageData",(pageNum)->{
+ super.export(InvoiceManage.class, exportKey, "invoiceManageData", (pageNum) -> {
PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
return selectInvoiceManageList(invoiceManage);
});
@@ -112,17 +148,17 @@
* @return 缁撴灉
*/
@Override
- public int insertInvoiceManage(InvoiceManage invoiceManage)
- {
+ public int insertInvoiceManage(InvoiceManage invoiceManage) {
invoiceManage.setCreateTime(DateUtils.getNowDate());
+ invoiceManage.setOrderNo(systemDataNoService.getNoByKey(SystemDataNoEnum.FP));
int rows = invoiceManageMapper.insertInvoiceManage(invoiceManage);
insertInvoiceDetail(invoiceManage);
-
+
// 璁板綍鏂板鍙戠エ绠$悊鏃ュ織
if (rows > 0) {
recordInvoiceManageLog(invoiceManage, "鏂板鍙戠エ绠$悊");
}
-
+
return rows;
}
@@ -133,17 +169,16 @@
* @return 缁撴灉
*/
@Override
- public int insertInvoiceManageBatch(List<InvoiceManage> invoiceManages)
- {
+ public int insertInvoiceManageBatch(List<InvoiceManage> invoiceManages) {
int rows = invoiceManageMapper.insertInvoiceManageBatch(invoiceManages);
-
+
// 璁板綍鎵归噺鏂板鍙戠エ绠$悊鏃ュ織
if (rows > 0 && invoiceManages != null && !invoiceManages.isEmpty()) {
for (InvoiceManage invoiceManage : invoiceManages) {
recordInvoiceManageLog(invoiceManage, "鎵归噺鏂板鍙戠エ绠$悊");
}
}
-
+
return rows;
}
@@ -155,18 +190,21 @@
*/
@Transactional
@Override
- public int updateInvoiceManage(InvoiceManage invoiceManage)
- {
+ public int updateInvoiceManage(InvoiceManage invoiceManage) {
invoiceManage.setUpdateTime(DateUtils.getNowDate());
+ // 鍒犻櫎鍘熸湁鐨勫彂绁ㄦ槑缁�
invoiceManageMapper.deleteInvoiceDetailByInvoiceManageId(invoiceManage.getId());
+ // 鍒犻櫎鍘熸湁鐨勫彂绁ㄤ笟鍔″晢鍝佹槑缁�
+ invoiceBillDetailService.deleteInvoiceBillDetailByInvoiceManageId(invoiceManage.getId());
+ // 鎻掑叆鏂扮殑鏄庣粏璁板綍
insertInvoiceDetail(invoiceManage);
int rows = invoiceManageMapper.updateInvoiceManage(invoiceManage);
-
+
// 璁板綍淇敼鍙戠エ绠$悊鏃ュ織
if (rows > 0) {
recordInvoiceManageLog(invoiceManage, "淇敼鍙戠エ绠$悊");
}
-
+
return rows;
}
@@ -177,16 +215,16 @@
* @return 缁撴灉
*/
@Override
- public int updateInvoiceManageBatch(List<InvoiceManage> invoiceManages){
+ public int updateInvoiceManageBatch(List<InvoiceManage> invoiceManages) {
int rows = invoiceManageMapper.updateInvoiceManageBatch(invoiceManages);
-
+
// 璁板綍鎵归噺淇敼鍙戠エ绠$悊鏃ュ織
if (rows > 0 && invoiceManages != null && !invoiceManages.isEmpty()) {
for (InvoiceManage invoiceManage : invoiceManages) {
recordInvoiceManageLog(invoiceManage, "鎵归噺淇敼鍙戠エ绠$悊");
}
}
-
+
return rows;
}
@@ -198,22 +236,19 @@
*/
@Transactional
@Override
- public int deleteInvoiceManageByIds(String ids)
- {
+ public int deleteInvoiceManageByIds(String ids) {
return deleteInvoiceManageByIds(Convert.toIntArray(ids));
}
/**
* 鍒犻櫎鍙戠エ绠$悊瀵硅薄
*
- *
* @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
* @return 缁撴灉
*/
@Transactional
@Override
- public int deleteInvoiceManageByIds(Integer[] ids)
- {
+ public int deleteInvoiceManageByIds(Integer[] ids) {
invoiceManageMapper.deleteInvoiceDetailByInvoiceManageIds(ids);
return invoiceManageMapper.deleteInvoiceManageByIds(ids);
}
@@ -225,8 +260,7 @@
* @return 缁撴灉
*/
@Override
- public int deleteInvoiceManageById(Integer id)
- {
+ public int deleteInvoiceManageById(Integer id) {
invoiceManageMapper.deleteInvoiceDetailByInvoiceManageId(id);
return invoiceManageMapper.deleteInvoiceManageById(id);
}
@@ -237,22 +271,32 @@
* @param invoiceManage 鍙戠エ绠$悊瀵硅薄
*/
@Override
- public void insertInvoiceDetail(InvoiceManage invoiceManage)
- {
+ public void insertInvoiceDetail(InvoiceManage invoiceManage) {
List<InvoiceDetail> invoiceDetailList = invoiceManage.getInvoiceDetailList();
Integer id = invoiceManage.getId();
- if (StringUtils.isNotNull(invoiceDetailList))
- {
+ if (StringUtils.isNotNull(invoiceDetailList)) {
List<InvoiceDetail> list = new ArrayList<InvoiceDetail>();
- for (InvoiceDetail invoiceDetail : invoiceDetailList)
- {
+ for (InvoiceDetail invoiceDetail : invoiceDetailList) {
invoiceDetail.setInvoiceManageId(id);
invoiceDetail.setCreateTime(new Date());
list.add(invoiceDetail);
}
- if (list.size() > 0)
- {
+ if (list.size() > 0) {
invoiceManageMapper.batchInvoiceDetail(list);
+ }
+ }
+
+ // 鏂板鍙戠エ涓氬姟鍟嗗搧鏄庣粏淇℃伅
+ List<InvoiceBillDetail> invoiceBillDetails = invoiceManage.getInvoiceBillDetails();
+ if (StringUtils.isNotNull(invoiceBillDetails)) {
+ List<InvoiceBillDetail> billDetailList = new ArrayList<InvoiceBillDetail>();
+ for (InvoiceBillDetail invoiceBillDetail : invoiceBillDetails) {
+ invoiceBillDetail.setInvoiceManageId(id);
+ invoiceBillDetail.setCreateTime(new Date());
+ billDetailList.add(invoiceBillDetail);
+ }
+ if (billDetailList.size() > 0) {
+ invoiceBillDetailMapper.insertInvoiceBillDetailBatch(billDetailList);
}
}
}
@@ -263,22 +307,21 @@
* @param invoiceManage 鍙戠エ绠$悊瀵硅薄
* @param operationType 鎿嶄綔绫诲瀷
*/
- private void recordInvoiceManageLog(InvoiceManage invoiceManage, String operationType)
- {
+ private void recordInvoiceManageLog(InvoiceManage invoiceManage, String operationType) {
try {
InvoiceManageLog log = new InvoiceManageLog();
log.setInvoiceManageId(invoiceManage.getId());
log.setOperator(SecurityUtils.getUsername());
log.setOperationTime(DateUtils.getNowDate());
-
+
// 鏋勫缓鎿嶄綔鎻忚堪锛屽寘鍚紑绁ㄩ噾棰濄�佸叧鑱旇处鍗曠紪鍙峰拰瀵瑰簲寮�绁ㄩ噾棰�
StringBuilder descBuilder = new StringBuilder();
descBuilder.append(operationType).append(": ");
-
+
if (invoiceManage.getInvoiceAmount() != null) {
descBuilder.append("寮�绁ㄩ噾棰�=").append(invoiceManage.getInvoiceAmount()).append("; ");
}
-
+
// 鑾峰彇鍏宠仈璐﹀崟淇℃伅
if (invoiceManage.getInvoiceDetailList() != null && !invoiceManage.getInvoiceDetailList().isEmpty()) {
descBuilder.append("鍏宠仈璐﹀崟淇℃伅: ");
@@ -292,10 +335,10 @@
descBuilder.append("; ");
}
}
-
+
log.setOperationDesc(descBuilder.toString());
log.setCreateTime(DateUtils.getNowDate());
-
+
invoiceManageLogService.insertInvoiceManageLog(log);
} catch (Exception e) {
logger.error("璁板綍鍙戠エ绠$悊鎿嶄綔鏃ュ織澶辫触: {}", e.getMessage());
@@ -304,8 +347,346 @@
@Override
public AjaxResult applyInvoice(Integer id) {
+ InvoiceManage invoiceManage = selectInvoiceManageById(id);
+ if (invoiceManage == null) {
+ throw new ServiceException("鍙戠エ璁板綍涓嶅瓨鍦�");
+ }
+ if (invoiceManage.getStatus().equals(1)) {
+ throw new ServiceException("璇峰嬁閲嶅寮�绁�");
- return AjaxResult.success("鐢宠寮�绁ㄦ垚鍔�");
+ }
+ List<InvoiceBillDetail> invoiceBillDetails = invoiceManage.getInvoiceBillDetails();
+ if (CollectionUtil.isEmpty(invoiceBillDetails)) {
+ throw new ServiceException("鍟嗗搧鏄庣粏鏃犳暟鎹棤娉曞紑鍙戠エ");
+
+ }
+
+ // 璁板綍鐢宠寮�绁ㄦ棩蹇�
+ recordApplyInvoiceLog(invoiceManage);
+
+ return componentInvoice(invoiceManage.getInvoiceNo(),"FP",invoiceManage,invoiceBillDetails);
+ }
+
+ public AjaxResult componentInvoice(String orderNo, String businessType, InvoiceManage invoiceManage, List<InvoiceBillDetail> invoiceBillDetails) {
+
+ InvoicingVo invoicingVo = new InvoicingVo();
+ Order order = new Order();
+ order.setSalerTaxNum(invoiceManage.getInvoiceSellerCreditCode());
+ order.setSalerTel(invoiceManage.getInvoiceSellerPhone());
+ order.setSalerAddress(invoiceManage.getInvoiceSellerAddress());
+ order.setInvoiceDate(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS));
+ order.setClerk(clerk);
+ order.setInvoiceType("1");
+ order.setPushMode("0");
+ order.setExtensionNumber(extensionNumber);
+
+ order.setOrderNo(orderNo);
+ order.setEmail(invoiceManage.getInvoiceOperatingLicenseEmail());
+ order.setBuyerName(invoiceManage.getInvoiceCompanyName());
+ order.setInvoiceLine(invoiceManage.getInvoiceType());
+ order.setBuyerPhone(invoiceManage.getInvoiceOperatingLicensePhone());
+ order.setBuyerTaxNum(invoiceManage.getInvoiceCreditCode());
+ order.setBuyerTel(invoiceManage.getInvoiceOperatingLicensePhone());
+ if (StringUtils.isNotBlank(invoiceManage.getInvoiceBankNo()) &&
+ StringUtils.isNotBlank(invoiceManage.getInvoiceBankName())) {
+ order.setBuyerAccount(invoiceManage.getInvoiceBankName() + " " + invoiceManage.getInvoiceBankNo());
+ }
+
+ List<InvoiceDetailApi> invoiceDetailList = new ArrayList<>();
+ //鍟嗗搧鏄庣粏
+ for (InvoiceBillDetail billingDetail : invoiceBillDetails) {
+ InvoiceDetailApi invoiceDetail = new InvoiceDetailApi();
+
+ invoiceDetail.setGoodsCode(billingDetail.getGoodsCode());
+ invoiceDetail.setGoodsName(billingDetail.getGoodsName());
+
+ invoiceDetail.setWithTaxFlag(billingDetail.getWithTaxFlag().toString());
+ invoiceDetail.setTaxRate("0.06");
+ invoiceDetail.setUnit("椤�");
+ invoiceDetail.setNum("1");
+ invoiceDetail.setPrice(billingDetail.getPrice().toString()); // 鍒濆浠锋牸涓�0
+ invoiceDetailList.add(invoiceDetail);
+ }
+
+
+ order.setInvoiceDetail(invoiceDetailList);
+ invoicingVo.setOrder(order);
+ String body = JSONObject.toJSONString(invoicingVo);
+
+ // 鏍规嵁涓氬姟绫诲瀷鍔ㄦ�佽缃洖璋冨湴鍧�
+ String urlString = getString(businessType);
+ logger.info("璇锋眰body{}",body);
+ logger.info("璇锋眰鍦板潃{}",urlString);
+ String json = HttpUtil.post(urlString, body);
+
+ if (json == null) {
+ logger.info("寮�绁ㄥけ璐�");
+ return AjaxResult.error("寮�绁ㄥけ璐�");
+ }
+ JSONObject jsonObject = JSONObject.parseObject(json);
+ String code = jsonObject.getString("code");
+ logger.info("寮�绁ㄨ繑鍥瀧}",jsonObject);
+ String invoiceSerialNum = null;
+ InvoiceBusiness record = new InvoiceBusiness();
+ record.setReqData(JSONObject.toJSONString(invoicingVo));
+ record.setResData(json);
+ record.setCreateTime(new Date());
+ if ("0".equals(code)) {
+ String data = jsonObject.getString("data");
+
+ JSONObject dataJson = JSONObject.parseObject(data);
+ invoiceSerialNum = dataJson.getString("invoiceSerialNum");
+ logger.info("寮�绁ㄦ垚鍔熷彂绁ㄥ簭鍒楀彿涓簕}", invoiceSerialNum);
+ record.setInvoiceSerialNum(invoiceSerialNum);
+ record.setInvoiceManageId(invoiceManage.getId());
+ invoiceBusinessService.insertInvoiceBusiness(record);
+ return AjaxResult.success();
+ }
+
+
+ return AjaxResult.error("寮�绁ㄥけ璐�");
+ }
+
+ private @NonNull String getString(String businessType) {
+ String dynamicReturnAddress;
+ if ("FP_PAYABLE".equals(businessType)) {
+ dynamicReturnAddress = returnAddress + "/callback/receipt/payable";
+ } else if ("FP_RECEIVABLE".equals(businessType)) {
+ dynamicReturnAddress = returnAddress + "/callback/receipt/receivable";
+ } else {
+ dynamicReturnAddress = returnAddress + "/callback/receipt";
+ }
+
+ return invoicingAddress + "?businessType=" + businessType + "&returnUrl=" + dynamicReturnAddress;
+ }
+
+ /**
+ * 搴旀敹璐﹀崟鐢宠寮�绁�
+ *
+ * @param invoiceManage 鍙戠エ绠$悊瀵硅薄
+ * @param id 搴旀敹璐﹀崟ID
+ * @return 缁撴灉
+ */
+ @Override
+ public AjaxResult applyReceivableInvoice(InvoiceManage invoiceManage, Integer id) {
+ List<InvoiceBillDetail> invoiceReceivableBillDetails = invoiceManage.getInvoiceBillDetails();
+ if (CollectionUtil.isEmpty(invoiceReceivableBillDetails)) {
+ throw new ServiceException("搴旀敹璐﹀崟鍟嗗搧鏄庣粏鏃犳暟鎹棤娉曞紑鍙戠エ");
+ }
+
+ // 鑾峰彇搴旀敹璐﹀崟淇℃伅
+ ReceivableBillManagement receivableBill = receivableBillManagementMapper.selectReceivableBillManagementById(id);
+ if (receivableBill == null) {
+ throw new ServiceException("搴旀敹璐﹀崟璁板綍涓嶅瓨鍦�");
+ }
+
+ // 鏌ヨ搴旀敹璐﹀崟鐨勫簲缁撶畻閲戦
+ BigDecimal totalAmount = receivableBill.getTotalAmount();
+ if (totalAmount == null || totalAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ throw new ServiceException("搴旀敹璐﹀崟搴旂粨绠楅噾棰濇棤鏁�");
+ }
+
+ // 鏌ヨreceivable_invoice_business琛ㄤ腑鐨勫紑绁ㄩ噾棰�
+ ReceivableInvoiceBusiness query = new ReceivableInvoiceBusiness();
+ query.setHeadId(id);
+ List<ReceivableInvoiceBusiness> existingInvoices = receivableInvoiceBusinessMapper.selectReceivableInvoiceBusinessList(query);
+
+ // 璁$畻宸插紑绁ㄩ噾棰�
+ BigDecimal invoicedAmount = existingInvoices.stream()
+ .map(ReceivableInvoiceBusiness::getInvoicingAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 璁$畻鏈寮�绁ㄩ噾棰�
+ BigDecimal currentInvoiceAmount = invoiceReceivableBillDetails.stream()
+ .map(InvoiceBillDetail::getPrice)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 鏍¢獙寮�绁ㄩ噾棰濅笉鑳借秴杩囧簲缁撶畻閲戦
+ BigDecimal totalInvoicedAmount = invoicedAmount.add(currentInvoiceAmount);
+ if (totalInvoicedAmount.compareTo(totalAmount) > 0) {
+ throw new ServiceException("寮�绁ㄩ噾棰�" + currentInvoiceAmount + "鍔犱笂宸插紑绁ㄩ噾棰�" + invoicedAmount +
+ "瓒呰繃搴旂粨绠楅噾棰�" + totalAmount + "锛屾棤娉曞紑绁�");
+ }
+
+ String noByKey = systemDataNoService.getNoByKey(SystemDataNoEnum.YSFP);
+
+ // 鍦╮eceivable_invoice_business琛ㄤ腑娣诲姞寮�绁ㄦ暟鎹�
+ ReceivableInvoiceBusiness receivableInvoiceBusiness = new ReceivableInvoiceBusiness();
+ receivableInvoiceBusiness.setHeadId(id);
+ receivableInvoiceBusiness.setOrderSn(noByKey); // 浣跨敤noByKey浣滀负orderSn
+ receivableInvoiceBusiness.setInvoiceType("搴旀敹鍙戠エ");
+ receivableInvoiceBusiness.setInvoiceCompanyName(receivableBill.getCustomerName());
+ receivableInvoiceBusiness.setInvoicingAmount(currentInvoiceAmount);
+ receivableInvoiceBusiness.setStatus(0); // 鍒濆鐘舵��
+ receivableInvoiceBusiness.setCreateTime(new java.util.Date());
+
+ // 淇濆瓨鍒皉eceivable_invoice_business琛�
+ receivableInvoiceBusinessMapper.insertReceivableInvoiceBusiness(receivableInvoiceBusiness);
+
+ // 璁板綍搴旀敹璐﹀崟鐢宠寮�绁ㄦ棩蹇�
+ recordReceivableApplyInvoiceLog(receivableBill, invoiceReceivableBillDetails);
+
+ return componentInvoice(noByKey, "FP_RECEIVABLE", invoiceManage, invoiceReceivableBillDetails);
+ }
+
+ /**
+ * 搴斾粯璐﹀崟鐢宠寮�绁�
+ *
+ * @param invoiceManage 鍙戠エ绠$悊瀵硅薄
+ * @param id 搴斾粯璐﹀崟ID
+ * @return 缁撴灉
+ */
+ @Override
+ public AjaxResult applyPayableInvoice(InvoiceManage invoiceManage, Integer id) {
+ List<InvoiceBillDetail> invoiceBillDetails = invoiceManage.getInvoiceBillDetails();
+ if (CollectionUtil.isEmpty(invoiceBillDetails)) {
+ throw new ServiceException("搴斾粯璐﹀崟鍟嗗搧鏄庣粏鏃犳暟鎹棤娉曞紑鍙戠エ");
+ }
+
+ // 鑾峰彇搴斾粯璐﹀崟淇℃伅
+ PayableBillManagement payableBill = payableBillManagementMapper.selectPayableBillManagementById(id);
+ if (payableBill == null) {
+ throw new ServiceException("搴斾粯璐﹀崟璁板綍涓嶅瓨鍦�");
+ }
+
+ // 鏌ヨ搴斾粯璐﹀崟鐨勫簲缁撶畻閲戦
+ BigDecimal totalAmount = payableBill.getTotalAmount();
+ if (totalAmount == null || totalAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ throw new ServiceException("搴斾粯璐﹀崟搴旂粨绠楅噾棰濇棤鏁�");
+ }
+
+ // 鏌ヨpayable_invoice_business琛ㄤ腑鐨勫紑绁ㄩ噾棰�
+ PayableInvoiceBusiness query = new PayableInvoiceBusiness();
+ query.setHeadId(id);
+ List<PayableInvoiceBusiness> existingInvoices = payableInvoiceBusinessMapper.selectPayableInvoiceBusinessList(query);
+
+ // 璁$畻宸插紑绁ㄩ噾棰�
+ BigDecimal invoicedAmount = existingInvoices.stream()
+ .map(PayableInvoiceBusiness::getInvoicingAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 璁$畻鏈寮�绁ㄩ噾棰�
+ BigDecimal currentInvoiceAmount = invoiceBillDetails.stream()
+ .map(InvoiceBillDetail::getPrice)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 鏍¢獙寮�绁ㄩ噾棰濅笉鑳借秴杩囧簲缁撶畻閲戦
+ BigDecimal totalInvoicedAmount = invoicedAmount.add(currentInvoiceAmount);
+ if (totalInvoicedAmount.compareTo(totalAmount) > 0) {
+ throw new ServiceException("寮�绁ㄩ噾棰�" + currentInvoiceAmount + "鍔犱笂宸插紑绁ㄩ噾棰�" + invoicedAmount +
+ "瓒呰繃搴旂粨绠楅噾棰�" + totalAmount + "锛屾棤娉曞紑绁�");
+ }
+
+ String noByKey = systemDataNoService.getNoByKey(SystemDataNoEnum.YFFP);
+
+ // 鍦╬ayable_invoice_business琛ㄤ腑娣诲姞寮�绁ㄦ暟鎹�
+ PayableInvoiceBusiness payableInvoiceBusiness = new PayableInvoiceBusiness();
+ payableInvoiceBusiness.setHeadId(id);
+ payableInvoiceBusiness.setOrderSn(noByKey); // 浣跨敤noByKey浣滀负orderSn
+ payableInvoiceBusiness.setInvoiceType("pc");
+ payableInvoiceBusiness.setInvoiceCompanyName(payableBill.getSupplierName());
+ payableInvoiceBusiness.setInvoicingAmount(currentInvoiceAmount);
+ payableInvoiceBusiness.setStatus(0); // 鍒濆鐘舵��
+ payableInvoiceBusiness.setCreateTime(new java.util.Date());
+
+ // 淇濆瓨鍒皃ayable_invoice_business琛�
+ payableInvoiceBusinessMapper.insertPayableInvoiceBusiness(payableInvoiceBusiness);
+
+ recordPayableApplyInvoiceLog(payableBill,invoiceBillDetails);
+ // 璋冪敤鐜版湁鐨� componentInvoice 鎺ュ彛
+ return componentInvoice(noByKey, "FP_PAYABLE", invoiceManage, invoiceBillDetails);
+ }
+
+
+
+ /**
+ * 璁板綍搴旀敹璐﹀崟鐢宠寮�绁ㄦ棩蹇�
+ *
+ * @param receivableBill 搴旀敹璐﹀崟瀵硅薄
+ * @param invoiceBillDetails 搴旀敹璐﹀崟鍟嗗搧鏄庣粏鍒楄〃
+ */
+ private void recordReceivableApplyInvoiceLog(ReceivableBillManagement receivableBill,List<InvoiceBillDetail> invoiceBillDetails) {
+ try {
+ InvoiceManageLog log = new InvoiceManageLog();
+ log.setInvoiceManageId(receivableBill.getId());
+ log.setOperator(SecurityUtils.getUsername());
+ log.setOperationTime(new java.util.Date());
+
+ // 鏋勫缓鎿嶄綔鎻忚堪锛屽寘鍚紑绁ㄩ噾棰濄�佸叧鑱斿簲鏀惰处鍗曠紪鍙峰拰瀵瑰簲寮�绁ㄩ噾棰�
+ StringBuilder descBuilder = new StringBuilder();
+ descBuilder.append("搴旀敹璐﹀崟鐢宠寮�绁�: ");
+
+ if (receivableBill.getTotalAmount() != null) {
+ descBuilder.append("璐﹀崟鎬婚噾棰�=").append(receivableBill.getTotalAmount()).append("; ");
+ }
+ // 鑾峰彇鍏宠仈搴旀敹璐﹀崟淇℃伅
+ if (invoiceBillDetails != null && !invoiceBillDetails.isEmpty()) {
+
+ for (InvoiceBillDetail detail : invoiceBillDetails) {
+ if (detail.getGoodsName() != null) {
+ descBuilder.append("鍟嗗搧鍚嶇О=").append(detail.getGoodsName());
+ }
+ if (detail.getPrice() != null) {
+ descBuilder.append(", 鍟嗗搧閲戦=").append(detail.getPrice());
+ }
+ descBuilder.append("; ");
+ }
+ }
+
+ log.setOperationDesc(descBuilder.toString());
+ log.setCreateTime(new java.util.Date());
+
+ invoiceManageLogService.insertInvoiceManageLog(log);
+ } catch (Exception e) {
+ logger.error("璁板綍搴旀敹璐﹀崟鐢宠寮�绁ㄦ棩蹇楀け璐�: {}", e.getMessage());
+ }
+ }
+
+ /**
+ * 璁板綍搴斾粯璐﹀崟鐢宠寮�绁ㄦ棩蹇�
+ *
+ * @param payableBill 搴斾粯璐﹀崟瀵硅薄
+ * @param invoiceBillDetails 搴斾粯璐﹀崟鍟嗗搧鏄庣粏鍒楄〃
+ */
+ private void recordPayableApplyInvoiceLog(PayableBillManagement payableBill, List<InvoiceBillDetail> invoiceBillDetails) {
+ try {
+ InvoiceManageLog log = new InvoiceManageLog();
+ log.setInvoiceManageId(payableBill.getId());
+ log.setOperator(SecurityUtils.getUsername());
+ log.setOperationTime(new java.util.Date());
+
+ // 鏋勫缓鎿嶄綔鎻忚堪锛屽寘鍚紑绁ㄩ噾棰濄�佸叧鑱斿簲浠樿处鍗曠紪鍙峰拰瀵瑰簲寮�绁ㄩ噾棰�
+ StringBuilder descBuilder = new StringBuilder();
+ descBuilder.append("搴斾粯璐﹀崟鐢宠寮�绁�: ");
+
+ if (payableBill.getTotalAmount() != null) {
+ descBuilder.append("璐﹀崟鎬婚噾棰�=").append(payableBill.getTotalAmount()).append("; ");
+ }
+
+ // 鑾峰彇鍏宠仈搴斾粯璐﹀崟淇℃伅
+ if (invoiceBillDetails != null && !invoiceBillDetails.isEmpty()) {
+ for (InvoiceBillDetail detail : invoiceBillDetails) {
+ if (detail.getGoodsName() != null) {
+ descBuilder.append("鍟嗗搧鍚嶇О=").append(detail.getGoodsName());
+ }
+ if (detail.getPrice() != null) {
+ descBuilder.append(", 鍟嗗搧閲戦=").append(detail.getPrice());
+ }
+ descBuilder.append("; ");
+ }
+ }
+
+ log.setOperationDesc(descBuilder.toString());
+ log.setCreateTime(new java.util.Date());
+
+ invoiceManageLogService.insertInvoiceManageLog(log);
+ } catch (Exception e) {
+ logger.error("璁板綍搴斾粯璐﹀崟鐢宠寮�绁ㄦ棩蹇楀け璐�: {}", e.getMessage());
+ }
}
/**
@@ -313,8 +694,7 @@
*
* @param invoiceManage 鍙戠エ绠$悊瀵硅薄
*/
- private void recordApplyInvoiceLog(InvoiceManage invoiceManage)
- {
+ private void recordApplyInvoiceLog(InvoiceManage invoiceManage) {
try {
InvoiceManageLog log = new InvoiceManageLog();
log.setInvoiceManageId(invoiceManage.getId());
@@ -351,4 +731,87 @@
logger.error("璁板綍鐢宠寮�绁ㄦ棩蹇楀け璐�: {}", e.getMessage());
}
}
+
+ @Override
+ public void invoicingSuccess(CallbackReceiptDto callbackReceiptDto) {
+ InvoiceManage invoiceBusiness = invoiceManageMapper.selectInvoiceManageLogByOrderNo(callbackReceiptDto.getOrderno());
+ if (invoiceBusiness == null) {
+ return;
+ }
+ String content = callbackReceiptDto.getContent();
+ if (StringUtils.isEmpty(content)) {
+ return;
+ }
+ JSONObject jsonObject = JSONObject.parseObject(content);
+
+ int c_status = Integer.parseInt(jsonObject.getString("c_status"));
+ invoiceBusiness.setStatus(c_status);
+ if (c_status == 1) {
+ String invoiceNumStr = jsonObject.getString("c_fphm");
+
+ // 鏅�氬彂绁� - 鏇存柊invoice_manage琛�
+ InvoiceManage invoiceManageUpdate = new InvoiceManage();
+ invoiceManageUpdate.setInvoiceNo(invoiceNumStr);
+ invoiceManageUpdate.setId(invoiceBusiness.getId());
+ invoiceManageUpdate.setStatus(2);
+ invoiceManageMapper.updateById(invoiceManageUpdate);
+ }
+ }
+
+ @Override
+ public void invoicingSuccessPayable(CallbackReceiptDto callbackReceiptDto) {
+ InvoiceManage invoiceBusiness = invoiceManageMapper.selectInvoiceManageLogByOrderNo(callbackReceiptDto.getOrderno());
+ if (invoiceBusiness == null) {
+ return;
+ }
+ String content = callbackReceiptDto.getContent();
+ if (StringUtils.isEmpty(content)) {
+ return;
+ }
+ JSONObject jsonObject = JSONObject.parseObject(content);
+
+ int c_status = Integer.parseInt(jsonObject.getString("c_status"));
+ invoiceBusiness.setStatus(c_status);
+ if (c_status == 1) {
+ String invoiceNumStr = jsonObject.getString("c_fphm");
+
+ // 搴斾粯璐﹀崟 - 鏇存柊payable_invoice_business琛�
+ PayableInvoiceBusiness payableInvoiceBusiness = payableInvoiceBusinessMapper.selectPayableInvoiceBusinessById(invoiceBusiness.getId());
+ if (payableInvoiceBusiness != null) {
+ payableInvoiceBusiness.setInvoiceSerialNum(invoiceNumStr);
+ payableInvoiceBusiness.setStatus(2);
+ payableInvoiceBusinessMapper.updateById(payableInvoiceBusiness);
+ }
+ }
+ }
+
+ @Override
+ public void invoicingSuccessReceivable(CallbackReceiptDto callbackReceiptDto) {
+ InvoiceManage invoiceBusiness = invoiceManageMapper.selectInvoiceManageLogByOrderNo(callbackReceiptDto.getOrderno());
+ if (invoiceBusiness == null) {
+ return;
+ }
+ String content = callbackReceiptDto.getContent();
+ if (StringUtils.isEmpty(content)) {
+ return;
+ }
+ JSONObject jsonObject = JSONObject.parseObject(content);
+
+ int c_status = Integer.parseInt(jsonObject.getString("c_status"));
+ invoiceBusiness.setStatus(c_status);
+ if (c_status == 1) {
+ String invoiceNumStr = jsonObject.getString("c_fphm");
+
+ // 搴旀敹璐﹀崟 - 鏇存柊receivable_invoice_business琛�
+ ReceivableInvoiceBusiness receivableInvoiceBusiness = receivableInvoiceBusinessMapper.selectReceivableInvoiceBusinessById(invoiceBusiness.getId());
+ if (receivableInvoiceBusiness != null) {
+ receivableInvoiceBusiness.setInvoiceSerialNum(invoiceNumStr);
+ receivableInvoiceBusiness.setStatus(2);
+ receivableInvoiceBusinessMapper.updateById(receivableInvoiceBusiness);
+ }
+ }
+ }
}
+
+
+
--
Gitblit v1.8.0