From 5e6c3ac5d7c7a2702a0bad5195e954c9e95d2306 Mon Sep 17 00:00:00 2001
From: Houjie <714924425@qq.com>
Date: 星期日, 15 六月 2025 17:55:35 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java                   |    3 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java      |    6 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java                     |    4 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/CutterController.java                 |   13 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml              |   16 ++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java               |    2 
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java              |   53 ++++++++
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml         |   39 ++++--
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java                  |    6 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java           |   25 +++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml                 |    4 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java                  |    5 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java                 |    4 
 lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java |    3 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml                  |   14 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcWorkshopInfoMapper.xml             |   19 ++
 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java              |    7 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java                               |   20 +++
 lxzn-module-dnc/pom.xml                                                                              |    6 +
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java              |    2 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java          |   37 ++++++
 lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java                               |   18 +++
 lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/ICutterService.java                      |    6 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java       |    9 +
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java            |    2 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java    |   18 ++
 26 files changed, 315 insertions(+), 26 deletions(-)

diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java b/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java
index 1fb1a97..3bb8a8c 100644
--- a/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java
+++ b/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java
@@ -178,6 +178,24 @@
                 .groupName("eam");
     }
 
+    @Bean(value = "defaultApiBoard")
+    public Docket activitiApiBoard() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                //姝ゅ寘璺緞涓嬬殑绫伙紝鎵嶇敓鎴愭帴鍙f枃妗�
+                .apis(RequestHandlerSelectors.basePackage("org.jeecg.modules.board"))
+                //鍔犱簡ApiOperation娉ㄨВ鐨勭被锛屾墠鐢熸垚鎺ュ彛鏂囨。
+                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                .paths(PathSelectors.any())
+                .build()
+                .securitySchemes(Collections.singletonList(securityScheme()))
+                .securityContexts(securityContexts())
+                .globalOperationParameters(setHeaderToken())
+                .groupName("鏁板瓧瀛敓鐪嬫澘");
+    }
+
     /***
      * oauth2閰嶇疆
      * 闇�瑕佸鍔爏wagger鎺堟潈鍥炶皟鍦板潃
diff --git a/lxzn-module-dnc/pom.xml b/lxzn-module-dnc/pom.xml
index 2c815f4..47f1a8f 100644
--- a/lxzn-module-dnc/pom.xml
+++ b/lxzn-module-dnc/pom.xml
@@ -58,6 +58,12 @@
             <artifactId>fastutil</artifactId>
             <version>8.5.6</version>
         </dependency>
+        <dependency>
+            <groupId>org.jeecgframework.boot</groupId>
+            <artifactId>lxzn-module-tms</artifactId>
+            <version>3.4.3</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/CutterController.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/CutterController.java
index 3d85d1a..0c59cb5 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/CutterController.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/CutterController.java
@@ -110,4 +110,17 @@
         return service.extractAndSaveFromContent(docId,attributionId,attributionType);
     }
 
+    /**
+     * 鍙戦�佸垁鍏风郴缁�
+     * @param docId 鏂囨。Id
+     * @return
+     */
+    @AutoLog(value = "鍒�鍏蜂俊鎭�-鍙戦�佸垁鍏风郴缁�")
+    @ApiOperation(value = "鍒�鍏蜂俊鎭�-鍙戦�佸垁鍏风郴缁�", notes = "鍒�鍏蜂俊鎭�-鍙戦�佸垁鍏风郴缁�")
+    @GetMapping("/sendCutterInfo/{docId}/{attributionType}/{attributionId}")
+    public Result<?> sendCutterInfo(@PathVariable("docId") String docId
+            ,@PathVariable("attributionType") Integer attributionType
+            ,@PathVariable("attributionId") String attributionId) {
+        return service.sendToCutterSystem(docId,attributionId,attributionType);
+    }
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/ICutterService.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/ICutterService.java
index ad99cbf..45cb630 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/ICutterService.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/ICutterService.java
@@ -40,5 +40,9 @@
      */
     Result<?> extractAndSaveFromContent(String docId,String attributionId,Integer attributionType);
 
-
+    /**
+     * 鍙戦�佸垁鍏峰垪琛ㄥ埌鍒�鍏风郴缁�
+     * @param docId
+     */
+    Result<?> sendToCutterSystem(String docId,String attributionId,Integer attributionType);
 }
