From d4f4376ab5aef071cb841de0f9a9b7f6cb16c651 Mon Sep 17 00:00:00 2001
From: yyt <306727702@qq.com>
Date: 星期一, 20 五月 2024 09:39:48 +0800
Subject: [PATCH] 增加380新产品

---
 jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java                                      |    3 
 jcdm-quartz/src/main/java/com/jcdm/quartz/task/RyTask.java                                                |    6 
 jcdm-main/src/main/resources/mapper/bs/orderScheduling/BsOrderSchedulingMapper.xml                        |   52 ++
 jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/controller/BsOrderSchedulingController.java      |  139 +++++++
 jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/service/IBsOrderSchedulingService.java           |    1 
 jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/common/Constants.java                            |    5 
 jcdm-ui/src/views/main/om/productionOrde/index.vue                                                        |   41 +
 jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/service/impl/OmProductionOrdeInfoServiceImpl.java |   12 
 jcdm-ui/src/api/main/bs/orderScheduling/orderScheduling.js                                                |   26 +
 jcdm-ui/src/views/main/kb/BalanceShaft/index.vue                                                          |  281 ++++++++++++++
 jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/mapper/OmProductionOrdeInfoMapper.java            |    9 
 jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/service/IOmProductionOrdeInfoService.java         |    8 
 jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/service/impl/BsOrderSchedulingServiceImpl.java   |   12 
 jcdm-ui/src/views/main/om/productionOrde/detail.vue                                                       |  184 +++++++++
 jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/controller/DaOpcuaConfigController.java              |    9 
 jcdm-ui/src/views/login.vue                                                                               |    4 
 jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/mapper/BsOrderSchedulingMapper.java              |    2 
 jcdm-ui/src/views/main/kb/crankshaft/index.vue                                                            |  243 ++++++++++++
 jcdm-main/src/main/resources/mapper/da/paramCollection/DaParamCollectionMapper.xml                        |    1 
 jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/vo/SumDataVO.java                                |   10 
 jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/controller/OmProductionOrdeInfoController.java    |   16 
 jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java                                |   11 
 jcdm-main/src/main/resources/mapper/om/productionOrde/OmProductionOrdeInfoMapper.xml                      |    9 
 23 files changed, 1,064 insertions(+), 20 deletions(-)

diff --git a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/common/Constants.java b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/common/Constants.java
index 9936b00..45a01ce 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/common/Constants.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/common/Constants.java
@@ -10,4 +10,9 @@
 
     public static final String IS_REPAIR = "鏄�";
     public static final String IS_NOT_REPAIR = "鍚�";
+    public static final String UN_QUALIFIED = "0";
+
+    public static final String ORDER_STATUS_ING = "2";
+    public static final String WAIT_PRODUCTION = "1";
+    public static final String FINISH_PRODUCTION = "3";
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/controller/BsOrderSchedulingController.java b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/controller/BsOrderSchedulingController.java
index e263ecb..e20f269 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/controller/BsOrderSchedulingController.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/controller/BsOrderSchedulingController.java
@@ -12,26 +12,36 @@
 import com.jcdm.common.core.domain.entity.SysDictData;
 import com.jcdm.common.core.page.TableDataInfo;
 import com.jcdm.common.enums.BusinessType;
+import com.jcdm.common.utils.SecurityUtils;
 import com.jcdm.common.utils.StringUtils;
 import com.jcdm.common.utils.poi.ExcelUtil;
+import com.jcdm.main.bs.orderScheduling.common.Constants;
 import com.jcdm.main.bs.orderScheduling.domain.BsOrderScheduling;
 import com.jcdm.main.bs.orderScheduling.service.IBsOrderSchedulingService;
 import com.jcdm.main.bs.orderScheduling.vo.FollowReportVO;
 import com.jcdm.main.bs.orderScheduling.vo.LineChartVO;
+import com.jcdm.main.bs.orderScheduling.vo.SumDataVO;
 import com.jcdm.main.da.paramCollection.domain.DaParamCollection;
+import com.jcdm.main.da.paramCollection.mapper.DaParamCollectionMapper;
+import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
 import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection;
+import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo;
+import com.jcdm.main.om.productionOrde.service.impl.OmProductionOrdeInfoServiceImpl;
 import com.jcdm.main.plcserver.conf.OPCElement;
+import com.jcdm.main.plcserver.sub.OPCUaSubscription;
 import com.jcdm.system.service.ISysDictDataService;
 import com.kangaroohy.milo.model.ReadWriteEntity;
 import com.kangaroohy.milo.service.MiloService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -53,6 +63,10 @@
     @Resource
     private ISysDictDataService iSysDictDataService;
 
+    @Resource
+    private OmProductionOrdeInfoServiceImpl productionOrdeInfoService;
+    @Resource
+    private DaParamCollectionMapper daParamCollectionService;
 
     @Autowired
     MiloService miloService;
@@ -182,6 +196,21 @@
         return getDataTable(list);
     }
 
+    @GetMapping("/list3")
+    public TableDataInfo list3(BsOrderScheduling bsOrderScheduling)
+    {
+        startPage();
+        List<BsOrderScheduling> list = new ArrayList<>();
+        if (StringUtils.isNotEmpty(bsOrderScheduling.getOrderNo())){
+            list = bsOrderSchedulingService.selectBsOrderSchedulingPage(bsOrderScheduling);
+        }
+        List<BsOrderScheduling> collect = list.stream().filter(x -> Constants.UN_QUALIFIED.equals(x.getQualityStatus())).collect(Collectors.toList());
+        if (CollUtil.isNotEmpty(collect)){
+            String.valueOf(collect.size());
+        }
+        return getDataTable(list);
+    }
+
     /**
      * 瀵煎嚭璁㈠崟鎺掍骇鍒楄〃
      */
@@ -237,4 +266,114 @@
     {
         return toAjax(bsOrderSchedulingService.deleteBsOrderSchedulingByIds(ids));
     }
