Merge branch 'master' of http://10.153.19.25:10105/r/YiWuProject
| | |
| | | createTime: 'Return date', |
| | | }, |
| | | large: { |
| | | Productionsituation:'Production situation', |
| | | Productionandoperationstatus:'Production and operation status', |
| | | cuttingState:'Operation status on the day of cutting', |
| | | edgingState:'Operation status on the day of edge grinding', |
| | | temperingState:'Operation status of tempered steel on the day of tempering', |
| | | hollowState:'Production and operation status of hollow on the same day', |
| | | switch: 'Switch', |
| | | running: 'Running', |
| | | stopping:'Stopping', |
| | | diffMinutes:'diffMinutes', |
| | | loadstart:'Load start', |
| | | loadend:'Load end', |
| | | loadtotal: 'Load total', |
| | |
| | | createTime :'返库日期', |
| | | }, |
| | | large:{ |
| | | Productionsituation:'生产情况', |
| | | Productionandoperationstatus:'生产运行情况', |
| | | cuttingState:'切割当天运行情况', |
| | | edgingState:'磨边当天运行情况', |
| | | temperingState:'钢化当天运行情况', |
| | | hollowState:'中空当天运行情况', |
| | | switch:'切换', |
| | | running:'运行中', |
| | | stopping:'停止中', |
| | | diffMinutes:'分钟', |
| | | loadstart:'切割开始时间', |
| | | loadend:'切割结束时间', |
| | | loadtotal: '切割总时间', |
| | |
| | | }, |
| | | ] |
| | | }, |
| | | { |
| | | path: '/timeaxis', |
| | | name: 'timeaxis', |
| | | component: () => import('../views/largescreendisplay/timeaxis.vue'), |
| | | children: [ |
| | | { |
| | | path: '/largescreendisplay/timeaxis', |
| | | name: 'timeaxis', |
| | | component: () => import('../views/largescreendisplay/timeaxis.vue') |
| | | }, |
| | | ] |
| | | } |
| | | ] |
| | | }) |
| | | // 导航守卫 |
| | |
| | | numBoxes2.value = edgTwoTasks.value.length; |
| | | initBoxes(boxes2, numBoxes2, 'firstup'); |
| | | } |
| | | timeAxisCreate("切割当天运行情况", chartLoad.value, myChartLoad, data.loadRunTimes[0]); |
| | | timeAxisCreate("磨边当天运行情况", chartEdg.value, myChartEdg, data.loadRunTimes[0]); |
| | | timeAxisCreate(t('large.cuttingState'), chartLoad.value, myChartLoad, tableDataTime(false, data.loadRunTimes[0])); |
| | | timeAxisCreate(t('large.edgingState'), chartEdg.value, myChartEdg, tableDataTime(false, data.loadRunTimes[0])); |
| | | |
| | | |
| | | }; |
| | | let socket2 = null; |
| | | const temperingTaskType = ref([]) |
| | |
| | | const socketUrl3 = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/largenScreen`; |
| | | const handleMessage3 = (data) => { |
| | | bigStorageCageUsage.value = data.bigStorageCageUsage[0]; |
| | | timeAxisCreate("钢化当天运行情况", chartTemp.value, myChartTemp, data.tempRunTimes[0]); |
| | | timeAxisCreate(t('large.temperingState'), chartTemp.value, myChartTemp, tableDataTime(false, data.tempRunTimes[0])); |
| | | }; |
| | | // let mychart = null; // 建议设为外部变量避免重复初始化 |
| | | |
| | |
| | | const seconds = date.getSeconds().toString().padStart(2, '0'); |
| | | return `${hours}:${minutes}:${seconds}`; |
| | | } |
| | | |
| | | const tableDataTime = (result, tableDatax) => { |
| | | const tableData = []; |
| | | if (tableDatax.length > 0) { |
| | | tableDatax.forEach((item, index) => { |
| | | tableData.push({ |
| | | firstTimestamp: index == 0 ? item.startTimestamp : tableDatax[index - 1].secondTimestamp, |
| | | secondTimestamp: index == tableDatax.length - 1 ? item.endTimestamp : item.firstTimestamp, |
| | | diffMinutes: item.diffMinutes, |
| | | startTimestamp: item.startTimestamp, |
| | | endTimestamp: item.endTimestamp, |
| | | state: 1 |
| | | }); |
| | | if (result) { |
| | | tableData.push({ |
| | | firstTimestamp: item.firstTimestamp, |
| | | secondTimestamp: item.secondTimestamp, |
| | | diffMinutes: item.diffMinutes, |
| | | startTimestamp: item.startTimestamp, |
| | | endTimestamp: item.endTimestamp, |
| | | state: 2 |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | return tableData; |
| | | }; |
| | | |
| | | const timeAxisCreate = (title, chartDom, mychart, RunTimes) => { |
| | | if (!chartDom) { |
| | |
| | | secondTime = RunTimes[0].endTimestamp; |
| | | } |
| | | |
| | | let datas = ref([]) |
| | | RunTimes.forEach((item, index) => { |
| | | // if (index % 2 === 0) { |
| | | datas.value.push([item.firstTimestamp, -1, formatToTimeString(item.firstTimestamp)]) |
| | | datas.value.push([item.secondTimestamp, 1, formatToTimeString(item.secondTimestamp)]) |
| | | // } else { |
| | | // datas.value.push([item.firstTimestamp, -1, item.diffMinutes]) |
| | | // datas.value.push([item.firstTimestamp, -1, item.diffMinutes]) |
| | | // } |
| | | }) |
| | | // console.log(D) |
| | | // 构建线段数组 |
| | | const segments = RunTimes.map(item => ({ |
| | | type: 'line', |
| | | symbol: 'none', |
| | | data: [ |
| | | [item.firstTimestamp, 0], |
| | | [item.secondTimestamp, 0] |
| | | { |
| | | value: [item.firstTimestamp, 0], |
| | | extra: { |
| | | start: item.firstTimestamp, |
| | | end: item.secondTimestamp |
| | | } |
| | | }, |
| | | { |
| | | value: [item.secondTimestamp, 0], |
| | | extra: { |
| | | start: item.firstTimestamp, |
| | | end: item.secondTimestamp |
| | | } |
| | | } |
| | | ], |
| | | lineStyle: { |
| | | color: 'red', // 支持不同颜色 |
| | |
| | | trigger: 'axis', |
| | | axisPointer: { type: 'line' }, |
| | | backgroundColor: 'rgba(50,50,50,0.7)', |
| | | textStyle: { color: '#fff' } |
| | | textStyle: { color: '#fff' }, |
| | | formatter: (params) => { |
| | | const items = params |
| | | .map(p => { |
| | | const start = p.data?.extra?.start; |
| | | const end = p.data?.extra?.end; |
| | | const timeStr = p.axisValueLabel; |
| | | if (start && end) { |
| | | return `开始时间:${start}<br/>结束时间:${end}`; |
| | | } |
| | | return `时间:${timeStr}`; |
| | | }) |
| | | .filter(Boolean); |
| | | return items.join('<br/>'); |
| | | } |
| | | }, |
| | | grid: { |
| | | top: '20%', |
| | |
| | | ], |
| | | lineStyle: { |
| | | color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ |
| | | { offset: 0, color: '#4facfe' }, |
| | | { offset: 1, color: '#00f2fe' } |
| | | { offset: 0, color: 'red' }, |
| | | { offset: 1, color: 'red' } |
| | | ]), |
| | | width: 5, |
| | | shadowColor: 'rgba(0,0,0,0.2)', |
| | |
| | | ...segments.map(seg => ({ |
| | | ...seg, |
| | | lineStyle: { |
| | | color: '#ffcc00', |
| | | color: '#4facfe', |
| | | width: 3, |
| | | shadowColor: 'rgba(255,204,0,0.5)', |
| | | shadowBlur: 5 |
| | | } |
| | | })), |
| | | // 卡片事件(优化样式) |
| | | { |
| | | type: 'custom', |
| | | renderItem: function (params, api) { |
| | | const x = api.coord([api.value(0), api.value(1)])[0]; |
| | | const yBase = api.coord([api.value(0), 0])[1]; |
| | | const yOffset = api.value(1) > 0 ? -70 : 30; |
| | | const cardWidth = 40; |
| | | const cardHeight = 22; |
| | | const cardX = x; |
| | | const cardY = yBase + yOffset; |
| | | const text = api.value(2); |
| | | |
| | | return { |
| | | type: 'group', |
| | | children: [ |
| | | { |
| | | type: 'line', |
| | | shape: { |
| | | x1: x, |
| | | y1: yBase, |
| | | x2: x, |
| | | y2: cardY + (api.value(1) > 0 ? cardHeight : 0) |
| | | }, |
| | | style: { |
| | | stroke: '#888', |
| | | lineWidth: 1.5, |
| | | lineDash: [4, 2] |
| | | } |
| | | }, |
| | | { |
| | | type: 'rect', |
| | | shape: { |
| | | x: cardX - cardWidth / 2, |
| | | y: cardY, |
| | | width: cardWidth, |
| | | height: cardHeight, |
| | | r: 6 // 圆角 |
| | | }, |
| | | style: { |
| | | fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ |
| | | { offset: 0, color: '#ffffff' }, |
| | | { offset: 1, color: '#e0f7fa' } |
| | | ]), |
| | | stroke: '#00acc1', |
| | | lineWidth: 1, |
| | | shadowColor: '#ccc', |
| | | shadowBlur: 6 |
| | | } |
| | | }, |
| | | { |
| | | type: 'text', |
| | | style: { |
| | | text: text, |
| | | x: cardX, |
| | | y: cardY + cardHeight / 2, |
| | | textAlign: 'center', |
| | | textVerticalAlign: 'middle', |
| | | font: '12px sans-serif', |
| | | fill: '#006064' |
| | | } |
| | | } |
| | | ] |
| | | }; |
| | | }, |
| | | encode: { |
| | | x: 0 |
| | | }, |
| | | data: datas.value, |
| | | z: 10 |
| | | } |
| | | ] |
| | | }; |
| | | |
| | |
| | | const socketUrl4 = `ws://${WebSocketHost}:${host}/api/hollowGlass/api/talk/largenScreen`; |
| | | const handleMessage4 = (data) => { |
| | | hollowBigStorageCageUsage.value = data.hollowBigStorageCageUsage[0]; |
| | | timeAxisCreate("中空当天运行情况", chartHollow.value, myChartHollow, data.hollowRunTimes[0]); |
| | | timeAxisCreate(t('large.hollowState'), chartHollow.value, myChartHollow, tableDataTime(false, data.hollowRunTimes[0])); |
| | | }; |
| | | let socket5 = null; |
| | | let myChart = null; |
| | |
| | | console.error('图表容器未找到'); |
| | | return; |
| | | } |
| | | // myChart = echarts.init(chartDom); |
| | | if (!myChart) { |
| | | myChart = echarts.init(chartDom); |
| | | } |
| | | // else { |
| | | // myChart.clear(); |
| | | // } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | const option = { |
| | |
| | | }; |
| | | |
| | | myChart.setOption(option); |
| | | |
| | | |
| | | const chartDom2 = chartRef2.value; |
| | | if (!chartDom2) { |
| | |
| | | |
| | | const exportToExcel = async () => { |
| | | try { |
| | | window.open('http://'+{WebSocketHost}+':10011/largenScreen/exportDailyProduction', '_blank'); |
| | | window.open('http://' + { WebSocketHost } + ':10011/largenScreen/exportDailyProduction', '_blank'); |
| | | // const response = await request.get('/cacheGlass/largenScreen/exportDailyProduction'); |
| | | // if (response.code == 200) { |
| | | // ElMessage.success(response.message); |
| | |
| | | orderDTOS.value = orderDTOS.value.slice(-MAX_ITEMS); |
| | | // ...其他数组 |
| | | } |
| | | |
| | | |
| | | // 清理图表 |
| | | [myChart, myChart2, myChartLoad, myChartEdg, myChartTemp, myChartHollow].forEach(chart => { |
| | | if (chart) { |
| | |
| | | |
| | | const cleanupInterval = setInterval(() => { |
| | | cleanupWebSocketData(true); // 完全清理 |
| | | }, 3000); |
| | | |
| | | }, 300000); |
| | | |
| | | // 每次收到消息时检查数据量 |
| | | const originalHandleMessage = handleMessage; |
| | | handleMessage = (data) => { |
| | | originalHandleMessage(data); |
| | | cleanupWebSocketData(false); // 部分清理 |
| | | }; |
| | | |
| | | |
| | | onUnmounted(() => { |
| | | clearInterval(cleanupInterval); |
| | | cleanupWebSocketData(true); // 组件卸载时完全清理 |
| | |
| | | if (box.frameCount % 2 === 0 && box.el) { |
| | | box.el.style.top = `${box.y}px`; |
| | | if (box.x > 0) { |
| | | |
| | | if(box.direction=="right"){ |
| | | |
| | | if (box.direction == "right") { |
| | | box.el.style.right = `-${box.x}px`; |
| | | |
| | | }else{ |
| | | |
| | | } else { |
| | | box.el.style.right = `${box.x}px`; |
| | | } |
| | | box.el.style.left = ''; |
| | |
| | | iframe11.value = true; |
| | | iframeUrl11.value = `${window.location.origin}/#/largescreendisplay/productionstatistics`; |
| | | }; |
| | | |
| | | const iframeUrl12 = ref(''); |
| | | const iframe12 = ref(false); |
| | | const handlehistorical12 = (key) => { |
| | | iframe12.value = true; |
| | | const params = new URLSearchParams({ |
| | | key: key, |
| | | }); |
| | | iframeUrl12.value = `${window.location.origin}/#/largescreendisplay/timeaxis?${params.toString()}`; |
| | | }; |
| | | |
| | | const transposedData = computed(() => { |
| | | const keys = Object.keys(fieldNames); // 按 fieldNames 的顺序 |
| | | return keys.map(key => { |
| | |
| | | frameborder="0"></iframe> |
| | | </el-dialog> |
| | | <el-dialog v-model="iframe10" top="5vh" width="95%" @close="iframeUrl10 = ''"> |
| | | <iframe :src="iframeUrl10" marginwidth="2000px" marginheight="2000px" width="100%" height="750px" |
| | | frameborder="0"></iframe> |
| | | <iframe :src="iframeUrl10" marginwidth="2000px" marginheight="2000px" width="100%" |
| | | height="700px" frameborder="0"></iframe> |
| | | </el-dialog> |
| | | <el-dialog v-model="iframe11" top="5vh" width="95%" @close="iframeUrl11 = ''"> |
| | | <iframe :src="iframeUrl11" marginwidth="2000px" marginheight="2000px" width="100%" height="750px" |
| | | frameborder="0"></iframe> |
| | | </el-dialog> |
| | | |
| | | <el-dialog v-model="iframe12" top="5vh" width="95%" @close="iframeUrl12 = ''"> |
| | | <iframe :src="iframeUrl12" marginwidth="2000px" marginheight="2000px" width="100%" height="750px" |
| | | frameborder="0"></iframe> |
| | | </el-dialog> |
| | | <div class="awatch" style="display: flex;"> |
| | | <!-- 生产统计 --> |
| | | <div style="height: 100px;width: 25%;float: right;"> |
| | |
| | | <div ref="chartRef" style="width: 600px; height: 400px;" @dblclick="handlehistorical10()"></div> |
| | | </div> |
| | | <div style="width: 100%;height: 245px;display: flex;"> |
| | | <div ref="chartLoad" style="width: 100%;"></div> |
| | | <div ref="chartLoad" style="width: 100%;" @dblclick="handlehistorical12(1)"></div> |
| | | </div> |
| | | <div style="width: 100%;height: 245px;display: flex;"> |
| | | <div ref="chartEdg" style="width: 100%;"></div> |
| | | <div ref="chartEdg" style="width: 100%;" @dblclick="handlehistorical12(2)"></div> |
| | | </div> |
| | | </div> |
| | | <div style="width: 50%;"> |
| | |
| | | <div ref="chartRef2" style="width: 600px; height: 400px;" @dblclick="handlehistorical10()"></div> |
| | | </div> |
| | | <div style="width: 100%;height: 245px;display: flex;"> |
| | | <div ref="chartTemp" style="width: 100%;"></div> |
| | | <div ref="chartTemp" style="width: 100%;" @dblclick="handlehistorical12(3)"></div> |
| | | </div> |
| | | <div style="width: 100%;height: 245px;display: flex;"> |
| | | <div ref="chartHollow" style="width: 100%;"></div> |
| | | <div ref="chartHollow" style="width: 100%;" @dblclick="handlehistorical12(4)"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="sethistorical()">{{ |
| | | $t('reportmanage.inquire') }}</el-button> |
| | | <el-button type="primary" @click="exportToExcel">{{$t('large.ExporttoExcel')}}</el-button> |
| | | <el-button type="primary" @click="showchart=!showchart" style="margin-left: 10px;">{{ $t('large.switch') }}</el-button> |
| | | </div> |
| | | <el-table ref="table" style="margin-top: 20px;height: 580px;width: 1770px;" :data="tableDatax" |
| | | <el-table v-show="!showchart" ref="table" style="margin-top: 20px;height: 580px;width: 1770px;" :data="tableDatax" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="date" align="center" :label="$t('large.date')" min-width="70" /> |
| | | <el-table-column prop="countOutOne" align="center" :label="$t('large.countOutOne')" min-width="40" /> |
| | |
| | | <el-table-column prop="hollowTotalAreaOutTwo" align="center" :label="$t('large.hollowTotalAreaOutTwo')" |
| | | min-width="40" /> |
| | | </el-table> |
| | | <div style="margin-top: 20px;margin-left: 40%;"> |
| | | <div v-show="!showchart" style="margin-top: 20px;margin-left: 40%;"> |
| | | <el-pagination v-model:current-page="currentPage2" :page-size="pageSize" :size="large" :disabled="disabled" |
| | | layout="prev, pager, next, jumper" :total="totalRecords" @current-change="handlePageChange2" |
| | | style="margin-top: 10px;" /> |
| | | </div> |
| | | <div v-show="showchart" id="ss" style="width: 100%; display: flex; justify-content: center;"> |
| | | <div ref="chartRef" style="width: 1770px; height: 320px;"></div> |
| | | </div> |
| | | <div v-show="showchart" id="ss" style="width: 100%; display: flex; justify-content: center;"> |
| | | <div ref="chartRef2" style="width: 1770px; height: 320px;"></div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | import { useRouter } from "vue-router" |
| | | import request from "@/utils/request" |
| | | import { host, WebSocketHost } from '@/utils/constants' |
| | | import { onBeforeUnmount, onMounted, onUnmounted, reactive, ref } from "vue"; |
| | | import { onBeforeUnmount, onMounted, onUnmounted, reactive, ref , nextTick} from "vue"; |
| | | import { closeWebSocket, initializeWebSocket } from '@/utils/WebSocketService'; |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import * as echarts from 'echarts'; |
| | | const { t } = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | import { inject } from 'vue'; |
| | |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | createchart(tableDatax); |
| | | totalRecords.value = response.data.total / 2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | createchart(tableDatax); |
| | | totalRecords.value = response.data.total / 2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | |
| | | })); |
| | | // tableDatax.value = response.data.records; |
| | | tableDatax.value = formattedData; |
| | | createchart(tableDatax); |
| | | totalRecords.value = response.data.total / 2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | |
| | | // 导出为文件 |
| | | const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); |
| | | const blob = new Blob([excelBuffer], { type: 'application/octet-stream' }); |
| | | saveAs(blob, '生产情况导出.xlsx'); |
| | | saveAs(blob, t('large.Productionsituation')); |
| | | }; |
| | | 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([]); |
| | | let myChart = null; |
| | | let myChart2 = null; |
| | | const chartRef = ref(null) |
| | | const chartRef2 = ref(null) |
| | | const showchart = ref(false) |
| | | const createchart = (productionVO) => { |
| | | 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; |
| | | } |
| | | if (!myChart) { |
| | | 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; |
| | | } |
| | | // myChart2 = echarts.init(chartDom2); |
| | | if (!myChart2) { |
| | | myChart2 = echarts.init(chartDom2); |
| | | } |
| | | // else { |
| | | // myChart2.clear(); |
| | | // } |
| | | 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); |
| | | } |
| | | |
| | | |
| | | |
| | | </script> |
| | | <style scoped></style> |
New file |
| | |
| | | <template> |
| | | <div> |
| | | <div style="display: flex;width: 1770px;justify-content: center;"> |
| | | <el-date-picker v-model="timeRange[1]" type="date" :placeholder="$t('reportmanage.starttime')" |
| | | value-format="YYYY-MM-DD" style="margin-left: 15px;"> |
| | | </el-date-picker> |
| | | |
| | | <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="sethistorical()">{{ |
| | | $t('reportmanage.inquire') }}</el-button> |
| | | <el-button type="primary" @click="exportToExcel">{{ $t('large.ExporttoExcel') }}</el-button> |
| | | </div> |
| | | <div style="width: 100%;height: 20%;display: flex;justify-content: center;"> |
| | | <div ref="chart" style="width: 100%;"></div> |
| | | </div> |
| | | <el-table ref="table" style="margin-top: 20px;height: 500px;width: 100%;" :data="tableDataTime(true)" |
| | | :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }"> |
| | | <el-table-column prop="firstTimestamp" align="center" :label="$t('large.starttime')" min-width="70" /> |
| | | <el-table-column prop="secondTimestamp" align="center" :label="$t('large.endtime')" min-width="70" /> |
| | | <!-- <el-table-column prop="diffMinutes" align="center" :label="$t('large.diffMinutes')" min-width="70" /> --> |
| | | <el-table-column prop="state" align="center" :label="$t('large.warehousing')" min-width="70"> |
| | | <template #default="scope"> |
| | | <span v-if="scope.row.state === 1">{{ $t('large.running') }}</span> |
| | | <span v-else>{{ $t('large.stopping') }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <!-- <div style="margin-top: 20px;margin-left: 40%;"> |
| | | <el-pagination v-model:current-page="currentPage2" :page-size="pageSize" :size="large" :disabled="disabled" |
| | | layout="prev, pager, next, jumper" :total="totalRecords" @current-change="handlePageChange2" |
| | | style="margin-top: 10px;" /> |
| | | </div> --> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import { useI18n } from 'vue-i18n' |
| | | import { useRouter, useRoute } from "vue-router" |
| | | import request from "@/utils/request" |
| | | import { host, WebSocketHost } from '@/utils/constants' |
| | | import { onBeforeUnmount, onMounted, onUnmounted, reactive, ref } from "vue"; |
| | | import { closeWebSocket, initializeWebSocket } from '@/utils/WebSocketService'; |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import * as echarts from 'echarts'; |
| | | import { inject } from 'vue'; |
| | | const { t } = useI18n() |
| | | let language = ref(localStorage.getItem('lang') || 'zh') |
| | | const globalDate = inject('globalDate'); |
| | | const router = useRoute() |
| | | const key = router.query.key; |
| | | const timeRange = ref([]) |
| | | const selectValuesa = reactive([]); |
| | | const tableDatax = ref([]) |
| | | const currentPage2 = ref(1) |
| | | const totalRecords = ref(0) |
| | | const rawGlassHeight = ref(''); |
| | | const rawGlassThickness = ref(''); |
| | | const rawGlassWidth = ref(''); |
| | | const rawGlassfilmsId = ref(''); |
| | | const slot = ref(''); |
| | | let getglobalDate = window.localStorage.getItem('getglobalDate') |
| | | const historical = async () => { |
| | | try { |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.get("/cacheGlass/edgStorageDeviceTaskHistory/queryRunTimes?days=" + timeRange.value[1]) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | // const formattedData = response.data.records.map(record => ({ |
| | | // ...record, |
| | | // formattedCreateTime: formatTimestamp(record.createTime), |
| | | // formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | // })); |
| | | tableDatax.value = response.data; |
| | | timeAxisCreate("", chart.value, myChart, tableDataTime(false)); |
| | | // tableDatax.value = formattedData; |
| | | // totalRecords.value = response.data.total / 2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | const handlePageChange2 = (newPage) => { |
| | | currentPage2.value = newPage; |
| | | window.localStorage.setItem('pagenumber', currentPage2.value) |
| | | historicala(currentPage2.value); |
| | | }; |
| | | |
| | | const tableDataTime = (result) => { |
| | | const tableData = []; |
| | | if (tableDatax.value.length > 0) { |
| | | tableDatax.value.forEach((item, index) => { |
| | | tableData.push({ |
| | | firstTimestamp: index == 0 ? item.startTimestamp : tableDatax.value[index - 1].secondTimestamp, |
| | | secondTimestamp: index == tableDatax.length - 1 ? item.endTimestamp : item.firstTimestamp, |
| | | diffMinutes: item.diffMinutes, |
| | | startTimestamp: item.startTimestamp, |
| | | endTimestamp: item.endTimestamp, |
| | | state: 1 |
| | | }); |
| | | if (result) { |
| | | tableData.push({ |
| | | firstTimestamp: item.firstTimestamp, |
| | | secondTimestamp: item.secondTimestamp, |
| | | diffMinutes: item.diffMinutes, |
| | | startTimestamp: item.startTimestamp, |
| | | endTimestamp: item.endTimestamp, |
| | | state: 2 |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | return tableData; |
| | | }; |
| | | |
| | | |
| | | const historicala = async (page) => { |
| | | try { |
| | | let pslot = '' |
| | | let celllist = [] |
| | | if (selectValuesa[0] != null && selectValuesa[0] != 'undefined') { |
| | | if (selectValuesa[0] != "") { |
| | | celllist = [selectValuesa[0]]; |
| | | } |
| | | } |
| | | if (slot.value != "") { |
| | | pslot = slot.value |
| | | } else { |
| | | pslot = '0' |
| | | } |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | const response = await request.get("/cacheGlass/edgStorageDeviceTaskHistory/queryRunTimes?days=" + timeRange.value[1]) |
| | | if (response.code == 200) { |
| | | ElMessage.success(response.message); |
| | | // const formattedData = response.data.records.map(record => ({ |
| | | // ...record, |
| | | // formattedCreateTime: formatTimestamp(record.createTime), |
| | | // formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | // })); |
| | | tableDatax.value = response.data; |
| | | timeAxisCreate("", chart.value, myChart, tableDataTime(false)); |
| | | // tableDatax.value = formattedData; |
| | | // totalRecords.value = response.data.total / 2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 历史查询点击 |
| | | const sethistorical = async () => { |
| | | try { |
| | | let pslot = '' |
| | | let celllist = [] |
| | | if (selectValuesa[0] != null && selectValuesa[0] != 'undefined') { |
| | | if (selectValuesa[0] != "") { |
| | | celllist = [selectValuesa[0]]; |
| | | } |
| | | } |
| | | if (slot.value != "") { |
| | | pslot = slot.value |
| | | } else { |
| | | pslot = '0' |
| | | } |
| | | let startTime = window.localStorage.getItem('startTime') |
| | | let page = window.localStorage.getItem('pagenumber') |
| | | const response = await request.get("/cacheGlass/edgStorageDeviceTaskHistory/queryRunTimes?days=" + timeRange.value[1]) |
| | | if (response.code == 200) { |
| | | currentPage2.value = 1 |
| | | ElMessage.success(response.message); |
| | | // const formattedData = response.data.records.map(record => ({ |
| | | // ...record, |
| | | // formattedCreateTime: formatTimestamp(record.createTime), |
| | | // formattedUpdateTime: formatTimestamp(record.updateTime), |
| | | // })); |
| | | tableDatax.value = response.data; |
| | | timeAxisCreate("", chart.value, myChart, tableDataTime(false)); |
| | | // tableDatax.value = formattedData; |
| | | // totalRecords.value = response.data.total / 2 || 0 |
| | | } else { |
| | | ElMessage.error(response.message); |
| | | } |
| | | } |
| | | catch (error) { |
| | | console.error(error); |
| | | } |
| | | } |
| | | // 格式化时间戳为年月日时间字符串的函数 |
| | | function formatTimestamp(timestamp) { |
| | | const date = new Date(timestamp); |
| | | const year = date.getFullYear(); |
| | | const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并补零 |
| | | const day = String(date.getDate()).padStart(2, '0'); // 补零 |
| | | const hours = String(date.getHours()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const minutes = String(date.getMinutes()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | const seconds = String(date.getSeconds()).padStart(2, '0'); // 补零(如果需要显示时间) |
| | | // return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |
| | | return `${year}-${month}-${day}`; |
| | | } |
| | | // 格式化后端时间并计算一周前的时间 |
| | | const defaultTime = ref<[Date, Date]>([new Date(), new Date()]); |
| | | function parseAndSetTime() { |
| | | const backendTime = new Date(getglobalDate); |
| | | const oneWeekAgo = new Date(backendTime.getTime() - 7 * 24 * 60 * 60 * 1000); // 减去7天 |
| | | oneWeekAgo.setHours(0, 0, 0, 0); |
| | | backendTime.setHours(0, 0, 0, 0); |
| | | timeRange.value = [formatTimestamp(oneWeekAgo), formatTimestamp(backendTime)]; |
| | | window.localStorage.setItem('startTime', formatTimestamp(oneWeekAgo)) |
| | | } |
| | | |
| | | function getStatusTypeb(taskState: number) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return 'primary'; |
| | | case 1: |
| | | return 'success'; |
| | | case 2: |
| | | return 'info'; |
| | | } |
| | | } |
| | | function getStatusTextb(taskState: number) { |
| | | switch (taskState) { |
| | | case 0: |
| | | return t('searchOrder.empty'); |
| | | case 1: |
| | | return t('film.execution'); |
| | | case 2: |
| | | return t('searchOrder.endtask'); |
| | | } |
| | | } |
| | | function getStatusTypea(taskRunning: number) { |
| | | switch (taskRunning) { |
| | | case 0: |
| | | return 'primary'; |
| | | case 1: |
| | | return 'success'; |
| | | } |
| | | } |
| | | onMounted(() => { |
| | | parseAndSetTime(); |
| | | historical(); |
| | | }); |
| | | |
| | | import * as XLSX from 'xlsx'; |
| | | import { saveAs } from 'file-saver'; |
| | | |
| | | const exportToExcel = () => { |
| | | // 表格数据(深拷贝防止污染) |
| | | const data = JSON.parse(JSON.stringify(tableDatax.value)); |
| | | |
| | | // 表头转换为中文或国际化文本 |
| | | const headerMap = { |
| | | date: t('large.date'), |
| | | countOutOne: t('large.countOutOne'), |
| | | totalAreaOutOne: t('large.totalAreaOutOne'), |
| | | countOutTwo: t('large.countOutTwo'), |
| | | totalAreaOutTwo: t('large.totalAreaOutTwo'), |
| | | countIn: t('large.countIn'), |
| | | totalAreaIn: t('large.totalAreaIn'), |
| | | countOut: t('large.countOut'), |
| | | totalAreaOut: t('large.totalAreaOut'), |
| | | hollowCountOutOne: t('large.hollowCountOutOne'), |
| | | hollowTotalAreaOutOne: t('large.hollowTotalAreaOutOne'), |
| | | hollowCountOutTwo: t('large.hollowCountOutTwo'), |
| | | hollowTotalAreaOutTwo: t('large.hollowTotalAreaOutTwo') |
| | | }; |
| | | |
| | | // 将数据中的 key 替换为中文表头 |
| | | const exportData = data.map(row => { |
| | | const newRow = {}; |
| | | for (const key in headerMap) { |
| | | newRow[headerMap[key]] = row[key]; |
| | | } |
| | | return newRow; |
| | | }); |
| | | |
| | | // 转换为工作表 |
| | | const worksheet = XLSX.utils.json_to_sheet(exportData); |
| | | const workbook = XLSX.utils.book_new(); |
| | | XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); |
| | | |
| | | // 导出为文件 |
| | | const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); |
| | | const blob = new Blob([excelBuffer], { type: 'application/octet-stream' }); |
| | | saveAs(blob, t('large.Productionandoperationstatus')); |
| | | }; |
| | | |
| | | let myChart = null; |
| | | const chart = ref(null) |
| | | const timeAxisCreate = (title, chartDom, mychart, RunTimes) => { |
| | | if (!chartDom) { |
| | | console.error('图表容器未找到'); |
| | | return; |
| | | } |
| | | |
| | | if (!mychart) { |
| | | mychart = echarts.init(chartDom); |
| | | } |
| | | let firstTime = null; |
| | | let secondTime = null; |
| | | if (RunTimes.length == 0) { |
| | | firstTime = "00-00-00 00:00:00"; |
| | | secondTime = "00-00-00 00:00:00"; |
| | | } else { |
| | | firstTime = RunTimes[0].startTimestamp; |
| | | secondTime = RunTimes[0].endTimestamp; |
| | | } |
| | | |
| | | // 构建线段数组 |
| | | const segments = RunTimes.map(item => ({ |
| | | type: 'line', |
| | | symbol: 'none', |
| | | data: [ |
| | | { |
| | | value: [item.firstTimestamp, 0], |
| | | extra: { |
| | | start: item.firstTimestamp, |
| | | end: item.secondTimestamp |
| | | } |
| | | }, |
| | | { |
| | | value: [item.secondTimestamp, 0], |
| | | extra: { |
| | | start: item.firstTimestamp, |
| | | end: item.secondTimestamp |
| | | } |
| | | } |
| | | ], |
| | | lineStyle: { |
| | | color: 'red', // 支持不同颜色 |
| | | width: 4 |
| | | }, |
| | | z: 1 |
| | | })); |
| | | |
| | | |
| | | const optionOne = { |
| | | title: { |
| | | text: title, |
| | | left: 'center', |
| | | top: '5%', |
| | | textStyle: { |
| | | fontSize: 16, |
| | | fontWeight: 'bold', |
| | | color: '#333' |
| | | } |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { type: 'line' }, |
| | | backgroundColor: 'rgba(50,50,50,0.7)', |
| | | textStyle: { color: '#fff' }, |
| | | formatter: (params) => { |
| | | const items = params |
| | | .map(p => { |
| | | const start = p.data?.extra?.start; |
| | | const end = p.data?.extra?.end; |
| | | const timeStr = p.axisValueLabel; |
| | | if (start && end) { |
| | | return `开始时间:${start}<br/>结束时间:${end}`; |
| | | } |
| | | return `时间:${timeStr}`; |
| | | }) |
| | | .filter(Boolean); |
| | | return items.join('<br/>'); |
| | | } |
| | | }, |
| | | grid: { |
| | | top: '20%', |
| | | left: '5%', |
| | | right: '5%', |
| | | bottom: '15%' |
| | | }, |
| | | xAxis: { |
| | | type: 'time', |
| | | axisLabel: { |
| | | formatter: function (value) { |
| | | const date = new Date(value); |
| | | return ( |
| | | date.getHours().toString().padStart(2, '0') + ':' + |
| | | date.getMinutes().toString().padStart(2, '0') + ':' + |
| | | date.getSeconds().toString().padStart(2, '0') |
| | | ); |
| | | }, |
| | | fontSize: 10, |
| | | color: '#666' |
| | | }, |
| | | splitLine: { show: false }, |
| | | axisLine: { lineStyle: { color: '#aaa' } } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | min: -1, |
| | | max: 1, |
| | | show: false |
| | | }, |
| | | series: [ |
| | | // 主时间线(蓝色渐变,稍微加粗) |
| | | { |
| | | type: 'line', |
| | | symbol: 'none', |
| | | data: [ |
| | | [firstTime, 0], |
| | | [secondTime, 0] |
| | | ], |
| | | lineStyle: { |
| | | color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ |
| | | { offset: 0, color: 'red' }, |
| | | { offset: 1, color: 'red' } |
| | | ]), |
| | | width: 5, |
| | | shadowColor: 'rgba(0,0,0,0.2)', |
| | | shadowBlur: 8 |
| | | }, |
| | | z: 0 |
| | | }, |
| | | // 小段时间线(统一柔和的黄色) |
| | | ...segments.map(seg => ({ |
| | | ...seg, |
| | | lineStyle: { |
| | | color: '#4facfe', |
| | | width: 3, |
| | | shadowColor: 'rgba(255,204,0,0.5)', |
| | | shadowBlur: 5 |
| | | } |
| | | })), |
| | | ] |
| | | }; |
| | | |
| | | mychart.setOption(optionOne); |
| | | }; |
| | | |
| | | </script> |
| | | <style scoped></style> |
| | |
| | | <artifactId>gateway</artifactId> |
| | | |
| | | <properties> |
| | | <maven.compiler.source>8</maven.compiler.source> |
| | | <maven.compiler.target>8</maven.compiler.target> |
| | | <java.run.main.class>com.mes.GateWayApplication</java.run.main.class> |
| | | </properties> |
| | | <dependencies> |
| | | <!-- 服务注册/发现--> |
| | |
| | | <plugin> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-maven-plugin</artifactId> |
| | | <version>2.3.0.RELEASE</version> <!-- 根据你的Spring Boot版本调整 --> |
| | | <configuration> |
| | | <layout>ZIP</layout> |
| | | <includes> |
| | | <include> |
| | | <groupId>nothing</groupId> |
| | | <artifactId>nothing</artifactId> |
| | | </include> |
| | | </includes> |
| | | </configuration> |
| | | <executions> |
| | | <execution> |
| | | <goals> |
| | | <goal>repackage</goal> |
| | | </goals> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | |
| | | <plugin> |
| | | <groupId>org.apache.maven.plugins</groupId> |
| | | <artifactId>maven-dependency-plugin</artifactId> |
| | | <version>3.1.2</version> |
| | | <executions> |
| | | <execution> |
| | | <id>copy-dependencies</id> |
| | | <phase>package</phase> |
| | | <goals> |
| | | <goal>copy-dependencies</goal> |
| | | </goals> |
| | | <configuration> |
| | | <outputDirectory>${project.build.directory}/lib</outputDirectory> |
| | | <overWriteReleases>false</overWriteReleases> |
| | | <overWriteSnapshots>false</overWriteSnapshots> |
| | | <overWriteIfNewer>true</overWriteIfNewer> |
| | | </configuration> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | |
| | | <plugin> |
| | | <groupId>org.apache.maven.plugins</groupId> |
| | | <artifactId>maven-resources-plugin</artifactId> |
| | | <version>3.2.0</version> |
| | | <executions> |
| | | <execution> |
| | | <id>copy-resources</id> |
| | | <phase>package</phase> |
| | | <goals> |
| | | <goal>copy-resources</goal> |
| | | </goals> |
| | | <configuration> |
| | | <outputDirectory>${project.build.directory}/config</outputDirectory> |
| | | <resources> |
| | | <resource> |
| | | <directory>src/main/resources</directory> |
| | | <filtering>true</filtering> |
| | | </resource> |
| | | </resources> |
| | | </configuration> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | |
| | | <plugin> |
| | | <groupId>org.apache.maven.plugins</groupId> |
| | | <artifactId>maven-jar-plugin</artifactId> |
| | | <version>3.2.0</version> |
| | | <configuration> |
| | | <archive> |
| | | <manifest> |
| | | <addClasspath>true</addClasspath> |
| | | <classpathPrefix>lib/</classpathPrefix> |
| | | <mainClass>${java.run.main.class}</mainClass> |
| | | </manifest> |
| | | <manifestEntries> |
| | | <Class-Path>resources/</Class-Path> |
| | | </manifestEntries> |
| | | </archive> |
| | | <outputDirectory>${project.build.directory}</outputDirectory> |
| | | </configuration> |
| | | </plugin> |
| | | </plugins> |
| | | </build> |
| | |
| | | <artifactId>jcifs</artifactId> |
| | | <version>1.2.19</version> |
| | | </dependency> |
| | | <!-- <dependency>--> |
| | | <!-- <groupId>com.github.yulichang</groupId>--> |
| | | <!-- <artifactId>mybatis-plus-join-boot-starter</artifactId>--> |
| | | <!-- <version>1.4.12</version>--> |
| | | <!-- </dependency>--> |
| | | <!-- <dependency>--> |
| | | <!-- <groupId>com.github.yulichang</groupId>--> |
| | | <!-- <artifactId>mybatis-plus-join-boot-starter</artifactId>--> |
| | | <!-- <version>1.4.12</version>--> |
| | | <!-- </dependency>--> |
| | | </dependencies> |
| | | |
| | | <properties> |
| | | <maven.compiler.source>8</maven.compiler.source> |
| | | <maven.compiler.target>8</maven.compiler.target> |
| | | <java.run.main.class>com.mes.CacheGlassModuleApplication</java.run.main.class> |
| | | </properties> |
| | | |
| | | |
| | |
| | | } |
| | | int firstLength = minTwoFirstLength; |
| | | int secondLength = minTwoSecondLength; |
| | | int fecondMaxLength = 2300; |
| | | if (deviceId == 1) { |
| | | firstLength = minOneFirstLength; |
| | | secondLength = minOneSecondLength; |
| | | fecondMaxLength = 2500; |
| | | } |
| | | if (Math.max(glassInfo.getWidth(), glassInfo.getHeight()) < firstLength || Math.min(glassInfo.getWidth(), glassInfo.getHeight()) < secondLength) { |
| | | if (Math.max(glassInfo.getWidth(), glassInfo.getHeight()) < firstLength || Math.min(glassInfo.getWidth(), glassInfo.getHeight()) < secondLength |
| | | || Math.max(glassInfo.getWidth(), glassInfo.getHeight()) > fecondMaxLength) { |
| | | log.info("进片玻璃尺寸小于{}*{},禁止进笼玻璃id:{},尺寸为{}、{}", firstLength, secondLength, task.getGlassIdIn(), glassInfo.getWidth(), glassInfo.getHeight()); |
| | | Date endDate = new Date(); |
| | | log.info("结束进片任务设备为{},结束时间为:{},共耗时:{}ms", deviceId, endDate, endDate.getTime() - startDate.getTime()); |
| | |
| | | </dependency> |
| | | </dependencies> |
| | | <properties> |
| | | <maven.compiler.source>8</maven.compiler.source> |
| | | <maven.compiler.target>8</maven.compiler.target> |
| | | <java.run.main.class>com.mes.CacheVerticalClassModuleApplication</java.run.main.class> |
| | | </properties> |
| | | |
| | | </project> |
| | |
| | | </dependencies> |
| | | |
| | | <properties> |
| | | <maven.compiler.source>8</maven.compiler.source> |
| | | <maven.compiler.target>8</maven.compiler.target> |
| | | <java.run.main.class>com.mes.GlassStorageApplication</java.run.main.class> |
| | | </properties> |
| | | |
| | | </project> |
| | |
| | | import com.mes.rawglassstation.service.RawGlassStorageStationService; |
| | | import com.mes.rawglasstask.entity.RawGlassStorageTask; |
| | | import com.mes.rawglasstask.service.RawGlassStorageTaskService; |
| | | import com.mes.s7.entity.S7Data; |
| | | import com.mes.s7.job.S7Job; |
| | | import com.mes.uppattenusage.entity.UpPattenUsage; |
| | | import com.mes.uppattenusage.entity.vo.UpPattenUsageVO; |
| | | import com.mes.uppattenusage.mapper.UpPattenUsageMapper; |
| | |
| | | if ("0".equals(requestValue)) { |
| | | if ("1".equals(confireWord) && "0".equals(reportWord)) { |
| | | // if ("1".equals(confireWord.getValue() + "") && "0".equals(reportWord.getValue() + "")) { |
| | | S7Data s7Data = new S7Data(); |
| | | s7Data.setConfirmation((short) 0); |
| | | s7Serializer.write(s7Data); |
| | | // List<ReadWriteEntity> list = new ArrayList<>(); |
| | | // list.add(generateReadWriteEntity("CC.CC.confirmation", 0)); |
| | | // miloService.writeToOpcWord(list); |
| | | // S7Data s7Data = new S7Data(); |
| | | // s7Data.setConfirmation((short) 0); |
| | | // s7Serializer.write(s7Data); |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | list.add(generateReadWriteEntity("CC.CC.confirmation", 0)); |
| | | miloService.writeToOpcWord(list); |
| | | } |
| | | if ("1".equals(taskWord)) { |
| | | // if ("1".equals(taskWord.getValue() + "")) { |
| | | S7Data s7Data = new S7Data(); |
| | | s7Data.setTaskWord((short) 0); |
| | | s7Data.setStartSlot((short) 0); |
| | | s7Data.setEndSlot((short) 0); |
| | | s7Serializer.write(s7Data); |
| | | // List<ReadWriteEntity> list = new ArrayList<>(); |
| | | // list.add(generateReadWriteEntity("CC.CC.taskWord", 0)); |
| | | // list.add(generateReadWriteEntity("CC.CC.startSlot", 0)); |
| | | // list.add(generateReadWriteEntity("CC.CC.endSlot", 0)); |
| | | // miloService.writeToOpcWord(list); |
| | | // if ("1".equals(taskWord)) { |
| | | if ("1".equals(taskWord.getValue() + "")) { |
| | | // S7Data s7Data = new S7Data(); |
| | | // s7Data.setTaskWord((short) 0); |
| | | // s7Data.setStartSlot((short) 0); |
| | | // s7Data.setEndSlot((short) 0); |
| | | // s7Serializer.write(s7Data); |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | list.add(generateReadWriteEntity("CC.CC.taskWord", 0)); |
| | | list.add(generateReadWriteEntity("CC.CC.startSlot", 0)); |
| | | list.add(generateReadWriteEntity("CC.CC.endSlot", 0)); |
| | | miloService.writeToOpcWord(list); |
| | | } |
| | | return; |
| | | } |
| | |
| | | .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_FAILURE)); |
| | | |
| | | } |
| | | S7Data s7Data = new S7Data(); |
| | | s7Data.setConfirmation((short) 1); |
| | | s7Serializer.write(s7Data); |
| | | // List<ReadWriteEntity> list = new ArrayList<>(); |
| | | // list.add(generateReadWriteEntity("CC.CC.confirmation", 1)); |
| | | // miloService.writeToOpcWord(list); |
| | | // S7Data s7Data = new S7Data(); |
| | | // s7Data.setConfirmation((short) 1); |
| | | // s7Serializer.write(s7Data); |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | list.add(generateReadWriteEntity("CC.CC.confirmation", 1)); |
| | | miloService.writeToOpcWord(list); |
| | | } |
| | | |
| | | private boolean isHasRunningTask() { |
| | |
| | | cloud: |
| | | nacos: |
| | | discovery: |
| | | server-addr: 10.153.19.150:8848 |
| | | server-addr: 10.153.19.150:8849 |
| | | redis: |
| | | database: 0 |
| | | host: 10.153.19.150 |
| | |
| | | </dependencies> |
| | | |
| | | <properties> |
| | | <maven.compiler.source>8</maven.compiler.source> |
| | | <maven.compiler.target>8</maven.compiler.target> |
| | | <java.run.main.class>com.mes.LoadGlassModuleApplication</java.run.main.class> |
| | | </properties> |
| | | |
| | | </project> |
| | |
| | | </dependencies> |
| | | |
| | | <properties> |
| | | <maven.compiler.source>8</maven.compiler.source> |
| | | <maven.compiler.target>8</maven.compiler.target> |
| | | <java.run.main.class>com.mes.TemperingGlassModuleApplication</java.run.main.class> |
| | | </properties> |
| | | |
| | | </project> |
| | |
| | | <artifactId>hollowGlass</artifactId> |
| | | |
| | | <properties> |
| | | <maven.compiler.source>8</maven.compiler.source> |
| | | <maven.compiler.target>8</maven.compiler.target> |
| | | <java.run.main.class>com.mes.HollowGlassApplication</java.run.main.class> |
| | | </properties> |
| | | |
| | | </project> |
| | |
| | | } |
| | | int request = Integer.parseInt(requestEntity.getValue() + ""); |
| | | int flagRequest = request & 3; |
| | | ReadWriteEntity glassIdEntity = miloService.readFromOpcUa(cell + "glassId"); |
| | | log.info("除膜{}获取当前的信号为:{},玻璃id:{}", cell, flagRequest, glassIdEntity); |
| | | if (flagRequest != 3) { |
| | | log.info("当前未收到请求玻璃id数据,结束任务"); |
| | | return; |
| | | } |
| | | ReadWriteEntity glassIdEntity = miloService.readFromOpcUa(cell + "glassId"); |
| | | |
| | | log.info("除膜{}获取当前的玻璃id:{}", cell, glassIdEntity); |
| | | if (null == glassIdEntity.getValue() || StringUtils.isBlank(glassIdEntity.getValue() + "")) { |
| | | log.info("当前未收到玻璃id数据,结束任务"); |
| | | return; |
| | |
| | | |
| | | List<ReadWriteEntity> ualist = new ArrayList<>(); |
| | | List<ReadWriteEntity> wordlist = new ArrayList<>(); |
| | | |
| | | log.info("除膜{}获取玻璃{},是否除膜:{}", cell, glassIdEntity.getValue(), detailsVO.getFilmRemove()); |
| | | if (detailsVO.getFilmRemove() == 0) { |
| | | // 10111011 |
| | | int sendId = request & 63; |
| | |
| | | } |
| | | //向电气发送清楚信号 |
| | | int sendId = request & 251; |
| | | log.info("{}收到除膜机ID接收完成信号,将写入数据完成置0,发送数据为:{}", cell, sendId); |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | list.add(opcPlcStorageCageHollowTask.generateReadWriteEntity(cell + "mesControl", sendId)); |
| | | miloService.writeToOpcWord(list); |
| | |
| | | <plugin> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-maven-plugin</artifactId> |
| | | <version>2.3.0.RELEASE</version> <!-- 根据你的Spring Boot版本调整 --> |
| | | <configuration> |
| | | <layout>ZIP</layout> |
| | | <includes> |
| | | <include> |
| | | <groupId>nothing</groupId> |
| | | <artifactId>nothing</artifactId> |
| | | </include> |
| | | </includes> |
| | | </configuration> |
| | | <executions> |
| | | <execution> |
| | | <goals> |
| | | <goal>repackage</goal> |
| | | </goals> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | |
| | | <plugin> |
| | | <groupId>org.apache.maven.plugins</groupId> |
| | | <artifactId>maven-dependency-plugin</artifactId> |
| | | <version>3.1.2</version> |
| | | <executions> |
| | | <execution> |
| | | <id>copy-dependencies</id> |
| | | <phase>package</phase> |
| | | <goals> |
| | | <goal>copy-dependencies</goal> |
| | | </goals> |
| | | <configuration> |
| | | <outputDirectory>${project.build.directory}/lib</outputDirectory> |
| | | <overWriteReleases>false</overWriteReleases> |
| | | <overWriteSnapshots>false</overWriteSnapshots> |
| | | <overWriteIfNewer>true</overWriteIfNewer> |
| | | </configuration> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | |
| | | <plugin> |
| | | <groupId>org.apache.maven.plugins</groupId> |
| | | <artifactId>maven-resources-plugin</artifactId> |
| | | <version>3.2.0</version> |
| | | <executions> |
| | | <execution> |
| | | <id>copy-resources</id> |
| | | <phase>package</phase> |
| | | <goals> |
| | | <goal>copy-resources</goal> |
| | | </goals> |
| | | <configuration> |
| | | <outputDirectory>${project.build.directory}/config</outputDirectory> |
| | | <resources> |
| | | <resource> |
| | | <directory>src/main/resources</directory> |
| | | <filtering>true</filtering> |
| | | </resource> |
| | | </resources> |
| | | </configuration> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | |
| | | <plugin> |
| | | <groupId>org.apache.maven.plugins</groupId> |
| | | <artifactId>maven-jar-plugin</artifactId> |
| | | <version>3.2.0</version> |
| | | <configuration> |
| | | <archive> |
| | | <manifest> |
| | | <addClasspath>true</addClasspath> |
| | | <classpathPrefix>lib/</classpathPrefix> |
| | | <mainClass>${java.run.main.class}</mainClass> |
| | | </manifest> |
| | | <manifestEntries> |
| | | <Class-Path>resources/</Class-Path> |
| | | </manifestEntries> |
| | | </archive> |
| | | <outputDirectory>${project.build.directory}</outputDirectory> |
| | | </configuration> |
| | | </plugin> |
| | | </plugins> |
| | | </build> |