From f5a22deb0ae1c68875355de2f02224464e6cc325 Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期一, 02 二月 2026 16:19:27 +0800
Subject: [PATCH] 新增日志

---
 service/src/main/java/com/ruoyi/cwgl/service/impl/InvoiceManageServiceImpl.java |  343 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 333 insertions(+), 10 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 f70fb1d..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,5 +1,6 @@
 package com.ruoyi.cwgl.service.impl;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 import cn.hutool.core.collection.CollectionUtil;
@@ -15,8 +16,11 @@
 import com.ruoyi.common.utils.StringUtils;
 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;
@@ -30,8 +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.mapper.InvoiceBillDetailMapper;
 import com.ruoyi.cwgl.service.IInvoiceManageService;
 import com.ruoyi.cwgl.service.IInvoiceManageLogService;
 import com.ruoyi.common.core.text.Convert;
@@ -53,7 +55,11 @@
     private InvoiceBillDetailMapper invoiceBillDetailMapper;
 
     @Resource
+    private IInvoiceBillDetailService invoiceBillDetailService;
+
+    @Resource
     private IInvoiceManageLogService invoiceManageLogService;
+
 
     @Autowired
     private ISystemDataNoService systemDataNoService;
@@ -69,7 +75,17 @@
     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;
     /**
      * 鏌ヨ鍙戠エ绠$悊
      *
@@ -176,7 +192,11 @@
     @Override
     public int updateInvoiceManage(InvoiceManage invoiceManage) {
         invoiceManage.setUpdateTime(DateUtils.getNowDate());
+        // 鍒犻櫎鍘熸湁鐨勫彂绁ㄦ槑缁�
         invoiceManageMapper.deleteInvoiceDetailByInvoiceManageId(invoiceManage.getId());
+        // 鍒犻櫎鍘熸湁鐨勫彂绁ㄤ笟鍔″晢鍝佹槑缁�
+        invoiceBillDetailService.deleteInvoiceBillDetailByInvoiceManageId(invoiceManage.getId());
+        // 鎻掑叆鏂扮殑鏄庣粏璁板綍
         insertInvoiceDetail(invoiceManage);
         int rows = invoiceManageMapper.updateInvoiceManage(invoiceManage);
 
@@ -265,7 +285,7 @@
                 invoiceManageMapper.batchInvoiceDetail(list);
             }
         }
-        
+
         // 鏂板鍙戠エ涓氬姟鍟嗗搧鏄庣粏淇℃伅
         List<InvoiceBillDetail> invoiceBillDetails = invoiceManage.getInvoiceBillDetails();
         if (StringUtils.isNotNull(invoiceBillDetails)) {
@@ -377,8 +397,8 @@
         for (InvoiceBillDetail billingDetail : invoiceBillDetails) {
             InvoiceDetailApi invoiceDetail = new InvoiceDetailApi();
 
-
-            invoiceDetail.setGoodsName(invoiceDetail.getGoodsName());
+            invoiceDetail.setGoodsCode(billingDetail.getGoodsCode());
+            invoiceDetail.setGoodsName(billingDetail.getGoodsName());
 
             invoiceDetail.setWithTaxFlag(billingDetail.getWithTaxFlag().toString());
             invoiceDetail.setTaxRate("0.06");
@@ -392,7 +412,12 @@
         order.setInvoiceDetail(invoiceDetailList);
         invoicingVo.setOrder(order);
         String body = JSONObject.toJSONString(invoicingVo);
-        String json = HttpUtil.post(invoicingAddress + "?businessType=" + businessType + "&returnUrl=" + returnAddress, body);
+
+        // 鏍规嵁涓氬姟绫诲瀷鍔ㄦ�佽缃洖璋冨湴鍧�
+        String urlString = getString(businessType);
+        logger.info("璇锋眰body{}",body);
+        logger.info("璇锋眰鍦板潃{}",urlString);
+        String json = HttpUtil.post(urlString, body);
 
         if (json == null) {
             logger.info("寮�绁ㄥけ璐�");
@@ -400,7 +425,7 @@
         }
         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));
@@ -414,9 +439,254 @@
             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());
+        }
     }
 
     /**
@@ -477,15 +747,68 @@
         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(invoiceBusiness);
+            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