From 38aaf481e936881b79671548d122d27e10997a72 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期五, 12 十二月 2025 16:33:52 +0800
Subject: [PATCH] yys 库存分析
---
src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java | 152 ++++++++++++++++++++++++++++++++++----------------
1 files changed, 103 insertions(+), 49 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 f9d6105..7c96246 100644
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
@@ -18,17 +18,22 @@
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.LossMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.Loss;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
@@ -53,6 +58,11 @@
@Override
public IPage<SalesLedgerSchedulingDto> listPage(Page page, SalesLedgerSchedulingDto salesLedgerSchedulingDto) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if(!"admin".equals(loginUser.getUsername())){
+ salesLedgerSchedulingDto.setProductionUserId(SecurityUtils.getLoginUser().getUser().getUserId());
+ salesLedgerSchedulingDto.setProductionUserName(SecurityUtils.getLoginUser().getUser().getNickName());
+ }
IPage<SalesLedgerSchedulingDto> list = salesLedgerSchedulingMapper.listPage(page, salesLedgerSchedulingDto);
if(list.getTotal() == 0){
return list;
@@ -77,8 +87,30 @@
}else{
i.setStatus("鐢熶骇涓�");
}
+ // 璁$畻鐢熶骇鎬婚噺 = 瑙勬牸 * 鏁伴噺 / 1000
+ String[] split = i.getSpecificationModel().split("\\*");
+ if(split.length == 2 && isNumeric(split[0]) && isNumeric(split[1])){
+ BigDecimal multiply = new BigDecimal(split[0])
+ .multiply(new BigDecimal(split[1])
+ .multiply(i.getQuantity()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
+ i.setTotalProduction(multiply);
+ }
+
});
return list;
+ }
+
+ public static boolean isNumeric(String str) {
+ if (str == null || str.isEmpty()) {
+ return false;
+ }
+ // 閬嶅巻瀛楃涓茬殑姣忎釜瀛楃锛屾鏌ユ槸鍚︿负鏁板瓧
+ for (int i = 0; i < str.length(); i++) {
+ if (!Character.isDigit(str.charAt(i))) {
+ return false;
+ }
+ }
+ return true;
}
@Override
@@ -119,52 +151,60 @@
i++;
continue;
}
- // 鑾峰彇绌轰綑鐐掓満
- String[] split = productionDispatchAddDto.getSpeculativeTradingName().split(",");
- if(split != null && split.length == 0){
+ SysUser sysUser1 = sysUserMapper.selectUserById(productionDispatchAddDto.getProductionUserId() == null ? loginUser.getUser().getUserId() : productionDispatchAddDto.getSchedulingUserId());
+ if(sysUser1 == null){
i++;
continue;
}
- List<SpeculativeTradingInfo> speculativeTradingInfos = speculativeTradingInfoMapper.selectList(new LambdaQueryWrapper<SpeculativeTradingInfo>()
- .in(SpeculativeTradingInfo::getName, Arrays.asList(split))
- .orderByAsc(SpeculativeTradingInfo::getSort));
- if(CollectionUtils.isEmpty(speculativeTradingInfos)){
- i++;
- continue;
- }
- AtomicReference<String> name = new AtomicReference<>(""); //闇�瑕佺粦瀹氱殑鐐掓満
- //閫氳繃瑙勬牸鍨嬪彿鍜屾帓浜ф暟閲忚绠楁湰娆$敓浜т骇閲�
- String[] split1 = productionDispatchAddDto.getSpecificationModel().split("\\*");
- if(split1.length != 2){
- i++;
- continue;
- }
- // 鏈鐢熶骇浜ч噺
- BigDecimal productionNum = new BigDecimal(split1[0])
- .multiply(new BigDecimal(split1[1]).multiply(productionDispatchAddDto.getSchedulingNum()));
- // 澶氫釜鐐掓満鎯呭喌
- if(speculativeTradingInfos.size() > 1){
- for (SpeculativeTradingInfo speculativeTradingInfo : speculativeTradingInfos) {
- // 鑾峰彇璇ョ倰鏈烘鍦ㄦ帓浜ч噺
- BigDecimal schedulingNumBySpeculativeTradingName = getSchedulingNumBySpeculativeTradingName(speculativeTradingInfo.getName());
- // 濡傛灉璇ョ倰鏈烘�婚噺(鍗曚綅kg闇�瑕佷箻1000) - 姝e湪鎺掍骇閲� >=鏈鐢熶骇浜ч噺灏卞垎閰嶆鐐掓満
- if(speculativeTradingInfo.getWorkLoad().multiply(new BigDecimal(1000)).subtract(schedulingNumBySpeculativeTradingName).compareTo(productionNum) >= 0){
- name.set(speculativeTradingInfo.getName());
- break;
- }
- }
- }else{
- // 鍗曚釜鐐掓満鎯呭喌
- name.set(speculativeTradingInfos.get(0).getName());
- }
- if(name.get().isEmpty()){
- i++;
- continue;
- }
+// // 鑾峰彇绌轰綑鐐掓満
+// String[] split = productionDispatchAddDto.getSpeculativeTradingName().split(",");
+// if(split != null && split.length == 0){
+// i++;
+// continue;
+// }
+// List<SpeculativeTradingInfo> speculativeTradingInfos = speculativeTradingInfoMapper.selectList(new LambdaQueryWrapper<SpeculativeTradingInfo>()
+// .in(SpeculativeTradingInfo::getName, Arrays.asList(split))
+// .orderByAsc(SpeculativeTradingInfo::getSort));
+// if(CollectionUtils.isEmpty(speculativeTradingInfos)){
+// i++;
+// continue;
+// }
+// AtomicReference<String> name = new AtomicReference<>(""); //闇�瑕佺粦瀹氱殑鐐掓満
+// //閫氳繃瑙勬牸鍨嬪彿鍜屾帓浜ф暟閲忚绠楁湰娆$敓浜т骇閲�
+// String[] split1 = productionDispatchAddDto.getSpecificationModel().split("\\*");
+// if(split1.length != 2){
+// i++;
+// continue;
+// }
+// // 鏈鐢熶骇浜ч噺
+// BigDecimal productionNum = new BigDecimal(split1[0])
+// .multiply(new BigDecimal(split1[1]).multiply(productionDispatchAddDto.getSchedulingNum()));
+// // 澶氫釜鐐掓満鎯呭喌
+// if(speculativeTradingInfos.size() > 1){
+// for (SpeculativeTradingInfo speculativeTradingInfo : speculativeTradingInfos) {
+// // 鑾峰彇璇ョ倰鏈烘鍦ㄦ帓浜ч噺
+// BigDecimal schedulingNumBySpeculativeTradingName = getSchedulingNumBySpeculativeTradingName(speculativeTradingInfo.getName());
+// // 濡傛灉璇ョ倰鏈烘�婚噺(鍗曚綅kg闇�瑕佷箻1000) - 姝e湪鎺掍骇閲� >=鏈鐢熶骇浜ч噺灏卞垎閰嶆鐐掓満
+// if(speculativeTradingInfo.getWorkLoad().multiply(new BigDecimal(1000)).subtract(schedulingNumBySpeculativeTradingName).compareTo(productionNum) >= 0){
+// name.set(speculativeTradingInfo.getName());
+// break;
+// }
+// }
+// }else{
+// // 鍗曚釜鐐掓満鎯呭喌
+// name.set(speculativeTradingInfos.get(0).getName());
+// }
+// if(name.get().isEmpty()){
+// i++;
+// continue;
+// }
SalesLedgerScheduling salesLedgerScheduling = SalesLedgerScheduling.builder()
.salesLedgerId(productionDispatchAddDto.getSalesLedgerId())
.salesLedgerProductId(productionDispatchAddDto.getSalesLedgerProductId())
- .speculativeTradingName(name.get())
+// .speculativeTradingName(name.get())
+ .productionUserId(sysUser1.getUserId())
+ .productionUserName(sysUser1.getNickName())
+ .productionLineId(productionDispatchAddDto.getLineId())
.schedulingUserId(sysUser.getUserId())
.schedulingUserName(sysUser.getNickName())
.schedulingNum(productionDispatchAddDto.getSchedulingNum())
@@ -210,8 +250,14 @@
totalNum.addAndGet(productionNum.intValue());
}
});
- return new BigDecimal(totalNum.get());
+ // 闇�瑕� / 鎹熻�楃巼
+ Loss loss = lossMapper.selectOne(new LambdaQueryWrapper<Loss>().last("limit 1"));
+ BigDecimal lossNum = loss == null ? new BigDecimal(6) : loss.getRate(); //娌℃湁鎹熻�楃巼鍒欓粯璁や负6
+
+ return new BigDecimal(totalNum.get()).multiply(new BigDecimal(100)).divide(lossNum, 2,RoundingMode.HALF_UP);
}
+
+ private final LossMapper lossMapper;
/**
@@ -249,6 +295,10 @@
@Override
public IPage<SalesLedgerSchedulingProcessDto> listPageProcess(Page page, SalesLedgerSchedulingProcessDto salesLedgerSchedulingDto) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if(!"admin".equals(loginUser.getUsername())){
+ salesLedgerSchedulingDto.setProductionUserId(loginUser.getUserId());
+ }
IPage<SalesLedgerSchedulingProcessDto> list = salesLedgerSchedulingMapper.listPageProcess(page, salesLedgerSchedulingDto);
// Set<Long> collect = list.getRecords().stream().map(SalesLedgerSchedulingProcessDto::getId).collect(Collectors.toSet());
// if(CollectionUtils.isEmpty(collect)) return list;
@@ -256,14 +306,16 @@
// salesLedgerWorkLambdaQueryWrapper.in(SalesLedgerWork::getSalesLedgerSchedulingId, collect)
// .ne(SalesLedgerWork::getStatus, 1);
// List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(salesLedgerWorkLambdaQueryWrapper);
-// list.getRecords().forEach(i -> {
-// // 鑾峰彇瀹屾垚鏁伴噺
-// i.setSuccessNum(salesLedgerWorks
-// .stream()
-// .filter(j -> j.getSalesLedgerSchedulingId().equals(i.getId()))
-// .map(SalesLedgerWork::getFinishedNum)
-// .reduce(BigDecimal.ZERO, BigDecimal::add));
-// });
+ list.getRecords().forEach(i -> {
+ // 璁$畻鐢熶骇鎬婚噺 = 瑙勬牸 * 鏁伴噺 / 1000
+ String[] split = i.getSpecificationModel().split("\\*");
+ if(split.length == 2 && isNumeric(split[0]) && isNumeric(split[1])){
+ BigDecimal multiply = new BigDecimal(split[0])
+ .multiply(new BigDecimal(split[1])
+ .multiply(i.getSuccessNum()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
+ i.setTotalProduction(multiply);
+ }
+ });
return list;
}
@@ -304,6 +356,8 @@
SalesLedgerWork.SalesLedgerWorkBuilder salesLedgerWorkBuilder = SalesLedgerWork.builder()
.salesLedgerSchedulingId(salesLedgerScheduling.getId())
.salesLedgerId(salesLedgerScheduling.getSalesLedgerId())
+ .productionUserId(salesLedgerScheduling.getProductionUserId())
+ .productionUserName(salesLedgerScheduling.getProductionUserName())
.remark(processSchedulingDto.getRemark())
.type(processSchedulingDto.getType())
.loss(processSchedulingDto.getLoss())
--
Gitblit v1.9.3