From fdaee3c82a8009abbac5920c79b006a7a092d3fc Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期四, 29 一月 2026 10:28:30 +0800
Subject: [PATCH] 新增申请开票代码

---
 service/src/main/java/com/ruoyi/cwgl/service/impl/InvoiceManageServiceImpl.java |  252 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 247 insertions(+), 5 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 72c030f..baaf78d 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,6 +16,7 @@
 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;
@@ -31,8 +33,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;
@@ -59,6 +59,7 @@
     @Resource
     private IInvoiceManageLogService invoiceManageLogService;
 
+
     @Autowired
     private ISystemDataNoService systemDataNoService;
     @Autowired
@@ -75,6 +76,15 @@
     private String returnAddress;
     @Autowired
     private IInvoiceBusinessService invoiceBusinessService;
+
+    @Resource
+    private ReceivableInvoiceBusinessMapper receivableInvoiceBusinessMapper;
+    @Resource
+    private ReceivableBillManagementMapper receivableBillManagementMapper;
+    @Resource
+    private PayableInvoiceBusinessMapper payableInvoiceBusinessMapper;
+    @Resource
+    private PayableBillManagementMapper payableBillManagementMapper;
     /**
      * 鏌ヨ鍙戠エ绠$悊
      *
@@ -386,8 +396,8 @@
         for (InvoiceBillDetail billingDetail : invoiceBillDetails) {
             InvoiceDetailApi invoiceDetail = new InvoiceDetailApi();
 
-            invoiceDetail.setGoodsCode(invoiceDetail.getGoodsCode());
-            invoiceDetail.setGoodsName(invoiceDetail.getGoodsName());
+            invoiceDetail.setGoodsCode(billingDetail.getGoodsCode());
+            invoiceDetail.setGoodsName(billingDetail.getGoodsName());
 
             invoiceDetail.setWithTaxFlag(billingDetail.getWithTaxFlag().toString());
             invoiceDetail.setTaxRate("0.06");
@@ -401,7 +411,10 @@
         order.setInvoiceDetail(invoiceDetailList);
         invoicingVo.setOrder(order);
         String body = JSONObject.toJSONString(invoicingVo);
-        String json = HttpUtil.post(invoicingAddress + "?businessType=" + businessType + "&returnUrl=" + returnAddress, body);
+        String urlString = invoicingAddress + "?businessType=" + businessType + "&returnUrl=" + returnAddress;
+        logger.info("璇锋眰body{}",body);
+        logger.info("璇锋眰鍦板潃{}",urlString);
+        String json = HttpUtil.post(urlString, body);
 
         if (json == null) {
             logger.info("寮�绁ㄥけ璐�");
@@ -432,6 +445,235 @@
     }
 
     /**
+     * 搴旀敹璐﹀崟鐢宠寮�绁�
+     *
+     * @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());
+        }
+    }
+
+    /**
      * 璁板綍鐢宠寮�绁ㄦ棩蹇�
      *
      * @param invoiceManage 鍙戠エ绠$悊瀵硅薄

--
Gitblit v1.8.0