UI-Project/src/assets/C1.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/assets/ypcc.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/lang/en.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/lang/py.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/lang/zh.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/GlassStorage/rawfilmstorage.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
UI-Project/src/views/largescreendisplay/screendisplay.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassPushMessage.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
UI-Project/src/assets/C1.pngUI-Project/src/assets/ypcc.pngUI-Project/src/lang/en.js
@@ -581,6 +581,7 @@ premark :'Please enter a note', }, film:{ fail:'失败', mes:'Original film storage details', warehousing:'store', pwarehousing:'入库请求', UI-Project/src/lang/py.js
@@ -581,6 +581,7 @@ premark :'请输入备注', }, film:{ fail:'失败', mes:'原片仓储详情', warehousing:'原片入库', pwarehousing:'入库请求', UI-Project/src/lang/zh.js
@@ -580,6 +580,7 @@ premark :'请输入备注', }, film:{ fail:'失败', mes:'原片仓储详情', warehousing:'原片入库', pwarehousing:'入库请求', UI-Project/src/views/GlassStorage/rawfilmstorage.vue
@@ -4,6 +4,7 @@ import {ElMessage, ElMessageBox} from 'element-plus' import {useI18n} from 'vue-i18n' import {host, WebSocketHost} from '@/utils/constants' import dayjs from 'dayjs'; import request from "@/utils/request" import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService'; const router = useRouter() @@ -16,7 +17,7 @@ const dialogFormVisiblec = ref(false) const dialogFormVisiblee = ref(false) const Edit = ref(false) const timeRange = ref(["2022-01-01 00:00:00", "2025-01-01 00:00:00"]) const timeRange = ref([]) const selectValuesa = reactive([]); const patternWidth = ref(''); const patternHeight = ref(''); @@ -42,9 +43,11 @@ taskType: '', taskState: '', }); let startTime = window.localStorage.getItem('startTime') let endTime = window.localStorage.getItem('endTime') request.post("/glassStorage/rawGlassStorageTask/setRawGlassTaskRequest",{ beginDate: "2022-01-01 00:00:00", endDate: "2025-01-01 00:00:00", beginDate: startTime, endDate: endTime, }).then((response) => { if (response.code == 200) { tableDataa.value = response.data @@ -56,13 +59,16 @@ }); onMounted(() => { socket = initializeWebSocket(socketUrl, handleMessage); const endTime = dayjs().startOf('minute'); // 当前时间,精确到分钟 const startTime = endTime.subtract(7, 'day').startOf('minute'); // 当前时间的前一天,精确到分钟 // 设置时间范围为 [开始时间, 结束时间] timeRange.value = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')]; window.localStorage.setItem('startTime', startTime.format('YYYY-MM-DD HH:mm:ss')) window.localStorage.setItem('endTime', endTime.format('YYYY-MM-DD HH:mm:ss')) }); let socket = null; const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/rawGlass`; const handleMessage = (data) => { // if(data.tasks !=null){ // tableDataa.value = data.tasks[0] // } const formattedTasks = data.tasks[0].map(task => { if (task && task.createTime) { return { ...task, createTime: formatTimestamp(task.createTime) }; @@ -72,7 +78,6 @@ tableDataa.value = formattedTasks; if(data.rawStationDetailsList !=null){ tableDatab.value = data.rawStationDetailsList[0] console.log(tableDatab.value); } }; const handleEdit = (row) => { @@ -319,21 +324,21 @@ } function getStatusType2(taskState) { switch (taskState) { case 1: case 0: return 'info'; case 2: return 'warning'; case 3: case 1: return 'success'; } } function getStatusText2(taskState) { switch (taskState) { case 1: case 0: return t('film.built');//新建 case 2: return t('film.execution');//执行中 case 3: return t('film.fail');//失败 case 1: return t('film.finish');//完成 } } @@ -364,9 +369,9 @@ :end-placeholder="$t('film.endtime')" :default-time="defaultTime" /> <el-select v-model="selectValuesa[0]" clearable :placeholder="$t('film.taskstatus')" style="margin-left: 10px;" > <el-option :label="$t('film.built')" value="1"></el-option> <el-option :label="$t('film.execution')" value="2"></el-option> <el-option :label="$t('film.finish')" value="3"></el-option> <el-option :label="$t('film.built')" value="0"></el-option> <el-option :label="$t('film.finish')" value="1"></el-option> <el-option :label="$t('film.fail')" value="2"></el-option> </el-select> <el-select v-model="selectValuesa[1]" clearable :placeholder="$t('film.tasktype')" style="margin-left: 10px;" > <el-option :label="$t('film.stocke')" value="1"></el-option> @@ -411,7 +416,7 @@ </div> </el-card> <div class="img-dlpl"> <div class="img-car1" :style="'z-index:999;top:20px;left:' + 330 + 'px;position:absolute;'"> <div class="img-car1" :style="'z-index:999;top:250px;left:' + 20 + 'px;position:absolute;'"> </div> </div> <el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%" > @@ -655,10 +660,10 @@ position: absolute; background-repeat: no-repeat; background-attachment: local; min-height: 200px; width: 200px; min-height: 150px; width: 70px; max-width: 100%; background-size: 200px 70px; background-size: 70px 150px; overflow: hidden; position:relative } UI-Project/src/views/largescreendisplay/screendisplay.vue
@@ -24,13 +24,13 @@ const edgOneTasks = ref([]) const edgTwoTasks = ref([]) const engineeringOne = ref([]) const engineeringTow = ref([]) const engineeringTwo = ref([]) const socketUrl1 = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/largenScreen`; const handleMessage1 = (data) => { edgOneTasks.value = data.edgOneTasks[0]; edgTwoTasks.value = data.edgTwoTasks[0]; engineeringOne.value = data.engineeringOne[0]; engineeringTow.value = data.engineeringTow[0]; engineeringTwo.value = data.engineeringTwo[0]; }; let socket2 = null; @@ -42,20 +42,13 @@ temperingGlassInfoList.value = data.temperingGlassInfoList[0]; }; const handleBinda = async (row) => { blinda.value = true; await fetchFlowCardId(row.orderId); }; const fetchFlowCardId = async (orderId) => { const tableDatad = ref([]); const patternUsage = async () => { try { const response = await request.post('/loadGlass/order/order/selectOrderdetail', { orderId: orderId }) const response = await request.post('/glassStorage/rawGlassStorageDetails/patternUsage?width=' + ptnusage.value.width + '&height=' + ptnusage.value.height + '&thickness=' + ptnusage.value.thickness + '&films=' + ptnusage.value.films); if (response.code == 200) { ElMessage.success(response.message); tableData.value = response.data; console.log(tableData.value); tableDatad.value = response.data; } else { ElMessage.error(response.message); } @@ -64,10 +57,18 @@ console.error(error); } } const ptnusage=ref({ width: '', height: '', thickness: '', films: '' }) // 点击下方弹窗 const handlehistorical = (row) => { blindb.value = true; historical() // historical() }; // 在组件挂载时设置默认时间范围 onMounted(() => { @@ -97,10 +98,23 @@ <template> <div style="height: 500px;"> <div class="awatch"> <img src="../../assets/screen.png" alt="Screen" style="max-width: 48%; max-height: 100%; margin-top: 50px; float: left; position: relative;" /> <div class="img-screen" alt="Screen"> <!-- 钢化色块 --> <div v-if="temperingGlassInfoList>0" class="tempering" style="width: 50px;height: 22px;top: 354px;left: 228px;position: absolute;background-color: red;"></div> <div v-if="temperingGlassInfoList>1" class="tempering" style="width: 50px;height: 22px;top: 354px;left: 284px;position: absolute;background-color: red;"></div> <!-- 切割台色块 --> <div v-if="engineeringOne.length>1" class="slicing" style="width: 50px;height: 22px;top: 575px;left: 453px;position: absolute;background-color: red;"></div> <div v-if="engineeringTwo.length>1" class="slicing" style="width: 50px;height: 22px;top: 625px;left: 453px;position: absolute;background-color: red;"></div> <!-- 原片仓储色块 --> <div class="raw" style="width: 31px;height: 32px;top: 571px;left: 300px;position: absolute;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(0,7)" :key="index" :style='"width: "+item.remainQuantity+"px;height: 5px;background-color: red;"'></div> </div> <!-- <div class="raw" style="width: 31px;height: 32px;top: 571px;left: 300px;position: absolute;background-color: red;"> <div v-for="(item,index) in rawGlassStorageDetailList.slice(0,7)" :key="index" :style='"width: "+item.remainQuantity+"px;height: 5px;background-color: red;"'></div> </div> --> </div> <div class="clickable-area" @click="handlehistorical" style="position: relative; width: 175px; height: 240px; top: 570px; left: 310px;"></div> style="position: relative;width: 110px;height: 140px;top: 603px;left: 297px;"></div> </div> <div style="height: 190px;width: 48%;float: right;"> <el-table height="500" ref="table" @selection-change="handleSelectionChange" :data="tableDatac" @@ -130,18 +144,14 @@ <!-- 点击下方弹窗 --> <el-dialog v-model="blindb" top="10vh" width="90%"> <div style="display: flex;"> <el-select :placeholder="$t('basicData.coatingtypes')" clearable style="width: 270px;margin-left: 10px;" <el-input v-model="ptnusage.width" placeholder="请输入宽度" style="width: 270px;margin-left: 10px;" clearable></el-input> <el-input v-model="ptnusage.height" placeholder="请输入高度" style="width: 270px;margin-left: 10px;" clearable></el-input> <el-input v-model="ptnusage.thickness" placeholder="请输入厚度" style="width: 270px;margin-left: 10px;" clearable></el-input> <el-input v-model="ptnusage.films" placeholder="请输入膜系" style="width: 270px;margin-left: 10px;" clearable></el-input> <!-- <el-select :placeholder="$t('basicData.coatingtypes')" clearable style="width: 270px;margin-left: 10px;" v-model="taskStat"> <el-option v-for="item in optionsa" :key="item.value" :label="item.label" :value="item.value" /> </el-select> <el-option v-for="item in optionsa" :key="item.value" :label="item.label" :value="item.value" /> </el-select> --> <!-- <span class="demonstration" style="margin-left: 20px;margin-top: 3px;">{{ $t('workOrder.time') }}</span> --> <!-- <el-date-picker v-model="timeRange" type="datetimerange" range-separator="至" :start-placeholder="$t('reportmanage.starttime')" style="margin-left: 15px;" value-format = "YYYY-MM-DD hh:mm:ss" @@ -156,43 +166,26 @@ value-format="YYYY-MM-DD hh:mm:ss" :end-placeholder="$t('reportmanage.endtime')"> </el-date-picker> --> <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="sethistorical()">{{ <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="patternUsage()">{{ $t('reportmanage.inquire') }}</el-button> </div> <el-table ref="table" style="margin-top: 20px;height: 650px;" :data="tableDatad" :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> <el-table-column prop="glassIdIn" align="center" :label="$t('searchOrder.intoglassid')" min-width="80" /> <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" /> <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" /> <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" /> <el-table-column align="center" :label="$t('film.taskstatus')" min-width="80" prop="taskState"> <template #default="scope"> <el-tag :type="getStatusTypeb(scope.row.taskState)"> {{ getStatusTextb(scope.row.taskState) }} </el-tag> </template> </el-table-column> <el-table-column align="center" :label="$t('film.enabletype')" min-width="80" prop="taskType"> <template #default="scope"> <el-tag :type="getStatusTypea(scope.row.taskType)"> {{ getStatusTexta(scope.row.taskType) }} </el-tag> </template> </el-table-column> <el-table-column prop="createTime" align="center" :label="$t('film.createtime')" min-width="120" /> <el-table-column prop="updateTime" align="center" :label="$t('sorter.updateTime')" min-width="120" /> <el-table-column prop="patternWidth" align="center" :label="$t('宽')" min-width="80" /> <el-table-column prop="patternHeight" align="center" :label="$t('高')" min-width="80" /> <el-table-column prop="patternThickness" align="center" :label="$t('厚度')" min-width="80" /> <el-table-column prop="filmsId" align="center" :label="$t('膜系')" min-width="120" /> <el-table-column prop="totalCount" align="center" :label="$t('总数量')" min-width="120" /> <el-table-column prop="count" align="center" :label="$t('笼内数量')" min-width="120" /> <el-table-column prop="finishCount" align="center" :label="$t('上片数量')" min-width="120" /> <el-table-column prop="damageCount" align="center" :label="$t('破损数量')" min-width="120" /> </el-table> <template #footer> <div id="dialog-footer"> <el-button @click="blindb = false">{{ $t('large.close') }}</el-button> </div> </template> </el-dialog> <el-dialog v-model="blinda" top="5vh" width="85%"> <el-table height="650" ref="table" @selection-change="handleSelectionChange" :data="tableData" :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> <el-table-column prop="orderId" fixed align="center" :label="$t('large.orderId')" min-width="110" /> <el-table-column prop="orderId" fixed align="center" :label="$t('large.orderId1')" min-width="110" /> <el-table-column prop="project" align="center" :label="$t('large.project')" min-width="110" /> <el-table-column prop="processId" align="center" :label="$t('large.cardnumber')" min-width="110" /> <el-table-column prop="orderNumber" align="center" :label="$t('large.serialnumber')" min-width="110" /> @@ -255,6 +248,23 @@ height: 460px; } .img-screen { max-width: 48%; max-height: 100%; margin-top: 50px; float: left; position: relative; background-image: url('../../assets/screen.png'); width: 808px; height: 841px; background-size: contain; background-repeat: no-repeat; background-position: center; /* width: 100%; height: 0; padding-bottom: 50%; */ } .clickable-area { cursor: pointer; /* 指示这是一个可点击的区域 */ hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml
@@ -39,15 +39,15 @@ AND T1.SLOT IS NULL </select> <select id="listBySlotState" resultMap="RawGlassStorageDetailsDTO"> <select id="patternUsage" resultMap="RawGlassStorageDetailsDTO"> select rgsd.pattern_width, rgsd.pattern_height, rgsd.pattern_thickness, rgsd.films_id, rgsd.count + sum(lgdth.finish_count) + sum(damage_count), rgsd.count, sum(lgdth.finish_count) as finishCount, sum(damage_count) as damageCount ifnull(rgsd.count,0) + ifnull(sum(lgdth.finish_count),0) + ifnull(sum(damage_count),0) as totalCount, ifnull(rgsd.count,0) as count, ifnull(sum(lgdth.finish_count),0) as finishCount, ifnull(sum(damage_count),0) as damageCount from (select pattern_width, pattern_height, pattern_thickness, @@ -60,10 +60,21 @@ and rgsd.pattern_height = lgdth.raw_glass_height and rgsd.pattern_thickness = lgdth.raw_glass_thickness and rgsd.films_id = lgdth.raw_glass_films_id where rgsd.pattern_width like "%#{processId}%" and rgsd.pattern_height like "%#{pattern_height}%" and rgsd.pattern_thickness like "%#{pattern_thickness}%" and rgsd.films_id like "%#{films_id}%" <where> 1=1 <if test="width != null and width != ''"> and rgsd.pattern_width like concat('%', #{width}, '%') </if> <if test="height != null and height != ''"> and rgsd.pattern_height like concat('%', #{height}, '%') </if> <if test="thickness != null and thickness != ''"> and rgsd.pattern_thickness like concat('%', #{thickness}, '%') </if> <if test="films != null and films != ''"> and rgsd.films_id like concat('%', #{films}, '%') </if> </where> group by rgsd.pattern_width, rgsd.pattern_height, rgsd.pattern_thickness, rgsd.films_id </select> </mapper> hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -168,13 +168,15 @@ List<Engineering> engineeringOne = engineeringService.list( new LambdaQueryWrapper<Engineering>() .eq(Engineering::getStationCell, 5) .eq(Engineering::getState, 0) ); List<Engineering> engineeringTow = engineeringService.list( new LambdaQueryWrapper<Engineering>() .eq(Engineering::getStationCell, 6) .eq(Engineering::getState, 0) ); jsonObject.append("engineeringOne", engineeringOne); jsonObject.append("engineeringTow", engineeringTow); jsonObject.append("engineeringTwo", engineeringTow); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassPushMessage.java
@@ -60,7 +60,7 @@ JSONObject jsonObject = new JSONObject(); MPJLambdaWrapper<RawGlassStorageDetails> wrapper = new MPJLambdaWrapper<>(); wrapper.select(RawGlassStorageStation::getSlot) .select(RawGlassStorageDetails::getRemainQuantity) .select("ifnull(remain_quantity, 0) as remain_quantity") .rightJoin(RawGlassStorageStation.class, on -> on.eq(RawGlassStorageStation::getSlot, RawGlassStorageDetails::getSlot) .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)) .orderByAsc(RawGlassStorageStation::getSlot);