+    @GetMapping("/getSumData")
+    public R getSumData(BsOrderScheduling bsOrderScheduling){
+        List<BsOrderScheduling> list = new ArrayList<>();
+        int onlineNum = 0;
+        int finishNum = 0;
+        if (StringUtils.isNotEmpty(bsOrderScheduling.getOrderNo())){
+
+            list = bsOrderSchedulingService.selectBsOrderSchedulingPage(bsOrderScheduling);
+            List<BsOrderScheduling> onlineNumList = list.stream().filter(x -> Constants.ORDER_STATUS_ING.equals(x.getProductionStatus())).collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(onlineNumList)){
+                onlineNum = onlineNumList.size();
+            }
+            List<BsOrderScheduling> finishNumList = list.stream().filter(x -> Constants.FINISH_PRODUCTION.equals(x.getProductionStatus())).collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(finishNumList)){
+                finishNum = finishNumList.size();
+            }
+        }
+        List<BsOrderScheduling> collect = list.stream().filter(x -> Constants.UN_QUALIFIED.equals(x.getQualityStatus())).collect(Collectors.toList());
+        String unqualified = "0";
+        if (CollUtil.isNotEmpty(collect)){
+            unqualified = String.valueOf(collect.size());
+        }
+        SumDataVO vo = new SumDataVO();
+        vo.setFinishNum(finishNum);
+        vo.setOnlineNum(onlineNum);
+        vo.setUnqualified(unqualified);
+        return R.ok(vo);
+    }
+
+    /**
+     * 鏍¢獙鍙戝姩鏈哄彿鏄惁鍜屾満鍨嬪尮閰嶃�佹槸鍚﹂噸澶嶆壂鎻忋�佹槸鍚﹁秴鍑鸿鍒掓暟閲�
+     * @param engineNo 绠变綋鐮�
+     * @param model 鏈哄瀷
+     * @return boolean
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @GetMapping("/engineNoIsInModel")
+    public R engineNoIsInModel(String engineNo,String model,String orderNo) throws Exception {
+
+        if (StringUtils.isEmpty(engineNo)){
+            return R.ok(500,"绠变綋鐮佷负绌烘垨宸插瓨鍦紝璇烽噸璇�");
+        }
+
+        BsOrderScheduling bsOrderScheduling = new BsOrderScheduling();
+        bsOrderScheduling.setOrderNo(orderNo);
+        //bsOrderScheduling.setProductionStatus("1");
+        List<BsOrderScheduling> allList = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling);
+        List<BsOrderScheduling> dlist = allList.stream().filter(x->x.getProductionStatus().equals(Constants.WAIT_PRODUCTION)).collect(Collectors.toList());
+        List<BsOrderScheduling> collect = allList.stream().filter(x -> x.getProductionStatus().equals(Constants.ORDER_STATUS_ING)
+                        ||x.getProductionStatus().equals(Constants.FINISH_PRODUCTION)).collect(Collectors.toList());
+
+        BsOrderScheduling OrderScheduling=dlist.get(0);
+
+        DaParamCollection daParamCollection = new DaParamCollection();
+        daParamCollection.setParamValue(engineNo);
+        daParamCollection.setSfcCode("OP010");
+        List<DaParamCollection> list = daParamCollectionService.selectDaParamCollectionList(daParamCollection);
+        if (CollUtil.isNotEmpty(list)){
+            return R.ok(500,"宸插瓨鍦ㄦ绠变綋鐮侊紝璇峰嬁閲嶅鎵弿");
+        }
+
+        OmProductionOrdeInfo info = new OmProductionOrdeInfo();
+        info.setWorkOrderNo(orderNo);
+        List<OmProductionOrdeInfo> omProductionOrdeInfos = productionOrdeInfoService.selectOmProductionOrdeInfoList(info);
+        if (CollUtil.isNotEmpty(omProductionOrdeInfos)){
+            OmProductionOrdeInfo omProductionOrdeInfo = omProductionOrdeInfos.get(0);
+            Long planQty = omProductionOrdeInfo.getPlanQty();
+            if (planQty<collect.size()){
+                return R.ok(500,"瓒呭嚭璁″垝鏁伴噺锛岃妫�鏌ュ悗閲嶈瘯");
+            }
+        }
+        //鎻掑叆鏁版嵁
+        DaParamCollection saveData = new DaParamCollection();
+        saveData.setSfcCode(OrderScheduling.getEngineNo());
+        saveData.setParamValue(engineNo);
+        saveData.setLocationCode("OP010");
+        saveData.setParamCode("XTM");
+        saveData.setParamName("绠变綋鐮�");
+        daParamCollectionService.insertDaParamCollection(saveData);
+
+        //鏇存柊涓婄嚎鏁伴噺
+        int onlineNum = 0;
+        List<BsOrderScheduling> onlineNumList = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling)
+                .stream().filter(x -> Constants.ORDER_STATUS_ING.equals(x.getProductionStatus())||x.getProductionStatus().equals(Constants.FINISH_PRODUCTION)).collect(Collectors.toList());
+        if (CollUtil.isNotEmpty(onlineNumList)){
+            onlineNum = onlineNumList.size();
+        }
+        OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo();
+        omProductionOrdeInfo.setWorkOrderNo(orderNo);
+        List<OmProductionOrdeInfo> omList = productionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo);
+        if (CollUtil.isNotEmpty(omList)){
+            OmProductionOrdeInfo omInfo = omList.get(0);
+            String s = String.valueOf(onlineNum);
+            long l = Long.parseLong(s);
+            omInfo.setActualOnlineQty(l);
+            productionOrdeInfoService.updateOmProductionOrdeInfo(omInfo);
+        }
+
+        //OPC鎿嶄綔
+        ReadWriteEntity entity = new ReadWriteEntity("CFL4HX.HOP010.Code", OrderScheduling.getEngineNo());
+        OPCUaSubscription.miloService.writeToOpcUa(entity);//鍐橲N
+        ReadWriteEntity entity2 = new ReadWriteEntity("CFL4HX.HOP010.SNDoor", 1);
+        OPCUaSubscription.miloService.writeToOpcByte(entity2);//鍐欏畬鎴�
+
+        OrderScheduling.setProductionStatus("2");
+        bsOrderSchedulingService.updateBsOrderScheduling(OrderScheduling);
+        return R.ok();
+    }
+
+
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/mapper/BsOrderSchedulingMapper.java b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/mapper/BsOrderSchedulingMapper.java
index 9b6723e..e5d5adc 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/mapper/BsOrderSchedulingMapper.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/mapper/BsOrderSchedulingMapper.java
@@ -37,6 +37,8 @@
      */
     public List<BsOrderScheduling> selectBsOrderSchedulingList(BsOrderScheduling bsOrderScheduling);
 
+    public List<BsOrderScheduling> selectBsOrderSchedulingPage(BsOrderScheduling bsOrderScheduling);
+
 
     public Integer getProduceNumToday(BsOrderScheduling bsOrderScheduling);
 
diff --git a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/service/IBsOrderSchedulingService.java b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/service/IBsOrderSchedulingService.java
index 9c1801b..38642c0 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/service/IBsOrderSchedulingService.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/service/IBsOrderSchedulingService.java
@@ -36,6 +36,7 @@
      * @return 璁㈠崟鎺掍骇闆嗗悎
      */
     public List<BsOrderScheduling> selectBsOrderSchedulingList(BsOrderScheduling bsOrderScheduling);
+    public List<BsOrderScheduling> selectBsOrderSchedulingPage(BsOrderScheduling bsOrderScheduling);
     public FollowReportVO getFollowReportList(BsOrderScheduling bsOrderScheduling);
     public List<LineChartVO> getOffLineNum();
 
diff --git a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/service/impl/BsOrderSchedulingServiceImpl.java b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/service/impl/BsOrderSchedulingServiceImpl.java
index acb02f6..58411d3 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/service/impl/BsOrderSchedulingServiceImpl.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/service/impl/BsOrderSchedulingServiceImpl.java
@@ -92,6 +92,18 @@
     }
 
     @Override
