From 3c7d672fb7d6c34742fb7da6f66616ccf3be2c9a Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期五, 08 十一月 2024 14:50:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java |  222 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 222 insertions(+), 0 deletions(-)

diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
new file mode 100644
index 0000000..8229684
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
@@ -0,0 +1,222 @@
+package com.mes.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.mes.common.config.Const;
+import com.mes.engineering.entity.Engineering;
+import com.mes.engineering.mapper.EngineeringMapper;
+import com.mes.opctask.entity.LoadGlassDeviceTask;
+import com.mes.opctask.entity.LoadGlassDeviceTaskHistory;
+import com.mes.opctask.service.LoadGlassDeviceTaskHistoryService;
+import com.mes.opctask.service.LoadGlassDeviceTaskService;
+import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
+import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
+import com.mes.uppattenusage.entity.UpPattenUsage;
+import com.mes.uppattenusage.entity.vo.UpPattenUsageVO;
+import com.mes.uppattenusage.mapper.UpPattenUsageMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/10/23 14:30
+ * @Description:
+ */
+@Component
+@Slf4j
+public class OpcLoadGlassTask {
+
+    @Resource
+    private EngineeringMapper engineeringMapper;
+
+    @Resource
+    private LoadGlassDeviceTaskService loadGlassDeviceTaskService;
+    @Resource
+    private RawGlassStorageDetailsService rawGlassStorageDetailsService;
+    @Resource
+    private LoadGlassDeviceTaskHistoryService loadGlassDeviceTaskHistoryService;
+    @Resource
+    private UpPattenUsageMapper upPattenUsageMapper;
+
+    private static final List<Integer> LOAD_STATION_01 = Arrays.asList(101, 102);
+    private static final List<Integer> LOAD_STATION_02 = Arrays.asList(103, 104);
+
+
+    private static final Integer LOAD_GLASS_ONE_DEVICE = 5;
+    private static final Integer LOAD_GLASS_TWO_DEVICE = 6;
+    private static final String LOAD_GLASS_DEVICE_ONE_TASK = "load_glass_device_one_task";
+
+    private static final String LOAD_GLASS_DEVICE_TWO_TASK = "load_glass_device_two_task";
+
+
+    //璁惧id   涓婄墖浣嶄俊鎭�   浠诲姟琛ㄤ笉涓�鑷�   鍘嗗彶浠诲姟琛ㄥ叕鐢ㄤ竴寮� 鏂板浠诲姟/浠诲姟缁撴潫锛屽悗浼氬湪鍘嗗彶琛ㄤ腑鏂板涓�鏉¤褰曞苟鍦ㄧ粨鏉熷悗鏇存柊浠诲姟  涓�涓换鍔″嵆鍙�
+    //瀹氭椂浠诲姟鎵弿涓婄墖浣嶆湁娌℃湁鍘熺墖
+    //1銆佹槸鍚︽湁鍦ㄦ墽琛岀殑浠诲姟
+    //2銆�1鍙蜂笂鐗囦綅鏄惁鏈夊師鐗囷紝鍘熺墖灏哄鏄惁鍜屼笂鐗囧緟涓婄墖鐨勫昂瀵镐竴鑷�
+    //3銆�1鍙锋棤鍘熺墖锛屼笖娌℃湁鏋跺瓙锛�2鍙蜂笂鐗囦綅灏哄鏄惁鍜屽甫涓婄墖灏哄涓�鑷�
+    //4銆佷笉涓�鑷村彲鑳藉嚭鐜扮幓鐠冪牬鎹熷鑷寸殑涓婁竴鏋跺師鐗囨暟閲忎笉澶�
+    @Scheduled(fixedDelay = 300)
+    public void opcLoadGlassOne() {
+        opcLoadGlassChild(LOAD_GLASS_DEVICE_ONE_TASK, LOAD_GLASS_ONE_DEVICE);
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void opcLoadGlassTwo() {
+        opcLoadGlassChild(LOAD_GLASS_DEVICE_TWO_TASK, LOAD_GLASS_TWO_DEVICE);
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void opcLoadGlassOneFinish() {
+        opcLoadGlassFinishChid(LOAD_GLASS_DEVICE_ONE_TASK, LOAD_GLASS_ONE_DEVICE);
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void opcLoadGlassTwoFinish() {
+        opcLoadGlassFinishChid(LOAD_GLASS_DEVICE_TWO_TASK, LOAD_GLASS_TWO_DEVICE);
+    }
+
+    private void opcLoadGlassChild(String tableName, Integer deviceId) {
+        Engineering engineering = engineeringMapper.selectOne(new LambdaQueryWrapper<Engineering>()
+                .eq(Engineering::getState, Const.ENGINEERING_RUNNING).eq(Engineering::getStationCell, deviceId));
+        if (null == engineering) {
+            log.info("{}涓婄墖绾匡紝娌℃湁宸ョ▼浠诲姟", deviceId);
+            return;
+        }
+        //浠诲姟鏆傚仠
+        LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName);
+        if (task.getTaskRunning().equals(Const.ENGINEERING_RUNNING)) {
+            log.info("{}涓婄墖绾匡紝鏈夋鍦ㄦ墽琛岀殑浠诲姟锛岀粨鏉熸湰鍦颁笂鐗囪姹�", deviceId);
+            return;
+        }
+        List<UpPattenUsageVO> pattenUsageList = upPattenUsageMapper.queryRawGlassByEngineeringId(engineering.getEngineerId());
+        log.info("鎸夌収褰撳墠鑾峰彇鍒版鍦ㄩ渶瑕佷笂鐗囩殑鍘熺墖淇℃伅鏈夛細{}", pattenUsageList);
+        if (CollectionUtils.isEmpty(pattenUsageList)) {
+            log.info("褰撳墠宸ョ▼闇�瑕佷笂鐗囩殑鍘熺墖淇℃伅涓虹┖锛屼换鍔″凡缁撴潫");
+            //todo锛氭槸鍚﹀皢宸ョ▼鐘舵�佹敼涓哄凡瀹屾垚
+            return;
+        }
+        Map<String, List<UpPattenUsageVO>> upListMap = pattenUsageList.stream()
+                .collect(Collectors.groupingBy(UpPattenUsageVO::getGroupNumber));
+        log.info("鑾峰彇褰撳墠闇�瑕佷笂鐗囩殑鍘熺墖鏁版嵁");
+        List<UpPattenUsageVO> usageVOS = upListMap.get("1");
+//        鑾峰彇1鍙蜂笂鐗囦綅鏄湁鏋跺瓙涓旀湁鐜荤拑
+        List<Integer> loadStation = LOAD_GLASS_DEVICE_ONE_TASK.equals(tableName) ? LOAD_STATION_01 : LOAD_STATION_02;
+        List<RawGlassStorageDetails> loadStationList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>()
+                .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1")
+                .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
+                .eq(RawGlassStorageDetails::getDeviceId, deviceId));
+        if (CollectionUtils.isEmpty(loadStationList)) {
+            log.info("褰撳墠涓婄墖绾胯矾涓や釜涓婄墖浣嶉兘娌℃湁鍘熺墖淇℃伅锛岀粨鏉熸湰娆′笂鐗囦换鍔★紝绛夊緟浠撳偍璋冨害浠诲姟");
+            return;
+        }
+        RawGlassStorageDetails oneLoadStation = loadStationList.stream().filter(e -> e.getSlot().equals(loadStation.get(0))).findFirst().orElse(null);
+        if (null == oneLoadStation) {
+            RawGlassStorageDetails twoLoadStation = loadStationList.stream().filter(e -> e.getSlot().equals(loadStation.get(1))).findFirst().orElse(null);
+            if (!compareRawSize(usageVOS.get(0), twoLoadStation)) {
+                log.info("浜屽彿涓婄墖浣嶆湁鏋跺瓙锛屽師鐗囨暟閲忎负0鎴栬�呭師鐗囦俊鎭笌寰呬笂鐗囧昂瀵镐笉涓�鑷达紝缁撴潫鏈涓婄墖浠诲姟锛岀瓑寰呬粨鍌ㄨ皟搴︿换鍔�");
+                return;
+            }
+            int number = Math.min(twoLoadStation.getRemainQuantity(), usageVOS.size());
+            //鐢熸垚涓婄墖浠诲姟
+            task.setTotalCount(number);
+            task.setTaskRunning(Const.ENGINEERING_RUNNING);
+            task.setRawGlassWidth((int) usageVOS.get(0).getWidth());
+            task.setRawGlassHeight((int) usageVOS.get(0).getHeight());
+            task.setSlot(loadStation.get(1));
+            loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+            saveHistoryTask(task, deviceId);
+            return;
+        }
+        //灏哄涓嶄竴鏍锋垨鑰呭師鐗囨暟閲忓ぇ浜�0
+        if (!compareRawSize(usageVOS.get(0), oneLoadStation)) {
+            log.info("涓�鍙蜂笂鐗囦綅鏈夋灦瀛愶紝鍘熺墖鏁伴噺涓�0鎴栬�呭師鐗囦俊鎭笌寰呬笂鐗囧昂瀵镐笉涓�鑷达紝缁撴潫鏈涓婄墖浠诲姟锛岀瓑寰呬粨鍌ㄨ皟搴︿换鍔�");
+            return;
+        }
+        //鐢熸垚涓婄墖浠诲姟
+        int number = Math.min(oneLoadStation.getRemainQuantity(), usageVOS.size());
+        task.setTotalCount(number);
+        task.setTaskRunning(Const.ENGINEERING_RUNNING);
+        task.setRawGlassWidth((int) usageVOS.get(0).getWidth());
+        task.setRawGlassHeight((int) usageVOS.get(0).getHeight());
+        task.setSlot(loadStation.get(0));
+        loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+        saveHistoryTask(task, deviceId);
+    }
+
+    private void opcLoadGlassFinishChid(String tableName, Integer deviceId) {
+        LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName);
+        if (task.getTaskRunning().equals(Const.ENGINEERING_NEW)) {
+            log.info("鏃犱换鍔�,缁撴潫");
+            return;
+        }
+        if (task.getTaskState() <= 1) {
+            log.info("浠诲姟姝e湪鎵ц,缁撴潫");
+            return;
+        }
+        //鑾峰彇浠诲姟瀹屾垚鎯呭喌
+//         宸插畬鎴愭暟閲�  鐮存崯鏁伴噺
+        Integer finishCount = task.getFinishCount();
+        Integer damageCount = task.getDamageCount();
+
+        //鏇存柊褰撳墠鏋跺瓙涓婄殑鍘熺墖鍓╀綑鎯呭喌
+        rawGlassStorageDetailsService.update(new UpdateWrapper<RawGlassStorageDetails>()
+                .inSql("slot", "select slot from raw_glass_storage_station where enable_state = 1")
+                .eq("slot", task.getSlot())
+                .eq("state", Const.RAW_GLASS_STATE_IN)
+                .setSql("remain_quantity = remain_quantity - " + (finishCount + damageCount)));
+        //鏇存柊宸ョ▼涓嬬殑鍘熺墖鏁伴噺 todo:sql寰呬紭鍖�
+
+        List<Integer> ids = upPattenUsageMapper.queryFinishByEngineering(deviceId, finishCount);
+        upPattenUsageMapper.update(null, new LambdaUpdateWrapper<UpPattenUsage>()
+                .in(UpPattenUsage::getId, ids)
+                .set(UpPattenUsage::getState, Const.LOAD_RAW_GLASS_SUCCESS));
+
+        //todo:浠诲姟琛ㄦ暟鎹儏鍐�
+        task.setTaskRunning(0);
+        task.setTotalCount(0);
+        task.setRawGlassWidth(0);
+        task.setRawGlassHeight(0);
+        task.setSlot(0);
+        loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+        loadGlassDeviceTaskHistoryService.update(new LambdaUpdateWrapper<LoadGlassDeviceTaskHistory>()
+                .set(LoadGlassDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS)
+                .eq(LoadGlassDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
+                .eq(LoadGlassDeviceTaskHistory::getStation, deviceId)
+        );
+    }
+
+    private boolean saveHistoryTask(LoadGlassDeviceTask task, Integer deviceId) {
+        LoadGlassDeviceTaskHistory taskHistory = new LoadGlassDeviceTaskHistory();
+        BeanUtils.copyProperties(task, taskHistory);
+        taskHistory.setStation(deviceId);
+        taskHistory.setCreateTime(new Date());
+        taskHistory.setTaskState(Const.RAW_GLASS_TASK_NEW);
+        loadGlassDeviceTaskHistoryService.save(taskHistory);
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 灏哄涓�鏍峰苟涓斿師鐗囨暟閲忓ぇ浜�0
+     *
+     * @param upPattenUsage
+     * @param details
+     * @return
+     */
+    private boolean compareRawSize(UpPattenUsage upPattenUsage, RawGlassStorageDetails details) {
+        boolean flag = upPattenUsage.getWidth() == details.getPatternWidth() && upPattenUsage.getHeight() == details.getPatternHeight() &&
+                upPattenUsage.getThickness() == details.getPatternThickness() && upPattenUsage.getFilmsId().equals(details.getFilmsId());
+        return flag && details.getRemainQuantity() > 0;
+    }
+
+}

--
Gitblit v1.8.0