From b9df2fc5c64a1d989991655a9e42e4d1f2ec4075 Mon Sep 17 00:00:00 2001
From: hdy <1105738590@qq.com>
Date: 星期四, 06 三月 2025 18:18:11 +0800
Subject: [PATCH] 修改

---
 billion-main/src/main/resources/mapper/om/OmOrderSchedulingMapper.xml                             |    4 
 billion-main/src/main/java/com/billion/main/sys/domain/SysCount.java                              |   37 +
 billion-main/src/main/java/com/billion/main/om/service/IOmProductionOrderInfoService.java         |   19 
 billion-main/src/main/java/com/billion/main/api/domain/WorkOrdersInfo.java                        |    2 
 billion-main/src/main/java/com/billion/main/sys/service/impl/SysCountServiceImpl.java             |   54 ++
 billion-main/src/main/java/com/billion/main/om/mapper/OmProductionOrderInfoMapper.java            |   20 
 billion-main/src/main/java/com/billion/main/om/domain/OmOrderScheduling.java                      |    4 
 billion-main/src/main/java/com/billion/main/constant/Constants.java                               |   82 ++-
 billion-main/src/main/java/com/billion/main/plcServer/sub/OPCUaSubscription.java                  |  435 ++++++++++++--------
 billion-main/src/main/java/com/billion/main/sys/mapper/SysCountMapper.java                        |   26 +
 billion-main/src/main/java/com/billion/main/plcServer/CustomRunner.java                           |  209 +++++++--
 billion-main/src/main/java/com/billion/main/api/service/IWorkOrdersInfoService.java               |    1 
 billion-main/src/main/java/com/billion/main/api/domain/WorkOrdersInfoChild.java                   |    2 
 billion-main/src/main/resources/mapper/sys/SysCountMapper.xml                                     |   64 +++
 billion-main/src/main/java/com/billion/main/api/RestfulAPI.java                                   |    2 
 billion-main/src/main/java/com/billion/main/om/domain/OmProductionOrderInfo.java                  |   21 +
 billion-main/src/main/resources/mapper/om/OmProductionOrderInfoMapper.xml                         |  101 +++-
 billion-main/src/main/java/com/billion/main/om/service/impl/OmProductionOrderInfoServiceImpl.java |   43 +
 billion-main/src/main/java/com/billion/main/api/service/impl/WorkOrdersInfoServiceImpl.java       |   14 
 billion-admin/src/main/resources/application-druid.yml                                            |    7 
 billion-main/src/main/java/com/billion/main/sys/service/ISysCountService.java                     |   24 +
 21 files changed, 829 insertions(+), 342 deletions(-)

diff --git a/billion-admin/src/main/resources/application-druid.yml b/billion-admin/src/main/resources/application-druid.yml
index 67ccf2b..c47b3a1 100644
--- a/billion-admin/src/main/resources/application-druid.yml
+++ b/billion-admin/src/main/resources/application-druid.yml
@@ -6,9 +6,12 @@
             # 涓诲簱鏁版嵁婧�
             master:
                 driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
-                url: jdbc:sqlserver://183.134.244.158:1433;DatabaseName=billion-db
+#                url: jdbc:sqlserver://183.134.244.158:1433;DatabaseName=billion-db
+#                username: sa
+#                password: JCDM@2023
+                url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=billion-db
                 username: sa
-                password: JCDM@2023
+                password: 123456
 #                password: admin@123
             # 鍒濆杩炴帴鏁�
             initialSize: 10
diff --git a/billion-main/src/main/java/com/billion/main/api/RestfulAPI.java b/billion-main/src/main/java/com/billion/main/api/RestfulAPI.java
index 3d1c0ae..d825e5c 100644
--- a/billion-main/src/main/java/com/billion/main/api/RestfulAPI.java
+++ b/billion-main/src/main/java/com/billion/main/api/RestfulAPI.java
@@ -25,7 +25,7 @@
      * 1銆佸伐鍘侻ES璋冪敤鎺ユ敹宸ュ崟鎺ュ彛锛屽皢宸ュ崟淇℃伅鍙戦�佺粰浜х嚎MES
      * 2銆佷骇绾縈ES灏嗘帴鏀跺埌鐨勫伐鍗曚俊鎭瓨鍏ュ埌宸ュ崟琛ㄥ拰BOM琛�
      */