diff --git a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java
index 2d1c271..9dbdaec 100644
--- a/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java
+++ b/lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java
@@ -10,15 +10,19 @@
 import org.jeecg.modules.dnc.entity.Cutter;
 import org.jeecg.modules.dnc.entity.DocFile;
 import org.jeecg.modules.dnc.entity.DocInfo;
+import org.jeecg.modules.dnc.entity.GuideCardBatch;
 import org.jeecg.modules.dnc.exception.ExceptionCast;
 import org.jeecg.modules.dnc.mapper.CutterMapper;
 import org.jeecg.modules.dnc.response.CommonCode;
 import org.jeecg.modules.dnc.service.ICutterService;
 import org.jeecg.modules.dnc.service.IDocFileService;
 import org.jeecg.modules.dnc.service.IDocInfoService;
+import org.jeecg.modules.dnc.service.IGuideCardBatchService;
 import org.jeecg.modules.dnc.utils.ValidateUtil;
 import org.jeecg.modules.dnc.utils.file.FileUtilS;
-import org.jeecg.modules.system.service.ISysDictService;
+import org.jeecg.modules.tms.entity.PreparationOrderDetail;
+import org.jeecg.modules.tms.entity.dto.PreparationOrderAndDetailDto;
+import org.jeecg.modules.tms.service.IPreparationOrderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -40,8 +44,10 @@
     private IDocFileService docFileService;
 
     @Autowired
-    private ISysDictService sysDictService;
+    private IGuideCardBatchService guideCardBatchService;
 
+    @Autowired
+    private IPreparationOrderService preparationOrderService;
     /**
      * 鏂板鍒�鍏蜂俊鎭�
      * @param cutter
@@ -194,13 +200,54 @@
                 return Result.error("鏈彂鐜板垁鍏风殑鍙傛暟淇℃伅娉ㄩ噴锛屾棤娉曟彁鍙栧垁鍏蜂俊鎭�");
             }
             this.saveBatch(newCutterList);
-            //TODO鍙戦�佸垁鍏风鐞嗘暟鎹�
             return Result.OK("鎻愬彇鍒�鍏蜂俊鎭垚鍔�");
         }else {
             return Result.error("鏈彂鐜板垁鍏风殑鍙傛暟淇℃伅娉ㄩ噴锛屾棤娉曟彁鍙栧垁鍏蜂俊鎭�");
         }
     }
 
+    @Override
+    public Result<?> sendToCutterSystem(String docId,String attributionId,Integer attributionType){
+        List<Cutter> cutterList = this.list(new QueryWrapper<Cutter>()
+                .eq("doc_id", docId)
+                .eq(StrUtil.isNotEmpty(attributionId),"attribution_id",attributionId)
+                .eq("attribution_type",attributionType));
+        if (cutterList == null || cutterList.isEmpty()) {
+            return Result.error("鏈彂鐜板垁鍏蜂俊鎭紝鏃犳硶鍙戦�佸埌鍒�鍏风郴缁�");
+        }
+        if (cutterList.stream().anyMatch(item -> item.getCutterCode() == null)) {
+            return Result.error("鏈彂鐜板垁鍏风紪鍙蜂俊鎭紝鏃犳硶鍙戦�佸埌鍒�鍏风郴缁�");
+        }
+        //鑾峰彇鏈�鏂版暟鎺х▼搴忓姞宸ョ‘璁よ〃
+        List<GuideCardBatch> guideCardBatchList = guideCardBatchService.list(new QueryWrapper<GuideCardBatch>()
+                .eq("doc_id", docId)
+                .isNotNull("serial_number")
+                .orderByDesc("SUBSTRING(serial_number, LEN(serial_number)-3, 4)"));
+        if (guideCardBatchList == null || guideCardBatchList.isEmpty()) {
+            return Result.error("鏈彂鐜扮▼搴忓姞宸ョ‘璁よ〃淇℃伅锛屾棤娉曞彂閫佸埌鍒�鍏风郴缁�");
+        }
+        GuideCardBatch guideCardBatch = guideCardBatchList.get(0);
+        PreparationOrderAndDetailDto dto = new PreparationOrderAndDetailDto();
+        dto.setPartDrawingNo(guideCardBatch.getPartsCode());
+        dto.setPartName(guideCardBatch.getPartsName());
+        dto.setPartMaterial(guideCardBatch.getMaterielDesp());
+        dto.setProductionProcessesNo(guideCardBatch.getProcessWorkCode());
+        dto.setBatchCode(guideCardBatch.getProcessingBatch());
+        dto.setMachiningCount(guideCardBatch.getProcessingQuantity());
+        dto.setEquipmentCode(guideCardBatch.getProcessingEquipment());
+        dto.setNcName(guideCardBatch.getDocName());
+        List<PreparationOrderDetail> detailList = new ArrayList<>();
+        cutterList.forEach(item -> {
+            PreparationOrderDetail detail = new PreparationOrderDetail();
+            detail.setToolCode(item.getCutterCode());
+            detail.setToolId(item.getToolsId());
+            detailList.add(detail);
+        });
+        dto.setPreparationOrderDetailList(detailList);
+        preparationOrderService.addPreparationOrderFromDnc(dto);
+        return Result.OK("鍙戦�佸埌鍒�鍏风郴缁熸垚鍔�");
+    }
+
     public List<Cutter> extractToolAfterM6(DocInfo docInfo, List<String> ncLines) {
         List<Cutter> cutterList = new ArrayList<>();
         String currentToolCode = null; // 鐢ㄤ簬杩借釜褰撳墠鎹㈠垁鎸囦护鐨勫垁鍏峰彿
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java
index f7873d5..b2e6977 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/entity/MdcEquipment.java
@@ -164,6 +164,12 @@
     @ApiModelProperty(value = "鏄惁MDC璁惧")
     private String deviceTypeMdc;
 
+    /**
+     * 璁惧鍥剧墖
+     */
+    @ApiModelProperty(value = "璁惧鍥剧墖")
+    private String equipmentImage;
+
     /**閮ㄩ棬鍚嶇О*/
     @Excel(name = "閮ㄩ棬鍚嶇О", width = 15)
     private transient String orgCodeTxt;
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
index 3d0755f..4e876b7 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -106,19 +106,34 @@
     <!--鏌ヨ璁惧鐩戞帶淇℃伅-->
     <select id="checkStatusFromEquipmentIds" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentMonitor">
         SELECT
