From 93f8c736fd50a80a72d633e888e2d65904bcd7fc Mon Sep 17 00:00:00 2001
From: sen <sen@qq.com>
Date: 星期日, 01 二月 2026 18:34:27 +0800
Subject: [PATCH] 修改
---
service/src/main/java/com/ruoyi/cwgl/service/impl/InvoiceManageServiceImpl.java | 243 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 241 insertions(+), 2 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 68258df..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;
/**
* 鏌ヨ鍙戠エ绠$悊
*
@@ -435,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