From ab6d5bfea26aebbb9d7bbc191781521abad61f5b Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期五, 24 四月 2026 17:35:14 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_天津_阳光彩印' into dev_天津_阳光彩印

---
 src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java           |    2 
 src/main/java/com/ruoyi/production/dto/MaterialInfoDto.java                           |    4 
 src/main/resources/mapper/sales/SalesLedgerProductMapper.xml                          |    2 
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |    4 
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java          |  281 ++++++++++++++++++++++++++++------------------
 src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java  |    2 
 src/main/java/com/ruoyi/basic/pojo/SupplierManage.java                                |    2 
 src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java             |    6 
 src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml                      |    4 
 9 files changed, 184 insertions(+), 123 deletions(-)

diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
index 63eb8ac..07da344 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -83,7 +83,7 @@
 //        String approveID = today + formattedCount;
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
         ApproveProcess approveProcess = new ApproveProcess();
-        String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "approve_id");
+        String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "CGSP");
         approveProcess.setApproveId(no);
         approveProcess.setApproveUser(sysUser.getUserId());
         approveProcess.setApproveUserName(sysUser.getNickName());
diff --git a/src/main/java/com/ruoyi/basic/pojo/SupplierManage.java b/src/main/java/com/ruoyi/basic/pojo/SupplierManage.java
index 8588c3e..7e09e75 100644
--- a/src/main/java/com/ruoyi/basic/pojo/SupplierManage.java
+++ b/src/main/java/com/ruoyi/basic/pojo/SupplierManage.java
@@ -22,7 +22,7 @@
 
     @ApiModelProperty(value = "渚涘簲鍟嗙被鍨�")
     @TableField(value = "supplier_type")
-    @Excel(name = "渚涘簲鍟嗗悕绉�")
+    @Excel(name = "渚涘簲鍟嗙被鍨�")
     private String supplierType;
 
     @ApiModelProperty(value = "绾崇◣浜鸿瘑鍒彿")
diff --git a/src/main/java/com/ruoyi/production/dto/MaterialInfoDto.java b/src/main/java/com/ruoyi/production/dto/MaterialInfoDto.java
index f90cf81..ef412d7 100644
--- a/src/main/java/com/ruoyi/production/dto/MaterialInfoDto.java
+++ b/src/main/java/com/ruoyi/production/dto/MaterialInfoDto.java
@@ -1,12 +1,10 @@
 package com.ruoyi.production.dto;
 
