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/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java |  120 +++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 102 insertions(+), 18 deletions(-)

diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
index 8646b79..6330ac4 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
@@ -5,16 +5,24 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.mes.common.S7object;
 import com.mes.common.config.Const;
+import com.mes.damage.entity.Damage;
+import com.mes.damage.service.DamageService;
 import com.mes.device.PlcParameterObject;
+import com.mes.sysdict.entity.SysDictData;
+import com.mes.sysdict.service.SysDictDataService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.service.TemperingGlassInfoService;
 import com.mes.temperingrecord.entity.TemperingRecord;
 import com.mes.temperingrecord.service.TemperingRecordService;
+import com.mes.tools.S7control;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -29,52 +37,128 @@
 public class TemperingTask {
 
     @Autowired
-    private TemperingRecordService temporalRecordService;
+    private TemperingRecordService temperingRecordService;
 
     @Autowired
     private TemperingGlassInfoService temporaryGlassInfoService;
+
+    @Autowired
+    private DamageService damageService;
+
+    @Autowired
+    private SysDictDataService sysDictDataService;
+
     private static final String ALONE_STATE = "0";
 
+    @Value("${mes.width}")
+    private Integer temperingWidth;
+    @Value("${mes.height}")
+    private Integer temperingHeight;
 
     @Scheduled(fixedDelay = 1000)
     public void temperingGlassBefore() {
         Date startDate = new Date();
         log.info("鏈浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
         PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+        S7control plcControl = S7object.getinstance().plccontrol;
         String state = plcParameterObject.getPlcParameter("state").getValue();
 //        褰撳墠杩炵嚎鐘舵�佷负
         if (ALONE_STATE.equals(state)) {
-            log.info("褰撳墠閽㈠寲鐐夎繛绾挎ā寮忎负锛歿},涓嶆墽琛岃浠诲姟", state);
+            log.info("褰撳墠閽㈠寲鐐夎繛绾挎ā寮忎负锛歿}锛�(0锛氭墜鍔紱1锛氳繛绾�),涓嶆墽琛岃浠诲姟", state);
             return;
         }
         //灏嗙‘璁ゅ瓧缃负0
-        S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 0);
-
-        //todo:鑾峰彇閽㈠寲鐗堝浘涓姸鎬佷负2鐨勶紙杩涚倝瀹屾垚鐨勭幓鐠冧俊鎭級  涓斾笉瀛樺湪閽㈠寲璁板綍琛ㄥ唴鐨�
-        List<Object> temperRecordIdListObj = temporalRecordService.listObjs(new QueryWrapper<TemperingRecord>().select("distinct tempering_layout_id"));
-
-        List<String> temperRecordIdList = temperRecordIdListObj.stream().map(String::valueOf).collect(Collectors.toList());
-        List<TemperingGlassInfo> list = temporaryGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
-                .eq(TemperingGlassInfo::getState, Const.TEMPERING_START).notIn(TemperingGlassInfo::getTemperingLayoutId, temperRecordIdList));
-        if (CollectionUtils.isEmpty(list)) {
+        plcControl.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 0);
+        //鍙兘鏈夊嚑鐐夌幓鐠冨悓鏃跺湪閽紝闇�瑕佽幏鍙栭挗鍖栧皬鐗囪〃涓殑鏁版嵁淇℃伅鐘舵�佷负2锛堟棆杞彴鐜荤拑宸查�佸嚭鏈挗鍖栵紝姝e湪閽㈠寲锛�
+        List<TemperingGlassInfo> temperingGlassInfoList = temporaryGlassInfoService.list(
+                new LambdaQueryWrapper<TemperingGlassInfo>()
+                        .inSql(TemperingGlassInfo::getTemperingLayoutId, "select distinct tempering_layout_id from tempering_glass_info where state=1")
+                        .lt(TemperingGlassInfo::getState, Const.TEMPERING_START)
+        );
+        if (CollectionUtils.isEmpty(temperingGlassInfoList)) {
             log.info("褰撳墠绯荤粺娌℃湁闇�瑕侀挗鍖栫殑鐜荤拑淇℃伅");
             return;
         }
-        List<Integer> temperingLayoutIdList = list.stream().map(TemperingGlassInfo::getTemperingLayoutId).distinct().collect(Collectors.toList());
-        if (CollectionUtils.isNotEmpty(temperRecordIdList)) {
-            temperingLayoutIdList.removeAll(temperRecordIdList);
+        TemperingGlassInfo minGlassInfo = temperingGlassInfoList.stream().min(Comparator.comparingLong(TemperingGlassInfo::getState)).get();
+        if (minGlassInfo.getState() < Const.TEMPERING_DROP) {
+            log.info("褰撳墠鐐夌幓鐠冩湭鍒伴綈锛岀◢鍚庡湪鎵ц");
+            return;
         }
-        if (CollectionUtils.isEmpty(temperingLayoutIdList)) {
-            log.info("褰撳墠鐜荤拑鏈夋鍦ㄩ挗鍖栫殑浠诲姟");
+        //鎷垮埌宸ョ▼id鍙婄倝鍙�
+        TemperingGlassInfo maxGlassInfo = temperingGlassInfoList.stream().max(Comparator.comparingLong(TemperingGlassInfo::getId)).get();
+        //灏嗘鍦ㄩ挗鍖栫殑鐐夊彿杩囨护鎺夛紝浠呰幏鍙栧緟閽㈠寲鐨勭幓鐠�:鍒ゆ柇寰呴挗鐨勭幓鐠冩槸鍚﹀凡鍙戦�佸鎺ユ暟鎹�
+        List<TemperingRecord> temperingRecordList = temperingRecordService.list(new LambdaQueryWrapper<TemperingRecord>().eq(TemperingRecord::getEngineerId, maxGlassInfo.getEngineerId())
+                .eq(TemperingRecord::getTemperingLayoutId, maxGlassInfo.getTemperingLayoutId()));
+        if (CollectionUtils.isNotEmpty(temperingRecordList)) {
+            log.info("娌℃湁寰呴挗鍖栫殑浠诲姟锛岀粨鏉�");
+            return;
         }
-//        鑾峰彇閽㈠寲涓嬬墖琛ㄧ姸鎬佷负2鐨勭幓鐠冧俊鎭�
+        //鑾峰彇寰呴挗鍖栫殑鎵�鏈夌幓鐠冧俊鎭�
+        List<TemperingGlassInfo> temperingGlassList = temperingGlassInfoList.stream()
+                .filter(e -> e.getEngineerId().equals(maxGlassInfo.getEngineerId())
+                        && e.getTemperingLayoutId().equals(maxGlassInfo.getTemperingLayoutId()))
+                .sorted(Comparator.comparing(TemperingGlassInfo::getTemperingFeedSequence)).collect(Collectors.toList());
+        //鎸夌収鑶滅郴鑾峰彇鐜荤拑鏉愯川
+        SysDictData glassTypeSysDictData = sysDictDataService.getOne(new QueryWrapper<SysDictData>()
+                .eq(StringUtils.isNotBlank(temperingGlassList.get(0).getFilmsid()), "dict_label", temperingGlassList.get(0).getFilmsid()));
 
+        double sumArea = temperingGlassList.stream().mapToDouble(e -> e.getWidth() * e.getHeight()).sum();
+        double maxArea = temperingGlassList.stream().mapToDouble(e -> e.getWidth() * e.getHeight()).max().orElse(0.0);
+        double minArea = temperingGlassList.stream().mapToDouble(e -> e.getWidth() * e.getHeight()).min().orElse(0.0);
+        double areaDifference = (10000 * (maxArea - minArea) / maxArea);
+        double loadingRate = (int) (10000 * sumArea / (temperingHeight * temperingWidth));
+        TemperingRecord temperingRecord = new TemperingRecord();
+        temperingRecord.setEngineerId(maxGlassInfo.getEngineerId());
+        temperingRecord.setTemperingLayoutId(maxGlassInfo.getTemperingLayoutId());
+        temperingRecord.setGlassType(Integer.parseInt(glassTypeSysDictData.getDictTypeValue()));
+        temperingRecord.setTemperingType(1);//鍏ㄩ挗
+        temperingRecord.setThickness(temperingGlassList.get(0).getThickness());
+        temperingRecord.setAreaDifference(areaDifference);
+        temperingRecord.setLoadingRate(loadingRate);
+        temperingRecord.setState(Const.GLASS_STATE_NEW);
+        //濡傛灉鍑虹幇鍚屼竴鐐夐噸璇昏澶勭悊锛屼富閿洿鎺ュ紓甯稿鐞嗭紝涓嶄細鍙戠粰plc閽㈠寲淇℃伅
+        temperingRecordService.save(temperingRecord);
+//      鍚憄lc鍙戦�侀挗鍖栦俊鎭�
+        plcControl.writeWord(plcParameterObject.getPlcParameter("temperingLayoutId").getAddress(), maxGlassInfo.getTemperingLayoutId());
+        plcControl.writeWord(plcParameterObject.getPlcParameter("filmsid").getAddress(), Integer.parseInt(glassTypeSysDictData.getDictTypeValue()));
+        plcControl.writeWord(plcParameterObject.getPlcParameter("temperingType").getAddress(), 1);
+        plcControl.writeWord(plcParameterObject.getPlcParameter("thickness").getAddress(), (int) (temperingGlassList.get(0).getThickness() * 10));
+        plcControl.writeWord(plcParameterObject.getPlcParameter("areaDifference").getAddress(), (int) areaDifference);
+        plcControl.writeWord(plcParameterObject.getPlcParameter("loadingRate").getAddress(), (int) loadingRate);
         //瀹屾垚浠诲姟灏嗙‘璁ゅ瓧缃负1
-        S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 1);
+        plcControl.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 1);
+        Date endDate = new Date();
+        log.info("鏈浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms", endDate, endDate.getTime() - startDate.getTime());
     }
 
     @Scheduled(fixedDelay = 1000)
     public void temperingGlassAfter() {
+        //鏆備笉澶勭悊
+    }
 
