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