+    public List<BsOrderScheduling> selectBsOrderSchedulingPage(BsOrderScheduling bsOrderScheduling)
+    {
+        if(bsOrderScheduling.getDateConditions()!=null){
+            String[] conditions = bsOrderScheduling.getDateConditions();
+            bsOrderScheduling.setStartTime(conditions[0]);
+            bsOrderScheduling.setEndTime(conditions[1]);
+        }
+        return bsOrderSchedulingMapper.selectBsOrderSchedulingPage(bsOrderScheduling);
+    }
+
+
+    @Override
     public FollowReportVO getFollowReportList(BsOrderScheduling bsOrderScheduling)
     {
         FollowReportVO vo = new FollowReportVO();
diff --git a/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/vo/SumDataVO.java b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/vo/SumDataVO.java
new file mode 100644
index 0000000..e5fc024
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/vo/SumDataVO.java
@@ -0,0 +1,10 @@
+package com.jcdm.main.bs.orderScheduling.vo;
+
+import lombok.Data;
+
+@Data
+public class SumDataVO {
+    private Integer onlineNum;
+    private Integer finishNum;
+    private String unqualified;
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/controller/DaOpcuaConfigController.java b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/controller/DaOpcuaConfigController.java
index 0f38e76..a4d16b5 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/controller/DaOpcuaConfigController.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/opcuaconfig/controller/DaOpcuaConfigController.java
@@ -6,6 +6,8 @@
 import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
 import com.jcdm.main.da.opcuaconfig.domain.NodeEntity;
 import com.jcdm.main.da.opcuaconfig.service.IDaOpcuaConfigService;
+import com.jcdm.main.plcserver.sub.OPCUaSubscription;
+import com.kangaroohy.milo.model.ReadWriteEntity;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -110,14 +112,13 @@
     @PreAuthorize("@ss.hasPermi('da:opcuaconfig:query')")
     @GetMapping(value = "/SNCode/{SNCode}/{locationCode}")
     public AjaxResult setSNCode(@PathVariable("SNCode") String SNCode,@PathVariable("locationCode") String locationCode) {
-        //NodeEntity node= NodeEntity.builder().index(2).identifier("CFL4CVT"+"."+locationCode+".SNCode").value(SNCode).type("string").build();
-        Boolean out= null;
+        ReadWriteEntity entity = new ReadWriteEntity("CFL4HX."+locationCode+".SNCode", SNCode);
+        Boolean out= true;
         try {
-           // out = ClientHandler.write(node);
+            OPCUaSubscription.miloService.writeToOpcUa(entity);//鍐橲N
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
-
         return toAjax(out);
     }
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/controller/OmProductionOrdeInfoController.java b/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/controller/OmProductionOrdeInfoController.java
index 4e82039..cd3e7fe 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/controller/OmProductionOrdeInfoController.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/controller/OmProductionOrdeInfoController.java
@@ -81,11 +81,21 @@
     /**
      * 鑾峰彇鐢熶骇宸ュ崟璇︾粏淇℃伅
      */
+//    @PreAuthorize("@ss.hasPermi('om:productionOrde:query')")
+//    @GetMapping(value = "/{id}")
+//    public AjaxResult getInfo(@PathVariable("id") Long id)
+//    {
+//        return success(omProductionOrdeInfoService.selectOmProductionOrdeInfoById(id));
+//    }
+
+    /**
+     * 鑾峰彇鐢熶骇宸ュ崟璇︾粏淇℃伅
+     */
     @PreAuthorize("@ss.hasPermi('om:productionOrde:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
+    @GetMapping("/{ids}")
+    public AjaxResult getInfo(@PathVariable Long[] ids)
     {
-        return success(omProductionOrdeInfoService.selectOmProductionOrdeInfoById(id));
+        return success(omProductionOrdeInfoService.selectOmProductionOrdeInfoByIds(ids));
     }
 
     /**
diff --git a/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/mapper/OmProductionOrdeInfoMapper.java b/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/mapper/OmProductionOrdeInfoMapper.java
index fcecab3..d1a993c 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/mapper/OmProductionOrdeInfoMapper.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/mapper/OmProductionOrdeInfoMapper.java
@@ -21,6 +21,15 @@
     public OmProductionOrdeInfo selectOmProductionOrdeInfoById(Long id);
 
     /**
+     * 鏌ヨ鐢熶骇宸ュ崟
+     *
+     * @param ids 鐢熶骇宸ュ崟涓婚敭
+     * @return 鐢熶骇宸ュ崟
+     */
+    public OmProductionOrdeInfo selectOmProductionOrdeInfoByIds(Long[] ids);
+
+
+    /**
      * 鏌ヨ鐢熶骇宸ュ崟鍒楄〃
      * 
      * @param omProductionOrdeInfo 鐢熶骇宸ュ崟
diff --git a/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/service/IOmProductionOrdeInfoService.java b/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/service/IOmProductionOrdeInfoService.java
index 8f5ce40..9a73017 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/service/IOmProductionOrdeInfoService.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/service/IOmProductionOrdeInfoService.java
@@ -22,6 +22,14 @@
     public OmProductionOrdeInfo selectOmProductionOrdeInfoById(Long id);
 
     /**
+     * 鏌ヨ鐢熶骇宸ュ崟
+     *
+     * @param ids 鐢熶骇宸ュ崟涓婚敭
+     * @return 鐢熶骇宸ュ崟
+     */
+    public OmProductionOrdeInfo selectOmProductionOrdeInfoByIds(Long[] ids);
+
+    /**
      * 鏌ヨ鐢熶骇宸ュ崟鍒楄〃
      * 
      * @param omProductionOrdeInfo 鐢熶骇宸ュ崟
diff --git a/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/service/impl/OmProductionOrdeInfoServiceImpl.java b/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/service/impl/OmProductionOrdeInfoServiceImpl.java
index 8a0139e..23a4a84 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/service/impl/OmProductionOrdeInfoServiceImpl.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/service/impl/OmProductionOrdeInfoServiceImpl.java
@@ -39,6 +39,18 @@
     }
 
     /**
+     * 鏌ヨ鐢熶骇宸ュ崟
+     *
+     * @param ids 鐢熶骇宸ュ崟涓婚敭
+     * @return 鐢熶骇宸ュ崟
+     */
+    @Override
+    public OmProductionOrdeInfo selectOmProductionOrdeInfoByIds(Long[] ids)
+    {
+        return omProductionOrdeInfoMapper.selectOmProductionOrdeInfoByIds(ids);
+    }
+
+    /**
      * 鏌ヨ鐢熶骇宸ュ崟鍒楄〃
      * 
      * @param omProductionOrdeInfo 鐢熶骇宸ュ崟
diff --git a/jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java b/jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java
index f471807..2f5af93 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java
@@ -22,12 +22,15 @@
     private static final String OP020_ITEM = "OP.OP100.";//
     private static final String OP120_ITEM_HX = "CFL4HX.OP120.";//
     private static final String OP120_ITEM_ZZ = "CFL4ZZ.OP120.";//
+    private static final String OP020_ITEM_HX = "CFL4HX.HOP020.";//
     private static final String OP121_ITEM_ZZ = "CFL4ZZ.OP121.";//
     public static final String OP020_SaveRequest = OP020_ITEM + "SaveRequest";//璇锋眰淇濆瓨
     public static final String OP120_SaveRequestLast = OP120_ITEM_HX + "SaveRequestLast";//璇锋眰淇濆瓨
     public static final String OP020_MesSaveFeed = OP020_ITEM + "MesSaveFeed";//Mes淇濆瓨瀹屾垚
 
     public static final String OP120_ZZ_CODE_CHECK = OP120_ITEM_ZZ + "CodeCheck";//璇锋眰淇濆瓨
+
+    public static final String OP020_HX_CODE_CHECK = OP020_ITEM_HX + "CodeCheck";//璇锋眰淇濆瓨
     public static final String OP121_ZZ_CODE_CHECK = OP121_ITEM_ZZ + "CodeCheckFeed";//璇锋眰淇濆瓨
     public static final String OP050_HX_CODE_CHECK = "CFL4HX.OP050.CodeCheck";//璇锋眰淇濆瓨
 
diff --git a/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java b/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java
index a77d4cc..52c5212 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java
@@ -199,6 +199,14 @@
                     || OPCElement.OP695_ZZ_CODE_CHECK.equals(Node) || OPCElement.OP755_ZZ_CODE_CHECK.equals(Node)){
                         rework(SNCode,Node,daPassingStationCollections,rmRepairRecords);
                     }
+                    if (OPCElement.OP020_HX_CODE_CHECK.equals(Node)) {
+                        //婵�鍏夋墦鐮�
+                        String[] printcode=SNCode.split("\\s+");
+                        ReadWriteEntity entity3 = new ReadWriteEntity("CFL4HX.HOP020.PrintCode1", printcode[0]);
+                        OPCUaSubscription.miloService.writeToOpcUa(entity3);//鍐橲N
+                        ReadWriteEntity entity5 = new ReadWriteEntity("CFL4HX.HOP020.PrintCode2", printcode[1]);
+                        OPCUaSubscription.miloService.writeToOpcUa(entity5);//鍐橲N
+                    }
                     System.out.println(entity);
 
                 }
@@ -461,7 +469,7 @@
 
             //鏇存柊宸ュ崟鐘舵��
             if ("OP790".equals(parts[1])) {
-                bsOrderScheduling.setReport20("0");
+                //bsOrderScheduling.setReport20("0");
                 bsOrderScheduling.setProductionStatus("3");
                 bsOrderScheduling.setFinalAssemblyOfflineTime(new Date());
             }else if("OP050".equals(parts[1])){
@@ -469,6 +477,7 @@
                 bsOrderScheduling.setProductionStatus("2");
                 bsOrderScheduling.setBoxClosingOnlineTime(new Date());
             }else if("OP120".equals(parts[1])){
+                bsOrderScheduling.setReport20("0");
                 bsOrderScheduling.setFinalAssemblyLaunchTime(new Date());
                 bsOrderScheduling.setClosingBoxOfflineTime(new Date());
             }
diff --git a/jcdm-main/src/main/resources/mapper/bs/orderScheduling/BsOrderSchedulingMapper.xml b/jcdm-main/src/main/resources/mapper/bs/orderScheduling/BsOrderSchedulingMapper.xml
index 6cada42..c6bcddd 100644
--- a/jcdm-main/src/main/resources/mapper/bs/orderScheduling/BsOrderSchedulingMapper.xml
+++ b/jcdm-main/src/main/resources/mapper/bs/orderScheduling/BsOrderSchedulingMapper.xml
@@ -94,6 +94,58 @@
             </if>
         </where>
     </select>
+
+    <select id="selectBsOrderSchedulingPage" parameterType="BsOrderScheduling" resultMap="BsOrderSchedulingResult">
+        <include refid="selectBsOrderSchedulingVo"/>
+        <where>
+            <if test="orderNo != null  and orderNo != ''"> and order_no = #{orderNo}</if>
+            <if test="engineNo != null  and engineNo != ''"> and engine_no = #{engineNo}</if>
+            <if test="productType != null  and productType != ''"> and product_type = #{productType}</if>
+            <if test="model != null  and model != ''"> and model = #{model}</if>
+            <if test="productionStatus != null  and productionStatus != ''"> and production_status = #{productionStatus}</if>
+            <if test="workingHours != null  and workingHours != ''"> and working_hours = #{workingHours}</if>
+            <if test="currentWorkstation != null  and currentWorkstation != ''"> and current_workstation = #{currentWorkstation}</if>
+            <if test="qualityStatus != null  and qualityStatus != ''"> and quality_status = #{qualityStatus}</if>
+            <if test="whetherOrPrint != null  and whetherOrPrint != ''"> and whether_or_print = #{whetherOrPrint}</if>
+            <if test="report10 != null  and report10 != ''"> and report_10 = #{report10}</if>
+            <if test="report20 != null  and report20 != ''"> and report_20 = #{report20}</if>
+            <if test="combinedBoxTime != null  and combinedBoxTime != ''"> and combined_box_time = #{combinedBoxTime}</if>
+            <if test="finalAssemblyTime != null  and finalAssemblyTime != ''"> and final_assembly_time = #{finalAssemblyTime}</if>
+            <if test="operator != null  and operator != ''"> and operator = #{operator}</if>
+            <if test="operateTime != null  and operateTime != ''"> and operate_time = #{operateTime}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="spareField1 != null  and spareField1 != ''"> and spare_field_1 = #{spareField1}</if>
+            <if test="spareField2 != null  and spareField2 != ''"> and spare_field_2 = #{spareField2}</if>
+            <if test="spareField3 != null  and spareField3 != ''"> and spare_field_3 = #{spareField3}</if>
+            <if test="spareField4 != null  and spareField4 != ''"> and spare_field_4 = #{spareField4}</if>
+            <if test="createUser != null  and createUser != ''"> and create_user = #{createUser}</if>
+            <if test="updateUser != null  and updateUser != ''"> and update_user = #{updateUser}</if>
+            <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
+            <if test="report30 != null  and report30 != ''"> and report_30 = #{report30}</if>
+            <if test="dateConditions != null  and dateConditions != ''"> and operate_time BETWEEN #{startTime} AND #{endTime}</if>
+            <if test="boxClosingOnlineTime != null  and boxClosingOnlineTime != ''"> and box_closing_online_time = #{boxClosingOnlineTime}</if>
+            <if test="closingBoxOfflineTime != null  and closingBoxOfflineTime != ''"> and closing_box_offline_time = #{closingBoxOfflineTime}</if>
+            <if test="finalAssemblyLaunchTime != null  and finalAssemblyLaunchTime != ''"> and final_assembly_launch_time = #{finalAssemblyLaunchTime}</if>
+            <if test="finalAssemblyOfflineTime != null  and finalAssemblyOfflineTime != ''"> and final_assembly_offline_time = #{finalAssemblyOfflineTime}</if>
+            <if test="cvtLaunchTime != null  and cvtLaunchTime != ''"> and cvt_launch_time = #{cvtLaunchTime}</if>
+            <if test="cvtOfflineTime != null  and cvtOfflineTime != ''"> and cvt_offline_time = #{cvtOfflineTime}</if>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''"> and cvt_offline_time between #{startTime} and #{endTime}</if>
+            <if test="engineNoList != null and engineNoList.size() > 0">
+                and engine_no in
+                <foreach collection="engineNoList" open="(" close=")" separator="," item="engine">
+                    #{engine}
+                </foreach>
+            </if>
+            <if test="engineNoListExcel != null and engineNoListExcel.size() > 0">
+                and engine_no in
+                <foreach collection="engineNoListExcel" open="(" close=")" separator="," item="engine">
+                    #{engine}
+                </foreach>
+            </if>
+            and (production_status = '2' or production_status = '3')
+        </where>
+        order by create_time DESC
+    </select>
     
     <select id="selectBsOrderSchedulingById" parameterType="Long" resultMap="BsOrderSchedulingResult">
         <include refid="selectBsOrderSchedulingVo"/>
diff --git a/jcdm-main/src/main/resources/mapper/da/paramCollection/DaParamCollectionMapper.xml b/jcdm-main/src/main/resources/mapper/da/paramCollection/DaParamCollectionMapper.xml
index bea39b4..440aa5c 100644
--- a/jcdm-main/src/main/resources/mapper/da/paramCollection/DaParamCollectionMapper.xml
+++ b/jcdm-main/src/main/resources/mapper/da/paramCollection/DaParamCollectionMapper.xml
@@ -46,6 +46,7 @@
             <if test="locationCode != null  and locationCode != ''"> and location_code = #{locationCode}</if>
             <if test="equipmentNo != null  and equipmentNo != ''"> and equipment_no = #{equipmentNo}</if>
             <if test="paramCode != null  and paramCode != ''"> and param_code = #{paramCode}</if>
+            <if test="paramValue != null  and paramValue != ''"> and param_value = #{paramValue}</if>
             <if test="dateConditions != null  and dateConditions != ''"> and collection_time BETWEEN #{startTime} AND #{endTime}</if>
         </where>
     </select>
diff --git a/jcdm-main/src/main/resources/mapper/om/productionOrde/OmProductionOrdeInfoMapper.xml b/jcdm-main/src/main/resources/mapper/om/productionOrde/OmProductionOrdeInfoMapper.xml
index daf203e..983bd68 100644
--- a/jcdm-main/src/main/resources/mapper/om/productionOrde/OmProductionOrdeInfoMapper.xml
+++ b/jcdm-main/src/main/resources/mapper/om/productionOrde/OmProductionOrdeInfoMapper.xml
@@ -82,6 +82,15 @@
         <include refid="selectOmProductionOrdeInfoVo"/>
         where id = #{id}
     </select>
+
+    <select id="selectOmProductionOrdeInfoByIds" parameterType="String" resultMap="OmProductionOrdeInfoResult">
+        select type_z,product_code,line_code,route_code, bom_code, recipe_code, sum(plan_qty) plan_qty,serial_number, order_status from om_production_orde_info
+        where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        GROUP BY  type_z,product_code,line_code,route_code, bom_code, recipe_code,serial_number, order_status
+    </select>
         
     <insert id="insertOmProductionOrdeInfo" parameterType="OmProductionOrdeInfo">
         insert into om_production_orde_info
diff --git a/jcdm-quartz/src/main/java/com/jcdm/quartz/task/RyTask.java b/jcdm-quartz/src/main/java/com/jcdm/quartz/task/RyTask.java
index f21c65f..8780f63 100644
--- a/jcdm-quartz/src/main/java/com/jcdm/quartz/task/RyTask.java
+++ b/jcdm-quartz/src/main/java/com/jcdm/quartz/task/RyTask.java
@@ -54,6 +54,7 @@
                 orderScheduling.setReport10("1");
                 int i = bsOrderSchedulingService.updateBsOrderScheduling(orderScheduling);
                 System.out.println("鏇存柊鐘舵�佹垚鍔�");
+                //logger.info("{}鍚堢鎶ュ伐鎴愬姛",orderScheduling.getOrderNo());
             }
         }
     }
@@ -63,12 +64,13 @@
         bsOrderScheduling.setReport20("0");
         List<BsOrderScheduling> bsOrderSchedulings = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling);
         for (BsOrderScheduling orderScheduling : bsOrderSchedulings) {
-            String xmlResult = ReceivingServices.getInterfaceInformationXml(url, getProductionPlanInformationXml(orderScheduling.getOrderNo(), "0790"));
+            String xmlResult = ReceivingServices.getInterfaceInformationXml(url, getProductionPlanInformationXml(orderScheduling.getOrderNo(), "0020"));
             String status = ReceivingServices.xmlToJSON3(xmlResult);
             if(status.equals("1")){
                 orderScheduling.setReport20("1");
                 int i = bsOrderSchedulingService.updateBsOrderScheduling(orderScheduling);
                 System.out.println("鏇存柊鐘舵�佹垚鍔�");
+                //logger.info("{}鎬昏鎶ュ伐鎴愬姛",orderScheduling.getOrderNo());
             }
         }
     }
@@ -86,7 +88,7 @@
                 "      </urn:ZPP_BC_001>\n" +
                 "   </soapenv:Body>\n" +
                 "</soapenv:Envelope>";
-        logger.info("{}",content);
+        //logger.info("{}",content);
         return content;
     }
 }
diff --git a/jcdm-ui/src/api/main/bs/orderScheduling/orderScheduling.js b/jcdm-ui/src/api/main/bs/orderScheduling/orderScheduling.js
index a6a3172..b1bbdc5 100644
--- a/jcdm-ui/src/api/main/bs/orderScheduling/orderScheduling.js
+++ b/jcdm-ui/src/api/main/bs/orderScheduling/orderScheduling.js
@@ -42,6 +42,32 @@
     params: query
   })
 }
+
+export function listOrderScheduling3(query) {
+  return request({
+    url: '/bs/orderScheduling/list3',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getSumDataMethod(query) {
+  return request({
+    url: '/bs/orderScheduling/getSumData',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function engineNoIsInModel(param) {
+  return request({
+    url: '/bs/orderScheduling/engineNoIsInModel',
+    method: 'get',
+    params: param
+  })
+}
+
 // 鏌ヨ璁㈠崟鎺掍骇璇︾粏
 export function getOrderScheduling(id) {
   return request({
diff --git a/jcdm-ui/src/views/login.vue b/jcdm-ui/src/views/login.vue
index bb9ea3c..19d39b8 100644
--- a/jcdm-ui/src/views/login.vue
+++ b/jcdm-ui/src/views/login.vue
@@ -77,8 +77,8 @@
     return {
       codeUrl: "",
       loginForm: {
-        username: "admin",
-        password: "admin123",
+        username: "SC001",
+        password: "123456",
         rememberMe: false,
         code: "",
         uuid: ""
diff --git a/jcdm-ui/src/views/main/kb/BalanceShaft/index.vue b/jcdm-ui/src/views/main/kb/BalanceShaft/index.vue
new file mode 100644
index 0000000..cf70f24
--- /dev/null
+++ b/jcdm-ui/src/views/main/kb/BalanceShaft/index.vue
@@ -0,0 +1,281 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="3">
+      <el-col :span="6">
+        <el-card shadow="always" class="boxSize">
+          <div class="centerImg">
+            <img style="width: 140px;height: 30px;" src="@/assets/logo/jcdm2.png" alt="dark">
+            <!--            <span class="nextLine" style="font-weight: bold">{{currentTime}}</span>-->
+          </div>
+
+        </el-card>
+      </el-col>
+      <el-col :span="3">
+        <el-card shadow="always" class="boxSize">
+          <span class="centerText" style="height: 60px">{{locationCode}}</span>
+        </el-card>
+      </el-col>
+      <el-col :span="15">
+        <el-card shadow="always" class="boxSize">
+          <span class="centerText" >{{locationName}}</span>
+        </el-card>
+      </el-col>
+    </el-row>
+   <el-row :gutter="0"  >
+     <el-col :span="14">
+       <el-card   class="box-card" style="margin-top: 5px" >
+             <el-form ref="form" :model="form"  label-width="25%"   >
+               <el-form-item prop="engineNo" style="margin-top: 16px">
+      	     <span slot="label" style="font-size:22px;color:black;"><strong>骞宠 杞寸爜</strong></span>
+                 <el-input style="font-size:20px" v-model="form.engineNo" placeholder="璇锋壂鎻忓钩琛¤酱鐮�" clearable  @input="EngineNohandleChange">
+                   <el-button slot="append" plain type="info" @click="EngineNohandleChange" icon="el-icon-search"></el-button>
+                 </el-input>
+               </el-form-item>
+             </el-form>
+             <el-form ref="form" :model="form"  label-width="25%"  >
+               <el-form-item   prop="productType"style="margin-top: 30px" >
+      	        <span slot="label" style="font-size:22px;color:black"><strong>鏈哄瀷</strong></span>
+                 <el-input disabled style="font-size:20px"  value="form.productType" v-model="form.productType" placeholder="" />
+               </el-form-item>
+             </el-form>
+             <el-form ref="form" :model="form"  label-width="25%"  >
+               <el-form-item   prop="orderNo" style="margin-top: 30px">
+      	     <span  slot="label" style="font-size:22px;color:black"><strong>宸ュ崟缂栧彿</strong></span>
+                 <el-input disabled style="font-size:20px" v-model="form.orderNo" placeholder="" />
+               </el-form-item>
+             </el-form>
+             <el-form ref="form" :model="form"  label-width="25%"  >
+               <el-form-item   prop="currentWorkstation" style="margin-top: 30px">
+      	     <span slot="label" style="font-size:22px;color:black"><strong>璐ㄩ噺鐘舵��</strong></span>
+                 <el-input disabled style="font-size:20px" v-model:value="form.add" placeholder="" />
+               </el-form-item>
+             </el-form>
+         <el-divider></el-divider>
+
+         <el-row :gutter="10" class="mb8" type="flex" justify="center"  style="text-align: center">
+           <el-col :span="1.5">
+             <el-button plain  :disabled="buttondisabled" type="primary" style="width:400px;height:160px" v-hasPermi="['bs:formula:add']" @click="forceOnline">
+               <span   class="el-icon-thumb"   style="font-size:40px;color:black"></span>
+               <span style="font-size:45px;color:black"><strong>寮哄埗涓婄嚎</strong></span>
+             </el-button>
+           </el-col>
+         </el-row>
+       </el-card>
+     </el-col>
+
+     <el-col :span="10"  inline style="margin-top: 5px">
+         <el-card class="custom-content" style="height: 530px" >
+         <el-col :span="14"style="  ">
+           <span style="font-size:25px"><strong>璐ㄩ噺鏁版嵁</strong></span>
+           <el-divider></el-divider>
+           {{this.form.engineCheckList}}
+         </el-col>
+         </el-card>
+     </el-col>
+   </el-row>
+  </div>
+</template>
+<script>
+
+import { listOrderScheduling, getOrderScheduling, delOrderScheduling, addOrderScheduling, updateOrderScheduling } from "@/api/main/bs/orderScheduling/orderScheduling";
+import { listPassingStationCollection, getPassingStationCollection, delPassingStationCollection, addPassingStationCollection, updatePassingStationCollection } from "@/api/main/da/passingStationCollection/passingStationCollection";
+import {listLineInfo} from "@/api/main/bs/lineInfo/lineInfo";
+import { setSNCode } from "@/api/main/da/opcuaconfig/opcuaconfig";
+import {getIp, listStationConf} from "@/api/main/sc/stationConf";
+
+export default {
+  components: { },
+  options: [],
+  props: [],
+  data() {
+    return {
+      options: [],
+      total: 0,
+      engineCheckList:[],
+      showFlag:false,
+      buttondisabled:true,
+      locationCode: "鏈厤缃�",
+      locationName: "鏈厤缃伐浣�",
+
+      codeValue: "",
+      code: "",
+      lastTime: "",
+      nextTime: "",
+      lastCode: "",
+      nextCode: "",
+      dtmainId: "",
+
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        engineNo: null,
+        productType:null,
+        orderNo:null,
+        qualityStatus:null,
+        currentWorkstation: null,
+        add: null,
+        engineCheckList:'鏆傛棤鏁版嵁',
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {
+        engineNo: null,
+        productType:null,
+        orderNo:null,
+        qualityStatus:null,
+        currentWorkstation: null,
+        add: null,
+        engineCheckList:'鏆傛棤鏁版嵁',
+      },
+      add: null,
+    };
+  },
+  computed: {},
+  watch: {},
+  created() {
+    window.document.onkeypress = (e) => {
+      if (window.event) {
+        this.nextCode = e.keyCode;
+      } else if (e.which) {
+        this.nextCode = e.which;
+      }
+      if (e.which === 13) {
+        // 閿洏鍥炶溅浜嬩欢
+        if (this.code.length < 3) return; // 鎵爜鏋殑閫熷害寰堝揩锛屾墜鍔ㄨ緭鍏ョ殑鏃堕棿涓嶄細璁ヽode鐨勯暱搴﹀ぇ浜�2锛屾墍浠ヨ繖閲屼笉浼氬鎵爜鏋湁鏁�
+        this.parseQRCode(this.code); // 鑾峰彇鍒版壂鐮佹灙杈撳叆鐨勫唴瀹癸紝鍋氬埆鐨勬搷浣�
+        this.lastCode = "";
+        this.lastTime = "";
+        return;
+      }
+      this.nextTime = new Date().getTime();
+      if (!this.lastTime && !this.lastCode) {
+        this.code = ""; // 娓呯┖涓婃鐨勬潯褰㈢爜
+        this.code += e.key;
+      }
+      if (this.lastCode && this.lastTime && this.nextTime - this.lastTime > 500) {
+        // 褰撴壂鐮佸墠鏈塳eypress浜嬩欢鏃�,闃叉棣栧瓧缂哄け
+        this.code = e.key;
+      } else if (this.lastCode && this.lastTime) {
+        this.code += e.key;
+      }
+      this.lastCode = this.nextCode;
+      this.lastTime = this.nextTime;
+    };
+  },
+  mounted() {
+    this.getStationConf();
+  },
+  methods: {
+    getStationConf() {
+      getIp().then(response => {
+        let queryParams = {
+          ipAddress: response.msg,
+        }
+        listStationConf(queryParams).then(response => {
+          this.locationName = response.rows[0].processesName
+          this.locationCode = response.rows[0].processesCode
+        });
+
+      });
+
+    },
+    reset() {
+      this.form = {
+        engineNo:null,
+        productType:null,
+        orderNo:null,
+        qualityStatus:null,
+        currentWorkstation: null,
+        add: null,
+        engineCheckList:'鏆傛棤鏁版嵁',
+      };
+      this.resetForm("form");
+    },
+    EngineNohandleChange(){
+      if(this.form.engineNo !== null && this.form.engineNo !== undefined){
+        //let OrderSchedulingParam = {engineNo: null}
+        setSNCode(this.form.engineNo,this.locationCode)
+        //OrderSchedulingParam.engineNo = this.form.engineNo;
+     /*   listOrderScheduling(OrderSchedulingParam).then(response => {
+          if(response.total === 1 ){
+            this.form.productType = response.rows[0].model
+            this.form.orderNo = response.rows[0].orderNo
+            this.form.qualityStatus = response.rows[0].qualityStatus
+            this.form.currentWorkstation = response.rows[0].currentWorkstation
+            this.form.add= response.rows[0].currentWorkstation+ response.rows[0].qualityStatus
+            if(this.form.qualityStatus ==='涓嶅悎鏍�'){
+              this.buttondisabled = false;
+            }
+            else{
+              this.buttondisabled = true;
+            }
+          }
+          else{
+            this.reset();
+            this.buttondisabled = true
+            const h = this.$createElement;
+            this.$message({
+              message: h('p',null, [
+                       h('span', null, '璀﹀憡 '),
+                       h('i', { style: 'color: black' }, '杈撳叆鐨勫彂鍔ㄦ満鍙锋湁璇�'),
+                       h()]),
+              type: 'error',
+              center: true,
+              offset:300
+            });
+          }
+        });*/
+        /*let PassingStationCollectionParam = {sfcCode: null}
+        PassingStationCollectionParam.sfcCode = this.form.engineNo;
+        listPassingStationCollection(PassingStationCollectionParam).then(ponse =>{
+          this.engineCheckList = ponse.rows.locationCode ;
+          if(ponse.rows.length >= 1 && this.form.engineNo !== undefined){
+            this.form.engineCheckList = ''
+            for (let i = 0; i < ponse.rows.length; i++) {
+              this.form.engineCheckList += '   宸ヤ綅:'+ ponse.rows[i].locationCode+'['+ponse.rows[i].outRsSign+']'
+            }
+          }
+          else{
+            this.form.engineCheckList = '鏆傛棤鏁版嵁'
+          }
+        });*/
+      }
+    },
+
+    parseQRCode(code) {
+      this.form.engineNo = code;
+    },
+  },
+  }
+
+
+</script>
+<style scoped>
+::v-deep .el-input__inner{
+  height: 40px;
+}
+::v-deep .el-form-item__label {
+  line-height: 40px;
+}
+.custom-content {
+  height: 50%; /* 璁剧疆楂樺害涓�50% */
+}
+
+.boxSize{
+  height: 60px;
+}
+.centerText{
+  color: black;
+  font-weight: bold;
+  font-size: 20px;
+  display: flex;
+  justify-content: center;
+  margin-top: 5px
+}
+/*.my-custom-modal .el-dialog__wrapper {*/
+/*  width: 400px; !* 璁剧疆瀹藉害 *!*/
+/*  height: 200px; !* 璁剧疆楂樺害 *!*/
+/*  top: 50px; !* 璁剧疆璺濈椤甸潰椤堕儴鐨勪綅缃� *!*/
+/*  left: 50px; !* 璁剧疆璺濈椤甸潰宸︿晶鐨勪綅缃� *!*/
+/*}*/
+</style>
diff --git a/jcdm-ui/src/views/main/kb/crankshaft/index.vue b/jcdm-ui/src/views/main/kb/crankshaft/index.vue
new file mode 100644
index 0000000..c29e4b7
--- /dev/null
+++ b/jcdm-ui/src/views/main/kb/crankshaft/index.vue
@@ -0,0 +1,243 @@
+<template>
+  <div class="app-container">
+    <el-card   class="box-card"  style="height: 60px" >
+      <template>
+        <div class="container" type="flex" justify="center" style="text-align:center">
+          <!--          <el-row   type="flex" justify="center" style="text-align:center;height: 12px" >-->
+          <!--            <el-col  type="flex" justify="center"  :span="14" style="text-align:center">-->
+          <el-divider><span style="font-size:30px;color:black"><strong>鏇茶酱鐮佹壂鐮佷笂绾�</strong></span></el-divider>
+          <!--            </el-col>-->
+          <!--          </el-row>-->
+        </div>
+      </template>
+    </el-card>
+    <el-row :gutter="3">
+      <el-col :span="6">
+        <el-card shadow="always" class="boxSize">
+          <div class="centerImg">
+            <img style="width: 140px;height: 30px;" src="@/assets/logo/jcdm2.png" alt="dark">
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :span="3">
+        <el-card shadow="always" class="boxSize">
+          <span class="centerText" style="height: 60px">{{locationCode}}</span>
+        </el-card>
+      </el-col>
+      <el-col :span="15">
+        <el-card shadow="always" class="boxSize">
+          <span class="centerText" >{{locationName}}</span>
+        </el-card>
+      </el-col>
+    </el-row>
+   <el-row :gutter="0"  >
+     <el-col :span="14">
+       <el-card   class="box-card" style="margin-top: 5px" >
+             <el-form ref="form" :model="form"  label-width="25%"   >
+               <el-form-item prop="engineNo" style="margin-top: 16px">
+      	     <span slot="label" style="font-size:22px;color:black;"><strong>鏇茶酱鐮�</strong></span>
+                 <el-input style="font-size:20px" v-model="form.engineNo" placeholder="璇锋壂鎻忔洸杞寸爜" clearable  @input="EngineNohandleChange">
+                   <el-button slot="append" plain type="info" @click="EngineNohandleChange" icon="el-icon-search"></el-button>
+                 </el-input>
+               </el-form-item>
+             </el-form>
+             <el-form ref="form" :model="form"  label-width="25%"  >
+               <el-form-item   prop="productType"style="margin-top: 30px" >
+      	        <span slot="label" style="font-size:22px;color:black"><strong>鏈哄瀷</strong></span>
+                 <el-input disabled style="font-size:20px"  value="form.productType" v-model="form.productType" placeholder="" />
+               </el-form-item>
+             </el-form>
+             <el-form ref="form" :model="form"  label-width="25%"  >
+               <el-form-item   prop="orderNo" style="margin-top: 30px">
+      	     <span  slot="label" style="font-size:22px;color:black"><strong>宸ュ崟缂栧彿</strong></span>
+                 <el-input disabled style="font-size:20px" v-model="form.orderNo" placeholder="" />
+               </el-form-item>
+             </el-form>
+             <el-form ref="form" :model="form"  label-width="25%"  >
+               <el-form-item   prop="currentWorkstation" style="margin-top: 30px">
+      	     <span slot="label" style="font-size:22px;color:black"><strong>璐ㄩ噺鐘舵��</strong></span>
+                 <el-input disabled style="font-size:20px" v-model:value="form.add" placeholder="" />
+               </el-form-item>
+             </el-form>
+         <el-divider></el-divider>
+
+         <el-row :gutter="10" class="mb8" type="flex" justify="center"  style="text-align: center">
+           <el-col :span="1.5">
+             <el-button plain  :disabled="buttondisabled" type="primary" style="width:400px;height:160px" v-hasPermi="['bs:formula:add']" @click="forceOnline">
+               <span   class="el-icon-thumb"   style="font-size:40px;color:black"></span>
+               <span style="font-size:45px;color:black"><strong>寮哄埗涓婄嚎</strong></span>
+             </el-button>
+           </el-col>
+         </el-row>
+       </el-card>
+     </el-col>
+
+     <el-col :span="10"  inline style="margin-top: 5px">
+       <el-card class="custom-content"  style="height: 264px">
+         <el-col :span="14">
+           <span style="font-size:25px"><strong>璐ㄩ噺鐘舵��</strong></span>
+           <el-divider></el-divider>
+           {{this.form.engineCheckList}}
+         </el-col>
+       </el-card>
+       <el-card class="custom-content" style="height: 264px" >
+         <el-col :span="14"style="  ">
+           <span style="font-size:25px"><strong>鏈�缁堢粨鏋�</strong></span>
+           <el-divider></el-divider>
+           {{queryParams.productType}}
+         </el-col>
+       </el-card>
+     </el-col>
+   </el-row>
+  </div>
+</template>
+<script>
+
+import { listOrderScheduling, getOrderScheduling, delOrderScheduling, addOrderScheduling, updateOrderScheduling } from "@/api/main/bs/orderScheduling/orderScheduling";
+import { listPassingStationCollection, getPassingStationCollection, delPassingStationCollection, addPassingStationCollection, updatePassingStationCollection } from "@/api/main/da/passingStationCollection/passingStationCollection";
+import {listLineInfo} from "@/api/main/bs/lineInfo/lineInfo";
+import { setSNCode } from "@/api/main/da/opcuaconfig/opcuaconfig";
+import {getIp, listStationConf} from "@/api/main/sc/stationConf";
+
+export default {
+  components: { },
+  options: [],
+  props: [],
+  data() {
+    return {
+      options: [],
+      total: 0,
+      engineCheckList:[],
+      showFlag:false,
+      buttondisabled:true,
+      locationCode: "鏈厤缃�",
+      locationName: "鏈厤缃伐浣�",
+
+      codeValue: "",
+      code: "",
+      lastTime: "",
+      nextTime: "",
+      lastCode: "",
+      nextCode: "",
+      dtmainId: "",
+
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        engineNo: null,
+        productType:null,
+        orderNo:null,
+        qualityStatus:null,
+        currentWorkstation: null,
+        add: null,
+        engineCheckList:'鏆傛棤鏁版嵁',
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {
+        engineNo: null,
+        productType:null,
+        orderNo:null,
+        qualityStatus:null,
+        currentWorkstation: null,
+        add: null,
+        engineCheckList:'鏆傛棤鏁版嵁',
+      },
+      add: null,
+    };
+  },
+  computed: {},
+  watch: {},
+  created() {
+    window.document.onkeypress = (e) => {
+      if (window.event) {
+        this.nextCode = e.keyCode;
+      } else if (e.which) {
+        this.nextCode = e.which;
+      }
+      if (e.which === 13) {
+        // 閿洏鍥炶溅浜嬩欢
+        if (this.code.length < 3) return; // 鎵爜鏋殑閫熷害寰堝揩锛屾墜鍔ㄨ緭鍏ョ殑鏃堕棿涓嶄細璁ヽode鐨勯暱搴﹀ぇ浜�2锛屾墍浠ヨ繖閲屼笉浼氬鎵爜鏋湁鏁�
+        this.parseQRCode(this.code); // 鑾峰彇鍒版壂鐮佹灙杈撳叆鐨勫唴瀹癸紝鍋氬埆鐨勬搷浣�
+        this.lastCode = "";
+        this.lastTime = "";
+        return;
+      }
+      this.nextTime = new Date().getTime();
+      if (!this.lastTime && !this.lastCode) {
+        this.code = ""; // 娓呯┖涓婃鐨勬潯褰㈢爜
+        this.code += e.key;
+      }
+      if (this.lastCode && this.lastTime && this.nextTime - this.lastTime > 500) {
+        // 褰撴壂鐮佸墠鏈塳eypress浜嬩欢鏃�,闃叉棣栧瓧缂哄け
+        this.code = e.key;
+      } else if (this.lastCode && this.lastTime) {
+        this.code += e.key;
+      }
+      this.lastCode = this.nextCode;
+      this.lastTime = this.nextTime;
+    };
+  },
+  mounted() {
+    this.getStationConf();
+  },
+  methods: {
+    getStationConf() {
+      getIp().then(response => {
+        let queryParams = {
+          ipAddress: response.msg,
+        }
+        listStationConf(queryParams).then(response => {
+          this.locationName = response.rows[0].processesName
+          this.locationCode = response.rows[0].processesCode
+        });
+      });
+    },
+    reset() {
+      this.form = {
+        engineNo:null,
+        productType:null,
+        orderNo:null,
+        qualityStatus:null,
+        currentWorkstation: null,
+        add: null,
+        engineCheckList:'鏆傛棤鏁版嵁',
+      };
+      this.resetForm("form");
+    },
+    EngineNohandleChange(){
+      if(this.form.engineNo !== null && this.form.engineNo !== undefined){
+        setSNCode(this.form.engineNo,this.locationCode)
+      }
+    },
+    parseQRCode(code) {
+      this.form.engineNo = code;
+    },
+  },
+  }
+
+
+</script>
+<style scoped>
+::v-deep .el-input__inner{
+  height: 40px;
+}
+::v-deep .el-form-item__label {
+  line-height: 40px;
+}
+.custom-content {
+  height: 50%; /* 璁剧疆楂樺害涓�50% */
+}
+
+.boxSize{
+  height: 60px;
+}
+.centerText{
+  color: black;
+  font-weight: bold;
+  font-size: 20px;
+  display: flex;
+  justify-content: center;
+  margin-top: 5px
+}
+</style>
diff --git a/jcdm-ui/src/views/main/om/productionOrde/detail.vue b/jcdm-ui/src/views/main/om/productionOrde/detail.vue
new file mode 100644
index 0000000..6bb028e
--- /dev/null
+++ b/jcdm-ui/src/views/main/om/productionOrde/detail.vue
@@ -0,0 +1,184 @@
+<template>
+  <div class="app-container">
+    <div style="height: 100%;width: 100%">
+      <el-card class="box-card">
+        <el-form :model="queryParams" size="large" :inline="true" label-width="68px" @submit.native.prevent>
+          <el-form-item label-width="200" label="绠变綋鐮�" :prop="queryParams.productionNotice"  style="align-content: center">
+            <input v-model="queryParams.productionNotice"
+                      ref="inputdata"
+                   style="height: 39px; width: 300px"
+                   placeholder="璇锋壂鎻忕浣撶爜"
+                     />
+          </el-form-item>
+<!--          <el-button size="large" type="primary" >涓婄嚎</el-button>-->
+<!--          <el-button size="large" type="danger">涓嬬嚎</el-button>-->
+          <el-button size="large" type="info" @click="refresh">杩斿洖</el-button>
+        </el-form>
+      </el-card>
+      <el-row :gutter="0">
+        <el-col :span="6">
+          <div >
+            <el-card style="height: 460px">
+              <el-descriptions class="margin-top" :column="1" direction="horizontal">
+                <el-descriptions-item label="鐢熶骇璁㈠崟">{{singleSelect.workOrderNo}}</el-descriptions-item>
+                <el-descriptions-item label="鏈哄瀷" :span="2">{{singleSelect.typeZ}}</el-descriptions-item>
+                <el-descriptions-item label="璁″垝鏁伴噺">
+                  {{singleSelect.planQty}}
+                </el-descriptions-item>
+                <el-descriptions-item label="涓婄嚎鏁伴噺">{{onlineNum}}</el-descriptions-item>
+                <el-descriptions-item label="瀹屾垚鏁伴噺">{{finishNum}}</el-descriptions-item>
+                <el-descriptions-item label="涓嶅悎鏍兼暟">{{unReachNum}}</el-descriptions-item>
+              </el-descriptions>
+            </el-card>
+          </div>
+        </el-col>
+        <el-col :span="18">
+          <div>
+            <el-card style="height: 460px; overflow: auto">
+              <el-table border :data="orderSchedulingList">
+                <el-table-column
+                  type="index"
+                  label="搴忓彿"
+                  width="50"></el-table-column>
+                <el-table-column label="鐢熶骇璁㈠崟" align="center" prop="orderNo" width="130">
+
+                </el-table-column>
+                <el-table-column label="鍙戝姩鏈哄彿" align="center" prop="engineNo" width="150">
+
+                </el-table-column>
+                <el-table-column label="鏈哄瀷" align="center" prop="model">
+
+                </el-table-column>
+                <el-table-column label="鐢熶骇鐘舵��" align="center" prop="productionStatus">
+                  <template slot-scope="scope">
+                    <dict-tag :options="dict.type.order_scheduling_produce_status" :value="scope.row.productionStatus"/>
+                  </template>
+                </el-table-column>
+                <el-table-column label="璐ㄩ噺鐘舵��" align="center" prop="qualityStatus">
+                  <template slot-scope="scope">
+                    <dict-tag :options="dict.type.quality_status" :value="scope.row.qualityStatus"/>
+                  </template>
+                </el-table-column>
+
+
+                <el-table-column label="鎿嶄綔浜�" align="center" prop="operator">
+                </el-table-column>
+                <el-table-column label="鎿嶄綔鏃堕棿" align="center" prop="operateTime" width="160">
+                  <template slot-scope="scope">
+                    <span>{{ parseTime(scope.row.operateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
+                  </template>
+                </el-table-column>
+
+              </el-table>
+              <pagination
+                v-show="total>0"
+                :total="total"
+                :page.sync="queryParams.pageNum"
+                :limit.sync="queryParams.pageSize"
+                @pagination="getListData"
+              />
+            </el-card>
+          </div>
+        </el-col>
+      </el-row>
+    </div>
+  </div>
+</template>
+
+<script>
+
+import { engineNoIsInModel, getSumDataMethod, listOrderScheduling3 } from "../../../../api/main/bs/orderScheduling/orderScheduling";
+export default {
+  name: 'Detail',
+  props: ['singleSelect'],
+  dicts: ['order_scheduling_produce_status','quality_status','print_status','material_type'],
+  data(){
+    return{
+      // 鎬绘潯鏁�
+      total: 0,
+      queryParams: {
+        orderNo:'',
+        pageNum: 1,
+        pageSize: 10,
+      },
+      orderSchedulingList: [],
+      onlineNum: 0,
+      finishNum: 0,
+      unReachNum: 0,
+      scannerFlag: false
+    }
+  },
+  methods:{
+    handleQuery(){
+
+    },
+    refresh() {
+      location.reload();
+    },
+    setFocus(){
+      this.$nextTick(()=>{
+        this.$refs.inputdata.focus()
+      })
+    },
+    handleScannerInput(event){
+      if (this.scannerFlag){
+        this.queryParams.productionNotice = ''
+        this.$refs.inputdata.value = ''
+        this.scannerFlag = false
+      }
+      console.log('+++++++++++++++=++++++',event)
+      const input = event.target
+      const inputValue = input.value
+      this.queryParams.productionNotice = inputValue
+      console.log('----------------------',this.queryParams.productionNotice)
+      if (event.key === 'Enter'){
+        this.scannerFlag = true
+        //鎵弿瀹屾垚
+        engineNoIsInModel({engineNo:this.queryParams.productionNotice,
+          model:this.singleSelect.typeZ,orderNo:this.singleSelect.workOrderNo
+        }).then(res => {
+          console.log('rerrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrs----',res)
+          if (res.data===500){
+            console.log('====---===')
+            this.$message({
+              message:res.msg,
+              type:'warning'
+            })
+          }else {
+            this.$message({
+              message:'鎿嶄綔鎴愬姛',
+              type:'success'
+            })
+            this.getListData()
+          }
+        })
+      }
+    },
+    //鏌ヨ鍒楄〃
+    getListData(){
+      console.log('this.queryParams.workOrderNo',this.singleSelect.workOrderNo)
+      this.queryParams.orderNo = this.singleSelect.workOrderNo
+      console.log('this.queryParams',this.queryParams)
+      listOrderScheduling3(this.queryParams).then(res => {
+        this.orderSchedulingList = res.rows
+        this.total = res.total
+      })
+      getSumDataMethod(this.queryParams).then(res =>{
+        console.log('res',res)
+        this.onlineNum = res.data.onlineNum
+        this.finishNum = res.data.finishNum
+        this.unReachNum = res.data.unqualified
+      })
+    }
+  },
+  mounted() {
+    console.log('singleSelect111',this.singleSelect)
+    this.getListData()
+    this.setFocus()
+    this.$refs.inputdata.addEventListener('keydown',this.handleScannerInput)
+  },
+  beforeDestroy() {
+    this.$refs.inputdata.removeEventListener('keydown',this.handleScannerInput)
+  }
+}
+</script>
diff --git a/jcdm-ui/src/views/main/om/productionOrde/index.vue b/jcdm-ui/src/views/main/om/productionOrde/index.vue
index 5e8cb58..f3ddc64 100644
--- a/jcdm-ui/src/views/main/om/productionOrde/index.vue
+++ b/jcdm-ui/src/views/main/om/productionOrde/index.vue
@@ -1,5 +1,6 @@
 <template>
   <div class="app-container">
+    <div v-if="!showDetailFlag">
     <el-card class="box-card">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label-width="100" label="鐢熶骇閫氱煡鍗�" prop="productName">
@@ -113,6 +114,16 @@
           @click="CreatehandleUpdate"
           v-hasPermi="['om:productionOrde:createUpdate']"
         >鐢熸垚</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :disabled="!single"
+          @click="goToPage"
+        >寮�濮嬩綔涓�</el-button>
       </el-col>
 
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -301,7 +312,8 @@
         <el-button @click="cancel">鍙� 娑�</el-button>
       </div>
     </el-dialog>
-
+    </div>
+    <Detail v-if="showDetailFlag" :singleSelect="singleSelect"></Detail>
   </div>
 </template>
 
@@ -322,15 +334,19 @@
 } from "@/api/main/bs/orderScheduling/orderScheduling";
 import {listMaterial} from "@/api/main/bs/material/material";
 import {listModelNumber} from "@/api/main/bs/modelNumber/modelNumber";
+import Detail from "./detail.vue";
 
 export default {
   name: "ProductionOrde",
   dicts: ['order_state','year','month','day','subscription_type', 'sys_yes_no', 'data_type','sys_normal_disable'],
   components: {
     ItemSelect ,
+    Detail
   },
   data() {
     return {
+      showDetailFlag: false,
+      singleSelect:{},
       titleName: '',
       options: [],
       lineOptions: [],
@@ -495,10 +511,10 @@
         dateTimeRule = dateTimeRule + day;
         dateTimeRule = dateTimeRule + this.markNo;
         this.form.dateTimeRule = dateTimeRule;//姝ゅ璧嬪�间笉鍔犳満鍨�
-        dateTimeRule = dateTimeRule + this.form.typeZ;//姝ゅ鍔犳満鍨嬶紝椤哄簭涓嶈兘棰犲��
+        dateTimeRule = this.form.typeZ +" "+dateTimeRule;//姝ゅ鍔犳満鍨嬶紝椤哄簭涓嶈兘棰犲��
 
         //璧嬪�艰捣濮嬬紪鐮�
-        this.form.startEndCode = dateTimeRule +  String(parseInt(startCode)).padStart(3, '0') + "         " + dateTimeRule + String(parseInt(startCode) + parseInt(planQty)-1).padStart(3, '0') ;
+        this.form.startEndCode =   dateTimeRule + String(parseInt(startCode)).padStart(3, '0') + "         " + dateTimeRule + String(parseInt(startCode) + parseInt(planQty)-1).padStart(3, '0') ;
       }
     },
 
@@ -638,7 +654,8 @@
         spareField3: null,
         typeZ: null,
         spareField4: null,
-        adds:null
+        adds:null,
+        idNums:null
       };
       this.resetForm("form");
     },
@@ -652,7 +669,7 @@
       this.resetForm("queryForm");
       this.handleQuery();
     },