+    @Scheduled(fixedDelay = 1000)
+    public void dealDamageTask() {
+        Date startDate = new Date();
+        log.info("閽㈠寲鐮存崯鐜荤拑娓呴櫎浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+        List<TemperingGlassInfo> temperingGlassInfoList = temporaryGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getState, Const.GLASS_STATE_DAMAGE_TAKE));
+        if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
+            //鑾峰彇鐮存崯/鎷胯蛋鐜荤拑id
+            List<String> glassList = temperingGlassInfoList.stream().map(TemperingGlassInfo::getGlassId).collect(Collectors.toList());
+            //灏嗕换鍔¤〃涓殑鏁版嵁鍒犻櫎
+            temporaryGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getGlassId, glassList));
+            List<Damage> damageList = temperingGlassInfoList.stream().map(e -> {
+                Damage damage = new Damage();
+                damage.setGlassId(e.getGlassId());
+                damage.setLine(Const.TEMPERING_OUT_TARGET_POSITION);
+                damage.setWorkingProcedure("閽㈠寲");
+                damage.setRemark("閽㈠寲");
+                damage.setStatus(1);
+                damage.setType(e.getState());
+                return damage;
+            }).collect(Collectors.toList());
+            damageService.batchInsertDamage(damageList);
+        }
+        Date endDate = new Date();
+        log.info("鏈浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms", endDate, endDate.getTime() - startDate.getTime());
     }
 }

--
Gitblit v1.8.0