From 33308e16bbb153d9aac76fd703ec0f38ea7e344a Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期三, 09 十月 2024 15:47:59 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

---
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java |  143 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 139 insertions(+), 4 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 6b27ad0..089ecd4 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
@@ -1,29 +1,164 @@
 package com.mes.job;
 
-import com.mes.tempering_record.service.TemperingRecordService;
+import cn.smallbun.screw.core.util.CollectionUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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;
 
 /**
  * @Author : zhoush
  * @Date: 2024/7/17 12:47
  * @Description:
  */
+@Component
+@Slf4j
 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() {
-        //todo:鑾峰彇閽㈠寲鐗堝浘涓姸鎬佷负2鐨勶紙杩涚倝瀹屾垚鐨勭幓鐠冧俊鎭級  涓斾笉瀛樺湪閽㈠寲璁板綍琛ㄥ唴鐨�
+        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("褰撳墠閽㈠寲鐐夎繛绾挎ā寮忎负锛歿}锛�(0锛氭墜鍔紱1锛氳繛绾�),涓嶆墽琛岃浠诲姟", state);
+            return;
+        }
+        //灏嗙‘璁ゅ瓧缃负0
+        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;
+        }
+        TemperingGlassInfo minGlassInfo = temperingGlassInfoList.stream().min(Comparator.comparingLong(TemperingGlassInfo::getState)).get();
+        if (minGlassInfo.getState() < Const.TEMPERING_DROP) {
+            log.info("褰撳墠鐐夌幓鐠冩湭鍒伴綈锛岀◢鍚庡湪鎵ц");
+            return;
+        }
+        //鎷垮埌宸ョ▼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;
+        }
+        //鑾峰彇寰呴挗鍖栫殑鎵�鏈夌幓鐠冧俊鎭�
+        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
+        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(0);
+                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