UI-Project/src/views/Caching/cachingbefore.vue
@@ -110,7 +110,7 @@ <div style="height: 500px;"> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> <el-table height="240" ref="table" <el-table height="340" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" /> UI-Project/src/views/Caching/cachingun.vue
@@ -2,24 +2,15 @@ <div style="height: 500px;"> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> <el-table height="240" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table height="340" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" /> <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80" /> <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120" /> <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120" /> <el-table-column align="center" :label="$t('sorter.startstatus')" min-width="80" prop="enable_state" > <el-table-column align="center" :label="$t('sorter.startstatus')" min-width="80" prop="enable_state"> <template #default="scope"> <el-tag :type="scope.row.enable_state === 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)" > <el-tag :type="scope.row.enable_state === 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)"> {{ scope.row.enable_state === 1 ? $t('sorter.start') : $t('sorter.disable') }} </el-tag> </template> @@ -29,7 +20,8 @@ </el-table-column> <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200"> <template #default="scope"> <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('sorter.deficiencieste') }}</el-button> <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('sorter.deficiencieste') }}</el-button> <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('sorter.updown') }}</el-button> </template> </el-table-column> @@ -37,16 +29,14 @@ </div> </el-card> <div class="awatch"> <img src="../../assets/woshihuancun.png" alt="" style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;"> <img src="../../assets/woshihuancun.png" alt="" style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;"> <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;"> <div v-for="(rect, index) in adjustedRects" :key="rect" :style="{ position: 'absolute', <div v-for="(rect, index) in adjustedRects" :key="rect" :style="{ position: 'absolute', top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`, backgroundColor: '#409EFF' }" > }"> </div> </div> </div> @@ -106,10 +96,13 @@ ); if (confirmResult === 'confirm') { // 用户点击了“是”,现在调用删除接口 var url="/unLoadGlass/downStorage/deleteDownStorageCage?downStorageCageId="+row.id; var url = "/unLoadGlass/downStorage/deleteDownStorageCage"; console.log(url); const response = await request.post(url, { esdId: row.esdId glassId: row.glass_id, state: 9, line: 1001, workingProcedure: '磨边前理片笼', }) if (response.code === 200) { ElMessage.success(response.message); @@ -234,13 +227,25 @@ }); </script> <style scoped> #dt { display: block; float: left; line-height: 20px; margin-left: 100px; } #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} #dta { display:block; float:left;line-height: 20px;margin-left: 80%;} #dta { display: block; float: left; line-height: 20px; margin-left: 80%; } #dialog-footer{ text-align: center; margin-top: -15px; } #message{ text-align: center; align-items: center; @@ -250,6 +255,7 @@ background-color: #337ecc; margin-left: 28%; } .awatch{ height: 460px; width: 1500px; UI-Project/src/views/Identify/identify.vue
@@ -84,10 +84,10 @@ // console.log(url); // const response = await request.post(url) const response = await request.post('/cacheGlass/taskCache/identControls', { identId: currentGlassId.value, controlsId: 8, glassId: currentGlassId.value, state: 8, line: 1001, machine: '识别', workingProcedure: '识别', }) if (response.code == 200) { ElMessage.success(response.message); @@ -111,10 +111,10 @@ // console.log(url); // const response = await request.post(url) const response = await request.post('/cacheGlass/taskCache/identControls', { identId: currentGlassId.value, controlsId: 9, glassId: currentGlassId.value, state: 9, line: 1001, machine: '识别', workingProcedure: '识别', }) if (response.code == 200) { // 绑定成功,处理逻辑 UI-Project/src/views/Returns/returns.vue
@@ -718,7 +718,7 @@ <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> <el-table height="150" height="350" ref="table" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" :data="tableData" UI-Project/src/views/Slicecage/slicecage.vue
@@ -600,8 +600,9 @@ // 更新 tableData 的数据 if(data.bigStorageCageDetailsOutTask!=null){ tableDatac.value = data.bigStorageCageDetailsOutTask[0] console.log(data.bigStorageCageDetailsOutTask[0]) adjusta.value = data.bigStorageCageDetailsOutTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined); console.log(data.bigStorageCageDetailsOutTask[0]); // console.log(data.bigStorageCageDetailsOutTask[0]); } else { tableDatac.value = '', @@ -628,6 +629,7 @@ } if(data.temperingGlassInfoList!=null){ tableDatab.value = data.temperingGlassInfoList[0] console.log(tableDatab.value) }else{ tableDatab.value = '' } @@ -1352,8 +1354,8 @@ <el-table ref="table" style="margin-top: 20px;height: 500px;" :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="id" fixed align="center" :label="$t('searchOrder.sheetID')" min-width="150"/> <el-table-column prop="flowcardId" fixed align="center" :label="$t('searchOrder.processcards')" min-width="120" /> <el-table-column prop="glassType" align="center" :label="$t('searchOrder.processcardtype')" min-width="150" /> <el-table-column prop="flowCardId" fixed align="center" :label="$t('searchOrder.processcards')" min-width="120" /> <!-- <el-table-column prop="glassType" align="center" :label="$t('searchOrder.processcardtype')" min-width="150" /> --> <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="80" /> <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="80" /> <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="80" /> @@ -1387,13 +1389,13 @@ </el-tag> </template> </el-table-column> <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="150"> <!-- <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="150"> <template #default="scope"> <el-button size="mini" type="text" plain @click="brokea(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> <el-button size="mini" type="text" plain @click="brokeb(scope.row)">{{ $t('searchOrder.takeout') }}</el-button> <el-button size="mini" type="text" plain @click="deletea(scope.row)">{{ $t('searchOrder.delete') }}</el-button> </template> </el-table-column> </el-table-column> --> </el-table> </el-dialog> <el-dialog v-model="dialogFormVisiblec" top="5vh" width="85%" :title="$t('searchOrder.temperingqueries')"> UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -157,18 +157,18 @@ <template> <div> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('请选择线路')" clearable> <el-select v-model="selectValuesa[0]" filterable :placeholder="$t('请选择线路')" clearable style="margin-left: 20px;"> <el-option label="磨边一线" value="2001"></el-option> <el-option label="磨边二线" value="2002"></el-option> </el-select> <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('请选择状态')" clearable > <el-select v-model="selectValuesa[1]" filterable :placeholder="$t('请选择状态')" clearable style="margin-left: 20px;" > <el-option label="未磨边" value="0"></el-option> <el-option label="磨边中" value="1"></el-option> <el-option label="已磨边" value="2"></el-option> </el-select> <span class="demonstration">时间段</span> <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" start-placeholder="开始日期" <span class="demonstration" style="margin-left: 20px;">时间段</span> <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" start-placeholder="开始日期" style="margin-left: 20px;" end-placeholder="结束日期"> </el-date-picker> <el-button type="primary" style="margin-left: 10px;" @click="setEdgGlassInfoRequest()">{{ UI-Project/src/views/UnLoadGlass/PrintFlow.vue
@@ -69,54 +69,56 @@ } const printFlowCard = () => { // 需要打印的局部区域赋予"print-wrap"的id let el = document.getElementById("printFlowCard"); let doc = document; let body = doc.body || doc.getElementsByTagName("body")[0]; let printId = "print-" + Date.now(); // const printFlowCard = () => { // // 需要打印的局部区域赋予"print-wrap"的id // let el = document.getElementById("printFlowCard"); // let doc = document; // let body = doc.body || doc.getElementsByTagName("body")[0]; // let printId = "print-" + Date.now(); // 创建无副作用的打印容器(因不确定页面的打印元素有无其它样式) let content = doc.createElement("div"); content.id = printId; // // 创建无副作用的打印容器(因不确定页面的打印元素有无其它样式) // let content = doc.createElement("div"); // content.id = printId; // 样式控制与打印无关的元素隐藏 let style = doc.createElement("style"); style.innerHTML = "body>#" + printId + "{display:none}@media print{" + "@page {" + " size: auto; " + " margin: 5mm 5mm 5mm 5mm; " + " }body>:not(#" + printId + "){display:none !important}body>#" + printId + "{display:block;padding-top:1px}}"; // content.innerHTML = el.outerHTML; // // console.log("el.outerHTML", el.outerHTML); body.appendChild(style); // // 样式控制与打印无关的元素隐藏 // let style = doc.createElement("style"); // style.innerHTML = // "body>#" + // printId + // "{display:none}@media print{" + // "@page {" + // " size: auto; " + // " margin: 5mm 5mm 5mm 5mm; " + // " }body>:not(#" + // printId + // "){display:none !important}body>#" + // printId + // "{display:block;padding-top:1px}}"; // // // content.innerHTML = el.outerHTML; // // // console.log("el.outerHTML", el.outerHTML); // body.appendChild(style); // 与style元素设置的样式相配合 // 把打印内容的元素添加到body(作为body的子元素,可用body的子选择器 '>' 控制打印样式) body.appendChild(content); setTimeout(() => { window.print(); body.removeChild(content); body.removeChild(style); }, 20); } // // 与style元素设置的样式相配合 // // 把打印内容的元素添加到body(作为body的子元素,可用body的子选择器 '>' 控制打印样式) // body.appendChild(content); // setTimeout(() => { // window.print(); // body.removeChild(content); // body.removeChild(style); // }, 20); // } onMounted(async () => { console.log(props.printFlowCardId,props.printLayer) try { const response = await request.post('/unLoadGlass/downGlassInfo/downGlassPrint',{ flowCardId:props.printFlowCardId, layer:props.printLayer }); if (response.code == 200) { // 绑定成功,处理逻辑 produceList.value = response.data; ElMessage.success(response.message); UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -1,19 +1,20 @@ <script setup> import { Search } from "@element-plus/icons-vue"; import { reactive, onMounted, onBeforeUnmount, onUnmounted } from "vue"; import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue"; import { useRouter } from "vue-router" const router = useRouter() import { useI18n } from 'vue-i18n' import {ElMessage} from 'element-plus' import request from "@/utils/request"; import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; import {host, WebSocketHost} from '@/utils/constants' import PrintFlow from "@/views/UnLoadGlass/PrintFlow.vue"; const router = useRouter() const { t } = useI18n() let language = ref(localStorage.getItem('lang') || 'zh') import { ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import Landingindication from "./Landingindication.vue"; import Landingindicationtwo from "./Landingindicationtwo.vue"; import request from "@/utils/request"; import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; import { WebSocketHost, host } from '@/utils/constants' // import PrintFlow from './PrintFlow.vue' const printLoading = ref(true) const fullFlowCard = ref('') const autoPrint = ref(false) const dialogFormVisiblea = ref(false) const dialogFormVisiblea2 = ref(false) const dialogFormVisibleaDownGlass = ref(false) @@ -23,17 +24,43 @@ const dialogFormVisible = ref(false); // 表单数据 const workstationId = ref(''); const workFlowCard = ref(''); const selectedProjectNoa = ref(null); // 当前选中的角色 const flowCardId = ref(''); const flowCardOptions = ref('[]'); const tableData = reactive([]); const downGlass = ref([]); const timeRange = ref(["2022-01-01", "2025-01-01"]) const selectValuesa = reactive({}); const selectOptionsa = ref([]); const dialogTableVisible = ref(false) // const printFlowCardId = ref('') // const printLayer=ref('') const printFlowCardId = ref('') const printLayer = ref('') const now = new Date(); const timeRange = ref([new Date(now.setHours(0, 0, 0, 0)), new Date(now.setHours(23, 59, 59, 999))]) const handleChange = async () => { console.log("触发开关") try { const body = { flag: autoPrint.value, // 使用 ganghua.value 获取当前开关的状态 }; var url = "/unLoadGlass/downWorkStation/autoPrint?flag=" + autoPrint.value; const response = await request.post(url) if (response.code == 200) { // 绑定成功,处理逻辑 ElMessage.success(response.message); autoPrint.value = response.data } else { ElMessage.error(response.message); } } catch (error) { // 处理错误 console.error(error); } } const handleInputChangea = (value, rowId) => { // 更新对应行的 select 值 @@ -104,6 +131,7 @@ const handleBindRack2 = (row) => { workstationId.value = row.workstationId; // 假设rackNumber是架号字段的属性名 dialogFormVisiblea2.value = true; // 打开绑定架子对话框 workFlowCard.value=row.flowCardId; }; //清除内容 const handleclear = async () => { @@ -118,6 +146,9 @@ console.log('清除成功'); ElMessage.success(response.message); dialogFormVisiblea2.value = false; if(fullFlowCard.value==workFlowCard.value){ fullFlowCard.value=""; } } else if (response.code === 500) { // 清除失败的逻辑 console.log('清除失败'); @@ -155,6 +186,7 @@ const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 if (data.downGlassInfos != null) { downGlass.value = data.downGlassInfos[0][1]; @@ -162,8 +194,28 @@ if (data.engineerIdList != null) { selectOptionsa.value = data.engineerIdList[0] } if (data.autoPrint != null) { autoPrint.value = data.autoPrint[0]; } // tableData.splice(0, tableData.length, ...data.params[0]); if (fullFlowCard.value == ""&&autoPrint.value==true) { for (let i = 0; i < tableData.length; i++) { if (tableData[i].totalQuantity != 0) { if (tableData[i].totalQuantity == tableData[i].racksNumber + tableData[i].otherNumber && fullFlowCard.value != tableData[i].flowCardId) { // printFlowCardId.value = tableData[i].flowCardId; fullFlowCard.value = tableData[i].flowCardId; open(tableData[i]); break; } } else { console.log("没有flowCardId") } } } if(data.params!=null){ tableData.splice(0, tableData.length, ...data.params[0]); } // console.log("更新后数据", data.params[0]); }; @@ -218,14 +270,13 @@ // 查询数据 const selectDownGlassData = async () => { const response = await request.post("/unLoadGlass/downGlassInfo/selectDownGlassInfo", { const response = await request.post("/unLoadGlass/downGlassInfo/setDownGlassInfoRequest", { workStationId: selectValuesa[0], engineerId: selectValuesa[1], beginDate: timeRange.value[0], endDate: timeRange.value[1], }) if (response.code === 200) { sendDownGlass.value = response.data; ElMessage.success(response.message); } else { ElMessage.error(response.message); @@ -234,56 +285,58 @@ } // const open=async(row)=>{ const open = async (row) => { // printFlowCardId.value=row.flowCardId; // printLayer.value=row.layer // dialogTableVisible.value = true; // setTimeout(() => { // printFlowCard(); // 替换成你要执行的函数名 // }, 1000); // ; // } printFlowCardId.value = row.flowCardId; printLayer.value = row.layer dialogTableVisible.value = true; setTimeout(() => { printFlowCard(); // 替换成你要执行的函数名 dialogTableVisible.value = false; }, 1000); ; // const printFlowCard = () => { // // 需要打印的局部区域赋予"print-wrap"的id // let el = document.getElementById("child"); // let doc = document; // let body = doc.body || doc.getElementsByTagName("body")[0]; // let printId = "print-" + Date.now(); } // // 创建无副作用的打印容器(因不确定页面的打印元素有无其它样式) // let content = doc.createElement("div"); // content.id = printId; const printFlowCard = () => { // 需要打印的局部区域赋予"print-wrap"的id let el = document.getElementById("child"); let doc = document; let body = doc.body || doc.getElementsByTagName("body")[0]; let printId = "print-" + Date.now(); // // 样式控制与打印无关的元素隐藏 // let style = doc.createElement("style"); // style.innerHTML = // "body>#" + // printId + // "{display:none}@media print{" + // "@page {" + // " size: auto; " + // " margin: 2mm 2mm 0mm 1mm; " + // " }body>:not(#" + // printId + // "){display:none !important}body>#" + // printId + // "{display:block;padding-top:1px}}"; // // // content.innerHTML = el.outerHTML; // // // console.log("el.outerHTML", el.outerHTML); // body.appendChild(style); // 创建无副作用的打印容器(因不确定页面的打印元素有无其它样式) let content = doc.createElement("div"); content.id = printId; // // 与style元素设置的样式相配合 // // 把打印内容的元素添加到body(作为body的子元素,可用body的子选择器 '>' 控制打印样式) // body.appendChild(content); // setTimeout(() => { // window.print(); // body.removeChild(content); // body.removeChild(style); // }, 20); // } // 样式控制与打印无关的元素隐藏 let style = doc.createElement("style"); style.innerHTML = "body>#" + printId + "{display:none}@media print{" + "@page {" + " size: auto; " + " margin: 2mm 2mm 0mm 1mm; " + " }body>:not(#" + printId + "){display:none !important}body>#" + printId + "{display:block;padding-top:1px}}"; // content.innerHTML = el.outerHTML; // // console.log("el.outerHTML", el.outerHTML); body.appendChild(style); // 与style元素设置的样式相配合 // 把打印内容的元素添加到body(作为body的子元素,可用body的子选择器 '>' 控制打印样式) body.appendChild(content); setTimeout(() => { window.print(); body.removeChild(content); body.removeChild(style); }, 20); } // beforeUnmount(() => { @@ -294,7 +347,10 @@ <template> <div> <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="primary" @click="dialogFormVisibleaDownGlass = true">落架详情</el-button> @click="dialogFormVisibleaDownGlass = true">落架详情 </el-button> <el-switch style="margin-top: 5px;margin-left: 10px;" v-model="autoPrint" class="mb-2" :inactive-text="$t('自动打印')" @change="handleChange"/> <el-card style="flex: 1;" v-loading="loading"> <el-card style="flex: 1;margin-left: 4px;margin-top: 1px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> @@ -321,7 +377,8 @@ <el-table-column fixed="right" :label="$t('reportWork.operate')" align="center" width="200"> <template #default="scope"> <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '已启用'" @click="handleBindRack(scope.row)">{{ $t('reportWork.bindingshelves') }}</el-button> @click="handleBindRack(scope.row)">{{ $t('reportWork.bindingshelves') }} </el-button> <el-button size="mini" type="text" plain @click="handleBindRack2(scope.row)">{{ $t('reportWork.clear') }}</el-button> <el-button @click="open(scope.row)" :disabled="scope.row.flowCardId==null">打印</el-button> @@ -351,12 +408,16 @@ @input="handleInputChangea($event, row.id)"> <el-option v-for="item in selectOptionsa" :key="item" :label="item" :value="item" /> </el-select> <el-date-picker style="margin-left: 10px;" v-model="timeRange" type="daterange" format="YYYY/MM/DD" value-format="YYYY-MM-DD" :start-placeholder="$t('reportmanage.starttime')" :end-placeholder="$t('reportmanage.endtime')" :default-time="defaultTime" /> <span class="demonstration">时间段</span> <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> </el-date-picker> <el-button type="primary" style="margin-left: 10px;" @click="selectDownGlassData()">{{ $t('reportmanage.inquire') }}</el-button> }} </el-button> <el-table height="200px" ref="table" @selection-change="handleSelectionChange" :data="downGlass" :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> <el-table-column prop="workStationId" align="center" :label="$t('工位号')" min-width="80" /> @@ -429,17 +490,13 @@ </template> </el-dialog> <!-- <el-dialog id="sizePrintCalrd" v-model="dialogTableVisible" destroy-on-close style="width: 75%;height:75% "> <print-flow id="child" :printFlowCardId="printFlowCardId" :printLayer="printLayer" <el-dialog id="sizePrintCalrd" v-model="dialogTableVisible" destroy-on-close style="width: 75%;height:75% "> <!-- <template #header="{ close, titleId, titleClass }"> <el-button @click="printFlowCard" >打印</el-button> </template> --> <print-flow id="child" :printFlowCardId="printFlowCardId" :printLayer="printLayer" style="width: 100%;height: 100%"/> </el-dialog> --> </el-dialog> </template> <style scoped> hangzhoumesParent/JsonFile/PlcdownGlass.json
File was deleted hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
@@ -1,5 +1,6 @@ package com.mes.edgglasstask.entity; import com.baomidou.mybatisplus.annotation.TableLogic; import lombok.Data; import lombok.EqualsAndHashCode; @@ -36,4 +37,7 @@ private Date time; @TableLogic private int deleted; } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java
@@ -19,4 +19,10 @@ List<EdgGlassTaskInfo> selectEdgInfo(); String setEdgGlassInfoRequest(EdgGlassInfoRequest request); /** * 查询判断磨边线是否有玻璃运行 * @param * @return */ List<EdgGlassTaskInfo> selectTaskCacheIsRun(); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
@@ -2,6 +2,7 @@ import cn.smallbun.screw.core.util.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.common.utils.RedisUtil; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; @@ -50,4 +51,18 @@ } return "success"; } /** * 查询判断磨边线是否有玻璃运行 * @param * @return */ @Override public List<EdgGlassTaskInfo> selectTaskCacheIsRun() { QueryWrapper<EdgGlassTaskInfo> wrapper = new QueryWrapper<EdgGlassTaskInfo>() .select("line") .eq("status", 1) .groupBy("line"); return this.list(wrapper); } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
@@ -1,20 +1,16 @@ package com.mes.edgstoragecage.controller; import com.mes.edgglasstask.entity.request.IdentWornRequest; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; import com.mes.edgstoragecage.service.EdgStorageCageService; import com.mes.edgstoragecage.service.impl.EdgStorageCageServiceImpl; import com.mes.taskcache.entity.TaskCache; import com.mes.taskcache.service.impl.TaskCacheServiceImpl; import com.mes.utils.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.awt.image.ImageProducer; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -44,13 +40,7 @@ List<Map<String, Object>> list=edgStorageCageService.selectEdgStorageCages(); return Result.build(200,"成功",list); } // @ApiOperation("添加磨边缓存理片笼信息 功能:笼内绑定玻璃 参数(EdgStorageCage edgStorageCage)") // @PostMapping("/insertEdgStorageCage") // @ResponseBody // public Result insertEdgStorageCage(@RequestBody EdgStorageCage edgStorageCage) { // boolean isSucess=edgStorageCageService.updateEdgStorageCage(edgStorageCage); // return Result.build(200,"添加成功",1); // } @ApiOperation("修改磨边缓存理片笼信息 功能:对笼内栅格进行【启用/禁用】") @PostMapping("/updateEdgStorageCage") @ResponseBody @@ -68,16 +58,11 @@ return Result.build(200,"【清除/更换/绑定】"+isSucess,1); } @ApiOperation("磨边模块汇报玻璃状态 功能:对笼内栅格玻璃进行【破损/拿走】 ") @PostMapping("/edgReportStatus") @ResponseBody public Result edgReportStatus(@RequestBody Map<String, String> arguments) { /*arguments.put("line","1002"); arguments.put("machine","卧式理片");*/ String isSucess=edgStorageCageDetailsService.identWorn(arguments)?"成功":"失败"; return Result.build(200,"【破损/拿走】"+isSucess,1); public Result edgReportStatus(@RequestBody IdentWornRequest request) { return Result.build(200, "【破损/拿走】" + edgStorageCageDetailsService.edgReportStatus(request), 1); } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
@@ -1,6 +1,7 @@ package com.mes.edgstoragecage.service; import com.github.yulichang.base.MPJBaseService; import com.mes.edgglasstask.entity.request.IdentWornRequest; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import java.util.List; @@ -15,13 +16,6 @@ * @since 2024-04-07 */ public interface EdgStorageCageDetailsService extends MPJBaseService<EdgStorageCageDetails> { /** * 识别 破损/拿走 * @param arguments * @return */ boolean identWorn(Map<String, String> arguments); /** * 获取 切割当前版图 @@ -46,9 +40,26 @@ /** * 获取出片信息数据 * * @param glassId * @param threshold * @return */ EdgStorageCageDetails selectOutGlass(String glassId, int threshold); /** * 识别 拿走:9/破损:8 * * @param request * @return */ String identControls(IdentWornRequest request); /** * 磨边模块汇报玻璃状态 功能:对笼内栅格玻璃进行【破损/拿走】 * * @param request * @return */ String edgReportStatus(IdentWornRequest request); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -2,6 +2,7 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.query.MPJLambdaQueryWrapper; @@ -10,12 +11,14 @@ import com.mes.common.config.Const; import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; import com.mes.edgglasstask.entity.EdgGlassTaskInfo; import com.mes.edgglasstask.entity.request.IdentWornRequest; import com.mes.edgglasstask.service.EdgGlassTaskInfoService; import com.mes.edgstoragecage.entity.EdgStorageCage; import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper; import com.mes.edgstoragecage.mapper.EdgStorageCageMapper; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.pp.entity.OptimizeDetail; import com.mes.pp.entity.OptimizeLayout; @@ -26,12 +29,11 @@ import com.mes.uppattenusage.mapper.UpPattenUsageMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.print.attribute.standard.MediaSize; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -65,66 +67,8 @@ @Autowired DamageService damageService; /** * 识别 拿走:200/破损:201 * * @param arguments * @return */ @Override public boolean identWorn(Map<String, String> arguments) { String glassId=arguments.get("glassId"); int controlsId=arguments.get("controlsId").isEmpty()?0:Integer.parseInt(arguments.get("controlsId")); int line=arguments.get("line").isEmpty()?0:Integer.parseInt(arguments.get("line")); String machine=arguments.get("machine"); if(controlsId==0||line==0||machine==null||glassId==null||glassId.isEmpty()){ log.info("前端传递数据不全:{}",arguments); return false; } int state; if(controlsId==200||controlsId==201){ state=controlsId==200?3:2; }else if (controlsId==300||controlsId==301){ state=controlsId==300?3:2; }else{ log.info("前端传递状态不合法:{}",arguments); return false; } List<GlassInfo> GlassInfos = glassInfoMapper.selectList(new MPJLambdaQueryWrapper<GlassInfo>() .selectAll(GlassInfo.class) .eq(GlassInfo::getGlassId, glassId)); if (GlassInfos.size() == 1) { Damage damage =new Damage(); damage.setGlassId(glassId); damage.setLine(line); damage.setWorkingProcedure(machine); damage.setRemark(""); damage.setStatus(state);//201破损,200拿走 =》破损表 2破损 3 拿走 damageService.insertDamage(damage); }else{ return false; } List<EdgStorageCageDetails> edgStorageCageDetails = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>() .selectAll(EdgStorageCageDetails.class) .eq(EdgStorageCageDetails::getGlassId, glassId)); if (edgStorageCageDetails.size() == 1) { EdgStorageCageDetails item = edgStorageCageDetails.get(0); item.setState(controlsId); baseMapper.update(item, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class).eq(EdgStorageCageDetails::getGlassId, glassId)); } // Sql版本 // List<EdgStorageCageDetails> edgStorageCageDetails = baseMapper.selectList(new QueryWrapper<EdgStorageCageDetails>().eq("glass_id", glassId)); // if (edgStorageCageDetails.size() == 1) { // EdgStorageCageDetails item=edgStorageCageDetails.get(0); // item.setState(ControlsId); // baseMapper.update(edgStorageCageDetails.get(0), new QueryWrapper<EdgStorageCageDetails>().eq("glass_id", glassId)); // return true; // } return true; } @Autowired EdgGlassTaskInfoService edgGlassTaskInfoService; /** * 获取 切割当前版图 @@ -331,4 +275,31 @@ } return outEdgStorageCageDetails; } @Override public String identControls(IdentWornRequest request) { //将识别破损的玻璃直接加入破损表 Damage damage = new Damage(); BeanUtils.copyProperties(request, damage); damage.setType(request.getState()); damage.setRemark(""); damage.setStatus(0); damageService.insertDamage(damage); return "success"; } @Override public String edgReportStatus(IdentWornRequest request) { //将磨边队列破损的玻璃直接加入破损表 Damage damage = new Damage(); BeanUtils.copyProperties(request, damage); damage.setType(request.getState()); damage.setRemark(""); damage.setStatus(0); damageService.insertDamage(damage); //修改磨边队列数据状态 edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>() .set(EdgGlassTaskInfo::getStatus, request.getState()).eq(EdgGlassTaskInfo::getGlassId, request.getGlassId())); return "success"; } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -146,23 +146,6 @@ log.info("本次任务结束时间:{},共耗时:{}ms", endDate, endDate.getTime() - startDate.getTime()); } @Scheduled(fixedDelay = 1000) public void temperingIsRun() { JSONObject jsonObject = new JSONObject(); //正在进行的任务 List<TaskCache> taskCaches = taskCacheService.selectTaskCacheIsRun(); jsonObject.append("taskCaches", taskCaches); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("isRun"); 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 dealDamageTask() { @@ -782,7 +765,7 @@ public void cacheGlassIsRun() { JSONObject jsonObject = new JSONObject(); //正在进行的任务 List<TaskCache> taskCaches = taskCacheService.selectTaskCacheIsRun(); List<EdgGlassTaskInfo> taskCaches = edgGlassTaskInfoService.selectTaskCacheIsRun(); jsonObject.append("taskCaches", taskCaches); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlassIsRun"); if (sendwServer != null) { hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
@@ -1,8 +1,7 @@ package com.mes.taskcache.controller; import com.mes.edgglasstask.entity.request.IdentWornRequest; import com.mes.edgstoragecage.service.EdgStorageCageDetailsService; import com.mes.edgstoragecage.service.EdgStorageCageService; import com.mes.taskcache.entity.TaskCache; import com.mes.taskcache.service.TaskCacheService; import com.mes.utils.Result; import io.swagger.annotations.Api; @@ -12,8 +11,6 @@ import java.util.List; import java.util.Map; import static com.mes.job.CacheGlassTask.engineerId; /** * <p> @@ -32,8 +29,6 @@ private EdgStorageCageDetailsService edgStorageCageDetailsService; @Autowired private EdgStorageCageService edgStorageCageService; @Autowired private TaskCacheService taskCacheService; @ApiOperation("查询切割版图信息-根据 工程号 参数(工程号)") @@ -44,6 +39,7 @@ List<List<Map<String, Object>>> h = edgStorageCageDetailsService.selectCurrentCutTerritory(current); return Result.build(200,"成功",h); } @ApiOperation("识别显示 当前版图 参数()") @PostMapping("/currentCutTerritory") @ResponseBody @@ -51,16 +47,12 @@ List<Map<String, Object>> h = edgStorageCageDetailsService.selectCutTerritory(); return Result.build(200,"成功",h); } @ApiOperation("识别操作: 破损/拿走 参数(ID,功能[200:拿走,201:破损])") @ApiOperation("识别操作: 破损/拿走 参数(ID,功能[9:拿走,8:破损])") @PostMapping("/identControls") @ResponseBody public Result identControls(@RequestBody Map<String, String> arguments) { /* arguments.put("glassId","玻璃ID"); arguments.put("controlsId","功能号[200拿走/201破损]");*/ /*arguments.put("line","1001"); arguments.put("machine","识别");*/ boolean issucess = edgStorageCageDetailsService.identWorn(arguments); return Result.build(200,"成功",issucess); public Result<String> identControls(@RequestBody IdentWornRequest request) { return Result.build(200, "成功", edgStorageCageDetailsService.identControls(request)); } @ApiOperation("磨边任务 参数()") hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
@@ -73,11 +73,6 @@ * @return */ TaskCache selectLastOutCacheInfo(int line); /** * 查询判断磨边线是否有玻璃运行 * @param * @return */ List<TaskCache> selectTaskCacheIsRun(); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
@@ -180,23 +180,7 @@ return baseMapper.selectOne(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell, line).eq(TaskCache::getTaskStatus, 1).orderByDesc(TaskCache::getCreateTime)); } /** * 查询判断磨边线是否有玻璃运行 * * @param * @return */ @Override public List<TaskCache> selectTaskCacheIsRun() { List<TaskCache> taskCaches = null; taskCaches = taskCacheMapper.selectJoinList(TaskCache.class, new MPJLambdaWrapper<TaskCache>() .select("top 4 t.end_cell,ISNULL(b.glass_id, 0)as glass_id") .leftJoin("big_storage_cage_feed_task as b on t.glass_id=b.glass_id ") .groupBy("t.end_cell,b.glass_id,t.create_time") .orderByDesc("t.create_time") ); return taskCaches; } } hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
@@ -149,7 +149,7 @@ arguments.put("controlsId","300"); //拿走:200/破损:201 arguments.put("line","2001"); //线路: arguments.put("machine","冷加工"); //设备名称: edgStorageCageDetailsService.identWorn(arguments); // edgStorageCageDetailsService.identWorn(arguments); log.info("识别台【破损/拿走】:{}", 1); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -506,10 +506,10 @@ } //获取出片任务表中状态为破损的数据 List<BigStorageCageOutTask> outDamageTaskInfoList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>() .eq(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); .in(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); if (CollectionUtils.isNotEmpty(outDamageTaskInfoList)) { log.info("获取出片任务表中破损的玻璃信息{}", outDamageTaskInfoList); bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().in(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE)); List<String> glassIdList = outDamageTaskInfoList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList()); //移除钢化下片表数据 temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getGlassId, glassIdList)); @@ -713,7 +713,7 @@ while (returnData == 0) { s7control.writeWord(outLine, 2); returnData = s7control.readWord(outLine, 1).get(0); log.info("已向plc第{}次发送送片任务确认,地址为:{},写入的内容为{}", count++, outLine, returnData); log.info("已向plc第{}次发送进片任务确认,地址为:{},写入的内容为{}", count++, outLine, returnData); } } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -3,20 +3,20 @@ spring: profiles: active: prod active: cz application: name: cacheVerticalGlass mybatis-plus: mapper-locations: classpath*:mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # configuration: # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mes: sequence: order: false minCount: 5 minCount: 20 carWidth: 5000 #大车宽度 slotWidth: 5000 #大车宽度 inCarMaxSize: 2 #进片大车最大存放玻璃数量 inCarMaxSize: 3 #进片大车最大存放玻璃数量 outCarMaxSize: 3 #出片大车最大存放玻璃数量 glassGap: 1000 #玻璃间距 glassGap: 350 #玻璃间距 xMaxSize: 2850 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
@@ -1,5 +1,6 @@ package com.mes.downglassinfo.controller; import com.mes.downglassinfo.entity.DownGlassInfo; import com.mes.downglassinfo.entity.request.DownGlassInfoRequest; import com.mes.downglassinfo.service.DownGlassInfoService; import com.mes.utils.Result; @@ -31,4 +32,9 @@ } @PostMapping("/downGlassPrint") public Result downGlassPrint(@RequestBody DownGlassInfo downGlassInfo) { return Result.build(200, "查询成功", downGlassInfoService.downGlassPrint(downGlassInfo)); } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/request/DownGlassInfoRequest.java
@@ -6,7 +6,6 @@ import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.sql.Timestamp; import java.util.Date; /** @@ -34,14 +33,14 @@ /** * 开始时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd") private Date beginDate; /** * 结束时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd") private Date endDate; hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
@@ -1,7 +1,6 @@ package com.mes.downglassinfo.service.impl; import cn.smallbun.screw.core.util.CollectionUtils; import cn.smallbun.screw.core.util.CollectionUtils; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -27,8 +26,9 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.HashMap;import java.util.Map; import java.util.Map; import java.util.stream.Collectors; @Service @@ -105,6 +105,7 @@ BeanUtils.copyProperties(details, downGlassInfo); //获取当前流程卡最大片序 downGlassInfo.setSequence(this.getMaxSequenceByFlowCardId(details.getFlowCardId(), details.getLayer()) + 1); downGlassInfo.setWorkStationId(Const.G13_WORK_STATION); this.save(downGlassInfo); //生成任务信息 并向plc发送出片任务 GlassInfo glassInfo = new GlassInfo(); hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
@@ -2,6 +2,7 @@ import com.mes.downstorage.entity.DownStorageCage; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.entity.request.CacheWornRequest; import com.mes.downstorage.service.DownStorageCageDetailsService; import com.mes.downstorage.service.DownStorageCageService; import com.mes.utils.Result; @@ -61,8 +62,9 @@ @ApiOperation("删除缓存理片笼信息 功能:对笼内栅格玻璃进行【清除】") @PostMapping("/deleteDownStorageCage") @ResponseBody public Result deleteDownStorageCage(@RequestBody DownStorageCageDetails downStorageCageDetails,int downStorageCageId) { boolean isSucess=downStorageCageService.updateDownStorageCageDetails(downStorageCageId,downStorageCageDetails); public Result deleteDownStorageCage(@RequestBody CacheWornRequest cacheWornRequest) { downStorageCageService.deleteDownStorageCage(cacheWornRequest); // boolean isSucess=downStorageCageService.updateDownStorageCageDetails(downStorageCageId,downStorageCageDetails); return Result.build(200,"删除成功",1); } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageService.java
@@ -4,6 +4,7 @@ import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downstorage.entity.DownStorageCage; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.entity.request.CacheWornRequest; import com.mes.glassinfo.entity.GlassInfo; import java.util.List; @@ -53,6 +54,8 @@ List<Map<String, Object>> selectDownStorageCages(); List<DownStorageCageDetails> selectCacheMax(); void deleteDownStorageCage(CacheWornRequest cacheWornRequest); } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
@@ -1,14 +1,18 @@ package com.mes.downstorage.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.mes.common.config.Const; import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downglassinfo.service.DownGlassTaskService; import com.mes.downstorage.entity.DownStorageCage; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.downstorage.entity.request.CacheWornRequest; import com.mes.downstorage.mapper.DownStorageCageDetailsMapper; import com.mes.downstorage.mapper.DownStorageCageMapper; import com.mes.downstorage.service.DownStorageCageDetailsService; @@ -46,6 +50,8 @@ private DownStorageCageDetailsService downStorageCageDetailsService; @Autowired private DownStorageCageDetailsMapper downStorageCageDetailsMapper; @Autowired DamageService damageService; @Override public DownGlassTask createDownGlassTask(GlassInfo glassInfo, Integer startCell, Integer endCell, Integer taskType) { @@ -128,7 +134,6 @@ } @Override public List<Map<String, Object>> selectDownStorageCages() { return baseMapper.selectJoinMaps(JoinWrappers.lambda(DownStorageCage.class) @@ -190,7 +195,10 @@ if (downItem != null) { //移除 DownStorageCageDetails result = downStorageCageDetailsMapper.selectOne(new MPJLambdaWrapper<DownStorageCageDetails>().eq(DownStorageCageDetails::getSlot, downStorageCageId)); DownStorageCageDetails result = downStorageCageDetailsMapper .selectOne(new MPJLambdaWrapper<DownStorageCageDetails>() .eq(DownStorageCageDetails::getSlot, downStorageCageId) ); if (result != null) { result.setSlot(0); downStorageCageDetailsMapper.updateById(result); @@ -200,4 +208,19 @@ return true; } @Override public void deleteDownStorageCage(CacheWornRequest cacheWornRequest) { Damage damage = new Damage(); BeanUtils.copyProperties(cacheWornRequest, damage); damage.setType(cacheWornRequest.getState()); damage.setRemark(""); damage.setStatus(0); damageService.insertDamage(damage); downStorageCageDetailsService.update(new LambdaUpdateWrapper<DownStorageCageDetails>() .set(DownStorageCageDetails::getState, Const.GLASS_STATE_OUT) .eq(DownStorageCageDetails::getGlassId, cacheWornRequest.getGlassId()) .eq(DownStorageCageDetails::getState,Const.GLASS_STATE_IN)); } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
@@ -1,6 +1,7 @@ package com.mes.downworkstation.controller; import com.mes.common.utils.RedisUtil; import com.mes.downworkstation.entity.DownWorkstation; import com.mes.downworkstation.entity.request.DownWorkRequest; import com.mes.downworkstation.service.DownWorkstationService; @@ -11,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; import java.util.Map; @@ -32,6 +34,8 @@ private DownWorkstationService downWorkstationService; @Autowired private GlassInfoService glassInfoService; @Resource private RedisUtil redisUtil; @ApiOperation("获取工位信息") @GetMapping("/getone") @@ -81,7 +85,6 @@ return Result.build(200, "清除工位信息成功", 1); // 构建响应数据 } @@ -127,6 +130,13 @@ return Result.build(200, "更换成功", downWorkstationService.closeAlarmSignal()); } @ApiOperation("是否自动打印") @PostMapping("/autoPrint") public Result autoPrint(Boolean flag) { downWorkstationService.autoPrint(flag); return Result.build(200, "修改成功", redisUtil.getCacheObject("autoPrint")); } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/DownWorkstationService.java
@@ -79,4 +79,6 @@ boolean updateDownWorkstationstate(DownWorkstation downWorkstation); String closeAlarmSignal(); void autoPrint(Boolean flag); } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
@@ -5,13 +5,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.query.MPJQueryWrapper; import com.mes.common.S7object; import com.mes.common.utils.RedisUtil; import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; import com.mes.device.PlcParameterObject; import com.mes.downglassinfo.entity.DownGlassInfo; import com.mes.downglassinfo.mapper.DownGlassInfoMapper; import com.mes.downglassinfo.service.DownGlassInfoService; import com.mes.downglassinfo.service.DownGlassTaskService; import com.mes.downworkstation.entity.DownWorkstation; import com.mes.downworkstation.entity.DownWorkstationTask; import com.mes.downworkstation.entity.DownWorkstionAndDownGlassinfo; @@ -25,6 +24,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -39,11 +39,7 @@ @Autowired(required = false) private DownWorkstationTaskMapper downWorkstationTaskMapper; @Autowired private DownGlassInfoService downGlassInfoService; @Autowired private DownGlassInfoMapper downGlassInfoMapper; @Autowired private DownGlassTaskService downGlassTaskService; @Autowired private GlassInfoService glassInfoService; @Autowired @@ -51,6 +47,8 @@ @Autowired private DownWorkstationTaskService downWorkstationTaskService; @Resource private RedisUtil redisUtil; // @Override // public List<DownWorkstation> gettwoDownWorkstations() { @@ -223,5 +221,9 @@ return "success"; } @Override public void autoPrint(Boolean flag) { redisUtil.setCacheObject("autoPrint", flag); } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -3,6 +3,7 @@ import cn.hutool.core.lang.Assert; import cn.smallbun.screw.core.util.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.mes.common.S7object; @@ -164,6 +165,31 @@ log.info("本次任务结束时间:{},共耗时:{}ms", endDate, endDate.getTime() - startDate.getTime()); } /** * 更新已绑定工位流程卡的破损/拿走的数量信息 */ @Scheduled(fixedDelay = 1000) public void updateWorkStationOtherCount() { Date startDate = new Date(); log.info("下片破更新损玻璃数量任务开始执行时间:{}", startDate); //获取已绑定流程卡的工位信息 List<DownWorkstation> downWorkstationList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>() .isNotNull(DownWorkstation::getFlowCardId) .ne(DownWorkstation::getFlowCardId, "") .orderByDesc(DownWorkstation::getWorkstationId)); for (DownWorkstation downWorkstation : downWorkstationList) { //更新工位其他玻璃信息的数量 QueryWrapper<Damage> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("process_id", downWorkstation.getFlowCardId()); queryWrapper.eq("technology_number", downWorkstation.getLayer()); int otherNumber = damageService.count(queryWrapper); downWorkstationService.update(new LambdaUpdateWrapper<DownWorkstation>().set(DownWorkstation::getOtherNumber, otherNumber) .eq(DownWorkstation::getWorkstationId, downWorkstation.getWorkstationId())); } Date endDate = new Date(); log.info("下片破更新损玻璃数量任务结束时间:{},共耗时:{}ms", endDate, endDate.getTime() - startDate.getTime()); } public void inTo(String glassId, String requestWord, String currentSlot) { log.info("1、按照玻璃id:{}获取玻璃小片信息,当前格子为:{}", glassId, currentSlot); //添加进片任务 查找空格 @@ -253,6 +279,7 @@ BeanUtils.copyProperties(glassInfo, downStorageCageDetails); downStorageCageDetails.setState(Const.GLASS_STATE_IN); downStorageCageDetails.setSlot(nearestEmpty.getSlot()); downStorageCageDetails.setDeviceId(nearestEmpty.getDeviceId()); downStorageCageDetailsService.save(downStorageCageDetails); // 生成进片任务 initDownGlassTask(glassInfo, 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN); @@ -275,6 +302,7 @@ //获取当前笼子空格信息 DownStorageCage empty = downStorageCageService.selectCacheEmpty(Integer.parseInt(currentSlot), Boolean.TRUE); cageDetails.setSlot(empty.getSlot()); cageDetails.setDeviceId(empty.getDeviceId()); tempList.add(cageDetails); } log.info("出片2:笼内玻璃的数据(包括待进片)有:{}", tempList); @@ -378,8 +406,15 @@ .filter(item -> StringUtils.isNotBlank(item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer())); //过滤筛选获取架子上对应流程卡+层数的笼子内的玻璃信息 list = tempList.stream().filter(item -> listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList()); if (CollectionUtils.isEmpty(list) && flag08 && !"2".equals(glassStatus13)) { list = tempList.stream().filter(item -> { double firstLength = Math.max(item.getWidth(), item.getHeight()); double secondLength = Math.min(item.getWidth(), item.getHeight()); return firstLength > maxWidth || secondLength > maxHeight; }).collect(Collectors.toList()); } } else { log.info("存在未绑定流程卡架子,直接获取笼内所有玻璃,且未绑定架子的玻璃信息"); log.info("存在未绑定流程卡架子,直接获取笼内所有玻璃,且未绑定架子的玻璃信息(都可以出的玻璃)"); //获取禁用及非本机械臂的架子的流程号及层数对应的玻璃信息 List<DownWorkstation> downWorkstationOffList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>() .and(i -> i.in(DownWorkstation::getWorkstationId, offWorkStationList).or().eq(DownWorkstation::getEnableState, Const.SLOT_OFF))); @@ -409,6 +444,8 @@ log.info("笼内玻璃无法执行出片"); return Boolean.FALSE; } //获取具体出那一片玻璃 //tao:人工--> 所有架子都未绑定时进行绑定 --->有未绑定架子时进行绑定 --->绑定过流程卡的玻璃-->玻璃流程卡多层--->玻璃流程卡单层 String tempGlassId = null; Boolean isNeedBind = Boolean.FALSE; @@ -426,7 +463,7 @@ loop: if (StringUtils.isBlank(tempGlassId)) { //获取正在落架的绑定流程卡的信息(流程卡、层数、落架数量) //todo:落架玻璃数为0,即使绑定了流程卡,也无法找到对应的架子信息,只能重新绑定 //落架玻璃数为0,即使绑定了流程卡,也无法找到对应的架子信息,只能重新绑定 List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationFlowCard(workList); List<String> downGlassFlowList = downGlassInfoDTOList.stream().map(item -> item.getFlowCardId() + ":" + item.getLayer()).collect(Collectors.toList()); if (CollectionUtils.isEmpty(downGlassFlowList)) { @@ -436,6 +473,7 @@ break loop; } //将笼子内的玻璃进行过滤,仅获取无法落架的流程卡玻璃 //tao:当有空架时优先对笼内可出片且未绑架子的玻璃进出绑架并出片 List<DownStorageCageDetails> noDownLoadList = list.stream().filter(item -> !downGlassFlowList.contains(item.getFlowCardId() + ":" + item.getLayer())) .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(noDownLoadList)) { @@ -456,7 +494,7 @@ return Boolean.FALSE; } //将笼内玻璃的流程卡+层号 和落架的流程卡 去重,得出展示无法落架的玻璃,判断玻璃数是否超过阈值 //笼内玻璃是否可落架:笼内是否有需要中空的 //笼内玻璃是否可落架:笼内是否有需要中空 List<DownStorageCageDetails> multiLayerList = list.stream().filter(item -> item.getTotalLayer() >= 2).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(multiLayerList)) { for (DownStorageCageDetails item : multiLayerList) { @@ -473,7 +511,7 @@ break loop; } Integer sequence = downGlassInfoService.queryMaxSequence(item.getFlowCardId(), item.getLayer()); log.info("获取当前玻璃需要放的次序:笼内同流程 同层数的通达次序+1:{}", sequence); log.info("获取当前玻璃需要放的次序:笼内同流程 同层数的落架次序+1:{}", sequence); DownGlassInfo downGlassInfo = downGlassInfoService.getOne(new LambdaQueryWrapper<DownGlassInfo>() .eq(DownGlassInfo::getFlowCardId, downGlassInfoDTO.getFlowCardId()) .eq(DownGlassInfo::getLayer, downGlassInfoDTO.getLayer()).eq(DownGlassInfo::getSequence, sequence)); hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
@@ -129,6 +129,16 @@ JSONObject jsonObject4 = new JSONObject(); jsonObject4.append("downGlassInfos", listMap); jsonObject4.append("engineerIdList", engineerIdList); //钢化开关 boolean autoPrint = false; if (redisUtil.getCacheObject("autoPrint") == null) { redisUtil.setCacheObject("autoPrint", false); } else { autoPrint = redisUtil.getCacheObject("autoPrint"); } jsonObject4.append("autoPrint", autoPrint); ArrayList<WebSocketServer> sendwServer4 = WebSocketServer.sessionMap.get("unloadglass"); if (sendwServer4 != null) { for (WebSocketServer webserver : sendwServer4) { hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/JsonFile/PlcdownGlass.json
File was deleted