From dce840653b78fc05a732c5c89773c74e15dbed09 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 08 十月 2026 17:41:27 +0800
Subject: [PATCH] 采购管理系统模块优化

---
 src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java |  129 ++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 121 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
index 020a9cd..c047570 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/SupplierServiceImpl.java
@@ -6,8 +6,16 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.basic.dto.SupplierManageDto;
+import com.ruoyi.basic.dto.SupplierArchiveDetailVo;
+import com.ruoyi.basic.dto.SupplierArchiveSaveDto;
 import com.ruoyi.basic.excel.SupplierManageExcelDto;
 import com.ruoyi.basic.mapper.SupplierManageMapper;
+import com.ruoyi.basic.mapper.SupplierQualificationMapper;
+import com.ruoyi.basic.mapper.SupplierProductMapper;
+import com.ruoyi.basic.mapper.SupplierCooperationRecordMapper;
+import com.ruoyi.basic.pojo.SupplierQualification;
+import com.ruoyi.basic.pojo.SupplierProduct;
+import com.ruoyi.basic.pojo.SupplierCooperationRecord;
 import com.ruoyi.basic.pojo.Customer;
 import com.ruoyi.basic.pojo.SupplierManage;
 import com.ruoyi.basic.service.ISupplierService;
@@ -16,13 +24,19 @@
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
+import com.ruoyi.purchase.pojo.TicketRegistration;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.stream.Collectors;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -33,6 +47,10 @@
     private SupplierManageMapper supplierMapper;
     @Autowired
     private PurchaseLedgerMapper purchaseLedgerMapper;
+    @Autowired private TicketRegistrationMapper ticketRegistrationMapper;
+    @Autowired private SupplierQualificationMapper qualificationMapper;
+    @Autowired private SupplierProductMapper productMapper;
+    @Autowired private SupplierCooperationRecordMapper cooperationMapper;
 
     /**
      * 渚涘簲鍟嗘柊澧�
@@ -41,12 +59,24 @@
      */
     @Override
     public void saveSupplier(SupplierManage supplierManage) {
+        Long tenantId = SecurityUtils.getLoginUser().getTenantId();
         LambdaQueryWrapper<SupplierManage> supplierManageLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        supplierManageLambdaQueryWrapper.eq(SupplierManage::getSupplierName,supplierManage.getSupplierName());
+        supplierManageLambdaQueryWrapper.eq(SupplierManage::getSupplierName,supplierManage.getSupplierName())
+                .eq(SupplierManage::getTenantId, tenantId).eq(SupplierManage::getDeleteFlag, 0);
         if (supplierMapper.selectCount(supplierManageLambdaQueryWrapper) > 0) {
             throw new RuntimeException("渚涘簲鍟嗗凡瀛樺湪");
         }
+        supplierManage.setTenantId(tenantId);
+        supplierManage.setDeleteFlag(0);
+        supplierManage.setCooperationStatus(supplierManage.getCooperationStatus() == null ? 1 : supplierManage.getCooperationStatus());
+        supplierManage.setQualificationStatus(supplierManage.getQualificationStatus() == null ? 0 : supplierManage.getQualificationStatus());
+        supplierManage.setMaintainUserId(SecurityUtils.getUserId().intValue());
+        supplierManage.setMaintainTime(LocalDate.now());
         supplierMapper.insert(supplierManage);
+        if (supplierManage.getSupplierCode() == null || supplierManage.getSupplierCode().trim().isEmpty()) {
+            supplierManage.setSupplierCode(String.format("SUP%06d", supplierManage.getId()));
+            supplierMapper.updateById(supplierManage);
+        }
     }
 
     /**
@@ -56,14 +86,18 @@
      */
     @Override
     public int delSupplier(List<Integer> ids) {
-        List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(new QueryWrapper<PurchaseLedger>().lambda().in(PurchaseLedger::getSupplierId, ids));
+        Long tenantId=SecurityUtils.getLoginUser().getTenantId();
+        List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(new QueryWrapper<PurchaseLedger>().lambda()
+                .in(PurchaseLedger::getSupplierId, ids).eq(PurchaseLedger::getTenantId,tenantId));
         if (purchaseLedgers.size() > 0) {
             throw new RuntimeException("渚涘簲鍟嗗凡瀛樺湪閲囪喘鍚堝悓");
         }
-        LambdaQueryWrapper<SupplierManage> delWrapper = new LambdaQueryWrapper<>();
-        delWrapper.in(SupplierManage::getId, ids);
-
-        return supplierMapper.delete(delWrapper);
+        int count=0;
+        for(Integer id:ids){
+            SupplierManage supplier=supplierDetail(id);
+            if(supplier!=null){ supplier.setDeleteFlag(1); supplier.setCooperationStatus(0); count+=supplierMapper.updateById(supplier); }
+        }
+        return count;
     }
 
     /**
@@ -73,7 +107,9 @@
      */
     @Override
     public SupplierManage supplierDetail(Integer id) {
-        return supplierMapper.selectById(id);
+        return supplierMapper.selectOne(new LambdaQueryWrapper<SupplierManage>().eq(SupplierManage::getId,id)
+                .eq(SupplierManage::getTenantId, SecurityUtils.getLoginUser().getTenantId())
+                .eq(SupplierManage::getDeleteFlag,0));
     }
 
     /**
@@ -83,7 +119,11 @@
      */
     @Override
     public int supplierUpdate(SupplierManage supplierManage) {
-        return supplierMapper.updateById(supplierManage);
+        SupplierManage current = supplierDetail(supplierManage.getId());
+        if (current == null) throw new RuntimeException("渚涘簲鍟嗕笉瀛樺湪");
+        supplierManage.setTenantId(current.getTenantId());
+        return supplierMapper.update(supplierManage, new LambdaQueryWrapper<SupplierManage>()
+                .eq(SupplierManage::getId, supplierManage.getId()).eq(SupplierManage::getTenantId,current.getTenantId()));
     }
 
     /**
@@ -94,6 +134,7 @@
      */
     @Override
     public IPage<SupplierManage> supplierListPage(Page page, SupplierManageDto supplierManageDto) {
+        supplierManageDto.setTenantId(SecurityUtils.getLoginUser().getTenantId());
         return supplierMapper.supplierListPage(page,supplierManageDto);
     }
 
