wangfei
2025-04-15 cd7f3fa89aed4e7a4b87c0ee4164cd606103b318
Merge branch 'master' of http://10.153.19.25:10105/r/YiWuProject
28个文件已修改
6个文件已添加
1211 ■■■■■ 已修改文件
UI-Project/src/lang/en.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/largescreendisplay/screendisplay.vue 654 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/entity/PieChartVO.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/LargenScreenService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/largenscreen/service/impl/LargenScreenServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/controller/OrderController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/dto/OrderDTO.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/entity/request/OrderRequest.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/FlowCardController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkDetailController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/FlowCardPercentDTO.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/dto/ReportWorkDTO.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/FlowCardRequest.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/request/ReportWorkRequest.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassOutRelationInfoMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassOutRelationInfoService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassOutRelationInfoMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>