-    // 澶氶�夋閫変腑鏁版嵁
+    /** 澶氶�夋閫変腑鏁版嵁 */
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
       this.move = selection.length!==1
@@ -664,8 +681,10 @@
           this.single = false
           this.multiple = false
         }
+        if(selection[0].orderStatus === '2' && selection.length === 1){
+          this.singleSelect = selection[0]
+        }
       }
-
     },
 
     /** 鏂板鎸夐挳鎿嶄綔 */
@@ -689,6 +708,7 @@
           this.form.typeL = response.rows[0].typeL;
         });
         this.form = response.data;
+        this.form.idNums=id;
         this.Createopen = true;
         this.titleName = "鐢熸垚绠变綋鏉$爜";
         // return Array.from({ length: parseInt(this.actualQty) }, (_, index) => index + 1);
@@ -758,7 +778,7 @@
     saveBoxCode(){
       this.$refs["form"].validate(valid => {
         if (valid) {
-          if (this.form.id != null) {
+          if (this.form.idNums != null) {
             addOrderSchedulingForBoxCode(this.form).then(response => {
               this.$modal.msgSuccess("淇濆瓨鎴愬姛");
               this.Createopen = false;
@@ -785,7 +805,12 @@
         ...this.queryParams
       }, `productionOrde_${new Date().getTime()}.xlsx`)
     },
-
+    goToPage() {
+      this.showDetailFlag=true
+      console.log('this.showDetailFlag',this.showDetailFlag)
+      //鏇存柊瀹為檯鐢熶骇鏃ユ湡
+      //updateOrderInfo(this.singleSelect)
+    },
   }
 };
 </script>

--
Gitblit v1.9.3