-import com.ruoyi.dto.SimplePersonDto;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
-import java.util.List;
 
 /**
  * @author buhuazhen
@@ -27,4 +25,6 @@
     private String price;
     private String priceSuffix = "鍏�/kg";
     private String totalAmount;
+
+    private String productModelId;
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
index 380ad00..e0ab30b 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
@@ -60,7 +60,7 @@
             pdto.setProcessRouteNum(it.getProcessPositive());
             pdto.setProcessRouteAddNum(it.getProcessPositive());
 //            pdto.setProcessRouteRequire(); 宸ヨ壓瑕佹眰
-            pdto.setProductModelId(materialInfoDtoFirst.getId());
+            pdto.setProductModelId(Long.valueOf(materialInfoDtoFirst.getProductModelId()));
             pdto.setUserIds(it.getReportWorkerList().stream().map(SimplePersonDto::getUserId).map(String::valueOf).collect(Collectors.joining(",")));
             pdto.setUserNames(it.getReportWorkerList().stream().map(SimplePersonDto::getUserName).collect(Collectors.joining(",")));
             pdto.setDeviceId(it.getDeviceId());
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 442ad9d..4487851 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -365,8 +365,8 @@
 
             SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
                     .productMainId(productionProductMain.getId())
-                    .schedulingUserId(user.getUserId())
-                    .schedulingUserName(user.getNickName())
+                    .schedulingUserId(productionProductMain.getUserId())
+                    .schedulingUserName(userMapper.selectUserById(productionProductMain.getUserId()).getNickName())
                     .finishedNum(productQty)
                     .workHours(workHours)
                     .process(productProcess.getName())
diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index 2358caf..bea8704 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -2,7 +2,6 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
@@ -17,7 +16,6 @@
 import com.ruoyi.purchase.pojo.PurchaseLedgerTemplate;
 import com.ruoyi.purchase.pojo.SalesLedgerProductTemplate;
 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.Api;
@@ -33,11 +31,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
 
 /**
  * 閲囪喘鍙拌处Controller
@@ -73,6 +68,7 @@
         return purchaseLedgerService.importData(file);
     }
 
+
     @ApiOperation("瀵煎嚭閲囪喘鍙拌处妯℃澘")
     @PostMapping("/exportTemplate")
     public void exportTemplate(HttpServletResponse response) {
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 477aff7..3cf10e3 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.purchase.service.impl;
 
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -7,23 +8,19 @@
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.account.pojo.AccountExpense;
-import com.ruoyi.account.pojo.AccountIncome;
 import com.ruoyi.account.service.AccountExpenseService;
-import com.ruoyi.account.service.AccountIncomeService;
+import com.ruoyi.approve.bean.vo.ApproveProcessVO;
 import com.ruoyi.approve.pojo.ApproveProcess;
 import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
-import com.ruoyi.approve.bean.vo.ApproveProcessVO;
+import com.ruoyi.basic.dto.ProductModelAnticlockwiseDto;
 import com.ruoyi.basic.mapper.ProductMapper;
 import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.mapper.SupplierManageMapper;
-import com.ruoyi.basic.pojo.Customer;
 import com.ruoyi.basic.pojo.Product;
 import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.basic.pojo.SupplierManage;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -39,19 +36,25 @@
 import com.ruoyi.purchase.dto.PurchaseLedgerImportDto;
 import com.ruoyi.purchase.dto.PurchaseLedgerProductImportDto;
 import com.ruoyi.purchase.mapper.*;
-import com.ruoyi.purchase.pojo.*;
+import com.ruoyi.purchase.pojo.PaymentRegistration;
+import com.ruoyi.purchase.pojo.ProductRecord;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.purchase.pojo.TicketRegistration;
 import com.ruoyi.purchase.service.IPurchaseLedgerService;
 import com.ruoyi.quality.mapper.*;
-import com.ruoyi.quality.pojo.*;
-import com.ruoyi.sales.dto.SalesLedgerImportDto;
-import com.ruoyi.sales.dto.SalesLedgerProductImportDto;
-import com.ruoyi.sales.mapper.*;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.quality.pojo.QualityInspectParam;
+import com.ruoyi.quality.pojo.QualityTestStandard;
+import com.ruoyi.quality.pojo.QualityTestStandardParam;
+import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
 import com.ruoyi.sales.pojo.CommonFile;
 import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
 import com.ruoyi.sales.pojo.SalesLedger;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
-import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.BeanUtils;
@@ -167,6 +170,7 @@
     public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception {
         PurchaseLedger purchaseLedger = new PurchaseLedger();
         SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId());
+        BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
         //褰曞叆浜�
         SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
         if (ObjectUtils.isNotEmpty(sysUser)) {
@@ -182,7 +186,7 @@
 
         // DTO杞珽ntity
 
-        BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
+
         LoginUser loginUser = SecurityUtils.getLoginUser();
         if (ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
             purchaseLedger.setTenantId(loginUser.getTenantId());
@@ -660,114 +664,175 @@
     @Transactional(rollbackFor = Exception.class)
     public AjaxResult importData(MultipartFile file) {
         LoginUser loginUser = SecurityUtils.getLoginUser();
+        int successCount = 0;
+        int skipCount = 0;
+        List<String> errorMessages = new ArrayList<>();
+
         try {
             InputStream inputStream = file.getInputStream();
-            ExcelUtil<PurchaseLedgerImportDto> salesLedgerImportDtoExcelUtil = new ExcelUtil<>(PurchaseLedgerImportDto.class);
-            Map<String, List<PurchaseLedgerImportDto>> stringListMap = salesLedgerImportDtoExcelUtil.importExcelMultiSheet(Arrays.asList("閲囪喘鍙拌处鏁版嵁", "閲囪喘浜у搧鏁版嵁"), inputStream, 0);
+            ExcelUtil<PurchaseLedgerImportDto> excelUtil = new ExcelUtil<>(PurchaseLedgerImportDto.class);
+            Map<String, List<PurchaseLedgerImportDto>> stringListMap = excelUtil.importExcelMultiSheet(Arrays.asList("閲囪喘鍙拌处鏁版嵁", "閲囪喘浜у搧鏁版嵁"), inputStream, 0);
             if (CollectionUtils.isEmpty(stringListMap)) return AjaxResult.error("閲囪喘琛ㄦ牸涓虹┖锛�");
-            // 涓氬姟灞傚悎骞�
-            List<PurchaseLedgerImportDto> salesLedgerImportDtoList = stringListMap.get("閲囪喘鍙拌处鏁版嵁");
-            if (CollectionUtils.isEmpty(salesLedgerImportDtoList)) return AjaxResult.error("閲囪喘鍙拌处鏁版嵁涓虹┖锛�");
-            List<PurchaseLedgerImportDto> salesLedgerProductImportDtoList = stringListMap.get("閲囪喘浜у搧鏁版嵁");
-            if (CollectionUtils.isEmpty(salesLedgerProductImportDtoList)) return AjaxResult.error("閲囪喘浜у搧鏁版嵁涓虹┖锛�");
-            // 渚涘簲鍟嗘暟鎹�
-            List<SupplierManage> customers = supplierManageMapper.selectList(new LambdaQueryWrapper<SupplierManage>().in(SupplierManage::getSupplierName,
-                    salesLedgerImportDtoList.stream().map(PurchaseLedgerImportDto::getSupplierName).collect(Collectors.toList())));
-            List<Map<String,Object>> list = productModelMapper.getProductAndModelList();
-            // 褰曞叆浜烘暟鎹�
+
+            List<PurchaseLedgerImportDto> ledgerList = stringListMap.get("閲囪喘鍙拌处鏁版嵁");
+            if (CollectionUtils.isEmpty(ledgerList)) return AjaxResult.error("閲囪喘鍙拌处鏁版嵁涓虹┖锛�");
+            List<PurchaseLedgerImportDto> productList = stringListMap.get("閲囪喘浜у搧鏁版嵁");
+            if (CollectionUtils.isEmpty(productList)) return AjaxResult.error("閲囪喘浜у搧鏁版嵁涓虹┖锛�");
+
+            List<SupplierManage> suppliers = supplierManageMapper.selectList(new LambdaQueryWrapper<SupplierManage>().in(SupplierManage::getSupplierName,
+                    ledgerList.stream().map(PurchaseLedgerImportDto::getSupplierName).filter(StrUtil::isNotBlank).collect(Collectors.toList())));
             List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().in(SysUser::getNickName,
-                    salesLedgerImportDtoList.stream().map(PurchaseLedgerImportDto::getRecorderName).collect(Collectors.toList())));
-            for (PurchaseLedgerImportDto salesLedgerImportDto : salesLedgerImportDtoList) {
-                PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
-                        .eq(PurchaseLedger::getPurchaseContractNumber, salesLedgerImportDto.getPurchaseContractNumber())
-                        .last("limit 1"));
-                if(purchaseLedger != null){
+                    ledgerList.stream().map(PurchaseLedgerImportDto::getRecorderName).filter(StrUtil::isNotBlank).collect(Collectors.toList())));
+
+            for (int i = 0; i < ledgerList.size(); i++) {
+                PurchaseLedgerImportDto importDto = ledgerList.get(i);
+                int rowNum = i + 2;
+
+                if (StrUtil.isBlank(importDto.getPurchaseContractNumber())) {
+                    errorMessages.add(String.format("绗�%d琛岋細閲囪喘鍗曞彿涓虹┖", rowNum));
+                    skipCount++;
                     continue;
                 }
-                PurchaseLedger salesLedger = new PurchaseLedger();
-                BeanUtils.copyProperties(salesLedgerImportDto, salesLedger);
-                // 閫氳繃渚涘簲鍟嗗悕绉版煡璇D
-                salesLedger.setSupplierId(customers.stream()
-                        .filter(customer -> customer.getSupplierName().equals(salesLedger.getSupplierName()))
-                        .findFirst()
-                        .map(SupplierManage::getId)
-                        .orElse(null));
-                Long aLong = sysUsers.stream()
-                        .filter(sysUser -> sysUser.getNickName().equals(salesLedger.getRecorderName()))
-                        .findFirst()
-                        .map(SysUser::getUserId)
-                        .orElse(null);
-                if (aLong == null)
-                    throw new RuntimeException("褰曞叆浜�:" + salesLedger.getRecorderName() + ",鏃犲搴旂敤鎴凤紒");
-                salesLedger.setRecorderId(aLong);
-                // 閲囪喘浜у搧鏁版嵁缁戝畾锛岄�氳繃閲囪喘鍗曞彿鑾峰彇瀵瑰簲閲囪喘浜у搧鏁版嵁
-                List<PurchaseLedgerProductImportDto> salesLedgerProductImportDtos = salesLedgerProductImportDtoList.stream()
-                        .filter(salesLedgerProductImportDto -> salesLedgerProductImportDto.getPurchaseContractNumber().equals(salesLedger.getPurchaseContractNumber()))
-                        .collect(Collectors.toList());
-                if (CollectionUtils.isEmpty(salesLedgerProductImportDtos))
-                    throw new RuntimeException("閲囪喘鍗曞彿:" + salesLedgerImportDto.getPurchaseContractNumber() + ",鏃犲搴斾骇鍝佹暟鎹紒");
-                salesLedger.setContractAmount(salesLedgerProductImportDtos.stream()
-                        .map(PurchaseLedgerProductImportDto::getTaxInclusiveTotalPrice)
-                        .reduce(BigDecimal.ZERO,BigDecimal::add));
-                // 閫氳繃閿�鍞崟鍙风粦瀹氶攢鍞�
-                SalesLedger salesLedger1 = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>()
-                        .eq(SalesLedger::getSalesContractNo, salesLedger.getSalesContractNo())
-                        .last("LIMIT 1"));
-                if(salesLedger1 != null){
-                    salesLedger.setSalesLedgerId(salesLedger1.getId());
-                }
-                // 閲囪喘瀹℃牳
-                // 閫氳繃鏄电О鑾峰彇鐢ㄦ埛ID
-                String[] split = salesLedger.getApproveUserIds().split("锛�");
-                List<Long> ids = new ArrayList<>();
-                for (int i = 0; i < split.length; i++) {
-                    SysUser sysUser = sysUserMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getNickName, split[i])
-                            .last("LIMIT 1"));
-                    if (sysUser != null) {
-                        ids.add(sysUser.getUserId());
-                    }
-                }
-                // 灏嗛泦鍚堣浆涓哄瓧绗︿覆锛岄殧寮�
-                String collect = ids.stream().map(Object::toString).collect(Collectors.joining(","));
-                salesLedger.setApproveUserIds(collect);
-                purchaseLedgerMapper.insert(salesLedger);
 
-                for (PurchaseLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
-                    SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct();
-                    BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct);
-                    salesLedgerProduct.setSalesLedgerId(salesLedger.getId());
-                    salesLedgerProduct.setType(2);
-                    // 璁$畻涓嶅惈绋庢�讳环
-                    salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice().divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP));
-                    salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
-                    salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTaxExclusiveTotalPrice());
-                    list.stream()
-                            .filter(map -> map.get("productName").equals(salesLedgerProduct.getProductCategory()) && map.get("model").equals(salesLedgerProduct.getSpecificationModel()))
-                            .findFirst()
-                            .ifPresent(map -> {
-                                salesLedgerProduct.setProductModelId(Long.parseLong(map.get("modelId").toString()));
-                                salesLedgerProduct.setProductId(Long.parseLong(map.get("id").toString()));
-                            });
-                    salesLedgerProduct.setRegister(loginUser.getNickName());
-                    salesLedgerProduct.setRegisterDate(LocalDateTime.now());
-                    salesLedgerProduct.setApproveStatus(0);
-                    salesLedgerProduct.setPendingTicketsTotal(salesLedgerProductImportDto.getTaxInclusiveTotalPrice());
-                    // 鏄惁璐ㄦ鍒ゆ柇
-                    salesLedgerProduct.setIsChecked(salesLedgerProductImportDto.getIsChecked() == 1);
-                    if(salesLedgerProductImportDto.getIsChecked() == 1){
-                        addQualityInspect(salesLedger, salesLedgerProduct);
+                try {
+                    PurchaseLedger existLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
+                            .eq(PurchaseLedger::getPurchaseContractNumber, importDto.getPurchaseContractNumber())
+                            .last("limit 1"));
+                    if (existLedger != null) {
+                        errorMessages.add(String.format("绗�%d琛岋細閲囪喘鍗曞彿[%s]宸插瓨鍦�", rowNum, importDto.getPurchaseContractNumber()));
+                        skipCount++;
+                        continue;
                     }
-                    salesLedgerProductMapper.insert(salesLedgerProduct);
+
+                    PurchaseLedger purchaseLedger = new PurchaseLedger();
+                    BeanUtils.copyProperties(importDto, purchaseLedger);
+
+                    purchaseLedger.setSupplierId(suppliers.stream()
+                            .filter(s -> s.getSupplierName().equals(importDto.getSupplierName()))
+                            .findFirst()
+                            .map(SupplierManage::getId)
+                            .orElse(null));
+
+                    Long recorderId = sysUsers.stream()
+                            .filter(u -> u.getNickName().equals(importDto.getRecorderName()))
+                            .findFirst()
+                            .map(SysUser::getUserId)
+                            .orElse(null);
+                    if (recorderId == null) {
+                        throw new RuntimeException("褰曞叆浜�:" + importDto.getRecorderName() + "涓嶅瓨鍦�");
+                    }
+                    purchaseLedger.setRecorderId(recorderId);
+
+                    List<PurchaseLedgerProductImportDto> productDtos = productList.stream()
+                            .filter(p -> p.getPurchaseContractNumber().equals(importDto.getPurchaseContractNumber()))
+                            .collect(Collectors.toList());
+                    if (CollectionUtils.isEmpty(productDtos)) {
+                        throw new RuntimeException("鏃犲搴斾骇鍝佹暟鎹�");
+                    }
+
+                    purchaseLedger.setContractAmount(productDtos.stream()
+                            .map(PurchaseLedgerProductImportDto::getTaxInclusiveTotalPrice)
+                            .reduce(BigDecimal.ZERO, BigDecimal::add));
+
+                    SalesLedger salesLedger = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>()
+                            .eq(SalesLedger::getSalesContractNo, purchaseLedger.getSalesContractNo())
+                            .last("LIMIT 1"));
+                    if (salesLedger != null) {
+                        purchaseLedger.setSalesLedgerId(salesLedger.getId());
+                    }
+
+                    purchaseLedgerMapper.insert(purchaseLedger);
+
+                    for (PurchaseLedgerProductImportDto productDto : productDtos) {
+                        SalesLedgerProduct product = new SalesLedgerProduct();
+                        BeanUtils.copyProperties(productDto, product);
+                        product.setSalesLedgerId(purchaseLedger.getId());
+                        product.setType(2);
+                        product.setTaxExclusiveTotalPrice(product.getTaxInclusiveTotalPrice()
+                                .divide(new BigDecimal(1).add(product.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP));
+                        product.setFutureTickets(product.getQuantity());
+                        product.setFutureTicketsAmount(product.getTaxExclusiveTotalPrice());
+
+                        ProductModelAnticlockwiseDto modelDto = new ProductModelAnticlockwiseDto();
+                        modelDto.setProductName(product.getProductCategory());
+                        modelDto.setModel(product.getSpecificationModel());
+                        modelDto.setUnit(product.getUnit());
+                        modelDto.setSubUnit(product.getUnit());
+                        product.setProductModelId(productModelAnticlockwise(modelDto));
+
+                        product.setRegister(loginUser.getNickName());
+                        product.setRegisterDate(LocalDateTime.now());
+                        product.setApproveStatus(0);
+                        product.setPendingTicketsTotal(productDto.getTaxInclusiveTotalPrice());
+                        product.setIsChecked(productDto.getIsChecked() == 1);
+
+                        if (productDto.getIsChecked() == 1) {
+                            addQualityInspect(purchaseLedger, product);
+                        }
+                        salesLedgerProductMapper.insert(product);
+                    }
+
+                    addApproveByPurchase(loginUser, purchaseLedger);
+                    successCount++;
+
+                } catch (Exception e) {
+                    log.error("绗瑊}琛岄噰璐崟[{}]瀵煎叆澶辫触锛歿}", rowNum, importDto.getPurchaseContractNumber(), e.getMessage(), e);
+                    errorMessages.add(String.format("绗�%d琛岄噰璐崟[%s]锛氬け璐�-%s", rowNum, importDto.getPurchaseContractNumber(), e.getMessage()));
+                    skipCount++;
                 }
-                // 閲囪喘瀹℃牳
-                addApproveByPurchase(loginUser,salesLedger);
             }
 
-            return AjaxResult.success("瀵煎叆鎴愬姛");
+            String message = String.format("瀵煎叆瀹屾垚锛佹垚鍔�%d鏉★紝璺宠繃%d鏉�", successCount, skipCount);
+            if (!errorMessages.isEmpty()) {
+                message += "銆傞敊璇鎯咃細" + String.join("锛�", errorMessages);
+            }
+            return AjaxResult.success(message);
         } catch (Exception e) {
-            e.printStackTrace();
+            log.error("閲囪喘瀵煎叆寮傚父", e);
+            return AjaxResult.error("瀵煎叆澶辫触锛�" + e.getMessage());
         }
-        return AjaxResult.success("瀵煎叆澶辫触");
+    }
+
+    public Long productModelAnticlockwise(ProductModelAnticlockwiseDto productModelDto) {
+        ProductModel oldProductModel = productModelMapper.selectOldProductModel(productModelDto.getModel(), productModelDto.getProductName());
+        //瀛樺湪灏辨洿鏂�
+        if (oldProductModel != null) {
+            oldProductModel.setModel(productModelDto.getModel());
+            oldProductModel.setUnit(productModelDto.getUnit());
+            oldProductModel.setSubUnit(productModelDto.getSubUnit());
+            oldProductModel.setDeptId(SecurityUtils.getDeptId()[0]);
+            productModelMapper.updateById(oldProductModel);
+            Product product = productMapper.selectById(oldProductModel.getProductId());
+            product.setProductName(productModelDto.getProductName());
+            productMapper.updateById(product);
+            return oldProductModel.getId();
+        }else {
+            //鎵惧埌鐖惰妭鐐�
+            Product productParent = productMapper.selectOne(new QueryWrapper<Product>().lambda().eq(Product::getProductName, "鍘熸枡").last("limit 1"));
+            if (ObjectUtils.isEmpty(productParent)) {
+                Product product = new Product();
+                product.setProductName("鍘熸枡");
+                product.setDeptId(SecurityUtils.getDeptId()[0]);
+                productMapper.insert(product);
+                productParent.setId(product.getId());
+            }
+            //鏂板浜у搧澶х被
+            Product product = new Product();
+            product.setProductName(productModelDto.getProductName());
+            product.setParentId(productParent.getId());
+            product.setDeptId(SecurityUtils.getDeptId()[0]);
+            productMapper.insert( product);
+            //鏂板浜у搧瑙勬牸
+            ProductModel productModel = new ProductModel();
+            productModel.setProductId(product.getId());
+            productModel.setModel(productModelDto.getModel());
+            productModel.setUnit(productModelDto.getUnit());
+            productModel.setSubUnit(productModelDto.getSubUnit());
+            productModel.setDeptId(SecurityUtils.getDeptId()[0]);
+            productModelMapper.insert(productModel);
+            return productModel.getId();
+
+        }
     }
 
     @Override
diff --git a/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml b/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
index c5c007e..fa06173 100644
--- a/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
+++ b/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
@@ -197,7 +197,7 @@
                 T1.supplier_name LIKE CONCAT ('%',#{req.supplierName},'%')
             </if>
         </where>
-        GROUP BY T1.supplier_name
+        GROUP BY T1.supplier_name,T1.supplier_id
     </select>
 
     <select id="supplierNameListPageDetails" resultType="com.ruoyi.purchase.dto.PaymentRegistrationDto">
@@ -217,7 +217,7 @@
                 T1.supplier_name LIKE CONCAT ('%',#{req.supplierName},'%')
             </if>
         </where>
-        GROUP BY  T1.purchase_contract_number,T2.payment_date
+        GROUP BY  T1.purchase_contract_number,T2.payment_date,T1.supplier_id,T1.supplier_name
     </select>
 
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index adad88d..3109bce 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -128,7 +128,7 @@
             AND slp.product_category = #{req.productCategory}
         </if>
         <!-- 鎸変骇鍝佸ぇ绫诲垎缁勮仛鍚� -->
-        GROUP BY slp.product_category
+        GROUP BY slp.product_category,slp.specification_model,sl.supplier_name
         <!-- 鎸変骇鍝佸ぇ绫绘帓搴� -->
         ORDER BY slp.product_category
     </select>

--
Gitblit v1.9.3