From b1b1c6b65cef9a4f6d9f3d7b09a31b40535ef63a Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期二, 27 一月 2026 10:17:10 +0800
Subject: [PATCH] yys 优化采购审批模块

---
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java |  317 +++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 215 insertions(+), 102 deletions(-)

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 16bd089..a7d5765 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.purchase.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -10,9 +11,13 @@
 import com.ruoyi.account.pojo.AccountIncome;
 import com.ruoyi.account.service.AccountExpenseService;
 import com.ruoyi.account.service.AccountIncomeService;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl;
+import com.ruoyi.approve.vo.ApproveProcessVO;
 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;
@@ -21,7 +26,9 @@
 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;
 import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.other.mapper.TempFileMapper;
 import com.ruoyi.other.pojo.TempFile;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
@@ -29,21 +36,15 @@
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.purchase.dto.PurchaseLedgerDto;
-import com.ruoyi.purchase.mapper.PaymentRegistrationMapper;
-import com.ruoyi.purchase.mapper.ProductRecordMapper;
-import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
-import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
-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.dto.PurchaseLedgerImportDto;
+import com.ruoyi.purchase.dto.PurchaseLedgerProductImportDto;
+import com.ruoyi.purchase.mapper.*;
+import com.ruoyi.purchase.pojo.*;
 import com.ruoyi.purchase.service.IPurchaseLedgerService;
-import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.mapper.QualityInspectParamMapper;
-import com.ruoyi.quality.mapper.QualityTestStandardMapper;
-import com.ruoyi.quality.pojo.QualityInspect;
-import com.ruoyi.quality.pojo.QualityInspectParam;
-import com.ruoyi.quality.pojo.QualityTestStandard;
+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.sales.pojo.CommonFile;
 import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
@@ -57,9 +58,12 @@
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -100,6 +104,8 @@
 
     private final ProductModelMapper productModelMapper;
 
+    private final SysUserMapper sysUserMapper;
+
     private final TicketRegistrationMapper ticketRegistrationMapper;
 
     private final ProductRecordMapper productRecordMapper;
@@ -110,10 +116,18 @@
 
     private final StringRedisTemplate redisTemplate;
     private final QualityInspectMapper qualityInspectMapper;
+    private final QualityTestStandardBindingMapper qualityTestStandardBindingMapper;
+    private final QualityTestStandardParamMapper qualityTestStandardParamMapper;
     private final QualityTestStandardMapper qualityTestStandardMapper;
     private final QualityInspectParamMapper qualityInspectParamMapper;
 
+    private final ApproveProcessServiceImpl approveProcessService;
+
     private final ProcurementRecordMapper procurementRecordStorageMapper;
+
+    private final PurchaseLedgerTemplateMapper purchaseLedgerTemplateMapper;
+
+    private final SalesLedgerProductTemplateMapper salesLedgerProductTemplateMapper;
     @Value("${file.upload-dir}")
     private String uploadDir;
 
