From b58c3bf0e4c9bf4327b749040c3490fd2d0970b2 Mon Sep 17 00:00:00 2001
From: 李白 <7387820+wjli_13439841639@user.noreply.gitee.com>
Date: 星期四, 04 六月 2026 09:45:40 +0800
Subject: [PATCH] 开票信息修改

---
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/SaleCreditController.java |  168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 163 insertions(+), 5 deletions(-)

diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/SaleCreditController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/SaleCreditController.java
index fffadb8..f8440ec 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/SaleCreditController.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/SaleCreditController.java
@@ -2,6 +2,7 @@
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -16,6 +17,7 @@
 import com.by4cloud.platformx.business.service.*;
 import com.by4cloud.platformx.business.vo.ContractOutBoundVo;
 import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
 import com.by4cloud.platformx.common.excel.annotation.ResponseExcel;
 import com.by4cloud.platformx.common.log.annotation.SysLog;
 import com.by4cloud.platformx.common.security.annotation.Inner;
@@ -28,6 +30,7 @@
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -119,6 +122,8 @@
         if(contractOutBoundList.size()==0){
             return R.failed("璇烽�夋嫨鍑哄簱鍗曪紒");
         }
+        //寮�绁ㄤ箣鍓嶏紝鍏堣褰曞紑绁ㄤ俊鎭�
+        //1.鍑哄簱鍗曡繘琛屾爣璁帮紝灏嗗嚭搴撳崟鍙戠エ璁板綍id濉叆銆傚皢InvoiceSatus=1寮�绁ㄤ腑銆�
         String outBoundIds = "";
         for(ContractOutBoundVo vo : contractOutBoundList){
             if(StrUtil.isEmpty(outBoundIds)){
@@ -140,12 +145,14 @@
             outBound.setInvoiceSatus(1);
             contractOutBoundService.updateById(outBound);
         }
+        //缁撶畻涓褰曞嚭搴撳崟ids.
         saleCredit.setOutBoundIds(outBoundIds);
+        //鐢熸垚缁撶畻鍗曞彿
         saleCredit.setEntrustCode("JsNo"+System.currentTimeMillis());
         saleCreditService.updateById(saleCredit);
 
         //鐢熸垚vo
-        InvoicingVo invoicingVo = invoiceService.toGetByCompareByVo(saleCredit,contractOutBoundList);
+       /* InvoicingVo invoicingVo = invoiceService.toGetByCompareByVo(saleCredit,contractOutBoundList);
         try {
             Map<String, Object> objectMap = invoiceService.toKaipiao(invoicingVo);
             Boolean success = (Boolean) objectMap.get("success");
@@ -157,15 +164,14 @@
                 //StringBuffer errMsg = new StringBuffer();
                 BipResVo bipResVo = bipYsService.sendBIPYs(saleCredit);
                 if (!bipResVo.getCode().equals("200")) {
-                    /*if (StrUtil.isNotEmpty(errMsg)) {
+                    *//*if (StrUtil.isNotEmpty(errMsg)) {
                         errMsg.append(",");
                     }
-                    errMsg.append(saleCredit.getCreditCodeB()+ "搴旀敹鍙戠エ鎺ㄩ�佸け璐�:" + bipResVo.getMessage());*/
+                    errMsg.append(saleCredit.getCreditCodeB()+ "搴旀敹鍙戠エ鎺ㄩ�佸け璐�:" + bipResVo.getMessage());*//*
                     return R.failed("寮�绁ㄦ垚鍔燂紝鎺ㄩ�乥ip澶辫触锛宔rr:" + bipResVo.getMessage());
                 }else{
                     return R.ok("寮�绁ㄦ垚鍔�,鎺ㄩ�乥ig鎴愬姛锛�");
                 }
-
             }else{
                 saleCredit.setStatus(2);
                 saleCreditService.updateById(saleCredit);
@@ -176,11 +182,158 @@
             saleCredit.setStatus(3);
             saleCreditService.updateById(saleCredit);
             return R.failed("寮�绁ㄥけ璐ワ紒");
-        }
+        }*/
        //return R.ok("閿�鍞寕璐︾敓鎴愶紒");
