From af0f58e4b39a363b73587fa1b4cce7be46e203f5 Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期五, 12 九月 2025 15:07:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java |  229 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 201 insertions(+), 28 deletions(-)

diff --git a/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java b/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
index cbe9993..3f248b6 100644
--- a/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
+++ b/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
@@ -1,38 +1,46 @@
 package org.jeecg.modules.mes.controller;
 
 import cn.hutool.core.collection.CollectionUtil;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 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.extension.plugins.pagination.Page;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
-import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.common.util.TranslateDictTextUtils;
+import org.jeecg.modules.base.entity.Factory;
+import org.jeecg.modules.base.enums.ProductionTypeEnum;
+import org.jeecg.modules.base.service.IFactoryService;
+import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum;
+import org.jeecg.modules.eam.constant.MaintenanceStandardStatusEnum;
+import org.jeecg.modules.eam.entity.EamEquipment;
+import org.jeecg.modules.eam.entity.EamInspectionOrder;
+import org.jeecg.modules.eam.entity.EamInspectionOrderDetail;
+import org.jeecg.modules.eam.entity.EamProcessCheck;
+import org.jeecg.modules.eam.service.*;
 import org.jeecg.modules.mes.dto.MesProductionWorkOrderRepublishRequest;
 import org.jeecg.modules.mes.dto.MesProductionWorkScheduleRequest;
+import org.jeecg.modules.mes.entity.MesKittingCompletenessCheck;
 import org.jeecg.modules.mes.entity.MesProductionWorkOrder;
 import org.jeecg.modules.mes.enums.ProductionWorkOrderStatus;
+import org.jeecg.modules.mes.service.IMesKittingCompletenessCheckService;
 import org.jeecg.modules.mes.service.IMesProductionWorkOrderService;
+import org.jeecg.modules.mes.utils.CommonUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -44,15 +52,25 @@
  */
 @Api(tags = "鎺掍骇宸ュ崟")
 @RestController
