From d42f9256b4aab375b6c7897e11e99f07bf5f9c95 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期四, 23 七月 2026 10:01:54 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_business' into dev_business

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java |   94 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 92 insertions(+), 2 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
index 7e1868e..49b7c45 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
@@ -6,8 +6,10 @@
 import cn.hutool.core.util.ObjectUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo.MesProFeedbackPageReqVO;
-import cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo.MesProFeedbackSaveReqVO;
+import cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo.*;
+import cn.iocoder.yudao.module.mes.enums.md.autocode.MesMdAutoCodeRuleCodeEnum;
+import cn.iocoder.yudao.module.mes.enums.pro.MesProFeedbackTypeEnum;
+import cn.iocoder.yudao.module.mes.service.md.autocode.MesMdAutoCodeRecordService;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProcessDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProductBomDO;
@@ -37,6 +39,7 @@
 import org.springframework.validation.annotation.Validated;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -73,6 +76,8 @@
     private MesWmProductProduceLineService produceLineService;
     @Resource
     private MesProMpsApi mpsApi;
+    @Resource
+    private MesMdAutoCodeRecordService autoCodeRecordService;
     @Resource
     private ApplicationEventPublisher eventPublisher;
 
@@ -363,6 +368,91 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public MesProFeedbackQuickCreateRespVO quickCreateFeedback(MesProFeedbackQuickCreateReqVO reqVO) {
+        // 1. 鏍¢獙浠诲姟瀛樺湪涓旈潪缁堟��
+        MesProTaskDO task = taskService.validateTaskNotFinished(reqVO.getTaskId());
+        // 2. 鏍¢獙宸ヨ壓璺嚎宸ュ簭閰嶇疆
+        MesProRouteProcessDO routeProcess = routeProcessService.getRouteProcessByRouteIdAndProcessId(
+                task.getRouteId(), task.getProcessId());
+        if (routeProcess == null) {
+            throw exception(PRO_FEEDBACK_ROUTE_PROCESS_INVALID);
+        }
+        // 3. 鏍¢獙鏁伴噺
+        boolean checkFlag = Boolean.TRUE.equals(routeProcess.getCheckFlag());
+        if (checkFlag) {
+            if (reqVO.getFeedbackQuantity() == null
+                    || reqVO.getFeedbackQuantity().compareTo(BigDecimal.ZERO) <= 0) {
+                throw exception(PRO_FEEDBACK_QUANTITY_MUST_POSITIVE);
+            }
+        } else {
+            BigDecimal qualified = ObjectUtil.defaultIfNull(reqVO.getQualifiedQuantity(), BigDecimal.ZERO);
+            BigDecimal unqualified = ObjectUtil.defaultIfNull(reqVO.getUnqualifiedQuantity(), BigDecimal.ZERO);
+            if (qualified.add(unqualified).compareTo(BigDecimal.ZERO) <= 0) {
+                throw exception(PRO_FEEDBACK_QUALIFIED_UNQUALIFIED_REQUIRED);
+            }
+        }
+        // 4. 鏋勫缓鎶ュ伐DO
+        MesProFeedbackDO feedback = new MesProFeedbackDO()
+                .setCode(autoCodeRecordService.generateAutoCode(MesMdAutoCodeRuleCodeEnum.PRO_FEEDBACK_CODE.getCode()))
+                .setType(MesProFeedbackTypeEnum.SELF.getType())
+                .setWorkstationId(task.getWorkstationId())
+                .setRouteId(task.getRouteId())
+                .setProcessId(task.getProcessId())
+                .setWorkOrderId(task.getWorkOrderId())
+                .setTaskId(reqVO.getTaskId())
+                .setItemId(task.getItemId())
+                .setFeedbackQuantity(reqVO.getFeedbackQuantity())
+                .setQualifiedQuantity(reqVO.getQualifiedQuantity())
+                .setUnqualifiedQuantity(reqVO.getUnqualifiedQuantity())
+                .setScheduledQuantity(task.getQuantity())
+                .setFeedbackTime(LocalDateTime.now())
+                .setStatus(MesProFeedbackStatusEnum.APPROVING.getStatus())
+                .setRemark(reqVO.getRemark());
+        feedbackMapper.insert(feedback);
+        // 5. 杩斿洖缁撴灉
+        MesProWorkOrderDO workOrder = workOrderService.getWorkOrder(task.getWorkOrderId());
+        return new MesProFeedbackQuickCreateRespVO()
+                .setFeedbackId(feedback.getId())
+                .setTaskStatus(task.getStatus())
+                .setWorkOrderStatus(workOrder != null ? workOrder.getStatus() : null);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public MesProFeedbackBatchCreateRespVO batchCreateFeedback(MesProFeedbackBatchCreateReqVO reqVO) {
+        List<MesProFeedbackBatchCreateRespVO.BatchResult> results = new java.util.ArrayList<>();
+        int successCount = 0;
+        int failCount = 0;
+        for (Long taskId : reqVO.getTaskIds()) {
+            try {
+                MesProFeedbackQuickCreateReqVO singleReq = new MesProFeedbackQuickCreateReqVO();
+                singleReq.setTaskId(taskId);
+                singleReq.setFeedbackQuantity(reqVO.getFeedbackQuantity());
+                singleReq.setQualifiedQuantity(reqVO.getQualifiedQuantity());
+                singleReq.setUnqualifiedQuantity(reqVO.getUnqualifiedQuantity());
+                singleReq.setRemark(reqVO.getRemark());
+                MesProFeedbackQuickCreateRespVO resp = quickCreateFeedback(singleReq);
+                results.add(new MesProFeedbackBatchCreateRespVO.BatchResult()
+                        .setTaskId(taskId)
+                        .setSuccess(true)
+                        .setFeedbackId(resp.getFeedbackId()));
+                successCount++;
+            } catch (Exception e) {
+                results.add(new MesProFeedbackBatchCreateRespVO.BatchResult()
+                        .setTaskId(taskId)
+                        .setSuccess(false)
+                        .setErrorMsg(e.getMessage()));
+                failCount++;
+            }
+        }
+        return new MesProFeedbackBatchCreateRespVO()
+                .setSuccessCount(successCount)
+                .setFailCount(failCount)
+                .setResults(results);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateProFeedbackWhenIpqcFinish(Long feedbackId, Long sourceLineId,
                                                 BigDecimal qualifiedQty, BigDecimal unqualifiedQty,
                                                 BigDecimal laborScrapQty, BigDecimal materialScrapQty, BigDecimal otherScrapQty) {

--
Gitblit v1.9.3