@@ -104,6 +145,7 @@
      */
     @Override
     public void supplierExport(HttpServletResponse response, SupplierManageDto supplierManageDto) {
+        supplierManageDto.setTenantId(SecurityUtils.getLoginUser().getTenantId());
         List<SupplierManageExcelDto> supplierManageList = supplierMapper.supplierExportList(supplierManageDto);
         ExcelUtil<SupplierManageExcelDto> util = new ExcelUtil<SupplierManageExcelDto>(SupplierManageExcelDto.class);
         util.exportExcel(response, supplierManageList, "渚涘簲鍟嗗鍑�");
@@ -133,4 +175,75 @@
         }
         return false;
     }
+
+    @Override
+    public SupplierArchiveDetailVo supplierArchiveDetail(Integer id) {
+        SupplierManage supplier = supplierDetail(id);
+        if (supplier == null) throw new RuntimeException("渚涘簲鍟嗕笉瀛樺湪");
+        long supplierId = id.longValue();
+        long tenantId = supplier.getTenantId();
+        SupplierArchiveDetailVo result = new SupplierArchiveDetailVo();
+        result.setSupplier(supplier);
+        result.setQualifications(qualificationMapper.selectList(new LambdaQueryWrapper<SupplierQualification>()
+                .eq(SupplierQualification::getSupplierId,supplierId).eq(SupplierQualification::getTenantId,tenantId)
+                .eq(SupplierQualification::getDeleteFlag,0).orderByAsc(SupplierQualification::getExpiryDate)));
+        result.setProducts(productMapper.selectList(new LambdaQueryWrapper<SupplierProduct>()
+                .eq(SupplierProduct::getSupplierId,supplierId).eq(SupplierProduct::getTenantId,tenantId)
+                .eq(SupplierProduct::getDeleteFlag,0)));
+        result.setCooperationRecords(cooperationMapper.selectList(new LambdaQueryWrapper<SupplierCooperationRecord>()
+                .eq(SupplierCooperationRecord::getSupplierId,supplierId).eq(SupplierCooperationRecord::getTenantId,tenantId)
+                .eq(SupplierCooperationRecord::getDeleteFlag,0).orderByDesc(SupplierCooperationRecord::getCooperationDate)));
+        List<PurchaseLedger> purchases = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
+                .eq(PurchaseLedger::getSupplierId,supplierId).eq(PurchaseLedger::getTenantId,tenantId));
+        result.setPurchaseCount((long)purchases.size());
+        result.setPurchaseAmount(purchases.stream().map(PurchaseLedger::getContractAmount).filter(java.util.Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add));
+        result.setInvoicedAmount(ticketRegistrationMapper.selectList(new LambdaQueryWrapper<TicketRegistration>()
+                .eq(TicketRegistration::getSupplierId,supplierId).eq(TicketRegistration::getTenantId,tenantId)
+                .eq(TicketRegistration::getDeleteFlag,0)).stream().map(TicketRegistration::getInvoiceAmount)
+                .filter(java.util.Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+        return result;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Integer saveArchive(SupplierArchiveSaveDto archive) {
+        if (archive == null || archive.getSupplier() == null) throw new RuntimeException("渚涘簲鍟嗕俊鎭笉鑳戒负绌�");
+        SupplierManage supplier = archive.getSupplier();
+        if (supplier.getId() == null) saveSupplier(supplier); else supplierUpdate(supplier);
+        long tenantId = SecurityUtils.getLoginUser().getTenantId();
+        long userId = SecurityUtils.getUserId();
+        long supplierId = supplier.getId().longValue();
+        qualificationMapper.delete(new LambdaQueryWrapper<SupplierQualification>().eq(SupplierQualification::getSupplierId,supplierId).eq(SupplierQualification::getTenantId,tenantId));
+        productMapper.delete(new LambdaQueryWrapper<SupplierProduct>().eq(SupplierProduct::getSupplierId,supplierId).eq(SupplierProduct::getTenantId,tenantId));
+        LocalDate nearest = null;
+        if (archive.getQualifications() != null) for (SupplierQualification item : archive.getQualifications()) {
+            item.setId(null); item.setSupplierId(supplierId); item.setTenantId(tenantId); item.setCreateUser(userId);
+            item.setCreateTime(LocalDateTime.now()); item.setUpdateTime(LocalDateTime.now()); item.setDeleteFlag(0);
+            item.setStatus(item.getStatus() == null ? 1 : item.getStatus()); qualificationMapper.insert(item);
+            if (item.getExpiryDate()!=null && (nearest==null || item.getExpiryDate().isBefore(nearest))) nearest=item.getExpiryDate();
+        }
+        if (archive.getProducts() != null) for (SupplierProduct item : archive.getProducts()) {
+            if (item.getProductName()==null || item.getProductName().trim().isEmpty()) continue;
+            item.setId(null); item.setSupplierId(supplierId); item.setTenantId(tenantId); item.setCreateUser(userId);
+            item.setCreateTime(LocalDateTime.now()); item.setUpdateTime(LocalDateTime.now()); item.setDeleteFlag(0);
+            item.setStatus(item.getStatus()==null?1:item.getStatus()); item.setCurrency(item.getCurrency()==null?"CNY":item.getCurrency()); productMapper.insert(item);
+        }
+        supplier.setQualificationExpiryDate(nearest);
+        supplier.setQualificationStatus(nearest==null?0:(nearest.isBefore(LocalDate.now())?3:(nearest.isBefore(LocalDate.now().plusDays(31))?2:1)));
+        if (archive.getProducts()!=null) supplier.setSuppliedProductsSummary(archive.getProducts().stream().map(SupplierProduct::getProductName)
+                .filter(java.util.Objects::nonNull).limit(5).collect(Collectors.joining("銆�")));
+        supplierUpdate(supplier);
+        return supplier.getId();
+    }
+
+    @Override
+    public void addCooperationRecord(Integer supplierId, SupplierCooperationRecord record) {
+        SupplierManage supplier = supplierDetail(supplierId);
+        if (supplier == null) throw new RuntimeException("渚涘簲鍟嗕笉瀛樺湪");
+        record.setId(null); record.setSupplierId(supplierId.longValue()); record.setTenantId(supplier.getTenantId());
+        record.setCreateUser(SecurityUtils.getUserId()); record.setUpdateUser(SecurityUtils.getUserId());
+        record.setCreateTime(LocalDateTime.now()); record.setUpdateTime(LocalDateTime.now()); record.setDeleteFlag(0);
+        cooperationMapper.insert(record);
+    }
 }

--
Gitblit v1.9.3