From 422a5676c2d96dd37c1be62935a314d70fef79b5 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 15 七月 2026 15:28:04 +0800
Subject: [PATCH] 修改不合格管理
---
src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java | 201 +++++++++++++++++++++----------------------------
1 files changed, 87 insertions(+), 114 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 303826a..ffd12d9 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -11,14 +11,9 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
-import com.ruoyi.production.mapper.ProductionOrderMapper;
-import com.ruoyi.production.mapper.ProductionOrderRoutingMapper;
-import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper;
import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.service.ProductionAccountService;
import com.ruoyi.production.pojo.ProductionOperationTask;
-import com.ruoyi.production.pojo.ProductionOrder;
-import com.ruoyi.production.pojo.ProductionOrderRouting;
-import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
import com.ruoyi.production.pojo.ProductionProductMain;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
import com.ruoyi.quality.pojo.QualityInspect;
@@ -30,15 +25,14 @@
import com.ruoyi.stock.service.StockUninventoryService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import jakarta.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
@AllArgsConstructor
@Service
@@ -48,12 +42,10 @@
private final QualityUnqualifiedMapper qualityUnqualifiedMapper;
private final IQualityInspectService qualityInspectService;
private final ProductionProductMainMapper productionProductMainMapper;
- private final ProductionOrderMapper productionOrderMapper;
- private final ProductionOrderRoutingMapper productionOrderRoutingMapper;
- private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
private final ProductionOperationTaskMapper productionOperationTaskMapper;
private final StockUninventoryService stockUninventoryService;
private final StockInRecordService stockInRecordService;
+ private final ProductionAccountService productionAccountService;
@Override
public IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) {
@@ -68,42 +60,23 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public int deal(QualityUnqualified qualityUnqualified) {
QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId());
QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId());
String batchNo = qualityInspect == null ? null
: resolveProductionBatchNo(qualityInspect.getProductMainId(), qualityInspect.getId(), qualityInspect.getProductModelId());
- if (qualityUnqualified.getDealType() != null) {
- switch (qualityUnqualified.getDealType()) {
- case 0:
- qualityUnqualified.setDealResult("杞诲井杩斿伐");
- break;
- case 1:
- qualityUnqualified.setDealResult("涓ラ噸杩斿伐");
- break;
- case 2:
- qualityUnqualified.setDealResult("鎶ュ簾");
- break;
- default:
- break;
- }
- }
if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType() != 0) {
+ ProductionProductMain sourceMain = null;
+ if (ObjectUtils.isNotNull(qualityInspect.getProductMainId())) {
+ sourceMain = productionProductMainMapper.selectById(qualityInspect.getProductMainId());
+ }
switch (qualityUnqualified.getDealResult()) {
- case "涓ラ噸杩斿伐":
- case "杞诲井杩斿伐":
- if (ObjectUtils.isNotNull(qualityInspect.getProductMainId())) {
- ProductionProductMain sourceMain = productionProductMainMapper.selectById(qualityInspect.getProductMainId());
- if (sourceMain == null || sourceMain.getProductionOperationTaskId() == null) {
- throw new ServiceException("鍘嗗彶鎶ュ伐鏈粦瀹氱敓浜у伐鍗曪紝鏃犳硶鎸夋柊妯″瀷杩斿伐");
- }
- createReworkProductionByNewModel(sourceMain, unqualified.getQuantity());
- }
+ case "鎶ュ伐":
+ handleProductionReportResult(qualityUnqualified, unqualified, sourceMain);
break;
case "鎶ュ簾":
- stockUtils.addUnStockWithBatchNo(qualityInspect.getProductModelId(), unqualified.getQuantity(),
- StockInQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), batchNo);
- qualityUnqualified.setRegenerateNewOrder(1);
+ handleProductionScrapResult(qualityInspect, qualityUnqualified, unqualified, sourceMain, batchNo);
break;
case "璁╂鏀捐":
stockUtils.addStockWithBatchNo(qualityInspect.getProductModelId(), unqualified.getQuantity(),
@@ -136,87 +109,87 @@
return qualityUnqualifiedMapper.getUnqualified(id);
}
+ private void handleProductionReportResult(QualityUnqualified qualityUnqualified,
+ QualityUnqualified sourceUnqualified,
+ ProductionProductMain sourceMain) {
+ Integer dealType = qualityUnqualified.getDealType();
+ if (dealType == null) {
+ throw new ServiceException("鎶ュ伐鏃跺繀椤婚�夋嫨涓嶅悎鏍肩被鍨�");
+ }
+ if (sourceMain == null || sourceMain.getProductionOperationTaskId() == null) {
+ throw new ServiceException("鍘嗗彶鎶ュ伐鏈粦瀹氱敓浜у伐鍗曪紝鏃犳硶鎵ц鎶ュ伐澶勭悊");
+ }
+ if (Integer.valueOf(0).equals(dealType)) {
+ applyLightRework(sourceMain, qualityUnqualified);
+ return;
+ }
+ if (Integer.valueOf(1).equals(dealType)) {
+ markSourceMainAsUnpaid(sourceMain, 2);
+ createReworkProductionByNewModel(sourceMain, sourceUnqualified.getQuantity());
+ qualityUnqualified.setRegenerateNewOrder(1);
+ productionAccountService.rebuildByProductionProductMainId(sourceMain.getId());
+ return;
+ }
+ throw new ServiceException("鎶ュ伐澶勭悊浠呮敮鎸佽交寰繑宸ユ垨涓ラ噸杩斿伐");
+ }
+
+ private void handleProductionScrapResult(QualityInspect qualityInspect,
+ QualityUnqualified qualityUnqualified,
+ QualityUnqualified sourceUnqualified,
+ ProductionProductMain sourceMain,
+ String batchNo) {
+ if (sourceMain == null || sourceMain.getProductionOperationTaskId() == null) {
+ throw new ServiceException("鍘嗗彶鎶ュ伐鏈粦瀹氱敓浜у伐鍗曪紝鏃犳硶鎵ц鎶ュ簾澶勭悊");
+ }
+ markSourceMainAsUnpaid(sourceMain, 3);
+ createReworkProductionByNewModel(sourceMain, sourceUnqualified.getQuantity());
+ qualityUnqualified.setRegenerateNewOrder(1);
+ productionAccountService.rebuildByProductionProductMainId(sourceMain.getId());
+ // 鍘熸湁鎶ュ簾搴撳瓨澶勭悊閫昏緫鍏堟寜鏂拌鍒欐敞閲婏紝涓嶅啀鐩存帴鎸変笉鍚堟牸鍗曟墽琛屾姤搴熷嚭搴撱��
+ // stockUtils.addUnStockWithBatchNo(qualityInspect.getProductModelId(), sourceUnqualified.getQuantity(),
+ // StockInQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), sourceUnqualified.getId(), batchNo);
+ }
+
+ private void applyLightRework(ProductionProductMain sourceMain, QualityUnqualified qualityUnqualified) {
+ if (qualityUnqualified.getRepairWorkHour() == null
+ || qualityUnqualified.getRepairWorkHour().compareTo(BigDecimal.ZERO) <= 0) {
+ throw new ServiceException("杞诲井杩斿伐蹇呴』濉啓澶т簬0鐨勪慨鐞嗗伐鏃�");
+ }
+ ProductionProductMain update = new ProductionProductMain();
+ update.setId(sourceMain.getId());
+ update.setReportType(1);
+ update.setRepairWorkHour(defaultDecimal(sourceMain.getRepairWorkHour()).add(defaultDecimal(qualityUnqualified.getRepairWorkHour())));
+ productionProductMainMapper.updateById(update);
+ qualityUnqualified.setRegenerateNewOrder(0);
+ productionAccountService.rebuildByProductionProductMainId(sourceMain.getId());
+ }
+
+ private void markSourceMainAsUnpaid(ProductionProductMain sourceMain, int reportType) {
+ ProductionProductMain update = new ProductionProductMain();
+ update.setId(sourceMain.getId());
+ update.setReportType(reportType);
+ productionProductMainMapper.updateById(update);
+ }
+
private void createReworkProductionByNewModel(ProductionProductMain sourceMain, BigDecimal quantity) {
ProductionOperationTask sourceTask = productionOperationTaskMapper.selectById(sourceMain.getProductionOperationTaskId());
if (sourceTask == null) {
throw new ServiceException("鍏宠仈鐨勭敓浜у伐鍗曚笉瀛樺湪");
}
- ProductionOrder sourceOrder = productionOrderMapper.selectById(sourceTask.getProductionOrderId());
- if (sourceOrder == null) {
- throw new ServiceException("鍏宠仈鐨勭敓浜ц鍗曚笉瀛樺湪");
- }
-
- ProductionOrder newOrder = new ProductionOrder();
- BeanUtils.copyProperties(sourceOrder, newOrder);
- newOrder.setId(null);
- newOrder.setNpsNo(generateNextProductionOrderNo("FG"));
- newOrder.setQuantity(defaultDecimal(quantity));
- newOrder.setCompleteQuantity(BigDecimal.ZERO);
- newOrder.setStartTime(null);
- newOrder.setEndTime(null);
- newOrder.setCreateTime(null);
- newOrder.setUpdateTime(null);
- productionOrderMapper.insert(newOrder);
-
- Map<Long, Long> routingIdMap = new HashMap<>();
- List<ProductionOrderRouting> sourceRoutings = productionOrderRoutingMapper.selectList(
- Wrappers.<ProductionOrderRouting>lambdaQuery()
- .eq(ProductionOrderRouting::getProductionOrderId, sourceOrder.getId())
- .orderByAsc(ProductionOrderRouting::getId));
- for (ProductionOrderRouting sourceRouting : sourceRoutings) {
- ProductionOrderRouting newRouting = new ProductionOrderRouting();
- BeanUtils.copyProperties(sourceRouting, newRouting);
- newRouting.setId(null);
- newRouting.setProductionOrderId(newOrder.getId());
- newRouting.setCreateTime(null);
- newRouting.setUpdateTime(null);
- productionOrderRoutingMapper.insert(newRouting);
- routingIdMap.put(sourceRouting.getId(), newRouting.getId());
- }
-
- List<ProductionOrderRoutingOperation> sourceOperations = productionOrderRoutingOperationMapper.selectList(
- Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
- .eq(ProductionOrderRoutingOperation::getProductionOrderId, sourceOrder.getId())
- .orderByAsc(ProductionOrderRoutingOperation::getDragSort)
- .orderByAsc(ProductionOrderRoutingOperation::getId));
- for (ProductionOrderRoutingOperation sourceOperation : sourceOperations) {
- ProductionOrderRoutingOperation newOperation = new ProductionOrderRoutingOperation();
- BeanUtils.copyProperties(sourceOperation, newOperation);
- newOperation.setId(null);
- newOperation.setProductionOrderId(newOrder.getId());
- newOperation.setOrderRoutingId(routingIdMap.get(sourceOperation.getOrderRoutingId()));
- newOperation.setCreateTime(null);
- newOperation.setUpdateTime(null);
- productionOrderRoutingOperationMapper.insert(newOperation);
-
- ProductionOperationTask newTask = new ProductionOperationTask();
- newTask.setProductionOrderRoutingOperationId(newOperation.getId());
- newTask.setProductionOrderId(newOrder.getId());
- newTask.setPlanQuantity(newOrder.getQuantity());
- newTask.setCompleteQuantity(BigDecimal.ZERO);
- newTask.setWorkOrderNo(generateNextTaskNo("FG"));
- newTask.setStatus(1);
- productionOperationTaskMapper.insert(newTask);
- }
- }
-
- private String generateNextProductionOrderNo(String prefix) {
- String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
- String orderPrefix = prefix + datePrefix;
- ProductionOrder latestOrder = productionOrderMapper.selectOne(
- Wrappers.<ProductionOrder>lambdaQuery()
- .likeRight(ProductionOrder::getNpsNo, orderPrefix)
- .orderByDesc(ProductionOrder::getNpsNo)
- .last("limit 1"));
- int sequence = 1;
- if (latestOrder != null && latestOrder.getNpsNo() != null && latestOrder.getNpsNo().startsWith(orderPrefix)) {
- try {
- sequence = Integer.parseInt(latestOrder.getNpsNo().substring(orderPrefix.length())) + 1;
- } catch (NumberFormatException ignored) {
- sequence = 1;
- }
- }
- return orderPrefix + String.format("%04d", sequence);
+ ProductionOperationTask newTask = new ProductionOperationTask();
+ BeanUtils.copyProperties(sourceTask, newTask);
+ newTask.setId(null);
+ newTask.setWorkOrderNo(generateNextTaskNo("FG"));
+ newTask.setPlanQuantity(defaultDecimal(quantity));
+ newTask.setCompleteQuantity(BigDecimal.ZERO);
+ newTask.setPlanStartTime(null);
+ newTask.setPlanEndTime(null);
+ newTask.setActualStartTime(null);
+ newTask.setActualEndTime(null);
+ newTask.setStatus(1);
+ newTask.setCreateTime(null);
+ newTask.setUpdateTime(null);
+ productionOperationTaskMapper.insert(newTask);
}
private String generateNextTaskNo(String prefix) {
--
Gitblit v1.9.3