-            t1.equipment_id,
-            t2.CollectTime,
-            t1.equipment_name,
-            t2.Oporation,
-            t1.id,
-            t1.equipment_status,
-            t1.equipment_type equipmentType,
-            t3.equipment_type_pictures
+          t1.equipment_id,
+          t2.CollectTime,
+          t1.equipment_name,
+        CASE
+
+            WHEN repair.count > 0 THEN
+            '5' ELSE t2.Oporation
+          END AS Oporation,
+          t1.id,
+          t1.equipment_status,
+          t1.equipment_type equipmentType,
+          t1.equipment_image equipmentTypePictures
+
         FROM
-            mdc_equipment t1
-            LEFT JOIN Equipment t2 ON t1.equipment_id = t2.EquipmentID
-            LEFT JOIN mdc_equipment_type t3 ON t1.equipment_type = t3.equipment_type_name
-        WHERE equipment_id IN
+          mdc_equipment t1
+          LEFT JOIN Equipment t2 ON t1.equipment_id = t2.EquipmentID
+          LEFT JOIN (
+            SELECT
+              e1.equipment_code,
+              COUNT(1) COUNT
+            FROM
+              eam_report_repair r1
+              INNER JOIN eam_equipment e1 ON e1.id = r1.equipment_id
+            WHERE
+              r1.report_status NOT IN ('COMPLETE', 'ABOLISH')
+          GROUP BY
+            e1.equipment_code) repair ON repair.equipment_code = t1.equipment_id
+        WHERE t1.equipment_id IN
         <foreach collection="equipmentIds" index="index" item="id" open="(" separator="," close=")">
             #{id}
         </foreach>
diff --git a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
index 9fa5fb6..49944e5 100644
--- a/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
+++ b/lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -430,6 +430,9 @@
                         case 22:
                             mdcEquipmentMonitor.setOporationDict("鎶ヨ");
                             break;
