From ce7582bd007b671dc311ee8511cc409230ef1b1c Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期二, 08 七月 2025 17:49:29 +0800
Subject: [PATCH] yys  1.出库管理-分页查询      2.出库管理-导出      3.出库管理-领用      4.出库台账-分页查询      5.出库台账-导出      6.出库台账-删除      7.库存管理-分页查询      8.库存管理-导出      9.库存管理-删除

---
 src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java |  198 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 198 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
new file mode 100644
index 0000000..5590a6c
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -0,0 +1,198 @@
+package com.ruoyi.procurementrecord.service.impl;
+
+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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.procurementrecord.dto.*;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecord;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
+import com.ruoyi.procurementrecord.service.ProcurementRecordService;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author :yys
+ * @date : 2025/7/7 14:38
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class ProcurementRecordServiceImpl extends ServiceImpl<ProcurementRecordMapper, ProcurementRecord> implements ProcurementRecordService {
+
+    private final ProcurementRecordMapper procurementRecordMapper;
+
+    private final ProcurementRecordOutMapper procurementRecordOutMapper;
+
+    private final SalesLedgerProductMapper salesLedgerProductMapper;
+
+    @Override
+    public List<ProcurementDto> listProcurementBySalesLedgerId(ProcurementDto procurementDto) {
+        List<ProcurementDto> procurementDtos = procurementRecordMapper.listProcurementBySalesLedgerId(procurementDto);
+        // 璁$畻寰呭叆搴撴暟閲�
+        // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+        List<Integer> collect = procurementDtos.stream().map(ProcurementDto::getId).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty( collect)){
+            return procurementDtos;
+        }
+        LambdaQueryWrapper<ProcurementRecord> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        procurementRecordLambdaQueryWrapper.in(ProcurementRecord::getSalesLedgerProductId, collect);
+        List<ProcurementRecord> procurementRecords = procurementRecordMapper.selectList(procurementRecordLambdaQueryWrapper);
+        if(CollectionUtils.isEmpty( procurementRecords)){
+            return procurementDtos;
+        }
+        for (ProcurementDto dto : procurementDtos) {
+            // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍏ュ簱璁板綍
+            List<ProcurementRecord> collect1 = procurementRecords.stream()
+                    .filter(procurementRecord -> procurementRecord.getSalesLedgerProductId().equals(dto.getId()))
+                    .collect(Collectors.toList());
+            
+            // 濡傛灉娌℃湁鐩稿叧鐨勫叆搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
+            if(CollectionUtils.isEmpty(collect1)){
+                dto.setQuantity0(dto.getQuantity());
+                continue;
+            }
+            
+            // 璁$畻宸插叆搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭叆搴撴暟閲�
+            BigDecimal totalInboundNum = collect1.stream()
+                    .map(ProcurementRecord::getInboundNum)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            
+            // 寰呭叆搴撴暟閲� = 鎬绘暟閲� - 宸插叆搴撴暟閲�
+            dto.setQuantity0(dto.getQuantity().subtract(totalInboundNum));
+        }
+        return procurementDtos;
+    }
+
+    public ProcurementRecord getProcurementRecordById(Integer id){
+        ProcurementRecord procurementRecord = procurementRecordMapper.selectById(id);
+        if(procurementRecord == null) {
+            throw new RuntimeException("鏈壘鍒拌閲囪喘鍏ュ簱璁板綍");
+        }
+        return procurementRecord;
+    }
+
+    public List<ProcurementRecord> getProcurementRecordByIds(List<Integer> id){
+        List<ProcurementRecord> procurementRecord = procurementRecordMapper.selectBatchIds(id);
+        if(procurementRecord == null) {
+            throw new RuntimeException("鏈壘鍒拌閲囪喘鍏ュ簱璁板綍");
+        }
+        return procurementRecord;
+    }
+
+    @Override
+    public int updatePro(ProcurementUpdateDto procurementDto) {
+        ProcurementRecord procurementRecordById = getProcurementRecordById(procurementDto.getId());
+        procurementRecordById.setInboundNum(procurementDto.getQuantityStock());
+        return procurementRecordMapper.updateById(procurementRecordById);
+    }
+
+    @Override
+    public int deletePro(ProcurementUpdateDto procurementDto) {
+        List<ProcurementRecord> procurementRecordById = getProcurementRecordByIds(procurementDto.getIds());
+        procurementRecordMapper.deleteBatchIds(procurementRecordById.stream().map(ProcurementRecord::getId).collect(Collectors.toList()));
+        // 鍒犻櫎鎵�鏈夊搴旂殑鍑哄簱璁板綍
+        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordOutLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        procurementRecordOutLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, procurementDto.getIds());
+        List<ProcurementRecordOut> procurementRecordOuts = procurementRecordOutMapper.selectList(procurementRecordOutLambdaQueryWrapper);
+        if(!CollectionUtils.isEmpty(procurementRecordOuts)){
+            procurementRecordOutMapper.deleteBatchIds(procurementRecordOuts.stream().map(ProcurementRecordOut::getId).collect(Collectors.toList()));
+        }
+        return 0;
+    }
+
+    @Override
+    public void export(HttpServletResponse response) {
+        List<ProcurementPageDto> list =procurementRecordMapper.list();
+        ExcelUtil<ProcurementPageDto> util = new ExcelUtil<ProcurementPageDto>(ProcurementPageDto.class);
+        util.exportExcel(response, list, "鍏ュ簱鍙拌处");
+    }
+
+    @Override
+    public int add(ProcurementAddDto procurementDto) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        // 鎵归噺鏂板
+        for (Details detail : procurementDto.getDetails()) {
+            // 鏌ヨ閲囪喘鍏ュ簱鏁伴噺
+            LambdaQueryWrapper<ProcurementRecord> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            procurementRecordLambdaQueryWrapper.eq(ProcurementRecord::getSalesLedgerProductId, detail.getId());
+            Long aLong = procurementRecordMapper.selectCount(procurementRecordLambdaQueryWrapper);
+
+            ProcurementRecord.ProcurementRecordBuilder procurementRecordBuilder = ProcurementRecord.builder()
+                    .salesLedgerProductId(detail.getId())
+                    .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�"+ (aLong + 1) + "鎵规")
+                    .inboundNum(detail.getInboundQuantity())
+                    .createDate(LocalDateTime.now())
+                    .userId(loginUser.getUserId())
+                    .tenantId(loginUser.getTenantId())
+                    .createBy(procurementDto.getNickName());
+            this.save(procurementRecordBuilder.build());
+            // 鍏ュ簱鎴愬姛鍑忔帀閲囪喘鏁伴噺
+//            LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>();
+//            salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getId, detail.getId());
+//            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(salesLedgerProductLambdaQueryWrapper);
+//            if(salesLedgerProduct == null){
+//               throw new RuntimeException("鏈壘鍒拌鍟嗗搧");
+//            }
+//            salesLedgerProduct.setQuantity(salesLedgerProduct.getQuantity().subtract(detail.getInboundQuantity()));
+//            salesLedgerProductMapper.updateById(salesLedgerProduct);
+        }
+        return 1;
+    }
+
+    @Override
+    public IPage<ProcurementPageDto> listPage(Page page, ProcurementPageDto procurementDto) {
+        IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPage(page, procurementDto);
+        List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords();
+        // 璁$畻寰呭叆搴撴暟閲�
+        // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+        List<Integer> collect = procurementPageDtos.stream().map(ProcurementPageDto::getId).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty( collect)){
+            return procurementPageDtoIPage;
+        }
+        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
+        List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
+        if(CollectionUtils.isEmpty( procurementRecords)){
+            return procurementPageDtoIPage;
+        }
+        for (ProcurementPageDto dto : procurementPageDtos) {
+            // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍
+            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
+                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
+                    .collect(Collectors.toList());
+
+            // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
+            if(CollectionUtils.isEmpty(collect1)){
+                dto.setInboundNum0(dto.getInboundNum());
+                continue;
+            }
+
+            // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
+            BigDecimal totalInboundNum = collect1.stream()
+                    .map(ProcurementRecordOut::getInboundNum)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
+            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
+        }
+        return procurementPageDtoIPage;
+    }
+
+}

--
Gitblit v1.9.3