From b21caa5499c50384f3a3a5dd795a7a0ad197d36f Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期四, 06 十一月 2025 21:26:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
UI-Project/src/views/User/alarmLog.vue | 170 +++++
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java | 4
UI-Project/src/views/Caching/cachingbefore.vue | 142 ++++
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java | 61 +
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java | 5
UI-Project/src/assets/ganghuaqian1.png | 0
UI-Project/src/assets/zhongkong1.png | 0
UI-Project/src/views/Caching/cachingun.vue | 139 ++++
UI-Project/src/views/hollow/hollowslicecage.vue | 223 +++---
UI-Project/src/views/Returns/upreturns2.vue | 21
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java | 7
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigCageDetailsVO.java | 110 +++
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java | 23
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java | 4
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml | 142 +++-
UI-Project/src/lang/en.js | 4
UI-Project/src/lang/py.js | 4
UI-Project/src/lang/zh.js | 9
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java | 7
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java | 8
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java | 85 --
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageGlassInfoServiceImpl.java | 20
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/vo/BigCageDetailsVO.java | 110 +++
UI-Project/src/assets/zhongkong.png | 0
UI-Project/src/views/Returns/upreturns.vue | 17
UI-Project/src/views/Slicecage/slicecage.vue | 267 +++++---
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java | 2
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/request/HollowBigCageDetailsRequest.java | 52 +
UI-Project/src/assets/ganghuaqian.png | 0
UI-Project/src/assets/微信图片_20251104132805_3454_72.jpg | 0
UI-Project/src/router/index.js | 5
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java | 16
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java | 40 +
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml | 34
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/request/BigCageDetailsRequest.java | 52 +
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java | 10
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageDetailsController.java | 7
UI-Project/src/lang/kr.js | 4
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java | 4
39 files changed, 1,467 insertions(+), 341 deletions(-)
diff --git a/UI-Project/src/assets/ganghuaqian.png b/UI-Project/src/assets/ganghuaqian.png
index 818b191..54d6ccc 100644
--- a/UI-Project/src/assets/ganghuaqian.png
+++ b/UI-Project/src/assets/ganghuaqian.png
Binary files differ
diff --git a/UI-Project/src/assets/ganghuaqian1.png b/UI-Project/src/assets/ganghuaqian1.png
new file mode 100644
index 0000000..818b191
--- /dev/null
+++ b/UI-Project/src/assets/ganghuaqian1.png
Binary files differ
diff --git a/UI-Project/src/assets/zhongkong.png b/UI-Project/src/assets/zhongkong.png
index 359c5a0..d5a8ef6 100644
--- a/UI-Project/src/assets/zhongkong.png
+++ b/UI-Project/src/assets/zhongkong.png
Binary files differ
diff --git a/UI-Project/src/assets/zhongkong1.png b/UI-Project/src/assets/zhongkong1.png
new file mode 100644
index 0000000..359c5a0
--- /dev/null
+++ b/UI-Project/src/assets/zhongkong1.png
Binary files differ
diff --git "a/UI-Project/src/assets/\345\276\256\344\277\241\345\233\276\347\211\207_20251104132805_3454_72.jpg" "b/UI-Project/src/assets/\345\276\256\344\277\241\345\233\276\347\211\207_20251104132805_3454_72.jpg"
new file mode 100644
index 0000000..a56be0c
--- /dev/null
+++ "b/UI-Project/src/assets/\345\276\256\344\277\241\345\233\276\347\211\207_20251104132805_3454_72.jpg"
Binary files differ
diff --git a/UI-Project/src/lang/en.js b/UI-Project/src/lang/en.js
index 20dfcf7..b8d5f71 100644
--- a/UI-Project/src/lang/en.js
+++ b/UI-Project/src/lang/en.js
@@ -36,6 +36,7 @@
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锛�',
@@ -811,6 +812,9 @@
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锛�',
diff --git a/UI-Project/src/lang/kr.js b/UI-Project/src/lang/kr.js
index 6eb2e94..b661dab 100644
--- a/UI-Project/src/lang/kr.js
+++ b/UI-Project/src/lang/kr.js
@@ -36,6 +36,7 @@
basicData:{
untask:'鞛戩梾 鞐嗢潓',
tonumber:'齑� 鞓來檾 靾�',
+ sectionUpperSuccessful:'靸侂秬 臁办瀾 靹标车锛�',
finishnumber:'鞕勲霅� 靾橂焿',
rackreset:'靿橅攧 鞛劋鞝�',
prackreset:'靿橅攧臧� 鞛劋鞝曤悩電旍 鞐秬锛�',
@@ -812,6 +813,9 @@
content:'雮挫毄',
idSame:'歆勳瀰 鞛戩梾 鞙犽Μ ID臧� 霃欖澕頃╇媹雼�.',
sizeSame:'鞖半Μ 鞎堨棎 霃欖澕頃� 攴滉博鞚� 鞙犽Μ臧� 臁挫灛頃╇媹雼�.',
+ slotLess:'雮橂ǜ歆� 攴鸽Μ霌滉皜 攵�臁表暕雼堧嫟.',
+ overSize:'歆來喌 頂茧敥雽�鞐� 鞙犽Μ臧� 鞛堨柎 鞚措矆 頂茧敥鞚� 膦呺頃╇媹雼�',
+ noGlass:'鞙犽Μ 鞝曤炒毳� 彀眷潉 靾� 鞐嗢姷雼堧嫟. 瓿奠爼鞚� 氚涭溂靹胳殧.',
clickmakesure: '韥措Ν 頇曥澑 鞐秬锛�',
logarithm: '雽�靾橈細',
totalPairQuantitya: '齑� 鞛勲 歆濎垬',
diff --git a/UI-Project/src/lang/py.js b/UI-Project/src/lang/py.js
index ae255c4..ed67e7d 100644
--- a/UI-Project/src/lang/py.js
+++ b/UI-Project/src/lang/py.js
@@ -36,6 +36,7 @@
basicData: {
untask:'鏃犱换鍔�',
tonumber:'涓婄墖鎬绘暟閲�',
+ sectionUpperSuccessful:'涓婄墖鎿嶄綔鎴愬姛锛�',
finishnumber:'宸插畬鎴愭暟閲�',
rackreset:'鏋跺瓙澶嶄綅',
prackreset:'鏄惁鏋跺瓙澶嶄綅锛�',
@@ -731,6 +732,9 @@
content:'鍐呭',
idSame:'杩涚墖浠诲姟鐜荤拑ID鐩稿悓',
sizeSame:'绗煎唴瀛樺湪鐩稿悓瑙勬牸鐨勭幓鐠�',
+ slotLess:'鍓╀綑鏍煎瓙涓嶈冻',
+ overSize:'鐩撮�氱墖鍙板瓨鍦ㄧ幓鐠冿紝缁撴潫鏈杩涚墖',
+ noGlass:'鏈壘鍒扮幓鐠冧俊鎭紝璇烽鍙栧伐绋�',
clickmakesure: '鏄惁纭鐐瑰嚮锛�',
logarithm: '瀵规暟锛�',
totalPairQuantitya: '浠诲姟鎬婚厤瀵规暟',
diff --git a/UI-Project/src/lang/zh.js b/UI-Project/src/lang/zh.js
index c8a4644..7a4d0e9 100644
--- a/UI-Project/src/lang/zh.js
+++ b/UI-Project/src/lang/zh.js
@@ -36,6 +36,7 @@
basicData:{
untask:'鏃犱换鍔�',
tonumber:'涓婄墖鎬绘暟閲�',
+ sectionUpperSuccessful:'涓婄墖鎿嶄綔鎴愬姛锛�',
finishnumber:'宸插畬鎴愭暟閲�',
rackreset:'鏋跺瓙澶嶄綅',
prackreset:'鏄惁鏋跺瓙澶嶄綅锛�',
@@ -469,6 +470,11 @@
prompt:'鎻愮ず',
},
delivery:{
+ alarmStartTime:'鎶ヨ寮�濮嬫椂闂�',
+ alarmEndTime:'鎶ヨ缁撴潫鏃堕棿',
+ equipment:'璁惧',
+ content:'鍐呭',
+ confirmer:'纭浜�',
addrole:'娣诲姞瑙掕壊',
editrole:'淇敼瑙掕壊',
role :'瑙掕壊',
@@ -815,6 +821,9 @@
content:'鍐呭',
idSame:'杩涚墖浠诲姟鐜荤拑ID鐩稿悓',
sizeSame:'绗煎唴瀛樺湪鐩稿悓瑙勬牸鐨勭幓鐠�',
+ slotLess:'鍓╀綑鏍煎瓙涓嶈冻',
+ overSize:'鐩撮�氱墖鍙板瓨鍦ㄧ幓鐠冿紝缁撴潫鏈杩涚墖',
+ noGlass:'鏈壘鍒扮幓鐠冧俊鎭紝璇烽鍙栧伐绋�',
projectMsg2:'璇烽�夋嫨鏍囩妯℃澘',
clickmakesure: '鏄惁纭鐐瑰嚮锛�',
logarithm: '瀵规暟锛�',
diff --git a/UI-Project/src/router/index.js b/UI-Project/src/router/index.js
index 034f87c..2424e14 100644
--- a/UI-Project/src/router/index.js
+++ b/UI-Project/src/router/index.js
@@ -230,6 +230,11 @@
path: '/User/userpageNo',
name: 'userpageNo',
component: () => import('../views/User/userpageNo.vue')
+ },
+ {
+ path: '/User/alarmLog',
+ name: 'alarmLog',
+ component: () => import('../views/User/alarmLog.vue')
}
]
},
diff --git a/UI-Project/src/views/Caching/cachingbefore.vue b/UI-Project/src/views/Caching/cachingbefore.vue
index 4cbd384..f5939fa 100644
--- a/UI-Project/src/views/Caching/cachingbefore.vue
+++ b/UI-Project/src/views/Caching/cachingbefore.vue
@@ -17,14 +17,50 @@
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);
@@ -226,7 +262,53 @@
}
} 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' : '';
@@ -324,6 +406,15 @@
</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>
@@ -449,6 +540,40 @@
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')" />
@@ -546,4 +671,19 @@
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>
diff --git a/UI-Project/src/views/Caching/cachingun.vue b/UI-Project/src/views/Caching/cachingun.vue
index 128830a..57c72c1 100644
--- a/UI-Project/src/views/Caching/cachingun.vue
+++ b/UI-Project/src/views/Caching/cachingun.vue
@@ -17,13 +17,48 @@
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);
@@ -209,6 +244,52 @@
} 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' : '';
@@ -306,6 +387,15 @@
</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>
@@ -431,6 +521,40 @@
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;}
@@ -454,4 +578,19 @@
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>
diff --git a/UI-Project/src/views/Returns/upreturns.vue b/UI-Project/src/views/Returns/upreturns.vue
index 250acf1..c8219cd 100644
--- a/UI-Project/src/views/Returns/upreturns.vue
+++ b/UI-Project/src/views/Returns/upreturns.vue
@@ -185,7 +185,22 @@
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;
diff --git a/UI-Project/src/views/Returns/upreturns2.vue b/UI-Project/src/views/Returns/upreturns2.vue
index 1229c9b..d13753c 100644
--- a/UI-Project/src/views/Returns/upreturns2.vue
+++ b/UI-Project/src/views/Returns/upreturns2.vue
@@ -248,17 +248,32 @@
// 寮�濮嬩笂鐗�
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;
diff --git a/UI-Project/src/views/Slicecage/slicecage.vue b/UI-Project/src/views/Slicecage/slicecage.vue
index 5d4d162..9c777e1 100644
--- a/UI-Project/src/views/Slicecage/slicecage.vue
+++ b/UI-Project/src/views/Slicecage/slicecage.vue
@@ -41,6 +41,7 @@
const selectValuesa = reactive([]);
const carPosition = ref([])
const ganghua = ref('')
+const engineerId = ref('')
const diaodu = ref('')
const flowCardId = ref('')
const filmsId = ref('')
@@ -50,10 +51,14 @@
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('')
@@ -80,6 +85,8 @@
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);
@@ -540,7 +547,10 @@
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])
@@ -564,10 +574,13 @@
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));
@@ -586,10 +599,13 @@
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);
@@ -773,18 +789,27 @@
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}`;
- // 鍔ㄦ�佺炕璇戦�昏緫锛氭牴鎹產larmCode閫夋嫨缈昏瘧閿�
- 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),
@@ -897,11 +922,25 @@
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 = ''
}
};
// 璁$畻姣忎釜澶х煩褰㈢殑鏍峰紡
@@ -1020,8 +1059,74 @@
}
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));
@@ -1055,22 +1160,6 @@
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:
@@ -1255,7 +1344,7 @@
></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)"
@@ -1264,7 +1353,7 @@
></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)"
@@ -1273,12 +1362,30 @@
></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>
@@ -1415,71 +1522,18 @@
: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"
@@ -1497,12 +1551,27 @@
</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%;">
@@ -1844,7 +1913,7 @@
.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;
diff --git a/UI-Project/src/views/User/alarmLog.vue b/UI-Project/src/views/User/alarmLog.vue
new file mode 100644
index 0000000..f1f09fb
--- /dev/null
+++ b/UI-Project/src/views/User/alarmLog.vue
@@ -0,0 +1,170 @@
+<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涓庣鍐呯幓鐠僆D鐩稿悓',
+ 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>
\ No newline at end of file
diff --git a/UI-Project/src/views/hollow/hollowslicecage.vue b/UI-Project/src/views/hollow/hollowslicecage.vue
index 6c1b644..d1c3711 100644
--- a/UI-Project/src/views/hollow/hollowslicecage.vue
+++ b/UI-Project/src/views/hollow/hollowslicecage.vue
@@ -38,7 +38,7 @@
const currentAlarm = ref<any>(null)
const tableDataAlert = ref([])
const alertText = ref('')
-
+const engineerId = ref('')
const ganghua = ref('')
const diaodu = ref('')
const hollowPriority = ref('')
@@ -46,6 +46,7 @@
const glassType = ref('')
const layer = ref('')
const filmsId = ref('')
+const thickness = ref('')
const adjust = ref([]);
const adjusta = ref([]);
const adjustedRects = ref([]);
@@ -53,11 +54,13 @@
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)
@@ -414,10 +417,13 @@
// 鐞嗙墖绗间俊鎭�
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);
@@ -431,10 +437,13 @@
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);
@@ -513,18 +522,27 @@
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}`;
- // 鍔ㄦ�佺炕璇戦�昏緫锛氭牴鎹產larmCode閫夋嫨缈昏瘧閿�
- 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),
@@ -618,45 +636,56 @@
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])
@@ -831,6 +860,31 @@
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;
@@ -854,22 +908,6 @@
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) {
@@ -993,7 +1031,7 @@
>
</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"
@@ -1008,7 +1046,7 @@
</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)"
@@ -1017,7 +1055,7 @@
></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)"
@@ -1026,7 +1064,7 @@
></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)"
@@ -1035,7 +1073,7 @@
></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)"
@@ -1044,12 +1082,21 @@
></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>
@@ -1200,66 +1247,19 @@
<!-- 鐞嗙墖绗间俊鎭� -->
<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')"
@@ -1276,12 +1276,23 @@
</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>
@@ -1410,7 +1421,7 @@
.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;
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java
index 37476c6..0559a3f 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/entity/SysMenu.java
@@ -65,7 +65,7 @@
/**
* 鎺掑簭
*/
- private String listSort;
+ private Integer listSort;
/**
* 鍒涘缓鏃堕棿
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java
index 597f93c..4e96f47 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java
@@ -65,11 +65,12 @@
.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);
}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java
index 94ca28e..241b4fe 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java
@@ -8,6 +8,8 @@
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;
@@ -113,8 +115,24 @@
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);
@@ -132,6 +150,14 @@
@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);
@@ -278,8 +304,19 @@
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;
@@ -343,6 +380,24 @@
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);
@@ -382,9 +437,9 @@
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;
}
}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
index 3154bf8..57ec394 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -2,6 +2,8 @@
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;
@@ -55,6 +57,13 @@
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;
@@ -81,6 +90,20 @@
.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);
}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
index 22de43c..69724e6 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
@@ -6,7 +6,9 @@
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;
@@ -211,5 +213,11 @@
return Result.build(200, "", result);
}
+ @ApiOperation("锛堝垪琛級鎸夊垪琛ㄧ収鏌ヨ鏉′欢锛堣澶噄d銆佹祦绋嬪崱銆佽啘绯伙級鑾峰彇璁惧瀵瑰簲鐨勭瀛愮幓鐠冧俊鎭�")
+ @PostMapping("/queryVerticalSheetCageDetailsList")
+ public Result<List<BigCageDetailsVO>> queryVerticalSheetCageDetailsList(@RequestBody BigCageDetailsRequest request) {
+ return Result.build(200, "鏌ヨ鎴愬姛", bigStorageCageDetailsService.queryVerticalSheetCageDetailsList(request));
+ }
+
}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/request/BigCageDetailsRequest.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/request/BigCageDetailsRequest.java
new file mode 100644
index 0000000..0b7d1cb
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/request/BigCageDetailsRequest.java
@@ -0,0 +1,52 @@
+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;
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/vo/BigCageDetailsVO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/vo/BigCageDetailsVO.java
new file mode 100644
index 0000000..85244cd
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/vo/BigCageDetailsVO.java
@@ -0,0 +1,110 @@
+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;
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
index 0e91ac2..3ef60d6 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
@@ -4,7 +4,9 @@
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;
@@ -73,4 +75,12 @@
BigStorageSlotDTO queryNeedDispatchSlotBySequence();
List<TemperingGlassCountDTO> queryTemperingGlassCountSummary(int isTempering);
+
+ /**
+ * 锛堝垪琛級鎸夊垪琛ㄧ収鏌ヨ鏉′欢锛堣澶噄d銆佹祦绋嬪崱銆佽啘绯伙級鑾峰彇璁惧瀵瑰簲鐨勭瀛愮幓鐠冧俊鎭�
+ *
+ * @param request
+ * @return
+ */
+ List<BigCageDetailsVO> queryVerticalSheetCageDetailsList(BigCageDetailsRequest request);
}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
index 2392ac2..d72f637 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -4,7 +4,9 @@
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;
@@ -155,4 +157,6 @@
* @return OptimizeProject 閽㈠寲鎺掍骇椤哄簭
*/
List<OptimizeProject> queryTemperingOrder();
+
+ List<BigCageDetailsVO> queryVerticalSheetCageDetailsList(BigCageDetailsRequest request);
}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
index b648bf9..073cc6c 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -11,7 +11,9 @@
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;
@@ -620,4 +622,9 @@
}
return resultList;
}
+
+ @Override
+ public List<BigCageDetailsVO> queryVerticalSheetCageDetailsList(BigCageDetailsRequest request) {
+ return baseMapper.queryVerticalSheetCageDetailsList(request);
+ }
}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageGlassInfoServiceImpl.java
index 51e5208..55f94e6 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageGlassInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageGlassInfoServiceImpl.java
@@ -4,6 +4,8 @@
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;
@@ -48,6 +50,15 @@
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}")
@@ -118,6 +129,15 @@
} 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());
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
index 5cbe4f6..07c694b 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
@@ -104,6 +104,8 @@
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;
@@ -231,6 +233,13 @@
.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);
//鍚憄lc鍙戦�佹姤璀�:绗煎唴鏍煎瓙鍓╀綑鏁伴噺涓嶈冻
// miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.alarmSignal", 16));
s7DataDLPOne = new S7DataDLPOne();
@@ -247,6 +256,13 @@
.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);
//鍚憄lc鍙戦�佹姤璀�:鐩撮�氱墖鍙板瓨鍦ㄧ幓鐠冿紝鏃犳硶缁х画鐩撮��
// miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.alarmSignal", 64));
s7DataDLPOne = new S7DataDLPOne();
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index cd59ad9..b87c897 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -76,7 +76,7 @@
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
@@ -89,14 +89,14 @@
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
@@ -212,31 +212,31 @@
<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
@@ -296,35 +296,55 @@
<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 (
@@ -382,4 +402,30 @@
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>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
index baa53ca..39a87d4 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
@@ -17,6 +17,7 @@
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;
@@ -25,6 +26,7 @@
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;
@@ -47,6 +49,8 @@
private DownGlassTaskService downGlassTaskService;
@Autowired
private GlassInfoService glassInfoService;
+ @Resource
+ private WebSocketUtils webSocketUtils;
@Value("${mes.scan.ip}")
private String scanIp;
@@ -65,15 +69,8 @@
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)
@@ -83,14 +80,7 @@
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)
@@ -100,14 +90,7 @@
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)
@@ -117,14 +100,7 @@
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)
@@ -170,18 +146,11 @@
.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)
@@ -192,16 +161,8 @@
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)
@@ -215,20 +176,14 @@
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());
}
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageDetailsController.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageDetailsController.java
index e52515e..4ffe9d2 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageDetailsController.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageDetailsController.java
@@ -3,6 +3,8 @@
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;
@@ -54,5 +56,10 @@
return Result.build(200, "鍚敤/绂佺敤鎴愬姛", 1);
}
+ @ApiOperation("锛堝垪琛級鎸夊垪琛ㄧ収鏌ヨ鏉′欢锛堣澶噄d銆佹祦绋嬪崱銆佽啘绯伙級鑾峰彇璁惧瀵瑰簲鐨勭瀛愮幓鐠冧俊鎭�")
+ @PostMapping("/queryVerticalSheetCageDetailsList")
+ public Result<List<HollowBigCageDetailsVO>> queryVerticalSheetCageDetailsList(@RequestBody HollowBigCageDetailsRequest request) {
+ return Result.build(200, "鏌ヨ鎴愬姛", hollowBigStorageCageDetailsService.queryVerticalSheetCageDetailsList(request));
+ }
}
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/request/HollowBigCageDetailsRequest.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/request/HollowBigCageDetailsRequest.java
new file mode 100644
index 0000000..15f2bae
--- /dev/null
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/request/HollowBigCageDetailsRequest.java
@@ -0,0 +1,52 @@
+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;
+}
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigCageDetailsVO.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigCageDetailsVO.java
new file mode 100644
index 0000000..61ce454
--- /dev/null
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigCageDetailsVO.java
@@ -0,0 +1,110 @@
+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;
+
+}
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java
index 360e8cb..a4e4668 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java
@@ -7,6 +7,8 @@
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;
@@ -47,5 +49,7 @@
* @return
*/
List<FlowCardGlassInfoDTO> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query);
+
+ List<HollowBigCageDetailsVO> queryVerticalSheetCageDetailsList(HollowBigCageDetailsRequest request);
}
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java
index 8ad47a8..7b748bf 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java
@@ -4,7 +4,9 @@
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;
@@ -70,5 +72,7 @@
List<FlowCardVirtualSlotDTO> queryFlowCardIdsAndLayer();
List<FlowCardGlassInfoDTO> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query);
+
+ List<HollowBigCageDetailsVO> queryVerticalSheetCageDetailsList(HollowBigCageDetailsRequest request);
}
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java
index 589997e..d4389e8 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java
@@ -11,6 +11,8 @@
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;
@@ -150,6 +152,11 @@
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) {
//灏嗗搴旀牸瀛愬彿鐨勭幓鐠僫d缃负101
this.update(new LambdaUpdateWrapper<HollowBigStorageCageDetails>()
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
index f4f12a9..81425cf 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
@@ -117,6 +117,8 @@
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";
/**
* 鐩撮�氭牸瀛�
@@ -245,6 +247,13 @@
.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);
//鍚憄lc鍙戦�佹姤璀�:绗煎唴鏍煎瓙鍓╀綑鏁伴噺涓嶈冻
s7DataZKDLPOne = new S7DataZKDLPOne();
s7DataZKDLPOne.setAlramSignal(16);
@@ -536,7 +545,7 @@
});
}
- 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());
@@ -920,6 +929,10 @@
return;
}
if (StringUtils.isNotBlank(s7DataZKDLPOne.getId1())) {
+ log.info("褰撳墠瀛樺湪杩涚墖浠诲姟锛岀粨鏉�");
+ return;
+ }
+ if (StringUtils.isNotBlank(s7DataZKDLPOne.getId1())) {
log.info("褰撳墠瀛樺湪杩涚墖浠诲姟璇锋眰锛岀粨鏉熸湰娆″ぇ绗煎瓙璋冨害");
return;
}
@@ -935,15 +948,19 @@
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>()
@@ -1095,6 +1112,13 @@
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, "浠诲姟璋冨害娌℃湁澶氫綑鏍煎瓙锛岀粨鏉熻皟搴︿换鍔�");
}
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
index d6b7a5d..ab2c8e4 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
@@ -207,8 +207,8 @@
<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>
@@ -269,7 +269,7 @@
AND films_id LIKE CONCAT( '%', #{filmsId}, '%')
</if>
<if test="thickness != 0">
- AND thickness = #{thickness}
+ AND thickness = #{thickness}
</if>
),
hollow_details_temp AS (
@@ -293,7 +293,7 @@
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
@@ -416,6 +416,32 @@
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>
\ No newline at end of file
--
Gitblit v1.8.0