+                        case 5:
+                            mdcEquipmentMonitor.setOporationDict("鏁呴殰");
+                            break;
                         default:
                             mdcEquipmentMonitor.setOporationDict("鍏虫満");
                             break;
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java
index f238759..61d23bc 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java
@@ -92,5 +92,12 @@
         return Result.OK(result);
     }
 
+    @ApiOperation(value = "鏁板瓧瀛敓鐪嬫澘-璁惧瀹夌伅淇℃伅", notes = "鏁板瓧瀛敓鐪嬫澘-璁惧瀹夌伅淇℃伅")
+    @GetMapping("/equAndonList")
+    public Result<?> equAndonList(@ApiParam(value = "productionId", required = true) String productionId) {
+        List<EquAndon> result = dtBoardService.equAndonList(productionId);
+        return Result.OK(result);
+    }
+
 
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java
index be4172a..8133429 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java
@@ -29,4 +29,7 @@
     List<EquAlarm> equAlarmList(String productionId);
 
     List<EquRepair> equRepairList(String productionId);
+
+    List<EquAndon> equAndonList(String productionId);
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java
index ebea97e..f6fc360 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java
@@ -16,6 +16,7 @@
 import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.service.IMdcProductionService;
 import org.jeecg.modules.system.service.ISysDictService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -70,6 +71,9 @@
 
     @Resource
     private DtBoardMapper dtBoardMapper;
+
+    @Resource
+    private IAndonOrderService andonOrderService;
 
     /**
      * 杞﹂棿淇℃伅
@@ -326,7 +330,7 @@
         if (equipmentIdList == null || equipmentIdList.isEmpty()) {
             return null;
         }
-        List<EquipmentAlarm> equipmentAlarmList =  equipmentAlarmService.list(new LambdaQueryWrapper<EquipmentAlarm>().in(EquipmentAlarm::getEquipmentid, equipmentIdList).orderByDesc(EquipmentAlarm::getCollecttime).isNotNull(EquipmentAlarm::getAlarmNo).last("TOP 15"));
+        List<EquipmentAlarm> equipmentAlarmList = equipmentAlarmService.equAlarmList(equipmentIdList);
         if (equipmentAlarmList == null || equipmentAlarmList.isEmpty()) {
             return null;
         }
@@ -346,8 +350,6 @@
 
     /**
      * 璁惧鏁呴殰
-     * @param productionId
-     * @return
      */
     @Override
     public List<EquRepair> equRepairList(String productionId) {
@@ -365,4 +367,21 @@
         return result;
     }
 
+    /**
+     * 璁惧瀹夌伅闂
+     */
+    @Override
+    public List<EquAndon> equAndonList(String productionId) {
+        List<String> proIds = mdcProductionService.findChildByProId(productionId);
+        if (proIds == null || proIds.isEmpty()) {
+            return null;
+        }
+        List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds);
+        if (equipmentIdList == null || equipmentIdList.isEmpty()) {
+            return null;
+        }
+        List<EquAndon> result = andonOrderService.equAndonList(equipmentIdList);
+        return result;
+    }
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java
new file mode 100644
index 0000000..78eb963
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAndon.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.board.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: Lius
+ * @CreateTime: 2025-06-12
+ * @Description: 瀹夌伅淇℃伅
+ */
+@Data
+public class EquAndon {
+    /**
+     * 璁惧缂栧彿
+     */
+    private String equipmentId;
+    /**
+     * 瀹夌伅闂
+     */
+    private String andonInfo;
+}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java
index c624816..6224509 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/AndonOrderMapper.java
@@ -1,7 +1,10 @@
 package org.jeecg.modules.mdc.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.mdc.entity.AndonOrder;
