From f088078e626e16b28d69cdbcbf514b30f1dcefe7 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期三, 22 四月 2026 11:51:58 +0800
Subject: [PATCH] refactor(production): 优化生产订单及工单号生成逻辑
---
src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java | 131 ++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 126 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
index a080dd3..a716575 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -1,38 +1,159 @@
package com.ruoyi.quality.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+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.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
+import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.production.mapper.ProductProcessRouteItemMapper;
+import com.ruoyi.production.mapper.ProductProcessRouteMapper;
+import com.ruoyi.production.mapper.ProductWorkOrderMapper;
+import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.ProductOrderService;
+import com.ruoyi.production.service.ProductProcessService;
+import com.ruoyi.production.service.ProductWorkOrderService;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
import com.ruoyi.quality.pojo.QualityInspect;
-import com.ruoyi.quality.pojo.QualityTestStandard;
import com.ruoyi.quality.pojo.QualityUnqualified;
import com.ruoyi.quality.service.IQualityInspectService;
import com.ruoyi.quality.service.IQualityUnqualifiedService;
+import com.ruoyi.stock.service.StockUninventoryService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
@AllArgsConstructor
@Service
-public class QualityUnqualifiedServiceImpl extends ServiceImpl<QualityUnqualifiedMapper, QualityUnqualified> implements IQualityUnqualifiedService {
+public class QualityUnqualifiedServiceImpl extends ServiceImpl<QualityUnqualifiedMapper, QualityUnqualified> implements IQualityUnqualifiedService {
+ private final StockUtils stockUtils;
+ private final ProductWorkOrderService productWorkOrderService;
private QualityUnqualifiedMapper qualityUnqualifiedMapper;
+ private IQualityInspectService qualityInspectService;
+ private ProductOrderService productOrderService;
+ private ProductionProductMainMapper productionProductMainMapper;
+ private ProductProcessRouteMapper productProcessRouteMapper;
+ private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+ private ProductWorkOrderMapper productWorkOrderMapper;
+ private StockUninventoryService stockUninventoryService;
+ private final ProductProcessService productProcessService;
@Override
public IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) {
- return qualityUnqualifiedMapper.qualityUnqualifiedListPage(page,qualityUnqualified);
+ return qualityUnqualifiedMapper.qualityUnqualifiedListPage(page, qualityUnqualified);
}
@Override
public void qualityUnqualifiedExport(HttpServletResponse response, QualityUnqualified qualityUnqualified) {
- List<QualityUnqualified> qualityUnqualifieds =qualityUnqualifiedMapper.qualityUnqualifiedExport(qualityUnqualified);
+ List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.qualityUnqualifiedExport(qualityUnqualified);
ExcelUtil<QualityUnqualified> util = new ExcelUtil<QualityUnqualified>(QualityUnqualified.class);
util.exportExcel(response, qualityUnqualifieds, "涓嶅悎鏍肩鐞嗗鍑�");
}
+
+ @Override
+ public int deal(QualityUnqualified qualityUnqualified) {
+ QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId());
+ QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId());
+ if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType() != 0) {
+ switch (qualityUnqualified.getDealResult()) {
+ case "杩斾慨":
+ case "杩斿伐":
+ //鍒ゆ柇璐ㄦ琛ㄦ槸鍚︽湁鐩稿叧鐨勬姤宸d,濡傛灉鏈夋姤宸d,閭d箞杩斿伐闇�瑕侀噸鏂板垱寤虹敓浜ц鍗曢噸鏂扮敓浜�
+ if (ObjectUtils.isNotNull(qualityInspect.getProductMainId())) {
+ //杩斿伐闇�瑕侀噸鏂板垱寤虹敓浜ц鍗曢噸鏂扮敓浜�
+ ProductOrder productOrder = productionProductMainMapper.getOrderByMainId(qualityInspect.getProductMainId());
+ ProductOrder order = new ProductOrder();
+ BeanUtils.copyProperties(productOrder, order);
+ order.setId(null);
+ order.setQuantity(unqualified.getQuantity());
+ order.setCompleteQuantity(BigDecimal.ZERO);
+ order.setStartTime(null);
+ order.setEndTime(null);
+ productOrderService.save(order);
+ //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎涓昏〃
+ ProductProcessRoute productProcessRoute = productProcessRouteMapper.selectList(Wrappers.<ProductProcessRoute>lambdaQuery().eq(ProductProcessRoute::getProductOrderId, productOrder.getId()).orderByDesc(ProductProcessRoute::getId)).get(0);
+ ProductProcessRoute newProcessRoute = new ProductProcessRoute();
+ BeanUtils.copyProperties(productProcessRoute, newProcessRoute);
+ newProcessRoute.setId(null);
+ newProcessRoute.setProductOrderId(order.getId());
+ productProcessRouteMapper.insert(newProcessRoute);
+ //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎瀛愯〃
+ List<ProductProcessRouteItem> processRouteItems = productProcessRouteItemMapper.selectList(new QueryWrapper<ProductProcessRouteItem>().lambda().eq(ProductProcessRouteItem::getProductRouteId, productProcessRoute.getId()));
+
+ Map<Long, ProductProcess> productProcessMap = productProcessService
+ .list(new LambdaQueryWrapper<ProductProcess>().in(ProductProcess::getId, processRouteItems.stream().map(ProductProcessRouteItem::getProcessId).collect(Collectors.toList())))
+ .stream()
+ .collect(Collectors.toMap(ProductProcess::getId, productProcess -> productProcess));
+
+ for (ProductProcessRouteItem processRouteItem : processRouteItems) {
+ ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
+ BeanUtils.copyProperties(processRouteItem, productProcessRouteItem);
+ productProcessRouteItem.setId(null);
+ productProcessRouteItem.setProductRouteId(newProcessRoute.getId());
+ int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
+ if (insert > 0) {
+ ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+ productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
+ productWorkOrder.setProductOrderId(order.getId());
+ productWorkOrder.setPlanQuantity(order.getQuantity());
+ productWorkOrder.setWorkOrderNo("FG"+productWorkOrderService.generateProductWorkOrder(null, productProcessMap.getOrDefault(productProcessRouteItem.getProcessId(), new ProductProcess()).getName(), productOrder.getNpsNo()));
+ productWorkOrder.setStatus(1);
+ productWorkOrderMapper.insert(productWorkOrder);
+ }
+ }
+ }
+ break;
+ case "鎶ュ簾":
+ //璋冪敤涓嶅悎鏍煎簱瀛樻帴鍙� 鍏ヤ笉鍚堟牸搴�
+ stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), "-", "-", "-");
+ break;
+ case "璁╂鏀捐":
+ //璋冪敤鎻愪氦鍚堟牸鐨勬帴鍙�
+ stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId(), "-", "-", "-");
+ break;
+ default:
+ break;
+ }
+ } else {
+ //鏌ヨ瀵瑰簲鐨勮鏍煎瀷鍙穒d
+ Long modelId = qualityUnqualifiedMapper.getModelId(qualityUnqualified.getProductName(), qualityUnqualified.getModel());
+ switch (qualityUnqualified.getDealResult()) {
+ case "鎶ュ簾":
+ //璋冪敤涓嶅悎鏍煎簱瀛樻帴鍙� 鍏ヤ笉鍚堟牸搴�
+ stockUtils.addUnStock(modelId, unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), "-", "-", "-");
+ break;
+ case "璁╂鏀捐":
+ //璋冪敤鎻愪氦鍚堟牸鐨勬帴鍙�
+ stockUtils.addStock(modelId, unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId(), "-", "-", "-");
+ break;
+ default:
+ break;
+ }
+
+ }
+ qualityUnqualified.setInspectState(1);//宸插鐞�
+ return qualityUnqualifiedMapper.updateById(qualityUnqualified);
+ }
+
+ @Override
+ public QualityUnqualified getUnqualified(Integer id) {
+ return qualityUnqualifiedMapper.getUnqualified(id);
+ }
}
--
Gitblit v1.9.3