-@RequestMapping("/mesproductionworkorder/mesProductionWorkOrder")
+@RequestMapping("/mes/mesProductionWorkOrder")
 @Slf4j
 public class MesProductionWorkOrderController extends JeecgController<MesProductionWorkOrder, IMesProductionWorkOrderService> {
     @Autowired
     private IMesProductionWorkOrderService mesProductionWorkOrderService;
     @Autowired
-    private ObjectMapper objectMapper;
+    private IMesKittingCompletenessCheckService mesKittingCompletenessCheckService;
     @Autowired
-    private TranslateDictTextUtils translateDictTextUtils;
+    private IEamInspectionOrderService eamInspectionOrderService;
+    @Autowired
+    private IEamInspectionOrderDetailService eamInspectionOrderDetailService;
+    @Autowired
+    private IEamProcessCheckService eamProcessCheckService;
+    @Autowired
+    private IEamProcessCheckDetailService eamProcessCheckDetailService;
+    @Autowired
+    private IEamEquipmentService eamEquipmentService;
+    @Autowired
+    private IFactoryService factoryService;
 
     /**
      * 鍒嗛〉鍒楄〃鏌ヨ
@@ -66,7 +84,7 @@
     //@AutoLog(value = "鎺掍骇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
     @ApiOperation(value = "鎺掍骇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ", notes = "鎺掍骇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
     @GetMapping(value = "/list")
-    public Result<IPage<?>> queryPageList(MesProductionWorkOrder mesProductionWorkOrder,
+    public Result<IPage<MesProductionWorkOrder>> queryPageList(MesProductionWorkOrder mesProductionWorkOrder,
                                                                @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                                @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                                HttpServletRequest req) {
@@ -103,6 +121,11 @@
         mesProductionWorkOrderList.forEach(item -> {
             if (Objects.isNull(item.getId())) {
                 item.setWorkOrderStatus(ProductionWorkOrderStatus.NEW.name());
+                item.setCompletenessCheckFlag(CommonConstant.DEFAULT_0);
+                item.setEquipmentInspectionFlag(CommonConstant.DEFAULT_0);
+                item.setProcessInspectionFlag(CommonConstant.DEFAULT_0);
+                item.setActualQuantity(BigDecimal.ZERO);
+                item.setFinishedPallets(0);
             }
         });
         mesProductionWorkOrderService.saveOrUpdateBatch(mesProductionWorkOrderList);
@@ -147,13 +170,13 @@
 
     @AutoLog(value = "鎺掍骇宸ュ崟-鍙戝竷鎺掍骇璁″垝")
     @ApiOperation(value = "鎺掍骇宸ュ崟-鍙戝竷鎺掍骇璁″垝", notes = "鎺掍骇宸ュ崟-鍙戝竷鎺掍骇璁″垝")
-    //@RequiresPermissions("mes:production:work:order:publish")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:publish")
     @RequestMapping(value = "/publish", method = {RequestMethod.POST, RequestMethod.PUT})
     public Result<String> publish(@RequestParam("ids") String ids) {
         List<String> idList = Arrays.asList(ids.split(","));
         List<MesProductionWorkOrder> list = mesProductionWorkOrderService.list(new LambdaQueryWrapper<MesProductionWorkOrder>()
-                .in(MesProductionWorkOrder::getId, idList)
-                .eq(MesProductionWorkOrder::getDelFlag, CommonConstant.DEL_FLAG_0)).stream()
+                        .in(MesProductionWorkOrder::getId, idList)
+                        .eq(MesProductionWorkOrder::getDelFlag, CommonConstant.DEL_FLAG_0)).stream()
                 .filter(i -> !ProductionWorkOrderStatus.NEW.name().equals(i.getWorkOrderStatus()))
                 .collect(Collectors.toList());
         if (!list.isEmpty()) {
@@ -164,7 +187,7 @@
             MesProductionWorkOrder publish = new MesProductionWorkOrder()
                     .setId(id)
                     .setPublishTime(new Date())
-                    .setPublisher(Objects.requireNonNull(getCurrentUser()).getUsername())
+                    .setPublisher(Objects.requireNonNull(CommonUtils.getCurrentUser()).getUsername())
                     .setWorkOrderStatus(ProductionWorkOrderStatus.PUBLISHED.name());
             publishList.add(publish);
         });
@@ -173,24 +196,165 @@
     }
 
     @AutoLog(value = "鎺掍骇宸ュ崟-閲嶅彂甯冩帓浜ц鍒�")
-    @ApiOperation(value="鎺掍骇宸ュ崟-閲嶅彂甯冩帓浜ц鍒�", notes="閲嶅彂甯冩帓浜ц鍒�")
-    //@RequiresPermissions("mes:production:work:order:republish")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-閲嶅彂甯冩帓浜ц鍒�", notes = "閲嶅彂甯冩帓浜ц鍒�")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:republish")
     @PostMapping(value = "/republish")
     public Result<String> republish(@RequestBody MesProductionWorkOrderRepublishRequest request) {
         MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(request.getId());
-        //todo 鍒ゆ柇鐝鏄惁缁撴潫鐨勯�昏緫
-        if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())) {
+        if (ProductionWorkOrderStatus.NEW.name().equals(workOrder.getWorkOrderStatus())
+                || ProductionWorkOrderStatus.CLOSED.name().equals(workOrder.getWorkOrderStatus())) {
             return Result.error("褰撳墠宸ュ崟鐘舵�佷笉鏀寔閲嶅彂甯冿紒");
         }
         MesProductionWorkOrder republish = new MesProductionWorkOrder()
                 .setId(request.getId())
                 .setPlanQuantity(request.getPlanQuantity())
-                .setRepublisher(Objects.requireNonNull(getCurrentUser()).getUsername())
+                .setRepublisher(Objects.requireNonNull(Objects.requireNonNull(CommonUtils.getCurrentUser()).getUsername()))
                 .setRepublishTime(new Date())
-                .setRepublishReason(request.getRepublishReason())
-                .setWorkOrderStatus(ProductionWorkOrderStatus.REPUBLISHED.name());
+                .setRepublishReason(request.getRepublishReason());
         mesProductionWorkOrderService.updateById(republish);
         return Result.ok("閲嶅彂甯冩垚鍔燂紒");
+    }
+
+    @AutoLog(value = "鎺掍骇宸ュ崟-榻愬鎬ф鏌�")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-榻愬鎬ф鏌�", notes = "榻愬鎬ф鏌�")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:workOrderCompletenessCheck")
+    @GetMapping(value = "/workOrderCompletenessCheck")
+    public Result<List<MesKittingCompletenessCheck>> workOrderCompletenessCheck(@RequestParam("id") String id) {
+        MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(id);
+        if (workOrder == null) {
+            return Result.error("宸ュ崟涓嶅瓨鍦紒");
+        }
+        if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())) {
+            return Result.error("褰撳墠宸ュ崟鐘舵�佷笉鑳借繘琛岄綈濂楁�ф鏌ワ紒");
+        }
+        Factory factory = factoryService.getById(workOrder.getFactoryId());
+        String productionType = factory.getProductionType();
+        if (ProductionTypeEnum.HEATTREATMENT.name().equals(productionType)) {
+            //鐑鐞嗕骇绾�
+            List<MesKittingCompletenessCheck> list = mesProductionWorkOrderService.workOrderCompletenessCheckOnHeatTreatment(workOrder);
+            return Result.ok(list);
+        }
+        //鍏朵綑浜х嚎
+        List<MesKittingCompletenessCheck> list = mesProductionWorkOrderService.workOrderCompletenessCheck(workOrder);
+        return Result.ok(list);
+    }
+
+    @AutoLog(value = "鎺掍骇宸ュ崟-鎵ц鎺掍骇宸ュ崟璁″垝")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-鎵ц鎺掍骇宸ュ崟璁″垝", notes = "鎺掍骇宸ュ崟-鎵ц鎺掍骇宸ュ崟璁″垝")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:execute")
+    @GetMapping(value = "/execute")
+    public Result<?> execute(@RequestParam("id") String id) {
+        MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(id);
+        if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())) {
+            return Result.error("褰撳墠宸ュ崟鐘舵�佷笉鑳芥墽琛岋紒");
+        }
+        //妫�鏌ユ槸鍚﹀仛杩囬綈濂楁�ф鏌ャ�佸伐鑹虹偣妫�銆佽澶囩偣妫�
+        if (!completeCheck(workOrder)) {
+            return Result.error("璇峰厛瀹屾垚榻愬鎬ф鏌ャ�佸伐鑹虹偣妫�銆佽澶囩偣妫�锛�");
+        }
+        MesProductionWorkOrder executeOrder = new MesProductionWorkOrder()
+                .setId(id)
+                .setWorkOrderStatus(ProductionWorkOrderStatus.EXECUTING.name());
+        mesProductionWorkOrderService.updateById(executeOrder);
+        return Result.ok("鎵ц鎴愬姛锛�");
+    }
+
+    private boolean completeCheck(MesProductionWorkOrder workOrder) {
+        List<MesKittingCompletenessCheck> completenessCheckList = mesKittingCompletenessCheckService.list(new LambdaQueryWrapper<MesKittingCompletenessCheck>()
+                .eq(MesKittingCompletenessCheck::getWorkOrderId, workOrder.getId()));
+        if (completenessCheckList.isEmpty()) {
+            return false;
+        }
+        List<EamInspectionOrder> inspectionOrderList = eamInspectionOrderService.list(new LambdaQueryWrapper<EamInspectionOrder>()
+                .eq(EamInspectionOrder::getWorkOrderId, workOrder.getId()));
+        if (inspectionOrderList.isEmpty()) {
+            return false;
+        }
+        List<EamProcessCheck> processCheckList = eamProcessCheckService.list(new LambdaQueryWrapper<EamProcessCheck>()
+                .eq(EamProcessCheck::getWorkOrderId, workOrder.getId()));
+        if (processCheckList.isEmpty()) {
+            return false;
+        }
+        return true;
+    }
+
+    @AutoLog(value = "鎺掍骇宸ュ崟-宸ュ崟鎵ц鍓嶆鏌�")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-宸ュ崟鎵ц鍓嶆鏌�", notes = "鎺掍骇宸ュ崟-宸ュ崟鎵ц鍓嶆鏌�")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:execute")
+    @GetMapping(value = "/checkBeforeExecute")
+    public Result<?> checkBeforeExecute(@RequestParam("id") String id) {
+        MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(id);
+        if (workOrder == null) {
+            throw new JeecgBootException("宸ュ崟涓嶅瓨鍦紒");
+        }
+        Map<String, Object> resMap = new HashMap<>();
+        //榻愬鎬ф鏌�
+        List<MesKittingCompletenessCheck> completenessCheckList = mesKittingCompletenessCheckService.list(new LambdaQueryWrapper<MesKittingCompletenessCheck>()
+                .eq(MesKittingCompletenessCheck::getWorkOrderId, id));
+        if (completenessCheckList.isEmpty()) {
+            //鏈墽琛岃繃榻愬鎬ф鏌�
+            resMap.put("completenessCheckFlag", false);
+        } else {
+            List<MesKittingCompletenessCheck> unCompletenessList = completenessCheckList.stream().filter(i -> !CommonConstant.DEFAULT_1.equals(i.getCheckFlag()))
+                    .collect(Collectors.toList());
+            if (unCompletenessList.isEmpty()) {
+                //榻愬鎬ф鏌ュ叏閮ㄩ�氳繃
+                resMap.put("completenessCheckFlag", true);
+            } else {
+                List<String> unCompletenessListMaterial = unCompletenessList.stream()
+                        .map(i -> i.getMaterialNumber() + "[" + i.getMaterialName() + "]").collect(Collectors.toList());
+                //瀛樺湪鏈�氳繃
+                resMap.put("completenessCheckFlag", false);
+                resMap.put("unCompletenessCheckList", unCompletenessListMaterial);
+            }
+        }
+        //璁惧鐐规
+        List<EamInspectionOrder> inspectionOrderList = eamInspectionOrderService.list(new LambdaQueryWrapper<EamInspectionOrder>()
+                .eq(EamInspectionOrder::getWorkOrderId, workOrder.getId()));
+        if (inspectionOrderList.isEmpty()) {
+            //鏈墽琛岃繃璁惧鐐规
+            resMap.put("inspectionFlag", false);
+        } else {
+            List<String> unInspectEquipmentList = eamEquipmentService.list(new LambdaQueryWrapper<EamEquipment>()
+                            .eq(EamEquipment::getOrgId, workOrder.getFactoryId())
+                            .eq(EamEquipment::getDelFlag, CommonConstant.DEL_FLAG_0)
+                            .apply("NOT EXISTS (SELECT 1 FROM eam_inspection_order t WHERE t.equipment_id = eam_equipment.id AND t.work_order_id = {0})", workOrder.getId())
+                            .apply("EXISTS (SELECT 1 FROM eam_maintenance_standard t WHERE t.equipment_id = eam_equipment.id AND t.del_flag = {0} " +
+                                            "AND t.standard_status = {1} AND t.maintenance_category = {2})",
+                                    CommonConstant.DEL_FLAG_0, MaintenanceStandardStatusEnum.NORMAL.name(), MaintenanceCategoryEnum.POINT_INSPECTION.name()))
+                    .stream().map(e -> e.getEquipmentCode() + "[" + e.getEquipmentName() + "]").collect(Collectors.toList());
+            if (unInspectEquipmentList.isEmpty()) {
+                //鍏ㄩ儴璁惧閮藉凡鐐规
+                resMap.put("equipmentInspectFlag", true);
+            } else {
+                //瀛樺湪鏈偣妫�鐨勮澶�
+                resMap.put("equipmentInspectFlag", false);
+                resMap.put("unInspectEquipmentList", unInspectEquipmentList);
+            }
+        }
+        //宸ヨ壓鐐规
+        List<EamProcessCheck> processCheckList = eamProcessCheckService.list(new LambdaQueryWrapper<EamProcessCheck>()
+                .eq(EamProcessCheck::getWorkOrderId, workOrder.getId()));
+        if (processCheckList.isEmpty()) {
+            //鏈墽琛岃繃宸ヨ壓鐐规
+            resMap.put("processCheckFlag", false);
+        } else {
+            List<String> unCheckEquipmentList = eamEquipmentService.list(new LambdaQueryWrapper<EamEquipment>()
+                            .eq(EamEquipment::getOrgId, workOrder.getFactoryId())
+                            .eq(EamEquipment::getDelFlag, CommonConstant.DEL_FLAG_0)
+                            .apply("EXISTS (SELECT 1 FROM eam_equipment_process_parameters t WHERE t.equipment_id = eam_equipment.id)")
+                            .apply("NOT EXISTS (SELECT 1 FROM eam_process_check t WHERE t.equipment_id = eam_equipment.id AND t.work_order_id = {0})", workOrder.getId()))
+                    .stream().map(e -> e.getEquipmentCode() + "[" + e.getEquipmentName() + "]").collect(Collectors.toList());
+            if (unCheckEquipmentList.isEmpty()) {
+                //鍏ㄩ儴璁惧閮藉凡鐐规
+                resMap.put("processCheckFlag", true);
+            } else {
+                //瀛樺湪鏈偣妫�鐨勮澶�
+                resMap.put("processCheckFlag", false);
+                resMap.put("unCheckEquipmentList", unCheckEquipmentList);
+            }
+        }
+        return Result.ok(resMap);
     }
 
     /**
@@ -280,11 +444,20 @@
         return super.importExcel(request, response, MesProductionWorkOrder.class);
     }
 
-    private LoginUser getCurrentUser() {
-        try {
-            return (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        } catch (Exception e) {
-            return null;
-        }
+    /**
+     * 鐗╂枡鎷夊姩閫夋嫨鎺掍骇宸ュ崟鍒楄〃鏌ヨ
+     *
+     * @param pageNo
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value = "鎺掍骇宸ュ崟-鐗╂枡鎷夊姩宸ュ崟鍒楄〃", notes = "鎺掍骇宸ュ崟-鐗╂枡鎷夊姩宸ュ崟鍒楄〃")
+    @GetMapping(value = "/queryWorkOrderByTransfer")
+    public Result<IPage<MesProductionWorkOrder>> queryWorkOrderByTransfer(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                                          @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        Page<MesProductionWorkOrder> page = new Page<>(pageNo, pageSize);
+        IPage<MesProductionWorkOrder> pageList = mesProductionWorkOrderService.queryWorkOrderByTransfer(page);
+        return Result.OK(pageList);
     }
+
 }

--
Gitblit v1.9.3