+
+import java.util.List;
 
 /**
  * @Description: andon_order
@@ -11,4 +14,5 @@
  */
 public interface AndonOrderMapper extends BaseMapper<AndonOrder> {
 
+    List<AndonOrder> equAndonList(@Param("equipmentIdList") List<String> equipmentIdList);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java
index 4bbcd26..629c89b 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentAlarmMapper.java
@@ -1,11 +1,15 @@
 package org.jeecg.modules.mdc.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.mdc.entity.EquipmentAlarm;
+
+import java.util.List;
 
 /**
  * @author: LiuS
  * @create: 2023-04-12 16:39
  */
 public interface EquipmentAlarmMapper extends BaseMapper<EquipmentAlarm> {
+    List<EquipmentAlarm> equAlarmList(@Param("equipmentIdList") List<String> equipmentIdList);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml
index cd37885..36ecafa 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/AndonOrderMapper.xml
@@ -2,4 +2,18 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.mdc.mapper.AndonOrderMapper">
 
+    <select id="equAndonList" resultType="org.jeecg.modules.mdc.entity.AndonOrder">
+        SELECT
+            *
+        FROM
+            andon_order
+        WHERE
+            CONVERT ( DATE, create_time ) = CONVERT ( DATE, GETDATE( ) )
+          AND equipment_id IN
+        <foreach collection="equipmentIdList" index="index" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        ORDER BY
+            create_time
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml
new file mode 100644
index 0000000..07a9412
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentAlarmMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.mdc.mapper.EquipmentAlarmMapper">
+
+    <select id="equAlarmList" resultType="org.jeecg.modules.mdc.entity.EquipmentAlarm">
+        SELECT TOP 15 *
+        FROM
+            EquipmentAlarm
+        WHERE EquipmentID IN
+        <foreach collection="equipmentIdList" index="index" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        AND alarmNo != ''
+        ORDER BY collecttime DESC
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml
index 898cd96..0917a40 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml
@@ -44,7 +44,7 @@
     <select id="equDowntimeStatistics" resultType="org.jeecg.modules.board.vo.EquDowntimeInfo">
         SELECT
             t2.downtime_description AS shutdown_info,
-            SUM ( DATEDIFF( SECOND, t1.start_date, t1.end_date ) ) / 3600.0 AS duration_hours
+            SUM ( DATEDIFF( SECOND, t1.start_date, t1.end_date ) ) / 3600.0 AS duration
         FROM
             mdc_downtime t1
                 LEFT JOIN mdc_downtime_reason t2 ON t1.reason_id = t2.id
@@ -57,7 +57,5 @@
         </foreach>
         GROUP BY
             t2.downtime_description
-        ORDER BY
-            duration_hours DESC
     </select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcWorkshopInfoMapper.xml b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcWorkshopInfoMapper.xml
index e286929..b3a2f9a 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcWorkshopInfoMapper.xml
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcWorkshopInfoMapper.xml
@@ -9,8 +9,12 @@
             a.EquipmentID equipmentId,
             me.equipment_name equipmentName,
             me.equipment_type equipmentType,
-            met.equipment_type_pictures equipmentImage,
-            a.Oporation equipmentStatus,
+            me.equipment_image equipmentImage,
+            CASE
+
+                WHEN repair.count > 0 THEN
+                    '5' ELSE a.Oporation
+                END AS equipmentStatus,
             mew.coordinate_left coordinateLeft,
             mew.coordinate_top coordinateTop,
             mew.vw vw,
@@ -24,6 +28,17 @@
             INNER JOIN mdc_equipment_type met ON me.equipment_type = met.equipment_type_name
             AND a.CollectTime= b.maxgdtime
             AND mew.workshop_id = #{ workshopId }
+            LEFT JOIN (
+                SELECT
+                    e1.equipment_code,
+                    COUNT(1) COUNT
+                FROM
+                    eam_report_repair r1
+                    INNER JOIN eam_equipment e1 ON e1.id = r1.equipment_id
+                WHERE
+                    r1.report_status NOT IN ('COMPLETE', 'ABOLISH')
+                GROUP BY
+                    e1.equipment_code) repair ON repair.equipment_code = me.equipment_id
     </select>
 
     <select id="listByUser" resultType="org.jeecg.modules.mdc.entity.MdcWorkshopInfo">
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java
index c0ae7dd..d392a52 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IAndonOrderService.java
@@ -1,7 +1,10 @@
 package org.jeecg.modules.mdc.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.board.vo.EquAndon;
 import org.jeecg.modules.mdc.entity.AndonOrder;
+
+import java.util.List;
 
 /**
  * @Description: andon_order
@@ -12,4 +15,6 @@
 public interface IAndonOrderService extends IService<AndonOrder> {
 
     void procedureCall(AndonOrder andonOrder);
+
+    List<EquAndon> equAndonList(List<String> equipmentIdList);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java
index 1b072fe..56b6113 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IEquipmentAlarmService.java
@@ -12,4 +12,6 @@
  */
 public interface IEquipmentAlarmService extends IService<EquipmentAlarm> {
     List<EquipmentAlarm> findEquipmentAlarmByDate(String equipmentId, Date startTime, Date endTime);
+
+    List<EquipmentAlarm> equAlarmList(List<String> equipmentIdList);
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java
index 93d0b4d..499e343 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/AndonOrderServiceImpl.java
@@ -2,14 +2,19 @@
 
 import cn.hutool.core.date.DatePattern;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.commons.compress.utils.Lists;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.constant.WebsocketConst;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.TranslateDictTextUtils;
+import org.jeecg.modules.board.vo.EquAndon;
 import org.jeecg.modules.mdc.dto.MdcEquProDto;
 import org.jeecg.modules.mdc.entity.AndonOrder;
 import org.jeecg.modules.mdc.mapper.AndonOrderMapper;
@@ -18,7 +23,9 @@
 import org.jeecg.modules.mdc.util.DateUtils;
 import org.jeecg.modules.mdc.vo.AndonOrderWebSocketVo;
 import org.jeecg.modules.message.websocket.WebSocket;
+import org.jeecg.modules.system.service.ISysDictService;
 import org.jeecg.modules.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -28,7 +35,7 @@
 /**
  * @Description: andon_order
  * @Author: jeecg-boot
- * @Date:   2025-06-11
+ * @Date: 2025-06-11
  * @Version: V1.0
  */
 @Service
@@ -40,6 +47,9 @@
     private WebSocket webSocket;
     @Resource
     private ISysUserService userService;
+    @Resource
+    private ISysDictService sysDictService;
+
     @Override
     public void procedureCall(AndonOrder andonOrder) {
         if (StringUtils.isBlank(andonOrder.getEquipmentId())) {
@@ -76,6 +86,8 @@
                 andonOrderWebSocketVo.setCallReason(order.getCallReason());
                 andonOrderWebSocketVo.setAndonType("绋嬪簭鍛煎彨");
                 andonOrderWebSocketVo.setPersonResponsible(user.getRealname());
+                andonOrderWebSocketVo.setRepairTime(StringPool.EMPTY);
+                andonOrderWebSocketVo.setFaultInfo(StringPool.EMPTY);
                 andonOrderWebSocketVo.setPlantName(equipmentIdToProductionIdMap != null && equipmentIdToProductionIdMap.containsKey(order.getEquipmentId()) ? equipmentIdToProductionIdMap.get(order.getEquipmentId()).getProductionName() : null);
                 andonOrderWebSocketVoList.add(andonOrderWebSocketVo);
             }
@@ -87,4 +99,27 @@
             webSocket.sendMessage(jsonObject.toJSONString());
         }
     }
+
+    /**
+     * 瀹夌伅闂鍒楄〃
+     */
+    @Override
+    public List<EquAndon> equAndonList(List<String> equipmentIdList) {
+        List<EquAndon> result = new ArrayList<>();
+        List<AndonOrder> andonOrderList = this.baseMapper.equAndonList(equipmentIdList);
+        if (andonOrderList != null && !andonOrderList.isEmpty()) {
+            andonOrderList.forEach(andonOrder -> {
+                EquAndon equAndon = new EquAndon();
+                equAndon.setEquipmentId(andonOrder.getEquipmentId());
+                StringBuilder infoBuilder = new StringBuilder();
+                infoBuilder.append("瀹夌伅绫诲瀷: ").append(sysDictService.queryDictTextByKey("andon_type",andonOrder.getAndonType())).append("\n");
+                infoBuilder.append("瀹夌伅浜�: ").append(sysDictService.queryTableDictTextByKey("sys_user", "realname", "id", andonOrder.getOperator())).append("\n");
+                infoBuilder.append("瀹夌伅鏃堕棿: ").append(DateUtils.format(andonOrder.getOperateTime(), DateUtils.STR_DATE_TIME_SMALL)).append("\n");
+                infoBuilder.append("瀹夌伅鐘舵��: ").append(sysDictService.queryDictTextByKey("order_status",andonOrder.getOrderStatus())).append("\n");
+                equAndon.setAndonInfo(infoBuilder.toString());
+                result.add(equAndon);
+            });
+        }
+        return result;
+    }
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java
index aa11e2d..b8a2565 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentAlarmServiceImpl.java
@@ -7,6 +7,7 @@
 import org.jeecg.modules.mdc.service.IEquipmentAlarmService;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -22,4 +23,9 @@
                 .ge(EquipmentAlarm::getCollecttime, startTime).le(EquipmentAlarm::getCollecttime, endTime)
                 .eq(EquipmentAlarm::getEquipmentid, equipmentId).orderByDesc(EquipmentAlarm::getCollecttime));
     }