+
+
+        //鍑哄簱鍗曞凡寮�绁�
+        List<ContractOutBound> contractOutBounds = contractOutBoundService.list(new LambdaQueryWrapper<ContractOutBound>()
+                .eq(ContractOutBound::getSaleCreditId,saleCredit.getId())
+        );
+        for(ContractOutBound contractOutBound : contractOutBounds){
+            contractOutBound.setInvoiceSatus(2);
+        }
+        contractOutBoundService.updateBatchById(contractOutBounds);
+
+        //寮�绁ㄦ垚鍔�
+        //寮�绁ㄨ褰曞崟钃濈エ淇℃伅瀛樺偍
+        saleCredit.setBlueResultStatus(1);
+        saleCredit.setInvoiceRemark("寮�绁ㄦ垚鍔燂紒");
+        saleCredit.setBlueInvoiceTime(DateTime.now());
+        saleCreditService.updateById(saleCredit);
+
+        //鐩稿叧鍚堝悓閲戦鍜屽紑绁ㄧ姸鎬佽繘琛屼慨鏀广��
+        Contract contract = contractService.getById(saleCredit.getContractId());
+        String billingStatus = contract.getBillingStatus();
+
+        if(contract.getBillingAmout()==null){
+            contract.setBillingAmout(saleCredit.getTotalAmount());
+        }else{
+            contract.setBillingAmout(contract.getBillingAmout().add(saleCredit.getTotalAmount()));
+        }
+
+        int res = contract.getAmount().compareTo(contract.getBillingAmout());
+
+        if("2".equals(billingStatus)) {
+            if (res == 0) {
+                contract.setBillingStatus("3");
+            } else if (res > 0) {
+                contract.setBillingStatus("2");
+            } else {
+                return R.failed("宸蹭粯閲戦涓嶈兘澶т簬鎬婚噾棰濓紒");
+            }
+        }
+
+        contractService.updateById(contract);
+        return R.ok("寮�绁ㄦ垚鍔燂紝鎺ㄩ�乥ip鎴愬姛锛�");
     }
 
+    /**
+     * 鎷兼帴閿�鍞寕璐�
+     * @param contract1 閿�鍞寕璐�
+     * @return R
+     */
+    @Operation(summary = "鑾峰彇鍙戠エ鍒楄〃" , description = "鑾峰彇鍙戠エ鍒楄〃" )
+    @SysLog("鑾峰彇鍙戠エ鍒楄〃" )
+    @GetMapping("/getInvoices")
+    @PreAuthorize("@pms.hasPermission('business_saleCredit_view')" )
+    public R getInvoices(@ParameterObject Contract contract1) {
+        Contract contract = contractService.getById(contract1.getId());
+        if(contract==null){
+            return R.failed("鍚堝悓id閿欒");
+        }
+        List<SaleCredit> saleCredits = saleCreditService.list(new LambdaQueryWrapper<SaleCredit>()
+                .eq(SaleCredit::getContractId,contract1.getId())
+                .orderByAsc(BaseModel::getCreateTime)
+        );
+        for(SaleCredit saleCredit : saleCredits){
+            if(saleCredit.getRedResultStatus()!=null && saleCredit.getRedResultStatus()>0){//璇存槑宸插紑绾㈢エ
+                saleCredit.setBlueResultStatus(0);
+                if(saleCredit.getRedResultStatus()==1){
+                    saleCredit.setInvoiceRemark("寮�绾㈢エ鎴愬姛锛�");
+                    saleCredit.setInvoicRedUrl("绾㈢エurl");
+                }else{
+                    //鏄剧ず saleCredit.getInvoiceRemark();
+                }
+            }else{
+                if(saleCredit.getBlueResultStatus()==1){
+                    saleCredit.setInvoiceRemark("寮�钃濈エ鎴愬姛锛�");
+                    saleCredit.setInvoicUrl("钃濈エurl");
+                }else if(saleCredit.getBlueResultStatus()==2){
+                    //鏄剧ず saleCredit.getInvoiceRemark();
+                }
+            }
+        }
+        return R.ok(saleCredits);
+    }
 
