From dc3a872dd2f2cfcddd3db4e722efa376705482ec Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期一, 05 一月 2026 16:04:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/hxsj' into hxsj

---
 src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java         |    2 +
 src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java                  |    5 ++
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java |   33 ++++++++++++++++
 src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java    |   31 +++++++++++++++
 src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml                  |    4 ++
 src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java                    |    5 ++
 6 files changed, 79 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index 51beffd..7370882 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.purchase.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -11,6 +12,8 @@
 import com.ruoyi.purchase.dto.PurchaseLedgerDto;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.purchase.service.IPurchaseLedgerService;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.service.ISalesLedgerProductService;
 import com.ruoyi.sales.service.ISalesLedgerService;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -19,6 +22,7 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 閲囪喘鍙拌处Controller
@@ -33,6 +37,7 @@
     private IPurchaseLedgerService purchaseLedgerService;
 
     private ISalesLedgerService salesLedgerService;
+    private ISalesLedgerProductService salesLedgerProductService;
 
     /**
      * 鏌ヨ閲囪喘鍙拌处鍒楄〃
@@ -78,6 +83,32 @@
         return toAjax(purchaseLedgerService.addOrEditPurchase(purchaseLedgerDto));
     }
     /**
+     * 鏂板閲囪喘妯℃澘
+     */
+    @PostMapping("/addPurchaseTemplate")
+    public AjaxResult addPurchaseTemplate(@RequestBody PurchaseLedgerDto purchaseLedgerDto) throws IOException {
+        return toAjax(purchaseLedgerService.addPurchaseTemplate(purchaseLedgerDto));
+    }
+    /**
+     * 鏌ヨ閲囪喘妯℃澘
+     */
+    @GetMapping("/getPurchaseTemplateList")
+    public AjaxResult getPurchaseTemplateList() {
+        IPage<PurchaseLedgerDto> purchaseLedgerDtoIPage = purchaseLedgerService.selectPurchaseLedgerListPage(new Page(1, -1), new PurchaseLedgerDto());
+        List<PurchaseLedgerDto> purchaseLedgers = purchaseLedgerDtoIPage.getRecords();
+        purchaseLedgers = purchaseLedgers.stream().filter(purchaseLedger -> purchaseLedger.getApprovalStatus() == 3).collect(Collectors.toList());
+
+        purchaseLedgers.forEach(purchaseLedgerDto -> {
+            LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedgerDto.getId());
+            List<SalesLedgerProduct> list = salesLedgerProductService.list(queryWrapper);
+            if (!list.isEmpty()) {
+                purchaseLedgerDto.setProductData(list);
+            }
+        });
+        return AjaxResult.success(purchaseLedgers);
+    }
+    /**
      * 淇敼閲囪喘鍙拌处瀹℃壒鐘舵��
      */
     @PostMapping("/updateApprovalStatus")
diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
index 5d56ac1..4808080 100644
--- a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -187,5 +187,8 @@
     private String paymentMethod;
     @ApiModelProperty("瀹℃壒鐘舵��")
     private Integer approvalStatus;
-
+    @ApiModelProperty(value = "妯℃澘鍚嶇О")
+    private String templateName;
+    @ApiModelProperty(value = "瀹℃壒浜篿d")
+    private Integer approverId;
 }
diff --git a/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java b/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
index 06b7a96..838976d 100644
--- a/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
+++ b/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -153,4 +153,9 @@
     @ApiModelProperty("瀹℃壒鐘舵��")
     private Integer approvalStatus;
 
+    @ApiModelProperty(value = "妯℃澘鍚嶇О")
+    private String templateName;
+    @ApiModelProperty(value = "瀹℃壒浜篿d")
+    private Integer approverId;
+
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
index 3979810..dfcbfaf 100644
--- a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
+++ b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -39,4 +39,6 @@
     List<InvoiceRegistrationProduct> getProductBySalesNo(Long id);
 
     String getPurchaseNo();
+
+    int addPurchaseTemplate(PurchaseLedgerDto purchaseLedgerDto);
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index 61ccf52..6999852 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -109,7 +109,40 @@
         }
         return purchaseLedgerMapper.selectList(queryWrapper);
     }
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int addPurchaseTemplate(PurchaseLedgerDto purchaseLedgerDto) {
+        //褰曞叆浜�
+        SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
 
+        SupplierManage supplierManage = supplierManageMapper.selectById(purchaseLedgerDto.getSupplierId());
+
+        PurchaseLedger purchaseLedger = new PurchaseLedger();
+        purchaseLedgerDto.setApprovalStatus(3);
+        BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if(ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
+            purchaseLedger.setTenantId(loginUser.getTenantId());
+        }
+        purchaseLedger.setSupplierName(supplierManage.getSupplierName());
+        purchaseLedger.setRecorderName(sysUser.getNickName());
+        purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
+        purchaseLedger.setPurchaseContractNumber("11111");
+        purchaseLedger.setEntryDate(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()));
+        purchaseLedgerMapper.insert(purchaseLedger);
+
+        // 4. 澶勭悊瀛愯〃鏁版嵁
+        List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData();
+        if (productList != null && !productList.isEmpty()) {
+            productList.forEach(product -> {
+                product.setSalesLedgerId(purchaseLedger.getId());
+                product.setType(purchaseLedgerDto.getType());
+            });
+            productList.forEach(salesLedgerProductMapper::insert);
+        }
+
+        return 1;
+    }
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws IOException {
diff --git a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
index 464d77f..8eb9370 100644
--- a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
+++ b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -14,13 +14,17 @@
         pl.id,
         pl.purchase_contract_number ,
         pl.sales_contract_no,
+        pl.supplier_id,
         pl.supplier_name,
         pl.project_name,
         pl.contract_amount,
         sum(pr.tickets_amount)as receipt_payment_amount,
         pl.contract_amount-sum(pr.tickets_amount) AS unReceipt_payment_amount,
         pl.entry_date,
+        pl.recorder_id,
         pl.recorder_name,
+        pl.template_name,
+        pl.approver_id,
         sm.is_white,
         pl.approval_status,
         pl.payment_method

--
Gitblit v1.9.3