+
+    @Override
+    public List<EquipmentAlarm> equAlarmList(List<String> equipmentIdList) {
+        return this.baseMapper.equAlarmList(equipmentIdList);
+    }
 }
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java
index 0a84ad8..b4b0f7c 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java
@@ -94,6 +94,15 @@
         return Result.OK("娣诲姞鎴愬姛锛�");
     }
 
+    @AutoLog(value = "鍒�鍏峰噯澶囧崟-浠嶥NC绯荤粺鍐欏叆鍒�鍏峰噯澶囧崟鍙婃槑缁�")
+    @ApiOperation(value="鍒�鍏峰噯澶囧崟-浠嶥NC绯荤粺鍐欏叆鍒�鍏峰噯澶囧崟鍙婃槑缁�", notes="鍒�鍏峰噯澶囧崟-浠嶥NC绯荤粺鍐欏叆鍒�鍏峰噯澶囧崟鍙婃槑缁�")
+    //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:add")
+    @PostMapping(value = "/addPreparationOrderFromDnc")
+    public Result<String> addPreparationOrderFromDnc(@RequestBody PreparationOrderAndDetailDto preparationOrderAndDetailDto) {
+        preparationOrderService.addPreparationOrderFromDnc(preparationOrderAndDetailDto);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
+
     /**
      *  缂栬緫
      * @param preparationOrder
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java
index 99f9164..b8f107d 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.experimental.Accessors;
 import org.jeecg.common.aspect.annotation.Dict;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
@@ -21,6 +22,7 @@
  * @Version: V1.0
  */
 @Data
+@Accessors(chain = true)
 @TableName("tms_preparation_order_detail")
 @ApiModel(value="tms_preparation_order_detail瀵硅薄", description="鍒�鍏峰噯澶囧崟鏄庣粏")
 public class PreparationOrderDetail implements Serializable {
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java
index 3c2026c..9621ba9 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java
@@ -40,4 +40,6 @@
 	List<String> convertToOutboundOrder(List<String> preparationOrderIds);
 
 	IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page, Map<String, String[]> parameterMap);
+
+	void addPreparationOrderFromDnc(PreparationOrderAndDetailDto preparationOrderAndDetailDto);
 }
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java
index 6bb0dfc..f696caf 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java
@@ -220,7 +220,23 @@
 		return this.baseMapper.queryPageList(page, queryWrapper);
 	}
 