+    /**
+     * 鎷兼帴閿�鍞寕璐�
+     * @param saleCredit1 閿�鍞寕璐�
+     * @return R
+     */
+    @Operation(summary = "绾㈠啿鍙戠エ" , description = "绾㈠啿鍙戠エ" )
+    @SysLog("绾㈠啿鍙戠エ" )
+    @PostMapping("/toRedStamp")
+    @PreAuthorize("@pms.hasPermission('business_saleCredit_edit')" )
+    public R toRedStamp(@RequestBody SaleCredit saleCredit1) {
+        if(saleCredit1.getId()==null){
+            return R.failed("閿�鍞寕璐d涓嶈兘涓虹┖锛�");
+        }
+        SaleCredit saleCredit = saleCreditService.getById(saleCredit1.getId());
+        if(saleCredit==null){
+            return R.failed("閿�鍞寕璐d涓嶈兘涓虹┖锛�");
+        }
+
+        /*try {
+            Map<String, Object> map = invoiceService.toRedTicket(saleCredit);
+            Boolean success = (Boolean) map.get("success");
+            if(success){
+                return R.ok("绾㈠瓧寮�绁ㄦ垚鍔�");
+            }else {
+                return R.failed((String) map.get("message"));
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            return R.failed("绾㈠瓧寮�绁ㄥけ璐�");
+        }*/
+
+
+        //鍑哄簱鍗曟仮澶嶅埌鏈紑绁ㄧ姸鎬�
+        List<ContractOutBound> outBoundList = contractOutBoundService.list(new LambdaQueryWrapper<ContractOutBound>()
+                .eq(ContractOutBound::getSaleCreditId,saleCredit.getId())
+        );
+        for(ContractOutBound outBound : outBoundList){
+            outBound.setInvoiceSatus(0);
+            outBound.setSaleCreditId(0l);
+        }
+        contractOutBoundService.updateBatchById(outBoundList);
+
+        saleCredit.setRedInvoiceTime(DateTime.now());
+        saleCredit.setRedResultStatus(1);
+        saleCredit.setInvoiceRemark("寮�绾㈢エ鎴愬姛锛�");
+        saleCreditService.updateById(saleCredit);
+
+
+        //鍚堝悓宸插紑绁ㄩ噾棰濆拰鐘舵�佽繕鍘�
+        Contract contract = contractService.getById(saleCredit.getContractId());
+        String billingStatus = contract.getBillingStatus();
+        BigDecimal bill = contract.getBillingAmout() == null ? BigDecimal.ZERO : contract.getBillingAmout();
+        BigDecimal credit = saleCredit.getTotalAmount() == null ? BigDecimal.ZERO : saleCredit.getTotalAmount();
+        BigDecimal diff = bill.subtract(credit);
+        int res = diff.compareTo(BigDecimal.ZERO);
+
+        if("3".equals(billingStatus)){
+            if(res>=0){
+                contract.setBillingStatus("2");
+                contract.setBillingAmout(BigDecimal.ZERO);
+            }else{
+                return R.failed("宸插紑绁ㄩ噾棰濊礋鏁版姤閿欙紒");
+            }
+        }
+        contractService.updateById(contract);
+        return R.ok("绾㈠啿寮�绁ㄦ垚鍔燂紒");
+    }
 
 
 
@@ -234,23 +387,28 @@
                     ContractOutBoundVo vo = new ContractOutBoundVo();
                     BeanUtil.copyProperties(outBound,vo);
                     Product product = productService.getOne(new LambdaQueryWrapper<Product>().eq(Product::getErpCode,outBound.getSubjectMatterCode()).last("limit 1"));
+                    Product productP = productService.getOne(new LambdaQueryWrapper<Product>().eq(Product::getId,product.getParentId()).last("limit 1"));
 
                     if(product!=null){
                         vo.setProductId(product.getId());
+                        vo.setInvoiceName("*"+product.getTaxClass()+"*" + (productP!=null?productP.getProductName():"") + "*");
                         vo.setTaxClass(product.getTaxClass());
                         vo.setTaxCode(product.getTaxCode());
                         vo.setTaxRate(product.getTaxRate());
                     }
+
                     ContractSubjectMatter matter = contractSubjectMatterService.getOne(new LambdaQueryWrapper<ContractSubjectMatter>()
                             .eq(ContractSubjectMatter::getContractId,contract.getId())
                             .eq(ContractSubjectMatter::getMaterialCode,outBound.getSubjectMatterCode())
                             .last("limit 1")
                     );
+
                     if(matter!=null){
                         vo.setSpecification(matter.getSpecification());
                         vo.setUnit(matter.getUnit());
                         vo.setUnitPrice(matter.getUnitPrice());
                     }
+
                     list.add(vo);
                 }
                 saleCredit.setContractOutBoundList(list);

--
Gitblit v1.9.1