UI-Project/src/lang/zh.js
@@ -671,5 +671,9 @@ pforcedfilming: '是否强制出片?', brokenpieces: '破损片数', realpieces: '实际片数', route: '路线:', croute: '请选择路线', pairQuantity: '总配对数量:', cpairQuantity: '请输入总配对数量', } } UI-Project/src/views/UnLoadGlass.rarBinary files differ
UI-Project/src/views/UnLoadGlass.zipBinary files differ
UI-Project/src/views/hollow/hollowequipment.vue
@@ -56,6 +56,7 @@ </div> </el-card> </div> <!-- 创建任务 --> <el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%"> <el-table ref="table" style="margin-top: 20px;height: 500px;" :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> @@ -70,18 +71,85 @@ <!-- <el-table-column prop="lackCount" align="center" :label="$t('hellow.missingnumber')" min-width="80"/> --> <el-table-column fixed="right" :label="$t('hellow.operate')" align="center" width="270"> <template #default="scope"> <el-button size="mini" type="text" plain @click="finisha(scope.row)">{{ $t('hellow.claimquest') }}</el-button> <el-button size="mini" type="text" plain @click="handletake(scope.row)">{{ $t('hellow.claimquest') }}</el-button> <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">{{ $t('hellow.missingfilms') }} </el-button> <el-button size="mini" type="text" plain @click="finishb(scope.row)">{{ <el-button size="mini" type="text" plain @click="handleout(scope.row)">{{ $t('hellow.forcedfilming') }} </el-button> </template> </el-table-column> </el-table> </el-dialog> <!-- 领取任务 --> <el-dialog v-model="dialogFormVisiblec" top="21vh" width="40%" :title="$t('hellow.claimquest')"> <div style="margin-left: 20px;margin-top: 10px;margin-bottom: 10px;"> <el-form size="mini" label-width="100px"> <el-form label-width="210px" label-position="right"> <el-form-item :label="$t('hellow.pairQuantity')" :required="true" style="width: 25vw"> <el-input :placeholder="$t('hellow.cpairQuantity')" v-model="totalPairQuantity" autocomplete="off" /> </el-form-item> <el-form-item :label="$t('hellow.route')" :required="true" style="width: 25vw;"> <el-select :placeholder="$t('hellow.croute')" style="width: 270px" v-model="cell"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> </el-form> </el-form> </div> <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="finisha"> {{ $t('reportWork.sure') }} </el-button> <el-button @click="dialogFormVisiblec = false">{{ $t('reportWork.cancel') }}</el-button> </div> </template> </el-dialog> <!-- 强制出片 --> <el-dialog v-model="dialogFormVisibled" top="21vh" width="40%" :title="$t('hellow.forcedfilming')"> <div style="margin-left: 20px;margin-top: 10px;margin-bottom: 10px;"> <el-form size="mini" label-width="100px"> <el-form label-width="210px" label-position="right"> <el-form-item :label="$t('hellow.pairQuantity')" :required="true" style="width: 25vw"> <el-input :placeholder="$t('hellow.cpairQuantity')" v-model="totalPairQuantity" autocomplete="off" /> </el-form-item> <el-form-item :label="$t('hellow.route')" :required="true" style="width: 25vw;"> <el-select :placeholder="$t('hellow.croute')" style="width: 270px" v-model="cell"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> </el-form> </el-form> </div> <template #footer> <div id="dialog-footer"> <el-button type="primary" @click="finishb"> {{ $t('reportWork.sure') }} </el-button> <el-button @click="dialogFormVisibled = false">{{ $t('reportWork.cancel') }}</el-button> </div> </template> </el-dialog> <el-dialog v-model="dialogFormVisibleb" top="7vh" width="70%" height="500"> <div style="margin-top: -20px;text-align: center;margin-left: 400px;"> @@ -103,6 +171,7 @@ </div> </el-table> </el-dialog> <!-- 开始任务 --> <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('hellow.pstarttask')"> <template #footer> <div id="dialog-footer"> @@ -113,6 +182,7 @@ </div> </template> </el-dialog> <!-- 停止任务 --> <el-dialog v-model="blindb" top="30vh" width="25%" :title="$t('hellow.pstoptask')"> <template #footer> <div id="dialog-footer"> @@ -137,10 +207,27 @@ const tableDatab = ref([]) const tableDatac = ref([]) const flowCard = ref('') const cell = ref('') const totalPairQuantity = ref('') const dialogFormVisiblea = ref(false) const dialogFormVisibleb = ref(false) const dialogFormVisiblec = ref(false) const dialogFormVisibled = ref(false) const currentRow = reactive({}); // 当前行的数据 const options = [ { value: 930, label: 930, }, { value: 931, label: 931, }, { value: 932, label: 932, } ] let socket = null; // const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/screen`; // const handleMessage = (data) => { @@ -175,9 +262,19 @@ }; const handleBindRack = (row) => { const { flowCardId, layer } = row; currentRow.flowCardId = row.flowCardId; // 直接设置响应式属性 currentRow.flowCardId = row.flowCardId; dialogFormVisibleb.value = true; fetchFlowBind(flowCardId, layer); }; // 领取任务 const handletake = (row) => { window.localStorage.setItem('flowCardId', row.flowCardId) dialogFormVisiblec.value = true; }; // 强制出片 const handleout = (row) => { window.localStorage.setItem('flowCardId', row.flowCardId) dialogFormVisibled.value = true; }; // 创建任务 const fetchFlowCardId = async () => { @@ -237,53 +334,41 @@ } } // 领取任务 const finisha = async (row) => { const finisha = async () => { let flowCardId = window.localStorage.getItem('flowCardId') try { const confirmResult = await ElMessageBox.confirm( t('hellow.pclaimquest'), t('searchOrder.prompt'), { confirmButtonText: t('searchOrder.yes'), cancelButtonText: t('searchOrder.cancel'), type: 'warning', var url="/hollowGlass/hollowGlassOutRelationInfo/receiveTask?cell="+cell.value + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantity.value; const response = await request.post(url) if (response.code == 200) { ElMessage.success(response.message); dialogFormVisiblec.value = false; cell.value = ''; totalPairQuantity.value = ''; } else { ElMessage.error(response.message); } ); if (confirmResult === 'confirm') { const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/finishBigStorageCageDetails", row) if (response.code === 200) { ElMessage.success(response.message); } else { ElMessage.error(response.message); } catch (error) { console.error(error); } } } catch (error) { console.error('发生错误:', error); } }; // 强制出片 const finishb = async (row) => { const finishb = async () => { let flowCardId = window.localStorage.getItem('flowCardId') try { const confirmResult = await ElMessageBox.confirm( t('hellow.pforcedfilming'), t('searchOrder.prompt'), { confirmButtonText: t('searchOrder.yes'), cancelButtonText: t('searchOrder.cancel'), type: 'warning', var url="/hollowGlass/hollowGlassOutRelationInfo/forceOutGlass?cell="+cell.value + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantity.value; const response = await request.post(url) if (response.code == 200) { ElMessage.success(response.message); dialogFormVisibled.value = false; cell.value = ''; totalPairQuantity.value = ''; } else { ElMessage.error(response.message); } ); if (confirmResult === 'confirm') { const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/finishBigStorageCageDetails", row) if (response.code === 200) { ElMessage.success(response.message); } else { ElMessage.error(response.message); } catch (error) { console.error(error); } } } catch (error) { console.error('发生错误:', error); } }; onUnmounted(() => { socket.close(); }); @@ -302,4 +387,8 @@ }); </script> <style scoped></style> <style scoped> #dialog-footer { text-align: center; margin-top: -15px; }</style> hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -114,14 +114,16 @@ { List<TemperingGlassInfo> result=null; QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>(); wrapper.select("Top 1 *").in("state",1,0).eq("temperingLayoutId",id); wrapper.select("Top 1 *").in("state",1,0).eq("tempering_layout_id",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()); .eq("tempering_layout_id", id) .orderByDesc("tempering_layout_id") .orderByAsc("tempering_feed_sequence"); return temperingMapper.selectList(glassinfo); // result= temperingMapper.selectByEngineerIdAndLayoutId(glass.getEngineerId(),glass.getTemperingLayoutId()); } return result; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -872,73 +872,4 @@ } } // @Scheduled(fixedDelay = 1000) public void CacheGlassTasks() { JSONObject jsonObject = new JSONObject(); List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory(); jsonObject.append("currentCutTerritory", currentCutTerritorys); //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys); //卧室缓存笼内信息 List<Map<String, Object>> EdgStorageCageinfos = edgStorageCageService.selectEdgStorageCages(); jsonObject.append("EdgStorageCageinfos", EdgStorageCageinfos); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlass"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("Home is closed"); } } } } // @Scheduled(fixedDelay = 1000) public void cacheGlassIsRun() { JSONObject jsonObject = new JSONObject(); //正在进行的任务 List<EdgGlassTaskInfo> taskCaches = edgGlassTaskInfoService.selectTaskCacheIsRun(); jsonObject.append("taskCaches", taskCaches); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlassIsRun"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); } else { log.info("Home is closed"); } } } } // @Scheduled(fixedDelay = 1000) public void CacheGlassTaskss() { JSONObject jsonObject = new JSONObject(); //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys); //磨边信息 List<EdgGlassTaskInfo> edgTasks = edgGlassTaskInfoService.selectEdgInfo(); jsonObject.append("edgTasks", edgTasks); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("edgTasks"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("edgTasks is closed"); } } } } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
New file @@ -0,0 +1,103 @@ package com.mes.job; import cn.hutool.json.JSONObject; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; import com.mes.edgstoragecage.service.EdgStorageCageService; import com.mes.tools.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @Author : zhoush * @Date: 2024/12/4 9:41 * @Description: */ @Component @Slf4j public class PushMessageToIndex { @Resource EdgStorageCageDetailsService edgStorageCageDetailsService; @Resource EdgStorageCageService edgStorageCageService; @Resource EdgGlassTaskInfoService edgGlassTaskInfoService; @Scheduled(fixedDelay = 1000) public void CacheGlassTasks() { JSONObject jsonObject = new JSONObject(); List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory(); jsonObject.append("currentCutTerritory", currentCutTerritorys); //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys); //卧室缓存笼内信息 List<Map<String, Object>> EdgStorageCageinfos = edgStorageCageService.selectEdgStorageCages(); jsonObject.append("EdgStorageCageinfos", EdgStorageCageinfos); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlass"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("Home is closed"); } } } } @Scheduled(fixedDelay = 1000) public void cacheGlassIsRun() { JSONObject jsonObject = new JSONObject(); //正在进行的任务 List<EdgGlassTaskInfo> taskCaches = edgGlassTaskInfoService.selectTaskCacheIsRun(); jsonObject.append("taskCaches", taskCaches); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlassIsRun"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); } else { log.info("Home is closed"); } } } } @Scheduled(fixedDelay = 1000) public void CacheGlassTaskss() { JSONObject jsonObject = new JSONObject(); //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys); //磨边信息 List<EdgGlassTaskInfo> edgTasks = edgGlassTaskInfoService.selectEdgInfo(); jsonObject.append("edgTasks", edgTasks); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("edgTasks"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("edgTasks is closed"); } } } } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java
@@ -1,14 +1,12 @@ package com.mes.job.opccallback; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; import com.mes.common.config.Const; import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo; import com.mes.edgglasstaskqueueinfo.service.EdgGlassTaskQueueInfoService; import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; @@ -54,7 +52,7 @@ EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService; @Resource EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService; EdgGlassTaskInfoService edgGlassTaskInfoService; @Value("${mes.glassGap}") private int glassGap; @@ -68,263 +66,263 @@ @Override public void onSubscribe(String identifier, Object value) { log.info("当前正在执行的任务为{}", value); String tableName = identifier.contains("edg_storage_device_one_task") ? EDG_STORAGE_DEVICE_ONE_TASK : EDG_STORAGE_DEVICE_TWO_TASK; int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2; EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName); try { if (task == null) { log.info("任务表基础数据录入失败,请检查数据是否录入成功"); return; } if (task.getTaskState() == 2) { //防止出片任务且笼前有玻璃的情况,将进片id置空,即出片仅考虑笼内的玻璃 task.setGlassIdIn(""); } int request = Integer.parseInt("" + value); log.info("开始执行任务,任务请信息为{}", task); if (request == 0) { log.info("未收到任务请求,结束本次任务"); } else if (request == 1) { //进片任务 log.info("进片任务:进片玻璃id为:{}", task.getGlassIdIn()); intoTask(task, tableName, device); } else if (request == 2) { //出片任务 outTask(task, tableName, device); } else if (request == 3) { //直通任务 if (!outTask(task, tableName, device)) { intoTask(task, tableName, device); } } else if (request == 4) { log.info("将启动子改为0"); task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING); edgStorageDeviceTaskService.updateTaskMessage(tableName, task); } else { finishTask(task, tableName); } } catch (Exception e) { log.info("执行任务过程中发生异常,任务字{},{}", task.getTaskState(), e.getMessage()); log.info("将启动子改为0"); task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY); edgStorageDeviceTaskService.updateTaskMessage(tableName, task); } // log.info("当前正在执行的任务为{}", value); // String tableName = identifier.contains("edg_storage_device_one_task") ? EDG_STORAGE_DEVICE_ONE_TASK : EDG_STORAGE_DEVICE_TWO_TASK; // int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2; // EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName); // try { // if (task == null) { // log.info("任务表基础数据录入失败,请检查数据是否录入成功"); // return; // } // if (task.getTaskState() == 2) { // //防止出片任务且笼前有玻璃的情况,将进片id置空,即出片仅考虑笼内的玻璃 // task.setGlassIdIn(""); // } // int request = Integer.parseInt("" + value); // log.info("开始执行任务,任务请信息为{}", task); // if (request == 0) { // log.info("未收到任务请求,结束本次任务"); // } else if (request == 1) { // //进片任务 // log.info("进片任务:进片玻璃id为:{}", task.getGlassIdIn()); // intoTask(task, tableName, device); // } else if (request == 2) { // //出片任务 // outTask(task, tableName, device); // } else if (request == 3) { // //直通任务 // if (!outTask(task, tableName, device)) { // intoTask(task, tableName, device); // } // } else if (request == 4) { // log.info("将启动子改为0"); // task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING); // edgStorageDeviceTaskService.updateTaskMessage(tableName, task); // } else { // finishTask(task, tableName); // } // } catch (Exception e) { // log.info("执行任务过程中发生异常,任务字{},{}", task.getTaskState(), e.getMessage()); // log.info("将启动子改为0"); // task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY); // edgStorageDeviceTaskService.updateTaskMessage(tableName, task); // } } private boolean intoTask(EdgStorageDeviceTask task, String tableName, int deviceId) { //获取玻璃的基本信息 GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn())); if (null == glassInfo) { log.info("进片玻璃信息不存在,玻璃id:{}", task.getGlassIdIn()); return Boolean.FALSE; } //获取当前进片玻璃id和进片格子 相同尺寸可以放下的格子 EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(deviceId, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell()); if (edgStorageCage == null) { log.info("相同尺寸可以放下的格子未找到,格子id:{}", task.getCurrentCell()); // SELECT * from edg_storage_cage where device_id = 1 and remain_width > 1000 order by abs(slot - 10) List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>() .eq(EdgStorageCage::getDeviceId, deviceId) .eq(EdgStorageCage::getEnableState, Const.SLOT_ON) .ge(EdgStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())).last("order by abs(slot - " + task.getCurrentCell() + ")")); // //直通任务 // if (flag && CollectionUtil.isNotEmpty(emptyList)) { // return emptyList.get(0); // //获取玻璃的基本信息 // GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn())); // if (null == glassInfo) { // log.info("进片玻璃信息不存在,玻璃id:{}", task.getGlassIdIn()); // return Boolean.FALSE; // } // //获取当前进片玻璃id和进片格子 相同尺寸可以放下的格子 // EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(deviceId, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell()); // if (edgStorageCage == null) { // log.info("相同尺寸可以放下的格子未找到,格子id:{}", task.getCurrentCell()); //// SELECT * from edg_storage_cage where device_id = 1 and remain_width > 1000 order by abs(slot - 10) // List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>() // .eq(EdgStorageCage::getDeviceId, deviceId) // .eq(EdgStorageCage::getEnableState, Const.SLOT_ON) // .ge(EdgStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())).last("order by abs(slot - " + task.getCurrentCell() + ")")); //// //直通任务 //// if (flag && CollectionUtil.isNotEmpty(emptyList)) { //// return emptyList.get(0); //// } // if (CollectionUtil.isEmpty(storageCageList) || storageCageList.size() == 1) { // log.info("没有多余的空格子"); // return Boolean.FALSE; // } if (CollectionUtil.isEmpty(storageCageList) || storageCageList.size() == 1) { log.info("没有多余的空格子"); return Boolean.FALSE; } edgStorageCage = storageCageList.get(0); } log.info("4、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo); EdgStorageCageDetails details = new EdgStorageCageDetails(); BeanUtils.copyProperties(glassInfo, details); details.setState(Const.GLASS_STATE_IN); details.setSlot(edgStorageCage.getSlot()); details.setDeviceId(edgStorageCage.getDeviceId()); edgStorageCageDetailsService.save(details); //更新任务信息 task.setStartCell(edgStorageCage.getSlot()); task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN); edgStorageDeviceTaskService.updateTaskMessage(tableName, task); saveHistoryTask(task); // edgStorageCage = storageCageList.get(0); // } // log.info("4、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo); // EdgStorageCageDetails details = new EdgStorageCageDetails(); // BeanUtils.copyProperties(glassInfo, details); // details.setState(Const.GLASS_STATE_IN); // details.setSlot(edgStorageCage.getSlot()); // details.setDeviceId(edgStorageCage.getDeviceId()); // edgStorageCageDetailsService.save(details); // // //更新任务信息 // task.setStartCell(edgStorageCage.getSlot()); // task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN); // edgStorageDeviceTaskService.updateTaskMessage(tableName, task); // saveHistoryTask(task); return Boolean.TRUE; } private boolean outTask(EdgStorageDeviceTask task, String tableName, int deviceId) { EdgStorageCageDetails edgStorageCageDetails = null; //笼内是版图相差是否超过阈值 boolean flag = queryMaxMinDiff(threshold); if (flag) { EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON) .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) .eq(EdgStorageCageDetails::getDeviceId, deviceId) .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId) .orderBy(Boolean.TRUE, Boolean.TRUE, EdgStorageCageDetails::getTemperingFeedSequence) .last("limit 1")); // select * from edg_storage_cage_details where width = 551 and height = 1151 and id in (select min(id ) from edg_storage_cage_details where state = 100 group by slot ) edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getWidth, minEdgDetails.getWidth()) .eq(EdgStorageCageDetails::getHeight, minEdgDetails.getHeight()) .eq(EdgStorageCageDetails::getDeviceId, deviceId) .inSql(EdgStorageCageDetails::getId, "select min(id) from edg_storage_cage_details where state = 100 group by slot ") .last("order by abs(slot - " + task.getCurrentCell() + ") asc limit 1") ); //给直通任务 if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) { GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() .eq(GlassInfo::getGlassId, task.getGlassIdIn()) .eq(GlassInfo::getWidth, minEdgDetails.getWidth()) .eq(GlassInfo::getHeight, minEdgDetails.getHeight())); if (null != glassInInfo) { edgStorageCageDetails = new EdgStorageCageDetails(); BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails); } } if (null == edgStorageCageDetails) { edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) .eq(EdgStorageCageDetails::getDeviceId, deviceId) .eq(EdgStorageCageDetails::getSlot, minEdgDetails.getSlot()) .orderByAsc(EdgStorageCageDetails::getId) .last("limit 1") ); } } if (null == edgStorageCageDetails) { // 获取上次任务 // 获取历史表中上次任务最后一片尺寸 EdgStorageDeviceTaskHistory edgeData = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>() .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS) .in(EdgStorageDeviceTaskHistory::getTaskType, Const.GLASS_CACHE_TYPE_OUT, Const.GLASS_CACHE_TYPE_THROUGH) .orderByDesc(EdgStorageDeviceTaskHistory::getId).last("limit 1")); if (null != edgeData) { GlassInfo glassOutInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut())); //笼内的玻璃的尺寸是否和上一次任务一致 edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), glassOutInfo.getWidth(), glassOutInfo.getHeight()); if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) { GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() .eq(GlassInfo::getGlassId, task.getGlassIdIn()) .eq(GlassInfo::getWidth, glassOutInfo.getWidth()) .eq(GlassInfo::getHeight, glassOutInfo.getHeight())); if (null != glassInInfo) { edgStorageCageDetails = new EdgStorageCageDetails(); BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails); } } } } if (null == edgStorageCageDetails) { edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0); } if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) { //和上次任务不存在相同尺寸 GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn())); edgStorageCageDetails = new EdgStorageCageDetails(); BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails); } if (edgStorageCageDetails == null) { //和上次任务不存在相同尺寸 log.info("笼内没有玻璃了"); return Boolean.FALSE; } int taskType = Const.GLASS_CACHE_TYPE_OUT; String glassId = edgStorageCageDetails.getGlassId(); if (glassId.equals(task.getGlassIdIn())) { if (3 != task.getTaskState()) { return Boolean.FALSE; } log.info("5、直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", edgStorageCageDetails); //玻璃信息替换 String glassIdChange = queryAndChangeGlass(glassId); //处理在卧理内的玻璃信息:笼内的数据处理 queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange); if (StringUtils.isNotBlank(glassIdChange)) { edgStorageCageDetails = new EdgStorageCageDetails(); GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); BeanUtils.copyProperties(one, edgStorageCageDetails); } EdgStorageCage storageCage = edgStorageCageService.getOne(new LambdaQueryWrapper<EdgStorageCage>() .eq(EdgStorageCage::getDeviceId, deviceId) .eq(EdgStorageCage::getEnableState, Const.SLOT_ON) .ge(EdgStorageCage::getRemainWidth, cellLength) .last("order by abs(slot - " + task.getCurrentCell() + ") limit 1")); Assert.isTrue(null != storageCage, "格子已满,无法执行直通任务"); log.info("3、查询卧式理片笼里面的空格:{}", storageCage); edgStorageCageDetails.setSlot(storageCage.getSlot()); edgStorageCageDetails.setDeviceId(storageCage.getDeviceId()); edgStorageCageDetails.setState(Const.GLASS_STATE_OUT); edgStorageCageDetailsService.save(edgStorageCageDetails); taskType = Const.GLASS_CACHE_TYPE_THROUGH; } else { log.info("5、非直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", edgStorageCageDetails); if (!edgStorageCageDetails.getSlot().equals(task.getCurrentCell())) { EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) .eq(EdgStorageCageDetails::getDeviceId, deviceId) .eq(EdgStorageCageDetails::getSlot, task.getCurrentCell()).eq(EdgStorageCageDetails::getWidth, edgStorageCageDetails.getWidth()) .eq(EdgStorageCageDetails::getHeight, edgStorageCageDetails.getHeight()).eq(EdgStorageCageDetails::getThickness, edgStorageCageDetails.getThickness()) .orderByAsc(EdgStorageCageDetails::getId).last("limit 1") ); if (null != currentGlass) { edgStorageCageDetails = currentGlass; } } //玻璃信息替换 String glassIdChange = queryAndChangeGlass(edgStorageCageDetails.getGlassId()); //处理在卧理内的玻璃信息:笼内的数据处理 queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange); LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT); edgStorageCageDetailsService.update(wrapper); log.info("5、更新出片玻璃的状态为{}", Const.GLASS_STATE_OUT); } //生成出片任务 task.setGlassIdOut(edgStorageCageDetails.getGlassId()); task.setStartCell(edgStorageCageDetails.getSlot()); task.setTaskRunning(taskType); edgStorageDeviceTaskService.updateTaskMessage(tableName, task); saveHistoryTask(task); //更新详情表任务出片中 edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>() .set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT) .eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId())); //磨边对列表新增一条数据 EdgGlassTaskQueueInfo edgInfo = new EdgGlassTaskQueueInfo(); BeanUtils.copyProperties(task, edgInfo); edgInfo.setCreateTime(new Date()); edgInfo.setWidth((int) edgStorageCageDetails.getWidth()); edgInfo.setHeight((int) edgStorageCageDetails.getWidth()); edgInfo.setThickness((int) edgStorageCageDetails.getWidth()); edgInfo.setState(Const.GLASS_STATE_NEW); edgGlassTaskQueueInfoService.save(edgInfo); // EdgStorageCageDetails edgStorageCageDetails = null; // //笼内是版图相差是否超过阈值 // boolean flag = queryMaxMinDiff(threshold); // if (flag) { // EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() // .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON) // .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) // .eq(EdgStorageCageDetails::getDeviceId, deviceId) // .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId) // .orderBy(Boolean.TRUE, Boolean.TRUE, EdgStorageCageDetails::getTemperingFeedSequence) // .last("limit 1")); //// select * from edg_storage_cage_details where width = 551 and height = 1151 and id in (select min(id ) from edg_storage_cage_details where state = 100 group by slot ) // edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() // .eq(EdgStorageCageDetails::getWidth, minEdgDetails.getWidth()) // .eq(EdgStorageCageDetails::getHeight, minEdgDetails.getHeight()) // .eq(EdgStorageCageDetails::getDeviceId, deviceId) // .inSql(EdgStorageCageDetails::getId, "select min(id) from edg_storage_cage_details where state = 100 group by slot ") // .last("order by abs(slot - " + task.getCurrentCell() + ") asc limit 1") // ); // //给直通任务 // if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) { // GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() // .eq(GlassInfo::getGlassId, task.getGlassIdIn()) // .eq(GlassInfo::getWidth, minEdgDetails.getWidth()) // .eq(GlassInfo::getHeight, minEdgDetails.getHeight())); // if (null != glassInInfo) { // edgStorageCageDetails = new EdgStorageCageDetails(); // BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails); // } // } // if (null == edgStorageCageDetails) { // edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() // .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) // .eq(EdgStorageCageDetails::getDeviceId, deviceId) // .eq(EdgStorageCageDetails::getSlot, minEdgDetails.getSlot()) // .orderByAsc(EdgStorageCageDetails::getId) // .last("limit 1") // ); // } // } // if (null == edgStorageCageDetails) { // // 获取上次任务 //// 获取历史表中上次任务最后一片尺寸 // EdgStorageDeviceTaskHistory edgeData = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>() // .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS) // .in(EdgStorageDeviceTaskHistory::getTaskType, Const.GLASS_CACHE_TYPE_OUT, Const.GLASS_CACHE_TYPE_THROUGH) // .orderByDesc(EdgStorageDeviceTaskHistory::getId).last("limit 1")); // if (null != edgeData) { // GlassInfo glassOutInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut())); // //笼内的玻璃的尺寸是否和上一次任务一致 // edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), glassOutInfo.getWidth(), glassOutInfo.getHeight()); // if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) { // GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>() // .eq(GlassInfo::getGlassId, task.getGlassIdIn()) // .eq(GlassInfo::getWidth, glassOutInfo.getWidth()) // .eq(GlassInfo::getHeight, glassOutInfo.getHeight())); // if (null != glassInInfo) { // edgStorageCageDetails = new EdgStorageCageDetails(); // BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails); // } // } // } // } // if (null == edgStorageCageDetails) { // edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0); // } // if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) { // //和上次任务不存在相同尺寸 // GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn())); // edgStorageCageDetails = new EdgStorageCageDetails(); // BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails); // } // if (edgStorageCageDetails == null) { // //和上次任务不存在相同尺寸 // log.info("笼内没有玻璃了"); // return Boolean.FALSE; // } // int taskType = Const.GLASS_CACHE_TYPE_OUT; // String glassId = edgStorageCageDetails.getGlassId(); // if (glassId.equals(task.getGlassIdIn())) { // if (3 != task.getTaskState()) { // return Boolean.FALSE; // } // log.info("5、直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", edgStorageCageDetails); // //玻璃信息替换 // String glassIdChange = queryAndChangeGlass(glassId); // //处理在卧理内的玻璃信息:笼内的数据处理 // queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange); // if (StringUtils.isNotBlank(glassIdChange)) { // edgStorageCageDetails = new EdgStorageCageDetails(); // GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); // BeanUtils.copyProperties(one, edgStorageCageDetails); // } // EdgStorageCage storageCage = edgStorageCageService.getOne(new LambdaQueryWrapper<EdgStorageCage>() // .eq(EdgStorageCage::getDeviceId, deviceId) // .eq(EdgStorageCage::getEnableState, Const.SLOT_ON) // .ge(EdgStorageCage::getRemainWidth, cellLength) // .last("order by abs(slot - " + task.getCurrentCell() + ") limit 1")); // Assert.isTrue(null != storageCage, "格子已满,无法执行直通任务"); // log.info("3、查询卧式理片笼里面的空格:{}", storageCage); // edgStorageCageDetails.setSlot(storageCage.getSlot()); // edgStorageCageDetails.setDeviceId(storageCage.getDeviceId()); // edgStorageCageDetails.setState(Const.GLASS_STATE_OUT); // edgStorageCageDetailsService.save(edgStorageCageDetails); // taskType = Const.GLASS_CACHE_TYPE_THROUGH; // } else { // log.info("5、非直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", edgStorageCageDetails); // if (!edgStorageCageDetails.getSlot().equals(task.getCurrentCell())) { // EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>() // .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN) // .eq(EdgStorageCageDetails::getDeviceId, deviceId) // .eq(EdgStorageCageDetails::getSlot, task.getCurrentCell()).eq(EdgStorageCageDetails::getWidth, edgStorageCageDetails.getWidth()) // .eq(EdgStorageCageDetails::getHeight, edgStorageCageDetails.getHeight()).eq(EdgStorageCageDetails::getThickness, edgStorageCageDetails.getThickness()) // .orderByAsc(EdgStorageCageDetails::getId).last("limit 1") // ); // if (null != currentGlass) { // edgStorageCageDetails = currentGlass; // } // } // //玻璃信息替换 // String glassIdChange = queryAndChangeGlass(edgStorageCageDetails.getGlassId()); // //处理在卧理内的玻璃信息:笼内的数据处理 // queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange); // LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>(); // wrapper.eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT); // edgStorageCageDetailsService.update(wrapper); // log.info("5、更新出片玻璃的状态为{}", Const.GLASS_STATE_OUT); // } // //生成出片任务 // task.setGlassIdOut(edgStorageCageDetails.getGlassId()); // task.setStartCell(edgStorageCageDetails.getSlot()); // task.setTaskRunning(taskType); // // edgStorageDeviceTaskService.updateTaskMessage(tableName, task); // saveHistoryTask(task); // //更新详情表任务出片中 // edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>() // .set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT) // .eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId())); // //磨边对列表新增一条数据 // EdgGlassTaskQueueInfo edgInfo = new EdgGlassTaskQueueInfo(); // BeanUtils.copyProperties(task, edgInfo); // edgInfo.setCreateTime(new Date()); // edgInfo.setWidth((int) edgStorageCageDetails.getWidth()); // edgInfo.setHeight((int) edgStorageCageDetails.getWidth()); // edgInfo.setThickness((int) edgStorageCageDetails.getWidth()); // edgInfo.setState(Const.GLASS_STATE_NEW); // edgGlassTaskQueueInfoService.save(edgInfo); return Boolean.TRUE; } private boolean finishTask(EdgStorageDeviceTask task, String tableName) { log.info("当前任务信息为:{}", task); if (task.getTaskState() <= 4) { log.info("有正在执行的任务,结束"); return Boolean.FALSE; } Integer cell = task.getStartCell(); Integer state = task.getTaskState(); task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); task.setGlassIdOut(""); task.setStartCell(0); edgStorageDeviceTaskService.updateTaskMessage(tableName, task); edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>() .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) .set(EdgStorageDeviceTaskHistory::getTaskState, Const.GLASS_CACHE_TYPE_FINISH.equals(state) ? Const.RAW_GLASS_TASK_SUCCESS : Const.RAW_GLASS_TASK_FAILURE) ); int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2; updateCellRemainWidth(cell, device); // log.info("当前任务信息为:{}", task); // if (task.getTaskState() <= 4) { // log.info("有正在执行的任务,结束"); // return Boolean.FALSE; // } // Integer cell = task.getStartCell(); // Integer state = task.getTaskState(); // task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); // task.setGlassIdOut(""); // task.setStartCell(0); // edgStorageDeviceTaskService.updateTaskMessage(tableName, task); // edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>() // .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) // .set(EdgStorageDeviceTaskHistory::getTaskState, // Const.GLASS_CACHE_TYPE_FINISH.equals(state) ? Const.RAW_GLASS_TASK_SUCCESS : Const.RAW_GLASS_TASK_FAILURE) // ); // int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2; // updateCellRemainWidth(cell, device); return Boolean.TRUE; } @@ -335,34 +333,34 @@ * @return */ public String queryAndChangeGlass(String glassId) { GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); // .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")); Assert.isFalse(null == glassInfo, "玻璃信息不存在"); //按照玻璃尺寸 LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>() .eq(GlassInfo::getWidth, glassInfo.getWidth()) .eq(GlassInfo::getHeight, glassInfo.getHeight()) .eq(GlassInfo::getThickness, glassInfo.getThickness()) .eq(GlassInfo::getFilmsid, glassInfo.getFilmsid()) .eq(GlassInfo::getFlowCardId, glassInfo.getFlowCardId()) .eq(GlassInfo::getTotalLayer, glassInfo.getTotalLayer()) .eq(GlassInfo::getLayer, glassInfo.getLayer()) .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId()) .notInSql(GlassInfo::getGlassId, "select distinct glass_id from edg_storage_cage_details " + "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight() + " and state != 100") .orderByAsc(GlassInfo::getTemperingLayoutId) .orderBy(Boolean.TRUE, Boolean.TRUE, GlassInfo::getTemperingFeedSequence) .last("Limit 1"); GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper); if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) { String swapGlassId = swapGlassInfo.getGlassId(); log.info("将玻璃{}和玻璃{},信息互换,进玻璃 {}", glassInfo, swapGlassInfo, swapGlassInfo); swapGlassInfo.setGlassId(glassId); glassInfo.setGlassId(swapGlassId); glassInfoService.updateById(swapGlassInfo); glassInfoService.updateById(glassInfo); return swapGlassId; } // GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)); //// .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")); // Assert.isFalse(null == glassInfo, "玻璃信息不存在"); //按照玻璃尺寸 // LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>() // .eq(GlassInfo::getWidth, glassInfo.getWidth()) // .eq(GlassInfo::getHeight, glassInfo.getHeight()) // .eq(GlassInfo::getThickness, glassInfo.getThickness()) // .eq(GlassInfo::getFilmsid, glassInfo.getFilmsid()) // .eq(GlassInfo::getFlowCardId, glassInfo.getFlowCardId()) // .eq(GlassInfo::getTotalLayer, glassInfo.getTotalLayer()) // .eq(GlassInfo::getLayer, glassInfo.getLayer()) // .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId()) // .notInSql(GlassInfo::getGlassId, "select distinct glass_id from edg_storage_cage_details " + // "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight() // + " and state != 100") // .orderByAsc(GlassInfo::getTemperingLayoutId) // .orderBy(Boolean.TRUE, Boolean.TRUE, GlassInfo::getTemperingFeedSequence) // .last("Limit 1"); // GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper); // if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) { // String swapGlassId = swapGlassInfo.getGlassId(); // log.info("将玻璃{}和玻璃{},信息互换,进玻璃 {}", glassInfo, swapGlassInfo, swapGlassInfo); // swapGlassInfo.setGlassId(glassId); // glassInfo.setGlassId(swapGlassId); // glassInfoService.updateById(swapGlassInfo); // glassInfoService.updateById(glassInfo); // return swapGlassId; // } return ""; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassTestCallback.java
File was deleted hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
@@ -300,7 +300,7 @@ int sequence = -1; int startSlot = -1; for (BigStorageSequenceDTO item : sequenceDTOList) { if (item.getMinSequence() == sequence + 1) { if (item.getMaxSequence() == sequence - 1) { //生成调度任务 int targetSlot = item.getSlot(); list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() @@ -311,7 +311,7 @@ updateSlotRemainBySlots(slotList); break loop; } sequence = item.getMaxSequence(); sequence = item.getMinSequence(); startSlot = item.getSlot(); } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -170,6 +170,6 @@ (select engineer_id, tempering_layout_id, tempering_feed_sequence from glass_id_temp) and t.state = 100 group by t.slot order by max_sequence order by max_sequence desc </select> </mapper> hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java
@@ -55,5 +55,5 @@ boolean pauseTask(String engineerId, Integer state); boolean changeTask(String engineerId, Integer state, Integer filmRemove, Integer stationCell); // boolean changeTask(String engineerId, Integer state, Integer filmRemove, Integer stationCell); } hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
@@ -5,17 +5,17 @@ strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源. datasource: hangzhoumes: url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8 url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8 username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver pp: url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8 url: jdbc:mysql://127.0.0.1:3306/pp?serverTimezone=GMT%2b8 username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver sd: url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8 url: jdbc:mysql://127.0.0.1:3306/sd?serverTimezone=GMT%2b8 username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/OpcNGTemperingTask.java
@@ -1,16 +1,18 @@ package com.mes.job; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; import com.mes.common.config.Const; 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.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -41,7 +43,7 @@ * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成) * fixedDelay : 上一个调用结束后再次调用的延时 */ //@Scheduled(fixedDelay = 1000) @Scheduled(fixedDelay = 1000) public void requestTemperingTask() throws Exception { ReadWriteEntity requestInTempering = miloService.readFromOpcUa("GH1S7.GH1S7.requestInTempering");//请求进片 ReadWriteEntity requestTemperingId = miloService.readFromOpcUa("GH1S7.GH1S7.requestTemperingId");//请求进片 炉号ID @@ -50,9 +52,13 @@ if (request == 0) { miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 0));//允许送片清零 } else { if (id == 0){ log.info("炉号不能为0"); return; } ReadWriteEntity placedNumber = miloService.readFromOpcUa("GH1S7.GH1S7.placedNumber");//已摆片数量 List<TemperingGlassInfo> glassList = temperingAgoService.selectGlassInfoById(id); if (glassList.size() == Integer.parseInt(placedNumber.getValue().toString())) { if (Integer.parseInt(placedNumber.getValue().toString()) == glassList.size()) { miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 1));//写入允许送片 } else { miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 2));//不满足进炉条件 @@ -65,16 +71,32 @@ * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成) * fixedDelay : 上一个调用结束后再次调用的延时 */ //@Scheduled(fixedDelay = 1000) @Scheduled(fixedDelay = 1000) public void loadTemperingTask() throws Exception { ReadWriteEntity loadTemperingId = miloService.readFromOpcUa("GH1S7.GH1S7.loadTemperingId");//进片完成 炉号ID getNewTemperingID(Integer.parseInt(loadTemperingId.getValue().toString()));//进片完成 下发参数 } /** * 更新钢化小片表内的玻璃状态 * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成) * fixedDelay : 上一个调用结束后再次调用的延时 */ @Scheduled(fixedDelay = 5000) public void updateTemperingTask() throws Exception { ReadWriteEntity furanchiIdEntity = miloService.readFromOpcUa("GH1S7.GH1S7.Furanch1Id");//进片完成 炉号ID if (StringUtils.isNotBlank(furanchiIdEntity.getValue()+"")){ int temperingid = Integer.parseInt(furanchiIdEntity.getValue().toString()); temperingAgoService.update(new LambdaUpdateWrapper<TemperingGlassInfo>().set(TemperingGlassInfo::getState, Const.TEMPERING_START) .in(TemperingGlassInfo::getState, Const.TEMPERING_OUT, Const.TEMPERING_DROP).eq(TemperingGlassInfo::getTemperingLayoutId,temperingid)); } } //获取到炉号id执行参数下发任务 private void getNewTemperingID(Integer temperingid) throws Exception { ReadWriteEntity AutoStatus = miloService.readFromOpcUa("GH1.GH1.AutoStatus"); if (1 != Integer.parseInt(AutoStatus.getValue().toString())) { ReadWriteEntity autoStatus = miloService.readFromOpcUa("GH1.GH1.AutoStatus"); if (1 != Integer.parseInt(autoStatus.getValue().toString())) { log.info("当前为非联机状态,结束钢化下发参数任务"); return; } @@ -118,7 +140,7 @@ miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.WorkMode", workmode));//写入工位数 miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.FurnaceMode", furmode));//写入炉体工作方式 log.info("炉号" + temperingid + "版面信息尝试下发"); } } } hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-yw.yml
@@ -9,6 +9,11 @@ username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: url: jdbc:sqlserver://192.168.2.100:1433;databasename=mes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver pp: url: jdbc:mysql://192.168.2.100:3306/pp?serverTimezone=GMT%2b8 username: root hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassOutRelationInfoController.java
@@ -35,5 +35,11 @@ return Result.success(hollowGlassOutRelationInfoService.forceOutGlass(flowCardId, cell, totalPairQuantity)); } @ApiOperation("是否调度开关") @PostMapping("/dispatchHollowSwitch") public Result<Boolean> dispatchHollowSwitch(Boolean flag) { return Result.build(200, "修改成功",hollowGlassOutRelationInfoService.dispatchHollowSwitch(flag)); } } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java
@@ -36,8 +36,8 @@ @ApiOperation("查询指定流程卡及层数的缺片详情") @PostMapping("/queryLackByFlowCard") public Result<List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId, int layer) { List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId, layer); public Result<Map<Integer, List<LackDetailsDTO>> > queryLackByFlowCard(String flowCardId) { Map<Integer, List<LackDetailsDTO>> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId); return Result.success(lackDetailsList); } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java
@@ -22,6 +22,6 @@ List<HollowGlassDetailsDTO> queryFlowCardIdLayerGlassInfo(@Param("flowCardId") String flowCardId, @Param("totalLayer") int totalLayer, @Param("layer") int layer); List<LackDetailsDTO> queryLackByFlowCard(String flowCardId, int layer); List<LackDetailsDTO> queryLackByFlowCard(String flowCardId); } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java
@@ -30,7 +30,7 @@ Map<String, List<FlowCardGlassInfoDTO>> queryHollowAllFlowCard(); List<LackDetailsDTO> queryLackByFlowCard(String flowCardId, int layer); Map<Integer, List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId); } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -243,15 +243,10 @@ } @Override public List<LackDetailsDTO> queryLackByFlowCard(String flowCardId, int layer) { return this.baseMapper.queryLackByFlowCard(flowCardId, layer); // return this.list(new LambdaQueryWrapper<HollowGlassRelationInfo>() // .eq(HollowGlassRelationInfo::getFlowCardId,flowCardId) // .eq(HollowGlassRelationInfo::getLayer,layer) // .isNull(HollowGlassRelationInfo::getTemperingLayoutId) // .isNull(HollowGlassRelationInfo::getTemperingFeedSequence) // ); public Map<Integer, List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId) { List<LackDetailsDTO> lackDetailsList = this.baseMapper.queryLackByFlowCard(flowCardId); Map<Integer, List<LackDetailsDTO>> listMap = lackDetailsList.stream().collect(Collectors.groupingBy(LackDetailsDTO::getLayer)); return listMap; } } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
New file @@ -0,0 +1,55 @@ package com.mes.job; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mes.common.config.Const; import com.mes.hollow.entity.HollowGlassOutRelationInfo; import com.mes.hollow.service.HollowGlassOutRelationInfoService; import com.mes.hollowqueue.entity.HollowGlassQueueInfo; import com.mes.hollowqueue.service.HollowGlassQueueInfoService; import com.mes.tools.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Author : zhoush * @Date: 2024/12/4 9:41 * @Description: */ @Component @Slf4j public class PushMessageToIndex { @Resource HollowGlassQueueInfoService hollowGlassQueueInfoService; @Resource HollowGlassOutRelationInfoService hollowGlassOutRelationInfoService; @Scheduled(fixedDelay = 1000) public void CacheGlassTasks() { List<HollowGlassOutRelationInfo> taskList = hollowGlassOutRelationInfoService.list(new LambdaQueryWrapper<HollowGlassOutRelationInfo>() .in(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_START, Const.HOLLOW_FLOW_CARD_PAUSE)); if (CollectionUtil.isEmpty(taskList)){ return; } JSONObject jsonObject = new JSONObject(); List<String> flowCardIdList = taskList.stream().map(HollowGlassOutRelationInfo::getFlowCardId).collect(Collectors.toList()); List<HollowGlassQueueInfo> list = hollowGlassQueueInfoService.list(new LambdaQueryWrapper<HollowGlassQueueInfo>().in(HollowGlassQueueInfo::getFlowCardId, flowCardIdList)); Map<Integer, List<HollowGlassQueueInfo>> listMap = list.stream().collect(Collectors.groupingBy(HollowGlassQueueInfo::getCell)); jsonObject.append("HollowGlass",listMap); List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("HollowGlass"); if (CollectionUtil.isNotEmpty(sendwServer)) { WebSocketServer socketServer = sendwServer.get(0); if (socketServer != null && socketServer.session.isOpen()) { socketServer.sendMessage(jsonObject.toString()); } } } } hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@ spring: profiles: active: yw active: dev application: name: hollowGlass liquibase: @@ -35,7 +35,7 @@ port: 5000 kangaroohy: milo: enabled: true enabled: false primary: default config: default: hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
@@ -39,52 +39,25 @@ </update> <select id="hollowIsAll" resultMap="baseMap"> WITH sum_flow_layer_count AS ( SELECT flow_card_id, layer, min( films_id ) AS films_id, count(*) AS sum_count FROM hollow_glass_relation_info GROUP BY flow_card_id, layer ), real_flow_layer_count AS ( SELECT flow_card_id, layer, count(*) AS real_count FROM hollow_glass_relation_info WHERE tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL GROUP BY flow_card_id, layer ), damage_flow_layer_count AS ( SELECT process_id AS flow_card_id, technology_number AS layer, count(*) damage_count FROM damage GROUP BY process_id, technology_number ), WITH sum_flow_layer_count AS ( SELECT flow_card_id, layer, min( films_id ) AS films_id, count(*) AS sum_count FROM hollow_glass_relation_info GROUP BY flow_card_id, layer ), real_flow_layer_count AS ( SELECT flow_card_id, layer, count(*) AS real_count FROM hollow_glass_relation_info WHERE tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL GROUP BY flow_card_id, layer ), damage_flow_layer_count AS ( SELECT process_id AS flow_card_id, technology_number AS layer, count(*) as damage_count FROM damage GROUP BY process_id, technology_number ) , lack_flow_layer_count AS ( SELECT t.flow_card_id, t.layer, ( sum_count - real_count - damage_count ) AS lack_count ifnull((sum_count - real_count - ifnull(damage_count,0)),0) AS lack_count FROM sum_flow_layer_count t INNER JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id left JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id AND t.layer = t1.layer INNER JOIN damage_flow_layer_count t2 ON t1.flow_card_id = t2.flow_card_id left JOIN damage_flow_layer_count t2 ON t1.flow_card_id = t2.flow_card_id AND t1.layer = t2.layer ), layer_one AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 1 AND tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL ), layer_two AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 2 AND tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL ), layer_three AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 3 AND tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL ) layer_one AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 1 AND tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL ), layer_two AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 2 AND tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL ), layer_three AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 3 AND tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL ) , pair_flow_layer_count AS ( SELECT @@ -102,25 +75,25 @@ </if> GROUP BY t.flow_card_id ) ,result_flow_layer_count AS ( ), result_flow_layer_count AS ( SELECT t.flow_card_id, t.layer, t.films_id, sum_count, t3.pair_count, IFNULL(real_count,0) as real_count, IFNULL(damage_count,0) as damage_count, IFNULL(lack_count,0) as lack_count IFNULL( t3.pair_count, 0 ) AS pair_count, IFNULL( real_count, 0 ) AS real_count, IFNULL( damage_count, 0 ) AS damage_count, IFNULL( lack_count, 0 ) AS lack_count FROM sum_flow_layer_count t left JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id LEFT JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id AND t.layer = t1.layer left JOIN lack_flow_layer_count t2 ON t.flow_card_id = t2.flow_card_id LEFT JOIN lack_flow_layer_count t2 ON t.flow_card_id = t2.flow_card_id AND t.layer = t2.layer left JOIN pair_flow_layer_count t3 ON t.flow_card_id = t3.flow_card_id left JOIN damage_flow_layer_count t4 ON t.flow_card_id = t4.flow_card_id LEFT JOIN pair_flow_layer_count t3 ON t.flow_card_id = t3.flow_card_id LEFT JOIN damage_flow_layer_count t4 ON t.flow_card_id = t4.flow_card_id AND t.layer = t4.layer ) SELECT *