From b2af5f5f3360cd95674d828b83dc696d1f5ff3fa Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期二, 11 十一月 2025 18:02:09 +0800
Subject: [PATCH] yys 1.仓储物流增加分类管理 2.仓储物流分类管理导出接口 4.新疆生产管控定制化
---
src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 109 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
index 0be634b..0bfe363 100644
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
@@ -5,15 +5,18 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto;
import com.ruoyi.production.dto.*;
import com.ruoyi.production.mapper.SalesLedgerSchedulingMapper;
import com.ruoyi.production.mapper.SalesLedgerWorkMapper;
+import com.ruoyi.production.mapper.SpeculativeTradingInfoMapper;
import com.ruoyi.production.pojo.SalesLedgerScheduling;
import com.ruoyi.production.pojo.SalesLedgerWork;
+import com.ruoyi.production.pojo.SpeculativeTradingInfo;
import com.ruoyi.production.service.SalesLedgerSchedulingService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@@ -25,8 +28,11 @@
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@@ -95,13 +101,46 @@
private final SysUserMapper sysUserMapper;
+ private final SpeculativeTradingInfoMapper speculativeTradingInfoMapper;
+
@Override
public int productionDispatch(ProductionDispatchAddDto productionDispatchAddDto) {
SysUser sysUser = sysUserMapper.selectUserById(productionDispatchAddDto.getSchedulingUserId());
if(sysUser == null) throw new RuntimeException("鎺掍骇浜轰笉瀛樺湪");
+ // 鑾峰彇绌轰綑鐐掓満
+ String[] split = productionDispatchAddDto.getSpeculativeTradingName().split(",");
+ if(split != null && split.length == 0){
+ throw new RuntimeException("鐢熶骇鐐掓満涓嶈兘涓虹┖");
+ }
+ List<SpeculativeTradingInfo> speculativeTradingInfos = speculativeTradingInfoMapper.selectList(new LambdaQueryWrapper<SpeculativeTradingInfo>()
+ .in(SpeculativeTradingInfo::getName, Arrays.asList(split))
+ .orderByAsc(SpeculativeTradingInfo::getSort));
+ if(CollectionUtils.isEmpty(speculativeTradingInfos)){
+ throw new RuntimeException("鏃犵┖浣欑倰鏈�,璇锋鏌ョ倰鏈鸿〃");
+ }
+ AtomicReference<String> name = new AtomicReference<>(""); //闇�瑕佺粦瀹氱殑鐐掓満
+ //閫氳繃瑙勬牸鍨嬪彿鍜屾帓浜ф暟閲忚绠楁湰娆$敓浜т骇閲�
+ String[] split1 = productionDispatchAddDto.getSpecificationModel().split("\\*");
+ if(split1.length != 2) throw new RuntimeException("瑙勬牸鍨嬪彿鏍煎紡閿欒");
+ // 鏈鐢熶骇浜ч噺
+ BigDecimal productionNum = new BigDecimal(split1[0])
+ .multiply(new BigDecimal(split1[1]).multiply(productionDispatchAddDto.getSchedulingNum()));
+ // 澶氫釜鐐掓満鎯呭喌
+ if(speculativeTradingInfos.size() > 1){
+ speculativeTradingInfos.forEach(item ->{
+ // 鑾峰彇璇ョ倰鏈烘鍦ㄦ帓浜ч噺
+ BigDecimal schedulingNumBySpeculativeTradingName = getSchedulingNumBySpeculativeTradingName(item.getName());
+ // 濡傛灉璇ョ倰鏈烘�婚噺 - 姝e湪鎺掍骇閲� >=鏈鐢熶骇浜ч噺灏卞垎閰嶆鐐掓満
+ if(item.getWorkLoad().subtract(schedulingNumBySpeculativeTradingName).compareTo(productionNum) >= 0){
+ name.set(item.getName());
+ }
+ });
+ }
+ if(name.get().isEmpty()) throw new RuntimeException("鏃犵┖浣欑倰鏈�,璇锋鏌ョ倰鏈鸿〃");
SalesLedgerScheduling salesLedgerScheduling = SalesLedgerScheduling.builder()
.salesLedgerId(productionDispatchAddDto.getSalesLedgerId())
.salesLedgerProductId(productionDispatchAddDto.getSalesLedgerProductId())
+ .speculativeTradingName(name.get())
.schedulingUserId(productionDispatchAddDto.getSchedulingUserId())
.schedulingUserName(sysUser.getNickName())
.schedulingNum(productionDispatchAddDto.getSchedulingNum())
@@ -111,6 +150,75 @@
return salesLedgerSchedulingMapper.insert(salesLedgerScheduling);
}
+ private final SalesLedgerProductMapper salesLedgerProductMapper;
+
+ /**
+ *閫氳繃鐐掓満鍚嶇О鑾峰彇褰撳ぉ姝e湪鎺掍骇閲�
+ * @return
+ */
+ public BigDecimal getSchedulingNumBySpeculativeTradingName(String speculativeTradingName){
+ LambdaQueryWrapper<SalesLedgerScheduling> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(SalesLedgerScheduling::getSpeculativeTradingName, speculativeTradingName)
+ .eq(SalesLedgerScheduling::getSchedulingDate, LocalDate.now());
+ List<SalesLedgerScheduling> salesLedgerSchedulings = salesLedgerSchedulingMapper.selectList(queryWrapper);
+ if(CollectionUtils.isEmpty(salesLedgerSchedulings)){
+ return BigDecimal.ZERO;
+ }
+ List<Long> collect = salesLedgerSchedulings.stream().map(SalesLedgerScheduling::getSalesLedgerProductId).collect(Collectors.toList());
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+ .in(SalesLedgerProduct::getId, collect));
+ if(CollectionUtils.isEmpty(salesLedgerProducts)) return BigDecimal.ZERO;
+ AtomicInteger totalNum = new AtomicInteger(0); //鎬绘暟
+ salesLedgerSchedulings.forEach(item ->{
+ List<SalesLedgerProduct> collect1 = salesLedgerProducts.stream()
+ .filter(j -> j.getId().equals(item.getSalesLedgerProductId()))
+ .collect(Collectors.toList());
+ if(!CollectionUtils.isEmpty(collect1)){
+ SalesLedgerProduct salesLedgerProduct = collect1.get(0);
+ // 鏍规嵁浜у搧瑙勬牸 * 鎺掍骇鏁伴噺 鑾峰彇鏈鐢熶骇浜ч噺骞剁疮璁�
+ String[] split = salesLedgerProduct.getSpecificationModel().split("\\*");
+ BigDecimal productionNum = new BigDecimal(split[0])
+ .multiply(new BigDecimal(split[1]).multiply(item.getSchedulingNum()));
+ totalNum.addAndGet(productionNum.intValue());
+ }
+ });
+ return new BigDecimal(totalNum.get());
+ }
+
+
+ /**
+ *閫氳繃鎵归噺鐐掓満鍚嶇О鑾峰彇褰撳ぉ姝e湪鎺掍骇閲�
+ * @return
+ */
+ public BigDecimal getSchedulingNumBySpeculativeTradingNameList(List<String> speculativeTradingName){
+ LambdaQueryWrapper<SalesLedgerScheduling> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.in(SalesLedgerScheduling::getSpeculativeTradingName, speculativeTradingName)
+ .eq(SalesLedgerScheduling::getSchedulingDate, LocalDate.now());
+ List<SalesLedgerScheduling> salesLedgerSchedulings = salesLedgerSchedulingMapper.selectList(queryWrapper);
+ if(CollectionUtils.isEmpty(salesLedgerSchedulings)){
+ return BigDecimal.ZERO;
+ }
+ List<Long> collect = salesLedgerSchedulings.stream().map(SalesLedgerScheduling::getSalesLedgerProductId).collect(Collectors.toList());
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+ .in(SalesLedgerProduct::getId, collect));
+ if(CollectionUtils.isEmpty(salesLedgerProducts)) return BigDecimal.ZERO;
+ AtomicInteger totalNum = new AtomicInteger(0); //鎬绘暟
+ salesLedgerSchedulings.forEach(item ->{
+ List<SalesLedgerProduct> collect1 = salesLedgerProducts.stream()
+ .filter(j -> j.getId().equals(item.getSalesLedgerProductId()))
+ .collect(Collectors.toList());
+ if(!CollectionUtils.isEmpty(collect1)){
+ SalesLedgerProduct salesLedgerProduct = collect1.get(0);
+ // 鏍规嵁浜у搧瑙勬牸 * 鎺掍骇鏁伴噺 鑾峰彇鏈鐢熶骇浜ч噺骞剁疮璁�
+ String[] split = salesLedgerProduct.getSpecificationModel().split("\\*");
+ BigDecimal productionNum = new BigDecimal(split[0])
+ .multiply(new BigDecimal(split[1]).multiply(item.getSchedulingNum()));
+ totalNum.addAndGet(productionNum.intValue());
+ }
+ });
+ return new BigDecimal(totalNum.get());
+ }
+
@Override
public IPage<SalesLedgerSchedulingProcessDto> listPageProcess(Page page, SalesLedgerSchedulingProcessDto salesLedgerSchedulingDto) {
IPage<SalesLedgerSchedulingProcessDto> list = salesLedgerSchedulingMapper.listPageProcess(page, salesLedgerSchedulingDto);
--
Gitblit v1.9.3