Merge remote-tracking branch 'origin/master'
# Conflicts:
# hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
| | |
| | | basicData: { |
| | | untask: 'No task', |
| | | tonumber: 'Total number of films uploaded', |
| | | sectionUpperSuccessful:'Upper section operation successfulï¼', |
| | | finishnumber: 'Completed quantity', |
| | | rackreset: 'Rack reset', |
| | | prackreset: 'Is the rack resetï¼', |
| | |
| | | Content:'Content', |
| | | idSame:'The glass ID for the entry task is the same', |
| | | sizeSame:'There are glass pieces of the same specification inside the cage', |
| | | slotLess:'Insufficient remaining slots', |
| | | overSize:'There is glass in the straight-through feeder, end this feeding process.', |
| | | noGlass:'Glass information not found, please collect the project', |
| | | projectMsg2:'Please select a label template', |
| | | clickmakesure: 'Whether or not to confirm the clickï¼', |
| | | logarithm: 'logarithmï¼', |
| | |
| | | basicData:{ |
| | | untask:'ìì
ìì', |
| | | tonumber:'ì´ ìí ì', |
| | | sectionUpperSuccessful:'ìë¶ ì¡°ì ì±ê³µï¼', |
| | | finishnumber:'ìë£ë ìë', |
| | | rackreset:'ìí ì¬ì¤ì ', |
| | | prackreset:'ìíê° ì¬ì¤ì ëëì§ ì¬ë¶ï¼', |
| | |
| | | content:'ë´ì©', |
| | | idSame:'ì§ì
ìì
ì 리 IDê° ëì¼í©ëë¤.', |
| | | sizeSame:'ì°ë¦¬ ìì ëì¼í ê·ê²©ì ì ë¦¬ê° ì¡´ì¬í©ëë¤.', |
| | | slotLess:'ëë¨¸ì§ ê·¸ë¦¬ëê° ë¶ì¡±í©ëë¤.', |
| | | overSize:'ì§íµ í¼ë©ëì ì ë¦¬ê° ìì´ ì´ë² í¼ë©ì ì¢
ë£í©ëë¤', |
| | | noGlass:'ì 리 ì 보를 ì°¾ì ì ììµëë¤. ê³µì ì ë°ì¼ì¸ì.', |
| | | clickmakesure: 'í´ë¦ íì¸ ì¬ë¶ï¼', |
| | | logarithm: 'ëìï¼', |
| | | totalPairQuantitya: 'ì´ ì무 ì§ì', |
| | |
| | | basicData: { |
| | | untask:'æ ä»»å¡', |
| | | tonumber:'ä¸çæ»æ°é', |
| | | sectionUpperSuccessful:'ä¸çæä½æåï¼', |
| | | finishnumber:'已宿æ°é', |
| | | rackreset:'æ¶åå¤ä½', |
| | | prackreset:'æ¯å¦æ¶åå¤ä½ï¼', |
| | |
| | | content:'å
容', |
| | | idSame:'è¿çä»»å¡ç»çIDç¸å', |
| | | sizeSame:'笼å
åå¨ç¸åè§æ ¼çç»ç', |
| | | slotLess:'å©ä½æ ¼åä¸è¶³', |
| | | overSize:'ç´éçå°åå¨ç»çï¼ç»ææ¬æ¬¡è¿ç', |
| | | noGlass:'æªæ¾å°ç»çä¿¡æ¯ï¼è¯·é¢åå·¥ç¨', |
| | | clickmakesure: 'æ¯å¦ç¡®è®¤ç¹å»ï¼', |
| | | logarithm: '对æ°ï¼', |
| | | totalPairQuantitya: '任塿»é
对æ°', |
| | |
| | | basicData:{ |
| | | untask:'æ ä»»å¡', |
| | | tonumber:'ä¸çæ»æ°é', |
| | | sectionUpperSuccessful:'ä¸çæä½æåï¼', |
| | | finishnumber:'已宿æ°é', |
| | | rackreset:'æ¶åå¤ä½', |
| | | prackreset:'æ¯å¦æ¶åå¤ä½ï¼', |
| | |
| | | prompt:'æç¤º', |
| | | }, |
| | | delivery:{ |
| | | alarmStartTime:'æ¥è¦å¼å§æ¶é´', |
| | | alarmEndTime:'æ¥è¦ç»ææ¶é´', |
| | | equipment:'设å¤', |
| | | content:'å
容', |
| | | confirmer:'确认人', |
| | | addrole:'æ·»å è§è²', |
| | | editrole:'ä¿®æ¹è§è²', |
| | | role :'è§è²', |
| | |
| | | content:'å
容', |
| | | idSame:'è¿çä»»å¡ç»çIDç¸å', |
| | | sizeSame:'笼å
åå¨ç¸åè§æ ¼çç»ç', |
| | | slotLess:'å©ä½æ ¼åä¸è¶³', |
| | | overSize:'ç´éçå°åå¨ç»çï¼ç»ææ¬æ¬¡è¿ç', |
| | | noGlass:'æªæ¾å°ç»çä¿¡æ¯ï¼è¯·é¢åå·¥ç¨', |
| | | projectMsg2:'è¯·éæ©æ ç¾æ¨¡æ¿', |
| | | clickmakesure: 'æ¯å¦ç¡®è®¤ç¹å»ï¼', |
| | | logarithm: '对æ°ï¼', |
| | |
| | | path: '/User/userpageNo', |
| | | name: 'userpageNo', |
| | | component: () => import('../views/User/userpageNo.vue') |
| | | }, |
| | | { |
| | | path: '/User/alarmLog', |
| | | name: 'alarmLog', |
| | | component: () => import('../views/User/alarmLog.vue') |
| | | } |
| | | ] |
| | | }, |
| | |
| | | const adjustedRects = ref([]); |
| | | const selectValuesa = reactive([]); |
| | | const timeRange = ref([]) |
| | | const tableDataAlert = ref([]) |
| | | const taskState = ref('') |
| | | const taskStat = ref('') |
| | | const taskType = ref('') |
| | | const glassId = ref('') |
| | | const alertText = ref('') |
| | | const alertMessage = ref('') |
| | | const alarmData = ref('') |
| | | // const alarmData = ref<any>(null) |
| | | const showAlert = ref(false) |
| | | const showModal = ref(false) |
| | | const blindb = ref(false) |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlassOne`; |
| | | const handleMessage = (data) => { |
| | | // æ¥è¦ä¿¡æ¯ |
| | | if (data.alarmInfo[0] != null && data.alarmInfo[0].length > 0) { |
| | | const alert = data.alarmInfo[0]; |
| | | const { id, alarmMessage, ...rest } = alert[0]; |
| | | alertMessage.value = `${alarmMessage}`; |
| | | alertMessage.value = `${alert[0].alarmMessage}`; |
| | | if (alert[0].alarmCode === 'sizeSame') { |
| | | alertText.value = t('hellow.sizeSame'); |
| | | } else if (alert[0].alarmCode === 'idSame') { |
| | | alertText.value = t('hellow.idSame'); |
| | | } else if (alert[0].alarmCode === 'slotLess') { |
| | | alertText.value = t('hellow.slotLess'); |
| | | } else if (alert[0].alarmCode === 'overSize') { |
| | | alertText.value = t('hellow.overSize'); |
| | | } else if (alert[0].alarmCode === 'noGlass') { |
| | | alertText.value = t('hellow.noGlass'); |
| | | } else { |
| | | alertText.value = t('hellow.unknownAlert'); |
| | | } |
| | | alarmData.value = data; // åå¨å®æ´æ°æ®ç¨äºå¼¹çª |
| | | showAlert.value = true; |
| | | } |
| | | const formattedData = data.alarmInfo[0].map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | alarmCode: record.alarmCode, |
| | | alarmMessage: record.alarmMessage |
| | | })); |
| | | tableDataAlert.value = formattedData; |
| | | const cageInfo = data.taskMessage[0]; |
| | | if (cageInfo && cageInfo.createTime) { |
| | | cageInfo.formattedCreateTime = formatTimestamp(cageInfo.createTime); |
| | |
| | | } |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | }; |
| | | // è¦æ¥ç¡®è®¤ |
| | | const handleSure = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('hellow.clickmakesure'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/hollowGlass/productAlarmInfo/updateAlarmInfo', { |
| | | id: row.id |
| | | }) |
| | | if (response.code === 200) { |
| | | showModal.value = false; |
| | | showAlert.value = false; |
| | | |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error('åçé误:', error); |
| | | } |
| | | }; |
| | | |
| | | // è¦æ¥åå»å¼¹çª |
| | | const handleDoubleClick = () => { |
| | | showModal.value = true; |
| | | }; |
| | | const getAlertText = (alarmCode) => { |
| | | const codeMap = { |
| | | sizeSame: 'hellow.sizeSame', |
| | | idSame: 'hellow.idSame', |
| | | slotLess: 'hellow.slotLess', |
| | | overSize: 'hellow.overSize', |
| | | noGlass: 'hellow.noGlass' |
| | | }; |
| | | return alarmCode in codeMap |
| | | ? t(codeMap[alarmCode]) |
| | | : t('hellow.unknownAlert'); |
| | | }; |
| | | const rowClassName = ({ row }) => { |
| | | // æ ¹æ® enableState 设置è¡ç CSS ç±» |
| | | return row.slot % 2 === 0 ? 'success-row' : ''; |
| | |
| | | </script> |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <div v-if="showAlert" class="global-alert-bar" @dblclick="handleDoubleClick"> |
| | | <div class="alert-content"> |
| | | <el-icon><WarnTriangleFilled /></el-icon> |
| | | <span class="alert-text"> |
| | | {{ alertText }} (id:{{ alertMessage }}) |
| | | </span> |
| | | </div> |
| | | <button @click="showAlert = false" class="close-btn">Ã</button> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;"> |
| | | <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="handlehistorical" type="primary">{{ $t('searchOrder.historicaltasks') }}</el-button> |
| | | <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="handleptask()" type="warning">{{ $t('searchOrder.partask') }}</el-button> |
| | |
| | | frameborder="0" |
| | | ></iframe> |
| | | </el-dialog> |
| | | <!-- æ¥è¦å¼¹çª --> |
| | | <el-dialog |
| | | v-model="showModal" |
| | | width="40%" |
| | | center |
| | | > |
| | | <el-table |
| | | ref="table" |
| | | border |
| | | :data="tableDataAlert" |
| | | max-height="calc(500px - 35px)" |
| | | style="width: 100%;" |
| | | > |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="100" /> |
| | | <el-table-column |
| | | :label="$t('hellow.content')" |
| | | align="center" |
| | | min-width="220" |
| | | > |
| | | <template #default="scope"> |
| | | <span> |
| | | {{ getAlertText(scope.row.alarmCode) }} |
| | | (id:{{ scope.row.alarmMessage }}) |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="100"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain |
| | | @click="handleSure(scope.row)">{{ $t('basicData.yes') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | <!-- <el-dialog v-model="blindb" top="10vh" width="90%"> |
| | | <div style="display: flex;"> |
| | | <el-input v-model="glassId" style="margin-left: 10px;margin-bottom: 10px;width: 270px;" :placeholder="$t('searchOrder.inglassID')" /> |
| | |
| | | max-width: 100%; |
| | | margin-left: 10% |
| | | } |
| | | .global-alert-bar { |
| | | position: fixed; |
| | | top: 0; |
| | | left: 50%; /* æ°´å¹³å±
ä¸å
³é® */ |
| | | transform: translateX(-50%); /* æ°´å¹³å±
ä¸å
³é® */ |
| | | padding: 12px 20px; |
| | | background-color: #dbdbd7; |
| | | box-shadow: 0 2px 10px rgba(0,0,0,0.2); |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | z-index: 9999; |
| | | max-width: 80%; /* 鲿¢å°å±å¹æº¢åº */ |
| | | min-width: 400px; /* æå°å®½åº¦ä¿è¯ */ |
| | | } |
| | | </style> |
| | |
| | | const adjustedRects = ref([]); |
| | | const selectValuesa = reactive([]); |
| | | const timeRange = ref([]) |
| | | const tableDataAlert = ref([]) |
| | | const taskState = ref('') |
| | | const taskType = ref('') |
| | | const glassId = ref('') |
| | | const alertText = ref('') |
| | | const alertMessage = ref('') |
| | | const alarmData = ref('') |
| | | const showAlert = ref(false) |
| | | const showModal = ref(false) |
| | | const blindb = ref(false) |
| | | let socket = null; |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlassTwo`; |
| | | const handleMessage = (data) => { |
| | | // æ¥è¦ä¿¡æ¯ |
| | | if (data.alarmInfo[0] != null && data.alarmInfo[0].length > 0) { |
| | | const alert = data.alarmInfo[0]; |
| | | const { id, alarmMessage, ...rest } = alert[0]; |
| | | alertMessage.value = `${alarmMessage}`; |
| | | alertMessage.value = `${alert[0].alarmMessage}`; |
| | | if (alert[0].alarmCode === 'sizeSame') { |
| | | alertText.value = t('hellow.sizeSame'); |
| | | } else if (alert[0].alarmCode === 'idSame') { |
| | | alertText.value = t('hellow.idSame'); |
| | | } else if (alert[0].alarmCode === 'slotLess') { |
| | | alertText.value = t('hellow.slotLess'); |
| | | } else if (alert[0].alarmCode === 'overSize') { |
| | | alertText.value = t('hellow.overSize'); |
| | | } else if (alert[0].alarmCode === 'noGlass') { |
| | | alertText.value = t('hellow.noGlass'); |
| | | } else { |
| | | alertText.value = t('hellow.unknownAlert'); |
| | | } |
| | | alarmData.value = data; // åå¨å®æ´æ°æ®ç¨äºå¼¹çª |
| | | showAlert.value = true; |
| | | } |
| | | const formattedData = data.alarmInfo[0].map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | | alarmCode: record.alarmCode, |
| | | alarmMessage: record.alarmMessage |
| | | })); |
| | | tableDataAlert.value = formattedData; |
| | | const cageInfo = data.taskMessage[0]; |
| | | if (cageInfo && cageInfo.createTime) { |
| | | cageInfo.formattedCreateTime = formatTimestamp(cageInfo.createTime); |
| | |
| | | } catch (error) { |
| | | } |
| | | }; |
| | | // è¦æ¥ç¡®è®¤ |
| | | const handleSure = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('hellow.clickmakesure'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | const response = await request.post('/hollowGlass/productAlarmInfo/updateAlarmInfo', { |
| | | id: row.id |
| | | }) |
| | | if (response.code === 200) { |
| | | showModal.value = false; |
| | | showAlert.value = false; |
| | | |
| | | ElMessage.success(response.message); |
| | | } else { |
| | | ElMessage.error(response.msg); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | console.error('åçé误:', error); |
| | | } |
| | | }; |
| | | |
| | | // è¦æ¥åå»å¼¹çª |
| | | const handleDoubleClick = () => { |
| | | showModal.value = true; |
| | | }; |
| | | const getAlertText = (alarmCode) => { |
| | | const codeMap = { |
| | | sizeSame: 'hellow.sizeSame', |
| | | idSame: 'hellow.idSame', |
| | | slotLess: 'hellow.slotLess', |
| | | overSize: 'hellow.overSize', |
| | | noGlass: 'hellow.noGlass' |
| | | }; |
| | | return alarmCode in codeMap |
| | | ? t(codeMap[alarmCode]) |
| | | : t('hellow.unknownAlert'); |
| | | }; |
| | | const rowClassName = ({ row }) => { |
| | | // æ ¹æ® enableState 设置è¡ç CSS ç±» |
| | | return row.slot % 2 === 0 ? 'success-row' : ''; |
| | |
| | | </script> |
| | | <template> |
| | | <div style="height: 500px;"> |
| | | <div v-if="showAlert" class="global-alert-bar" @dblclick="handleDoubleClick"> |
| | | <div class="alert-content"> |
| | | <el-icon><WarnTriangleFilled /></el-icon> |
| | | <span class="alert-text"> |
| | | {{ alertText }} (id:{{ alertMessage }}) |
| | | </span> |
| | | </div> |
| | | <button @click="showAlert = false" class="close-btn">Ã</button> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;"> |
| | | <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="handlehistorical" type="primary">{{ $t('searchOrder.historicaltasks') }}</el-button> |
| | | <el-button style="margin-bottom: 15px;margin-left: 20px;" @click="handleptask()" type="warning">{{ $t('searchOrder.partask') }}</el-button> |
| | |
| | | frameborder="0" |
| | | ></iframe> |
| | | </el-dialog> |
| | | <!-- æ¥è¦å¼¹çª --> |
| | | <el-dialog |
| | | v-model="showModal" |
| | | width="40%" |
| | | center |
| | | > |
| | | <el-table |
| | | ref="table" |
| | | border |
| | | :data="tableDataAlert" |
| | | max-height="calc(500px - 35px)" |
| | | style="width: 100%;" |
| | | > |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="100" /> |
| | | <el-table-column |
| | | :label="$t('hellow.content')" |
| | | align="center" |
| | | min-width="220" |
| | | > |
| | | <template #default="scope"> |
| | | <span> |
| | | {{ getAlertText(scope.row.alarmCode) }} |
| | | (id:{{ scope.row.alarmMessage }}) |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="100"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain |
| | | @click="handleSure(scope.row)">{{ $t('basicData.yes') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | </template> |
| | | <style scoped> |
| | | #dt { display:block; float:left;line-height: 20px;margin-left: 100px;} |
| | |
| | | max-width: 100%; |
| | | margin-left: 10% |
| | | } |
| | | .global-alert-bar { |
| | | position: fixed; |
| | | top: 0; |
| | | left: 50%; /* æ°´å¹³å±
ä¸å
³é® */ |
| | | transform: translateX(-50%); /* æ°´å¹³å±
ä¸å
³é® */ |
| | | padding: 12px 20px; |
| | | background-color: #dbdbd7; |
| | | box-shadow: 0 2px 10px rgba(0,0,0,0.2); |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | z-index: 9999; |
| | | max-width: 80%; /* 鲿¢å°å±å¹æº¢åº */ |
| | | min-width: 400px; /* æå°å®½åº¦ä¿è¯ */ |
| | | } |
| | | </style> |
| | |
| | | state: 1, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | let timeoutId = setTimeout(() => { |
| | | // 模ææä¸ç¡®è®¤æé® |
| | | const confirmBtn = document.querySelector('.el-message-box__btns .el-button--primary'); |
| | | if (confirmBtn) { |
| | | confirmBtn.click(); |
| | | } |
| | | }, 5000) |
| | | await ElMessageBox.alert(' ', t('basicData.sectionUpperSuccessful'), { |
| | | confirmButtonText: t('searchOrder.sure'), |
| | | type: 'success', |
| | | center: true, |
| | | customClass: 'center-message-box', |
| | | }); |
| | | // æ¸
é¤å®æ¶å¨ |
| | | clearTimeout(timeoutId); |
| | | // æ§è¡ç¡®è®¤åçé»è¾ |
| | | canSelectProjecta.value = false; |
| | | canSelectProjectb.value = false; |
| | | canSelectProjectc.value = true; |
| | |
| | | // å¼å§ä¸ç |
| | | const handleon = async () => { |
| | | let filmRemove = window.localStorage.getItem('filmRemove') |
| | | let engineeringIda = window.localStorage.getItem('engineeringIda') |
| | | let engineeringId = window.localStorage.getItem('engineeringIda') |
| | | if (markingMachineStatus.value === 'green' && cuttingMachineStatus.value === 'green') { |
| | | try { |
| | | const response = await request.post('/loadGlass/engineering/engineering/changeTask', { |
| | | stationCell: 6, |
| | | filmRemove: filmRemove, |
| | | engineerId: engineeringIda, |
| | | engineerId: engineeringId, |
| | | state: 1, |
| | | }) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | let timeoutId = setTimeout(() => { |
| | | // 模ææä¸ç¡®è®¤æé® |
| | | const confirmBtn = document.querySelector('.el-message-box__btns .el-button--primary'); |
| | | if (confirmBtn) { |
| | | confirmBtn.click(); |
| | | } |
| | | }, 5000) |
| | | await ElMessageBox.alert(' ', t('basicData.sectionUpperSuccessful'), { |
| | | confirmButtonText: t('searchOrder.sure'), |
| | | type: 'success', |
| | | center: true, |
| | | customClass: 'center-message-box', |
| | | }); |
| | | // æ¸
é¤å®æ¶å¨ |
| | | clearTimeout(timeoutId); |
| | | // æ§è¡ç¡®è®¤åçé»è¾ |
| | | canSelectProjecta.value = false; |
| | | canSelectProjectb.value = false; |
| | | canSelectProjectc.value = true; |
| | |
| | | const selectValuesa = reactive([]); |
| | | const carPosition = ref([]) |
| | | const ganghua = ref('') |
| | | const engineerId = ref('') |
| | | const diaodu = ref('') |
| | | const flowCardId = ref('') |
| | | const filmsId = ref('') |
| | |
| | | const adjustedRectsa = ref([]); |
| | | const adjustedRectsb = ref([]); |
| | | const adjustedRectsc = ref([]); |
| | | const adjustedRectsd = ref([]); |
| | | const adjustedRectse = ref([]); |
| | | const subRectsCounts = ref([]); |
| | | const subRectsCountsa = ref([]); |
| | | const subRectsCountsb = ref([]); |
| | | const subRectsCountsc = ref([]); |
| | | const subRectsCountsd = ref([]); |
| | | const subRectsCountse = ref([]); |
| | | const currentRow = reactive({}); // å½åè¡çæ°æ® |
| | | const showAlert = ref(false) |
| | | const alertMessage = ref('') |
| | |
| | | const cell2=ref(true); |
| | | const cell3=ref(true); |
| | | const cell4=ref(true); |
| | | const cell5=ref(true); |
| | | const cell6=ref(true); |
| | | const canEdit = ref(true); |
| | | const selectedRow = ref(null); |
| | | const temperingtotal = ref(0); |
| | |
| | | const getAlertText = (alarmCode) => { |
| | | const codeMap = { |
| | | sizeSame: 'hellow.sizeSame', |
| | | idSame: 'hellow.idSame' |
| | | idSame: 'hellow.idSame', |
| | | slotLess: 'hellow.slotLess', |
| | | overSize: 'hellow.overSize', |
| | | noGlass: 'hellow.noGlass' |
| | | }; |
| | | return alarmCode in codeMap |
| | | ? t(codeMap[alarmCode]) |
| | |
| | | const fetchxiang = async () => { |
| | | isLoading.value = true; |
| | | try { |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCage/querybigStorageCageDetail',{ |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/queryVerticalSheetCageDetailsList',{ |
| | | // deviceId: page, |
| | | engineerId: engineerId.value, |
| | | filmsId: filmsId.value, |
| | | flowCardId: flowCardId.value, |
| | | glassId: glassId.value, |
| | | thickness: -1, |
| | | }) |
| | | // 模ææå°å è½½æ¶é´ |
| | | await new Promise(resolve => setTimeout(resolve, 300)); |
| | |
| | | const fetchxianga = async () => { |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | try { |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCage/querybigStorageCageDetail',{ |
| | | const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/queryVerticalSheetCageDetailsList',{ |
| | | deviceId: page, |
| | | engineerId: engineerId.value, |
| | | filmsId: filmsId.value, |
| | | flowCardId: flowCardId.value, |
| | | glassId: glassId.value, |
| | | thickness: thickness.value ? thickness.value : -1, |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`; |
| | | const handleMessage = (data) => { |
| | | // æ¥è¦ä¿¡æ¯ |
| | | if (data.alarmInfo[0] !=null && data.alarmInfo[0].length > 0) { |
| | | const alert = data.alarmInfo[0] |
| | | const { id,alarmMessage, ...rest } = alert[0]; |
| | | alertMessage.value = `${alarmMessage}`; |
| | | alertMessage.value = `${alert[0].alarmMessage}`; |
| | | // å¨æç¿»è¯é»è¾ï¼æ ¹æ®alarmCodeéæ©ç¿»è¯é® |
| | | alertText.value = alert[0].alarmCode === 'sizeSame' |
| | | ? t('hellow.sizeSame') |
| | | : t('hellow.idSame'); |
| | | if (data.alarmInfo[0] != null && data.alarmInfo[0].length > 0) { |
| | | const alert = data.alarmInfo[0]; |
| | | const { id, alarmMessage, ...rest } = alert[0]; |
| | | alertMessage.value = `${alarmMessage}`; |
| | | alertMessage.value = `${alert[0].alarmMessage}`; |
| | | if (alert[0].alarmCode === 'sizeSame') { |
| | | alertText.value = t('hellow.sizeSame'); |
| | | } else if (alert[0].alarmCode === 'idSame') { |
| | | alertText.value = t('hellow.idSame'); |
| | | } else if (alert[0].alarmCode === 'slotLess') { |
| | | alertText.value = t('hellow.slotLess'); |
| | | } else if (alert[0].alarmCode === 'overSize') { |
| | | alertText.value = t('hellow.overSize'); |
| | | } else if (alert[0].alarmCode === 'noGlass') { |
| | | alertText.value = t('hellow.noGlass'); |
| | | } else { |
| | | alertText.value = t('hellow.unknownAlert'); |
| | | } |
| | | alarmData.value = data; // åå¨å®æ´æ°æ®ç¨äºå¼¹çª |
| | | showAlert.value = true; |
| | | } |
| | | } |
| | | const formattedData = data.alarmInfo[0].map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | |
| | | top: 53/55, |
| | | })); |
| | | subRectsCountsc.value = data.bigStorageCageInfos[0][4].map(rect => rect.count); |
| | | adjustedRectsd.value = data.bigStorageCageInfos[0][5].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 20/55, |
| | | top: 53/55, |
| | | })); |
| | | subRectsCountsd.value = data.bigStorageCageInfos[0][5].map(rect => rect.count); |
| | | adjustedRectse.value = data.bigStorageCageInfos[0][6].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 20/55, |
| | | top: 53/55, |
| | | })); |
| | | subRectsCountse.value = data.bigStorageCageInfos[0][6].map(rect => rect.count); |
| | | }else{ |
| | | adjustedRects.value = '', |
| | | adjustedRectsa.value = '', |
| | | adjustedRectsb.value = '', |
| | | adjustedRectsc.value = '' |
| | | adjustedRectsc.value = '', |
| | | adjustedRectsd.value = '', |
| | | adjustedRectse.value = '' |
| | | } |
| | | }; |
| | | // è®¡ç®æ¯ä¸ªå¤§ç©å½¢çæ ·å¼ |
| | |
| | | } |
| | | return subRects; |
| | | }; |
| | | // è®¡ç®æ¯ä¸ªå¤§ç©å½¢çæ ·å¼ |
| | | const rectStyled = (rect, index) => ({ |
| | | position: 'absolute', |
| | | width: '170px', |
| | | right: '0px', |
| | | top: `${index*rect.top}px`, |
| | | height: `${rect.height}px`, |
| | | }); |
| | | // è®¡ç®æ¯ä¸ªå°ç©å½¢çæ ·å¼åæ°é |
| | | const getSubRectsd = (rectIndex) => { |
| | | const count = subRectsCountsd.value[rectIndex]; |
| | | const subRects = []; |
| | | for (let i = 0; i < count; i++) { |
| | | subRects.push({}); |
| | | } |
| | | return subRects; |
| | | }; |
| | | // è®¡ç®æ¯ä¸ªå¤§ç©å½¢çæ ·å¼ |
| | | const rectStylee = (rect, index) => ({ |
| | | position: 'absolute', |
| | | width: '170px', |
| | | right: '0px', |
| | | top: `${index*rect.top}px`, |
| | | height: `${rect.height}px`, |
| | | }); |
| | | // è®¡ç®æ¯ä¸ªå°ç©å½¢çæ ·å¼åæ°é |
| | | const getSubRectse = (rectIndex) => { |
| | | const count = subRectsCountse.value[rectIndex]; |
| | | const subRects = []; |
| | | for (let i = 0; i < count; i++) { |
| | | subRects.push({}); |
| | | } |
| | | return subRects; |
| | | }; |
| | | // è®¡ç®æ¯ä¸ªå°ç©å½¢çæ ·å¼ |
| | | const subRectStylec = (rectIndex, subIndex) => { |
| | | const width = '18px'; |
| | | const marginRight = '8px'; |
| | | const totalWidth = 6 * (parseInt(width) + parseInt(marginRight)); |
| | | const right = `${(subIndex * (parseInt(width) + parseInt(marginRight))) / totalWidth * 100}%`; |
| | | return { |
| | | position: 'absolute', |
| | | width, |
| | | height: '100%', |
| | | marginRight, |
| | | top: '0px', |
| | | backgroundColor: '#911005', |
| | | right, |
| | | }; |
| | | }; |
| | | // è®¡ç®æ¯ä¸ªå°ç©å½¢çæ ·å¼ |
| | | const subRectStyled = (rectIndex, subIndex) => { |
| | | const width = '18px'; |
| | | const marginRight = '8px'; |
| | | const totalWidth = 6 * (parseInt(width) + parseInt(marginRight)); |
| | | const right = `${(subIndex * (parseInt(width) + parseInt(marginRight))) / totalWidth * 100}%`; |
| | | return { |
| | | position: 'absolute', |
| | | width, |
| | | height: '100%', |
| | | marginRight, |
| | | top: '0px', |
| | | backgroundColor: '#911005', |
| | | right, |
| | | }; |
| | | }; |
| | | // è®¡ç®æ¯ä¸ªå°ç©å½¢çæ ·å¼ |
| | | const subRectStylee = (rectIndex, subIndex) => { |
| | | const width = '18px'; |
| | | const marginRight = '8px'; |
| | | const totalWidth = 6 * (parseInt(width) + parseInt(marginRight)); |
| | |
| | | closeWebSocket(socket); |
| | | } |
| | | }); |
| | | function getStatusType(enableState: number) { |
| | | switch (enableState) { |
| | | case 100: |
| | | return 'success'; |
| | | case 102: |
| | | return 'warning'; |
| | | } |
| | | } |
| | | function getStatusText(enableState: number) { |
| | | switch (enableState) { |
| | | case 100: |
| | | return t('searchOrder.zailong'); |
| | | case 102: |
| | | return t('searchOrder.rengongxp'); |
| | | } |
| | | } |
| | | function getStatusTypea(ishorizontal: number) { |
| | | switch (ishorizontal) { |
| | | case 0: |
| | |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell2" style="width: 170px;height: 53px;position: relative;top:72px;left: 445px;"> |
| | | <div v-show="cell2" style="width: 170px;height: 53px;position: relative;top:70px;left: 445px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsa" :key="rect.id" :style="rectStylea(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsa(rectIndex)" |
| | |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell3" style="width: 170px;height: 53px;position: relative;top:81px;left: 445px;"> |
| | | <div v-show="cell3" style="width: 170px;height: 53px;position: relative;top:76px;left: 445px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsb" :key="rect.id" :style="rectStyleb(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsb(rectIndex)" |
| | |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell4" style="width: 170px;height: 53px;position: relative;top:89px;left: 445px;"> |
| | | <div v-show="cell4" style="width: 170px;height: 53px;position: relative;top:84px;left: 445px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsc" :key="rect.id" :style="rectStylec(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsc(rectIndex)" |
| | | :key="subIndex" |
| | | :style="subRectStylec(rectIndex, subIndex)" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell5" style="width: 170px;height: 53px;position: relative;top:-16px;left: 45px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsd" :key="rect.id" :style="rectStyled(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsd(rectIndex)" |
| | | :key="subIndex" |
| | | :style="subRectStyled(rectIndex, subIndex)" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell6" style="width: 170px;height: 53px;position: relative;top:-6px;left: 45px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectse" :key="rect.id" :style="rectStylee(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectse(rectIndex)" |
| | | :key="subIndex" |
| | | :style="subRectStylee(rectIndex, subIndex)" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | |
| | | :title="$t('searchOrder.cageinformation')"> |
| | | <div v-loading="isLoading" class="loading-container" :element-loading-text="$t('searchOrder.loadingText')" > |
| | | <div style="display: flex;"> |
| | | <el-input v-model="engineerId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('processCard.projectnumber')"/> |
| | | <el-input v-model="glassId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.inglassID')"/> |
| | | <el-input v-model="flowCardId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.incardnumber')" /> |
| | | <el-input v-model="filmsId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('film.infilms')"/> |
| | | <el-input v-model="thickness" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.inthickness')"/> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="fetchxianga"> |
| | | {{$t('reportmanage.inquire')}}</el-button> |
| | | </div> |
| | | <el-table |
| | | :data="tableDataa" |
| | | @row-click="handleRowClick" |
| | | height="700" |
| | | @expand-change="handleExpandChange" |
| | | row-key="id" |
| | | default-expand-all |
| | | :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" |
| | | > |
| | | <el-table-column type="expand"> |
| | | <template #default="props"> |
| | | <div v-if="props.row.bigStorageCageDetails && props.row.bigStorageCageDetails.length"> |
| | | <el-table |
| | | :data="props.row.bigStorageCageDetails" |
| | | border |
| | | style="width: 98%;margin-left: 20px;" |
| | | row-key="id" |
| | | :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" |
| | | > |
| | | <!-- <el-table-column prop="menuName" label="äºçº§èåæ " align="center" min-width="140" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"/> --> |
| | | <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" min-width="120"/> |
| | | <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="130" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('searchOrder.coatingtypes')" min-width="80" /> |
| | | <!-- <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="80" /> --> |
| | | <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" /> |
| | | <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="100" /> |
| | | <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('searchOrder.startstatus')" |
| | | min-width="80" |
| | | prop="state" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusType(scope.row.state)"> |
| | | {{ getStatusText(scope.row.state) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="80" /> |
| | | <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" min-width="220"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="broke(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> |
| | | <el-button type="text" plain @click="brokec(scope.row)">{{ $t('searchOrder.takeout') }}</el-button> |
| | | <el-button type="text" plain @click="opena(scope.row)">{{ $t('searchOrder.delete') }}</el-button> |
| | | <el-button type="text" |
| | | :disabled="!((props.row.bigStorageCageDetails[0].state !== 102 && scope.$index == 0 ) || (props.row.bigStorageCageDetails[(scope.$index - 1)<0?0:scope.$index-1].state==102)&&(scope.row.state!=102))" |
| | | plain @click="outfil(scope.row)"> |
| | | {{ $t('searchOrder.outfilm') }} |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="id" :label="$t('searchOrder.cagetableID')" align="center" min-width="90"/> |
| | | <el-table ref="table" style="margin-top: 20px;height: 700px;width: 1770px;" :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.cagenumber')" min-width="100" /> |
| | | <el-table-column prop="engineerId" align="center" :label="$t('searchOrder.projectnumber')" min-width="100" /> |
| | | <el-table-column prop="layer" align="center" :label="$t('processCard.layer')" min-width="50" /> |
| | | <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="150" /> |
| | | <el-table-column |
| | | align="center" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="remainWidth" align="center" :label="$t('searchOrder.remainingwidth')" min-width="120" /> |
| | | |
| | | <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="handleBindRack(scope.row)">{{ $t('searchOrder.add') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" min-width="120"/> |
| | | <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="130" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('searchOrder.coatingtypes')" min-width="80" /> |
| | | <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" /> |
| | | <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="100" /> |
| | | <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120" /> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="240"> |
| | | <template #default="scope"> |
| | | <!-- <el-button type="text" plain @click="handleBindRack(scope.row)">{{ $t('searchOrder.add') }}</el-button> --> |
| | | <el-button type="text" plain @click="broke(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> |
| | | <el-button type="text" plain @click="brokec(scope.row)">{{ $t('searchOrder.takeout') }}</el-button> |
| | | <el-button type="text" plain @click="opena(scope.row)">{{ $t('searchOrder.delete') }}</el-button> |
| | | <!-- <el-button type="text" |
| | | :disabled="!((props.row.bigStorageCageDetails[0].state !== 102 && scope.$index == 0 ) || (props.row.bigStorageCageDetails[(scope.$index - 1)<0?0:scope.$index-1].state==102)&&(scope.row.state!=102))" |
| | | plain @click="outfil(scope.row)"> |
| | | {{ $t('searchOrder.outfilm') }} |
| | | </el-button> --> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div> |
| | | <!-- <div style="margin-top: 20px;margin-left: 40%;"> |
| | |
| | | .img-dlpl{ |
| | | margin-left: 20px; |
| | | margin-top: 0px; |
| | | background-image:url('/ganghuaqian.png'); |
| | | background-image:url('/src/assets/ganghuaqian.png'); |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 380px; |
| New file |
| | |
| | | <script setup> |
| | | import request from "@/utils/request" |
| | | import { Search } from "@element-plus/icons-vue" |
| | | import { ref, onMounted, reactive, computed } from "vue" |
| | | import { useRouter } from "vue-router" |
| | | import { useI18n } from 'vue-i18n' |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const { t } = useI18n() |
| | | const router = useRouter() |
| | | const showAlert = ref(true) |
| | | const showModal = ref(false) |
| | | // const tableData = ref([]) |
| | | const tableData = [ |
| | | { |
| | | alarmStartTime: '2025-11-03 8:25:05',//æ¥è¦å¼å§æ¶é´ |
| | | alarmEndTime: '2025-11-03 9:25:05',//æ¥è¦ç»ææ¶é´ |
| | | equipment: 'ä¸ç1å·æº',//è®¾å¤ |
| | | content: 'æªæ¶å°è¯·æ±',//å
容 |
| | | confirmer: 'admin',//确认人 |
| | | }, |
| | | { |
| | | alarmStartTime: '2025-11-03 10:05:05', |
| | | alarmEndTime: '2025-11-03 10:08:05', |
| | | equipment: 'å§å¼çç笼', |
| | | content: 'æªè·åå°ç»ç对åºå°ºå¯¸ä¿¡æ¯', |
| | | confirmer: 'admin', |
| | | }, |
| | | { |
| | | alarmStartTime: '2025-11-03 16:30:15', |
| | | alarmEndTime: '2025-11-03 16:35:05', |
| | | equipment: 'é¢å大çç笼', |
| | | content: 'è¿çç»çIDä¸ç¬¼å
ç»çIDç¸å', |
| | | confirmer: 'admin', |
| | | }, |
| | | { |
| | | alarmStartTime: '2025-11-03 20:30:15', |
| | | alarmEndTime: '2025-11-03 22:30:15', |
| | | equipment: 'ä¸ç©ºå¤§çç笼', |
| | | content: '笼å
åå¨ç¸åè§æ ¼çç»ç', |
| | | confirmer: 'admin', |
| | | }, |
| | | ] |
| | | const tableDataAlert = [ |
| | | { |
| | | formattedCreateTime: '2025-11-03 8:25:05', |
| | | }, |
| | | ] |
| | | // è¦æ¥åå»å¼¹çª |
| | | const handleDoubleClick = () => { |
| | | showModal.value = true; |
| | | }; |
| | | const handleSure = async (row) => { |
| | | try { |
| | | const confirmResult = await ElMessageBox.confirm( |
| | | t('hellow.clickmakesure'), |
| | | t('productStock.prompt'), |
| | | { |
| | | confirmButtonText: t('productStock.yes'), |
| | | cancelButtonText: t('productStock.cancel'), |
| | | type: 'warning', |
| | | } |
| | | ); |
| | | if (confirmResult === 'confirm') { |
| | | showModal.value = false; |
| | | showAlert.value = false; |
| | | |
| | | ElMessage.success(); |
| | | } |
| | | } catch (error) { |
| | | console.error('åçé误:', error); |
| | | } |
| | | }; |
| | | onMounted(() => { |
| | | }); |
| | | </script> |
| | | <template> |
| | | <div> |
| | | <div v-if="showAlert" class="global-alert-bar" @dblclick="handleDoubleClick"> |
| | | <div class="alert-content"> |
| | | <el-icon><WarnTriangleFilled /></el-icon> |
| | | <span class="alert-text"> |
| | | 笼å
åå¨ç¸åè§æ ¼çç»ç (id:25103114002002) |
| | | </span> |
| | | </div> |
| | | <button @click="showAlert = false" class="close-btn">Ã</button> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;"> |
| | | <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;"> |
| | | <el-table height="780" ref="table" |
| | | :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="alarmStartTime" align="center" :label="$t('delivery.alarmStartTime')" min-width="180" /> |
| | | <el-table-column prop="alarmEndTime" align="center" :label="$t('delivery.alarmEndTime')" min-width="180" /> |
| | | <el-table-column prop="equipment" align="center" :label="$t('delivery.equipment')" min-width="180" /> |
| | | <el-table-column prop="content" align="center" :label="$t('delivery.content')" min-width="180" /> |
| | | <el-table-column prop="confirmer" align="center" :label="$t('delivery.confirmer')" min-width="180" /> |
| | | </el-table> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | |
| | | <el-dialog |
| | | v-model="showModal" |
| | | width="40%" |
| | | center |
| | | > |
| | | <el-table |
| | | ref="table" |
| | | border |
| | | :data="tableDataAlert" |
| | | max-height="calc(500px - 35px)" |
| | | style="width: 100%;" |
| | | > |
| | | <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="100" /> |
| | | <el-table-column |
| | | :label="$t('hellow.content')" |
| | | align="center" |
| | | min-width="220" |
| | | > |
| | | <template #default="scope"> |
| | | <span> |
| | | 笼å
åå¨ç¸åè§æ ¼çç»ç (id:25103114002002) |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="100"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain |
| | | @click="handleSure(scope.row)">{{ $t('basicData.yes') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | </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{ |
| | | text-align: center; |
| | | margin-top: -15px; |
| | | } |
| | | #message{ |
| | | text-align: center; |
| | | align-items: center; |
| | | color: black; |
| | | width: 200px; |
| | | height: 100px; |
| | | background-color: #337ecc; |
| | | margin-left: 28%; |
| | | } |
| | | #awatch{ |
| | | height: 460px; |
| | | } |
| | | |
| | | .global-alert-bar { |
| | | position: fixed; |
| | | top: 0; |
| | | left: 50%; /* æ°´å¹³å±
ä¸å
³é® */ |
| | | transform: translateX(-50%); /* æ°´å¹³å±
ä¸å
³é® */ |
| | | padding: 12px 20px; |
| | | background-color: #dbdbd7; |
| | | box-shadow: 0 2px 10px rgba(0,0,0,0.2); |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | z-index: 9999; |
| | | max-width: 80%; /* 鲿¢å°å±å¹æº¢åº */ |
| | | min-width: 400px; /* æå°å®½åº¦ä¿è¯ */ |
| | | } |
| | | </style> |
| | |
| | | const currentAlarm = ref<any>(null) |
| | | const tableDataAlert = ref([]) |
| | | const alertText = ref('') |
| | | |
| | | const engineerId = ref('') |
| | | const ganghua = ref('') |
| | | const diaodu = ref('') |
| | | const hollowPriority = ref('') |
| | |
| | | const glassType = ref('') |
| | | const layer = ref('') |
| | | const filmsId = ref('') |
| | | const thickness = ref('') |
| | | const adjust = ref([]); |
| | | const adjusta = ref([]); |
| | | const adjustedRects = ref([]); |
| | |
| | | const adjustedRectsb = ref([]); |
| | | const adjustedRectsc = ref([]); |
| | | const adjustedRectsd = ref([]); |
| | | const adjustedRectse = ref([]); |
| | | const subRectsCounts = ref([]); |
| | | const subRectsCountsa = ref([]); |
| | | const subRectsCountsb = ref([]); |
| | | const subRectsCountsc = ref([]); |
| | | const subRectsCountsd = ref([]); |
| | | const subRectsCountse = ref([]); |
| | | const currentRow = reactive({}); // å½åè¡çæ°æ® |
| | | const currentLack = reactive({}); |
| | | const currentPage2 = ref(1) |
| | |
| | | // ççç¬¼ä¿¡æ¯ |
| | | const fetchxiang = async () => { |
| | | try { |
| | | const response = await request.post('/hollowGlass/hollowBigStorageCage/queryHollowBigStorageCageDetail',{ |
| | | const response = await request.post('/hollowGlass/hollowBigStorageCageDetails/queryVerticalSheetCageDetailsList',{ |
| | | // deviceId: page, |
| | | engineerId: engineerId.value, |
| | | filmsId: filmsId.value, |
| | | flowCardId: flowCardId.value, |
| | | glassId: glassId.value, |
| | | thickness: -1, |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | |
| | | const fetchxianga = async () => { |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | try { |
| | | const response = await request.post('/hollowGlass/hollowBigStorageCage/queryHollowBigStorageCageDetail',{ |
| | | const response = await request.post('/hollowGlass/hollowBigStorageCageDetails/queryVerticalSheetCageDetailsList',{ |
| | | deviceId: page, |
| | | engineerId: engineerId.value, |
| | | filmsId: filmsId.value, |
| | | flowCardId: flowCardId.value, |
| | | glassId: glassId.value, |
| | | thickness: thickness.value ? thickness.value : -1, |
| | | }) |
| | | if (response.code === 200) { |
| | | ElMessage.success(response.message); |
| | |
| | | const socketUrl = `ws://${WebSocketHost}:${host}/api/hollowGlass/api/talk/hollowGlassMessage`; |
| | | const handleMessage = (data) => { |
| | | // æ¥è¦ä¿¡æ¯ |
| | | if (data.alarmInfo[0] !=null && data.alarmInfo[0].length > 0) { |
| | | const alert = data.alarmInfo[0] |
| | | const { id,alarmMessage, ...rest } = alert[0]; |
| | | alertMessage.value = `${alarmMessage}`; |
| | | alertMessage.value = `${alert[0].alarmMessage}`; |
| | | // å¨æç¿»è¯é»è¾ï¼æ ¹æ®alarmCodeéæ©ç¿»è¯é® |
| | | alertText.value = alert[0].alarmCode === 'sizeSame' |
| | | ? t('hellow.sizeSame') |
| | | : t('hellow.idSame'); |
| | | if (data.alarmInfo[0] != null && data.alarmInfo[0].length > 0) { |
| | | const alert = data.alarmInfo[0]; |
| | | const { id, alarmMessage, ...rest } = alert[0]; |
| | | alertMessage.value = `${alarmMessage}`; |
| | | alertMessage.value = `${alert[0].alarmMessage}`; |
| | | if (alert[0].alarmCode === 'sizeSame') { |
| | | alertText.value = t('hellow.sizeSame'); |
| | | } else if (alert[0].alarmCode === 'idSame') { |
| | | alertText.value = t('hellow.idSame'); |
| | | } else if (alert[0].alarmCode === 'slotLess') { |
| | | alertText.value = t('hellow.slotLess'); |
| | | } else if (alert[0].alarmCode === 'overSize') { |
| | | alertText.value = t('hellow.overSize'); |
| | | } else if (alert[0].alarmCode === 'noGlass') { |
| | | alertText.value = t('hellow.noGlass'); |
| | | } else { |
| | | alertText.value = t('hellow.unknownAlert'); |
| | | } |
| | | alarmData.value = data; // åå¨å®æ´æ°æ®ç¨äºå¼¹çª |
| | | showAlert.value = true; |
| | | } |
| | | } |
| | | const formattedData = data.alarmInfo[0].map(record => ({ |
| | | ...record, |
| | | formattedCreateTime: formatTimestamp(record.createTime), |
| | |
| | | adjustedRects.value = data.bigStorageCageInfos[0][1].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 15/55, |
| | | top: 33/55, |
| | | top: 64/55, |
| | | })); |
| | | subRectsCounts.value = data.bigStorageCageInfos[0][1].map(rect => rect.count); |
| | | adjustedRectsa.value = data.bigStorageCageInfos[0][2].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 15/55, |
| | | top: 33/55, |
| | | top: 64/55, |
| | | })); |
| | | subRectsCountsa.value = data.bigStorageCageInfos[0][2].map(rect => rect.count); |
| | | adjustedRectsb.value = data.bigStorageCageInfos[0][3].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 15/55, |
| | | top: 33/55, |
| | | top: 64/55, |
| | | })); |
| | | subRectsCountsb.value = data.bigStorageCageInfos[0][3].map(rect => rect.count); |
| | | adjustedRectsc.value = data.bigStorageCageInfos[0][4].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 15/55, |
| | | top: 33/55, |
| | | top: 64/55, |
| | | })); |
| | | subRectsCountsc.value = data.bigStorageCageInfos[0][4].map(rect => rect.count); |
| | | adjustedRectsd.value = data.bigStorageCageInfos[0][5].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 15/55, |
| | | top: 33/55, |
| | | top: 64/55, |
| | | })); |
| | | subRectsCountsd.value = data.bigStorageCageInfos[0][5].map(rect => rect.count); |
| | | adjustedRectse.value = data.bigStorageCageInfos[0][6].map((rect, index) => ({ |
| | | id: index + 1, |
| | | height: 15/55, |
| | | top: 64/55, |
| | | })); |
| | | subRectsCountse.value = data.bigStorageCageInfos[0][6].map(rect => rect.count); |
| | | |
| | | }else{ |
| | | adjustedRects.value = '', |
| | | adjustedRectsa.value = '', |
| | | adjustedRectsb.value = '', |
| | | adjustedRectsc.value = '' |
| | | adjustedRectsd.value = '' |
| | | adjustedRectsc.value = '', |
| | | adjustedRectsd.value = '', |
| | | adjustedRectse.value = '' |
| | | } |
| | | }; |
| | | const getAlertText = (alarmCode) => { |
| | | const codeMap = { |
| | | sizeSame: 'hellow.sizeSame', |
| | | idSame: 'hellow.idSame' |
| | | idSame: 'hellow.idSame', |
| | | slotLess: 'hellow.slotLess', |
| | | overSize: 'hellow.overSize', |
| | | noGlass: 'hellow.noGlass' |
| | | }; |
| | | return alarmCode in codeMap |
| | | ? t(codeMap[alarmCode]) |
| | |
| | | left, |
| | | }; |
| | | }; |
| | | // è®¡ç®æ¯ä¸ªå°ç©å½¢çæ ·å¼åæ°é |
| | | const getSubRectse = (rectIndex) => { |
| | | const count = subRectsCountse.value[rectIndex]; |
| | | const subRects = []; |
| | | for (let i = 0; i < count; i++) { |
| | | subRects.push({}); |
| | | } |
| | | return subRects; |
| | | }; |
| | | // è®¡ç®æ¯ä¸ªå°ç©å½¢çæ ·å¼ |
| | | const subRectStylee = (rectIndex, subIndex) => { |
| | | const width = '18px'; |
| | | const marginLeft = '3px'; |
| | | const totalWidth = 6 * (parseInt(width) + parseInt(marginLeft)); |
| | | const left = `${(subIndex * (parseInt(width) + parseInt(marginLeft))) / totalWidth * 100}%`; |
| | | return { |
| | | position: 'absolute', |
| | | width, |
| | | height: '100%', |
| | | marginLeft, |
| | | top: '0px', |
| | | backgroundColor: '#911005', |
| | | left, |
| | | }; |
| | | }; |
| | | const iframeUrl = ref(''); |
| | | const handlehistorical = (row) => { |
| | | blindb.value = true; |
| | |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // è¡¥é¶ï¼å¦æéè¦æ¾ç¤ºæ¶é´ï¼ |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // è¡¥é¶ï¼å¦æéè¦æ¾ç¤ºæ¶é´ï¼ |
| | | return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | } |
| | | function getStatusType(enableState: number) { |
| | | switch (enableState) { |
| | | case 100: |
| | | return 'success'; |
| | | case 102: |
| | | return 'warning'; |
| | | } |
| | | } |
| | | function getStatusText(enableState: number) { |
| | | switch (enableState) { |
| | | case 100: |
| | | return t('searchOrder.zailong'); |
| | | case 102: |
| | | return t('searchOrder.rengongxp'); |
| | | } |
| | | } |
| | | function getcasOnea(isSame) { |
| | | switch (isSame) { |
| | |
| | | > |
| | | </div> |
| | | </div> |
| | | <div class="img-car4" :style="'z-index:999;left:588px;top:' + 450*carPosition[1] + 'px;position:absolute;'"> |
| | | <div class="img-car4" :style="'z-index:999;left:580px;top:' + 450*carPosition[1] + 'px;position:absolute;'"> |
| | | <div |
| | | v-for="(rect, index) in adjust" |
| | | :key="rect.id" |
| | |
| | | </div> |
| | | </div> |
| | | <div style="position: relative;"> |
| | | <div v-show="cell1" style="width: 150px;height: 33px;position: relative;top:292px;left: 418px;"> |
| | | <div v-show="cell1" style="width: 150px;height: 64px;position: relative;top:82px;left: 415px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRects" :key="rect.id" :style="rectStyle(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRects(rectIndex)" |
| | |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell2" style="width: 150px;height: 33px;position: relative;top:295px;left: 418px;"> |
| | | <div v-show="cell2" style="width: 150px;height: 64px;position: relative;top:88px;left: 415px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsa" :key="rect.id" :style="rectStylea(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsa(rectIndex)" |
| | |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell3" style="width: 150px;height: 33px;position: relative;top:298px;left: 418px;"> |
| | | <div v-show="cell3" style="width: 150px;height: 64px;position: relative;top:93px;left: 415px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsb" :key="rect.id" :style="rectStyleb(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsb(rectIndex)" |
| | |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell4" style="width: 150px;height: 33px;position: relative;top:301px;left: 418px;"> |
| | | <div v-show="cell4" style="width: 150px;height: 64px;position: relative;top:99px;left: 415px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsc" :key="rect.id" :style="rectStylec(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsc(rectIndex)" |
| | |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell5" style="width: 150px;height: 33px;position: relative;top:304px;left: 418px;"> |
| | | <div v-show="cell5" style="width: 150px;height: 64px;position: relative;top:105px;left: 415px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectsd" :key="rect.id" :style="rectStyled(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectsd(rectIndex)" |
| | | :key="subIndex" |
| | | :style="subRectStyled(rectIndex, subIndex)" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | | <div v-show="cell6" style="width: 150px;height: 64px;position: relative;top:28px;left: 40px;"> |
| | | <div v-for="(rect, rectIndex) in adjustedRectse" :key="rect.id" :style="rectStyled(rect, rectIndex)"> |
| | | <div |
| | | v-for="(subRect, subIndex) in getSubRectse(rectIndex)" |
| | | :key="subIndex" |
| | | :style="subRectStylee(rectIndex, subIndex)" |
| | | ></div> |
| | | </div> |
| | | </div> |
| | |
| | | <!-- ççç¬¼ä¿¡æ¯ --> |
| | | <el-dialog v-model="dialogFormVisiblea" top="2vh" width="97%" :title="$t('searchOrder.cageinformation')"> |
| | | <div style="display: flex;"> |
| | | <el-input v-model="flowCardId" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.incardnumber')" /> |
| | | <el-input v-model="filmsId" style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('film.infilms')"/> |
| | | <el-input v-model="engineerId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('processCard.projectnumber')"/> |
| | | <el-input v-model="glassId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.inglassID')"/> |
| | | <el-input v-model="flowCardId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.incardnumber')" /> |
| | | <el-input v-model="filmsId" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('film.infilms')"/> |
| | | <el-input v-model="thickness" clearable style="margin-left: 10px;margin-bottom: 10px;width: 240px;" :placeholder="$t('searchOrder.inthickness')"/> |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="fetchxianga"> |
| | | {{$t('reportmanage.inquire')}}</el-button> |
| | | </div> |
| | | <el-table |
| | | :data="tableDataa" |
| | | @row-click="handleRowClick" |
| | | height="700" |
| | | row-key="id" |
| | | default-expand-all |
| | | :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" |
| | | > |
| | | <el-table-column type="expand"> |
| | | <template #default="props"> |
| | | <div v-if="props.row.hollowBigStorageCageDetails && props.row.hollowBigStorageCageDetails.length"> |
| | | <el-table |
| | | :data="props.row.hollowBigStorageCageDetails" |
| | | border |
| | | style="width: 98%;margin-left: 20px;" |
| | | row-key="id" |
| | | :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" |
| | | > |
| | | <!-- <el-table-column prop="menuName" label="äºçº§èåæ " align="center" min-width="140" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"/> --> |
| | | <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" min-width="130"/> |
| | | <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="130" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('searchOrder.coatingtypes')" min-width="80" /> |
| | | <!-- <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="80" /> --> |
| | | <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" /> |
| | | <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="100" /> |
| | | <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('searchOrder.startstatus')" |
| | | min-width="80" |
| | | prop="state" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tag :type="getStatusType(scope.row.state)"> |
| | | {{ getStatusText(scope.row.state) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="80" /> |
| | | <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" min-width="220"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="broke(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> |
| | | <el-button type="text" plain @click="brokec(scope.row)">{{ $t('searchOrder.takeout') }}</el-button> |
| | | <el-button type="text" plain @click="opena(scope.row)">{{ $t('searchOrder.delete') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="id" :label="$t('searchOrder.cagetableID')" align="center" min-width="100"/> |
| | | <el-table ref="table" style="margin-top: 20px;height: 700px;width: 1770px;" :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"> |
| | | <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.cagenumber')" min-width="150" /> |
| | | <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="150" /> |
| | | <el-table-column prop="engineerId" align="center" :label="$t('searchOrder.projectnumber')" min-width="100" /> |
| | | <el-table-column prop="layer" align="center" :label="$t('processCard.layer')" min-width="80" /> |
| | | <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="120" /> |
| | | <el-table-column |
| | | align="center" |
| | | :label="$t('searchOrder.startstatus')" |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="remainWidth" align="center" :label="$t('searchOrder.remainingwidth')" min-width="120" /> |
| | | |
| | | <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center"> |
| | | <template #default="scope"> |
| | | <el-button type="text" plain @click="handleBindRack(scope.row)">{{ $t('searchOrder.add') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="glassId" :label="$t('searchOrder.glassID')" align="center" min-width="130"/> |
| | | <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="130" /> |
| | | <el-table-column prop="filmsId" align="center" :label="$t('searchOrder.coatingtypes')" min-width="80" /> |
| | | <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" /> |
| | | <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="100" /> |
| | | <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="120" /> |
| | | <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="80" /> |
| | | <el-table-column fixed="right" :label="$t('film.operate')" align="center" width="240"> |
| | | <template #default="scope"> |
| | | <!-- <el-button type="text" plain @click="handleBindRack(scope.row)">{{ $t('searchOrder.add') }}</el-button> --> |
| | | <el-button type="text" plain @click="broke(scope.row)">{{ $t('searchOrder.breakage') }}</el-button> |
| | | <el-button type="text" plain @click="brokec(scope.row)">{{ $t('searchOrder.takeout') }}</el-button> |
| | | <el-button type="text" plain @click="opena(scope.row)">{{ $t('searchOrder.delete') }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div> |
| | | </div> |
| | |
| | | .img-zkdlpl{ |
| | | margin-left: 20px; |
| | | margin-top: 0px; |
| | | background-image:url('/zhongkong.png'); |
| | | background-image:url('/src/assets/zhongkong.png'); |
| | | background-repeat: no-repeat; |
| | | background-attachment: local; |
| | | min-height: 500px; |
| | |
| | | /** |
| | | * æåº |
| | | */ |
| | | private String listSort; |
| | | private Integer listSort; |
| | | |
| | | /** |
| | | * å建æ¶é´ |
| | |
| | | .innerJoin(SysRoleMenu.class, SysRoleMenu::getRoleId, SysUserRole::getRoleId) |
| | | .innerJoin(SysMenu.class, SysMenu::getId, SysRoleMenu::getMenuId) |
| | | .eq(SysUser::getId, user.getId()) |
| | | .like(StringUtils.isNotBlank(request.getKey()), SysMenu::getMenuName, request.getKey()); |
| | | .like(StringUtils.isNotBlank(request.getKey()), SysMenu::getMenuName, request.getKey()) |
| | | .orderByAsc(SysMenu::getListSort); |
| | | |
| | | // |
| | | List<SysMenu> menuList = sysUserRoleMapper.selectJoinList(SysMenu.class, wrapper); |
| | | log.info("userinfos:{}",menuList); |
| | | log.info("userinfos:{}", menuList); |
| | | return create(menuList); |
| | | } |
| | | |
| | |
| | | import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer; |
| | | import com.kangaroohy.milo.model.ReadWriteEntity; |
| | | import com.kangaroohy.milo.service.MiloService; |
| | | import com.mes.alarm.entity.ProductAlarmInfo; |
| | | import com.mes.alarm.service.ProductAlarmInfoService; |
| | | import com.mes.common.config.Const; |
| | | import com.mes.common.config.ConstSysConfig; |
| | | import com.mes.damage.service.DamageService; |
| | |
| | | private String glassIdOne = ""; |
| | | private String glassIdTwo = ""; |
| | | |
| | | @Resource |
| | | private ProductAlarmInfoService productAlarmInfoService; |
| | | |
| | | private static final String ALARM_MODULE = "磨边"; |
| | | private static final String ALARM_TYPE1 = "ä¸çº¿å§å¼çç笼"; |
| | | private static final String ALARM_TYPE2 = "äºçº¿å§å¼çç笼"; |
| | | private static final String ALARM_CODE_NOGLASS = "noGlass"; |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void startOneOpcTask() throws Exception { |
| | | List<ProductAlarmInfo> alarmInfos = productAlarmInfoService.list(new LambdaQueryWrapper<ProductAlarmInfo>() |
| | | .eq(ProductAlarmInfo::getState, Const.LOAD_RAW_GLASS_NEW) |
| | | .eq(ProductAlarmInfo::getAlarmModule, ALARM_MODULE) |
| | | .eq(ProductAlarmInfo::getAlarmType, ALARM_TYPE1)); |
| | | if (CollectionUtil.isNotEmpty(alarmInfos)) { |
| | | log.info("ç颿¥è¦ï¼çå¾
人工干é¢å¤ç"); |
| | | return; |
| | | } |
| | | S7DataWL s7DataWLTwo = s7SerializerWLTwo.read(S7DataWL.class); |
| | | S7DataWL s7DataWLOne = s7SerializerWLOne.read(S7DataWL.class); |
| | | S7DataWLExtra s7DataWLExtraTwo = s7SerializerWLTwo.read(S7DataWLExtra.class); |
| | |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void startTwoOpcTask() throws Exception { |
| | | List<ProductAlarmInfo> alarmInfos = productAlarmInfoService.list(new LambdaQueryWrapper<ProductAlarmInfo>() |
| | | .eq(ProductAlarmInfo::getState, Const.LOAD_RAW_GLASS_NEW) |
| | | .eq(ProductAlarmInfo::getAlarmModule, ALARM_MODULE) |
| | | .eq(ProductAlarmInfo::getAlarmType, ALARM_TYPE2)); |
| | | if (CollectionUtil.isNotEmpty(alarmInfos)) { |
| | | log.info("ç颿¥è¦ï¼çå¾
人工干é¢å¤ç"); |
| | | return; |
| | | } |
| | | S7DataWL s7DataWLOne = s7SerializerWLOne.read(S7DataWL.class); |
| | | S7DataWL s7DataWLTwo = s7SerializerWLTwo.read(S7DataWL.class); |
| | | S7DataWLExtra s7DataWLExtraTwo = s7SerializerWLTwo.read(S7DataWLExtra.class); |
| | |
| | | log.info("å¼å§æ§è¡è¿çä»»å¡ï¼ä»»å¡ä¿¡æ¯ä¸ºï¼{},设å¤id:{},å¼å§æ¶é´ï¼{}", task, deviceId, startDate); |
| | | //è·åç»ççåºæ¬ä¿¡æ¯ |
| | | GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn())); |
| | | if (null == glassInfo) { |
| | | if (null == glassInfo && StringUtils.isNotBlank(task.getGlassIdIn())) { |
| | | log.info("è¿çç»çä¿¡æ¯ä¸åå¨ï¼ç»çid:{}", task.getGlassIdIn()); |
| | | ProductAlarmInfo alarmInfo = new ProductAlarmInfo(); |
| | | alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW); |
| | | alarmInfo.setAlarmModule(ALARM_MODULE); |
| | | if (deviceId == 1) { |
| | | alarmInfo.setAlarmType(ALARM_TYPE1); |
| | | } else { |
| | | alarmInfo.setAlarmType(ALARM_TYPE2); |
| | | } |
| | | alarmInfo.setAlarmCode(ALARM_CODE_NOGLASS); |
| | | alarmInfo.setAlarmMessage(task.getGlassIdIn()); |
| | | productAlarmInfoService.save(alarmInfo); |
| | | Date endDate = new Date(); |
| | | log.info("ç»æè¿çä»»å¡è®¾å¤ä¸º{}ï¼ç»ææ¶é´ä¸ºï¼{}ï¼å
±èæ¶ï¼{}ms", deviceId, endDate, endDate.getTime() - startDate.getTime()); |
| | | return Boolean.FALSE; |
| | |
| | | |
| | | private boolean outTask(S7DataWL task, int deviceId, int cellFlag) { |
| | | Date startDate = new Date(); |
| | | GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdOut())); |
| | | if (null == glassInfo && StringUtils.isNotBlank(task.getGlassIdIn())) { |
| | | log.info("è¿çç»çä¿¡æ¯ä¸åå¨ï¼ç»çid:{}", task.getGlassIdIn()); |
| | | ProductAlarmInfo alarmInfo = new ProductAlarmInfo(); |
| | | alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW); |
| | | alarmInfo.setAlarmModule(ALARM_MODULE); |
| | | if (deviceId == 1) { |
| | | alarmInfo.setAlarmType(ALARM_TYPE1); |
| | | } else { |
| | | alarmInfo.setAlarmType(ALARM_TYPE2); |
| | | } |
| | | alarmInfo.setAlarmCode(ALARM_CODE_NOGLASS); |
| | | alarmInfo.setAlarmMessage(task.getGlassIdIn()); |
| | | productAlarmInfoService.save(alarmInfo); |
| | | Date endDate = new Date(); |
| | | log.info("ç»æè¿çä»»å¡è®¾å¤ä¸º{}ï¼ç»ææ¶é´ä¸ºï¼{}ï¼å
±èæ¶ï¼{}ms", deviceId, endDate, endDate.getTime() - startDate.getTime()); |
| | | return Boolean.FALSE; |
| | | } |
| | | //è·å对åºç设å¤ç¶æä¿¡æ¯ |
| | | S7DataWL s7DataWLOne = s7SerializerWLOne.read(S7DataWL.class); |
| | | S7DataWL s7DataWLTwo = s7SerializerWLTwo.read(S7DataWL.class); |
| | |
| | | cell = Const.ONE_OUT_TARGET_POSITION; |
| | | } else if (Const.OUT_BUSY.equals(twoOutState)) { |
| | | cell = Const.TWO_OUT_TARGET_POSITION; |
| | | }else if(Const.OUT_BUSY.equals(oneOutState)){ |
| | | } else if (Const.OUT_BUSY.equals(oneOutState)) { |
| | | cell = Const.ONE_OUT_TARGET_POSITION; |
| | | }else{ |
| | | } else { |
| | | return Boolean.FALSE; |
| | | } |
| | | } |
| | |
| | | |
| | | import cn.hutool.json.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.mes.alarm.entity.ProductAlarmInfo; |
| | | import com.mes.alarm.service.ProductAlarmInfoService; |
| | | import com.mes.common.config.Const; |
| | | import com.mes.edgglasstask.entity.EdgGlassTaskInfo; |
| | | import com.mes.edgglasstask.service.EdgGlassTaskInfoService; |
| | |
| | | EngineeringService engineeringService; |
| | | @Resource |
| | | LargenScreenService largenScreenService; |
| | | @Resource |
| | | private ProductAlarmInfoService productAlarmInfoService; |
| | | |
| | | private static final String ALARM_MODULE = "磨边"; |
| | | private static final String ALARM_TYPE1 = "ä¸çº¿å§å¼çç笼"; |
| | | private static final String ALARM_TYPE2 = "äºçº¿å§å¼çç笼"; |
| | | private static final String ALARM_CODE_NOGLASS = "noGlass"; |
| | | |
| | | @Resource |
| | | private WebSocketUtils webSocketUtils; |
| | |
| | | .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) |
| | | .orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 1")); |
| | | jsonObject.append("taskMessage", taskHistory); |
| | | |
| | | //æ¨éæ¥è¦ä¿¡æ¯ |
| | | if (deviceId == 1) { |
| | | jsonObject.append("alarmInfo", productAlarmInfoService.list(new LambdaQueryWrapper<ProductAlarmInfo>() |
| | | .eq(ProductAlarmInfo::getState, Const.LOAD_RAW_GLASS_NEW) |
| | | .eq(ProductAlarmInfo::getAlarmModule, ALARM_MODULE) |
| | | .eq(ProductAlarmInfo::getAlarmType, ALARM_TYPE1))); |
| | | } else { |
| | | |
| | | jsonObject.append("alarmInfo", productAlarmInfoService.list(new LambdaQueryWrapper<ProductAlarmInfo>() |
| | | .eq(ProductAlarmInfo::getState, Const.LOAD_RAW_GLASS_NEW) |
| | | .eq(ProductAlarmInfo::getAlarmModule, ALARM_MODULE) |
| | | .eq(ProductAlarmInfo::getAlarmType, ALARM_TYPE2))); |
| | | } |
| | | webSocketUtils.sendToWeb(webSocketName, jsonObject); |
| | | } |
| | | |
| | |
| | | import com.mes.bigstorage.entity.BigStorageCageDetails; |
| | | import com.mes.bigstorage.entity.dto.GlassInfoLackDTO; |
| | | import com.mes.bigstorage.entity.dto.TemperingGlassCountDTO; |
| | | import com.mes.bigstorage.entity.request.BigCageDetailsRequest; |
| | | import com.mes.bigstorage.entity.vo.BigStorageQueryVO; |
| | | import com.mes.bigstorage.entity.vo.BigCageDetailsVO; |
| | | import com.mes.bigstorage.service.BigStorageCageDetailsService; |
| | | import com.mes.bigstorage.service.BigStorageCageService; |
| | | import com.mes.common.config.Const; |
| | |
| | | return Result.build(200, "", result); |
| | | } |
| | | |
| | | @ApiOperation("ï¼åè¡¨ï¼æå表ç
§æ¥è¯¢æ¡ä»¶ï¼è®¾å¤idãæµç¨å¡ãèç³»ï¼è·å设å¤å¯¹åºç笼åç»çä¿¡æ¯") |
| | | @PostMapping("/queryVerticalSheetCageDetailsList") |
| | | public Result<List<BigCageDetailsVO>> queryVerticalSheetCageDetailsList(@RequestBody BigCageDetailsRequest request) { |
| | | return Result.build(200, "æ¥è¯¢æå", bigStorageCageDetailsService.queryVerticalSheetCageDetailsList(request)); |
| | | } |
| | | |
| | | } |
| | | |
| New file |
| | |
| | | package com.mes.bigstorage.entity.request; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.mes.base.entity.PageRequest; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @Author : zhoush |
| | | * @Date: 2025/9/4 17:04 |
| | | * @Description: |
| | | */ |
| | | @Data |
| | | public class BigCageDetailsRequest extends PageRequest { |
| | | |
| | | @ApiModelProperty(value = "设å¤id", position = 1) |
| | | private Integer deviceId; |
| | | |
| | | @ApiModelProperty(value = "æ ¼åå·", position = 2) |
| | | private Integer slot; |
| | | |
| | | @ApiModelProperty(value = "æµç¨å¡", position = 3) |
| | | private String flowCardId; |
| | | |
| | | @ApiModelProperty(value = "èç³»", position = 4) |
| | | private String filmsId; |
| | | |
| | | @ApiModelProperty(value = "å度", position = 5) |
| | | private int thickness; |
| | | |
| | | @ApiModelProperty(value = "é¢åçå¾id", position = 6) |
| | | private String engineerId; |
| | | |
| | | @ApiModelProperty(value = "ç»çid", position = 7) |
| | | private String glassId; |
| | | |
| | | @ApiModelProperty(value = "ç»çæ¥å·¥ç¶æï¼8ç ´æ 9æ¿èµ° è°ç¨æ´æ°ç¶æ/ç ´ææ¿èµ°æ¥å£å¿
å¡«", position = 8) |
| | | private String state; |
| | | |
| | | @ApiModelProperty(value = "å¼å§æ¶é´") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date startTime; |
| | | |
| | | @ApiModelProperty(value = "ç»ææ¶é´") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date endTime; |
| | | } |
| New file |
| | |
| | | package com.mes.bigstorage.entity.vo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.mes.bigstorage.entity.BigStorageCage; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @Author : zhoush |
| | | * @Date: 2025/9/4 17:02 |
| | | * @Description: |
| | | */ |
| | | @Data |
| | | public class BigCageDetailsVO extends BigStorageCage { |
| | | |
| | | @ApiModelProperty(value = "大çç笼详æ
è¡¨ä¸»é® ID", position = 1) |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long detailId; |
| | | |
| | | @ApiModelProperty(value = "è®¾å¤ ID", position = 2) |
| | | private Integer detailDeviceId; |
| | | |
| | | @ApiModelProperty(value = "æ
æ ¼å·", position = 3) |
| | | private Integer detailSlot; |
| | | |
| | | @ApiModelProperty(value = "ç»ç ID", position = 4) |
| | | private String glassId; |
| | | |
| | | @ApiModelProperty(value = "å°ç卿 ¼åå
ç顺åº", position = 5) |
| | | private Integer sequence; |
| | | |
| | | @ApiModelProperty(value = "æµç¨å¡å·", position = 6) |
| | | private String flowCardId; |
| | | |
| | | @ApiModelProperty(value = "æµç¨å¡è½æ¶ç¼ç ", position = 7) |
| | | private String flowCardSequence; |
| | | |
| | | @ApiModelProperty(value = "ç»çç±»å", position = 8) |
| | | private Integer glassType; |
| | | |
| | | @ApiModelProperty(value = "ç»ç宽度ï¼åä½ï¼mmï¼", position = 9) |
| | | private Double width; |
| | | |
| | | @ApiModelProperty(value = "ç»çé«åº¦ï¼åä½ï¼mmï¼", position = 10) |
| | | private Double height; |
| | | |
| | | @ApiModelProperty(value = "ç»çå度ï¼åä½ï¼mmï¼", position = 11) |
| | | private Double thickness; |
| | | |
| | | @ApiModelProperty(value = "é¢åçå¾ ID", position = 12) |
| | | private Integer temperingLayoutId; |
| | | |
| | | @ApiModelProperty(value = "é¢åçå¾çåºå·", position = 13) |
| | | private Integer temperingFeedSequence; |
| | | |
| | | @ApiModelProperty(value = "X åæ ", position = 14) |
| | | private Integer xCoordinate; |
| | | |
| | | @ApiModelProperty(value = "Y åæ ", position = 15) |
| | | private Integer yCoordinate; |
| | | |
| | | @ApiModelProperty(value = "ç»çç¶æ", position = 16) |
| | | private Integer state; |
| | | |
| | | @ApiModelProperty(value = "ç»çé´é", position = 17) |
| | | private Integer gap; |
| | | |
| | | @ApiModelProperty(value = "å·¥ç¨å· ID", position = 18) |
| | | private String engineerId; |
| | | |
| | | @ApiModelProperty(value = "å±å·", position = 19) |
| | | private Integer totalLayer; |
| | | |
| | | @ApiModelProperty(value = "å±å·", position = 20) |
| | | private Integer layer; |
| | | |
| | | @ApiModelProperty(value = "å建æ¶é´", position = 21) |
| | | private Date createTime; |
| | | |
| | | @ApiModelProperty(value = "æ´æ°æ¶é´", position = 22) |
| | | private Date updateTime; |
| | | |
| | | @ApiModelProperty(value = "èç³» ID", position = 23) |
| | | private String filmsId; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦æè½¬ï¼è§åº¦ï¼åä½ï¼åº¦ï¼", position = 24) |
| | | private Integer angle; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å·²é¢å", position = 25) |
| | | private Integer isTemp; |
| | | |
| | | @ApiModelProperty(value = "ä¸ç©ºé¡ºåº", position = 26) |
| | | private Integer hollowSequence; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦é
对", position = 27) |
| | | private Integer isPair; |
| | | |
| | | @ApiModelProperty(value = "ç»å·", position = 28) |
| | | private Integer virtualSlot; |
| | | |
| | | @ApiModelProperty(value = "ç»åº", position = 29) |
| | | private Integer slotSequence; |
| | | |
| | | @ApiModelProperty(value = "è½æ¶é¡ºåº", position = 30) |
| | | private Integer shelfOrder; |
| | | |
| | | } |
| | |
| | | import com.mes.base.entity.vo.BigStorageVO; |
| | | import com.mes.bigstorage.entity.BigStorageCageDetails; |
| | | import com.mes.bigstorage.entity.dto.*; |
| | | import com.mes.bigstorage.entity.request.BigCageDetailsRequest; |
| | | import com.mes.bigstorage.entity.vo.BigStorageQueryVO; |
| | | import com.mes.bigstorage.entity.vo.BigCageDetailsVO; |
| | | import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | |
| | | BigStorageSlotDTO queryNeedDispatchSlotBySequence(); |
| | | |
| | | List<TemperingGlassCountDTO> queryTemperingGlassCountSummary(int isTempering); |
| | | |
| | | /** |
| | | * ï¼åè¡¨ï¼æå表ç
§æ¥è¯¢æ¡ä»¶ï¼è®¾å¤idãæµç¨å¡ãèç³»ï¼è·å设å¤å¯¹åºç笼åç»çä¿¡æ¯ |
| | | * |
| | | * @param request |
| | | * @return |
| | | */ |
| | | List<BigCageDetailsVO> queryVerticalSheetCageDetailsList(BigCageDetailsRequest request); |
| | | } |
| | |
| | | import com.mes.base.entity.vo.BigStorageVO; |
| | | import com.mes.bigstorage.entity.BigStorageCageDetails; |
| | | import com.mes.bigstorage.entity.dto.*; |
| | | import com.mes.bigstorage.entity.request.BigCageDetailsRequest; |
| | | import com.mes.bigstorage.entity.vo.BigStorageQueryVO; |
| | | import com.mes.bigstorage.entity.vo.BigCageDetailsVO; |
| | | import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO; |
| | | import com.mes.glassinfo.entity.GlassInfo; |
| | | import com.mes.pp.entity.OptimizeProject; |
| | |
| | | * @return OptimizeProject é¢åæäº§é¡ºåº |
| | | */ |
| | | List<OptimizeProject> queryTemperingOrder(); |
| | | |
| | | List<BigCageDetailsVO> queryVerticalSheetCageDetailsList(BigCageDetailsRequest request); |
| | | } |
| | |
| | | import com.mes.bigstorage.entity.BigStorageCage; |
| | | import com.mes.bigstorage.entity.BigStorageCageDetails; |
| | | import com.mes.bigstorage.entity.dto.*; |
| | | import com.mes.bigstorage.entity.request.BigCageDetailsRequest; |
| | | import com.mes.bigstorage.entity.vo.BigStorageQueryVO; |
| | | import com.mes.bigstorage.entity.vo.BigCageDetailsVO; |
| | | import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper; |
| | | import com.mes.bigstorage.service.BigStorageCageDetailsService; |
| | | import com.mes.bigstorage.service.BigStorageCageService; |
| | |
| | | } |
| | | return resultList; |
| | | } |
| | | |
| | | @Override |
| | | public List<BigCageDetailsVO> queryVerticalSheetCageDetailsList(BigCageDetailsRequest request) { |
| | | return baseMapper.queryVerticalSheetCageDetailsList(request); |
| | | } |
| | | } |
| | |
| | | import cn.hutool.core.lang.Assert; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.mes.alarm.entity.ProductAlarmInfo; |
| | | import com.mes.alarm.service.ProductAlarmInfoService; |
| | | import com.mes.bigstorage.entity.BigStorageCage; |
| | | import com.mes.bigstorage.entity.BigStorageCageDetails; |
| | | import com.mes.bigstorage.entity.BigStorageGlassInfo; |
| | |
| | | BigStorageGlassRelationInfoService bigStorageGlassRelationInfoService; |
| | | @Resource |
| | | SysConfigService sysConfigService; |
| | | @Resource |
| | | private ProductAlarmInfoService productAlarmInfoService; |
| | | |
| | | private static final String ALARM_MODULE = "é¢å"; |
| | | private static final String ALARM_TYPE = "é¢å大çç"; |
| | | private static final String ALARM_CODE_SIZE = "sizeSame"; |
| | | private static final String ALARM_CODE_ID = "idSame"; |
| | | private static final String ALARM_CODE_SLOT = "slotLess"; |
| | | private static final String ALARM_CODE_OVER = "overSize"; |
| | | // @Value("${mes.slotWidth}") |
| | | // private Integer slotWidth; |
| | | // @Value("${mes.glassGap}") |
| | |
| | | } else { |
| | | BigStorageCage bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>() |
| | | .eq(BigStorageCage::getEnableState, Const.SLOT_ON).eq(BigStorageCage::getSlot, beforeGlass.getSlot())); |
| | | if (bigStorageCage == null) { |
| | | ProductAlarmInfo alarmInfo = new ProductAlarmInfo(); |
| | | alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW); |
| | | alarmInfo.setAlarmModule(ALARM_MODULE); |
| | | alarmInfo.setAlarmType(ALARM_TYPE); |
| | | alarmInfo.setAlarmCode(ALARM_CODE_SLOT); |
| | | alarmInfo.setAlarmMessage(""); |
| | | productAlarmInfoService.save(alarmInfo); |
| | | } |
| | | Assert.isTrue(null != bigStorageCage, "没æç©ºä½ç笼ååæ¾ç»ç"); |
| | | storageCageDTO = new BigStorageDTO(); |
| | | storageCageDTO.setWidth(bigStorageCage.getRemainWidth()); |
| | |
| | | private static final String ALARM_TYPE = "é¢å大çç"; |
| | | private static final String ALARM_CODE_SIZE = "sizeSame"; |
| | | private static final String ALARM_CODE_ID = "idSame"; |
| | | private static final String ALARM_CODE_SLOT = "slotLess"; |
| | | private static final String ALARM_CODE_OVER = "overSize"; |
| | | |
| | | @Resource |
| | | private RedisUtil redisUtil; |
| | |
| | | .ge(BigStorageCage::getMaxThickness, entry.getKey())); |
| | | if (count < entry.getValue()) { |
| | | log.info("笼å
æ ¼åå©ä½æ°éä¸è¶³ï¼ç»ææ¬æ¬¡è¿ç"); |
| | | ProductAlarmInfo alarmInfo = new ProductAlarmInfo(); |
| | | alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW); |
| | | alarmInfo.setAlarmModule(ALARM_MODULE); |
| | | alarmInfo.setAlarmType(ALARM_TYPE); |
| | | alarmInfo.setAlarmCode(ALARM_CODE_SLOT); |
| | | alarmInfo.setAlarmMessage(count + ""); |
| | | productAlarmInfoService.save(alarmInfo); |
| | | //åplcå鿥è¦:笼å
æ ¼åå©ä½æ°éä¸è¶³ |
| | | // miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.alarmSignal", 16)); |
| | | s7DataDLPOne = new S7DataDLPOne(); |
| | |
| | | .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); |
| | | if (count > 0) { |
| | | log.info("ç´éçå°åå¨ç»çï¼ç»ææ¬æ¬¡è¿ç"); |
| | | ProductAlarmInfo alarmInfo = new ProductAlarmInfo(); |
| | | alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW); |
| | | alarmInfo.setAlarmModule(ALARM_MODULE); |
| | | alarmInfo.setAlarmType(ALARM_TYPE); |
| | | alarmInfo.setAlarmCode(ALARM_CODE_OVER); |
| | | alarmInfo.setAlarmMessage(""); |
| | | productAlarmInfoService.save(alarmInfo); |
| | | //åplcå鿥è¦:ç´éçå°åå¨ç»çï¼æ æ³ç»§ç»ç´é |
| | | // miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.alarmSignal", 64)); |
| | | s7DataDLPOne = new S7DataDLPOne(); |
| | |
| | | WHERE ENGINEER_ID = #{engineerId} |
| | | AND TEMPERING_LAYOUT_ID = #{temperingLayoutId} |
| | | GROUP BY ENGINEER_ID, |
| | | TEMPERING_LAYOUT_ID) T1 |
| | | TEMPERING_LAYOUT_ID) T1 |
| | | ON T.ENGINEER_ID = T1.ENGINEER_ID |
| | | AND T.TEMPERING_LAYOUT_ID = T1.TEMPERING_LAYOUT_ID |
| | | AND T.COUNT = T1.COUNT |
| | |
| | | T.TEMPERING_LAYOUT_ID, |
| | | COUNT(T.TEMPERING_FEED_SEQUENCE) AS COUNT |
| | | FROM GLASS_INFO T |
| | | LEFT JOIN DAMAGE T1 |
| | | ON T.ENGINEER_ID = T1.ENGINEER_ID |
| | | AND T.GLASS_ID = T1.GLASS_ID |
| | | AND (T1.TYPE = 8 |
| | | OR T1.TYPE = 9) |
| | | LEFT JOIN DAMAGE T1 |
| | | ON T.ENGINEER_ID = T1.ENGINEER_ID |
| | | AND T.GLASS_ID = T1.GLASS_ID |
| | | AND (T1.TYPE = 8 |
| | | OR T1.TYPE = 9) |
| | | WHERE T1.GLASS_ID IS NULL |
| | | GROUP BY T.ENGINEER_ID, |
| | | T.TEMPERING_LAYOUT_ID |
| | | T.TEMPERING_LAYOUT_ID |
| | | ) T2 |
| | | INNER JOIN (SELECT ENGINEER_ID, TEMPERING_LAYOUT_ID, COUNT(TEMPERING_FEED_SEQUENCE) AS COUNT |
| | | FROM BIG_STORAGE_CAGE_DETAILS |
| | |
| | | |
| | | <select id="queryIsAllNeedDispatchVirtualSlot" resultMap="virtualSlotSequenceDTO"> |
| | | with relation_temp as ( |
| | | select engineer_id, tempering_layout_id, virtual_slot, count(1) as slot_count |
| | | from big_storage_glass_relation_info |
| | | group by engineer_id, tempering_layout_id, virtual_slot |
| | | select engineer_id, tempering_layout_id, virtual_slot, count(1) as slot_count |
| | | from big_storage_glass_relation_info |
| | | group by engineer_id, tempering_layout_id, virtual_slot |
| | | ), |
| | | details_temp as ( |
| | | select t.engineer_id, t.tempering_layout_id, t.virtual_slot, count(1) as slot_count |
| | | from big_storage_glass_relation_info t |
| | | left join big_storage_cage_details t1 on |
| | | t.engineer_id = t1.engineer_id and t.tempering_layout_id = t1.tempering_layout_id and |
| | | t.tempering_feed_sequence = t1.tempering_feed_sequence |
| | | where t1.state = 100 |
| | | details_temp as ( |
| | | select t.engineer_id, t.tempering_layout_id, t.virtual_slot, count(1) as slot_count |
| | | from big_storage_glass_relation_info t |
| | | left join big_storage_cage_details t1 on |
| | | t.engineer_id = t1.engineer_id and t.tempering_layout_id = t1.tempering_layout_id and |
| | | t.tempering_feed_sequence = t1.tempering_feed_sequence |
| | | where t1.state = 100 |
| | | AND T1.DEVICE_ID IN |
| | | <foreach collection="deviceIdList" item="item" open='(' close=')' separator=','> |
| | | #{item} |
| | | </foreach> |
| | | group by t.engineer_id, t.tempering_layout_id, t.virtual_slot |
| | | ), |
| | | result_one as ( |
| | | select t.*, t1.slot_count as tslot_count |
| | | from relation_temp t |
| | | INNER JOIN details_temp t1 on t.engineer_id = t1.engineer_id and |
| | | t.tempering_layout_id = t1.tempering_layout_id and |
| | | t.virtual_slot = t1.virtual_slot |
| | | where t.slot_count = t1.slot_count |
| | | ) |
| | | group by t.engineer_id, t.tempering_layout_id, t.virtual_slot |
| | | ), |
| | | result_one as ( |
| | | select t.*, t1.slot_count as tslot_count |
| | | from relation_temp t |
| | | INNER JOIN details_temp t1 on t.engineer_id = t1.engineer_id and |
| | | t.tempering_layout_id = t1.tempering_layout_id and |
| | | t.virtual_slot = t1.virtual_slot |
| | | where t.slot_count = t1.slot_count |
| | | ) |
| | | select engineer_id, tempering_layout_id, virtual_slot |
| | | from result_one |
| | | order by engineer_id, tempering_layout_id |
| | |
| | | <select id="querybigStorageCageDetail" resultType="com.mes.base.entity.vo.BigStorageVO"> |
| | | select bsc.device_id, bsc.slot, count(bscd.glass_id) as count |
| | | from big_storage_cage bsc |
| | | left join big_storage_cage_details bscd |
| | | on bsc.slot = bscd.slot and bscd.state in (100, 102, 103, 104) |
| | | left join big_storage_cage_details bscd |
| | | on bsc.slot = bscd.slot and bscd.state in (100, 102, 103, 104) |
| | | group by bsc.device_id, bsc.slot |
| | | order by bsc.device_id, bsc.slot |
| | | </select> |
| | | <select id="queryNeedDispatch" resultType="com.mes.bigstorage.entity.BigStorageCageDetails"> |
| | | SELECT * FROM big_storage_cage_details WHERE STATE = 100 AND SLOT = (SELECT SLOT FROM big_storage_cage_details WHERE STATE = 100 AND sequence = 1 order by slot desc LIMIT 1) ORDER BY tempering_feed_sequence |
| | | SELECT * |
| | | FROM big_storage_cage_details |
| | | WHERE STATE = 100 |
| | | AND SLOT = |
| | | (SELECT SLOT FROM big_storage_cage_details WHERE STATE = 100 AND sequence = 1 order by slot desc LIMIT 1) |
| | | ORDER BY tempering_feed_sequence |
| | | </select> |
| | | |
| | | <select id="queryNeedDispatchSlotBySequence" resultType="com.mes.bigstorage.entity.dto.BigStorageSlotDTO"> |
| | | with glass_temp as ( |
| | | select t.* ,t1.virtual_slot,t1.slot_sequence from big_storage_cage_details t inner join |
| | | big_storage_glass_relation_info t1 on t.engineer_id = t1.engineer_id |
| | | and t.tempering_layout_id = t1.tempering_layout_id |
| | | and t.tempering_feed_sequence = t1.tempering_feed_sequence where t.state = 100 |
| | | ),slot_max_temp as ( |
| | | select ROW_NUMBER()over(PARTITION by engineer_id, tempering_layout_id, virtual_slot order by slot_sequence desc) |
| | | as rn,t.* from glass_temp t where t.device_id in (5,6) |
| | | ) ,slot_max_message as (select * from slot_max_temp where rn =1) |
| | | ,slot_min_temp as ( |
| | | select ROW_NUMBER()over(PARTITION by engineer_id, tempering_layout_id, virtual_slot order by slot_sequence) as |
| | | rn,t.* from glass_temp t where t.device_id in (5,6) |
| | | ) ,slot_min_message as (select * from slot_min_temp where rn =1) |
| | | ,result as ( |
| | | select t.slot as target_slot ,t1.slot as start_slot from slot_max_message t inner join slot_min_message t1 on |
| | | t.engineer_id = t1.engineer_id and t.tempering_layout_id = t1.tempering_layout_id and t.virtual_slot = |
| | | t1.virtual_slot and t.tempering_layout_id = t1.tempering_layout_id and t.tempering_feed_sequence = |
| | | t1.tempering_feed_sequence -1 |
| | | )select * from result limit 1 |
| | | select t.*, t1.virtual_slot, t1.slot_sequence |
| | | from big_storage_cage_details t |
| | | inner join |
| | | big_storage_glass_relation_info t1 on t.engineer_id = t1.engineer_id |
| | | and t.tempering_layout_id = t1.tempering_layout_id |
| | | and t.tempering_feed_sequence = t1.tempering_feed_sequence |
| | | where t.state = 100 |
| | | ) |
| | | , slot_max_temp as ( |
| | | select ROW_NUMBER() over(PARTITION by engineer_id, tempering_layout_id, virtual_slot order by slot_sequence desc) |
| | | as rn,t.* |
| | | from glass_temp t |
| | | where t.device_id in (5, 6) |
| | | ) |
| | | , slot_max_message as (select * from slot_max_temp where rn = 1) |
| | | , slot_min_temp as ( |
| | | select ROW_NUMBER() over(PARTITION by engineer_id, tempering_layout_id, virtual_slot order by slot_sequence) as |
| | | rn,t.* |
| | | from glass_temp t |
| | | where t.device_id in (5, 6) |
| | | ) |
| | | , slot_min_message as (select * from slot_min_temp where rn = 1) |
| | | , result as ( |
| | | select t.slot as target_slot, t1.slot as start_slot |
| | | from slot_max_message t |
| | | inner join slot_min_message t1 on |
| | | t.engineer_id = t1.engineer_id and t.tempering_layout_id = t1.tempering_layout_id and |
| | | t.virtual_slot = |
| | | t1.virtual_slot and t.tempering_layout_id = t1.tempering_layout_id and t.tempering_feed_sequence = |
| | | t1.tempering_feed_sequence - 1 |
| | | ) |
| | | select * |
| | | from result limit 1 |
| | | </select> |
| | | <select id="queryTemperingGlassCountSummary" resultMap="temperingGlassCount"> |
| | | with glass_info_temp as ( |
| | |
| | | from secondary_summary |
| | | order by engineer_id, films_id, thickness |
| | | </select> |
| | | <select id="queryVerticalSheetCageDetailsList" |
| | | resultType="com.mes.bigstorage.entity.vo.BigCageDetailsVO"> |
| | | SELECT t.id,t.device_id,t.slot,t.remain_width ,t.enable_state,t1.engineer_id, |
| | | t1.id as detail_id,t1.device_id as detail_device_id ,t1.slot as |
| | | detail_slot,t1.engineer_id,t1.glass_id,t1.tempering_layout_id,t1.tempering_feed_sequence, |
| | | t1.flow_card_id,t1.layer,t1.width,t1.height,t1.thickness,t1.films_id |
| | | FROM big_storage_cage t |
| | | left join big_storage_cage_details t1 on t.slot = t1.slot |
| | | and t1.state in (100, 102, 103, 104) |
| | | <if test="filmsId != null and filmsId != ''"> |
| | | and t1.films_id like CONCAT('%', #{filmsId}, '%') |
| | | </if> |
| | | <if test="flowCardId != null and flowCardId != ''"> |
| | | and t1.flow_card_id like CONCAT('%', #{flowCardId}, '%') |
| | | </if> |
| | | <if test="engineerId != null and engineerId != ''"> |
| | | and t1.engineer_id like CONCAT('%', #{engineerId}, '%') |
| | | </if> |
| | | <if test="glassId != null and glassId != ''"> |
| | | and t1.glass_id like CONCAT('%', #{glassId}, '%') |
| | | </if> |
| | | <if test="thickness != -1"> |
| | | and t1.thickness = #{thickness} |
| | | </if> |
| | | order by t.slot |
| | | </select> |
| | | </mapper> |
| | |
| | | import com.mes.glassinfo.service.GlassInfoService;
|
| | | import com.mes.tools.DateUtil;
|
| | | import com.mes.tools.WebSocketServer;
|
| | | import com.mes.tools.WebSocketUtils;
|
| | | import com.mes.utils.RedisUtil;
|
| | | import lombok.extern.slf4j.Slf4j;
|
| | | import org.apache.commons.lang.StringUtils;
|
| | |
| | | import org.springframework.scheduling.annotation.Scheduled;
|
| | | import org.springframework.stereotype.Component;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | | import java.io.BufferedReader;
|
| | | import java.io.InputStreamReader;
|
| | | import java.net.Socket;
|
| | |
| | | private DownGlassTaskService downGlassTaskService;
|
| | | @Autowired
|
| | | private GlassInfoService glassInfoService;
|
| | | @Resource
|
| | | private WebSocketUtils webSocketUtils;
|
| | |
|
| | | @Value("${mes.scan.ip}")
|
| | | private String scanIp;
|
| | |
| | | List<DownWorkstation> data = downWorkstationService.list();
|
| | | jsonObject.append("params", data);
|
| | | log.info(jsonObject.toString());
|
| | | ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unloadglass");
|
| | | if (sendwServer != null) {
|
| | | for (WebSocketServer webserver : sendwServer) {
|
| | | if (webserver != null && webserver.session.isOpen()) {
|
| | | log.info("å·²åé");
|
| | | webserver.sendMessage(jsonObject.toString());
|
| | | }
|
| | | }
|
| | | }
|
| | | webSocketUtils.sendToWeb("unloadglass", jsonObject);
|
| | |
|
| | | }
|
| | |
|
| | | @Scheduled(fixedDelay = 1000)
|
| | |
| | | List<Map<String, Object>> glassinfodata = downWorkstationService.getTotalGlassDimensionsByWorkstation(1, 3);
|
| | | jsonObject2.append("glassinfo", glassinfodata);
|
| | | log.info(jsonObject2.toString());
|
| | | ArrayList<WebSocketServer> sendwServer2 = WebSocketServer.sessionMap.get("unloadglass2");
|
| | | if (sendwServer2 != null) {
|
| | | for (WebSocketServer webserver : sendwServer2) {
|
| | | if (webserver != null && webserver.session.isOpen()) {
|
| | | webserver.sendMessage(jsonObject2.toString());
|
| | | }
|
| | | }
|
| | | }
|
| | | webSocketUtils.sendToWeb("unloadglass2", jsonObject2);
|
| | | }
|
| | |
|
| | | @Scheduled(fixedDelay = 1000)
|
| | |
| | | List<Map<String, Object>> glassinfodata2 = downWorkstationService.getTotalGlassDimensionsByWorkstation(4, 6);
|
| | | jsonObject3.append("glassinfo2", glassinfodata2);
|
| | | log.info(jsonObject3.toString());
|
| | | ArrayList<WebSocketServer> sendwServer3 = WebSocketServer.sessionMap.get("unloadglass3");
|
| | | if (sendwServer3 != null) {
|
| | | for (WebSocketServer webserver : sendwServer3) {
|
| | | if (webserver != null && webserver.session.isOpen()) {
|
| | | webserver.sendMessage(jsonObject3.toString());
|
| | | }
|
| | | }
|
| | | }
|
| | | webSocketUtils.sendToWeb("unloadglass3", jsonObject3);
|
| | | }
|
| | |
|
| | | @Scheduled(fixedDelay = 2000)
|
| | |
| | | List<Map<String, Object>> list = downStorageCageService.selectDownStorageCages();
|
| | | jsonObject4.append("params2", list);
|
| | | log.info(jsonObject4.toString());
|
| | | ArrayList<WebSocketServer> sendwServer4 = WebSocketServer.sessionMap.get("downcache");
|
| | | if (sendwServer4 != null) {
|
| | | for (WebSocketServer webserver : sendwServer4) {
|
| | | if (webserver != null && webserver.session.isOpen()) {
|
| | | webserver.sendMessage(jsonObject4.toString());
|
| | | }
|
| | | }
|
| | | }
|
| | | webSocketUtils.sendToWeb("downcache", jsonObject4);
|
| | | }
|
| | |
|
| | | @Scheduled(fixedDelay = 2000)
|
| | |
| | | .lt("task_status", Const.UNLOAD_GLASS_DOWN)
|
| | | .orderByAsc("id")
|
| | | );
|
| | | if(takeGlass!=null){
|
| | | if (takeGlass != null) {
|
| | | jsonObject4.append("takeGlass", takeGlass);
|
| | | }
|
| | |
|
| | | ArrayList<WebSocketServer> sendwServer4 = WebSocketServer.sessionMap.get("unloadglass");
|
| | | if (sendwServer4 != null) {
|
| | | for (WebSocketServer webserver : sendwServer4) {
|
| | | if (webserver != null && webserver.session.isOpen()) {
|
| | | webserver.sendMessage(jsonObject4.toString());
|
| | | }
|
| | | }
|
| | | }
|
| | | webSocketUtils.sendToWeb("unloadglass", jsonObject4);
|
| | | }
|
| | |
|
| | | @Scheduled(fixedDelay = 1000)
|
| | |
| | | jsonObject.append("downWorkstation", downWorkstation);
|
| | | List<DownGlassTask> downGlassTask = downGlassTaskService.selectOutTaskCache();
|
| | | jsonObject.append("downGlassTask", downGlassTask);
|
| | | ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unLoadGlassIsRun");
|
| | | if (sendwServer != null) {
|
| | | for (WebSocketServer webserver : sendwServer) {
|
| | | if (webserver != null) {
|
| | | webserver.sendMessage(jsonObject.toString());
|
| | | } else {
|
| | | log.info("unLoadGlassIsRun is closed");
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | webSocketUtils.sendToWeb("unLoadGlassIsRun", jsonObject);
|
| | | }
|
| | |
|
| | | @Scheduled(fixedDelay = Long.MAX_VALUE)
|
| | |
| | | log.info("çå¾
æ«ç ä¸......");
|
| | | String glassId = in.readLine();
|
| | | log.info("æ«æå°çç»çidï¼{}", glassId);
|
| | | List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("unloadglass");
|
| | | if (CollectionUtils.isNotEmpty(sendwServer)) {
|
| | | //æç
§ç»çidè·åç»çä¿¡æ¯è¿åç»å端çé¢ï¼å
·ä½éè¦åªäºæ°æ®å¾
确认
|
| | | GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
|
| | | .eq(GlassInfo::getGlassId, glassId).last("limit 1"));
|
| | | if (null == glassInfo) {
|
| | | log.info("æç
§ç»çidï¼{}ï¼æ æ³æ¾å°ç»çä¿¡æ¯", glassId);
|
| | | } else {
|
| | | for (WebSocketServer webserver : sendwServer) {
|
| | | jsonObject.append("scanGlass", glassInfo);
|
| | | webserver.sendMessage(jsonObject.toString());
|
| | | }
|
| | | }
|
| | | //æç
§ç»çidè·åç»çä¿¡æ¯è¿åç»å端çé¢ï¼å
·ä½éè¦åªäºæ°æ®å¾
确认
|
| | | GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
|
| | | .eq(GlassInfo::getGlassId, glassId).last("limit 1"));
|
| | | if (null == glassInfo) {
|
| | | log.info("æç
§ç»çidï¼{}ï¼æ æ³æ¾å°ç»çä¿¡æ¯", glassId);
|
| | | return;
|
| | | }
|
| | | webSocketUtils.sendToWeb("scanGlass", glassInfo);
|
| | | } catch (Exception exception) {
|
| | | log.info("读åå¼å¸¸ï¼åå 为{}", exception.getMessage());
|
| | | }
|
| | |
| | | |
| | | import com.mes.hollow.entity.HollowBigStorageCageDetails; |
| | | import com.mes.hollow.entity.dto.HollowBigStorageAndDetailsDTO; |
| | | import com.mes.hollow.entity.request.HollowBigCageDetailsRequest; |
| | | import com.mes.hollow.entity.vo.HollowBigCageDetailsVO; |
| | | import com.mes.hollow.service.HollowBigStorageCageDetailsService; |
| | | import com.mes.utils.Result; |
| | | import io.swagger.annotations.Api; |
| | |
| | | return Result.build(200, "å¯ç¨/ç¦ç¨æå", 1); |
| | | } |
| | | |
| | | @ApiOperation("ï¼åè¡¨ï¼æå表ç
§æ¥è¯¢æ¡ä»¶ï¼è®¾å¤idãæµç¨å¡ãèç³»ï¼è·å设å¤å¯¹åºç笼åç»çä¿¡æ¯") |
| | | @PostMapping("/queryVerticalSheetCageDetailsList") |
| | | public Result<List<HollowBigCageDetailsVO>> queryVerticalSheetCageDetailsList(@RequestBody HollowBigCageDetailsRequest request) { |
| | | return Result.build(200, "æ¥è¯¢æå", hollowBigStorageCageDetailsService.queryVerticalSheetCageDetailsList(request)); |
| | | } |
| | | } |
| | | |
| New file |
| | |
| | | package com.mes.hollow.entity.request; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.mes.base.entity.PageRequest; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @Author : zhoush |
| | | * @Date: 2025/9/4 17:04 |
| | | * @Description: |
| | | */ |
| | | @Data |
| | | public class HollowBigCageDetailsRequest extends PageRequest { |
| | | |
| | | @ApiModelProperty(value = "设å¤id", position = 1) |
| | | private Integer deviceId; |
| | | |
| | | @ApiModelProperty(value = "æ ¼åå·", position = 2) |
| | | private Integer slot; |
| | | |
| | | @ApiModelProperty(value = "æµç¨å¡", position = 3) |
| | | private String flowCardId; |
| | | |
| | | @ApiModelProperty(value = "èç³»", position = 4) |
| | | private String filmsId; |
| | | |
| | | @ApiModelProperty(value = "å度", position = 5) |
| | | private int thickness; |
| | | |
| | | @ApiModelProperty(value = "é¢åçå¾id", position = 6) |
| | | private String engineerId; |
| | | |
| | | @ApiModelProperty(value = "ç»çid", position = 7) |
| | | private String glassId; |
| | | |
| | | @ApiModelProperty(value = "ç»çæ¥å·¥ç¶æï¼8ç ´æ 9æ¿èµ° è°ç¨æ´æ°ç¶æ/ç ´ææ¿èµ°æ¥å£å¿
å¡«", position = 8) |
| | | private String state; |
| | | |
| | | @ApiModelProperty(value = "å¼å§æ¶é´") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date startTime; |
| | | |
| | | @ApiModelProperty(value = "ç»ææ¶é´") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
| | | private Date endTime; |
| | | } |
| New file |
| | |
| | | package com.mes.hollow.entity.vo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.mes.hollow.entity.HollowBigStorageCage; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * @Author : zhoush |
| | | * @Date: 2025/9/4 17:02 |
| | | * @Description: |
| | | */ |
| | | @Data |
| | | public class HollowBigCageDetailsVO extends HollowBigStorageCage { |
| | | |
| | | @ApiModelProperty(value = "大çç笼详æ
è¡¨ä¸»é® ID", position = 1) |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Long detailId; |
| | | |
| | | @ApiModelProperty(value = "è®¾å¤ ID", position = 2) |
| | | private Integer detailDeviceId; |
| | | |
| | | @ApiModelProperty(value = "æ
æ ¼å·", position = 3) |
| | | private Integer detailSlot; |
| | | |
| | | @ApiModelProperty(value = "ç»ç ID", position = 4) |
| | | private String glassId; |
| | | |
| | | @ApiModelProperty(value = "å°ç卿 ¼åå
ç顺åº", position = 5) |
| | | private Integer sequence; |
| | | |
| | | @ApiModelProperty(value = "æµç¨å¡å·", position = 6) |
| | | private String flowCardId; |
| | | |
| | | @ApiModelProperty(value = "æµç¨å¡è½æ¶ç¼ç ", position = 7) |
| | | private String flowCardSequence; |
| | | |
| | | @ApiModelProperty(value = "ç»çç±»å", position = 8) |
| | | private Integer glassType; |
| | | |
| | | @ApiModelProperty(value = "ç»ç宽度ï¼åä½ï¼mmï¼", position = 9) |
| | | private Double width; |
| | | |
| | | @ApiModelProperty(value = "ç»çé«åº¦ï¼åä½ï¼mmï¼", position = 10) |
| | | private Double height; |
| | | |
| | | @ApiModelProperty(value = "ç»çå度ï¼åä½ï¼mmï¼", position = 11) |
| | | private Double thickness; |
| | | |
| | | @ApiModelProperty(value = "é¢åçå¾ ID", position = 12) |
| | | private Integer temperingLayoutId; |
| | | |
| | | @ApiModelProperty(value = "é¢åçå¾çåºå·", position = 13) |
| | | private Integer temperingFeedSequence; |
| | | |
| | | @ApiModelProperty(value = "X åæ ", position = 14) |
| | | private Integer xCoordinate; |
| | | |
| | | @ApiModelProperty(value = "Y åæ ", position = 15) |
| | | private Integer yCoordinate; |
| | | |
| | | @ApiModelProperty(value = "ç»çç¶æ", position = 16) |
| | | private Integer state; |
| | | |
| | | @ApiModelProperty(value = "ç»çé´é", position = 17) |
| | | private Integer gap; |
| | | |
| | | @ApiModelProperty(value = "å·¥ç¨å· ID", position = 18) |
| | | private String engineerId; |
| | | |
| | | @ApiModelProperty(value = "å±å·", position = 19) |
| | | private Integer totalLayer; |
| | | |
| | | @ApiModelProperty(value = "å±å·", position = 20) |
| | | private Integer layer; |
| | | |
| | | @ApiModelProperty(value = "å建æ¶é´", position = 21) |
| | | private Date createTime; |
| | | |
| | | @ApiModelProperty(value = "æ´æ°æ¶é´", position = 22) |
| | | private Date updateTime; |
| | | |
| | | @ApiModelProperty(value = "èç³» ID", position = 23) |
| | | private String filmsId; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦æè½¬ï¼è§åº¦ï¼åä½ï¼åº¦ï¼", position = 24) |
| | | private Integer angle; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦å·²é¢å", position = 25) |
| | | private Integer isTemp; |
| | | |
| | | @ApiModelProperty(value = "ä¸ç©ºé¡ºåº", position = 26) |
| | | private Integer hollowSequence; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦é
对", position = 27) |
| | | private Integer isPair; |
| | | |
| | | @ApiModelProperty(value = "ç»å·", position = 28) |
| | | private Integer virtualSlot; |
| | | |
| | | @ApiModelProperty(value = "ç»åº", position = 29) |
| | | private Integer slotSequence; |
| | | |
| | | @ApiModelProperty(value = "è½æ¶é¡ºåº", position = 30) |
| | | private Integer shelfOrder; |
| | | |
| | | } |
| | |
| | | import com.mes.hollow.entity.dto.FlowCardGlassInfoDTO; |
| | | import com.mes.hollow.entity.dto.FlowCardVirtualSlotDTO; |
| | | import com.mes.hollow.entity.dto.UpdateHollowBigStorageCageDTO; |
| | | import com.mes.hollow.entity.request.HollowBigCageDetailsRequest; |
| | | import com.mes.hollow.entity.vo.HollowBigCageDetailsVO; |
| | | import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | |
| | | * @return |
| | | */ |
| | | List<FlowCardGlassInfoDTO> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query); |
| | | |
| | | List<HollowBigCageDetailsVO> queryVerticalSheetCageDetailsList(HollowBigCageDetailsRequest request); |
| | | } |
| | | |
| | |
| | | import com.mes.base.entity.vo.BigStorageVO; |
| | | import com.mes.hollow.entity.HollowBigStorageCageDetails; |
| | | import com.mes.hollow.entity.dto.*; |
| | | import com.mes.hollow.entity.request.HollowBigCageDetailsRequest; |
| | | import com.mes.hollow.entity.vo.HollowAllFlowCardVO; |
| | | import com.mes.hollow.entity.vo.HollowBigCageDetailsVO; |
| | | import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO; |
| | | |
| | | import java.util.List; |
| | |
| | | List<FlowCardVirtualSlotDTO> queryFlowCardIdsAndLayer(); |
| | | |
| | | List<FlowCardGlassInfoDTO> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query); |
| | | |
| | | List<HollowBigCageDetailsVO> queryVerticalSheetCageDetailsList(HollowBigCageDetailsRequest request); |
| | | } |
| | | |
| | |
| | | import com.mes.hollow.entity.HollowBigStorageCageDetails; |
| | | import com.mes.hollow.entity.HollowGlassRelationInfo; |
| | | import com.mes.hollow.entity.dto.*; |
| | | import com.mes.hollow.entity.request.HollowBigCageDetailsRequest; |
| | | import com.mes.hollow.entity.vo.HollowBigCageDetailsVO; |
| | | import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO; |
| | | import com.mes.hollow.mapper.HollowBigStorageCageDetailsMapper; |
| | | import com.mes.hollow.service.HollowBigStorageCageDetailsService; |
| | |
| | | return baseMapper.queryHollowAllFlowCard(query); |
| | | } |
| | | |
| | | @Override |
| | | public List<HollowBigCageDetailsVO> queryVerticalSheetCageDetailsList(HollowBigCageDetailsRequest request) { |
| | | return baseMapper.queryVerticalSheetCageDetailsList(request); |
| | | } |
| | | |
| | | private List<HollowBigStorageAndDetailsDTO> hollowBigStorageCageDetailsChild(String glassId, Integer deviceId, Integer slot, int state) { |
| | | //å°å¯¹åºæ ¼åå·çç»çid置为101 |
| | | this.update(new LambdaUpdateWrapper<HollowBigStorageCageDetails>() |
| | |
| | | private static final String ALARM_TYPE = "ä¸ç©ºå¤§çç"; |
| | | private static final String ALARM_CODE_SIZE = "sizeSame"; |
| | | private static final String ALARM_CODE_ID = "idSame"; |
| | | private static final String ALARM_CODE_SLOT = "slotLess"; |
| | | private static final String ALARM_CODE_OVER = "overSize"; |
| | | |
| | | /** |
| | | * ç´éæ ¼å |
| | |
| | | .ge(HollowBigStorageCage::getMaxThickness, entry.getKey())); |
| | | if (count < entry.getValue()) { |
| | | log.info("笼å
æ ¼åå©ä½æ°éä¸è¶³ï¼ç»ææ¬æ¬¡è¿ç"); |
| | | ProductAlarmInfo alarmInfo = new ProductAlarmInfo(); |
| | | alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW); |
| | | alarmInfo.setAlarmModule(ALARM_MODULE); |
| | | alarmInfo.setAlarmType(ALARM_TYPE); |
| | | alarmInfo.setAlarmCode(ALARM_CODE_SLOT); |
| | | alarmInfo.setAlarmMessage(count + ""); |
| | | productAlarmInfoService.save(alarmInfo); |
| | | //åplcå鿥è¦:笼å
æ ¼åå©ä½æ°éä¸è¶³ |
| | | s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setAlramSignal(16); |
| | |
| | | }); |
| | | } |
| | | |
| | | List<HollowGlassQueueInfo> infoList = unFinishHollowQueueList.stream().filter(e -> !(e.getSlot() > 500 && e.getSlot() < 900 && e.getIsPair() != 1)).collect(Collectors.toList()); |
| | | List<HollowGlassQueueInfo> infoList = unFinishHollowQueueList.stream().filter(e -> !(e.getSlot() >= 500 && e.getSlot() < 900 && e.getIsPair() != 1)).collect(Collectors.toList()); |
| | | log.info("ææ£å¨åºççä¸ç©ºä»»å¡"); |
| | | Integer isPair = infoList.get(0).getIsPair(); |
| | | hollowOutGlassByIsPair(infoList, hollowGlassOutRelationInfo.getCell(), isPair, hollowGlassOutRelationInfo.getTotalLayer(), hollowGlassOutRelationInfo.getIsForce()); |
| | |
| | | return; |
| | | } |
| | | if (StringUtils.isNotBlank(s7DataZKDLPOne.getId1())) { |
| | | log.info("å½ååå¨è¿çä»»å¡ï¼ç»æ"); |
| | | return; |
| | | } |
| | | if (StringUtils.isNotBlank(s7DataZKDLPOne.getId1())) { |
| | | log.info("å½ååå¨è¿çä»»å¡è¯·æ±ï¼ç»ææ¬æ¬¡å¤§ç¬¼åè°åº¦"); |
| | | return; |
| | | } |
| | |
| | | if (count > 0) { |
| | | return; |
| | | } |
| | | List<HollowBigStorageCageDetails> list = hollowBigStorageCageDetailsService.list(new LambdaQueryWrapper<HollowBigStorageCageDetails>() |
| | | .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | // .in(HollowBigStorageCageDetails::getDeviceId, 6) |
| | | .in(HollowBigStorageCageDetails::getGlassId, glassIdList)); |
| | | log.info("è·åè°åº¦ä»»å¡å表ï¼{}", list); |
| | | if (CollectionUtil.isEmpty(list)) { |
| | | HollowBigStorageCageDetails details = null; |
| | | for (String glassId : glassIdList) { |
| | | details = hollowBigStorageCageDetailsService.getOne(new LambdaQueryWrapper<HollowBigStorageCageDetails>() |
| | | .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .eq(HollowBigStorageCageDetails::getGlassId, glassId).last("limit 1")); |
| | | log.info("è·åè°åº¦ä»»å¡ï¼{}", details); |
| | | if (details != null) { |
| | | break; |
| | | } |
| | | } |
| | | if (details == null) { |
| | | return; |
| | | } |
| | | HollowBigStorageCageDetails details = list.get(0); |
| | | log.info("è·åéè¦è°åº¦ç忡任å¡ï¼{}", details); |
| | | //çæè¿è¿çå¤§è½¦ä»»å¡ |
| | | hollowBigStorageCageDetailsService.update(new LambdaUpdateWrapper<HollowBigStorageCageDetails>() |
| | |
| | | S7DataZKDLPOne s7DataZKDLPOne = new S7DataZKDLPOne(); |
| | | s7DataZKDLPOne.setAlramSignal(16); |
| | | s7SerializerZKDLPOne.write(s7DataZKDLPOne); |
| | | ProductAlarmInfo alarmInfo = new ProductAlarmInfo(); |
| | | alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW); |
| | | alarmInfo.setAlarmModule(ALARM_MODULE); |
| | | alarmInfo.setAlarmType(ALARM_TYPE); |
| | | alarmInfo.setAlarmCode(ALARM_CODE_SLOT); |
| | | alarmInfo.setAlarmMessage(""); |
| | | productAlarmInfoService.save(alarmInfo); |
| | | Assert.isFalse(storageCage == null, "ä»»å¡è°åº¦æ²¡æå¤ä½æ ¼åï¼ç»æè°åº¦ä»»å¡"); |
| | | } |
| | | |
| | |
| | | <select id="queryHollowbigStorageCageDetail" resultType="com.mes.base.entity.vo.BigStorageVO"> |
| | | select hbsc.device_id, hbsc.slot, count(hbscd.glass_id) as count |
| | | from hollow_big_storage_cage hbsc |
| | | left join hollow_big_storage_cage_details hbscd |
| | | on hbsc.slot = hbscd.slot and hbscd.state in (100, 102, 103, 104) |
| | | left join hollow_big_storage_cage_details hbscd |
| | | on hbsc.slot = hbscd.slot and hbscd.state in (100, 102, 103, 104) |
| | | group by hbsc.device_id, hbsc.slot |
| | | order by hbsc.device_id, hbsc.slot |
| | | </select> |
| | |
| | | AND films_id LIKE CONCAT( '%', #{filmsId}, '%') |
| | | </if> |
| | | <if test="thickness != 0"> |
| | | AND thickness = #{thickness} |
| | | AND thickness = #{thickness} |
| | | </if> |
| | | ), |
| | | hollow_details_temp AS ( |
| | |
| | | AND films_id LIKE CONCAT( '%', #{filmsId}, '%') |
| | | </if> |
| | | <if test="thickness != 0"> |
| | | AND thickness = #{thickness} |
| | | AND thickness = #{thickness} |
| | | </if> |
| | | ), |
| | | hollow_through_temp AS ( SELECT flow_card_id, MIN( hollow_sequence ) AS hollow_sequence, MAX( total_layer ) AS |
| | |
| | | ORDER BY |
| | | t.flow_card_id |
| | | </select> |
| | | <select id="queryVerticalSheetCageDetailsList" |
| | | resultType="com.mes.hollow.entity.vo.HollowBigCageDetailsVO"> |
| | | SELECT t.id,t.device_id,t.slot,t.remain_width ,t.enable_state,t1.virtual_slot,total_layer,t1.engineer_id, |
| | | t1.id as detail_id,t1.device_id as detail_device_id ,t1.slot as |
| | | detail_slot,t1.engineer_id,t1.glass_id,t1.tempering_layout_id,t1.tempering_feed_sequence, |
| | | t1.flow_card_id,t1.layer,t1.width,t1.height,t1.thickness,t1.films_id |
| | | FROM hollow_big_storage_cage t |
| | | left join hollow_big_storage_cage_details t1 on t.slot = t1.slot |
| | | and t1.state in (100, 102, 103, 104) |
| | | <if test="filmsId != null and filmsId != ''"> |
| | | and t1.films_id like CONCAT('%', #{filmsId}, '%') |
| | | </if> |
| | | <if test="flowCardId != null and flowCardId != ''"> |
| | | and t1.flow_card_id like CONCAT('%', #{flowCardId}, '%') |
| | | </if> |
| | | <if test="engineerId != null and engineerId != ''"> |
| | | and t1.engineer_id like CONCAT('%', #{engineerId}, '%') |
| | | </if> |
| | | <if test="glassId != null and glassId != ''"> |
| | | and t1.glass_id like CONCAT('%', #{glassId}, '%') |
| | | </if> |
| | | <if test="thickness != -1"> |
| | | and t1.thickness = #{thickness} |
| | | </if> |
| | | order by t.slot |
| | | </select> |
| | | |
| | | |
| | | </mapper> |