@@ -125,52 +139,10 @@
         }
         return purchaseLedgerMapper.selectList(queryWrapper);
     }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int addPurchaseTemplate(PurchaseLedgerDto purchaseLedgerDto)throws IOException {
-        //褰曞叆浜�
-        SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
-
-        SupplierManage supplierManage = supplierManageMapper.selectById(purchaseLedgerDto.getSupplierId());
-        PurchaseLedger purchaseLedger = new PurchaseLedger();
-//        BeanUtils.copyProperties(purchaseLedger,purchaseLedgerDto);
-        LoginUser loginUser = SecurityUtils.getLoginUser();
-        if(ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
-            purchaseLedger.setTenantId(loginUser.getTenantId());
-        }
-        purchaseLedger.setPaymentMethod(purchaseLedgerDto.getPaymentMethod());
-        purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
-        purchaseLedger.setSupplierId(purchaseLedgerDto.getSupplierId());
-        purchaseLedger.setTemplateName(purchaseLedgerDto.getTemplateName());
-//        purchaseLedger.setSalesLedgerPId(purchaseLedgerDto.getSalesLedgerId());
-        purchaseLedger.setApprovalStatus(3);
-        purchaseLedger.setSupplierName(supplierManage.getSupplierName());
-        purchaseLedger.setRecorderName(sysUser.getNickName());
-        purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
-        purchaseLedger.setPurchaseContractNumber(UUID.randomUUID().toString().replaceAll("-", ""));
-        purchaseLedger.setEntryDate(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()));
-        int insert = purchaseLedgerMapper.insert(purchaseLedger);
-
-        LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(PurchaseLedger::getSupplierName, purchaseLedger.getSupplierName())
-                .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedger.getPurchaseContractNumber())
-                .eq(PurchaseLedger::getApprovalStatus,3);
-        PurchaseLedger purchaseLedger1 = purchaseLedgerMapper.selectOne(queryWrapper);
-
-        if(ObjectUtils.isNotEmpty(purchaseLedgerDto.getProductData())) {
-            // 4. 澶勭悊瀛愯〃鏁版嵁
-            List<SalesLedgerProduct> salesLedgerProductList = purchaseLedgerDto.getProductData();
-            salesLedgerProductList.forEach(salesLedgerProduct -> {
-                salesLedgerProduct.setSalesLedgerId(purchaseLedger1.getId());
-                salesLedgerProduct.setType(2);
-            });
-            salesLedgerProductList.forEach(salesLedgerProductMapper::insert);
-        }
-        return insert;
-    }
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws IOException {
+    public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws Exception {
 
         SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId());
         //褰曞叆浜�
@@ -191,42 +163,24 @@
         purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
         purchaseLedger.setRecorderName(sysUser.getNickName());
         purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
-        // 2. 澶勭悊璐︽埛鏀跺叆
-        AccountExpense accountExpense = new AccountExpense();
-        accountExpense.setExpenseDate(purchaseLedger.getEntryDate());
-        accountExpense.setExpenseType("0");
-        accountExpense.setSupplierName(purchaseLedger.getSupplierName());
-        accountExpense.setExpenseMoney(purchaseLedger.getContractAmount());
-        accountExpense.setExpenseDescribed("閲囪喘鍚堝悓锛�" + purchaseLedger.getPurchaseContractNumber());
-        accountExpense.setExpenseMethod("0");
-        accountExpense.setInvoiceNumber(purchaseLedger.getPurchaseContractNumber());
-        accountExpense.setInputTime(new Date());
-        accountExpense.setInputUser(loginUser.getNickName());
-
-
+        purchaseLedger.setApprovalStatus(1);
         // 3. 鏂板鎴栨洿鏂颁富琛�
         if (purchaseLedger.getId() == null) {
             purchaseLedgerMapper.insert(purchaseLedger);
-//            accountIncomeService.save(accountIncome);
-            accountExpenseService.save(accountExpense);
         } else {
-            purchaseLedgerMapper.updateById(purchaseLedger);
-            PurchaseLedger purchaseLedgerDB = purchaseLedgerMapper.selectById(purchaseLedger.getId());
-            List<AccountExpense> accountExpenseDBs = accountExpenseService.getByInvoiceNumberList(purchaseLedger.getPurchaseContractNumber());
-            if (!CollectionUtils.isEmpty(accountExpenseDBs)) {
-                accountExpenseDBs.forEach(accountExpenseDB ->{
-                    accountExpenseDB.setExpenseDate(purchaseLedgerDB.getEntryDate());
-                    accountExpenseDB.setExpenseType("0");
-                    accountExpenseDB.setSupplierName(purchaseLedgerDB.getSupplierName());
-                    accountExpenseDB.setExpenseMoney(purchaseLedgerDB.getContractAmount());
-                    accountExpenseDB.setExpenseDescribed("閲囪喘鍚堝悓锛�" + purchaseLedgerDB.getPurchaseContractNumber());
-                    accountExpenseDB.setExpenseMethod("0");
-                    accountExpenseDB.setInvoiceNumber(purchaseLedgerDB.getPurchaseContractNumber());
-                    accountExpenseService.updateById(accountExpenseDB);
-                });
+            // 鍒犻櫎閲囪喘瀹℃牳锛岄噸鏂版彁浜�
+            ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
+                    .eq(ApproveProcess::getApproveType, 5)
+                    .eq(ApproveProcess::getApproveReason, purchaseLedger.getPurchaseContractNumber())
+                    .eq(ApproveProcess::getApproveDelete, 0)
+                    .last("limit 1"));
+            if (one != null) {
+                approveProcessService.delByIds(Collections.singletonList(one.getId()));
             }
-
+            purchaseLedgerMapper.updateById(purchaseLedger);
         }
+        // 6.閲囪喘瀹℃牳鏂板
+        addApproveByPurchase(loginUser, purchaseLedger);
 
         // 4. 澶勭悊瀛愯〃鏁版嵁
         List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData();
@@ -246,7 +200,6 @@
         if (purchaseLedgerDto.getTempFileIds() != null && !purchaseLedgerDto.getTempFileIds().isEmpty()) {
             migrateTempFilesToFormal(purchaseLedger.getId(), purchaseLedgerDto.getTempFileIds());
         }
-
         return 1;
     }
 
@@ -262,20 +215,21 @@
         qualityInspect.setUnit(saleProduct.getUnit());
         qualityInspect.setQuantity(saleProduct.getQuantity());
         qualityInspectMapper.insert(qualityInspect);
