From 6256daf29f4c44944fa71a7dbd211b06bf1a495d Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期一, 25 五月 2026 09:46:20 +0800
Subject: [PATCH] feat: 报工投入用“投入重量/数量”
---
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java | 65 +++++++++++++++++++++++++++++---
1 files changed, 59 insertions(+), 6 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 8a1099c..1708441 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -7,8 +7,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
+import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.dto.ProductOrderDto;
import com.ruoyi.production.dto.ProductStructureDto;
@@ -16,7 +15,8 @@
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductOrderService;
import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.pojo.StockInventory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -24,6 +24,8 @@
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Service
@@ -65,6 +67,9 @@
@Autowired
private StockUtils stockUtils;
+ @Autowired
+ private StockInventoryMapper stockInventoryMapper;
+
@Override
public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
return productOrderMapper.pageProductOrder(page, productOrder);
@@ -91,6 +96,7 @@
productProcessRouteItem.setProductOrderId(productOrder.getId());
productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
+ productProcessRouteItem.setIsQuality(processRouteItem.getIsQuality());
int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
if (insert > 0) {
// 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
@@ -111,6 +117,8 @@
String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
ProductWorkOrder productWorkOrder = new ProductWorkOrder();
productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
+ productWorkOrder.setPriority(productOrder.getPriority());
+ productWorkOrder.setBatchNo(productOrder.getBatchNo());
productWorkOrder.setProductOrderId(productOrder.getId());
ProductOrder order = productOrderMapper.selectById(productOrder.getId());
productWorkOrder.setPlanQuantity(order.getQuantity());
@@ -133,10 +141,33 @@
}
@Override
- public Boolean addProductOrder(ProductOrder productOrder) {
+ public Boolean addProductOrder(ProductOrderDto productOrderDto) {
String string = generateNextOrderNo(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")));
+ ProductOrder productOrder = new ProductOrder();
+ BeanUtils.copyProperties(productOrderDto, productOrder);
productOrder.setNpsNo(string);
productOrder.setCompleteQuantity(BigDecimal.ZERO);
+ List<StockInventory> stockInventoryList = stockInventoryMapper.selectList(null);
+ if (productOrder.getBatchNo() == null || productOrder.getBatchNo().isEmpty()) {
+ String batchNo;
+ // 鑾峰彇褰撳墠鏈堜唤锛堜袱浣嶏級
+ LocalDate now = LocalDate.now();
+ String monthFlag = now.format(DateTimeFormatter.ofPattern("MM"));
+
+ // 鑾峰彇褰撳墠鏈堜唤鐨勬渶澶ф祦姘村彿
+ int maxSeq = getCurrentMonthMaxSeq(productOrderDto.getMaterialCode(),
+ productOrderDto.getProductModelName(), monthFlag, stockInventoryList);
+
+ // 鏂版祦姘村彿 = 鏈�澶ф祦姘村彿 + 1
+ int newSeq = maxSeq + 1;
+ String seqStr = String.format("%03d", newSeq);
+
+ // 缁勮batchNo
+ batchNo = productOrderDto.getMaterialCode() + productOrderDto.getProductModelName() + "P" + monthFlag + seqStr;
+ productOrder.setBatchNo(batchNo);
+ } else {
+ productOrder.setBatchNo(productOrder.getBatchNo());
+ }
this.save(productOrder);
if (ObjectUtils.isNotEmpty(productOrder.getRouteId())) {
this.bindingRoute(productOrder);
@@ -144,16 +175,38 @@
return true;
}
+ /**
+ * 鏌ヨ褰撳墠鏈堜唤宸插瓨鍦ㄧ殑鏈�澶ф祦姘村彿
+ */
+ private static int getCurrentMonthMaxSeq(String materialCode, String model, String monthFlag, List<StockInventory> existingList) {
+ int maxSeq = 0;
+ String prefix = materialCode + model + "P" + monthFlag;
+ // 姝e垯鍖归厤锛氬墠缂� + 3浣嶆暟瀛�
+ Pattern pattern = Pattern.compile(Pattern.quote(prefix) + "(\\d{3})");
+ for (StockInventory item : existingList) {
+ String batchNo = item.getBatchNo();
+ if (batchNo == null) continue;
+ Matcher matcher = pattern.matcher(batchNo);
+ if (matcher.find()) {
+ int seq = Integer.parseInt(matcher.group(1));
+ if (seq > maxSeq) {
+ maxSeq = seq;
+ }
+ }
+ }
+ return maxSeq;
+ }
+
@Override
public Boolean delete(Long[] ids) {
//濡傛灉宸茬粡寮�濮嬬敓浜�,涓嶈兘鍒犻櫎
//鏌ヨ鐢熶骇璁㈠崟涓嬬殑宸ュ崟
List<ProductWorkOrder> productWorkOrders = productWorkOrderMapper.selectList(Wrappers.<ProductWorkOrder>lambdaQuery().in(ProductWorkOrder::getProductOrderId, ids));
- if (productWorkOrders.size()>0){
+ if (productWorkOrders.size() > 0) {
//鍒ゆ柇鏄惁鏈夋姤宸ユ暟鎹�
List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(Wrappers.<ProductionProductMain>lambdaQuery()
.in(ProductionProductMain::getWorkOrderId, productWorkOrders.stream().map(ProductWorkOrder::getId).collect(Collectors.toList())));
- if (productionProductMains.size()>0){
+ if (productionProductMains.size() > 0) {
throw new RuntimeException("鐢熶骇璁㈠崟宸茬粡寮�濮嬬敓浜�,涓嶈兘鍒犻櫎");
}
//鍒犻櫎宸ュ崟
--
Gitblit v1.9.3