UI-Project/src/lang/en.js
@@ -509,6 +509,15 @@ createTime :'Return date', }, large:{ load: 'load', edg: 'edg', temp: 'temp', hollow: 'hollow', oneFinish: 'oneFinish', twoFinish: 'twoFinish', oneunFinish: 'oneunFinish', twounFinish: 'twounFinish', ondDamage: 'ondDamage', percent:'Percent', time: 'The time of the break', tionnumber: 'Order number', UI-Project/src/lang/zh.js
@@ -511,6 +511,15 @@ createTime :'返库日期', }, large:{ load:'切割', edg:'磨边', temp:'钢化', hollow:'中空', oneFinish:'一线完成', twoFinish:'二线完成', oneunFinish:'一线未完成', twounFinish:'二线未完成', ondDamage:'一线破损', percent:'进度百分比', time: '次破时间', tionnumber: '订单号', UI-Project/src/views/largescreendisplay/screendisplay.vue
@@ -1,5 +1,5 @@ <script setup> import { onBeforeUnmount, onMounted, onUnmounted, ref, computed } from "vue"; import { onBeforeUnmount, onMounted, onUnmounted, ref, computed, nextTick } from "vue"; import { useRouter } from "vue-router" import { host, WebSocketHost } from '@/utils/constants' import request from "@/utils/request" @@ -7,7 +7,12 @@ import dayjs from 'dayjs'; import { ElMessage } from 'element-plus' import { useI18n } from 'vue-i18n' import * as echarts from 'echarts'; const load = ref(true) const edg = ref(true) const temp = ref(true) const hollow = ref(true) const router = useRouter() const blinda = ref(false) const blindb = ref(false) @@ -27,6 +32,7 @@ const edgTwoTasks = ref([]) const engineeringOne = ref([]) const engineeringTwo = ref([]) const socketUrl1 = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/largenScreen`; const handleMessage1 = (data) => { edgOneTasks.value = data.edgOneTasks[0]; @@ -41,6 +47,87 @@ numBoxes2.value = edgTwoTasks.value.length; boxStart2(); } const pieChartVOS = ref([]); pieChartVOS.value = data.pieChartVOS[0]; let oneFinish = ref(); let twoFinish = ref(); let oneunFinish = ref(); let twounFinish = ref(); if (load.value) { oneFinish = pieChartVOS.value[0].oneCompletedQuantity; twoFinish = pieChartVOS.value[0].twoCompletedQuantity; oneunFinish = pieChartVOS.value[0].oneUncompletedQuantity; twounFinish = pieChartVOS.value[0].twoUncompletedQuantity; } else { oneFinish = pieChartVOS.value[0].oneCompletedArea; twoFinish = pieChartVOS.value[0].twoCompletedArea; oneunFinish = pieChartVOS.value[0].oneUncompletedArea; twounFinish = pieChartVOS.value[0].twoUncompletedArea; } const chartDomOne = chartOne.value; if (!chartDomOne) { console.error('图表容器未找到'); return; } const myChartOne = echarts.init(chartDomOne); const optionOne = { title: { text: t('large.load'), subtext: '', left: 'right' }, tooltip: { trigger: 'item' }, legend: { orient: 'vertical', left: 'left' }, series: [ { name: '', type: 'pie', radius: '50%', data: [ { value: oneFinish, name: t('large.oneFinish') }, { value: twoFinish, name: t('large.twoFinish') }, { value: oneunFinish, name: t('large.oneunFinish') }, { value: twounFinish, name: t('large.twounFinish') }, ], emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ], graphic: [ { type: 'rect', left: 'center', top: 0, shape: { width: 80, height: 30 }, style: { text: load.value == true ? t('large.quantity') : t('large.are'), fill: '#5470C6', stroke: '#000', lineWidth: 1 }, onclick: function () { load.value = !load.value; } } ] }; myChartOne.setOption(optionOne); }; let socket2 = null; const temperingTaskType = ref([]) @@ -60,29 +147,371 @@ numBoxes4.value = 0; } temperingGlassInfoInList.value = data.temperingGlassInfoInList[0]; // if (numBoxes4.value != temperingGlassInfoOutList.value) { // numBoxes4.value = temperingGlassInfoOutList.value; // boxStart3(); // } const pieChartVOS = ref([]); pieChartVOS.value = data.pieChartVOS[0]; let oneFinish = ref(); let ondDamage = ref(); let oneunFinish = ref(); if (temp.value) { oneFinish = pieChartVOS.value[0].oneCompletedQuantity; ondDamage = pieChartVOS.value[0].oneDamageQuantity; oneunFinish = pieChartVOS.value[0].oneUncompletedQuantity; } else { oneFinish = pieChartVOS.value[0].oneCompletedArea; ondDamage = pieChartVOS.value[0].oneDamageArea; oneunFinish = pieChartVOS.value[0].oneUncompletedArea; } const chartDomOne = chartThree.value; if (!chartDomOne) { console.error('图表容器未找到'); return; } const myChartOne = echarts.init(chartDomOne); const optionOne = { title: { text: t('large.temp'), subtext: '', left: 'right' }, tooltip: { trigger: 'item' }, legend: { orient: 'vertical', left: 'left' }, series: [ { name: '', type: 'pie', radius: '50%', data: [ { value: oneFinish, name: t('large.oneFinish') }, { value: ondDamage, name: t('large.ondDamage') }, { value: oneunFinish, name: t('large.oneunFinish') }, ], emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ], graphic: [ { type: 'rect', left: 'center', top: 0, shape: { width: 80, height: 30 }, style: { text: temp.value == true ? t('large.quantity') : t('large.are'), fill: '#5470C6', stroke: '#000', lineWidth: 1 }, onclick: function () { temp.value = !temp.value; } } ] }; myChartOne.setOption(optionOne); }; let socket3 = null; const bigStorageCageUsage = ref([]) const socketUrl3 = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/largenScreen`; const handleMessage3 = (data) => { bigStorageCageUsage.value = data.bigStorageCageUsage[0]; const pieChartVOS = ref([]); pieChartVOS.value = data.pieChartVOS[0]; let oneFinish = ref(); let twoFinish = ref(); let oneunFinish = ref(); let twounFinish = ref(); if (edg.value) { oneFinish = pieChartVOS.value[0].oneCompletedQuantity; twoFinish = pieChartVOS.value[0].twoCompletedQuantity; oneunFinish = pieChartVOS.value[0].oneUncompletedQuantity; twounFinish = pieChartVOS.value[0].twoUncompletedQuantity; } else { oneFinish = pieChartVOS.value[0].oneCompletedArea; twoFinish = pieChartVOS.value[0].twoCompletedArea; oneunFinish = pieChartVOS.value[0].oneUncompletedArea; twounFinish = pieChartVOS.value[0].twoUncompletedArea; } const chartDomOne = chartTwo.value; if (!chartDomOne) { console.error('图表容器未找到'); return; } const myChartOne = echarts.init(chartDomOne); const optionOne = { title: { text: t('large.edg'), subtext: '', left: 'right' }, tooltip: { trigger: 'item' }, legend: { orient: 'vertical', left: 'left' }, series: [ { name: '', type: 'pie', radius: '50%', data: [ { value: oneFinish, name: t('large.oneFinish') }, { value: twoFinish, name: t('large.twoFinish') }, { value: oneunFinish, name: t('large.oneunFinish') }, { value: twounFinish, name: t('large.twounFinish') }, ], emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ], graphic: [ { type: 'rect', left: 'center', top: 0, shape: { width: 80, height: 30 }, style: { text: edg.value == true ? t('large.quantity') : t('large.are'), fill: '#5470C6', stroke: '#000', lineWidth: 1 }, onclick: function () { edg.value = !edg.value; } } ] }; myChartOne.setOption(optionOne); }; let socket4 = null; const hollowBigStorageCageUsage = ref([]) const socketUrl4 = `ws://${WebSocketHost}:${host}/api/hollowGlass/api/talk/largenScreen`; const handleMessage4 = (data) => { hollowBigStorageCageUsage.value = data.hollowBigStorageCageUsage[0]; const pieChartVOS = ref([]); pieChartVOS.value = data.pieChartVOS[0]; let oneFinish = ref(); let twoFinish = ref(); let oneunFinish = ref(); let twounFinish = ref(); if (hollow.value) { oneFinish = pieChartVOS.value[0].oneCompletedQuantity; twoFinish = pieChartVOS.value[0].twoCompletedQuantity; oneunFinish = pieChartVOS.value[0].oneUncompletedQuantity; twounFinish = pieChartVOS.value[0].twoUncompletedQuantity; } else { oneFinish = pieChartVOS.value[0].oneCompletedArea; twoFinish = pieChartVOS.value[0].twoCompletedArea; oneunFinish = pieChartVOS.value[0].oneUncompletedArea; twounFinish = pieChartVOS.value[0].twoUncompletedArea; } const chartDomOne = chartFour.value; if (!chartDomOne) { console.error('图表容器未找到'); return; } const myChartOne = echarts.init(chartDomOne); const optionOne = { title: { text: t('large.hollow'), subtext: '', left: 'right' }, tooltip: { trigger: 'item' }, legend: { orient: 'vertical', left: 'left' }, series: [ { name: '', type: 'pie', radius: '50%', data: [ { value: oneFinish, name: t('large.oneFinish') }, { value: twoFinish, name: t('large.twoFinish') }, { value: oneunFinish, name: t('large.oneunFinish') }, { value: twounFinish, name: t('large.twounFinish') }, ], emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ], graphic: [ { type: 'rect', left: 'center', top: 0, shape: { width: 80, height: 30 }, style: { text: hollow.value == true ? t('large.quantity') : t('large.are'), fill: '#5470C6', stroke: '#000', lineWidth: 1 }, onclick: function () { hollow.value = !hollow.value; } } ] }; myChartOne.setOption(optionOne); }; let socket5 = null; const productionVO = ref([]) const socketUrl5 = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/largenScreenProduction`; const handleMessage5 = (data) => { productionVO.value = data.productionVO; productionVO.value = data.productionVO[0]; // 将原始数据转换为 ECharts 图表所需格式 categories = productionVO.value.map(item => item.date); // 获取日期作为 x 轴 totalAreaOutOne = productionVO.value.map(item => item.totalAreaOutOne); countIn = productionVO.value.map(item => item.countIn); totalAreaOutTwo = productionVO.value.map(item => item.totalAreaOutTwo); totalAreaOut = productionVO.value.map(item => item.totalAreaOut); countOut = productionVO.value.map(item => item.countOut); hollowTotalAreaOutTwo = productionVO.value.map(item => item.hollowTotalAreaOutTwo); hollowCountOutOne = productionVO.value.map(item => item.hollowCountOutOne); countOutTwo = productionVO.value.map(item => item.countOutTwo); hollowCountOutTwo = productionVO.value.map(item => item.hollowCountOutTwo); hollowTotalAreaOutOne = productionVO.value.map(item => item.hollowTotalAreaOutOne); totalAreaIn = productionVO.value.map(item => item.totalAreaIn); countOutOne = productionVO.value.map(item => item.countOutOne); //图表 nextTick() // 确保 DOM 加载完成 const chartDom = chartRef.value; if (!chartDom) { console.error('图表容器未找到'); return; } const myChart = echarts.init(chartDom); const option = { title: { text: '' }, tooltip: { trigger: 'axis' }, legend: { data: [ t('large.countOutOne'), t('large.totalAreaOutOne'), t('large.countOutTwo'), t('large.totalAreaOutTwo'), t('large.countIn'), t('large.totalAreaIn') ] }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, toolbox: { feature: { saveAsImage: {} } }, xAxis: { type: 'category', boundaryGap: false, data: categories // 这是日期数据 }, yAxis: { type: 'value' }, series: [ { name: t('large.countOutOne'), type: 'bar', data: countOutOne }, { name: t('large.totalAreaOutOne'), type: 'bar', data: totalAreaOutOne }, { name: t('large.countOutTwo'), type: 'bar', data: countOutTwo }, { name: t('large.totalAreaOutTwo'), type: 'bar', data: totalAreaOutTwo }, { name: t('large.countIn'), type: 'bar', data: countIn }, { name: t('large.totalAreaIn'), type: 'bar', data: totalAreaIn } ] }; myChart.setOption(option); const chartDom2 = chartRef2.value; if (!chartDom2) { console.error('图表容器未找到'); return; } const myChart2 = echarts.init(chartDom2); const option2 = { title: { text: '' }, tooltip: { trigger: 'axis' }, legend: { data: [ t('large.totalAreaOut'), t('large.countOut'), t('large.hollowTotalAreaOutOne'), t('large.hollowCountOutOne'), t('large.hollowCountOutTwo'), t('large.hollowTotalAreaOutTwo') ] }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, toolbox: { feature: { saveAsImage: {} } }, xAxis: { type: 'category', boundaryGap: false, data: categories // 这是日期数据 }, yAxis: { type: 'value' }, series: [ { name: t('large.totalAreaOut'), type: 'bar', data: totalAreaOut }, { name: t('large.countOut'), type: 'bar', data: countOut }, { name: t('large.hollowTotalAreaOutOne'), type: 'bar', data: hollowTotalAreaOutOne }, { name: t('large.hollowCountOutOne'), type: 'bar', data: hollowCountOutOne }, { name: t('large.hollowCountOutTwo'), type: 'bar', data: hollowCountOutTwo }, { name: t('large.hollowTotalAreaOutTwo'), type: 'bar', data: hollowTotalAreaOutTwo } ] }; myChart2.setOption(option2); }; // 将原始数据转换为 ECharts 图表所需格式 let categories = ref([]); // 获取日期作为 x 轴 let totalAreaOutOne = ref([]); let countIn = ref([]); let totalAreaOutTwo = ref([]); let totalAreaOut = ref([]); let countOut = ref([]); let hollowTotalAreaOutTwo = ref([]); let hollowCountOutOne = ref([]); let countOutTwo = ref([]); let hollowCountOutTwo = ref([]); let hollowTotalAreaOutOne = ref([]); let totalAreaIn = ref([]); let countOutOne = ref([]); const tableDatad = ref([]); const patternUsage = async () => { @@ -148,8 +577,17 @@ blindb.value = true; patternUsage() }; const chartRef = ref(null) const chartRef2 = ref(null) const chartOne = ref(null) const chartTwo = ref(null) const chartThree = ref(null) const chartFour = ref(null) // 在组件挂载时设置默认时间范围 onMounted(() => { onMounted(async () => { boxStart(); boxStart2(); boxStart3(); @@ -165,6 +603,7 @@ const startTime = endTime.subtract(1, 'day').startOf('minute'); // 当前时间的前一天,精确到分钟 // 设置时间范围为 [开始时间, 结束时间] // timeRange.value = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')]; }); // onMounted(() => { // socket = initializeWebSocket(socketUrl, handleMessage); @@ -187,13 +626,13 @@ const numBoxes3 = ref(5); const numBoxes4 = ref(1); const speed = 0.1; const maxX = 250; // 终点X坐标 const maxY = -90; // 终点Y坐标 const maxX = 200; // 终点X坐标 const maxY = -75; // 终点Y坐标 const maxX2 = 313; // 终点X坐标 const maxY2 = -204; // 终点Y坐标 const maxX3 = 125; // 终点X坐标 const maxY3 = -105; // 终点Y坐标 const maxX4 = 80; // 终点X坐标 const maxY2 = -165; // 终点Y坐标 const maxX3 = 95; // 终点X坐标 const maxY3 = -85; // 终点Y坐标 const maxX4 = 60; // 终点X坐标 const maxY4 = 0; // 终点Y坐标 const delayFrames = 600; // 每个 div 的延迟帧数 const boxes = ref([]); @@ -455,6 +894,7 @@ hollowTotalAreaOutTwo: t('large.hollowTotalAreaOutTwo'), }; </script> <template> <div style="height: 500px;"> @@ -501,133 +941,177 @@ <div class="awatch" style="display: flex;"> <!-- 生产统计 --> <div style="height: 100px;width: 15%;float: right;"> <el-table height="540" ref="table" :data="transposedData" @click="handlehistorical10" :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"> <el-table-column prop="name" align="center" min-width="100" /> <el-table-column v-for="(item, index) in productionVO" :key="index" :prop="'value' + index" align="center" min-width="80" /> </el-table> <div> <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary" @click="handlehistorical1">{{ $t('large.historicaltasks1') }}</el-button> <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary" @click="blindc=true">{{ $t('large.order') }}</el-button> <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary" @click="handlehistorical2">{{ $t('large.historicaltasks2') }}</el-button> <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary" @click="handlehistorical3">{{ $t('large.historicaltasks3') }}</el-button> <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary" @click="handlehistorical4">{{ $t('large.historicaltasks4') }}</el-button> <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary" @click="handlehistorical5">{{ $t('large.historicaltasks5') }}</el-button> <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary" @click="handlehistorical7">{{ $t('large.historicaltasks7') }}</el-button> <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary" @click="handlehistorical8">{{ $t('large.historicaltasks8') }}</el-button> <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary" @click="handlehistorical6">{{ $t('large.historicaltasks6') }}</el-button> <el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary" @click="handlehistorical9">{{ $t('large.historicaltasks9') }}</el-button> <div style="height: 100px;width: 25%;float: right;"> <div id="ss" style="width: 100%; display: flex; justify-content: center;"> <div ref="chartRef" style="width: 600px; height: 400px;"></div> </div> <div style="width: 100%;height: 245px;display: flex;"> <div ref="chartOne" style="width: 100%;"></div> </div> <div style="width: 100%;height: 245px;display: flex;"> <div ref="chartTwo" style="width: 100%;"></div> </div> </div> <div style="width: 50%;"> <div class="img-screen" alt="Screen"> <!-- 钢化半透明色块 --> <div style="width: 80px;height: 40px;top: 130px;left: 130px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;"> <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countOut : 0 }}片</div> <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaOut : 0 }}m²</div> </div> <!-- 中空一线半透明色块 --> <div style="width: 80px;height: 40px;top: 315px;left: 450px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;"> <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].hollowCountOutOne : 0 }}片</div> <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].hollowTotalAreaOutOne : 0 }}m²</div> </div> <!-- 中空二线半透明色块 --> <div style="width: 80px;height: 40px;top: 230px;left: 450px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;"> <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].hollowCountOutTwo : 0 }}片</div> <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].hollowTotalAreaOutTwo : 0 }}m²</div> </div> <!-- 切割二线半透明色块 --> <div style="width: 80px;height: 40px;top: 542px;left: 410px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;"> <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countOutOne : 0 }}片</div> <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaOutOne : 0 }}m²</div> </div> <!-- 切割一线半透明色块 --> <div style="width: 80px;height: 40px;top: 490px;left: 410px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;"> <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countOutTwo : 0 }}片</div> <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaOutTwo : 0 }}m²</div> </div> <!-- 磨边一线半透明色块 --> <div style="width: 80px;height: 40px;top: 410px;left: 450px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;"> <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countOutOne : 0 }}片</div> <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaOutOne : 0 }}m²</div> </div> <!-- 磨边二线半透明色块 --> <div style="width: 80px;height: 40px;top: 369px;left: 450px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;"> <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countOutTwo : 0 }}片</div> <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaOutTwo : 0 }}m²</div> </div> <!-- 钢化前大理片半透明色块 --> <div style="width: 80px;height: 40px;top: 380px;left: 290px;position: absolute;background-color: rgba(0, 0, 0, 0.5);color: white;font-size: 12px;z-index: 999;"> <div>{{ $t('large.quantity') }}:{{ productionVO.length > 0 ? productionVO[6].countIn : 0 }}片</div> <div>{{ $t('large.are') }}:{{ productionVO.length > 0 ? productionVO[6].totalAreaIn : 0 }}m²</div> </div> <!-- 钢化色块 --> <div v-if="temperingGlassInfoInList > 0" class="tempering" style="width: 55px;height: 25px;top: 359px;left: 162px;position: absolute;background-color: #911005;"></div> style="width: 44px;height: 19px;top: 284px;left: 178px;position: absolute;background-color: #911005;"></div> <div v-if="temperingGlassInfoList > 0" class="tempering" style="width: 66px;height: 28px;top: 355px;left: 284px;position: absolute;background-color: #911005;"></div> style="width: 53px;height: 22px;top: 282px;left: 226px;position: absolute;background-color: #911005;"></div> <div v-if="temperingGlassInfoList > 1" class="tempering" style="width: 66px;height: 28px;top: 355px;left: 358px;position: absolute;background-color: #911005;"></div> style="width: 53px;height: 22px;top: 282px;left: 282px;position: absolute;background-color: #911005;"></div> <!-- 切割台色块 --> <div v-if="engineeringOne.length > 1" class="slicing" style="width: 59px;height: 29px;top: 629px;left: 562px;position: absolute;background-color: #911005;"></div> style="width: 45px;height: 20px;top: 500px;left: 496px;position: absolute;background-color: #911005;"></div> <div v-if="engineeringTwo.length > 1" class="slicing" style="width: 59px;height: 29px;top: 692px;left: 562px;position: absolute;background-color: #911005;"></div> style="width: 45px;height: 20px;top: 550px;left: 496px;position: absolute;background-color: #911005;"></div> <!-- 原片仓储色块 --> <div class="raw" style="width: 35px;height: 40px;top: 624px;left: 372px;position: absolute;"> <div class="raw" style="width: 27px;height: 30px;top: 497px;left: 296px;position: absolute;"> <div v-for="(item, index) in rawGlassStorageDetailList.slice(0, 7)" :key="index" :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div> :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div> </div> <div class="raw" style="width: 35px;height: 58px;top: 673px;left: 372px;position: absolute;"> <div class="raw" style="width: 27px;height: 45px;top: 535px;left: 296px;position: absolute;"> <div v-for="(item, index) in rawGlassStorageDetailList.slice(8, 17)" :key="index" :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div> :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div> </div> <div class="raw" style="width: 35px;height: 20px;top: 751px;left: 372px;position: absolute;"> <div class="raw" style="width: 27px;height: 13px;top: 598px;left: 296px;position: absolute;"> <div v-for="(item, index) in rawGlassStorageDetailList.slice(18, 20)" :key="index" :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div> :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div> </div> <div class="raw" style="width: 35px;height: 27px;top: 732px;left: 459px;position: absolute;"> <div class="raw" style="width: 27px;height: 23px;top: 580px;left: 365px;position: absolute;"> <div v-for="(item, index) in rawGlassStorageDetailList.slice(21, 25)" :key="index" :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div> :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div> </div> <div class="raw" style="width: 35px;height: 12px;top: 611px;left: 459px;position: absolute;"> <!-- <div class="raw" style="width: 27px;height: 12px;top: 611px;left: 459px;position: absolute;"> <div v-for="(item, index) in rawGlassStorageDetailList.slice(26, 27)" :key="index" :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div> :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div> </div> <div class="raw" style="width: 35px;height: 12px;top: 6676px;left: 459px;position: absolute;"> <div class="raw" style="width: 27px;height: 12px;top: 6676px;left: 459px;position: absolute;"> <div v-for="(item, index) in rawGlassStorageDetailList.slice(28, 29)" :key="index" :style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div> </div> :style='"width: " + (item.remainQuantity / 1.8) + "px;height: 5.6px;background-color: #911005;"'></div> </div> --> <!-- 磨边色块 --> <div class="container" style="position: relative;width: 20px;height: 20px;top: 628px;left: 804px;position: absolute;"> style="position: relative;width: 15px;height: 15px;top: 500px;left: 638px;position: absolute;"> <div v-for="(box, index) in boxes" :key="index" class="box" :style="box.style"></div> </div> <div class="container" style="position: relative;width: 20px;height: 20px;top: 690px;left: 867px;position: absolute;"> style="position: relative;width: 15px;height: 15px;top: 548px;left: 690px;position: absolute;"> <div v-for="(box, index) in boxes2" :key="index" class="box" :style="box.style"></div> </div> <!-- 钢化运动色块 --> <div class="container" style="position: relative;width: 20px;height: 20px;top: 468px;left: 250px;position: absolute;"> style="position: relative;width: 15px;height: 15px;top: 370px;left: 195px;position: absolute;background-color: red;"> <div v-for="(box, index) in boxes3" :key="index" class="box" :style="box.style"></div> </div> <div class="container" style="position: relative;width: 20px;height: 20px;top: 357px;left: 618px;position: absolute;"> style="position: relative;width: 15px;height: 15px;top: 284px;left: 489px;position: absolute;"> <div v-for="(box, index) in boxes4" :key="index" class="box" :style="box.style"></div> </div> <!-- 钢化前大理片色块 --> <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(0, 1)" :key="index" :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 471px;left: 389px;position: absolute;background-color: #911005;"'> :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 374px;left: 309px;position: absolute;background-color: #911005;"'> </div> <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(1, 2)" :key="index" :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 491px;left: 389px;position: absolute;background-color: #911005;"'> :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 390px;left: 309px;position: absolute;background-color: #911005;"'> </div> <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(2, 3)" :key="index" :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 510px;left: 389px;position: absolute;background-color: #911005;"'> :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 406px;left: 309px;position: absolute;background-color: #911005;"'> </div> <div class="container" v-for="(item, index) in bigStorageCageUsage.slice(3, 4)" :key="index" :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 530px;left: 389px;position: absolute;background-color: #911005;"'> :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 422px;left: 309px;position: absolute;background-color: #911005;"'> </div> <!-- 中空前大理片色块 --> <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(0, 1)" :key="index" :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 334px;left: 832px;position: absolute;background-color: #911005;"'> :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 265px;left: 662px;position: absolute;background-color: #911005;"'> </div> <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(1, 2)" :key="index" :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 354px;left: 832px;position: absolute;background-color: #911005;"'> :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 281px;left: 662px;position: absolute;background-color: #911005;"'> </div> <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(2, 3)" :key="index" :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 374px;left: 832px;position: absolute;background-color: #911005;"'> :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 297px;left: 662px;position: absolute;background-color: #911005;"'> </div> <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(3, 4)" :key="index" :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 394px;left: 832px;position: absolute;background-color: #911005;"'> :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 313px;left: 662px;position: absolute;background-color: #911005;"'> </div> <div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(4, 5)" :key="index" :style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 414px;left: 832px;position: absolute;background-color: #911005;"'> :style='"position: relative;width: " + (37 * item.percentage / 100) + "px;height: 13px;top: 329px;left: 662px;position: absolute;background-color: #911005;"'> </div> <div class="clickable-area" @click="handlehistorical" style="position: relative;width: 140px;height: 170px;top: 603px;left: 364px;"></div> style="position: relative;width: 108px;height: 134px;top: 478px;left: 290px;"></div> </div> <div style="height: 190px;width: 100%;float: right;"> <el-table height="190" ref="table" :data="orderDTOS" :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> <el-table-column prop="orderId" align="center" :label="$t('large.orderId')" min-width="50" /> <el-table-column prop="customerName" align="center" :show-overflow-tooltip="true" :label="$t('large.customerName')" min-width="90" /> <el-table-column prop="project" align="center" :label="$t('large.project')" min-width="50" /> <el-table-column prop="area" align="center" :label="$t('large.are')" min-width="50" /> <el-table-column prop="quantity" align="center" :label="$t('large.quantity')" min-width="50" /> <el-table-column prop="percent" align="center" :label="$t('large.percent')" min-width="50" /> <el-table-column align="center" :label="$t('large.operate')" min-width="50"> <template #default="scope"> <el-button type="text" style="margin-left: 10px;margin-bottom: 10px;" @click="flowCardDetail(scope.row.orderId)">{{ $t('large.mes') }}</el-button> </template> </el-table-column> </el-table> </div> </div> <div style="height: 100px;width: 25%;float: right;"> <div id="ss" style="width: 100%; display: flex; justify-content: center;"> <div ref="chartRef2" style="width: 600px; height: 400px;"></div> </div> <div style="width: 100%;height: 245px;display: flex;"> <div ref="chartThree" style="width: 100%;"></div> </div> <div style="width: 100%;height: 245px;display: flex;"> <div ref="chartFour" style="width: 100%;"></div> </div> </div> </div> </div> @@ -740,8 +1224,8 @@ /* float: left; */ position: relative; background-image: url('../../assets/screen.png'); width: 1002px; height: 878px; width: 795px; height: 700px; background-size: contain; background-repeat: no-repeat; /* background-position: center; */ hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/PieChartVO.java
New file @@ -0,0 +1,50 @@ package com.mes.largenscreen.entity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @Author : zhoush * @Date: 2025/3/12 14:30 * @Description: */ @Data public class PieChartVO { @ApiModelProperty(value = "一线已完成玻璃数量") private Integer oneCompletedQuantity; @ApiModelProperty(value = "一线已完成玻璃面积") private Double oneCompletedArea; @ApiModelProperty(value = "一线次破玻璃数量") private Integer oneDamageQuantity; @ApiModelProperty(value = "一线次破玻璃面积") private Double oneDamageArea; @ApiModelProperty(value = "二线已完成玻璃数量") private Integer twoCompletedQuantity; @ApiModelProperty(value = "二线已完成玻璃面积") private Double twoCompletedArea; @ApiModelProperty(value = "二线次破玻璃数量") private Integer twoDamageQuantity; @ApiModelProperty(value = "二线次破玻璃面积") private Double twoDamageArea; @ApiModelProperty(value = "一线未完成玻璃数量") private Integer oneUncompletedQuantity; @ApiModelProperty(value = "一线未完成玻璃面积") private Double oneUncompletedArea; @ApiModelProperty(value = "二线未完成玻璃数量") private Integer twoUncompletedQuantity; @ApiModelProperty(value = "二线未完成玻璃面积") private Double twoUncompletedArea; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/LargenScreenService.java
@@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mes.largenscreen.entity.DailyProductionVO; import com.mes.largenscreen.entity.DateRequest; import com.mes.largenscreen.entity.PieChartVO; import java.util.List; /** * @Author : zhoush @@ -13,5 +16,6 @@ Page<DailyProductionVO> queryDailyProduction(DateRequest query); DailyProductionVO querySameDayProduction(DateRequest query); List<DailyProductionVO> querySameDayProduction(DateRequest query); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/impl/LargenScreenServiceImpl.java
@@ -11,6 +11,7 @@ import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -37,14 +38,16 @@ } @Override public DailyProductionVO querySameDayProduction(DateRequest query) { public List<DailyProductionVO> querySameDayProduction(DateRequest query) { if (StringUtils.isEmpty(query.getBeginDate())) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); query.setBeginDate(sdf.format(new Date())); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH, -6); query.setBeginDate(sdf.format(calendar.getTime())); query.setEndDate(sdf.format(new Date())); } List<DailyProductionVO> list = largenScreenMapper.queryDailyProduction(query.getBeginDate(), query.getEndDate()); return list.get(0); return list; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java
@@ -1,6 +1,9 @@ package com.mes.order.controller; import com.mes.order.entity.Orderdetail; import com.mes.order.entity.Orders; import com.mes.order.entity.dto.OrderDTO; import com.mes.order.entity.request.OrderRequest; import com.mes.order.service.OrdersService; import com.mes.utils.Result; import io.swagger.annotations.Api; @@ -37,5 +40,13 @@ log.info("显示订单详情信息:{}", glass); return Result.build(200, "", glass); } @ApiOperation("订单接口查询") @PostMapping("/selectOrder") //显示工程选择信息 @ResponseBody public Result<List<OrderDTO>> selectOrder(@RequestBody OrderRequest orderRequest) { // OrderDTO orderDTO = new OrderDTO(); return Result.build(200, "", null); } } hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/dto/OrderDTO.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.models.auth.In; import lombok.Data; import lombok.EqualsAndHashCode; @@ -41,12 +42,12 @@ /** * 订单数量 */ private String quantity; private Integer quantity; /** * 订单面积 */ private String area; private Double area; /** * 创建时间 @@ -56,7 +57,12 @@ /** * 订单进度百分比 */ private String percent; private Double percent; /** * 订单状态 */ private Integer orderStatus; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/request/OrderRequest.java
New file @@ -0,0 +1,42 @@ package com.mes.order.entity.request; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.Date; /** * <p> * * </p> * * @author wu * @since 2024-06-17 */ @Data @EqualsAndHashCode(callSuper = false) public class OrderRequest implements Serializable { @ApiModelProperty(value = "订单Id") private String orderId; @ApiModelProperty(value = "客户名称") private String customerName; @ApiModelProperty(value = "项目名称") private String project; @ApiModelProperty(value = "订单状态") private Integer orderStatus; @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; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/FlowCardController.java
@@ -2,6 +2,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mes.pp.entity.dto.FlowCardPercentDTO; import com.mes.pp.entity.request.FlowCardRequest; import com.mes.pp.service.FlowCardService; import com.mes.utils.Result; import io.swagger.annotations.Api; @@ -14,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; /** * <p> @@ -37,5 +40,11 @@ return Result.build(200, "查询成功", flowCardService.flowCardReportForms(orderId)); } @ApiOperation("订单详情进度接口") @PostMapping("/flowCardPercent") public Result<List<FlowCardPercentDTO>> flowCardPercent(@RequestBody FlowCardRequest flowCardRequest) { return Result.build(200, "查询成功", null); } } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkDetailController.java
@@ -1,9 +1,20 @@ package com.mes.pp.controller; import com.mes.pp.entity.dto.FlowCardPercentDTO; import com.mes.pp.entity.dto.ReportWorkDTO; import com.mes.pp.entity.request.FlowCardRequest; import com.mes.pp.entity.request.ReportWorkRequest; import com.mes.utils.Result; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * <p> @@ -13,9 +24,14 @@ * @author wu * @since 2024-07-25 */ @Api(tags = "报工") @RestController @RequestMapping("/reporting-work-detail") public class ReportingWorkDetailController { @ApiOperation("报工数据查询接口") @PostMapping("/reportWorkQuery") public Result<List<ReportWorkDTO>> reportWorkQuery(@RequestBody ReportWorkRequest reportWorkRequest) { return Result.build(200, "查询成功", null); } } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/FlowCardPercentDTO.java
New file @@ -0,0 +1,102 @@ package com.mes.pp.entity.dto; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; /** * <p> * * </p> * * @author wu * @since 2024-07-25 */ @Data @EqualsAndHashCode(callSuper = false) public class FlowCardPercentDTO implements Serializable { private static final long serialVersionUID = 1L; /** * 流程卡号 */ private String processId; /** * 层号 */ private Integer technologyNumber; /** * 订单序号 */ private Integer orderNumber; /** * 项目名称 */ private String productName; /** * 玻璃名称 */ private String glassChild; /** * 宽 */ private Double width; /** * 高 */ private Double height; /** * 订单数量 */ private Integer quantity; /** * 订单类型 */ private String orderType; /** * 面积 */ private Double area; /** * 补片数量 */ private Integer PatchQuantity; /** * 报工工序 */ private String reportWorkProcess; /** * 报工数量 */ private String reportWorkQuantityCount; /** * 库存数量 */ private Integer inventory; /** * 生产终止状态 */ private String orderNumberStatus; /** * 生产终止状态 */ private String packagingMethod; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/ReportWorkDTO.java
New file @@ -0,0 +1,67 @@ package com.mes.pp.entity.dto; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; /** * <p> * * </p> * * @author wu * @since 2024-07-25 */ @Data @EqualsAndHashCode(callSuper = false) public class ReportWorkDTO implements Serializable { private static final long serialVersionUID = 1L; /** * 流程卡号 */ private String processId; /** * 层号 */ private Integer technologyNumber; /** * 报工工序 */ private String reportWorkProcess; /** * 玻璃名称 */ private String glassChild; /** * 报工数量 */ private String reportWorkQuantity; /** * 报工面积 */ private String reportWorkArea; /** * 次破数量 */ private String damageWorkQuantity; /** * 次破面积 */ private String damageWorkArea; /** * 时间 */ private String reportTime; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/FlowCardRequest.java
New file @@ -0,0 +1,28 @@ package com.mes.pp.entity.request; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.Date; /** * <p> * * </p> * * @author wu * @since 2024-06-17 */ @Data @EqualsAndHashCode(callSuper = false) public class FlowCardRequest implements Serializable { @ApiModelProperty(value = "订单Id") private String orderId; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/ReportWorkRequest.java
New file @@ -0,0 +1,38 @@ package com.mes.pp.entity.request; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.Date; /** * <p> * * </p> * * @author wu * @since 2024-06-17 */ @Data @EqualsAndHashCode(callSuper = false) public class ReportWorkRequest implements Serializable { @ApiModelProperty(value = "流程卡号") private String processId; @ApiModelProperty(value = "工序名称") private String reportWorkProcess; @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; } hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
@@ -2,6 +2,7 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.github.yulichang.base.MPJBaseMapper; import com.mes.largenscreen.entity.PieChartVO; import com.mes.temperingglass.entity.TemperingGlassInfo; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -30,4 +31,17 @@ "deleted = CASE WHEN #{state} < 8 THEN 0 ELSE deleted END " + "WHERE glass_id = #{glassId}") Integer updateTemperingGlassInfo(TemperingGlassInfo temperingGlassInfo); @Select("SELECT\n" + "\tround( SUM ( CASE WHEN state <> - 1 AND state <> 8 THEN 1 ELSE 0 END ), 2 ) AS oneCompletedQuantity,\n" + "\tround( SUM ( CASE WHEN state <> - 1 AND state <> 8 THEN CAST ( width AS FLOAT ) * height / 1000000 ELSE 0 END ), 2 ) AS oneCompletedArea,\n" + "\tround( SUM ( CASE WHEN state = 8 THEN 1 ELSE 0 END ), 2 ) AS oneDamageQuantity,\n" + "\tround( SUM ( CASE WHEN state = 8 THEN CAST ( width AS FLOAT ) * height / 1000000 ELSE 0 END ), 2 ) AS oneDamageArea,\n" + "\tround( SUM ( CASE WHEN state = - 1 THEN 1 ELSE 0 END ), 2 ) AS oneUncompletedQuantity,\n" + "\tround(SUM ( CASE WHEN state = - 1 THEN CAST ( width AS FLOAT ) * height / 1000000 ELSE 0 END ), 2 ) AS oneUncompletedArea \n" + "FROM\n" + "\ttempering_glass_info \n" + "WHERE\n" + "\tCONVERT ( DATE, create_time ) = CONVERT ( DATE, getdate( ) )") List<PieChartVO> queryPieChart(); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
@@ -3,6 +3,7 @@ import com.github.yulichang.base.MPJBaseService; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.entity.LoadGlassInfo; import com.mes.largenscreen.entity.PieChartVO; import com.mes.temperingglass.entity.TemperingGlassInfo; import java.util.List; @@ -60,4 +61,10 @@ GlassInfo selectTempering(GlassInfo glassInfo); List<LoadGlassInfo> selectTemperingGlass(GlassInfo glassInfo); /** * 获取钢化饼图信息 * @return */ List<PieChartVO> queryPieChart(); } hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -8,6 +8,7 @@ import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.entity.LoadGlassInfo; import com.mes.glassinfo.mapper.GlassInfoMapper; import com.mes.largenscreen.entity.PieChartVO; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.mapper.TemperingGlassInfoMapper; import com.mes.temperingglass.service.TemperingGlassInfoService; @@ -26,7 +27,7 @@ * @since 2024-04-07 */ @Service @DS("salve_northGlassMes") @DS("north_glass_mes") public class TemperingGlassInfoServiceImpl extends MPJBaseServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingGlassInfoService { @Resource TemperingGlassInfoMapper temperingMapper; @@ -167,4 +168,9 @@ // .select("engineer_id,tempering_layout_id,width,height,tempering_feed_sequence,x_coordinate,y_coordinate,angle,glass_id"); // return glassInfoMapper.selectList(wrapper); } @Override public List<PieChartVO> queryPieChart() { return baseMapper.queryPieChart(); } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
@@ -4,6 +4,7 @@ import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.entity.vo.CutDrawingVO; import com.mes.edgstoragecage.entity.vo.EdgSlotRemainVO; import com.mes.largenscreen.entity.PieChartVO; import org.apache.ibatis.annotations.Param; import org.springframework.security.core.parameters.P; @@ -24,4 +25,6 @@ List<CutDrawingVO> queryCutDrawingByEngineerId(@Param("engineerId") String engineerId, @Param("patternSequence") int patternSequence, @Param("isAll") int isAll); List<EdgSlotRemainVO> querySlotRemainWidth(@Param("cellLength") int cellLength, @Param("glassGap") int glassGap); List<PieChartVO> queryPieChart(); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
@@ -6,6 +6,7 @@ import com.mes.edgstoragecage.entity.EdgStorageCageDetails; import com.mes.edgstoragecage.entity.vo.CutDrawingVO; import com.mes.edgstoragecage.entity.vo.EdgSlotRemainVO; import com.mes.largenscreen.entity.PieChartVO; import java.util.List; import java.util.Map; @@ -99,4 +100,6 @@ String edgDetailsOperate(DamageRequest request); List<EdgSlotRemainVO> querySlotRemainWidth(int cellLength, int glassGap); List<PieChartVO> queryPieChart(); } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -26,6 +26,7 @@ import com.mes.engineering.mapper.EngineeringMapper; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.largenscreen.entity.PieChartVO; import com.mes.pp.entity.OptimizeHeatDetail; import com.mes.pp.entity.OptimizeHeatLayout; import com.mes.pp.entity.OptimizeProject; @@ -369,4 +370,9 @@ public List<EdgSlotRemainVO> querySlotRemainWidth(int cellLength, int glassGap) { return this.baseMapper.querySlotRemainWidth(cellLength, glassGap); } @Override public List<PieChartVO> queryPieChart(){ return this.baseMapper.queryPieChart(); } } hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -12,6 +12,7 @@ import com.mes.engineering.service.EngineeringService; import com.mes.largenscreen.entity.DailyProductionVO; import com.mes.largenscreen.entity.DateRequest; import com.mes.largenscreen.entity.PieChartVO; import com.mes.largenscreen.service.LargenScreenService; import com.mes.opctask.entity.EdgStorageDeviceTaskHistory; import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService; @@ -150,7 +151,7 @@ @Scheduled(fixedDelay = 1000) public void querySameDayProductionTask() { JSONObject jsonObject = new JSONObject(); DailyProductionVO productionVO = largenScreenService.querySameDayProduction(new DateRequest()); List<DailyProductionVO> productionVO = largenScreenService.querySameDayProduction(new DateRequest()); jsonObject.append("productionVO", productionVO); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreenProduction"); @@ -198,6 +199,8 @@ ); jsonObject.append("engineeringOne", engineeringOne); jsonObject.append("engineeringTwo", engineeringTow); List<PieChartVO> pieChartVOS = edgStorageCageDetailsService.queryPieChart(); jsonObject.append("pieChartVOS", pieChartVOS); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml
@@ -78,4 +78,21 @@ sum(GREATEST(width,height)+#{glassGap}) )as remain_width from edg_storage_cage_details where state = 100 group by device_id,slot </select> <select id="queryPieChart" resultType="com.mes.largenscreen.entity.PieChartVO"> SELECT round(sum( CASE WHEN e.station_cell = 5 THEN 1 ELSE 0 END ),2) as oneCompletedQuantity, round(sum( CASE WHEN e.station_cell = 5 THEN escd.width*escd.height/1000000 ELSE 0 END ),2) as oneCompletedArea, round(sum( CASE WHEN e.station_cell = 6 THEN 1 ELSE 0 END ),2) as twoCompletedQuantity, round(sum( CASE WHEN e.station_cell = 6 THEN escd.width*escd.height/1000000 ELSE 0 END ),2) as twoCompletedArea, round(sum( CASE WHEN e.station_cell = 5 and escd.device_id is null THEN 1 ELSE 0 END ),2) as oneUncompletedQuantity, round(sum( CASE WHEN e.station_cell = 5 and escd.device_id is null THEN gi.width*gi.height/1000000 ELSE 0 END ),2) as oneUncompletedArea, round(sum( CASE WHEN e.station_cell = 6 and escd.device_id is null THEN 1 ELSE 0 END ),2) as twoUncompletedQuantity, round(sum( CASE WHEN e.station_cell = 6 and escd.device_id is null THEN gi.width*gi.height/1000000 ELSE 0 END ),2) as twoUncompletedArea FROM glass_info gi left join edg_storage_cage_details escd ON gi.glass_id = escd.glass_id left join engineering e on gi.engineer_id=e.engineer_id WHERE date(e.create_time) = date(now()) </select> </mapper> hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java
@@ -3,6 +3,7 @@ import com.github.yulichang.base.MPJBaseMapper; import com.mes.bigstorage.entity.BigStorageCage; import com.mes.bigstorage.entity.dto.BigStorageSummaryDTO; import com.mes.largenscreen.entity.PieChartVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -20,6 +21,8 @@ List<Integer> queryFreeDeviceByUsed(@Param(value = "thickness") double thickness); List<BigStorageSummaryDTO> selectBigStorageSummary(); List<PieChartVO> queryPieChart(); // // List<Integer> queryFreeDeviceByNotUsed(@Param(value = "thickness") double thickness); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
@@ -7,6 +7,7 @@ import com.mes.bigstorage.entity.dto.BigStorageSummaryDTO; import com.mes.bigstorage.entity.vo.BigStorageDetailsQueryVO; import com.mes.glassinfo.entity.GlassInfo; import com.mes.largenscreen.entity.PieChartVO; import java.util.List; import java.util.Map; @@ -46,5 +47,7 @@ Boolean resetCage(); List<PieChartVO> queryPieChart(); // List<Integer> queryFreeDeviceByNotUsed(double thickness); } hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
@@ -19,6 +19,7 @@ import com.mes.common.config.Const; import com.mes.glassinfo.entity.GlassInfo; import com.mes.glassinfo.service.GlassInfoService; import com.mes.largenscreen.entity.PieChartVO; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.service.TemperingGlassInfoService; import lombok.extern.slf4j.Slf4j; @@ -321,6 +322,11 @@ return Boolean.TRUE; } @Override public List<PieChartVO> queryPieChart() { return baseMapper.queryPieChart(); } // @Override // public List<Integer> queryFreeDeviceByNotUsed(double thickness) { // return baseMapper.queryFreeDeviceByNotUsed(thickness); hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
@@ -13,6 +13,7 @@ import com.mes.bigstoragecagetask.service.BigStorageCageTaskService; import com.mes.common.config.Const; import com.mes.glassinfo.service.GlassInfoService; import com.mes.largenscreen.entity.PieChartVO; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.temperingglass.service.TemperingGlassInfoService; import com.mes.tools.WebSocketServer; @@ -210,6 +211,8 @@ //理片笼使用情况 List<Map<String, Object>> bigStorageCageUsage = bigStorageCageService.selectBigStorageCageUsage(); jsonObject.append("bigStorageCageUsage", bigStorageCageUsage); List<PieChartVO> pieChartVOS = bigStorageCageService.queryPieChart(); jsonObject.append("pieChartVOS", pieChartVOS); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml
@@ -64,7 +64,23 @@ countSlot DESC, thickness DESC </select> <select id="queryPieChart" resultType="com.mes.largenscreen.entity.PieChartVO"> SELECT round(sum( CASE WHEN e.station_cell = 5 THEN 1 ELSE 0 END ),2) as oneCompletedQuantity, round(sum( CASE WHEN e.station_cell = 5 THEN bscd.width*bscd.height/1000000 ELSE 0 END ),2) as oneCompletedArea, round(sum( CASE WHEN e.station_cell = 6 THEN 1 ELSE 0 END ),2) as twoCompletedQuantity, round(sum( CASE WHEN e.station_cell = 6 THEN bscd.width*bscd.height/1000000 ELSE 0 END ),2) as twoCompletedArea, round(sum( CASE WHEN e.station_cell = 5 and bscd.device_id is null THEN 1 ELSE 0 END ),2) as oneUncompletedQuantity, round(sum( CASE WHEN e.station_cell = 5 and bscd.device_id is null THEN gi.width*gi.height/1000000 ELSE 0 END ),2) as oneUncompletedArea, round(sum( CASE WHEN e.station_cell = 6 and bscd.device_id is null THEN 1 ELSE 0 END ),2) as twoUncompletedQuantity, round(sum( CASE WHEN e.station_cell = 6 and bscd.device_id is null THEN gi.width*gi.height/1000000 ELSE 0 END ),2) as twoUncompletedArea FROM glass_info gi left join big_storage_cage_details bscd ON gi.glass_id = bscd.glass_id left join engineering e on gi.engineer_id=e.engineer_id WHERE date(e.create_time) = date(now()) </select> <!-- <select id="queryFreeDeviceByNotUsed" resultType="java.lang.Integer">--> hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -7,6 +7,7 @@ import com.mes.damage.entity.Damage; import com.mes.damage.service.DamageService; import com.mes.engineering.entity.Engineering; import com.mes.largenscreen.entity.PieChartVO; import com.mes.temperingglass.service.TemperingGlassInfoService; import com.mes.temperingglass.entity.TemperingGlassInfo; import com.mes.tools.WebSocketServer; @@ -128,6 +129,9 @@ .groupBy(TemperingGlassInfo::getEngineerId, TemperingGlassInfo::getTemperingLayoutId) // 按 engineerId 和 temperingLayoutId 分组 ); jsonObject.append("temperingGlassInfoInList", temperingGlassInfoInList.size()); //钢化饼图数据 List<PieChartVO> pieChartVOS = temperingAgoService.queryPieChart(); jsonObject.append("pieChartVOS", pieChartVOS); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassOutRelationInfoMapper.java
@@ -3,7 +3,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mes.hollow.entity.HollowGlassOutRelationInfo; import com.mes.hollow.entity.dto.OrderDTO; import com.mes.largenscreen.entity.PieChartVO; import org.apache.ibatis.annotations.Param; import java.util.List; /** * (HollowGlassOutRelationInfo)表数据库访问层 @@ -14,5 +17,7 @@ public interface HollowGlassOutRelationInfoMapper extends BaseMapper<HollowGlassOutRelationInfo> { OrderDTO queryOrderByFlowCardId(@Param("flowCardId") String flowCardId); List<PieChartVO> queryPieChart(); } hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassOutRelationInfoService.java
@@ -6,6 +6,7 @@ import com.mes.hollow.entity.request.HollowHistoryTaskRequest; import com.mes.hollow.entity.request.HollowTaskRequest; import com.mes.hollowqueue.entity.HollowGlassQueueInfo; import com.mes.largenscreen.entity.PieChartVO; import java.io.IOException; import java.util.List; @@ -39,5 +40,7 @@ String generateHollowLisecFile(String flowCardId, int cell, int isForce, int isOut) throws IOException; Page<HollowGlassOutRelationInfo> queryHollowHistoryTask(HollowHistoryTaskRequest request); List<PieChartVO> queryPieChart(); } hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java
@@ -23,6 +23,7 @@ import com.mes.hollow.service.HollowGlassRelationInfoService; import com.mes.hollowqueue.entity.HollowGlassQueueInfo; import com.mes.hollowqueue.service.HollowGlassQueueInfoService; import com.mes.largenscreen.entity.PieChartVO; import com.mes.tools.DateUtil; import com.mes.utils.Blank; import com.mes.utils.RedisUtil; @@ -425,5 +426,10 @@ queueInfo.setUpdateTime(new Date()); return queueInfo; } @Override public List<PieChartVO> queryPieChart(){ return baseMapper.queryPieChart(); } } hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -19,6 +19,7 @@ import com.mes.hollow.service.HollowGlassRelationInfoService; import com.mes.hollowqueue.entity.HollowGlassQueueInfo; import com.mes.hollowqueue.service.HollowGlassQueueInfoService; import com.mes.largenscreen.entity.PieChartVO; import com.mes.tools.WebSocketServer; import com.mes.utils.RedisUtil; import lombok.extern.slf4j.Slf4j; @@ -226,6 +227,9 @@ //理片笼使用情况 List<Map<String, Object>> hollowBigStorageCageUsage = hollowBigStorageCageService.selectBigStorageCageUsage(); jsonObject.append("hollowBigStorageCageUsage", hollowBigStorageCageUsage); //钢化饼图数据 List<PieChartVO> pieChartVOS = hollowGlassOutRelationInfoService.queryPieChart(); jsonObject.append("pieChartVOS", pieChartVOS); ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("largenScreen"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassOutRelationInfoMapper.xml
@@ -10,4 +10,33 @@ where t.process_id = #{flowCardId} limit 1 </select> <select id="queryPieChart" resultType="com.mes.largenscreen.entity.PieChartVO"> SELECT round( sum( CASE WHEN hgori.cell = 930 AND hgqi.state = 0 THEN 1 ELSE 0 END ), 2 ) AS oneCompletedQuantity, round( sum( CASE WHEN hgori.cell = 930 AND hgqi.state = 0 THEN hgqi.width * hgqi.height / 1000000 ELSE 0 END ), 2 ) AS oneCompletedArea, round( sum( CASE WHEN hgori.cell = 931 AND hgqi.state = 0 THEN 1 ELSE 0 END ), 2 ) AS twoCompletedQuantity, round( sum( CASE WHEN hgori.cell = 931 AND hgqi.state = 0 THEN hgqi.width * hgqi.height / 1000000 ELSE 0 END ), 2 ) AS twoCompletedArea, round( sum( CASE WHEN hgori.cell = 930 AND hgqi.state =- 1 THEN 1 ELSE 0 END ), 2 ) AS oneUncompletedQuantity, round( sum( CASE WHEN hgori.cell = 930 AND hgqi.state =- 1 THEN hgqi.width * hgqi.height / 1000000 ELSE 0 END ), 2 ) AS oneUncompletedArea, round( sum( CASE WHEN hgori.cell = 931 AND hgqi.state =- 1 THEN 1 ELSE 0 END ), 2 ) AS twoUncompletedQuantity, round( sum( CASE WHEN hgori.cell = 931 AND hgqi.state =- 1 THEN hgqi.width * hgqi.height / 1000000 ELSE 0 END ), 2 ) AS twoUncompletedArea FROM hollow_glass_out_relation_info hgori INNER JOIN hollow_glass_queue_info hgqi ON hgori.formula_id = hgqi.relation_id WHERE date( hgori.create_time ) = date( now()) </select> </mapper>