UI-Project/src/lang/zh.js
@@ -654,6 +654,7 @@ order: '出片顺序', thickness: '厚度', coatingtypes: '膜系', layer: '层数', height: '长', width: '宽', state: '状态', UI-Project/src/views/StockBasicData/stockBasicyiwu.vue
@@ -1,28 +1,28 @@ <script setup> import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; import {useRouter} from "vue-router" import {host, WebSocketHost} from '@/utils/constants' import request from "@/utils/request" import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; import { onBeforeUnmount, onMounted, onUnmounted, reactive, ref } from 'vue' import { useRouter } from 'vue-router' import { host, WebSocketHost } from '@/utils/constants' import request from '@/utils/request' import { closeWebSocket, initializeWebSocket } from '@/utils/WebSocketService' // import { ref } from 'vue' import {ElMessage, ElMessageBox} from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus' // import LanguageMixin from './lang/LanguageMixin' import {useI18n} from 'vue-i18n' import { useI18n } from 'vue-i18n' const router = useRouter() const adda = ref(false) const {t} = useI18n() const { t } = useI18n() let language = ref(localStorage.getItem('lang') || 'zh') const tableData = ref([]) const slot = ref('') const requestData = { line: 2001 }; line: 1, } const timeRange = ref([]) const selectValuesa = reactive([]); const selectValuesa = reactive([]) // request.post("/cacheGlass/taskCache/selectEdgTask",{ // ...requestData, // ...requestData, // }).then((res) => { // if (res.code == 200) { @@ -41,168 +41,224 @@ let celllist = [] let stateList = [] if (selectValuesa[0] != null && selectValuesa[0] != 'undefined') { if (selectValuesa[0] != "") { celllist = [selectValuesa[0]]; if (selectValuesa[0] != '') { celllist = [selectValuesa[0]] } } if (selectValuesa[1] != null && selectValuesa[1] != 'undefined') { if (selectValuesa[1] != "") { stateList = [selectValuesa[1]]; if (selectValuesa[1] != '') { stateList = [selectValuesa[1]] } } console.log(timeRange.value[0], timeRange.value[1]); const response = await request.post("/cacheGlass/edgGlassTaskInfo/setEdgGlassInfoRequest", { cellList: celllist, stateList: stateList, beginDate: timeRange.value[0], endDate: timeRange.value[1], }) console.log(timeRange.value[0], timeRange.value[1]) const response = await request.post( '/cacheGlass/edgGlassTaskInfo/setEdgGlassInfoRequest', { cellList: celllist, stateList: stateList, beginDate: timeRange.value[0], endDate: timeRange.value[1], } ) if (response.code === 200) { ElMessage.success(response.message); ElMessage.success(response.message) } else { ElMessage.error(response.message); ElMessage.error(response.message) } } // 破损 const open = async (row) => { try { const confirmResult = await ElMessageBox.confirm( t('workOrder.messagedamaged'), t('workOrder.prompt'), { confirmButtonText: t('workOrder.yes'), cancelButtonText: t('workOrder.cancel'), type: 'warning', } ); t('workOrder.messagedamaged'), t('workOrder.prompt'), { confirmButtonText: t('workOrder.yes'), cancelButtonText: t('workOrder.cancel'), type: 'warning', } ) if (confirmResult === 'confirm') { // 用户点击了“是”,现在调用删除接口 const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", { glassId: row.glassId, state: 8, line: row.line, workingProcedure: '磨边', }) // 用户点击了“是”,现在调用删除接口 const response = await request.post( '/cacheGlass/edgStorageCage/edgReportStatus', { glassId: row.glassId, state: 8, line: row.line, workingProcedure: '磨边', } ) if (response.code === 200) { ElMessage.success(response.message); ElMessage.success(response.message) } else { // 删除失败,您可以处理错误或显示错误信息给用户 ElMessage.error(response.msg); // alert('删除失败:' + deleteResponse.message); // 删除失败,您可以处理错误或显示错误信息给用户 ElMessage.error(response.msg) // alert('删除失败:' + deleteResponse.message); } } } catch (error) { // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等 console.error('发生错误:', error); // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等 console.error('发生错误:', error) } }; // 拿走 } // 拿走 const opena = async (row) => { try { const confirmResult = await ElMessageBox.confirm( t('workOrder.takemessage'), t('workOrder.prompt'), { confirmButtonText: t('workOrder.yes'), cancelButtonText: t('workOrder.cancel'), type: 'warning', } ); t('workOrder.takemessage'), t('workOrder.prompt'), { confirmButtonText: t('workOrder.yes'), cancelButtonText: t('workOrder.cancel'), type: 'warning', } ) if (confirmResult === 'confirm') { // 用户点击了“是”,现在调用删除接口 const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", { glassId: row.glassId, state: 9, line: row.line, workingProcedure: '磨边', }) // 用户点击了“是”,现在调用删除接口 const response = await request.post( '/cacheGlass/edgStorageCage/edgReportStatus', { glassId: row.glassId, state: 9, line: row.line, workingProcedure: '磨边', } ) if (response.code === 200) { ElMessage.success(response.message); ElMessage.success(response.message) } else { // 删除失败,您可以处理错误或显示错误信息给用户 ElMessage.error(response.msg); // alert('删除失败:' + deleteResponse.message); // 删除失败,您可以处理错误或显示错误信息给用户 ElMessage.error(response.msg) // alert('删除失败:' + deleteResponse.message); } } } catch (error) { // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等 console.error('发生错误:', error); // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等 console.error('发生错误:', error) } }; let socket = null; const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/edgTasks`; } let socket = null const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/edgTasks` // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 tableData.value = data.edgTasks[0] }; } onMounted(() => { socket = initializeWebSocket(socketUrl, handleMessage); }); socket = initializeWebSocket(socketUrl, handleMessage) }) onUnmounted(() => { if (socket) { closeWebSocket(socket); closeWebSocket(socket) } }); }) onBeforeUnmount(() => { console.log("关闭了") closeWebSocket(); }); console.log('关闭了') closeWebSocket() }) </script> <template> <div style="height: 500px;"> <div> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('workOrder.cway')" clearable <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('workOrder.cway')" clearable style="margin-left: 20px;margin-bottom: 10px;"> <el-option :label="$t('workOrder.edgingone')" value="2001"></el-option> <el-option :label="$t('workOrder.edgingtwo')" value="2002"></el-option> <el-option :label="$t('workOrder.edgingone')" value="1"></el-option> <el-option :label="$t('workOrder.edgingtwo')" value="2"></el-option> </el-select> <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('workOrder.cstate')" clearable <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('workOrder.cstate')" clearable style="margin-left: 20px;margin-bottom: 10px;"> <el-option :label="$t('workOrder.nedging')" value="0"></el-option> <el-option :label="$t('workOrder.edging')" value="1"></el-option> <el-option :label="$t('workOrder.finedging')" value="2"></el-option> <el-option :label="$t('workOrder.nedging')" value="0"></el-option> <el-option :label="$t('workOrder.edging')" value="1"></el-option> <el-option :label="$t('workOrder.finedging')" value="2"></el-option> </el-select> <span class="demonstration" style="margin-left: 20px;margin-bottom: 10px;">{{ $t('workOrder.time') }}</span> <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" :start-placeholder="$t('reportmanage.starttime')" style="margin-left: 20px;margin-bottom: 10px;" <span class="demonstration" style="margin-left: 20px;margin-bottom: 10px;">{{ $t('workOrder.time') }}</span> <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" :start-placeholder="$t('reportmanage.starttime')" style="margin-left: 20px;margin-bottom: 10px;" value-format="YYYY-MM-DD hh:mm:ss" :end-placeholder="$t('reportmanage.endtime')"> </el-date-picker> <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="setEdgGlassInfoRequest()">{{ <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="setEdgGlassInfoRequest()">{{ $t('reportmanage.inquire') }} </el-button> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> <el-table height="750" ref="table" <el-table height="750" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="glassId" align="center" :label="$t('workOrder.glassID')" min-width="180"/> <el-table-column prop="width" align="center" :label="$t('workOrder.width')" min-width="120"/> <el-table-column prop="height" align="center" :label="$t('workOrder.height')" min-width="80"/> <el-table-column prop="thickness" align="center" :label="$t('workOrder.thickness')" min-width="120"/> <el-table-column prop="glassType" align="center" :label="$t('workOrder.glasstype')" min-width="120"/> <el-table-column prop="line" align="center" :label="$t('workOrder.line')" min-width="120"/> <el-table-column prop="status" :label="$t('workOrder.status')" align="center" width="200"> :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="glassId" align="center" :label="$t('workOrder.glassID')" min-width="180" /> <el-table-column prop="width" align="center" :label="$t('workOrder.width')" min-width="120" /> <el-table-column prop="height" align="center" :label="$t('workOrder.height')" min-width="80" /> <el-table-column prop="thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" /> <el-table-column prop="glassType" align="center" :label="$t('workOrder.glasstype')" min-width="120" /> <el-table-column prop="line" align="center" :label="$t('workOrder.line')" min-width="120" /> <el-table-column prop="status" :label="$t('workOrder.status')" align="center" width="200"> <template #default="scope"> {{ scope.row.status == 0 ? "未磨边" : scope.row.status == 1 ? "磨边中" : "已磨边" }} </template> </el-table-column> <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200"> <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200"> <template #default="scope"> <el-button size="mini" type="text" plain @click="open(scope.row)">{{ <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }} </el-button> <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('workOrder.takeout') }} </el-button> UI-Project/src/views/hollow/hollowequipment.vue
@@ -5,13 +5,13 @@ <el-button id="searchButton" type="success" @click="handlezhiban"> {{ $t('hellow.createtask') }} </el-button> <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBinda"> {{ $t('hellow.starttask') }} </el-button> <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBindb">{{ $t('hellow.stoptask') }} </el-button> <!-- <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBinda">--> <!-- {{ $t('hellow.starttask') }}--> <!-- </el-button>--> <!-- <el-button style="margin-left: 20px;" id="searchButton" type="success" @click="handleBindb">{{--> <!-- $t('hellow.stoptask')--> <!-- }}--> <!-- </el-button>--> <el-switch style="margin-top: 7px;margin-left: 10px;" v-model="ganghua" class="mb-2" :inactive-text="$t('hellow.schedulingswitch')" @change="handleChange" /> </div> <div style="margin-bottom: -5px;margin-left: 5px;"> @@ -46,10 +46,15 @@ :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"> <el-table-column prop="sequence" :label="$t('hellow.order')" align="center"/> <el-table-column prop="thickness" :label="$t('hellow.thickness')" align="center"/> <el-table-column prop="layer" :label="$t('hellow.coatingtypes')" align="center"/> <el-table-column prop="layer" :label="$t('hellow.layer')" align="center"/> <el-table-column prop="filmsId" :label="$t('hellow.coatingtypes')" align="center"/> <el-table-column prop="height" :label="$t('hellow.height')" align="center"/> <el-table-column prop="width" :label="$t('hellow.width')" align="center"/> <el-table-column prop="state" :label="$t('hellow.state')" align="center"/> <el-table-column prop="state" :label="$t('hellow.state')" align="center"> <template #default="scope"> {{ scope.row.state == -1 ? "等待出片" : "出片完成" }} </template> </el-table-column> </el-table> <div style="display: flex;margin-left: 500px;margin-top: 10px;"> <!-- <div style="float: center;"> --> @@ -358,7 +363,8 @@ var url="/hollowGlass/hollowGlassRelationInfo/queryLackByFlowCard?flowCardId="+flowCardId + "&layer=" + layer; const response = await request.post(url) if (response.code == 200) { tableDatac.value = response.data[1]; // tableDatac.value = response.data[1]; tableDatac.value = response.data; ElMessage.success(response.message); } else { ElMessage.error(response.message); hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -289,4 +289,14 @@ public static final Integer HOLLOW_FLOW_CARD_PAUSE = 2; public static final Integer HOLLOW_FLOW_CARD_SUCCESS = 3; /** * 中空大理片笼出片状态I * 0 未进笼 * 1 占用 * 2 进笼完成 */ public static final Integer HOLLOW_RELATION_NEW = 0; public static final Integer HOLLOW_RELATION_OCCUPY = 1; public static final Integer HOLLOW_RELATION_SUCCESS = 2; } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassOutRelationInfoController.java
@@ -27,18 +27,30 @@ @ApiOperation("领取任务") @PostMapping("/receiveTask") public Result<HollowGlassOutRelationInfo> receiveTask(String flowCardId, int cell, int totalPairQuantity) { return Result.success(hollowGlassOutRelationInfoService.receiveTask(flowCardId, cell, totalPairQuantity)); HollowGlassOutRelationInfo hollowGlassOutRelationInfo = hollowGlassOutRelationInfoService.receiveTask(flowCardId, cell, totalPairQuantity); if (null == hollowGlassOutRelationInfo) { return Result.error(500, "有正在执行的任务,请先确保任务完成后,再次领取任务"); } else { return Result.success(hollowGlassOutRelationInfo); } } @ApiOperation("强制出片") @PostMapping("/forceOutGlass") public Result<HollowGlassOutRelationInfo> forceOutGlass(String flowCardId, int cell, int totalPairQuantity) { return Result.success(hollowGlassOutRelationInfoService.forceOutGlass(flowCardId, cell, totalPairQuantity)); HollowGlassOutRelationInfo hollowGlassOutRelationInfo = hollowGlassOutRelationInfoService.forceOutGlass(flowCardId, cell, totalPairQuantity); if (null == hollowGlassOutRelationInfo) { return Result.error(500, "有正在执行的任务,请先确保任务完成后,再次强制执行任务"); } else { return Result.success(hollowGlassOutRelationInfo); } } @ApiOperation("是否调度开关") @PostMapping("/dispatchHollowSwitch") public Result<Boolean> dispatchHollowSwitch(Boolean flag) { return Result.build(200, "修改成功",hollowGlassOutRelationInfoService.dispatchHollowSwitch(flag)); return Result.build(200, "修改成功", hollowGlassOutRelationInfoService.dispatchHollowSwitch(flag)); } } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java
@@ -34,10 +34,17 @@ return Result.success(bigStorageCageDetails); } // @ApiOperation("查询指定流程卡及层数的缺片详情") // @PostMapping("/queryLackByFlowCard") // public Result<Map<Integer, List<LackDetailsDTO>> > queryLackByFlowCard(String flowCardId) { // Map<Integer, List<LackDetailsDTO>> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId); // return Result.success(lackDetailsList); // } // @ApiOperation("查询指定流程卡及层数的缺片详情") @PostMapping("/queryLackByFlowCard") public Result<Map<Integer, List<LackDetailsDTO>> > queryLackByFlowCard(String flowCardId) { Map<Integer, List<LackDetailsDTO>> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId); public Result<List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId) { List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId); return Result.success(lackDetailsList); } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowGlassRelationInfo.java
@@ -85,6 +85,10 @@ * /*中空总次序 */ private Integer orderSort; /** * /*状态:表示配对的玻璃是否进笼,0未进笼 1已占用 2进笼完成 */ private Integer state; } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/dto/FlowCardGlassInfoDTO.java
@@ -23,6 +23,10 @@ */ private String filmsId; /** * 厚度 */ private int thickness; /** * 层号 */ private int layer; hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java
@@ -30,7 +30,8 @@ Map<String, List<FlowCardGlassInfoDTO>> queryHollowAllFlowCard(); Map<Integer, List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId); // Map<Integer, List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId); List<LackDetailsDTO> queryLackByFlowCard(String flowCardId); } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java
@@ -1,5 +1,6 @@ package com.mes.hollow.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.common.config.Const; @@ -67,6 +68,11 @@ log.info("该流程卡信息系统未找到"); return info; } List<HollowGlassOutRelationInfo> outRelationInfos = this.list(new LambdaQueryWrapper<HollowGlassOutRelationInfo>().eq(HollowGlassOutRelationInfo::getCell, cell) .in(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_START)); if (CollectionUtil.isNotEmpty(outRelationInfos)){ return null; } info.setFlowCardId(flowCardId); info.setCell(cell); info.setIsForce(isForce); hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -64,8 +64,7 @@ .eq(HollowGlassRelationInfo::getWidth, width) .eq(HollowGlassRelationInfo::getHeight, height) .eq(HollowGlassRelationInfo::getLayer, layer) .isNull(HollowGlassRelationInfo::getTemperingLayoutId) .isNull(HollowGlassRelationInfo::getTemperingFeedSequence) .eq(HollowGlassRelationInfo::getState,Const.HOLLOW_RELATION_NEW) .orderByAsc(HollowGlassRelationInfo::getHollowSequence) .last("limit 1") ); @@ -200,6 +199,7 @@ hollow.setVirtualSlot(temp.get(0).getVirtualSlot()); hollow.setFilmsId(glassInfo.getFilmsid()); hollow.setThickness(glassInfo.getThickness()); hollow.setState(Const.HOLLOW_RELATION_NEW); temp.add(hollow); flag = true; break; @@ -214,6 +214,7 @@ hollow.setVirtualSlot(slotNumber++); hollow.setFilmsId(glassInfo.getFilmsid()); hollow.setThickness(glassInfo.getThickness()); hollow.setState(Const.HOLLOW_RELATION_NEW); newList.add(hollow); tempHollowList.add(newList); } @@ -242,11 +243,16 @@ return dtos.stream().collect(Collectors.groupingBy(FlowCardGlassInfoDTO::getFlowCardId)); } // @Override // 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; // } @Override public Map<Integer, List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId) { public 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; return lackDetailsList; } } hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollowqueue/entity/HollowGlassQueueInfo.java
@@ -45,6 +45,10 @@ */ private Integer glassType; /** * 膜系 */ private String filmsId; /** * /*厚度 */ private Double thickness; hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
@@ -162,43 +162,56 @@ //计算目标格子 List<HollowBigStorageCageHistoryTask> historyTasks = new ArrayList<>(); for (BigStorageCageTask task : inTaskList) { GlassInfo info = glassListMap.get(task.getGlassId()).get(0); HollowBigStorageDTO bigStorageDTO = hollowGlassRelationInfoService.queryHollowTargetSlot(info.getFlowCardId(), info.getWidth(), info.getHeight(), info.getTotalLayer(), info.getLayer()); try { for (BigStorageCageTask task : inTaskList) { GlassInfo info = glassListMap.get(task.getGlassId()).get(0); HollowBigStorageDTO bigStorageDTO = hollowGlassRelationInfoService.queryHollowTargetSlot(info.getFlowCardId(), info.getWidth(), info.getHeight(), info.getTotalLayer(), info.getLayer()); // 临时更新格子的剩余尺寸:防止相邻玻璃进同一格子造成剩余尺寸不足,玻璃越界的情况,任务完成后再次更新大理片笼表剩余宽度(按照笼内玻璃数量更新大理片笼剩余尺寸) hollowBigStorageCageService.update(new LambdaUpdateWrapper<HollowBigStorageCage>() .set(HollowBigStorageCage::getRemainWidth, bigStorageDTO.getRemainWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap) .eq(HollowBigStorageCage::getSlot, bigStorageDTO.getSlot())); task.setTargetSlot(bigStorageDTO.getSlot()); task.setGlassId(info.getGlassId()); bigStorageCageTaskService.updateTaskMessage(BIG_STORAGE_CAGE_IN_TWO_TASK, task); //存放历史任务 HollowBigStorageCageHistoryTask historyTask = new HollowBigStorageCageHistoryTask(); BeanUtils.copyProperties(task, historyTask); historyTask.setTaskType(Const.BIG_STORAGE_AFTER_IN); historyTask.setGlassCount(glassInfoList.size()); historyTask.setTaskState(Const.ENGINEERING_NEW); historyTasks.add(historyTask); //存放详情数据 HollowBigStorageCageDetails cageDetails = new HollowBigStorageCageDetails(); BeanUtils.copyProperties(bigStorageDTO, cageDetails); BeanUtils.copyProperties(info, cageDetails); cageDetails.setState(Const.GLASS_STATE_NEW); cageDetails.setSequence(bigStorageDTO.getSlotSequence()); cageDetails.setGap(glassGap); cageDetails.setId(null); hollowBigStorageCageDetailsService.save(cageDetails); hollowBigStorageCageService.update(new LambdaUpdateWrapper<HollowBigStorageCage>() .set(HollowBigStorageCage::getRemainWidth, bigStorageDTO.getRemainWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap) .eq(HollowBigStorageCage::getSlot, bigStorageDTO.getSlot())); task.setTargetSlot(bigStorageDTO.getSlot()); task.setGlassId(info.getGlassId()); bigStorageCageTaskService.updateTaskMessage(BIG_STORAGE_CAGE_IN_TWO_TASK, task); //存放历史任务 HollowBigStorageCageHistoryTask historyTask = new HollowBigStorageCageHistoryTask(); BeanUtils.copyProperties(task, historyTask); historyTask.setTaskType(Const.BIG_STORAGE_AFTER_IN); historyTask.setGlassCount(glassInfoList.size()); historyTask.setTaskState(Const.ENGINEERING_NEW); historyTasks.add(historyTask); //存放详情数据 HollowBigStorageCageDetails cageDetails = new HollowBigStorageCageDetails(); BeanUtils.copyProperties(bigStorageDTO, cageDetails); BeanUtils.copyProperties(info, cageDetails); cageDetails.setState(Const.GLASS_STATE_NEW); cageDetails.setSequence(bigStorageDTO.getSlotSequence()); cageDetails.setGap(glassGap); cageDetails.setId(null); hollowBigStorageCageDetailsService.save(cageDetails); hollowGlassRelationInfoService.update(new LambdaUpdateWrapper<HollowGlassRelationInfo>() .set(HollowGlassRelationInfo::getGlassId, cageDetails.getGlassId()) .set(HollowGlassRelationInfo::getTemperingLayoutId, cageDetails.getTemperingLayoutId()) .set(HollowGlassRelationInfo::getTemperingFeedSequence, cageDetails.getTemperingFeedSequence()) .set(HollowGlassRelationInfo::getEngineerId, cageDetails.getEngineerId()) .set(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_OCCUPY) .eq(HollowGlassRelationInfo::getFlowCardId, bigStorageDTO.getFlowCardId()) .eq(HollowGlassRelationInfo::getLayer, bigStorageDTO.getLayer()) .eq(HollowGlassRelationInfo::getVirtualSlot, bigStorageDTO.getVirtualSlot()) .eq(HollowGlassRelationInfo::getSlotSequence, bigStorageDTO.getSlotSequence()) .eq(HollowGlassRelationInfo::getHollowSequence, bigStorageDTO.getHollowSequence()) ); } } catch (Exception exception) { log.info("进片任务执行中发生异常:{}", exception); hollowGlassRelationInfoService.update(new LambdaUpdateWrapper<HollowGlassRelationInfo>() .set(HollowGlassRelationInfo::getGlassId, cageDetails.getGlassId()) .set(HollowGlassRelationInfo::getTemperingLayoutId, cageDetails.getTemperingLayoutId()) .set(HollowGlassRelationInfo::getTemperingFeedSequence, cageDetails.getTemperingFeedSequence()) .set(HollowGlassRelationInfo::getEngineerId, cageDetails.getEngineerId()) .eq(HollowGlassRelationInfo::getFlowCardId, bigStorageDTO.getFlowCardId()) .eq(HollowGlassRelationInfo::getLayer, bigStorageDTO.getLayer()) .eq(HollowGlassRelationInfo::getVirtualSlot, bigStorageDTO.getVirtualSlot()) .eq(HollowGlassRelationInfo::getSlotSequence, bigStorageDTO.getSlotSequence()) .eq(HollowGlassRelationInfo::getHollowSequence, bigStorageDTO.getHollowSequence()) .set(HollowGlassRelationInfo::getGlassId, null) .set(HollowGlassRelationInfo::getTemperingLayoutId, null) .set(HollowGlassRelationInfo::getTemperingFeedSequence, null) .set(HollowGlassRelationInfo::getEngineerId, null) .set(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_NEW) .eq(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_OCCUPY) ); } //历史数据入库 @@ -274,7 +287,7 @@ if (CollectionUtil.isNotEmpty(unFinishHollowQueueList)) { log.info("有正在出片的中空任务"); Integer isPair = unFinishHollowQueueList.get(0).getIsPair(); hollowOutGlassByIsPair(unFinishHollowQueueList, hollowGlassOutRelationInfo.getCell(), isPair, hollowGlassOutRelationInfo.getTotalLayer(),hollowGlassOutRelationInfo.getIsForce()); hollowOutGlassByIsPair(unFinishHollowQueueList, hollowGlassOutRelationInfo.getCell(), isPair, hollowGlassOutRelationInfo.getTotalLayer(), hollowGlassOutRelationInfo.getIsForce()); Date endDate = new Date(); log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); return; @@ -367,7 +380,7 @@ int targetSlot = item.getSlot(); list = hollowBigStorageCageDetailsService.list(new LambdaQueryWrapper<HollowBigStorageCageDetails>() .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN).eq(HollowBigStorageCageDetails::getSlot, startSlot)); hollowOutGlassByIsPair(list, targetSlot, 0, 0,0); hollowOutGlassByIsPair(list, targetSlot, 0, 0, 0); List<Integer> slotList = new ArrayList<>(); slotList.add(targetSlot); updateSlotRemainBySlots(slotList); @@ -440,12 +453,38 @@ hollowBigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN); log.info("4、大理片笼进片状态已完成已完成的玻璃信息id:{}", v); updateSlotRemainBySlots(inSuccessGlassSlot); List<String> glassList = v.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); hollowGlassRelationInfoService.update(new LambdaUpdateWrapper<HollowGlassRelationInfo>() .set(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_SUCCESS) .eq(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_OCCUPY) .in(HollowGlassRelationInfo::getGlassId, glassList) ); } else if (e1 == 3) { //破损处理 dealDamageInTask(v); List<String> glassList = v.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); hollowGlassRelationInfoService.update(new LambdaUpdateWrapper<HollowGlassRelationInfo>() .set(HollowGlassRelationInfo::getGlassId, null) .set(HollowGlassRelationInfo::getTemperingLayoutId, null) .set(HollowGlassRelationInfo::getTemperingFeedSequence, null) .set(HollowGlassRelationInfo::getEngineerId, null) .set(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_NEW) .eq(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_OCCUPY) .in(HollowGlassRelationInfo::getGlassId, glassList) ); } else { //清空理片笼空数据 noDealInTask(v); List<String> glassList = v.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); hollowGlassRelationInfoService.update(new LambdaUpdateWrapper<HollowGlassRelationInfo>() .set(HollowGlassRelationInfo::getGlassId, null) .set(HollowGlassRelationInfo::getTemperingLayoutId, null) .set(HollowGlassRelationInfo::getTemperingFeedSequence, null) .set(HollowGlassRelationInfo::getEngineerId, null) .set(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_NEW) .eq(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_OCCUPY) .in(HollowGlassRelationInfo::getGlassId, glassList) ); } }); for (BigStorageCageTask item : inTaskList) { @@ -560,36 +599,36 @@ try { //更新数量 //按照玻璃id获取需要出片对列表中的数据 if(finalTaskType.equals(Const.BIG_STORAGE_AFTER_OUT) ){ if (finalTaskType.equals(Const.BIG_STORAGE_AFTER_OUT)) { HollowGlassQueueInfo hollowGlassQueueInfo = hollowGlassQueueInfoService.getOne(new LambdaQueryWrapper<HollowGlassQueueInfo>() .eq(HollowGlassQueueInfo::getGlassId, outTaskList.get(0).getGlassId()) .orderByDesc(HollowGlassQueueInfo::getUpdateTime).last("limit 1")); List<HollowGlassQueueInfo> list = hollowGlassQueueInfoService.list(new LambdaQueryWrapper<HollowGlassQueueInfo>() .eq(HollowGlassQueueInfo::getFlowCardId, hollowGlassQueueInfo.getFlowCardId()) .eq(HollowGlassQueueInfo::getCell, hollowGlassQueueInfo.getCell()) .eq(HollowGlassQueueInfo::getFlowCardId, hollowGlassQueueInfo.getFlowCardId()) .eq(HollowGlassQueueInfo::getCell, hollowGlassQueueInfo.getCell()) // .eq(HollowGlassQueueInfo::getIsPair, 1) .eq(HollowGlassQueueInfo::getState, Const.TEMPERING_NEW) .eq(HollowGlassQueueInfo::getState, Const.TEMPERING_NEW) ); if (CollectionUtil.isEmpty(list)){ if (CollectionUtil.isEmpty(list)) { // 任务更新为已完成 hollowGlassOutRelationInfoService.update(new UpdateWrapper<HollowGlassOutRelationInfo>() .eq("flow_card_id",hollowGlassQueueInfo.getFlowCardId()) .eq("cell",hollowGlassQueueInfo.getCell()) .eq("flow_card_id", hollowGlassQueueInfo.getFlowCardId()) .eq("cell", hollowGlassQueueInfo.getCell()) .setSql("pair_quantity = total_pair_quantity") .set("state",Const.HOLLOW_FLOW_CARD_SUCCESS) .set("state", Const.HOLLOW_FLOW_CARD_SUCCESS) ); }else{ } else { // 计算剩余玻璃对数,用任务总队数减剩余对数 int remainCount = list.size() / hollowGlassQueueInfo.getTotalLayer(); hollowGlassOutRelationInfoService.update(new UpdateWrapper<HollowGlassOutRelationInfo>() .eq("flow_card_id",hollowGlassQueueInfo.getFlowCardId()) .eq("cell",hollowGlassQueueInfo.getCell()) .setSql("pair_quantity = total_pair_quantity -"+remainCount) .eq("flow_card_id", hollowGlassQueueInfo.getFlowCardId()) .eq("cell", hollowGlassQueueInfo.getCell()) .setSql("pair_quantity = total_pair_quantity -" + remainCount) ); } } }catch (Exception e){ log.info("计算玻璃数量过程中出现错误,错误信息{}",e.getMessage()); } catch (Exception e) { log.info("计算玻璃数量过程中出现错误,错误信息{}", e.getMessage()); } // hollowGlassOutRelationInfoService.update @@ -703,7 +742,7 @@ } private <T extends HollowBigStorageCageBaseInfo> Boolean hollowOutGlassByIsPair(List<T> list, int targetSlot, int isPair, int totalLayer,int isForce) { private <T extends HollowBigStorageCageBaseInfo> Boolean hollowOutGlassByIsPair(List<T> list, int targetSlot, int isPair, int totalLayer, int isForce) { List<T> resultList = new ArrayList<>(); List<T> tempList = new ArrayList<>(); int taskType = Const.BIG_STORAGE_AFTER_OUT; @@ -711,25 +750,25 @@ for (T t : list) { if (isPair == (t.getIsPair() == null ? 0 : t.getIsPair())) { tempList.add(t); }else{ } else { break; } } if (isPair == 0 && isForce!=1) { if (isPair == 0 && isForce != 1) { taskType = Const.BIG_STORAGE_AFTER_DISPATCH; taskState = Const.GLASS_STATE_SCHEDULE_ING; resultList.add(list.get(0)); //目前调度任务totalLayer为0 出片调度任务有层号,用于区分调度方式 if (totalLayer !=0){ if (totalLayer != 0) { HollowBigStorageCage storageCage = hollowBigStorageCageService.getOne(new LambdaQueryWrapper<HollowBigStorageCage>() .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth).last("limit 1")); targetSlot = storageCage.getSlot(); } totalLayer = 0; }else{ } else { resultList = tempList; } return computeOutGlassInfo(resultList, BIG_STORAGE_CAGE_OUT_TWO_TASK, targetSlot, taskState, taskType, totalLayer,isForce); return computeOutGlassInfo(resultList, BIG_STORAGE_CAGE_OUT_TWO_TASK, targetSlot, taskState, taskType, totalLayer, isForce); } /** @@ -740,7 +779,7 @@ * @param totalLayer * @return */ private <T extends HollowBigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, String tableName, int targetSlot, int state, int taskType, int totalLayer,int isForce) { private <T extends HollowBigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, String tableName, int targetSlot, int state, int taskType, int totalLayer, int isForce) { //任务数据:获取车子存放玻璃最大数量,玻璃间隔 List<BigStorageCageTask> tempList = new ArrayList<>(); List<T> tempTList = new ArrayList<>(); @@ -759,13 +798,13 @@ Assert.isFalse(CollectionUtil.isEmpty(tempList), "未获取出片数据,结束出片任务"); log.info("获取出片任务数据{}条,执行保存", tempList.size()); List<BigStorageCageTask> bigStorageCageTaskList = tempList; if (1!= isForce){ if (1 != isForce) { if (taskType == Const.BIG_STORAGE_AFTER_OUT) { if (tempList.size() <= totalLayer) { bigStorageCageTaskList = tempList; } else { int remainCount = tempList.size() % totalLayer; bigStorageCageTaskList = tempList.subList(0,tempList.size() - remainCount); bigStorageCageTaskList = tempList.subList(0, tempList.size() - remainCount); } } } hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
@@ -6,6 +6,8 @@ <result column="engineer_id" property="engineerId"/> <result column="flow_card_id" property="flowCardId"/> <result column="layer" property="layer"/> <result column="films_id" property="filmsId"/> <result column="thickness" property="thickness"/> <result column="sum_count" property="sumCount"/> <result column="pair_count" property="pairCount"/> <result column="real_count" property="realCount"/> @@ -39,10 +41,12 @@ </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(*) as 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, min(thickness) as thickness,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_big_storage_cage_details t WHERE state = 100 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, @@ -55,9 +59,9 @@ 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_big_storage_cage_details WHERE layer = 1 AND state = 100 ), layer_two AS ( SELECT * FROM hollow_big_storage_cage_details WHERE layer = 2 AND state = 100), layer_three AS ( SELECT * FROM hollow_big_storage_cage_details WHERE layer = 3 AND state = 100 ) , pair_flow_layer_count AS ( SELECT @@ -67,11 +71,11 @@ layer_one t INNER JOIN layer_two t1 ON t.flow_card_id = t1.flow_card_id AND t.virtual_slot = t1.virtual_slot AND t.slot_sequence = t1.slot_sequence AND t.sequence = t1.sequence <if test="totalLayer == 3"> inner join layer_three t2 on t.flow_card_id = t2.flow_card_id and t.virtual_slot = t2.virtual_slot and t.slot_sequence = t2.slot_sequence t.virtual_slot = t2.virtual_slot and t.sequence = t2.sequence </if> GROUP BY t.flow_card_id @@ -81,6 +85,7 @@ t.flow_card_id, t.layer, t.films_id, t.thickness, sum_count, IFNULL( t3.pair_count, 0 ) AS pair_count, IFNULL( real_count, 0 ) AS real_count, @@ -105,7 +110,6 @@ and sum_count = pair_count </if> </select> <select id="queryIsAllNeedDispatchVirtualSlot" resultMap="virtualSlotSequenceDTO"> with relation_temp as (