UI-Project/src/utils/constants.js
@@ -1 +1,3 @@ export const WebSocketHost = "localhost"; // export const WebSocketHost = "192.168.1.199"; export const WebSocketHost = "10.153.19.150"; export const host = "88"; UI-Project/src/views/Caching/cachingbefore.vue
@@ -4,6 +4,7 @@ import {useRouter} from "vue-router" const router = useRouter() const adda = ref(false) import { WebSocketHost ,host} from '@/utils/constants' import request from "@/utils/request" import { ref, onMounted , onBeforeUnmount} from "vue"; @@ -15,7 +16,6 @@ const tableData = ref([]) const slot = ref('') const adjustedRects = ref([]); onMounted(async () => { try { const response = await request.post('/cacheGlass/edgStorageCage/selectEdgStorageCage'); // 替换为你的API端点 @@ -78,7 +78,7 @@ console.error('发生错误:', error); } }; const socketUrl = `ws://10.153.19.150:88/api/cacheGlass/api/talk/cacheGlass`; const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 UI-Project/src/views/Caching/cachingun.vue
@@ -4,13 +4,14 @@ import {useRouter} from "vue-router" const router = useRouter() const adda = ref(false) import { WebSocketHost ,host} from '@/utils/constants' import request from "@/utils/request" import { ref, onMounted } from "vue"; import { ref, onMounted , onBeforeUnmount} from "vue"; import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; // import { ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' // import LanguageMixin from './lang/LanguageMixin' const tableData = ref([]) const slot = ref('') const adjustedRects = ref([]); @@ -35,7 +36,7 @@ // console.error('Error fetching rects :', error); } }); const open = async(row) => { try { const confirmResult = await ElMessageBox.confirm( @@ -67,8 +68,44 @@ console.error('发生错误:', error); } }; </script> const toggleEnableState = async (row) => { const newState = row.enable_state === 1 ? 0 : 1; // 发送请求到后端更新状态(这里省略了实际的请求逻辑) const response = await request.post('/unLoadGlass/downStorage/updateDownStorageCage', { id: row.id, enablestate: newState }); if (response.code === 200) { ElMessage.success(response.message); } else { ElMessage.error(response.message); } row.enable_state = newState; }; const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 tableData.splice(0, tableData.length, ...data.params[0]); // tableData.value = data.params[0] // adjustedRects.value = data.EdgStorageCageinfos[0] adjustedRects.value = data.params[0].map(rect => ({ ...rect, // 复制原始对象的其他属性 width: rect.width * 0.5 , id: rect.id * 10, })); }; // 初始化 WebSocket,并传递消息处理函数 onMounted(() => { // fetchFlowCardId(); // fetchTableData(); // 获取数据 initializeWebSocket(socketUrl, handleMessage); }); onBeforeUnmount(() => { console.log("关闭了") closeWebSocket(); }); </script> <template> <div> <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading"> @@ -81,14 +118,22 @@ <el-table-column prop="width" align="center" label="宽" min-width="120" /> <el-table-column prop="height" align="center" label="高" min-width="120" /> <el-table-column align="center" align="center" label="启用状态" min-width="80" prop="enable_state" > <template #default="scope"> <template #default="scope"> <el-tag :type="scope.row.enable_state === 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)" > {{ scope.row.enable_state === 1 ? '启用' : '禁用' }} </el-tag> </template> <!-- <template #default="scope"> <el-tag type="success" >{{ scope.row.enable_state==1?"启用":"未启用" }}</el-tag> </template> </template> --> </el-table-column> <el-table-column fixed="right" label="操作" align="center" width="200"> <template #default="scope"> @@ -113,14 +158,11 @@ > </div> </div> <!-- <div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: -124px;margin-left: 480px;"></div> <div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: -30px;margin-left: 850px;"></div> <div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: 30px;margin-left: 695px;"></div> --> </div> </template> <style scoped> #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} #dta { display:block; float:left;line-height: 20px;margin-left: 80%;} #dialog-footer{ UI-Project/src/views/Identify/identify.vue
@@ -38,12 +38,12 @@ </el-scrollbar> </el-card> </template> <script setup lang="ts"> import { Delete, Upload } from '@element-plus/icons-vue' import { ElMessage, ElMessageBox } from 'element-plus' import { ref, onMounted, onBeforeUnmount } from 'vue'; import request from "@/utils/request" import { WebSocketHost ,host} from '@/utils/constants' import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; const blind = ref(false) const olWidth = ref(); @@ -175,7 +175,7 @@ } }); } const socketUrl = `ws://10.153.19.150:88/api/cacheGlass/api/talk/cacheGlass`; const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -3,10 +3,10 @@ import {reactive} from "vue"; import {useRouter} from "vue-router" import request from "@/utils/request" import { ref, onMounted } from 'vue'; // import { ref } from 'vue' import { ref, onMounted, onBeforeUnmount } from 'vue'; import { WebSocketHost ,host} from '@/utils/constants' import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; const dialogFormVisible = ref(true) const dialogFormVisiblea = ref(false) const dialogFormVisibleb = ref(false) @@ -16,96 +16,137 @@ const adjustedRectsa = ref([]); const adjustedRectsb = ref([]); // 进炉中 onMounted(async () => { try { const response = await request.get('/temperingGlass/temperingGlassInfo/SelectIntoGlass'); if (response.code === 200) { const rawRects = response.data; // 设置矩形数据 console.log(response.data); const { height: newheight,width: newwidth } = response.data; // 获取尺寸 height.value = newheight; width.value = newwidth; adjustedRects.value = rawRects.map(rect => ({ const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 adjustedRects.value = data.intoGlass[0].map(rect => ({ ...rect, // 复制原始对象的其他属性 xcoordinate: rect.xcoordinate, // 将x值除以3 ycoordinate: rect.ycoordinate, width: rect.width , height: rect.height , })); adjustedRectsa.value = data.waitingGlass[0].map(rect => ({ ...rect, // 复制原始对象的其他属性 xcoordinate: rect.xcoordinate, // 将x值除以3 ycoordinate: rect.ycoordinate, width: rect.width , height: rect.height , })); console.log(rect); adjustedRectsb.value = data.outGlass[0].map(rect => ({ ...rect, // 复制原始对象的其他属性 xcoordinate: rect.xcoordinate, // 将x值除以3 ycoordinate: rect.ycoordinate, width: rect.width , height: rect.height , })); }; // console.log( (rect.width*100) / 300 ); } else { // console.error('Failed to fetch rectangles from API.'); console.error('Failed to fetch rects from API.'); } } catch (error) { // console.error('Error fetching rectangles :', error); console.error('Error fetching rects :', error); } }); // 初始化 WebSocket,并传递消息处理函数 onMounted(() => { // fetchFlowCardId(); // fetchTableData(); // 获取数据 initializeWebSocket(socketUrl, handleMessage); }); onBeforeUnmount(() => { console.log("关闭了") closeWebSocket(); }); // onMounted(async () => { // try { // const response = await request.get('/temperingGlass/temperingGlassInfo/SelectIntoGlass'); // if (response.code === 200) { // const rawRects = response.data; // 设置矩形数据 // console.log(response.data); // const { height: newheight,width: newwidth } = response.data; // 获取尺寸 // height.value = newheight; // width.value = newwidth; // adjustedRects.value = rawRects.map(rect => ({ // ...rect, // 复制原始对象的其他属性 // xcoordinate: rect.xcoordinate, // 将x值除以3 // ycoordinate: rect.ycoordinate, // width: rect.width , // height: rect.height , // })); // console.log(rect); // // console.log( (rect.width*100) / 300 ); // } else { // // console.error('Failed to fetch rectangles from API.'); // console.error('Failed to fetch rects from API.'); // } // } catch (error) { // // console.error('Error fetching rectangles :', error); // console.error('Error fetching rects :', error); // } // }); // 进炉前 const handleConfirm = async () => { try { const response = await request.post('/temperingGlass/temperingGlassInfo/SelectWaitingGlass'); if (response.code === 200) { const rawRects = response.data; // 设置矩形数据 console.log(response.data); const { height: newheight,width: newwidth } = response.data; // 获取尺寸 height.value = newheight; width.value = newwidth; // const handleConfirm = async () => { // try { // const response = await request.post('/temperingGlass/temperingGlassInfo/SelectWaitingGlass'); // if (response.code === 200) { // const rawRects = response.data; // 设置矩形数据 // console.log(response.data); // const { height: newheight,width: newwidth } = response.data; // 获取尺寸 // height.value = newheight; // width.value = newwidth; adjustedRectsa.value = rawRects.map(rect => ({ ...rect, // 复制原始对象的其他属性 xcoordinate: rect.xcoordinate, // 将x值除以3 ycoordinate: rect.ycoordinate, width: rect.width , height: rect.height , })); console.log(rect); // adjustedRectsa.value = rawRects.map(rect => ({ // ...rect, // 复制原始对象的其他属性 // xcoordinate: rect.xcoordinate, // 将x值除以3 // ycoordinate: rect.ycoordinate, // width: rect.width , // height: rect.height , // })); // console.log(rect); // console.log( (rect.width*100) / 300 ); } else { // console.error('Failed to fetch rectangles from API.'); console.error('Failed to fetch rects from API.'); } } catch (error) { // console.error('Error fetching rectangles :', error); console.error('Error fetching rects :', error); } }; // // console.log( (rect.width*100) / 300 ); // } else { // // console.error('Failed to fetch rectangles from API.'); // console.error('Failed to fetch rects from API.'); // } // } catch (error) { // // console.error('Error fetching rectangles :', error); // console.error('Error fetching rects :', error); // } // }; // 已出炉 const handleConfirma = async () => { try { const response = await request.get('/temperingGlass/temperingGlassInfo/SelectOutGlass'); if (response.code === 200) { const rawRects = response.data; // 设置矩形数据 console.log(response.data); const { height: newheight,width: newwidth } = response.data; // 获取尺寸 height.value = newheight; width.value = newwidth; // const handleConfirma = async () => { // try { // const response = await request.get('/temperingGlass/temperingGlassInfo/SelectOutGlass'); // if (response.code === 200) { // const rawRects = response.data; // 设置矩形数据 // console.log(response.data); // const { height: newheight,width: newwidth } = response.data; // 获取尺寸 // height.value = newheight; // width.value = newwidth; adjustedRectsb.value = rawRects.map(rect => ({ ...rect, // 复制原始对象的其他属性 xcoordinate: rect.xcoordinate, // 将x值除以3 ycoordinate: rect.ycoordinate, width: rect.width , height: rect.height , })); console.log(rect); // adjustedRectsb.value = rawRects.map(rect => ({ // ...rect, // 复制原始对象的其他属性 // xcoordinate: rect.xcoordinate, // 将x值除以3 // ycoordinate: rect.ycoordinate, // width: rect.width , // height: rect.height , // })); // console.log(rect); // console.log( (rect.width*100) / 300 ); } else { // console.error('Failed to fetch rectangles from API.'); console.error('Failed to fetch rects from API.'); } } catch (error) { // console.error('Error fetching rectangles :', error); console.error('Error fetching rects :', error); } }; // // console.log( (rect.width*100) / 300 ); // } else { // // console.error('Failed to fetch rectangles from API.'); // console.error('Failed to fetch rects from API.'); // } // } catch (error) { // // console.error('Error fetching rectangles :', error); // console.error('Error fetching rects :', error); // } // }; const gridOptions = reactive({ border: "full",//表格加边框 keepSource: true,//保持源数据 @@ -173,7 +214,7 @@ <el-scrollbar height="630px"> <div style="position: relative;width: 1400px;"> <div v-for="(rect, index) in adjustedRects" v-for="(rect, index) in adjustedRectsa" :key="index" class="rect" :style="{ position: 'absolute', top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px` }" @@ -191,7 +232,7 @@ <el-scrollbar height="630px"> <div style="position: relative;width: 1400px;"> <div v-for="(rect, index) in adjustedRects" v-for="(rect, index) in adjustedRectsb" :key="index" class="rect" :style="{ position: 'absolute', top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px` }" UI-Project/src/views/Returns/returns.vue
@@ -13,7 +13,7 @@ const adda = ref(false) const flake = ref(false) const flakea = ref(false) import { WebSocketHost } from '@/utils/constants' import { WebSocketHost ,host} from '@/utils/constants' import request from "@/utils/request" const ida = ref(null); import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; @@ -25,9 +25,9 @@ const selectedValuea = ref(''); const selectedValueb = ref(''); const selectedValuec = ref(''); const upstatus = ref(''); // 假设这个用于显示自动/手动状态 const upstatus = ref('上片机手动状态:'); // 假设这个用于显示自动/手动状态 const cuttingMachine = ref(''); // 假设这个用于存储后端返回的状态值(0或1) const cuttingMachineStatusColor = ref(''); // 用于动态设置i标签的背景色 const cuttingMachineStatusColor = ref('#911005'); // 用于动态设置i标签的背景色 const inKageWord = ref(0); // 用于存储要传递给接口的inKageWord值 const options = ref<any[]>([]); // 下拉选项列表 const selectOptions = ref<Array<any>>([]); // 下拉选选项数组 @@ -44,7 +44,7 @@ // 更新表格数据 console.log('成功获取表格数据:', response.data); tableData.splice(0, tableData.length, ...response.data); window.localStorage.setItem('engineeringId', response.data[0].engineeringId) // window.localStorage.setItem('engineeringId', response.data[0].engineeringId) // 获取唯一值 const uniqueWidths = new Set(response.data.map(item => item.width)); const uniqueHeights = new Set(response.data.map(item => item.height)); @@ -102,7 +102,7 @@ const titleSelectJsona = ref({ processTypea: [], }) const socketUrl = `ws://10.153.19.150:88/api/loadGlass/api/talk/loadGlass`; const socketUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 @@ -304,6 +304,7 @@ const response = await request.post('/loadGlass/up-patten-usage/selectUpPattenUsage', { engineerId: selectedProjectNo.value, }) window.localStorage.setItem('engineeringId', selectedProjectNo.value) if (response.code == 200) { // 绑定成功,处理逻辑 ElMessage.success(response.message); @@ -496,7 +497,7 @@ const wsUrl = 'ws://10.153.19.150:88/api/loadGlass/api/talk/loadGlass'; const wsUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`; const ws = new WebSocket(wsUrl); ws.onopen = () => { console.log('WebSocket连接已打开'); @@ -518,16 +519,14 @@ // 监听WebSocket的消息事件 ws.onmessage = (event) => { // 假设服务器发送的是JSON格式的字符串 try { const data = JSON.parse(event.data); // 解析消息为JSON // 假设服务器发送的数据结构是 { InkageStatus: ["1"] } if (data && Array.isArray(data.InkageStatus) && data.InkageStatus.length > 0) { const status = data.InkageStatus[0]; cuttingMachine.value = status; upstatus.value = status === '1' ? '上片机联机状态:' : '上片机手动状态:'; cuttingMachineStatusColor.value = status === '1' ? '#911005' : 'green'; cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005'; inKageWord.value = status === '1' ? 0 : 1; } else { // 处理错误情况或无效数据 @@ -545,7 +544,7 @@ if (response.code == 200) { const status = response.data.status; upstatus.value = status === '1' ? '上片机联机状态:' : '上片机手动状态:'; cuttingMachineStatusColor.value = status === '1' ? '#911005' : 'green'; cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005'; // 显示成功消息 ElMessage.success(response.message); } else { @@ -557,25 +556,6 @@ ElMessage.error('请求时发生错误'); } }; // const confirmCutting = async () => { // try { // const response = await request.post('/loadGlass/LoadGlass/updateMesInkageLoad', { // inKageWord: inKageWord.value // }) // if (response.code == 200) { // inKageWord == '1' ? '上片机联机状态:' : '上片机手动状态:'; // inKageWord.value == '1' ? '#911005' : 'green'; // ElMessage.success(response.message); // } else { // // 请求失败,显示错误消息 // ElMessage.error(response.msg); // } // } // catch (error) { // // 处理错误 // console.error(error); // } // } </script> <template> @@ -595,7 +575,7 @@ <el-button style="margin-top: 5px;margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true">选择工程</el-button> <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">开始上片</el-button> <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="warning" @click="handleBinda">暂停</el-button> <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="handleBindb">停止任务</el-button> <!-- <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="handleBindb">停止任务</el-button> --> <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;"> UI-Project/src/views/Slicecage/slicecage.vue
@@ -3,13 +3,21 @@ import {reactive} from "vue"; import {useRouter} from "vue-router" const router = useRouter() import { ref } from 'vue' import { WebSocketHost ,host} from '@/utils/constants' import { ref, onMounted , onBeforeUnmount} from "vue"; import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; import { ElMessage, ElMessageBox } from 'element-plus' import { tr } from "element-plus/es/locale"; const dialogFormVisible = ref(false) const dialogFormVisiblea = ref(false) const dialogFormVisibleb = ref(false) const tableData = ref([]) const tableDatab = ref([]) const tableDatac = ref([]) const tableDatad = ref([]) const tableDatae = ref([]) const adjustedRects = ref([]); const height = ref([]); const carposition1 = ref(60); const carposition2 = ref(220); @@ -19,7 +27,6 @@ const timers2 =ref(true); const timers3 =ref(true); const timers4 =ref(true); const cellshow=ref(false); const cellshow5=ref(false); const c1=ref(false); const c2=ref(false); @@ -31,33 +38,18 @@ const million1=ref(0); const million3=ref(0); const million4=ref(0); const cell1=ref(true); const cell2=ref(true); const cell3=ref(true); const cell4=ref(true); const cell5=ref(true); const cell6=ref(true); const cell7=ref(true); const cell8=ref(true); const currentPage4 = ref(4) const pageSize4 = ref(100) const tableData = [ { id: '1', a: '1', b: '1', c: '123456789', d: '1568251', e: '1', f: '100*100', g: '', }, ] const tableDatab = [ { id: '2', a: '2', b: '2', c: '123456789', d: '1568251', e: '1', f: '100*100', g: '', } ] const dialogForm = () => { ElMessageBox.confirm( '确定要急停吗?', @@ -83,7 +75,7 @@ } var timer=setInterval(() => { console.log(million.value,million1.value); // console.log(million.value,million1.value); million.value+=1; if(million.value-million1.value!==12){ @@ -115,13 +107,7 @@ } }else{ million1.value=million.value; if(cellshow.value==true){ cellshow.value=false; }else{ cellshow.value=true; } if(cellshow1.value==true){ cellshow1.value=false; }else{ @@ -137,7 +123,7 @@ }, 1000); var timer=setInterval(() => { console.log(million3.value,million4.value); // console.log(million3.value,million4.value); million3.value+=1; if(million3.value-million4.value!==12){ @@ -204,69 +190,120 @@ } } const gridOptions = reactive({ border: "full",//表格加边框 keepSource: true,//保持源数据 align: 'center',//文字居中 stripe:true,//斑马纹 rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮 id: 'OrderList', showFooter: true,//显示脚 printConfig: {}, importConfig: {}, exportConfig: {}, scrollY:{ enabled: true },//开启虚拟滚动 showOverflow:true, columnConfig: { resizable: true, useKey: true }, filterConfig: { //筛选配置项 remote: true }, customConfig: { storage: true }, editConfig: { trigger: 'click', mode: 'row', showStatus: true }, data: [ { 'id': '1', 'long': '5', 'wide': '1005', 'thick': '183.6', } ], }) const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 tableDatac.value = data.bigStorageCageDetailsOutTask[0] tableDatad.value = data.bigStorageCageDetailsFeedTask[0] tableData.value = data.bigStorageCageInfo[0] tableDatab.value = data.temperingGlassInfoList[0] tableDatae.value = data.bigStorageCageUsage[0] adjustedRects.value = data.bigStorageCageInfo1[0] // adjustedRects.value = data.bigStorageCageInfo1[0].map(rect => ({ // ...rect, // 复制原始对象的其他属性 // height: rect.length *0.5, // })); window.localStorage.setItem('length', data.bigStorageCageInfo1[0].length) let length = window.localStorage.getItem('length') console.log(length); }; // function getRectHeight(length: number) { // return length > 0 ? 29 / length : 29; // } // 初始化 WebSocket,并传递消息处理函数 onMounted(() => { // fetchFlowCardId(); // fetchTableData(); // 获取数据 initializeWebSocket(socketUrl, handleMessage); }); function getStatusType(enableState: number) { switch (enableState) { case 0: return 'warning'; case 1: return 'success'; } } function getStatusText(enableState: number) { switch (enableState) { case 0: return '禁用'; case 1: return '启用'; } } function getStatusTypea(ishorizontal: number) { switch (ishorizontal) { case 0: return 'warning'; case 1: return 'success'; } } function getStatusTexta(ishorizontal: number) { switch (ishorizontal) { case 0: return '不接受'; case 1: return '接受'; } } function getStatusTypeb(state: number) { switch (state) { case 0: return 'success'; case 1: return 'primary'; } } function getStatusTextb(state: number) { switch (state) { case 0: return '出片完成'; case 1: return '等待中'; case 2: return '等待中'; } } onBeforeUnmount(() => { console.log("关闭了") closeWebSocket(); }); </script> <template> <div style="height: 700px;"> <!-- <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="primary" @click="dialogFormVisible = true">手动进片</el-button> --> <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true">订单信息</el-button> <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true">理片笼信息</el-button> <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="success" @click="dialogFormVisibleb = true">出片队列</el-button> <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="danger">终止进片</el-button> <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="danger">终止出片</el-button> <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="danger" @click="dialogForm">软急停</el-button> <!-- <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="danger">终止进片</el-button> --> <!-- <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="danger">终止出片</el-button> --> <!-- <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="danger" @click="dialogForm">软急停</el-button> --> <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading"> <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;"> <el-table height="100%" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="id" align="center" label="出片玻璃ID" min-width="80" /> <el-table-column prop="a" align="center" label="笼子" min-width="120" /> <el-table-column prop="b" align="center" label="格子" min-width="120" /> <el-table-column prop="c" align="center" label="工程号" min-width="120" /> <el-table-column prop="d" align="center" label="流程卡号" min-width="120" /> <el-table-column prop="e" align="center" label="钢化版图号" min-width="157" /> <el-table-column prop="f" align="center" label="尺寸" min-width="120" /> <el-table-column prop="g" align="center" label="结束任务" min-width="120"> <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="text">完成任务</el-button> </el-table-column> :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="bigStorageCageOutTask.glassId" align="center" label="出片玻璃ID" min-width="80" /> <el-table-column prop="bigStorageCageOutTask.startSlot" align="center" label="起始位置" min-width="120" /> <el-table-column prop="bigStorageCageOutTask.endSlot" align="center" label="目标位置" min-width="120" /> <el-table-column prop="bigStorageCageOutTask.trainNumber" align="center" label="车次" min-width="120" /> <el-table-column prop="bigStorageCageOutTask.serialNumber" align="center" label="序号" min-width="120" /> <el-table-column prop="bigStorageCageOutTask.taskState" align="center" label="任务状态" min-width="157"> <template #default="scope"> <el-tag type="success" >{{ scope.row.bigStorageCageOutTask.taskState==0?"等待进片":"进行中" }}</el-tag> </template> </el-table-column> <el-table-column fixed="right" label="结束任务" align="center" width="150"> <template #default="scope"> <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">完成任务</el-button> </template> </el-table-column> </el-table> </div> </el-card> @@ -274,111 +311,35 @@ <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;"> <el-table height="100%" ref="table" @selection-change="handleSelectionChange" :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="id" align="center" label="进片玻璃ID" min-width="80" /> <el-table-column prop="a" align="center" label="笼子" min-width="120" /> <el-table-column prop="b" align="center" label="格子" min-width="120" /> <el-table-column prop="c" align="center" label="工程号" min-width="120" /> <el-table-column prop="d" align="center" label="流程卡号" min-width="120" /> <el-table-column prop="e" align="center" label="钢化版图号" min-width="157" /> <el-table-column prop="f" align="center" label="尺寸" min-width="120" /> <el-table-column prop="g" align="center" label="结束任务" min-width="120"> <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="text">完成任务</el-button> </el-table-column> :data="tableDatad" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="bigStorageCageFeedTask.glassId" align="center" label="进片玻璃ID" min-width="80" /> <el-table-column prop="bigStorageCageFeedTask.tragetSlot" align="center" label="目标位置" min-width="120" /> <!-- <el-table-column prop="task_type" align="center" label="任务类型" min-width="120" />没有返回字段 --> <el-table-column prop="bigStorageCageFeedTask.taskState" align="center" label="任务状态" min-width="120"> <template #default="scope"> <el-tag type="success" >{{ scope.row.bigStorageCageFeedTask.taskState==0?"等待进片":"进行中" }}</el-tag> </template> </el-table-column> <el-table-column prop="bigStorageCageFeedTask.line" align="center" label="线路" min-width="120" /> <el-table-column fixed="right" label="结束任务" align="center" width="150"> <template #default="scope"> <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">完成任务</el-button> </template> </el-table-column> </el-table> </div> </el-card> <div style="padding: 10px;display: flex;height:110px;"> <div id="occupy"> <el-col style="text-align:left;font-weight: bold;">#1</el-col> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">使用率</span><span id="zhi">35%</span> </el-col> <hr style="width:80%;margin: 0 auto;" /> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">空闲(格子数)</span><span id="zhi">555</span> </el-col> </div> <div id="occupy"> <el-col style="text-align:left;font-weight: bold;">#2</el-col> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">使用率</span><span id="zhi">35%</span> </el-col> <hr style="width:80%;margin: 0 auto;" /> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">空闲(格子数)</span><span id="zhi">555</span> </el-col> </div> <div id="occupy"> <el-col style="text-align:left;font-weight: bold;">#3</el-col> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">使用率</span><span id="zhi">35%</span> </el-col> <hr style="width:80%;margin: 0 auto;" /> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">空闲(格子数)</span><span id="zhi">555</span> </el-col> </div> <div id="occupy"> <el-col style="text-align:left;font-weight: bold;">#4</el-col> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">使用率</span><span id="zhi">35%</span> </el-col> <hr style="width:80%;margin: 0 auto;" /> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">空闲(格子数)</span><span id="zhi">555</span> </el-col> </div> <div id="occupy"> <el-col style="text-align:left;font-weight: bold;">#5</el-col> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">使用率</span><span id="zhi">35%</span> </el-col> <hr style="width:80%;margin: 0 auto;" /> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">空闲(格子数)</span><span id="zhi">555</span> </el-col> </div> <div id="occupy"> <el-col style="text-align:left;font-weight: bold;">#6</el-col> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">使用率</span><span id="zhi">35%</span> </el-col> <hr style="width:80%;margin: 0 auto;" /> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">空闲(格子数)</span><span id="zhi">555</span> </el-col> </div> <div id="occupy"> <el-col style="text-align:left;font-weight: bold;">#7</el-col> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">使用率</span><span id="zhi">35%</span> </el-col> <hr style="width:80%;margin: 0 auto;" /> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">空闲(格子数)</span><span id="zhi">555</span> </el-col> </div> <div id="occupy"> <el-col style="text-align:left;font-weight: bold;">#8</el-col> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">使用率</span><span id="zhi">35%</span> </el-col> <hr style="width:80%;margin: 0 auto;" /> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">空闲(格子数)</span><span id="zhi">555</span> </el-col> </div> <!-- <div v-for="n in 8" :key="n" id="occupy"> <el-col style="text-align:left;font-weight: bold;">#1</el-col> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">使用率</span><span id="zhi">35%</span> </el-col> <hr style="width:80%;margin: 0 auto;" /> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span id="biao">空闲(格子数)</span><span id="zhi">555</span> </el-col> </div> --> <div v-for="(item, index) in tableDatae" :key="index" id="occupy"> <el-col style="text-align:left;font-weight: bold;">#{{ item.device_id }}</el-col> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span>使用率</span><span>{{ item.percentage }}</span> </el-col> <hr style="width:80%;margin: 0 auto;" /> <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;"> <span>空闲(格子数)</span><span>{{ item.count }}</span> </el-col> </div> </div> <!-- <div id="awatch"> <img src="../../assets/cp.png" alt="" style="width: 70%;height: 70%;margin-left: 160px;"> @@ -393,15 +354,49 @@ </div> <div v-show="c2" class="img-car3" :style="'z-index:999;left:247px;top:' + carposition3 + 'px;position:absolute;'"> <div v-show="cellshow3" style="margin-top:10px;width:200px;height:5px;background-color:#409EFF;"></div> <div v-show="cellshow3" style="margin-top:10px;width:220px;height:5px;background-color:#409EFF;"></div> </div> <div class="img-car4" :style="'z-index:999;left:704px;top:' + carposition4 + 'px;position:absolute;'"> <div v-show="cellshow4" style="margin-top:10px;width:200px;height:5px;background-color:#409EFF;"></div> </div> <div v-show="cellshow" style="width: 200px;height: 5px;position: absolute;top:70px;left: 480px;background-color: #409EFF;"> <div v-show="cell1" style="width: 227px;height: 29px;position: absolute;top:55px;left: 465px;"> <div v-for="(item, index) in adjustedRects" :key="index" :style="{ top: `1px`, width: `227px`, backgroundColor: '#409EFF', height: `height`+ `px` }" > </div> <div v-show="cellshow5" style="width: 200px;height: 5px;position: absolute;top:70px;left: 480px;background-color: #409EFF;"> <!-- <div v-for="(item, index) in adjustedRects" height: `${rect.height}px`, :key="index" :style="{ width: '227px', height: '1px', backgroundColor: '#409EFF', top: '1px' }" > </div> --> </div> <!-- <div v-show="cell2" style="width: 227px;height: 29px;position: absolute;top:86px;left: 465px;background-color: #409EFF;"> </div> <div v-show="cell3" style="width: 227px;height: 29px;position: absolute;top:117px;left: 465px;background-color: #409EFF;"> </div> <div v-show="cell4" style="width: 227px;height: 29px;position: absolute;top:148px;left: 465px;background-color: #409EFF;"> </div> <div v-show="cell5" style="width: 227px;height: 29px;position: absolute;top:208px;left: 465px;background-color: #409EFF;"> </div> <div v-show="cell6" style="width: 227px;height: 29px;position: absolute;top:238px;left: 465px;background-color: #409EFF;"> </div> <div v-show="cell7" style="width: 227px;height: 29px;position: absolute;top:269px;left: 465px;background-color: #409EFF;"> </div> <div v-show="cell8" style="width: 227px;height: 29px;position: absolute;top:300px;left: 465px;background-color: #409EFF;"> </div> --> </div> </div> @@ -527,17 +522,28 @@ </div> </template> </el-dialog> <el-dialog v-model="dialogFormVisiblea" top="10vh" width="85%" title="订单信息" > <el-input placeholder="请输入工程号" style="width: 180px;size: mini;"></el-input> <el-button style="margin-left: 10px;size: mini;" type="primary">查询</el-button> <el-dialog v-model="dialogFormVisiblea" top="10vh" width="85%" title="理片笼信息" > <!-- <el-input placeholder="请输入工程号" style="width: 180px;size: mini;"></el-input> --> <!-- <el-button style="margin-left: 10px;size: mini;" type="primary">查询</el-button> --> <el-table ref="table" style="margin-top: 20px;height: 500px;" @selection-change="handleSelectionChange" :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="ida" align="center" label="玻璃id" min-width="80" /> <el-table-column prop="typea" align="center" label="工程号" min-width="120" /> <el-table-column prop="typea" align="center" label="长" min-width="120" /> <el-table-column prop="typea" align="center" label="宽" min-width="120" /> <el-table-column prop="typea" align="center" label="厚" min-width="120" /> :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="id" align="center" label="大理片笼表ID" min-width="80" /> <el-table-column prop="deviceId" align="center" label="设备ID" min-width="120" /> <el-table-column prop="slot" align="center" label="栅格号" min-width="120" /> <el-table-column align="center" label="启用状态" min-width="80" prop="enableState" > <template #default="scope"> <el-tag :type="getStatusType(scope.row.enableState)"> {{ getStatusText(scope.row.enableState) }} </el-tag> </template> </el-table-column> <el-table-column prop="remainWidth" align="center" label="剩余宽度" min-width="120" /> </el-table> <div id="demo-pagination-block"> <el-pagination @@ -557,25 +563,58 @@ </el-dialog> <el-dialog v-model="dialogFormVisibleb" top="10vh" width="85%" title="出片队列" > <div style="display: flex;"> <p style="margin-top: 4px;">队列状态:</p> <p style="margin-top: 4px;">开始</p> <p style="margin-top: 3px;">队列状态:</p> <p style="margin-top: 3px;">开始</p> <el-button style="margin-left: 10px;size: mini;" type="danger">停止</el-button> <el-button style="margin-left: 10px;size: mini;" type="primary">添加</el-button> </div> <el-table ref="table" style="margin-top: 20px;height: 500px;" @selection-change="handleSelectionChange" :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> <el-table-column prop="id" align="center" label="铝框id" min-width="80" /> <el-table-column prop="type" align="center" label="玻璃id" min-width="120" /> <el-table-column prop="type" align="center" label="订单编号" min-width="120" /> <el-table-column prop="type" align="center" label="列表编号" min-width="120" /> <el-table-column prop="type" align="center" label="箱子编号" min-width="120" /> <el-table-column prop="type" align="center" label="长" min-width="120" /> <el-table-column prop="type" align="center" label="宽" min-width="120" /> <el-table-column prop="type" align="center" label="玻璃状态" min-width="120" /> <el-table-column prop="type" align="center" label="顺序" min-width="120" /> <el-table-column prop="type" align="center" label="完成" min-width="120" /> <el-table-column prop="type" align="center" label="操作" min-width="120" /> <el-table-column prop="id" fixed align="center" label="钢化小片信息表id" min-width="150"/> <!-- <el-table-column prop="glass_id" align="center" label="玻璃id" min-width="120" /> --> <el-table-column prop="flowcardId" fixed align="center" label="流程卡" min-width="120" /> <el-table-column prop="glassType" align="center" label="流程卡玻璃类型" min-width="150" /> <el-table-column prop="width" align="center" label="宽" min-width="80" /> <el-table-column prop="height" align="center" label="高" min-width="80" /> <el-table-column prop="thickness" align="center" label="厚度" min-width="80" /> <el-table-column prop="filmsid" align="center" label="膜系" min-width="80" /> <!-- <el-table-column prop="ishorizontal" align="center" label="钢化是否接受横放" min-width="150" /> --> <el-table-column align="center" label="钢化是否接受横放" min-width="150" prop="ishorizontal" > <template #default="scope"> <el-tag :type="getStatusTypea(scope.row.ishorizontal)"> {{ getStatusTexta(scope.row.ishorizontal) }} </el-tag> </template> </el-table-column> <el-table-column prop="temperingLayoutId" align="center" label="钢化版图id" min-width="120" /> <el-table-column prop="temperingFeedSequence" align="center" label="钢化版图片序" min-width="120" /> <el-table-column prop="xCoordinate" align="center" label="x坐标" min-width="80" /> <el-table-column prop="yCoordinate" align="center" label="y坐标" min-width="80" /> <el-table-column prop="angle" align="center" label="旋转角度(逆时针)" min-width="150" /> <!-- <el-table-column prop="state" align="center" label="状态" min-width="80" /> --> <el-table-column align="center" label="状态" min-width="80" prop="state" > <template #default="scope"> <el-tag :type="getStatusTypeb(scope.row.state)"> {{ getStatusTextb(scope.row.state) }} </el-tag> </template> </el-table-column> <el-table-column fixed="right" label="操作" align="center" width="150"> <template #default="scope"> <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">添加</el-button> <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">删除</el-button> </template> </el-table-column> </el-table> </el-dialog> UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -4,7 +4,7 @@ import {useRouter} from "vue-router" const router = useRouter() const adda = ref(false) import { WebSocketHost ,host} from '@/utils/constants' import request from "@/utils/request" import { ref, onMounted , onBeforeUnmount} from "vue"; import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; @@ -94,7 +94,7 @@ } }; const socketUrl = `ws://10.153.19.150:88/api/cacheGlass/api/talk/cacheGlass`; const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
@@ -4,7 +4,7 @@ import {useRouter} from "vue-router" const router = useRouter() const adda = ref(false) import { WebSocketHost ,host} from '@/utils/constants' import request from "@/utils/request" import { ref, onMounted , onBeforeUnmount} from "vue"; import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; @@ -95,7 +95,7 @@ }; const socketUrl = `ws://10.153.19.150:88/api/cacheGlass/api/talk/cacheGlass`; const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { // 更新 tableData 的数据 UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -39,11 +39,11 @@ import { initializeWebSocket } from '@/utils/WebSocketService'; import { WebSocketHost } from '@/utils/constants'; const racks = ref([ { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } }, { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456',downGlassInfoList:"" } }, { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678' } }, { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678',downGlassInfoList:"" } }, { x: 140, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' } } { x: 140, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' ,downGlassInfoList:""} } ]); @@ -87,7 +87,8 @@ content: itemData.item.content, fillColor: itemData.item.fillColor, width: itemData.item.width === 0 ? "" : 10, height: itemData.item.height === 0 ? "" : 90 height: itemData.item.height === 0 ? "" : 90, downGlassInfoList:itemData.item.downGlassInfoList }; if (index === 2 && itemData.item.width > 0) { @@ -112,8 +113,8 @@ console.error(error); } }; const socketUrl = `ws://${WebSocketHost}:8085/api/talk/unloadglass2`; //const socketUrl = `ws://${WebSocketHost}:88/api/unLoadGlass/api/talk/unloadglass2`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { @@ -126,7 +127,8 @@ content: itemData.item.content, fillColor: itemData.item.fillColor, width: itemData.item.width === 0 ? "" : 10, height: itemData.item.height === 0 ? "" : 90 height: itemData.item.height === 0 ? "" : 90, downGlassInfoList:itemData.item.downGlassInfoList }; if (index === 2 && itemData.item.width > 0) { @@ -135,6 +137,7 @@ } rack.item = newItem; // console.log("显示图1",racks.value); // 打印更新后的 racks 值 } @@ -147,29 +150,45 @@ fetchFlowCardId(); // 获取数据 initializeWebSocket(socketUrl, handleMessage); }); const showCustomAlert = (downGlassInfoList) => { let tableContent = '<table border="1" style="border-collapse: collapse; width: 100%;">'; tableContent += '<tr><th style="background-color: #f2f2f2;">玻璃ID</th><th style="background-color: #f2f2f2;">膜系</th><th style="background-color: #f2f2f2;">厚度</th><th style="background-color: #f2f2f2;">宽度</th><th style="background-color: #f2f2f2;">高度</th></tr>'; downGlassInfoList.forEach(info => { tableContent += `<tr> <td>${info.glassId}</td> <td>${info.Filmsid}</td> <td>${info.thickness}</td> <td>${info.width}</td> <td>${info.height}</td> </tr>`; }); const showCustomAlert = (content) => { var str="架号 : 111\n" + "长 : 111\n" + "宽 : 111\n" + "厚 : 111\n"+ "玻璃ID : 111\n"+ "膜系 : 111\n"; tableContent += '</table>'; Swal.fire({ title: '玻璃信息', html: '<pre>' + str + '</pre>', html: tableContent, customClass: { popup: 'format-pre' } }); }; const showRectInfo = (rectInfo) => { const content = rectInfo.item.content; showCustomAlert(content); }; const showRectInfo = (rack) => { const content = rack.item.content; console.log(rack.item.downGlassInfoList[0].flowCardId) console.log(content) if(content==rack.item.downGlassInfoList[0].flowCardId){ const downGlassInfoList = rack.item.downGlassInfoList; console.log(downGlassInfoList) showCustomAlert(downGlassInfoList); } }; </script> UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -37,7 +37,7 @@ import Swal from 'sweetalert2' import request from "@/utils/request"; import { initializeWebSocket } from '@/utils/WebSocketService'; import { WebSocketHost } from '@/utils/constants'; import { WebSocketHost ,host} from '@/utils/constants' const racks = ref([ { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } }, @@ -112,7 +112,7 @@ } }; const socketUrl = `ws://${WebSocketHost}:8085/api/talk/unloadglass3`; const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass3`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { @@ -125,7 +125,8 @@ content: itemData.item.content, fillColor: itemData.item.fillColor, width: itemData.item.width === 0 ? "" : 10, height: itemData.item.height === 0 ? "" : 90 height: itemData.item.height === 0 ? "" : 90, downGlassInfoList:itemData.item.downGlassInfoList }; if (index === 2 && itemData.item.width > 0) { @@ -146,30 +147,44 @@ fetchFlowCardId(); // 获取数据 initializeWebSocket(socketUrl, handleMessage); }); const showCustomAlert = (downGlassInfoList) => { let tableContent = '<table border="1" style="border-collapse: collapse; width: 100%;">'; tableContent += '<tr><th style="background-color: #f2f2f2;">玻璃ID</th><th style="background-color: #f2f2f2;">膜系</th><th style="background-color: #f2f2f2;">厚度</th><th style="background-color: #f2f2f2;">宽度</th><th style="background-color: #f2f2f2;">高度</th></tr>'; downGlassInfoList.forEach(info => { tableContent += `<tr> <td>${info.glassId}</td> <td>${info.Filmsid}</td> <td>${info.thickness}</td> <td>${info.width}</td> <td>${info.height}</td> </tr>`; }); // const showCustomAlert = (content) => { // var str="架号 : 111\n" + // "长 : 111\n" + // "宽 : 111\n" + // "厚 : 111\n"+ // "玻璃ID : 111\n"+ // "膜系 : 111\n"; tableContent += '</table>'; // Swal.fire({ // title: '玻璃信息', // html: '<pre>' + str + '</pre>', // customClass: { // popup: 'format-pre' // } // }); // }; const showRectInfo = (rectInfo) => { const content = rectInfo.item.content; showCustomAlert(content); Swal.fire({ title: '玻璃信息', html: tableContent, customClass: { popup: 'format-pre' } }); }; const showRectInfo = (rack) => { const content = rack.item.content; console.log(rack.item.downGlassInfoList[0].flowCardId) console.log(content) if(content==rack.item.downGlassInfoList[0].flowCardId){ const downGlassInfoList = rack.item.downGlassInfoList; console.log(downGlassInfoList) showCustomAlert(downGlassInfoList); } }; </script> <style scoped> UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -11,9 +11,7 @@ import Landingindicationtwo from "./Landingindicationtwo.vue"; import request from "@/utils/request"; import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService'; import { WebSocketHost } from '@/utils/constants'; import { WebSocketHost ,host} from '@/utils/constants' const dialogFormVisiblea = ref(false) const dialogFormVisiblea2 = ref(false) @@ -148,7 +146,7 @@ }; const socketUrl = `ws://${WebSocketHost}:8085/api/talk/unloadglass`; const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`; // 定义消息处理函数,更新 receivedData 变量 const handleMessage = (data) => { hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/CodeGet.java
@@ -22,7 +22,7 @@ // 2、全局配置 // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir("D:\\Documents\\hangzhoumesParent3\\"); gc.setOutputDir("D:\\Documents\\hangzhoumesParent4\\"); gc.setServiceName("%sService"); //去掉Service接口的首字母I gc.setAuthor("wu"); hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java
@@ -37,7 +37,7 @@ @Autowired private OptimizeProjectService optimizeProjectService; @ApiOperation("开始/暂停任务/传递工程号和状态,开始是1 暂停是0") @PostMapping("/pauseTask") //调用上片任务 @PostMapping("/pauseTask") //暂停上片任务 @ResponseBody public Result <List<UpPattenUsage>> pauseTask(@RequestBody Engineering engineering) { boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState()); @@ -46,6 +46,16 @@ return Result.build(200, engineering.getEngineerId(),glass); } @ApiOperation("暂停") @PostMapping("/pause") //暂停上片任务 @ResponseBody public Result <List<UpPattenUsage>> pause(@RequestBody Engineering engineering) { boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState()); List<UpPattenUsage> glass = upPattenUsageService.prioritylist(); log.info("StartorStop:{},{}", work,engineering); return Result.build(200, engineering.getEngineerId(),glass); } @ApiOperation("开始上片") @PostMapping("/changeTask") //调用上片任务 @ResponseBody hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/entity/Engineering.java
@@ -2,10 +2,11 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; /** * <p> * hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
@@ -5,7 +5,6 @@ import com.mes.device.PlcParameterObject; import com.mes.engineering.entity.Engineering; import com.mes.engineering.service.EngineeringService; import com.mes.pp.entity.OptimizeProject; import com.mes.pp.service.OptimizeProjectService; import com.mes.tools.WebSocketServer; import com.mes.uppattenusage.entity.UpPattenUsage; @@ -130,11 +129,11 @@ for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } // List<String> messages = webserver.getMessages(); // if (!messages.isEmpty()) { // // // 将最后一个消息转换为整数类型的列表 // webserver.clearMessages(); // } } else { log.info("Home is closed"); } @@ -145,19 +144,14 @@ public void loadGlassStatus(){ JSONObject jsonObject = new JSONObject(); //正在进行的任务 //String inkageStatus =plcParameterObject.getPlcParameter("MesToPlc").getValue(); String inkageStatus ="1"; String inkageStatus =plcParameterObject.getPlcParameter("MesToPlc").getValue(); //String inkageStatus ="1"; jsonObject.append("InkageStatus", inkageStatus); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass"); 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"); } hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/entity/UpWorkstation.java
@@ -2,7 +2,6 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiOperation; import lombok.Data; import lombok.EqualsAndHashCode; hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/mapper/UpWorkstationMapper.java
@@ -5,8 +5,6 @@ import com.mes.workstation.entity.UpWorkstation; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> * Mapper 接口 hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java
@@ -2,7 +2,6 @@ import com.mes.engineering.entity.Engineering; import com.mes.engineering.service.EngineeringService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.pp.entity.OptimizeProject; import com.mes.pp.entity.request.OptimizeRequest; hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/TemperingGlassModuleApplication.java
@@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.scheduling.annotation.EnableScheduling; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** @@ -16,6 +17,7 @@ @SpringBootApplication @EnableSwagger2 @EnableDiscoveryClient @EnableScheduling @MapperScan(basePackages = "com.mes.*.mapper") public class TemperingGlassModuleApplication { public static void main(String[] args) { hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
New file @@ -0,0 +1,57 @@ package com.mes.job; import cn.hutool.json.JSONObject; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.service.TemperingAgoService; import com.mes.tools.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; /** * @author SNG-010 */ @Component @Slf4j public class PlcTemperingGlassTask { @Autowired private TemperingAgoService temperingAgoService; /** * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成) * fixedDelay : 上一个调用结束后再次调用的延时 */ @Scheduled(fixedDelay = 1000) public void loadGlassHome(){ JSONObject jsonObject = new JSONObject(); //正在等待进片的玻璃 List<TemperingGlassInfo> waitingGlass = temperingAgoService.selectWaitingGlass(); jsonObject.append("waitingGlass", waitingGlass); //进炉中的玻璃 List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(); jsonObject.append("intoGlass", intoGlass); //出炉后的玻璃 List<TemperingGlassInfo> outGlass = temperingAgoService.selectOutGlass(); jsonObject.append("outGlass", outGlass); //过旋转台钢化后的玻璃 TemperingGlassInfo overGlass = temperingAgoService.selectOverGlass(); jsonObject.append("overGlass", overGlass); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("temperingGlass"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); } else { log.info("Home is closed"); } } } } } hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
@@ -25,8 +25,6 @@ @Autowired TemperingService temperingService; @Autowired private TemperingOverService temperingOverService; @Autowired private TemperingAgoService temperingAgoService; @ApiOperation("查询钢化等片中的版图信息,状态为1的为已到,状态为0的为等待中") @@ -46,7 +44,7 @@ @ApiOperation("//钢化后显示出炉的版图信息。") @GetMapping("/selectOutGlass") //钢化后显示出炉的版图信息 public Result <List<TemperingGlassInfo>> selectOutGlass() { List<TemperingGlassInfo> glass = temperingAgoService.SelectOutGlass(); List<TemperingGlassInfo> glass = temperingAgoService.selectOutGlass(); log.info("钢化出炉后的玻璃信息{}",glass); return Result.build(200, "", glass); } hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
@@ -1,5 +1,6 @@ package com.mes.temperingglass.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.github.yulichang.base.MPJBaseMapper; import com.mes.temperingglass.entity.TemperingGlassInfo; @@ -12,6 +13,7 @@ * @author zhoush * @since 2024-04-07 */ @DS("salve_hangzhoumes") public interface TemperingGlassInfoMapper extends BaseMapper<TemperingGlassInfo>, MPJBaseMapper<TemperingGlassInfo> { } hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingMapper.java
@@ -1,5 +1,6 @@ package com.mes.temperingglass.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.temperingglass.entity.TemperingGlassInfo; import org.apache.ibatis.annotations.Mapper; @@ -8,27 +9,7 @@ import java.util.List; @Mapper @DS("salve_hangzhoumes") public interface TemperingMapper extends BaseMapper<TemperingGlassInfo> { //查询该玻璃的尺寸和坐标 //@Select("select *from glass_info where id=#{glassid};") //GlassInfo SelectGlass(String glassid); //是否可以发送进炉信号 @Select("select count(*) from glass_info where id=#{glassid};") int SelectTempering(String glassid); //查询等待中的钢化版图玻璃信息 @Select("select*from tempering_glass_info a left join (select flowcard_id,count(state)state from tempering_glass_info GROUP BY flowcard_id,state)b on a.flowcard_id=b.flowcard_id where b.state=2") List<TemperingGlassInfo> SelectWaitingGlass(); //查询进炉中的钢化版图玻璃信息 @Select("select*from tempering_glass_info a left join (select flowcard_id,min(state)state1 from tempering_glass_info GROUP BY flowcard_id having state1=1)b on a.flowcard_id=b.flowcard_id where b.state1=1") List<TemperingGlassInfo> SelectInGlass(); //查询钢化后的钢化版图信息 @Select("select*from tempering_glass_info a left join (select flowcard_id,min(state)state1 from tempering_glass_info GROUP BY flowcard_id having state1=2)b on a.flowcard_id=b.flowcard_id where b.state1=2") List<TemperingGlassInfo> SelectOutGlass(); } hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/TemperingAgoService.java
@@ -1,6 +1,4 @@ package com.mes.temperingglass.service; import com.baomidou.mybatisplus.extension.service.IService; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.github.yulichang.base.MPJBaseService; import java.util.List; @@ -19,5 +17,7 @@ List<TemperingGlassInfo> selectIntoGlass(); List<TemperingGlassInfo> SelectOutGlass(); List<TemperingGlassInfo> selectOutGlass(); TemperingGlassInfo selectOverGlass(); } hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingAgoServiceImpl.java
@@ -1,9 +1,7 @@ package com.mes.temperingglass.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.query.MPJQueryWrapper; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.mapper.TemperingGlassInfoMapper; import com.mes.temperingglass.mapper.TemperingMapper; @@ -11,8 +9,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.github.yulichang.base.MPJBaseServiceImpl; import java.util.Collections; import java.util.List; /** @@ -24,6 +20,7 @@ * @since 2024-04-07 */ @Service @DS("salve_hangzhoumes") public class TemperingAgoServiceImpl extends MPJBaseServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingAgoService { @Autowired TemperingMapper temperingMapper; @@ -32,7 +29,8 @@ public List<TemperingGlassInfo> selectWaitingGlass() { //获取等待进炉中的玻璃信息 QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>(); wrapper.inSql("flowcard_id", "select flowcard_id from tempering_glass_info GROUP BY flowcard_id,state having count(state) = 2"); //wrapper.eq("state",1); wrapper.in("state",1,0); return temperingMapper.selectList(wrapper); } @@ -40,16 +38,27 @@ public List<TemperingGlassInfo> selectIntoGlass() { //获取进炉中的玻璃信息 QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>(); wrapper.inSql("flowcard_id", "select flowcard_id from tempering_glass_info where state=1 GROUP BY flowcard_id,state having count(state) = 1"); wrapper.eq("state",2) .orderByAsc("tempering_layout_id","tempering_feed_sequence"); return temperingMapper.selectList(wrapper); } @Override public List<TemperingGlassInfo> SelectOutGlass() { public List<TemperingGlassInfo> selectOutGlass() { //获取出炉中的玻璃信息 QueryWrapper<TemperingGlassInfo> wapper = new QueryWrapper<>(); wapper.eq("state", 3); wapper.eq("state", 3) .orderByAsc("tempering_layout_id","tempering_feed_sequence"); return temperingMapper.selectList(wapper); } @Override public TemperingGlassInfo selectOverGlass() { //获取过旋转台的玻璃 QueryWrapper<TemperingGlassInfo> wapper = new QueryWrapper<>(); wapper.select("top 1 *").eq("state", 4) .orderByAsc("tempering_layout_id") .orderByDesc("tempering_feed_sequence"); return temperingMapper.selectOne(wapper); } } hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
@@ -9,6 +9,11 @@ username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver cloud: nacos: discovery: hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-loc.yml
@@ -9,6 +9,12 @@ username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver cloud: nacos: discovery: hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml
@@ -9,6 +9,12 @@ username: root password: beibo.123/ driver-class-name: com.mysql.cj.jdbc.Driver salve_hangzhoumes: url: jdbc:sqlserver://10.153.19.150:1433;databasename=hangzhoumes username: sa password: beibo.123/ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver cloud: nacos: discovery: hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java
@@ -10,7 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; @@ -25,12 +24,8 @@ @SpringBootTest(classes = TemperingGlassModuleApplication.class) public class TemperingApplicationTest { @Resource private OptimizeProjectMapper optimizeProjectMapper; @Autowired private TemperingAgoService temperingAgoService; @Autowired private GlassInfoService glassInfoService; @Test @@ -40,7 +35,7 @@ } @Test public void testFindPa2() { List<TemperingGlassInfo> glass = temperingAgoService.SelectOutGlass(); List<TemperingGlassInfo> glass = temperingAgoService.selectOutGlass(); log.info("已出中的玻璃:{}", Arrays.asList(glass)); } @@ -49,4 +44,9 @@ List<TemperingGlassInfo> glass = temperingAgoService.selectWaitingGlass(); log.info("等待中的玻璃:{}", Arrays.asList(glass)); } @Test public void testFindPa4() { TemperingGlassInfo glass = temperingAgoService.selectOverGlass(); log.info("等待中的玻璃:{}", Arrays.asList(glass)); } } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/AppRunnerConfig.java
@@ -1,6 +1,6 @@ package com.mes; import com.mes.common.S7object; //import com.mes.common.S7object; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
@@ -46,7 +46,7 @@ * @param end * @return log.info(" 单片情况根据传入的工位查询符合按照大小出片, 并且优先出满架的小片 "); */ List<DownStorageCageDetails> CacheOut(int start, int end); /** * @return 出片 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
@@ -56,24 +56,24 @@ } @Override public List<DownStorageCageDetails> CacheOut(int start, int end) { log.info("单片情况根据传入的工位查询符合按照大小出片,并且优先出满架的小片"); return downStorageCageDetailsMapper.selectJoinList( DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>() .select("t.*") .leftJoin("(SELECT t1.* FROM down_storage_cage_details t1 " + "JOIN (SELECT flow_card_id, MAX(width*height) AS max_width FROM glass_info GROUP BY flow_card_id) t " + "ON t1.flow_card_id = t.flow_card_id WHERE t1.width*t1.height = t.max_width) t3" + " ON t.glass_id = t3.glass_id") .leftJoin("down_workstation t4 ON t3.flow_card_id = t4.flow_card_id") .isNull(Boolean.parseBoolean("t.glass_id"), "SELECT glass_id FROM down_glass_info") .between("t4.workstation_id", start, end) // 根据 racks_number 排序 .orderByDesc("t4.racks_number") ); } // @Override // public List<DownStorageCageDetails> CacheOut(int start, int end) { // log.info("单片情况根据传入的工位查询符合按照大小出片,并且优先出满架的小片"); // return downStorageCageDetailsMapper.selectJoinList( // DownStorageCageDetails.class, new MPJQueryWrapper<DownStorageCageDetails>() // .select("t.*") // .leftJoin("(SELECT t1.* FROM down_storage_cage_details t1 " // + "JOIN (SELECT flow_card_id, MAX(width*height) AS max_width FROM glass_info GROUP BY flow_card_id) t " // + "ON t1.flow_card_id = t.flow_card_id WHERE t1.width*t1.height = t.max_width) t3" // + " ON t.glass_id = t3.glass_id") // .leftJoin("down_workstation t4 ON t3.flow_card_id = t4.flow_card_id") // .isNull(Boolean.parseBoolean("t.glass_id"), "SELECT glass_id FROM down_glass_info") // .between("t4.workstation_id", start, end) // // 根据 racks_number 排序 // .orderByDesc("t4.racks_number") // // ); // } // @Override hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
@@ -5,7 +5,7 @@ import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.mes.device.PlcParameterObject; //import com.mes.device.PlcParameterObject; import com.mes.downglassinfo.entity.DownGlassTask; import com.mes.downglassinfo.service.DownGlassTaskService; import com.mes.downstorage.entity.DownStorageCage; hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java
New file @@ -0,0 +1,29 @@ package com.mes.engineering.controller; import com.mes.engineering.entity.Engineering; import com.mes.engineering.service.EngineeringService; import com.mes.utils.Result; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; /** * <p> * 前端控制器 * </p> * * @author wu * @since 2024-04-22 */ @RestController @Slf4j @RequestMapping("/engineering/engineering") public class EngineeringController { } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/engineering/entity/Engineering.java
New file @@ -0,0 +1,100 @@ package com.mes.engineering.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; /** * <p> * * </p> * * @author wu * @since 2024-04-22 */ @Data @EqualsAndHashCode(callSuper = false) public class Engineering implements Serializable { private static final long serialVersionUID = 1L; /** * 工程表id */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 工程号 */ private String engineerId; /** * 工程名称 */ private String engineerName; /** * 平均利用率 */ private Double avgAvailability; /** * 有效利用率 */ private Double validAvailability; /** * 尾片利用率 */ private Double lastAvailability; /** * 状态 */ private Integer state; /** * 小片总数 */ private Integer glassTotal; /** * 小片总面积 */ private Double glassTotalArea; /** * 计划原片总数 */ private Integer planPatternTotal; /** * 计划原片总面积 */ private Double planPatternTotalArea; /** * 实际原片总数 */ private Integer realityPatternTotal; /** * 实际原片总面积 */ private Double realityPatternTotalArea; /** * 膜系id */ private String filmsId; /** * 备注 */ private String notes; } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/engineering/mapper/EngineeringMapper.java
New file @@ -0,0 +1,17 @@ package com.mes.engineering.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.github.yulichang.base.MPJBaseMapper; import com.mes.engineering.entity.Engineering; /** * <p> * Mapper 接口 * </p> * * @author wu * @since 2024-04-22 */ public interface EngineeringMapper extends MPJBaseMapper<Engineering> { } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/engineering/mapper/xml/EngineeringMapper.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mes.engineering.mapper.EngineeringMapper"> </mapper> hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java
New file @@ -0,0 +1,20 @@ package com.mes.engineering.service; import com.baomidou.mybatisplus.extension.service.IService; import com.mes.engineering.entity.Engineering; import java.util.List; /** * <p> * 服务类 * </p> * * @author wu * @since 2024-04-22 */ public interface EngineeringService extends IService<Engineering> { } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
New file @@ -0,0 +1,33 @@ package com.mes.engineering.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.engineering.entity.Engineering; import com.mes.engineering.mapper.EngineeringMapper; import com.mes.engineering.service.EngineeringService; import com.mes.pp.entity.OptimizeProject; import com.mes.pp.mapper.OptimizeProjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; /** * <p> * 服务实现类 * </p> * * @author wu * @since 2024-04-22 */ @Service @Slf4j public class EngineeringServiceImpl extends ServiceImpl<EngineeringMapper, Engineering> implements EngineeringService { } hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
@@ -1,6 +1,7 @@ package com.mes.glassinfo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.github.yulichang.base.MPJBaseMapper; import com.mes.glassinfo.entity.GlassInfo; import org.mapstruct.Mapper; @@ -13,7 +14,7 @@ * @since 2024-03-27 */ @Mapper public interface GlassInfoMapper extends BaseMapper<GlassInfo> { public interface GlassInfoMapper extends MPJBaseMapper<GlassInfo> { hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -1,7 +1,13 @@ package com.mes.glassinfo.service.impl; 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.github.yulichang.toolkit.JoinWrappers; import com.mes.downstorage.entity.DownStorageCage; import com.mes.downstorage.entity.DownStorageCageDetails; import com.mes.engineering.entity.Engineering; import com.mes.engineering.mapper.EngineeringMapper; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.glassinfo.service.GlassInfoService; @@ -22,11 +28,13 @@ @Service public class GlassInfoServiceImpl extends ServiceImpl<GlassInfoMapper, GlassInfo> implements GlassInfoService { private EngineeringMapper engineeringMapper; private GlassInfoMapper glassInfoMapper; @Autowired(required=false) public GlassInfoServiceImpl(GlassInfoMapper glassInfoMapper) { public GlassInfoServiceImpl(GlassInfoMapper glassInfoMapper, EngineeringMapper engineeringMapper) { this.glassInfoMapper = glassInfoMapper; this.engineeringMapper = engineeringMapper; } @Override @@ -36,15 +44,26 @@ } @Override public List<Map<String, Object>> getFlowCardId() { return baseMapper.selectMaps(new QueryWrapper<GlassInfo>().lambda().select(GlassInfo::getFlowCardId).groupBy(GlassInfo::getFlowCardId)); return baseMapper.selectJoinMaps(JoinWrappers.lambda(GlassInfo.class) .select(GlassInfo::getFlowCardId) .leftJoin(Engineering.class, on -> on .eq(Engineering::getEngineerId, GlassInfo::getEngineerId) .eq(Engineering::getState, 0) ) .groupBy(GlassInfo::getFlowCardId) ); } @Override public GlassInfo selectGlassId(String id) { return baseMapper.selectOne(new QueryWrapper<GlassInfo>().lambda() hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
@@ -16,6 +16,7 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Bean; import org.springframework.test.context.junit4.SpringRunner; import java.util.Arrays; @@ -30,6 +31,7 @@ @Slf4j @RunWith(SpringRunner.class) @SpringBootTest(classes = UnLoadGlassApplication.class) public class UnloadGlassModuleApplicationTest { @Autowired @@ -48,6 +50,9 @@ GlassInfoServiceImpl glassInfoServiceImpl; @Autowired DownWorkstationService downWorkstationService; @Test public void testFindPath() { @@ -106,12 +111,15 @@ } @Test public void CacheEmpty() { log.info("测试出片"); downStorageCageDetailsService.CacheOut(1,2); // @Test // public void CacheEmpty() { // log.info("测试出片"); // downStorageCageDetailsService.CacheOut(1,2); // // } } @Test public void CacheEmpty1() { log.info("测试出片"); @@ -152,5 +160,13 @@ downStorageCageServiceImpl.selectCacheEmpty(); } @Test public void getFlowCardId() { glassInfoServiceImpl.getFlowCardId(); } }