-    @GetMapping("/receiveWorkOrdersInfo")
+    @PostMapping("/receiveWorkOrdersInfo")
     public ApiResponse receiveWorkOrdersInfo(@RequestBody WorkOrdersInfo workOrdersInfo) {
         try {
             // 璋冪敤service灞備繚瀛樻暟鎹�
diff --git a/billion-main/src/main/java/com/billion/main/api/domain/WorkOrdersInfo.java b/billion-main/src/main/java/com/billion/main/api/domain/WorkOrdersInfo.java
index e819d4b..4c96a51 100644
--- a/billion-main/src/main/java/com/billion/main/api/domain/WorkOrdersInfo.java
+++ b/billion-main/src/main/java/com/billion/main/api/domain/WorkOrdersInfo.java
@@ -18,7 +18,7 @@
     private String startTime;
     private String description;
     private String state;
-    private String fLAG;
+    private String flag;
     private String bomName;
     private List<WorkOrdersInfoChild> data;
 
diff --git a/billion-main/src/main/java/com/billion/main/api/domain/WorkOrdersInfoChild.java b/billion-main/src/main/java/com/billion/main/api/domain/WorkOrdersInfoChild.java
index 07e441d..71f9c25 100644
--- a/billion-main/src/main/java/com/billion/main/api/domain/WorkOrdersInfoChild.java
+++ b/billion-main/src/main/java/com/billion/main/api/domain/WorkOrdersInfoChild.java
@@ -4,7 +4,7 @@
 
 @Data
 public class WorkOrdersInfoChild {
-    private String BomName;  // 娣诲姞BomName瀛楁鐢ㄤ簬鍏宠仈
+    private String bomName;  // 娣诲姞BomName瀛楁鐢ㄤ簬鍏宠仈
     private String stationName;
     private String material;
     private String count;
diff --git a/billion-main/src/main/java/com/billion/main/api/service/IWorkOrdersInfoService.java b/billion-main/src/main/java/com/billion/main/api/service/IWorkOrdersInfoService.java
index 894123a..8945141 100644
--- a/billion-main/src/main/java/com/billion/main/api/service/IWorkOrdersInfoService.java
+++ b/billion-main/src/main/java/com/billion/main/api/service/IWorkOrdersInfoService.java
@@ -2,6 +2,7 @@
 
 import com.billion.main.api.domain.WorkOrdersInfo;
 
+
 public interface IWorkOrdersInfoService {
     boolean saveWorkOrders(WorkOrdersInfo workOrdersInfo);
 }
diff --git a/billion-main/src/main/java/com/billion/main/api/service/impl/WorkOrdersInfoServiceImpl.java b/billion-main/src/main/java/com/billion/main/api/service/impl/WorkOrdersInfoServiceImpl.java
index 6f1cff2..d1e3e34 100644
--- a/billion-main/src/main/java/com/billion/main/api/service/impl/WorkOrdersInfoServiceImpl.java
+++ b/billion-main/src/main/java/com/billion/main/api/service/impl/WorkOrdersInfoServiceImpl.java
@@ -40,6 +40,9 @@
         try {
             //淇濆瓨宸ュ崟淇℃伅
             OmProductionOrderInfo omProductionOrderInfo = new OmProductionOrderInfo();
+            omProductionOrderInfo.setBodyQty(Long.valueOf("0"));
+            omProductionOrderInfo.setHeadQty(Long.valueOf("0"));
+            omProductionOrderInfo.setPreQty(Long.valueOf("0"));
             omProductionOrderInfo.setWorkOrderNo(workOrdersInfo.getOrderNumber());
             omProductionOrderInfo.setSalesOrderCode(workOrdersInfo.getBatchNumber());
             omProductionOrderInfo.setProductCode(workOrdersInfo.getMaterialNumber());
@@ -49,17 +52,16 @@
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             Date startTime = sdf.parse(workOrdersInfo.getStartTime());
             omProductionOrderInfo.setPlanStartTime(startTime);
-            omProductionOrderInfo.setRemarks(Long.valueOf(workOrdersInfo.getDescription()));
+//            omProductionOrderInfo.setRemarks(Long.valueOf(workOrdersInfo.getDescription()));
             omProductionOrderInfo.setOrderStatus(workOrdersInfo.getState());
-            omProductionOrderInfo.setFlag(workOrdersInfo.getFLAG());
-            omProductionOrderInfoService.save(omProductionOrderInfo);
+            omProductionOrderInfo.setFlag(workOrdersInfo.getFlag());
+            omProductionOrderInfoService.insertOmProductionOrderInfo(omProductionOrderInfo);
             //淇濆瓨BOM涓昏〃淇℃伅
             BsBomInfo bsBomInfo = new BsBomInfo();
             bsBomInfo.setBomCode(workOrdersInfo.getBomName());
-            bsBomInfo.setBomName(workOrdersInfo.getBomName());
             bsBomInfo.setProductCode(workOrdersInfo.getMaterialNumber());
             bsBomInfo.setProductName(workOrdersInfo.getMaterialNumber());
-            bsBomInfoService.save(bsBomInfo);
+            bsBomInfoService.insertBsBomInfo(bsBomInfo);
             //淇濆瓨BOM瀛愯〃淇℃伅
             List<WorkOrdersInfoChild> childList = workOrdersInfo.getData();
             for (WorkOrdersInfoChild child : childList) {
@@ -73,7 +75,7 @@
                 bsBomChildInfo.setCostQty(child.getCount());
                 bsBomChildInfo.setChecked(child.getChecked());
                 bsBomChildInfo.setMaterialName(child.getMaterialName());
-                bsBomChildInfoService.save(bsBomChildInfo);
+                bsBomChildInfoService.insertBsBomChildInfo(bsBomChildInfo);
             }
             return true;
         } catch (Exception e) {
diff --git a/billion-main/src/main/java/com/billion/main/constant/Constants.java b/billion-main/src/main/java/com/billion/main/constant/Constants.java
index 372d88f..79e46a1 100644
--- a/billion-main/src/main/java/com/billion/main/constant/Constants.java
+++ b/billion-main/src/main/java/com/billion/main/constant/Constants.java
@@ -11,63 +11,85 @@
     public static final String RecordData= "RecordData";
     public static final String WorkOrderRequest= "WorkOrderRequest";
 
-    public static final List<String> PLC = new ArrayList<>();
+    public static final List<String> PLC1 = new ArrayList<>();
+    public static final List<String> PLC2 = new ArrayList<>();
+    public static final List<String> PLC3 = new ArrayList<>();
+    public static final List<String> PLC4 = new ArrayList<>();
 
-    public static final String C005= "C005";
+    public static final List<String> ONLINE = new ArrayList<>();
+
+    public static final List<String> OFFLINE = new ArrayList<>();
+    //PLC1
+    public static final String C005= "C005";//缂哥洊涓婄嚎宸ヤ綅
     public static final String C010= "C010";
     public static final String C020= "C020";
     public static final String C030= "C030";
+    public static final String C050= "C050";
     public static final String C060= "C060";
-    public static final String C070= "C070";
+    public static final String C070= "C070";//缂哥洊涓嬬嚎宸ヤ綅
 
-    public static final String P010= "P010";
-    public static final String P020= "P020";
-    public static final String P030= "P030";
-    public static final String OP005= "OP005";
+    //PLC2
+    public static final String OP005= "OP005";//缂镐綋涓婄嚎宸ヤ綅
     public static final String OP010= "OP010";
     public static final String OP020= "OP020";
     public static final String OP040= "OP040";
     public static final String OP045= "OP045";
     public static final String OP060= "OP060";
+    public static final String OP070= "OP070";
     public static final String OP075= "OP075";
     public static final String OP080= "OP080";
     public static final String OP090= "OP090";
-    public static final String OP095= "OP095";
-    public static final String OP100= "OP100";
+    public static final String OP095_1= "OP095-1";
+    public static final String OP095_2= "OP095-2";
+    public static final String OP100_1= "OP100-1";
+    public static final String OP100_2= "OP100-2";
     public static final String OP120= "OP120";
+    public static final String P010= "P010";//棰勮涓婄嚎宸ヤ綅//棰勮涓嬬嚎宸ヤ綅
+
+    //PLC3
     public static final String OP130= "OP130";
-    public static final String OP145= "OP145";
-    public static final String OP150= "OP150";
+    public static final String OP145_1= "OP145-1";
+    public static final String OP145_2= "OP145-2";
+    public static final String OP150_1= "OP150-1";
+    public static final String OP150_2= "OP150-2";
     public static final String OP160= "OP160";
-    public static final String OP165= "OP165";
-    public static final String OP170= "OP170";
+    public static final String OP165_1= "OP165-1";
+    public static final String OP165_2= "OP165-2";
+    public static final String OP170_1= "OP170-1";
+    public static final String OP170_2= "OP170-2";
     public static final String OP180= "OP180";
-    public static final String OP190= "OP190";
-    public static final String OP200= "OP200";
-    public static final String OP210= "OP210";
-    public static final String OP220= "OP220";
-    public static final String OP230= "OP230";
-    public static final String OP240= "OP240";
-    public static final String OP250= "OP250";
-    public static final String OP260= "OP260";
-    public static final String OP270= "OP270";
+    public static final String OP190_1= "OP190-1";
+    public static final String OP190_2= "OP190-2";
+    public static final String OP200_1= "OP200-1";
+    public static final String OP200_2= "OP200-2";
+    public static final String OP210_1= "OP210-1";
+    public static final String OP210_2= "OP210-2";
+    public static final String OP220_1= "OP220-1";
+    public static final String OP220_2= "OP220-2";
+    public static final String OP230_1= "OP230-1";
+    public static final String OP230_2= "OP230-2";
+    public static final String OP240_1= "OP240-1";
+    public static final String OP240_2= "OP240-2";
+    public static final String OP250_1= "OP250-1";
+    public static final String OP250_2= "OP250-2";
+    public static final String OP260_1= "OP260-1";
+    public static final String OP260_2= "OP260-2";
+    public static final String OP270_1= "OP270-1";
+    public static final String OP270_2= "OP270-2";
     public static final String OP275= "OP275";
     public static final String OP280= "OP280";
-    public static final String OP290= "OP290";
+    public static final String OP290_1= "OP290-1";
+    public static final String OP290_2= "OP290-2";
     public static final String OP295= "OP295";
     public static final String OP300= "OP300";
-    public static final String OP310= "OP310";
+    public static final String OP310= "OP310"; //缂镐綋涓嬬嚎宸ヤ綅
+
+    //PLC4
     public static final String C040= "C040";
     public static final String OP030= "OP030";
     public static final String OP050= "OP050";
-    public static final String OP070= "OP070";
     public static final String OP110= "OP110";
     public static final String OP140= "OP140";
-
-
-
-
-
 
 
 }
diff --git a/billion-main/src/main/java/com/billion/main/om/domain/OmOrderScheduling.java b/billion-main/src/main/java/com/billion/main/om/domain/OmOrderScheduling.java
index 50b16b4..461b93c 100644
--- a/billion-main/src/main/java/com/billion/main/om/domain/OmOrderScheduling.java
+++ b/billion-main/src/main/java/com/billion/main/om/domain/OmOrderScheduling.java
@@ -55,4 +55,8 @@
     @Excel(name = "澶囨敞")
     private String remarks;
 
+    /** 褰撳墠璁㈠崟宸蹭笂绾挎暟閲� */
+    @Excel(name = "褰撳墠璁㈠崟宸蹭笂绾挎暟閲�")
+    private Long nowQty;
+
 }
diff --git a/billion-main/src/main/java/com/billion/main/om/domain/OmProductionOrderInfo.java b/billion-main/src/main/java/com/billion/main/om/domain/OmProductionOrderInfo.java
index 2c0addc..750c239 100644
--- a/billion-main/src/main/java/com/billion/main/om/domain/OmProductionOrderInfo.java
+++ b/billion-main/src/main/java/com/billion/main/om/domain/OmProductionOrderInfo.java
@@ -39,6 +39,15 @@
     /** 璁″垝鏁伴噺 */
     @Excel(name = "璁″垝鏁伴噺")
     private Long planQty;
+    /** 璁″垝鏁伴噺 */
+    @Excel(name = "缂镐綋鏁伴噺")
+    private Long bodyQty;
+    /** 璁″垝鏁伴噺 */
+    @Excel(name = "缂哥洊鏁伴噺")
+    private Long headQty;
+    /** 璁″垝鏁伴噺 */
+    @Excel(name = "棰勮鏁伴噺")
+    private Long preQty;
 
     /** 璁″垝寮�濮嬫椂闂� */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -54,9 +63,19 @@
     @Excel(name = "宸ュ崟鐘舵��", readConverterExp = "1=鏈紑濮�,2=鐢熶骇涓�,3=宸插畬鎴�,4=宸插叧闂�")
     private String orderStatus;
 
+    /** 宸ュ崟鐘舵�侊紙1鏈紑濮�2鐢熶骇涓�3宸插畬鎴�4宸插叧闂級 */
+    @Excel(name = "宸ュ崟缂镐綋鐘舵��", readConverterExp = "1=鏈紑濮�,2=鐢熶骇涓�,3=宸插畬鎴�,4=宸插叧闂�")
+    private String bodyStatus;
+    /** 宸ュ崟鐘舵�侊紙1鏈紑濮�2鐢熶骇涓�3宸插畬鎴�4宸插叧闂級 */
+    @Excel(name = "宸ュ崟缂哥洊鐘舵��", readConverterExp = "1=鏈紑濮�,2=鐢熶骇涓�,3=宸插畬鎴�,4=宸插叧闂�")
+    private String headStatus;
+    /** 宸ュ崟鐘舵�侊紙1鏈紑濮�2鐢熶骇涓�3宸插畬鎴�4宸插叧闂級 */
+    @Excel(name = "宸ュ崟棰勮鐘舵��", readConverterExp = "1=鏈紑濮�,2=鐢熶骇涓�,3=宸插畬鎴�,4=宸插叧闂�")
+    private String preStatus;
+
     /** 澶囨敞 */
     @Excel(name = "澶囨敞")
-    private Long remarks;
+    private String remarks;
 
     /** 鍙戝姩鏈哄瀷鍙� */
     @Excel(name = "鍙戝姩鏈哄瀷鍙�")
diff --git a/billion-main/src/main/java/com/billion/main/om/mapper/OmProductionOrderInfoMapper.java b/billion-main/src/main/java/com/billion/main/om/mapper/OmProductionOrderInfoMapper.java
index 9b27072..67a0534 100644
--- a/billion-main/src/main/java/com/billion/main/om/mapper/OmProductionOrderInfoMapper.java
+++ b/billion-main/src/main/java/com/billion/main/om/mapper/OmProductionOrderInfoMapper.java
@@ -15,15 +15,21 @@
 public interface OmProductionOrderInfoMapper extends BaseMapper<OmProductionOrderInfo>
 {
     // 鏌ヨ order_status 涓� 1 涓� plan_start_time 鏈�鏃╃殑涓�鏉¤褰�
-    public OmProductionOrderInfo selectEarliestOrder();
-    public OmProductionOrderInfo selectEarliestOrder2();
-    public OmProductionOrderInfo getSerialNumber();
-    public OmProductionOrderInfo updateSerialNumber();
-    public OmProductionOrderInfo updateYear();
-    public OmProductionOrderInfo updateOrderStatus5();
+    public OmProductionOrderInfo getBodyOrder();
 
-    public OmProductionOrderInfo updateOrderStatus2();
+    public OmProductionOrderInfo updateBodyStatus2();
 
+    public OmProductionOrderInfo updateBodyStatus1();
+    public OmProductionOrderInfo getHeadOrder();
+
+    public OmProductionOrderInfo updateHeadStatus2();
+
+    public OmProductionOrderInfo updateHeadStatus1();
+    public OmProductionOrderInfo getPreOrder();
+
+    public OmProductionOrderInfo updatePreStatus2();
+
+    public OmProductionOrderInfo updatePreStatus1();
 
 
 
diff --git a/billion-main/src/main/java/com/billion/main/om/service/IOmProductionOrderInfoService.java b/billion-main/src/main/java/com/billion/main/om/service/IOmProductionOrderInfoService.java
index 2e7e4f3..bb961c0 100644
--- a/billion-main/src/main/java/com/billion/main/om/service/IOmProductionOrderInfoService.java
+++ b/billion-main/src/main/java/com/billion/main/om/service/IOmProductionOrderInfoService.java
@@ -14,13 +14,18 @@
  */
 public interface IOmProductionOrderInfoService extends IService<OmProductionOrderInfo>
 {
-    public OmProductionOrderInfo getEarliestOrder();
-    public OmProductionOrderInfo getEarliestOrder2();
-    public OmProductionOrderInfo getSerialNumber();
-    public OmProductionOrderInfo updateSerialNumber();
-    public OmProductionOrderInfo updateYear();
-    public OmProductionOrderInfo updateOrderStatus5();
-    public OmProductionOrderInfo updateOrderStatus2();
+    public OmProductionOrderInfo getBodyOrder();
+
+    public OmProductionOrderInfo updateBodyStatus2();
+    public OmProductionOrderInfo updateBodyStatus1();
+    public OmProductionOrderInfo getHeadOrder();
+
+    public OmProductionOrderInfo updateHeadStatus2();
+    public OmProductionOrderInfo updateHeadStatus1();
+    public OmProductionOrderInfo getPreOrder();
+
+    public OmProductionOrderInfo updatePreStatus2();
+    public OmProductionOrderInfo updatePreStatus1();
 
 
 
diff --git a/billion-main/src/main/java/com/billion/main/om/service/impl/OmProductionOrderInfoServiceImpl.java b/billion-main/src/main/java/com/billion/main/om/service/impl/OmProductionOrderInfoServiceImpl.java
index 36a4102..f540144 100644
--- a/billion-main/src/main/java/com/billion/main/om/service/impl/OmProductionOrderInfoServiceImpl.java
+++ b/billion-main/src/main/java/com/billion/main/om/service/impl/OmProductionOrderInfoServiceImpl.java
@@ -29,34 +29,49 @@
 
 
     @Override
-    public OmProductionOrderInfo getEarliestOrder()
+    public OmProductionOrderInfo getBodyOrder()
     {
-        return OmProductionOrderInfoMapper.selectEarliestOrder();
+        return OmProductionOrderInfoMapper.getBodyOrder();
+    }
+
+    @Override
+    public OmProductionOrderInfo updateBodyStatus2() {return OmProductionOrderInfoMapper.updateBodyStatus2();}
+    @Override
+    public OmProductionOrderInfo updateBodyStatus1()
+    {
+        return OmProductionOrderInfoMapper.updateBodyStatus1();
     }
     @Override
-    public OmProductionOrderInfo getEarliestOrder2() {return OmProductionOrderInfoMapper.selectEarliestOrder2();}
-    @Override
-    public OmProductionOrderInfo getSerialNumber()
+    public OmProductionOrderInfo getHeadOrder()
     {
-        return OmProductionOrderInfoMapper.getSerialNumber();
+        return OmProductionOrderInfoMapper.getHeadOrder();
+    }
+
+    @Override
+    public OmProductionOrderInfo updateHeadStatus2() {return OmProductionOrderInfoMapper.updateHeadStatus2();}
+    @Override
+    public OmProductionOrderInfo updateHeadStatus1()
+    {
+        return OmProductionOrderInfoMapper.updateHeadStatus1();
     }
     @Override
-    public OmProductionOrderInfo updateSerialNumber() {return OmProductionOrderInfoMapper.updateSerialNumber();}
-    @Override
-    public OmProductionOrderInfo updateYear() {return OmProductionOrderInfoMapper.updateYear();}
-    @Override
-    public OmProductionOrderInfo updateOrderStatus5()
+    public OmProductionOrderInfo getPreOrder()
     {
-        return OmProductionOrderInfoMapper.updateOrderStatus5();
+        return OmProductionOrderInfoMapper.getPreOrder();
     }
+
     @Override
-    public OmProductionOrderInfo updateOrderStatus2()
+    public OmProductionOrderInfo updatePreStatus2() {return OmProductionOrderInfoMapper.updatePreStatus2();}
+    @Override
+    public OmProductionOrderInfo updatePreStatus1()
     {
-        return OmProductionOrderInfoMapper.updateOrderStatus2();
+        return OmProductionOrderInfoMapper.updatePreStatus1();
     }
 
 
 
+
+
     /**
      * 鏌ヨ鐢熶骇宸ュ崟
      * 
diff --git a/billion-main/src/main/java/com/billion/main/plcServer/CustomRunner.java b/billion-main/src/main/java/com/billion/main/plcServer/CustomRunner.java
index 76cf3f1..69cf86b 100644
--- a/billion-main/src/main/java/com/billion/main/plcServer/CustomRunner.java
+++ b/billion-main/src/main/java/com/billion/main/plcServer/CustomRunner.java
@@ -9,6 +9,7 @@
 import com.billion.main.om.service.IOmOrderSchedulingService;
 import com.billion.main.om.service.IOmProductionOrderInfoService;
 import com.billion.main.plcServer.sub.OPCUaSubscription;
+import com.billion.main.sys.service.ISysCountService;
 import com.kangaroohy.milo.service.MiloService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.ApplicationArguments;
@@ -38,62 +39,85 @@
     public IDaCollectionParamConfService daCollectionParamConfService;
     @Autowired
     public IDaMaterialCollectionService daMaterialCollectionService;
+    @Autowired
+    public ISysCountService sysCountService;
 
 
     @Override
     public void run(ApplicationArguments args) throws Exception {
-        //绗笁鏂硅澶�
-        Constants.PLC.add(Constants.C040);
-        Constants.PLC.add(Constants.OP030);
-        Constants.PLC.add(Constants.OP050);
-        Constants.PLC.add(Constants.OP070);
-        Constants.PLC.add(Constants.OP110);
-        Constants.PLC.add(Constants.OP140);
-        //PLC1璁惧
-        Constants.PLC.add(Constants.C010);
-        Constants.PLC.add(Constants.C020);
-        Constants.PLC.add(Constants.C030);
-        Constants.PLC.add(Constants.C060);
-        Constants.PLC.add(Constants.C070);
-        //PLC2璁惧
-        Constants.PLC.add(Constants.P010);
-        Constants.PLC.add(Constants.P020);
-        Constants.PLC.add(Constants.P030);
-        Constants.PLC.add(Constants.OP005);
-        Constants.PLC.add(Constants.OP010);
-        Constants.PLC.add(Constants.OP020);
-        Constants.PLC.add(Constants.OP040);
-        Constants.PLC.add(Constants.OP045);
-        Constants.PLC.add(Constants.OP060);
-        Constants.PLC.add(Constants.OP075);
-        Constants.PLC.add(Constants.OP080);
-        Constants.PLC.add(Constants.OP090);
-        Constants.PLC.add(Constants.OP095);
-        Constants.PLC.add(Constants.OP100);
-        Constants.PLC.add(Constants.OP120);
-        //PLC3璁惧
-        Constants.PLC.add(Constants.OP130);
-        Constants.PLC.add(Constants.OP145);
-        Constants.PLC.add(Constants.OP150);
-        Constants.PLC.add(Constants.OP160);
-        Constants.PLC.add(Constants.OP165);
-        Constants.PLC.add(Constants.OP170);
-        Constants.PLC.add(Constants.OP180);
-        Constants.PLC.add(Constants.OP190);
-        Constants.PLC.add(Constants.OP200);
-        Constants.PLC.add(Constants.OP210);
-        Constants.PLC.add(Constants.OP220);
-        Constants.PLC.add(Constants.OP230);
-        Constants.PLC.add(Constants.OP240);
-        Constants.PLC.add(Constants.OP250);
-        Constants.PLC.add(Constants.OP260);
-        Constants.PLC.add(Constants.OP270);
-        Constants.PLC.add(Constants.OP275);
-        Constants.PLC.add(Constants.OP280);
-        Constants.PLC.add(Constants.OP290);
-        Constants.PLC.add(Constants.OP295);
-        Constants.PLC.add(Constants.OP300);
-        //
+        //PLC1璁惧//鎺掓煡涓婁笅绾�
+        Constants.PLC1.add(Constants.C010);
+        Constants.PLC1.add(Constants.C020);
+        Constants.PLC1.add(Constants.C030);
+        Constants.PLC1.add(Constants.C050);
+        Constants.PLC1.add(Constants.C060);
+        //PLC2璁惧//鎺掓煡涓婁笅绾�
+        Constants.PLC2.add(Constants.OP005);
+        Constants.PLC2.add(Constants.OP010);
+        Constants.PLC2.add(Constants.OP020);
+        Constants.PLC2.add(Constants.OP040);
+        Constants.PLC2.add(Constants.OP045);
+        Constants.PLC2.add(Constants.OP060);
+        Constants.PLC2.add(Constants.OP070);
+        Constants.PLC2.add(Constants.OP075);
+        Constants.PLC2.add(Constants.OP080);
+        Constants.PLC2.add(Constants.OP090);
+        Constants.PLC2.add(Constants.OP095_1);
+        Constants.PLC2.add(Constants.OP095_2);
+        Constants.PLC2.add(Constants.OP100_1);
+        Constants.PLC2.add(Constants.OP100_2);
+        Constants.PLC2.add(Constants.OP120);
+        //PLC3璁惧//鎺掓煡涓婁笅绾�
+        Constants.PLC3.add(Constants.OP130);
+        Constants.PLC3.add(Constants.OP145_1);
+        Constants.PLC3.add(Constants.OP145_2);
+        Constants.PLC3.add(Constants.OP150_1);
+        Constants.PLC3.add(Constants.OP150_2);
+        Constants.PLC3.add(Constants.OP160);
+        Constants.PLC3.add(Constants.OP165_1);
+        Constants.PLC3.add(Constants.OP165_2);
+        Constants.PLC3.add(Constants.OP170_1);
+        Constants.PLC3.add(Constants.OP170_2);
+        Constants.PLC3.add(Constants.OP180);
+        Constants.PLC3.add(Constants.OP190_1);
+        Constants.PLC3.add(Constants.OP190_2);
+        Constants.PLC3.add(Constants.OP200_1);
+        Constants.PLC3.add(Constants.OP200_2);
+        Constants.PLC3.add(Constants.OP210_1);
+        Constants.PLC3.add(Constants.OP210_2);
+        Constants.PLC3.add(Constants.OP220_1);
+        Constants.PLC3.add(Constants.OP220_2);
+        Constants.PLC3.add(Constants.OP230_1);
+        Constants.PLC3.add(Constants.OP230_2);
+        Constants.PLC3.add(Constants.OP240_1);
+        Constants.PLC3.add(Constants.OP240_2);
+        Constants.PLC3.add(Constants.OP250_1);
+        Constants.PLC3.add(Constants.OP250_2);
+        Constants.PLC3.add(Constants.OP260_1);
+        Constants.PLC3.add(Constants.OP260_2);
+        Constants.PLC3.add(Constants.OP270_1);
+        Constants.PLC3.add(Constants.OP270_2);
+        Constants.PLC3.add(Constants.OP275);
+        Constants.PLC3.add(Constants.OP280);
+        Constants.PLC3.add(Constants.OP290_1);
+        Constants.PLC3.add(Constants.OP290_2);
+        Constants.PLC3.add(Constants.OP295);
+        Constants.PLC3.add(Constants.OP300);
+        Constants.PLC3.add(Constants.OP310);
+        //PLC4//鎺掓煡涓婁笅绾�
+        Constants.PLC4.add(Constants.C040);
+        Constants.PLC4.add(Constants.OP030);
+        Constants.PLC4.add(Constants.OP050);
+        Constants.PLC4.add(Constants.OP110);
+        Constants.PLC4.add(Constants.OP140);
+
+        //涓婄嚎宸ヤ綅
+        Constants.ONLINE.add(Constants.C005);
+        Constants.ONLINE.add(Constants.OP005);
+        //涓嬬嚎宸ヤ綅
+        Constants.OFFLINE.add(Constants.C070);
+        Constants.OFFLINE.add(Constants.OP310);
+        Constants.OFFLINE.add(Constants.P010);
 
         OPCUaSubscription OPCUaSubscription = new OPCUaSubscription(miloService,
                 daParamCollectionService,
@@ -102,7 +126,8 @@
                 omOrderSchedulingService,
                 bsBomChildInfoService,
                 daCollectionParamConfService,
-                daMaterialCollectionService);
+                daMaterialCollectionService,
+                sysCountService);
 
         List<String> lists = getList();
         System.out.println("璁㈤槄鍐呭锛�"+lists);
@@ -112,10 +137,80 @@
 
     public List<String> getList(){
         List<String> lists = new ArrayList<>();
-        lists.add("PLC1.C005.RecordData");//璇锋眰淇濆瓨
-        lists.add("PLC1.C005.WorkOrderRequest");//璇锋眰淇濆瓨
-        lists.add("PLC1.OP010.RecordData");//璇锋眰淇濆瓨
-        lists.add("PLC1.A1.RecordData");//璇锋眰淇濆瓨
+        //PLC1
+        lists.add("PLC1.C005.RecordData");
+        lists.add("PLC1.C005.WorkOrderRequest");//璇锋眰宸ュ崟
+        lists.add("PLC1.C010.RecordData");
+        lists.add("PLC1.C020.RecordData");
+        lists.add("PLC1.C030.RecordData");
+        lists.add("PLC1.C050.RecordData");
+        lists.add("PLC1.C060.RecordData");
+        lists.add("PLC1.C070.RecordData");
+        //PLC2
+        lists.add("PLC2.OP005.RecordData");
+        lists.add("PLC2.OP010.WorkOrderRequest");//璇锋眰宸ュ崟
+        lists.add("PLC2.OP020.RecordData");
+        lists.add("PLC2.OP040.RecordData");
+        lists.add("PLC2.OP045.RecordData");
+        lists.add("PLC2.OP060.RecordData");
+        lists.add("PLC2.OP070.RecordData");
+        lists.add("PLC2.OP075.RecordData");
+        lists.add("PLC2.OP080.RecordData");
+        lists.add("PLC2.OP090.RecordData");
+        lists.add("PLC2.OP095-1.RecordData");
+        lists.add("PLC2.OP095-2.RecordData");
+        lists.add("PLC2.OP100-1.RecordData");
+        lists.add("PLC2.OP100-2.RecordData");
+        lists.add("PLC2.OP120.RecordData");
+        lists.add("PLC2.P010.RecordData");
+        lists.add("PLC2.P010.WorkOrderRequest");//璇锋眰宸ュ崟
+        //PLC3
+        lists.add("PLC3.OP130.RecordData");
+        lists.add("PLC3.OP145-1.RecordData");
+        lists.add("PLC3.OP145-2.RecordData");
+        lists.add("PLC3.OP150-1.RecordData");
+        lists.add("PLC3.OP150-2.RecordData");
+        lists.add("PLC3.OP160.RecordData");
+        lists.add("PLC3.OP165-1.RecordData");
+        lists.add("PLC3.OP165-2.RecordData");
+        lists.add("PLC3.OP170-1.RecordData");
+        lists.add("PLC3.OP170-2.RecordData");
+        lists.add("PLC3.OP180.RecordData");
+        lists.add("PLC3.OP190-1.RecordData");
+        lists.add("PLC3.OP190-2.RecordData");
+        lists.add("PLC3.OP200-1.RecordData");
+        lists.add("PLC3.OP200-2.RecordData");
+        lists.add("PLC3.OP210-1.RecordData");
+        lists.add("PLC3.OP210-2.RecordData");
+        lists.add("PLC3.OP220-1.RecordData");
+        lists.add("PLC3.OP220-2.RecordData");
+        lists.add("PLC3.OP230-1.RecordData");
+        lists.add("PLC3.OP230-2.RecordData");
+        lists.add("PLC3.OP240-1.RecordData");
+        lists.add("PLC3.OP240-2.RecordData");
+        lists.add("PLC3.OP250-1.RecordData");
+        lists.add("PLC3.OP250-2.RecordData");
+        lists.add("PLC3.OP260-1.RecordData");
+        lists.add("PLC3.OP260-2.RecordData");
+        lists.add("PLC3.OP270-1.RecordData");
+        lists.add("PLC3.OP270-2.RecordData");
+        lists.add("PLC3.OP275.RecordData");
+        lists.add("PLC3.OP280.RecordData");
+        lists.add("PLC3.OP290-1.RecordData");
+        lists.add("PLC3.OP290-2.RecordData");
+        lists.add("PLC3.OP295.RecordData");
+        lists.add("PLC3.OP300.RecordData");
+        lists.add("PLC3.OP310.RecordData");
+        //PLC4
+        lists.add("PLC4.C040.RecordData");
+        lists.add("PLC4.OP030.RecordData");
+        lists.add("PLC4.OP050.RecordData");
+        lists.add("PLC4.OP070.RecordData");
+        lists.add("PLC3.OP110.RecordData");
+        lists.add("PLC3.OP140.RecordData");
+
+
+
 
         return lists;
     }
diff --git a/billion-main/src/main/java/com/billion/main/plcServer/sub/OPCUaSubscription.java b/billion-main/src/main/java/com/billion/main/plcServer/sub/OPCUaSubscription.java
index 1603060..aa650f9 100644
--- a/billion-main/src/main/java/com/billion/main/plcServer/sub/OPCUaSubscription.java
+++ b/billion-main/src/main/java/com/billion/main/plcServer/sub/OPCUaSubscription.java
@@ -1,4 +1,5 @@
 package com.billion.main.plcServer.sub;
+
 import com.billion.common.utils.StringUtils;
 import com.billion.main.bs.domain.BsBomChildInfo;
 import com.billion.main.bs.service.IBsBomChildInfoService;
@@ -15,15 +16,18 @@
 import com.billion.main.om.domain.OmProductionOrderInfo;
 import com.billion.main.om.service.IOmOrderSchedulingService;
 import com.billion.main.om.service.IOmProductionOrderInfoService;
+import com.billion.main.sys.domain.SysCount;
+import com.billion.main.sys.service.ISysCountService;
 import com.kangaroohy.milo.model.ReadWriteEntity;
 import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
 import com.kangaroohy.milo.service.MiloService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
+
 import java.time.LocalDateTime;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 @Slf4j
 @Component
@@ -36,6 +40,7 @@
     public IBsBomChildInfoService bsBomChildInfoService;
     public IDaCollectionParamConfService daCollectionParamConfService;
     public IDaMaterialCollectionService daMaterialCollectionService;
+    public ISysCountService sysCountService;
 
 
     public OPCUaSubscription(MiloService miloService,
@@ -45,7 +50,8 @@
                              IOmOrderSchedulingService omOrderSchedulingService,
                              IBsBomChildInfoService bsBomChildInfoService,
                              IDaCollectionParamConfService daCollectionParamConfService,
-                             IDaMaterialCollectionService daMaterialCollectionService
+                             IDaMaterialCollectionService daMaterialCollectionService,
+                             ISysCountService sysCountService
                              ) {
         OPCUaSubscription.miloService = miloService;
         this.daParamCollectionService = daParamCollectionService;
@@ -55,6 +61,7 @@
         this.bsBomChildInfoService = bsBomChildInfoService;
         this.daCollectionParamConfService = daCollectionParamConfService;
         this.daMaterialCollectionService = daMaterialCollectionService;
+        this.sysCountService = sysCountService;
     }
     @Override
     public void onSubscribe(String identifier, Object value) {
@@ -84,12 +91,12 @@
                     miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("0").build());
                 //璇锋眰杩涚珯
                 } else if (Constants.ONE.equals(valueString)){
-                    //棣栧伐绔�
-                    if(Constants.C005.equals(device)){
+                    //1.1//棣栧伐绔�
+                    if(Constants.C005.equals(device) || Constants.OP005.equals(device) || Constants.P010.equals(device)){
                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("11").build());
                     }
-                    //闄ら宸ョ珯鎵�鏈夊伐绔�
-                    else if(Constants.PLC.contains(device) && Constants.OP310.contains(device)){
+                    ///////闄ら宸ョ珯鎵�鏈夊伐绔�
+                    else if(Constants.PLC1.contains(device) && Constants.OP310.contains(device)){
                         //鏍¢獙SFCCode鏄惁瀛樺湪
                         Object SFCCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".SFCCode").getValue();
                         Object PalletID = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue();
@@ -106,124 +113,129 @@
                             //涓嬪彂閰嶆柟
                             formula(thoroughfare, device, bsbomChildInfo);
                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("11").build());
+
                         }
                     }
-                //
-                //
                 //鍑虹珯淇濆瓨鏁版嵁
                 } else if (Constants.TWO.equals(valueString)) {
-                    //棣栧姛绔�
-                    if(Constants.C005.equals(device)){
-                        // 鍒ゆ柇鎺ュ崟鏄惁鎴愬姛
-                        OmOrderScheduling omOrderScheduling = new OmOrderScheduling();
-                        List<OmOrderScheduling> omOrderSchedulinglist = new ArrayList<>();
+                    OmProductionOrderInfo omProductionOrderInfo = new OmProductionOrderInfo();
+                    OmOrderScheduling omOrderScheduling = new OmOrderScheduling();
+                    Object SFCCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".SFCCode").getValue();
+                    //涓婄嚎宸ヤ綅
+                    if(Constants.ONLINE.contains(device)){
                         Object workOrderNumber = miloService.readFromOpcUa(thoroughfare + "." + device + ".WorkOrderNumber").getValue();
-                        Object PalletID = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue();
-                        Object SFCCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".SFCCode").getValue();
-                        //鎵樼洏缁戝畾SFCCode鍜屽伐鍗�
+                        Object nowQty = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue();
                         omOrderScheduling.setWorkOrderNo(workOrderNumber.toString());
-                        omOrderScheduling.setRemarks(PalletID.toString());
+                        omOrderScheduling.setNowQty((Long) nowQty);
                         omOrderScheduling.setSfcCode(SFCCode.toString());
-                        omOrderSchedulinglist.add(omOrderScheduling);
-                        omOrderSchedulingService.saveBatch(omOrderSchedulinglist);
-                        //鏌ヨdescriptive瀛楁绛変簬1鐨勯噰闆嗛」淇濆瓨鍒版壂鐮佷繚瀛樺埌da_material_collection琛ㄩ噷
-                        DaCollectionParamConf daCollectionParamConf1 = new DaCollectionParamConf();
-                        daCollectionParamConf1.setProcessesCode(device);
-                        daCollectionParamConf1.setDescriptive("1");
-                        List<DaCollectionParamConf> daCollectionParamConfList1 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf1);
-                        for (DaCollectionParamConf conf : daCollectionParamConfList1) {
-                            String gatherAddress = conf.getGatherAddress();
-                            Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // 鑾峰彇鍘熷鍊煎璞♀��:ml-citation{ref="4" data="citationList"}
-                            if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) {
-                                log.warn("閲囬泦鍦板潃{}杩斿洖绌哄�硷紝璺宠繃瀛樺偍", gatherAddress);
-                                continue; // 缁堟褰撳墠寰幆杩唬鈥�:ml-citation{ref="1,2" data="citationList"}
-                            }
-                                DaMaterialCollection materialCollection = new DaMaterialCollection();
-                                materialCollection.setSfcCode(SFCCode.toString());
-                                materialCollection.setLocationCode(device);
-                                materialCollection.setParamName(conf.getParameterSetName());
-                                materialCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue());
-                                materialCollection.setCollectTime(new Date());
-                                daMaterialCollectionService.insertDaMaterialCollection(materialCollection);
+                        //鎵樼洏缁戝畾SFCCode鍜屽伐鍗曞拰浜х嚎
+                        if(Constants.OP005.equals(device)){
+                            omOrderScheduling.setRemarks("Body");
                         }
-                        //鏌ヨdescriptive瀛楁绛変簬2鐨勯噰闆嗛」淇濆瓨鍒版壂鐮佷繚瀛樺埌da_param_collection琛ㄩ噷
-                        DaCollectionParamConf daCollectionParamConf2 = new DaCollectionParamConf();
-                        daCollectionParamConf2.setProcessesCode(device);
-                        daCollectionParamConf2.setDescriptive("2");
-                        List<DaCollectionParamConf> daCollectionParamConfList2 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf2);
-                        for (DaCollectionParamConf conf : daCollectionParamConfList2) {
-                            String gatherAddress = conf.getGatherAddress();
-                            Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // 鑾峰彇鍘熷鍊煎璞♀��:ml-citation{ref="4" data="citationList"}
-                            if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) {
-                                log.warn("閲囬泦鍦板潃{}杩斿洖绌哄�硷紝璺宠繃瀛樺偍", gatherAddress);
-                                continue; // 缁堟褰撳墠寰幆杩唬鈥�:ml-citation{ref="1,2" data="citationList"}
-                            }
-                                DaParamCollection paramCollection = new DaParamCollection();
-                                paramCollection.setSfcCode(SFCCode.toString());
-                                paramCollection.setLocationCode(device);
-                                paramCollection.setParamName(conf.getParameterSetName());
-                                paramCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue());
-                                paramCollection.setCollectionTime(new Date());
-                                daParamCollectionService.insertDaParamCollection(paramCollection);
+                        if(Constants.C005.equals(device)){
+                            omOrderScheduling.setRemarks("Head");
                         }
-                        DaStationCollection daStationCollection = new DaStationCollection();
-                        daStationCollection.setLocationCode(device);
-                        daStationCollection.setSfcCode(SFCCode.toString());
-                        daStationCollection.setInboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StartTime").getValue());
-                        daStationCollection.setOutboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime").getValue());
-                        daStationCollectionService.insertDaStationCollection(daStationCollection);
+                        omOrderSchedulingService.insertOmOrderScheduling(omOrderScheduling);
+                    }else if(Constants.OFFLINE.contains(device)){
+                        if(Constants.C070.equals(device)){
+                            omOrderScheduling.setRemarks("Head");
+                            omOrderScheduling.setSfcCode(SFCCode.toString());
+                            List<OmOrderScheduling> omOrderSchedulingList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
+                            Object nowQty = omOrderSchedulingList.get(0).getNowQty();
+                            Object WorkOrderNumber = omOrderSchedulingList.get(0).getWorkOrderNo();
+                            omProductionOrderInfo.setWorkOrderNo(WorkOrderNumber.toString());
+                            List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo);
+                            Object headQty = omProductionOrderInfoList.get(0).getHeadQty();
+                            if (nowQty == headQty){
+                                omProductionOrderInfoList.get(0).setHeadStatus("3");
 
-                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("21").build());
-                    }else if(Constants.PLC.contains(device) && Constants.OP310.contains(device) ){
-                        Object SFCCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".SFCCode").getValue();
-                        //鏌ヨdescriptive瀛楁绛変簬1鐨勯噰闆嗛」淇濆瓨鍒版壂鐮佷繚瀛樺埌da_material_collection琛ㄩ噷
-                        DaCollectionParamConf daCollectionParamConf1 = new DaCollectionParamConf();
-                        daCollectionParamConf1.setProcessesCode(device);
-                        daCollectionParamConf1.setDescriptive("1");
-                        List<DaCollectionParamConf> daCollectionParamConfList1 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf1);
-                        for (DaCollectionParamConf conf : daCollectionParamConfList1) {
-                            String gatherAddress = conf.getGatherAddress();
-                            Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // 鑾峰彇鍘熷鍊煎璞♀��:ml-citation{ref="4" data="citationList"}
-                            if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) {
-                                log.warn("閲囬泦鍦板潃{}杩斿洖绌哄�硷紝璺宠繃瀛樺偍", gatherAddress);
-                                continue; // 缁堟褰撳墠寰幆杩唬鈥�:ml-citation{ref="1,2" data="citationList"}
+
+                                omProductionOrderInfoService.updateOmProductionOrderInfo(omProductionOrderInfoList.get(0));
                             }
-                            DaMaterialCollection materialCollection = new DaMaterialCollection();
-                            materialCollection.setSfcCode(SFCCode.toString());
-                            materialCollection.setLocationCode(device);
-                            materialCollection.setParamName(conf.getParameterSetName());
-                            materialCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue());
-                            materialCollection.setCollectTime(new Date());
-                            daMaterialCollectionService.insertDaMaterialCollection(materialCollection);
-                        }
-                        //鏌ヨdescriptive瀛楁绛変簬2鐨勯噰闆嗛」淇濆瓨鍒版壂鐮佷繚瀛樺埌da_param_collection琛ㄩ噷
-                        DaCollectionParamConf daCollectionParamConf2 = new DaCollectionParamConf();
-                        daCollectionParamConf2.setProcessesCode(device);
-                        daCollectionParamConf2.setDescriptive("2");
-                        List<DaCollectionParamConf> daCollectionParamConfList2 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf2);
-                        for (DaCollectionParamConf conf : daCollectionParamConfList2) {
-                            String gatherAddress = conf.getGatherAddress();
-                            Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // 鑾峰彇鍘熷鍊煎璞♀��:ml-citation{ref="4" data="citationList"}
-                            if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) {
-                                log.warn("閲囬泦鍦板潃{}杩斿洖绌哄�硷紝璺宠繃瀛樺偍", gatherAddress);
-                                continue; // 缁堟褰撳墠寰幆杩唬鈥�:ml-citation{ref="1,2" data="citationList"}
+                        } else if (Constants.OP310.equals(device)) {
+                            omOrderScheduling.setRemarks("Body");
+                            omOrderScheduling.setSfcCode(SFCCode.toString());
+                            List<OmOrderScheduling> omOrderSchedulingList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
+                            Object nowQty = omOrderSchedulingList.get(0).getNowQty();
+                            Object WorkOrderNumber = omOrderSchedulingList.get(0).getWorkOrderNo();
+                            omProductionOrderInfo.setWorkOrderNo(WorkOrderNumber.toString());
+                            List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo);
+                            Object bodyQty = omProductionOrderInfoList.get(0).getBodyQty();
+                            if (nowQty == bodyQty){
+                                omProductionOrderInfoList.get(0).setBodyStatus("3");
+
+
+                                omProductionOrderInfoService.updateOmProductionOrderInfo(omProductionOrderInfoList.get(0));
                             }
-                            DaParamCollection paramCollection = new DaParamCollection();
-                            paramCollection.setSfcCode(SFCCode.toString());
-                            paramCollection.setLocationCode(device);
-                            paramCollection.setParamName(conf.getParameterSetName());
-                            paramCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue());
-                            paramCollection.setCollectionTime(new Date());
-                            daParamCollectionService.insertDaParamCollection(paramCollection);
                         }
-                        DaStationCollection daStationCollection = new DaStationCollection();
-                        daStationCollection.setLocationCode(device);
-                        daStationCollection.setSfcCode(SFCCode.toString());
-                        daStationCollection.setInboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StartTime").getValue());
-                        daStationCollection.setOutboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime").getValue());
-                        daStationCollectionService.insertDaStationCollection(daStationCollection);
-                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("21").build());
+                    } else if (Constants.P010.equals(device)) {
+                        Object workOrderNumber = miloService.readFromOpcUa(thoroughfare + "." + device + ".WorkOrderNumber").getValue();
+                        Object nowQty = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue();
+                        omOrderScheduling.setWorkOrderNo(workOrderNumber.toString());
+                        omOrderScheduling.setNowQty((Long) nowQty);
+                        omOrderScheduling.setSfcCode(SFCCode.toString());
+                        omOrderScheduling.setRemarks("Pre");
+                        omOrderSchedulingService.insertOmOrderScheduling(omOrderScheduling);
+                        List<OmOrderScheduling> omOrderSchedulingList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
+                        Object WorkOrderNumber = omOrderSchedulingList.get(0).getWorkOrderNo();
+                        omProductionOrderInfo.setWorkOrderNo(WorkOrderNumber.toString());
+                        List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo);
+                        Object preQty = omProductionOrderInfoList.get(0).getPreQty();
+                        if (nowQty == preQty){
+                            omProductionOrderInfoList.get(0).setPreStatus("3");
+
+
+                            omProductionOrderInfoService.updateOmProductionOrderInfo(omProductionOrderInfoList.get(0));
+
+                        }
                     }
+                    //鏌ヨdescriptive瀛楁绛変簬1鐨勯噰闆嗛」淇濆瓨鍒版壂鐮佷繚瀛樺埌da_material_collection琛ㄩ噷
+                    DaCollectionParamConf daCollectionParamConf1 = new DaCollectionParamConf();
+                    daCollectionParamConf1.setProcessesCode(device);
+                    daCollectionParamConf1.setDescriptive("1");
+                    List<DaCollectionParamConf> daCollectionParamConfList1 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf1);
+                    for (DaCollectionParamConf conf : daCollectionParamConfList1) {
+                        String gatherAddress = conf.getGatherAddress();
+                        Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // 鑾峰彇鍘熷鍊煎璞♀��:ml-citation{ref="4" data="citationList"}
+                        if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) {
+                            log.warn("閲囬泦鍦板潃{}杩斿洖绌哄�硷紝璺宠繃瀛樺偍", gatherAddress);
+                            continue; // 缁堟褰撳墠寰幆杩唬鈥�:ml-citation{ref="1,2" data="citationList"}
+                        }
+                        DaMaterialCollection materialCollection = new DaMaterialCollection();
+                        materialCollection.setSfcCode(SFCCode.toString());
+                        materialCollection.setLocationCode(device);
+                        materialCollection.setParamName(conf.getParameterSetName());
+                        materialCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue());
+                        materialCollection.setCollectTime(new Date());
+                        daMaterialCollectionService.insertDaMaterialCollection(materialCollection);
+                    }
+                    //鏌ヨdescriptive瀛楁绛変簬2鐨勯噰闆嗛」淇濆瓨鍒版壂鐮佷繚瀛樺埌da_param_collection琛ㄩ噷
+                    DaCollectionParamConf daCollectionParamConf2 = new DaCollectionParamConf();
+                    daCollectionParamConf2.setProcessesCode(device);
+                    daCollectionParamConf2.setDescriptive("2");
+                    List<DaCollectionParamConf> daCollectionParamConfList2 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf2);
+                    for (DaCollectionParamConf conf : daCollectionParamConfList2) {
+                        String gatherAddress = conf.getGatherAddress();
+                        Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // 鑾峰彇鍘熷鍊煎璞♀��:ml-citation{ref="4" data="citationList"}
+                        if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) {
+                            log.warn("閲囬泦鍦板潃{}杩斿洖绌哄�硷紝璺宠繃瀛樺偍", gatherAddress);
+                            continue; // 缁堟褰撳墠寰幆杩唬鈥�:ml-citation{ref="1,2" data="citationList"}
+                        }
+                        DaParamCollection paramCollection = new DaParamCollection();
+                        paramCollection.setSfcCode(SFCCode.toString());
+                        paramCollection.setLocationCode(device);
+                        paramCollection.setParamName(conf.getParameterSetName());
+                        paramCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue());
+                        paramCollection.setCollectionTime(new Date());
+                        daParamCollectionService.insertDaParamCollection(paramCollection);
+                    }
+                    DaStationCollection daStationCollection = new DaStationCollection();
+                    daStationCollection.setLocationCode(device);
+                    daStationCollection.setSfcCode(SFCCode.toString());
+                    daStationCollection.setInboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StartTime").getValue());
+                    daStationCollection.setOutboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime").getValue());
+                    daStationCollectionService.insertDaStationCollection(daStationCollection);
+                    miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("21").build());
                 }
             }
         }
@@ -236,96 +248,161 @@
     public void plackWorkOrder(String thoroughfare, String device, String tab, String valueString) {
     try {
         if (Constants.WorkOrderRequest.equals(tab)) {
-            if(Constants.OP010.equals(device)){
-                if (Constants.ZERO.equals(valueString)) {
-                    miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("0").build());
-                } else if (Constants.ONE.equals(valueString)) {
+            if (Constants.ZERO.equals(valueString)) {
+                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("0").build());
+            }else if (Constants.ONE.equals(valueString)){
+                if (Constants.OP005.equals(device)){
                     // 鏌ヨ鏁版嵁搴撹幏鍙栫鍚堟潯浠剁殑璁㈠崟淇℃伅
-                    OmProductionOrderInfo getEarliestOrder = omProductionOrderInfoService.getEarliestOrder();
-                    if (getEarliestOrder != null) {
-                        //鍒ゆ柇褰撳墠涓嬪彂鏁伴噺
-                        if(getEarliestOrder.getRemarks() >= getEarliestOrder.getPlanQty()){
+                    OmProductionOrderInfo getBodyOrder = omProductionOrderInfoService.getBodyOrder();
+                    if (getBodyOrder != null) {
+                        //鍒ゆ柇褰撳墠涓嬪彂鏁伴噺鏄惁婊¤冻璁″垝鏁伴噺
                             //鏇存柊宸ュ崟鐘舵��
-                            omProductionOrderInfoService.updateOrderStatus5();
-                            //鏌ヨ鏂版弧瓒崇殑宸ュ崟
-                            OmProductionOrderInfo getEarliestOrder2 = omProductionOrderInfoService.getEarliestOrder();
-                            if (getEarliestOrder2 != null) {
-                                // 灏嗘暟鎹啓鍏ュ埌鍦板潃鍧椾腑
-                                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getEarliestOrder2.getWorkOrderNo()).build());
-                                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getEarliestOrder2.getPlanQty())).build());
-                                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getEarliestOrder2.getEngineType()).build());
-                                //鐢熸垚sn鐮�
-                                OmProductionOrderInfo serialNumber = omProductionOrderInfoService.getSerialNumber();
-                                String A3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
-                                if(A3.equals(String.valueOf(serialNumber.getRemarks()))){
-                                    String A1 = getEarliestOrder2.getEngineType();//鑾峰彇浜у搧鍨嬪彿
-                                    String A2 = "3";
-                                    String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 鑾峰彇褰撳墠鏈堜唤锛�1-12锛�
-                                    String A5 = String.format("%05d", serialNumber.getPlanQty());
-                                    String SFCCode = A1 + A2 + A3+ A4 + A5;
-                                    miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
-                                    omProductionOrderInfoService.updateSerialNumber();
-                                }else{
-                                    OmProductionOrderInfo newNumber = omProductionOrderInfoService.updateYear();
-                                    String A1 = getEarliestOrder2.getEngineType();//鑾峰彇浜у搧鍨嬪彿
-                                    String A2 = "3";
-                                    String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 鑾峰彇褰撳墠鏈堜唤锛�1-12锛�
-                                    String A5 = String.format("%05d", newNumber.getPlanQty());
-                                    String SFCCode = A1 + A2 + A3+ A4 + A5;
-                                    miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
-                                    omProductionOrderInfoService.updateSerialNumber();
-                                }
-                                // 鏇存柊 WorkOrderRequestDone 鍦板潃鍧�
-                                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
-                                BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
-                                bsbomChildInfo.setLocationCode(device);
-                                bsbomChildInfo.setBomCode(getEarliestOrder2.getWorkOrderNo());
-                                //鍙戜笅宸ヨ壓閰嶆柟
-                                formula(thoroughfare, device, bsbomChildInfo);
-                                omProductionOrderInfoService.updateOrderStatus2();
-
-                            }
-                        } else if (getEarliestOrder.getRemarks() < getEarliestOrder.getPlanQty()) {
-                            //鏇存柊宸ュ崟鐘舵��
-                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getEarliestOrder.getWorkOrderNo()).build());
-                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getEarliestOrder.getPlanQty())).build());
-                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getEarliestOrder.getEngineType()).build());
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getBodyOrder.getWorkOrderNo()).build());
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getBodyOrder.getPlanQty())).build());
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getBodyOrder.getEngineType()).build());
                             //鐢熸垚sn鐮�
-                            OmProductionOrderInfo serialNumber = omProductionOrderInfoService.getSerialNumber();
+                            SysCount serialNumber = sysCountService.getSerialNumber();
                             String A3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
-                            if(A3.equals(String.valueOf(serialNumber.getRemarks()))){
-                                String A1 = getEarliestOrder.getEngineType();//鑾峰彇浜у搧鍨嬪彿
-                                String A2 = "3";
+                            //鍒ゆ柇鏄惁璺ㄥ勾
+                            if(A3.equals(String.valueOf(serialNumber.getYear()))){
+                                String A1 = getBodyOrder.getEngineType();//鑾峰彇浜у搧鍨嬪彿
+                                String A2 = "3";//鍥哄畾浜х嚎
                                 String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 鑾峰彇褰撳墠鏈堜唤锛�1-12锛�
-                                String A5 = String.format("%05d", serialNumber.getPlanQty());
+                                String A5 = String.format("%05d", serialNumber.getSerialNumber());
                                 String SFCCode = A1 + A2 + A3+ A4 + A5;
                                 miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
-                                omProductionOrderInfoService.updateSerialNumber();
+                                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
+                                sysCountService.updateSerialNumber();
                             }else{
-                                OmProductionOrderInfo newNumber = omProductionOrderInfoService.updateYear();
-                                String A1 = getEarliestOrder.getEngineType();//鑾峰彇浜у搧鍨嬪彿
+                                sysCountService.clean();
+                                sysCountService.updateYear();
+                                String A1 = getBodyOrder.getEngineType();//鑾峰彇浜у搧鍨嬪彿
                                 String A2 = "3";
+                                String newA3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
                                 String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 鑾峰彇褰撳墠鏈堜唤锛�1-12锛�
-                                String A5 = String.format("%05d", newNumber.getPlanQty());
-                                String SFCCode = A1 + A2 + A3+ A4 + A5;
+                                String A5 = String.format("%05d", sysCountService.getSerialNumber().getSerialNumber());
+                                String SFCCode = A1 + A2 + newA3+ A4 + A5;
                                 miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
-                                omProductionOrderInfoService.updateSerialNumber();
+                                miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
+                                sysCountService.updateSerialNumber();
                             }
                             // 鏇存柊 WorkOrderRequestDone 鍦板潃鍧�
-                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
                             BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
                             bsbomChildInfo.setLocationCode(device);
-                            bsbomChildInfo.setBomCode(getEarliestOrder.getWorkOrderNo());
+                            bsbomChildInfo.setBomCode(getBodyOrder.getWorkOrderNo());
                             //鍙戜笅宸ヨ壓閰嶆柟
                             formula(thoroughfare, device, bsbomChildInfo);
-                            omProductionOrderInfoService.updateOrderStatus2();
+                            omProductionOrderInfoService.updateBodyStatus1();
+                            //鍒ゆ柇缂镐綋宸ュ崟瀹屾垚
+                            OmProductionOrderInfo getBodyOrder2 = omProductionOrderInfoService.getBodyOrder();
+                            if (Objects.equals(getBodyOrder2.getBodyQty(), getBodyOrder2.getPlanQty())){
+                                omProductionOrderInfoService.updateBodyStatus2();
+                            }
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getBodyOrder2.getBodyQty()).build());
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
+                    }
+                } else if (Constants.C005.equals(device)) {
+                    // 鏌ヨ鏁版嵁搴撹幏鍙栫鍚堟潯浠剁殑璁㈠崟淇℃伅
+                    OmProductionOrderInfo getHeadOrder = omProductionOrderInfoService.getHeadOrder();
+                    if (getHeadOrder != null) {
+                        //鍒ゆ柇褰撳墠涓嬪彂鏁伴噺鏄惁婊¤冻璁″垝鏁伴噺
+                        //鏇存柊宸ュ崟鐘舵��
+                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getHeadOrder.getWorkOrderNo()).build());
+                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getHeadOrder.getPlanQty())).build());
+                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getHeadOrder.getEngineType()).build());
+                        //鐢熸垚sn鐮�
+                        SysCount headNumber = sysCountService.getHeadNumber();
+                        String A3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
+                        //鍒ゆ柇鏄惁璺ㄥ勾
+                        if(A3.equals(String.valueOf(headNumber.getYear()))){
+                            String A1 = getHeadOrder.getEngineType();//鑾峰彇浜у搧鍨嬪彿
+                            String A2 = "3";//鍥哄畾浜х嚎
+                            String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 鑾峰彇褰撳墠鏈堜唤锛�1-12锛�
+                            String A5 = String.format("%05d", headNumber.getHeadNumber());
+                            String SFCCode = A1 + A2 + A3+ A4 + A5;
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
+                            sysCountService.updateHeadNumber();
+                        }else{
+                            sysCountService.clean();
+                            sysCountService.updateYear();
+                            String A1 = getHeadOrder.getEngineType();//鑾峰彇浜у搧鍨嬪彿
+                            String A2 = "3";
+                            String newA3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
+                            String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 鑾峰彇褰撳墠鏈堜唤锛�1-12锛�
+                            String A5 = String.format("%05d", sysCountService.getHeadNumber().getHeadNumber());
+                            String SFCCode = A1 + A2 + newA3+ A4 + A5;
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
+                            sysCountService.updateHeadNumber();
                         }
+                        // 鏇存柊 WorkOrderRequestDone 鍦板潃鍧�
+                        BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
+                        bsbomChildInfo.setLocationCode(device);
+                        bsbomChildInfo.setBomCode(getHeadOrder.getWorkOrderNo());
+                        //鍙戜笅宸ヨ壓閰嶆柟
+                        formula(thoroughfare, device, bsbomChildInfo);
+                        omProductionOrderInfoService.updateHeadStatus1();
+                        //鍒ゆ柇缂镐綋宸ュ崟瀹屾垚
+                        OmProductionOrderInfo getHeadOrder2 = omProductionOrderInfoService.getHeadOrder();
+                        if (Objects.equals(getHeadOrder2.getHeadQty(), getHeadOrder2.getPlanQty())){
+                            omProductionOrderInfoService.updateHeadStatus2();
+                        }
+                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getHeadOrder2.getHeadQty()).build());
+                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
+                    }
+                } else if (Constants.P010.equals(device)) {
+                    // 鏌ヨ鏁版嵁搴撹幏鍙栫鍚堟潯浠剁殑璁㈠崟淇℃伅
+                    OmProductionOrderInfo getPreOrder = omProductionOrderInfoService.getPreOrder();
+                    if (getPreOrder != null) {
+                        //鍒ゆ柇褰撳墠涓嬪彂鏁伴噺鏄惁婊¤冻璁″垝鏁伴噺
+                        //鏇存柊宸ュ崟鐘舵��
+                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getPreOrder.getWorkOrderNo()).build());
+                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getPreOrder.getPlanQty())).build());
+                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getPreOrder.getEngineType()).build());
+                        //鐢熸垚sn鐮�
+                        SysCount preNumber = sysCountService.getPreNumber();
+                        String A3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
+                        if(A3.equals(String.valueOf(preNumber.getYear()))){
+                            String A1 = getPreOrder.getEngineType();//鑾峰彇浜у搧鍨嬪彿
+                            String A2 = "3";
+                            String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 鑾峰彇褰撳墠鏈堜唤锛�1-12锛�
+                            String A5 = String.format("%05d", preNumber.getPreNumber());
+                            String SFCCode = A1 + A2 + A3+ A4 + A5;
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
+                            sysCountService.updatePreNumber();
+                        }else{
+                            sysCountService.clean();
+                            sysCountService.updateYear();
+                            String A1 = getPreOrder.getEngineType();//鑾峰彇浜у搧鍨嬪彿
+                            String A2 = "3";
+                            String newA3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
+                            String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 鑾峰彇褰撳墠鏈堜唤锛�1-12锛�
+                            String A5 = String.format("%05d", sysCountService.getPreNumber().getPreNumber());
+                            String SFCCode = A1 + A2 + newA3+ A4 + A5;
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
+                            miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
+                            sysCountService.updateHeadNumber();
+                        }
+
+                        // 鏇存柊 WorkOrderRequestDone 鍦板潃鍧�
+                        BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
+                        bsbomChildInfo.setLocationCode(device);
+                        bsbomChildInfo.setBomCode(getPreOrder.getWorkOrderNo());
+                        //鍙戜笅宸ヨ壓閰嶆柟
+                        formula(thoroughfare, device, bsbomChildInfo);
+                        omProductionOrderInfoService.updatePreStatus1();
+                        //鍒ゆ柇缂镐綋宸ュ崟瀹屾垚
+                        OmProductionOrderInfo getPreOrder2 = omProductionOrderInfoService.getPreOrder();
+                        if (Objects.equals(getPreOrder2.getPreQty(), getPreOrder2.getPlanQty())){
+                            omProductionOrderInfoService.updatePreStatus2();
+                        }
+                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getPreOrder2.getPreQty()).build());
+                        miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
                     }
                 }
-            } else if (Constants.C005.equals(device)) {
-
             }
-
         }
     } catch (Exception e) {
         log.error(e.getMessage());
diff --git a/billion-main/src/main/java/com/billion/main/sys/domain/SysCount.java b/billion-main/src/main/java/com/billion/main/sys/domain/SysCount.java
new file mode 100644
index 0000000..66e7a9d
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/sys/domain/SysCount.java
@@ -0,0 +1,37 @@
+package com.billion.main.sys.domain;
+
+import com.billion.common.annotation.Excel;
+import com.billion.common.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ *  sys_count
+ * 
+ * @author Billion
+ * @date 2024-11-20
+ */
+@Data
+public class SysCount extends BaseEntity
+{
+
+    /** ID */
+    private Long id;
+
+    /** 宸ュ崟缂栧彿 */
+    @Excel(name = "骞翠唤")
+    private String year;
+
+    /** 鎬绘垚搴忓垪鍙� */
+    @Excel(name = "娴佹按鍙�")
+    private Long serialNumber;
+
+    /** 鎬绘垚搴忓垪鍙� */
+    @Excel(name = "娴佹按鍙�")
+    private Long headNumber;
+    /** 鎬绘垚搴忓垪鍙� */
+    @Excel(name = "娴佹按鍙�")
+    private Long preNumber;
+
+
+
+}
diff --git a/billion-main/src/main/java/com/billion/main/sys/mapper/SysCountMapper.java b/billion-main/src/main/java/com/billion/main/sys/mapper/SysCountMapper.java
new file mode 100644
index 0000000..e02761f
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/sys/mapper/SysCountMapper.java
@@ -0,0 +1,26 @@
+package com.billion.main.sys.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.billion.main.sys.domain.SysCount;
+
+/**
+ * Mapper鎺ュ彛
+ * 
+ * @author Billion
+ * @date 2024-11-20
+ */
+public interface SysCountMapper extends BaseMapper<SysCount>
+{
+    public SysCount updateYear();
+    public SysCount getSerialNumber();
+    public SysCount getHeadNumber();
+    public SysCount updateSerialNumber();
+    public SysCount updateHeadNumber();
+    public SysCount getPreNumber();
+    public SysCount updatePreNumber();
+    public SysCount clean();
+
+
+
+}
diff --git a/billion-main/src/main/java/com/billion/main/sys/service/ISysCountService.java b/billion-main/src/main/java/com/billion/main/sys/service/ISysCountService.java
new file mode 100644
index 0000000..d2c8667
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/sys/service/ISysCountService.java
@@ -0,0 +1,24 @@
+package com.billion.main.sys.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.billion.main.sys.domain.SysCount;
+
+/**
+ * 鐢熶骇宸ュ崟Service鎺ュ彛
+ * 
+ * @author Billion
+ * @date 2024-11-20
+ */
+public interface ISysCountService extends IService<SysCount>
+{
+
+    public SysCount updateYear();
+    public SysCount getSerialNumber();
+    public SysCount getHeadNumber();
+    public SysCount updateSerialNumber();
+    public SysCount updateHeadNumber();
+    public SysCount getPreNumber();
+    public SysCount updatePreNumber();
+    public SysCount clean();
+}
diff --git a/billion-main/src/main/java/com/billion/main/sys/service/impl/SysCountServiceImpl.java b/billion-main/src/main/java/com/billion/main/sys/service/impl/SysCountServiceImpl.java
new file mode 100644
index 0000000..568bf81
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/sys/service/impl/SysCountServiceImpl.java
@@ -0,0 +1,54 @@
+package com.billion.main.sys.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.billion.main.sys.domain.SysCount;
+import com.billion.main.sys.mapper.SysCountMapper;
+import com.billion.main.sys.service.ISysCountService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 鐢熶骇宸ュ崟Service涓氬姟灞傚鐞�
+ * 
+ * @author Billion
+ * @date 2024-11-20
+ */
+@Service
+public class SysCountServiceImpl extends ServiceImpl<SysCountMapper, SysCount> implements ISysCountService
+{
+    @Resource
+    private SysCountMapper SysCountMapper;
+
+
+
+    @Override
+    public SysCount updateYear() {return SysCountMapper.updateYear();}
+    @Override
+    public SysCount getSerialNumber()
+    {
+        return SysCountMapper.getSerialNumber();
+    }
+    @Override
+    public SysCount getHeadNumber()
+    {
+        return SysCountMapper.getHeadNumber();
+    }
+    @Override
+    public SysCount updateSerialNumber() {return SysCountMapper.updateSerialNumber();}
+    @Override
+    public SysCount updateHeadNumber() {return SysCountMapper.updateHeadNumber();}
+    @Override
+    public SysCount getPreNumber()
+    {
+        return SysCountMapper.getHeadNumber();
+    }
+    @Override
+    public SysCount updatePreNumber() {return SysCountMapper.updateSerialNumber();}
+    @Override
+    public SysCount clean() {return SysCountMapper.clean();}
+
+
+
+
+}
diff --git a/billion-main/src/main/resources/mapper/om/OmOrderSchedulingMapper.xml b/billion-main/src/main/resources/mapper/om/OmOrderSchedulingMapper.xml
index 3b9a192..626ded0 100644
--- a/billion-main/src/main/resources/mapper/om/OmOrderSchedulingMapper.xml
+++ b/billion-main/src/main/resources/mapper/om/OmOrderSchedulingMapper.xml
@@ -18,10 +18,11 @@
         <result property="updateBy"    column="update_by"    />
         <result property="updateTime"    column="update_time"    />
         <result property="remarks"    column="remarks"    />
+        <result property="nowQty"    column="now_qty"    />
     </resultMap>
 
     <sql id="selectOmOrderSchedulingVo">
-        select id, work_order_no, sfc_code, product_code, online_time, offline_time, quality_status, status, create_by, create_time, update_by, update_time, remarks from om_order_scheduling
+        select id, now_qty,work_order_no, sfc_code, product_code, online_time, offline_time, quality_status, status, create_by, create_time, update_by, update_time, remarks from om_order_scheduling
     </sql>
 
     <select id="selectOmOrderSchedulingList" parameterType="OmOrderScheduling" resultMap="OmOrderSchedulingResult">
@@ -33,6 +34,7 @@
             <if test="params.beginOnlineTime != null and params.beginOnlineTime != '' and params.endOnlineTime != null and params.endOnlineTime != ''"> and online_time between #{params.beginOnlineTime} and #{params.endOnlineTime}</if>
             <if test="params.beginOfflineTime != null and params.beginOfflineTime != '' and params.endOfflineTime != null and params.endOfflineTime != ''"> and offline_time between #{params.beginOfflineTime} and #{params.endOfflineTime}</if>
             <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="nowQty != null  and nowQty != ''"> and now_qty = #{nowQty}</if>
         </where>
     </select>
     
diff --git a/billion-main/src/main/resources/mapper/om/OmProductionOrderInfoMapper.xml b/billion-main/src/main/resources/mapper/om/OmProductionOrderInfoMapper.xml
index 25c5522..6dd5de1 100644
--- a/billion-main/src/main/resources/mapper/om/OmProductionOrderInfoMapper.xml
+++ b/billion-main/src/main/resources/mapper/om/OmProductionOrderInfoMapper.xml
@@ -23,62 +23,93 @@
     </resultMap>
 
     <sql id="selectOmProductionOrderInfoVo">
-        select id, work_order_no, sales_order_code, product_code, line_code, plan_qty, plan_start_time, plan_end_time, order_status, create_time, update_time, create_by, update_by, remarks, del_flag from om_production_order_info
+        select id,body_status,head_status,pre_status,body_qty,head_qty,pre_qty,work_order_no, sales_order_code, product_code, line_code, plan_qty, plan_start_time, plan_end_time, order_status, create_time, update_time, create_by, update_by, remarks, del_flag from om_production_order_info
     </sql>
 
     <!-- 鏌ヨ order_status 涓� 1 涓� plan_start_time 鏈�鏃╃殑涓�鏉¤褰� -->
-    <select id="selectEarliestOrder" resultType="OmProductionOrderInfo">
+    <select id="getBodyOrder" resultType="OmProductionOrderInfo">
             SELECT TOP 1 *
             FROM om_production_order_info
-            WHERE order_status IN (1, 2)
+            WHERE body_status IN (0,1)
             ORDER BY plan_start_time ASC
     </select>
-
-    <select id="selectEarliestOrder2" resultType="OmProductionOrderInfo">
+    <select id="updateBodyStatus1" resultType="OmProductionOrderInfo">
+        UPDATE o
+        SET body_status = 1, body_qty = body_qty + 1
+            FROM om_production_order_info AS o
+            INNER JOIN (
+            SELECT TOP 1 id
+            FROM om_production_order_info
+        WHERE body_status IN (0, 1)
+        ORDER BY plan_start_time ASC
+        ) AS sub ON o.id = sub.id;
+    </select>
+    <select id="updateBodyStatus2" resultType="OmProductionOrderInfo">
+        UPDATE om_production_order_info
+        SET body_status = 2
+        WHERE id = (
+            SELECT TOP 1 id
+            FROM om_production_order_info
+            WHERE body_status IN (0, 1)
+            ORDER BY plan_start_time ASC
+        );
+    </select>
+    <select id="getHeadOrder" resultType="OmProductionOrderInfo">
         SELECT TOP 1 *
         FROM om_production_order_info
-        WHERE order_status IN (5)
+        WHERE head_status IN (0,1)
         ORDER BY plan_start_time ASC
     </select>
-
-    <select id="updateOrderStatus" resultType="OmProductionOrderInfo">
+    <select id="updateHeadStatus1" resultType="OmProductionOrderInfo">
+        UPDATE o
+        SET head_status = 1, head_qty = head_qty + 1
+            FROM om_production_order_info AS o
+            INNER JOIN (
+            SELECT TOP 1 id
+            FROM om_production_order_info
+        WHERE head_status IN (0, 1)
+        ORDER BY plan_start_time ASC
+        ) AS sub ON o.id = sub.id;
+    </select>
+    <select id="updateHeadStatus2" resultType="OmProductionOrderInfo">
         UPDATE om_production_order_info
-        SET order_status = 5
+        SET head_status = 2
         WHERE id = (
             SELECT TOP 1 id
             FROM om_production_order_info
-            WHERE order_status IN (1, 2)
+            WHERE head_status IN (0, 1)
             ORDER BY plan_start_time ASC
         );
     </select>
-    <select id="updateOrderStatus2" resultType="OmProductionOrderInfo">
-        UPDATE om_production_order_info
-        SET order_status = 2
-        WHERE id = (
-            SELECT TOP 1 id
-            FROM om_production_order_info
-            WHERE order_status IN (1, 2)
-            ORDER BY plan_start_time ASC
-        );
-    </select>
-
-    <select id="getSerialNumber" resultType="OmProductionOrderInfo">
-        SELECT  *
+    <select id="getPreOrder" resultType="OmProductionOrderInfo">
+        SELECT TOP 1 *
         FROM om_production_order_info
-        WHERE id = 1
+        WHERE pre_status IN (0,1)
+        ORDER BY plan_start_time ASC
+    </select>
+    <select id="updatePreStatus1" resultType="OmProductionOrderInfo">
+        UPDATE o
+        SET pre_status = 1, pre_qty = pre_qty + 1
+            FROM om_production_order_info AS o
+            INNER JOIN (
+            SELECT TOP 1 id
+            FROM om_production_order_info
+        WHERE pre_status IN (0, 1)
+        ORDER BY plan_start_time ASC
+        ) AS sub ON o.id = sub.id;
+    </select>
+    <select id="updatePreStatus2" resultType="OmProductionOrderInfo">
+        UPDATE om_production_order_info
+        SET pre_status = 2
+        WHERE id = (
+            SELECT TOP 1 id
+            FROM om_production_order_info
+            WHERE pre_status IN (0, 1)
+            ORDER BY plan_start_time ASC
+        );
     </select>
 
-    <select id="updateSerialNumber" resultType="OmProductionOrderInfo">
-        UPDATE om_production_order_info
-        SET plan_qty = plan_qty + 1
-        WHERE id = 1;
-    </select>
-    <select id="updateYear" resultType="OmProductionOrderInfo">
-        UPDATE om_production_order_info
-        SET remarks = remarks + 1,
-            qty = 1
-        WHERE id = 1;
-    </select>
+
 
 
     <select id="selectOmProductionOrderInfoList" parameterType="OmProductionOrderInfo" resultMap="OmProductionOrderInfoResult">
diff --git a/billion-main/src/main/resources/mapper/sys/SysCountMapper.xml b/billion-main/src/main/resources/mapper/sys/SysCountMapper.xml
new file mode 100644
index 0000000..a7c825a
--- /dev/null
+++ b/billion-main/src/main/resources/mapper/sys/SysCountMapper.xml
@@ -0,0 +1,64 @@
+<?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="com.billion.main.sys.mapper.SysCountMapper">
+    
+    <resultMap type="SysCount" id="SysCountResult">
+        <result property="id"    column="id"    />
+        <result property="year"    column="year"    />
+        <result property="serialNumber"    column="serial_number"    />
+        <result property="headNumber"    column="head_number"    />
+    </resultMap>
+
+    <select id="updateYear" resultType="SysCount">
+        UPDATE sys_count
+        SET year = year + 1,
+            serial_number = 1
+        WHERE id = 1;
+    </select>
+
+    <select id="getSerialNumber" resultType="SysCount">
+        SELECT  *
+        FROM sys_count
+        WHERE id = 1
+    </select>
+
+    <select id="getHeadNumber" resultType="SysCount">
+        SELECT  *
+        FROM sys_count
+        WHERE id = 1
+    </select>
+
+    <select id="updateSerialNumber" resultType="SysCount">
+        UPDATE sys_count
+        SET serial_number = serial_number + 1
+        WHERE id = 1;
+    </select>
+
+    <select id="updateHeadNumber" resultType="SysCount">
+        UPDATE sys_count
+        SET head_number = head_number + 1
+        WHERE id = 1;
+    </select>
+    <select id="getPreNumber" resultType="SysCount">
+        SELECT  *
+        FROM sys_count
+        WHERE id = 1
+    </select>
+
+    <select id="updatePreNumber" resultType="SysCount">
+        UPDATE sys_count
+        SET pre_number = pre_number + 1
+        WHERE id = 1;
+    </select>
+
+    <select id="clean" resultType="SysCount">
+        UPDATE sys_count
+        SET pre_number = 1,
+            head_number = 1,
+            serial_number = 1
+        WHERE id = 1;
+    </select>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3