-        QualityTestStandard qualityTestStandard = new QualityTestStandard();
-        qualityTestStandard.setProductId(saleProduct.getProductId());
-        List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.qualityTestStandardList(qualityTestStandard);
-        for (QualityTestStandard qualityTestStandardDB : qualityTestStandards) {
-            QualityInspectParam qualityInspectParam = new QualityInspectParam();
-            qualityInspectParam.setInspectId(qualityInspect.getId());
-            qualityInspectParam.setParameterItem(qualityTestStandardDB.getParameterItem());
-            qualityInspectParam.setUnit(qualityTestStandardDB.getUnit());
-            qualityInspectParam.setStandardValue(qualityTestStandardDB.getStandardValue());
-            qualityInspectParam.setControlValue(qualityTestStandardDB.getControlValue());
-            qualityInspectParamMapper.insert(qualityInspectParam);
+        List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null);
+        if (qualityTestStandard.size()>0){
+            qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
+            qualityInspectMapper.updateById(qualityInspect);
+            qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
+                    .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandard.get(0).getId()))
+                    .forEach(qualityTestStandardParam -> {
+                        QualityInspectParam param = new QualityInspectParam();
+                        com.ruoyi.common.utils.bean.BeanUtils.copyProperties(qualityTestStandardParam, param);
+                        param.setId(null);
+                        param.setInspectId(qualityInspect.getId());
+                        qualityInspectParamMapper.insert(param);
+                    });
         }
     }
-
 
     private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) {
         if (products == null || products.isEmpty()) {
@@ -346,6 +300,7 @@
                 salesLedgerProduct.setRegisterDate(localDateTime);
                 salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
                 salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
+                salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice());
                 salesLedgerProductMapper.insert(salesLedgerProduct);
             }
         }
@@ -491,7 +446,20 @@
             qualityStandardLambdaQueryWrapper.in(QualityInspectParam::getInspectId, inspectIds);
             qualityInspectParamMapper.delete(qualityStandardLambdaQueryWrapper);
         }
-
+        // 鍒犻櫎閲囪喘瀹℃壒璁板綍
+        for (Long id : ids) {
+            PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(id);
+            if(purchaseLedger != null){
+                ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
+                        .eq(ApproveProcess::getApproveType, 5)
+                        .eq(ApproveProcess::getApproveDelete, 0)
+                        .eq(ApproveProcess::getApproveReason, purchaseLedger.getPurchaseContractNumber())
+                        .last("limit 1"));
+                if (one != null) {
+                    approveProcessService.delByIds(Collections.singletonList(one.getId()));
+                }
+            }
+        }
         //鎵归噺鍒犻櫎鍘熸潗鏂欐楠屾暟鎹�
         qualityInspectMapper.delete(materialInspectLambdaQueryWrapper);
         // 鎵归噺鍒犻櫎閲囪喘鍙拌处
@@ -649,6 +617,151 @@
         return purchaseNo + String.format("%03d", sequence);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult importData(MultipartFile file) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        try {
+            InputStream inputStream = file.getInputStream();
+            ExcelUtil<PurchaseLedgerImportDto> salesLedgerImportDtoExcelUtil = new ExcelUtil<>(PurchaseLedgerImportDto.class);
+            Map<String, List<PurchaseLedgerImportDto>> stringListMap = salesLedgerImportDtoExcelUtil.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<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().in(SysUser::getNickName,
+                    salesLedgerImportDtoList.stream().map(PurchaseLedgerImportDto::getRecorderName).collect(Collectors.toList())));
+            for (PurchaseLedgerImportDto salesLedgerImportDto : salesLedgerImportDtoList) {
+                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);
+                    }
+                    salesLedgerProductMapper.insert(salesLedgerProduct);
+                }
+                // 閲囪喘瀹℃牳
+                addApproveByPurchase(loginUser,salesLedger);
+            }
+
+            return AjaxResult.success("瀵煎叆鎴愬姛");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return AjaxResult.success("瀵煎叆澶辫触");
+    }
+
+    @Override
+    public PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto) {
+        // 1. 鏌ヨ涓昏〃
+        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
+                .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber())
+                .last("LIMIT 1"));
+        if (purchaseLedger == null) {
+            throw new BaseException("閲囪喘鍙拌处涓嶅瓨鍦�");
+        }
+
+        // 2. 鏌ヨ瀛愯〃
+        LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>();
+        productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())
+                .eq(SalesLedgerProduct::getType, 2);
+        List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
+
+        // 4. 杞崲 DTO
+        PurchaseLedgerDto resultDto = new PurchaseLedgerDto();
+        BeanUtils.copyProperties(purchaseLedger, resultDto);
+        if (!products.isEmpty()) {
+            resultDto.setHasChildren(true);
+            resultDto.setProductData(products);
+        }
+        return resultDto;
+    }
+
+    public void addApproveByPurchase(LoginUser loginUser,PurchaseLedger purchaseLedger) throws Exception {
+        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
+        approveProcessVO.setApproveType(5);
+        approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
+        approveProcessVO.setApproveReason(purchaseLedger.getPurchaseContractNumber());
+        approveProcessVO.setApproveUserIds(purchaseLedger.getApproveUserIds());
+        approveProcessVO.setApproveUser(loginUser.getUserId());
+        approveProcessVO.setApproveTime(LocalDate.now().toString());
+        approveProcessService.addApprove(approveProcessVO);
+    }
+
     /**
      * 涓嬪垝绾垮懡鍚嶈浆椹煎嘲鍛藉悕
      */

--
Gitblit v1.9.3