From c377d90fe2a01c2118f6c69c3c177f75be7c318b Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期五, 29 十一月 2024 15:20:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatLayoutServiceImpl.java             |   14 +++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatDetailService.java                      |    8 ++
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/OpcNGTemperingTask.java                    |  157 +++++++++++++++++++++++++++++++++++++++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeHeatDetail.java                              |    9 ++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatLayoutService.java                      |    9 ++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java |   17 ++++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java          |    5 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatDetailServiceImpl.java             |   12 +++
 8 files changed, 230 insertions(+), 1 deletions(-)

diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeHeatDetail.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeHeatDetail.java
index 8678d22..ad1c1b4 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeHeatDetail.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/OptimizeHeatDetail.java
@@ -113,4 +113,13 @@
     @TableField("strRemark")
     private String strRemark;
 
+    public double getWidth()
+    {
+        return width;
+    }
+
+    public double getHeigth()
+    {
+        return height;
+    }
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatDetailService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatDetailService.java
index 838f47b..882f479 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatDetailService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatDetailService.java
@@ -3,6 +3,9 @@
 import com.github.yulichang.base.MPJBaseService;
 import com.mes.pp.entity.OptimizeDetail;
 import com.mes.pp.entity.OptimizeHeatDetail;
+import com.mes.pp.entity.OptimizeHeatLayout;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,4 +17,9 @@
  */
 public interface OptimizeHeatDetailService extends MPJBaseService<OptimizeHeatDetail> {
 
+    /**
+     * 杩斿洖鎸囧畾宸ョ▼ 鎸囧畾鐗堝浘鍙风殑灏忕墖鐜荤拑淇℃伅
+     * @return
+     */
+    List<OptimizeHeatDetail> selectHeatDetailGlassInfo(String engineerId, Integer temperingid);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatLayoutService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatLayoutService.java
index c28833e..ba1f5ac 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatLayoutService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeHeatLayoutService.java
@@ -3,6 +3,9 @@
 import com.github.yulichang.base.MPJBaseService;
 import com.mes.pp.entity.OptimizeDetail;
 import com.mes.pp.entity.OptimizeHeatLayout;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,5 +16,9 @@
  * @since 2024-04-16
  */
 public interface OptimizeHeatLayoutService extends MPJBaseService<OptimizeHeatLayout> {
-
+    /**
+     * 杩斿洖鎸囧畾宸ョ▼ 鎸囧畾鐗堝浘鍙风殑鐗堝浘淇℃伅
+     * @return
+     */
+    OptimizeHeatLayout selectHeatLayoutInfo(String engineerId,Integer temperingid);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatDetailServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatDetailServiceImpl.java
index d25905b..21c578e 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatDetailServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatDetailServiceImpl.java
@@ -1,14 +1,18 @@
 package com.mes.pp.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.mes.pp.entity.OptimizeDetail;
 import com.mes.pp.entity.OptimizeHeatDetail;
+import com.mes.pp.entity.OptimizeHeatLayout;
 import com.mes.pp.mapper.OptimizeDetailMapper;
 import com.mes.pp.mapper.OptimizeHeatDetailMapper;
 import com.mes.pp.service.OptimizeDetailService;
 import com.mes.pp.service.OptimizeHeatDetailService;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -22,4 +26,12 @@
 @DS("pp")
 public class OptimizeHeatDetailServiceImpl extends MPJBaseServiceImpl<OptimizeHeatDetailMapper, OptimizeHeatDetail> implements OptimizeHeatDetailService {
 
+    @Override
+    public List<OptimizeHeatDetail> selectHeatDetailGlassInfo(String engineerId, Integer temperingid) {
+        QueryWrapper<OptimizeHeatDetail> wrapper = new QueryWrapper<>();
+        wrapper.eq("project_no", engineerId)
+                .eq("layout_id", temperingid)
+        .orderByAsc("sort");
+        return baseMapper.selectList(wrapper);
+    }
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatLayoutServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatLayoutServiceImpl.java
index 6764eae..8d4c429 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatLayoutServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeHeatLayoutServiceImpl.java
@@ -1,6 +1,7 @@
 package com.mes.pp.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.mes.pp.entity.OptimizeDetail;
 import com.mes.pp.entity.OptimizeHeatLayout;
@@ -8,6 +9,9 @@
 import com.mes.pp.mapper.OptimizeHeatLayoutMapper;
 import com.mes.pp.service.OptimizeDetailService;
 import com.mes.pp.service.OptimizeHeatLayoutService;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -22,4 +26,14 @@
 @DS("pp")
 public class OptimizeHeatLayoutServiceImpl extends MPJBaseServiceImpl<OptimizeHeatLayoutMapper, OptimizeHeatLayout> implements OptimizeHeatLayoutService {
 
+
+
+    @Override
+    public OptimizeHeatLayout selectHeatLayoutInfo(String engineerId, Integer temperingid) {
+
+        QueryWrapper<OptimizeHeatLayout> wrapper = new QueryWrapper<>();
+        wrapper.select("Top 1 *").eq("project_no", engineerId)
+                .eq("layout_id", temperingid);
+        return baseMapper.selectOne(wrapper);
+    }
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
index 3ebeae3..b62a160 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
@@ -47,5 +47,10 @@
      * @return
      */
     Integer updateTemperingState(TemperingGlassInfo temperingGlassInfo);
+    /**
+     * 鏍规嵁鐐夊彿鏌ラ挗鍖栫増鍥剧幓鐠冧俊鎭�
+     * @return
+     */
+    List<TemperingGlassInfo> selectGlassInfoById(Integer id);
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
index 211ac25..3c358ef 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -108,4 +108,21 @@
             return 100;
         }
     }
+
+    @Override
+    public List<TemperingGlassInfo> selectGlassInfoById(Integer id)
+    {
+        List<TemperingGlassInfo> result=null;
+        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
+        wrapper.select("Top 1 *").in("state",1,0).eq("temperingLayoutId",id);
+        TemperingGlassInfo glass=temperingMapper.selectOne(wrapper);
+        if(glass!=null) {
+            QueryWrapper<TemperingGlassInfo> glassinfo = new QueryWrapper<>();
+            glassinfo.eq("engineer_id", glass.getEngineerId())
+                    .eq("tempering_layout_id", id);
+            //return temperingMapper.selectList(glassinfo);
+            result= temperingMapper.selectByEngineerIdAndLayoutId(glass.getEngineerId(),glass.getTemperingLayoutId());
+        }
+        return result;
+    }
 }
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/OpcNGTemperingTask.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/OpcNGTemperingTask.java
new file mode 100644
index 0000000..cd836a3
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/OpcNGTemperingTask.java
@@ -0,0 +1,157 @@
+package com.mes.job;
+
+
+import com.kangaroohy.milo.model.ReadWriteEntity;
+import com.kangaroohy.milo.service.MiloService;
+import com.mes.pp.entity.OptimizeHeatDetail;
+import com.mes.pp.entity.OptimizeHeatLayout;
+import com.mes.pp.service.OptimizeHeatDetailService;
+import com.mes.pp.service.OptimizeHeatLayoutService;
+import com.mes.temperingglass.entity.TemperingGlass;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.Optional;
+
+
+@Component
+@Slf4j
+public class OpcNGTemperingTask {
+
+    @Autowired(required = false)
+    MiloService miloService;
+
+    @Autowired
+    private TemperingGlassInfoService temperingAgoService;
+
+    @Autowired
+    private OptimizeHeatLayoutService optimizeHeatLayoutService;
+
+    @Autowired
+    private OptimizeHeatDetailService optimizeHeatDetailService;
+
+    /**
+     * 鎽嗙墖鍙拌姹傝繘鐗囬�昏緫澶勭悊
+     * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
+     * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
+     */
+    //@Scheduled(fixedDelay = 1000)
+    public void requestTemperingTask() throws Exception {
+        ReadWriteEntity requestInTempering = miloService.readFromOpcUa("GH1S7.GH1S7.requestInTempering");//璇锋眰杩涚墖
+        ReadWriteEntity requestTemperingId = miloService.readFromOpcUa("GH1S7.GH1S7.requestTemperingId");//璇锋眰杩涚墖 鐐夊彿ID
+        Integer request = Integer.parseInt(requestInTempering.getValue().toString());
+        Integer id = Integer.parseInt(requestTemperingId.getValue().toString());
+        if (request == 0) {
+            miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 0));//鍏佽閫佺墖娓呴浂
+        } else {
+            ReadWriteEntity placedNumber = miloService.readFromOpcUa("GH1S7.GH1S7.placedNumber");//宸叉憜鐗囨暟閲�
+            List<TemperingGlassInfo> glassList = temperingAgoService.selectGlassInfoById(id);
+            if (glassList.size() == Integer.parseInt(placedNumber.getValue().toString())) {
+                miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 1));//鍐欏叆鍏佽閫佺墖
+            } else {
+                miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 2));//涓嶆弧瓒宠繘鐐夋潯浠�
+            }
+        }
+    }
+
+    /**
+     * 閽㈠寲涓婄墖鍙颁笅鍙戝弬鏁伴�昏緫澶勭悊
+     * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
+     * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
+     */
+    //@Scheduled(fixedDelay = 1000)
+    public void loadTemperingTask() throws Exception {
+        ReadWriteEntity loadTemperingId = miloService.readFromOpcUa("GH1S7.GH1S7.loadTemperingId");//杩涚墖瀹屾垚 鐐夊彿ID
+        getNewTemperingID(Integer.parseInt(loadTemperingId.getValue().toString()));//杩涚墖瀹屾垚 涓嬪彂鍙傛暟
+    }
+
+    //鑾峰彇鍒扮倝鍙穒d鎵ц鍙傛暟涓嬪彂浠诲姟
+    private void getNewTemperingID(Integer temperingid) throws Exception {
+        ReadWriteEntity AutoStatus = miloService.readFromOpcUa("GH1.GH1.AutoStatus");
+        if (1 != Integer.parseInt(AutoStatus.getValue().toString())) {
+            log.info("褰撳墠涓洪潪鑱旀満鐘舵�侊紝缁撴潫閽㈠寲涓嬪彂鍙傛暟浠诲姟");
+            return;
+        }
+        ReadWriteEntity QandA = miloService.readFromOpcUa("GH1.GH1.QandA");
+        ReadWriteEntity RecipeStatus = miloService.readFromOpcUa("GH1.GH1.RecipeStatus");
+        if (1 == Integer.parseInt(QandA.getValue().toString()) && 2 == Integer.parseInt(RecipeStatus.getValue().toString())) {
+            log.info("鐗堥潰淇℃伅宸茬粡涓嬪彂锛屽苟涓斿凡缁忓尮閰嶅弬鏁帮紝缁撴潫閽㈠寲涓嬪彂鍙傛暟浠诲姟");
+            return;
+        }
+        List<TemperingGlassInfo> glassList = temperingAgoService.selectGlassInfoById(temperingid);
+        if (glassList != null && glassList.size() > 0) {
+            int glasstype = GetGlassType(glassList.get(0).getFilmsid());//鑶滅郴
+            int process = 0;//閽㈠寲绫诲瀷
+            int thiness = (int) glassList.get(0).getThickness();//鍘氬害
+            String engineerId = glassList.get(0).getEngineerId();
+            Integer temperingLayoutId = glassList.get(0).getTemperingLayoutId();
+            OptimizeHeatLayout heatLayoutinfo = optimizeHeatLayoutService.selectHeatLayoutInfo(engineerId, temperingLayoutId);
+            int loadingRate = (int) (heatLayoutinfo.getLayoutRate() * 100); //瑁呰浇鐜�
+            loadingRate = loadingRate > 10000 ? 10000 : loadingRate;
+            List<OptimizeHeatDetail> heatDetailGlassInfoList = optimizeHeatDetailService.selectHeatDetailGlassInfo(engineerId, temperingLayoutId);
+
+            Optional<Double> maxProductOpt = heatDetailGlassInfoList.stream()
+                    .map(ohd -> ohd.getWidth() * ohd.getHeight())
+                    .max(Double::compareTo);
+            double totalarea = heatDetailGlassInfoList.stream().mapToDouble(ohd -> ohd.getWidth() * ohd.getHeight()).sum();
+
+            int shape = 0; //鏈�澶х墖鍗犳�婚潰绉殑姣斾緥
+            if (maxProductOpt.isPresent()) {
+                shape = (int) (maxProductOpt.get() / totalarea * 100);
+            }
+            shape = shape > 10000 ? 10000 : shape;
+            int workmode = 0; //宸ヤ綅鏁�
+            int furmode = 0; //鍙屽/鑱斿
+
+            miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.TemperingId", temperingid));//鍐欏叆鐐夊彿
+            miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.GlassType", glasstype));//鍐欏叆鐜荤拑绫诲瀷
+            miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.Process", process));//鍐欏叆閽㈠寲绫诲瀷 鍏ㄩ挗 鍗婇挗 闃茬伀
+            miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.Thickness", thiness));//鍐欏叆鍘氬害
+            miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.LoadingRate", loadingRate));//鍐欏叆瑁呰浇鐜�
+            miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.Shape", shape));//鍐欏叆澶х墖姣斾緥
+            miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.WorkMode", workmode));//鍐欏叆宸ヤ綅鏁�
+            miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.FurnaceMode", furmode));//鍐欏叆鐐変綋宸ヤ綔鏂瑰紡
+            log.info("鐐夊彿" + temperingid + "鐗堥潰淇℃伅灏濊瘯涓嬪彂");
+        }
+    }
+
+
+    //鏍规嵁鑶滅郴杩斿洖鐜荤拑绫诲瀷
+    private int GetGlassType(String glasstype) {
+        int result = 0;
+        String str = glasstype.toLowerCase();
+        if (str.contains("鐧界幓")) {
+            result = 0;
+        }
+        if (str.contains("瓒呯櫧")) {
+            result = 4;
+        }
+        if (str.contains("lowe") || str.contains("low-e")) {
+            result = 1;
+        }
+        if (str.contains("鍙岄摱")) {
+            result = 2;
+        }
+        if (str.contains("涓夐摱")) {
+            result = 3;
+        }
+        if (str.contains("鐑弽灏�")) {
+            result = 5;
+        }
+        return result;
+    }
+
+    private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) {
+        return ReadWriteEntity.builder()
+                .identifier(identifier)
+                //Kep涓槸Long绫诲瀷锛屽嵆锛欼nt32锛孞ava涓殑int绫诲瀷
+                .value(value)
+                .build();
+    }
+}

--
Gitblit v1.8.0