-	private LoginUser getCurrentUser() {
+    @Override
+	@Transactional(rollbackFor = Exception.class)
+    public void addPreparationOrderFromDnc(PreparationOrderAndDetailDto preparationOrderAndDetailDto) {
+		PreparationOrder preparationOrder = preparationOrderConvert.convert(preparationOrderAndDetailDto);
+		preparationOrder
+				.setId(null)
+				.setPreparationOrderNum(businessCodeRuleService.generateBusinessCodeSeq("ToolPreparationOrder"))
+				.setOrderStatus(PreparationOrderStatus.PENDING_AUDIT.getValue());
+		save(preparationOrder);
+		List<PreparationOrderDetail> preparationOrderDetailList = preparationOrderAndDetailDto.getPreparationOrderDetailList();
+		preparationOrderDetailList.forEach(item -> {
+			item.setId(null).setPreparationOrderId(preparationOrder.getId());
+		});
+		preparationOrderDetailService.saveBatch(preparationOrderDetailList);
+	}
+
+    private LoginUser getCurrentUser() {
 		// 鑾峰彇褰撳墠璁よ瘉鐨勭櫥褰曠敤鎴蜂俊鎭�
 		Subject currentUser = SecurityUtils.getSubject();
 		if (currentUser != null && currentUser.isAuthenticated()) {

--
Gitblit v1.9.3