ZengTao
2024-08-22 5d4bbdc4f5dd55b2094e3ffea73701db65f3dad1
Merge branch 'master' of http://bore.pub:10439/r/HangZhouMes
9个文件已修改
540 ■■■■ 已修改文件
UI-Project/src/lang/zh.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue 407 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/largescreen/largescreen.vue 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js
@@ -247,6 +247,22 @@
        intofurnace:'进炉中',
        beforefurnace:'进炉前',
        outfurnace:'已出炉玻璃',
        print:'拿走打印',
        printing:'打印',
        projectnumber:'请输入工程号',
        inquire:'查询',
        project:'工程号',
        awayprocess:'拿走工序',
        awayequipment:'拿走设备',
        awayteam:'拿走班组',
        flowcard:'流程卡',
        layer:'层号',
        temperinglayout:'炉号',
        temperingfeed:'片序',
        width:'宽',
        height:'高',
        thickness:'厚',
        glasstakeout:'玻璃拿走清单',
    },
    reportWork:{
        lowerbit:'下片位',
@@ -424,7 +440,7 @@
        customerName: '客户名称',
        project: '项目名称',
        are: '面积',
        quantity: '包装方式',
        quantity: '数量',
        warehousing: '状态',
        deliveryDate: '送货时间',
        notstocked: '未入库',
@@ -485,5 +501,5 @@
        presponsibleequipment :'请选择责任设备',
        remark :'备注',
        premark :'请输入备注',
    },
    }
}
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -1,34 +1,93 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
import request from "@/utils/request"
import { ref, onMounted, onBeforeUnmount } from 'vue';
import { ref, onMounted, onBeforeUnmount,nextTick  } from 'vue';
import { WebSocketHost ,host} from '@/utils/constants'
import { ElMessage, ElMessageBox } from 'element-plus'
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
  import { useI18n } from 'vue-i18n'
  import { useRouter } from 'vue-router'
  const { t } = useI18n()
  let language = ref(localStorage.getItem('lang') || 'zh')
const dialogFormVisible = ref(false)
const dialogFormVisiblea = ref(true)
const dialogFormVisibleb = ref(false)
const blind = ref(false)
const dialogFormVisiblec = ref(false)
const blind1 = ref(false)
const blind2 = ref(false)
const blinda = ref(false)
const blindb = ref(false)
const dialogVisible = ref(false)
const width = ref();
const height = ref();
const adjustedRects1 = ref([]);
const adjustedRects2 = ref([]);
const adjustedRectsa = ref([]);
const adjustedRectsb = ref([]);
const tableData = ref([])
const engineerId = ref('')
const router = useRouter()
const currentGlassId = ref(null);
const currenttemperingFeedSequence = ref(null);
onMounted(async () => {
  try {
    const response = await request.post('/loadGlass/damage/selectDamagePrint', {
    type: 9,
    workingProcedure: '钢化',
    })
    if (response.code === 200) {
          tableData.value = response.data
          console.log(response.data);
    } else {
      ElMessage.warning(res.msg)
    }
  } catch (error) {
    // console.error('Error fetching rects :', error);
  }
});
const selectReportData = async () => {
  let postData = {
    type: 9,
    workingProcedure: '钢化',
    ...(engineerId.value !== '' && { engineerId: engineerId.value }),
  };
  const response = await request.post("/loadGlass/damage/selectDamagePrint", postData)
  if (response.code === 200) {
    tableData.value = response.data;
    ElMessage.success(response.message);
  } else {
    ElMessage.error(response.message);
  }
};
const printing = async () => {
  let postData = {
    type: 9,
    workingProcedure: '钢化',
    ...(engineerId.value !== '' && { engineerId: engineerId.value }),
  };
  console.log(engineerId.value);
  const response = await request.post("/loadGlass/damage/selectDamagePrintDetails", postData)
  if (response.code === 200) {
  dialogVisible.value = true;
    tableData.value = response.data;
    await nextTick();
  window.print();
} else {
    ElMessage.error(response.message);
  }
};
const printTable = () => {
  // 这里可以添加一些CSS样式来优化打印效果
  // 例如,可以添加一个隐藏的打印样式表
  window.print();
};
const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`;
const handleMessage = (data) => {
// 进炉中
  if(data.intoGlass2!=null){
    adjustedRects2.value =  data.intoGlass2[0].map(rect => {
        isActive: false
        const scaleFactor =  794.67/5087;
const handleMessage = (data) => {
  if (data.intoGlass2 && data.intoGlass2.length > 0) {
    const newRects = data.intoGlass2[0].map(rect => {
      const scaleFactor =  794.67/5087;
        let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
        let newX = rect.yCoordinate; 
      if (rect.width < rect.height) {
@@ -59,15 +118,20 @@
        height: adjustedHeight,  
        widtha: rect.width, 
        heighta: rect.height,
      };
      });
      }else{
        adjustedRects1.value = ''
      }
  if(data.intoGlass!=null){
      adjustedRects1.value =  data.intoGlass[0].map(rect => {
        isActive: false
        const scaleFactor =  794.67/5087;
    });
    // 合并新旧矩形,保留 isActive 状态
    adjustedRects2.value = adjustedRects2.value.map(oldRect => {
      const newRect = newRects.find(r => r.glassId === oldRect.glassId);
      if (newRect) {
        return { ...oldRect, ...newRect, isActive: oldRect.isActive };
      }
      return oldRect; // 如果旧矩形在新数据中不存在,则保留原样
    }).concat(newRects.filter(r => !adjustedRects2.value.some(o => o.glassId === r.glassId)));
  }
  if (data.intoGlass && data.intoGlass.length > 0) {
    const newRects = data.intoGlass[0].map(rect => {
      const scaleFactor =  794.67/5087;
      let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
      let newX = rect.yCoordinate; 
      if (rect.width < rect.height) {
@@ -98,16 +162,20 @@
        height: adjustedHeight,  
        widtha: rect.width, 
        heighta: rect.height,
      };
      });
      }else{
        adjustedRects2.value = ''
      }
  // 进炉前
  if(data.waitingGlass!=null){
    adjustedRectsa.value = data.waitingGlass[0].map(rect => {
        isActive: false
        const scaleFactor =  1621.78/5190;
    });
    // 合并新旧矩形,保留 isActive 状态
    adjustedRects1.value = adjustedRects1.value.map(oldRect => {
      const newRect = newRects.find(r => r.glassId === oldRect.glassId);
      if (newRect) {
        return { ...oldRect, ...newRect, isActive: oldRect.isActive };
      }
      return oldRect; // 如果旧矩形在新数据中不存在,则保留原样
    }).concat(newRects.filter(r => !adjustedRects1.value.some(o => o.glassId === r.glassId)));
  }
  if (data.waitingGlass && data.waitingGlass.length > 0) {
    const newRects = data.waitingGlass[0].map(rect => {
      const scaleFactor =  1621.78/5190;
  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; 
  let newX = rect.yCoordinate; 
      if (rect.width < rect.height) {
@@ -138,16 +206,20 @@
    height: adjustedHeight,  
    widtha: rect.width, 
    heighta: rect.height,
  };
});
  }else{
        adjustedRectsa.value = ''
      }
    // 已出炉
  if(data.outGlass!=null){
    adjustedRectsb.value = data.outGlass[0].map(rect => {
        isActive: false
        const scaleFactor =  1621.78/5190;
  }
    });
    // 合并新旧矩形,保留 isActive 状态
    adjustedRectsa.value = adjustedRectsa.value.map(oldRect => {
      const newRect = newRects.find(r => r.glassId === oldRect.glassId);
      if (newRect) {
        return { ...oldRect, ...newRect, isActive: oldRect.isActive };
      }
      return oldRect; // 如果旧矩形在新数据中不存在,则保留原样
    }).concat(newRects.filter(r => !adjustedRectsa.value.some(o => o.glassId === r.glassId)));
  }
  if (data.outGlass && data.outGlass.length > 0) {
    const newRects = data.outGlass[0].map(rect => {
      const scaleFactor =  1621.78/5190;
      const scaleFactory =  550/2800; 
      let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta,newY;
  let newX = rect.yCoordinate; 
@@ -181,12 +253,18 @@
        height: adjustedHeight,  
        widtha: rect.width, 
        heighta: rect.height,
  };
});
  }else{
        adjustedRectsb.value = ''
      }
};
  }
    });
    // 合并新旧矩形,保留 isActive 状态
    adjustedRectsb.value = adjustedRectsb.value.map(oldRect => {
      const newRect = newRects.find(r => r.glassId === oldRect.glassId);
      if (newRect) {
        return { ...oldRect, ...newRect, isActive: oldRect.isActive };
      }
      return oldRect; // 如果旧矩形在新数据中不存在,则保留原样
    }).concat(newRects.filter(r => !adjustedRectsb.value.some(o => o.glassId === r.glassId)));
  }
};
onMounted(() => {
  initializeWebSocket(socketUrl, handleMessage);
});
@@ -219,70 +297,68 @@
      return '#911005';  
  }  
}
// if (adjustedRectsb[0].engineerId != null) {
//     engineerIdDisplayb = adjustedRectsb[0].engineerId
//   }
//   if (adjustedRectsa[0].engineerId != null) {
//     engineerIdDisplaya = adjustedRectsa[0].engineerId
//   }
//   if (adjustedRects2[0].engineerId != null) {
//     engineerIdDisplay2 = adjustedRects2[0].engineerId
//   }
//   if (adjustedRects[0].engineerId != null) {
//     engineerIdDisplay = adjustedRects[0].engineerId
//   }
function showDialog1(rect) {
function showDialog1(rect) {
  const index = adjustedRects1.value.findIndex(r => r.glassId === rect.glassId);
  if (index !== -1) {
    adjustedRects1.value[index].isActive = true;
  }
  currentGlassId.value = rect.glassId;  
  currenttemperingFeedSequence.value = rect.temperingFeedSequence;  
  blind.value = true;
  adjustedRects1.value = adjustedRects1.value.map(rect =>
    rect.glass_id === glassId ? { ...rect, isActive: true } : rect
  );
  blind1.value = true;
function showDialog2(rect) {
function showDialog2(rect) {
  const index = adjustedRects2.value.findIndex(r => r.glassId === rect.glassId);
  if (index !== -1) {
    adjustedRects2.value[index].isActive = true;
  }
  currentGlassId.value = rect.glassId;  
  currenttemperingFeedSequence.value = rect.temperingFeedSequence;  
  blind.value = true;
  adjustedRects2.value = adjustedRects2.value.map(rect =>
    rect.glass_id === glassId ? { ...rect, isActive: true } : rect
  );
  blind2.value = true;
function showDialoga(rect) {
function showDialoga(rect) {
  const index = adjustedRectsa.value.findIndex(r => r.glassId === rect.glassId);
  if (index !== -1) {
    adjustedRectsa.value[index].isActive = true;
  }
  currentGlassId.value = rect.glassId;  
  currenttemperingFeedSequence.value = rect.temperingFeedSequence;  
  blind.value = true;
  adjustedRectsa.value = adjustedRectsa.value.map(rect =>
    rect.glass_id === glassId ? { ...rect, isActive: true } : rect
  );
  blinda.value = true;
function showDialogb(rect) {
function showDialogb(rect) {
  const index = adjustedRectsb.value.findIndex(r => r.glassId === rect.glassId);
  if (index !== -1) {
    adjustedRectsb.value[index].isActive = true;
  }
  currentGlassId.value = rect.glassId;  
  currenttemperingFeedSequence.value = rect.temperingFeedSequence;  
  blind.value = true;
  adjustedRectsb.value = adjustedRectsb.value.map(rect =>
    rect.glass_id === glassId ? { ...rect, isActive: true } : rect
  );
  blindb.value = true;
const handleDialogClose = () => {
  adjustedRects1.value = adjustedRects1.value.map(rect => ({
    ...rect,
    isActive: false
  }));
  // adjustedRects2.value = adjustedRects2.value.map(rect => ({
  //   ...rect,
  //   isActive: false
  // }));
  // adjustedRectsa.value = adjustedRectsa.value.map(rect => ({
  //   ...rect,
  //   isActive: false
  // }));
  adjustedRectsb.value = adjustedRectsb.value.map(rect => ({
    ...rect,
    isActive: false
  }));
}
  const handleDialogClose1 = () => {
  adjustedRects1.value.forEach(rect => {
    rect.isActive = false;
  });
  blind1.value = false;
};
  const handleDialogClose2 = () => {
  adjustedRects2.value.forEach(rect => {
    rect.isActive = false;
  });
  blind2.value = false;
};
  const handleDialogClosea = () => {
  adjustedRectsa.value.forEach(rect => {
    rect.isActive = false;
  });
  blinda.value = false;
};
  const handleDialogCloseb = () => {
  adjustedRectsb.value.forEach(rect => {
    rect.isActive = false;
  });
  blindb.value = false;
};
// 破损
const handleDamage = async () => {
const handleDamage1 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', {
    glassId: currentGlassId.value,
@@ -293,7 +369,76 @@
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      blind.value = false;
      blind1.value = false;
      updateRectColors();
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
const handleDamage2 = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', {
    glassId: currentGlassId.value,
    // temperingFeedSequence: currenttemperingFeedSequence.value,
    line: 4001,
    status: 2,
    workingProcedure: '钢化',
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      blind2.value = false;
      updateRectColors();
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
const handleDamagea = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', {
    glassId: currentGlassId.value,
    // temperingFeedSequence: currenttemperingFeedSequence.value,
    line: 4001,
    status: 2,
    workingProcedure: '钢化',
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      blinda.value = false;
      updateRectColors();
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
    }
}
catch (error) {
    // 处理错误
    console.error(error);
  }
}
const handleDamageb = async () => {
  try  {
  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', {
    glassId: currentGlassId.value,
    // temperingFeedSequence: currenttemperingFeedSequence.value,
    line: 4001,
    status: 2,
    workingProcedure: '钢化',
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      blindb.value = false;
      updateRectColors();
    } else {
      // 请求失败,显示错误消息
@@ -312,9 +457,10 @@
</script>
<template>
  <div style="margin-top: 10px;">
     <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;" >{{ $t('processCard.beforefurnace') }}</el-button>
     <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;">{{ $t('processCard.intofurnace') }}</el-button>
    <el-button  id="searchButton" type="success" @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false">{{ $t('processCard.outfurnace') }}</el-button>
     <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;dialogFormVisiblec = false;" >{{ $t('processCard.beforefurnace') }}</el-button>
     <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;dialogFormVisiblec = false;">{{ $t('processCard.intofurnace') }}</el-button>
    <el-button  id="searchButton" type="success" @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false;dialogFormVisiblec = false;">{{ $t('processCard.outfurnace') }}</el-button>
    <el-button  id="searchButton" type="info" @click="dialogFormVisiblec = true;dialogFormVisibleb = false;dialogFormVisible = false;dialogFormVisiblea = false">{{ $t('processCard.print') }}</el-button>
<div v-if="dialogFormVisible" >
    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
<div style="width: 49%;float: left;background-color: #f4f4f5;height: 550px;">
@@ -430,12 +576,72 @@
   </div>
   </el-card>
</div>
<el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose">
        <el-button type="warning" plain :icon="Delete" @click="handleDamage"  style="width: 140px;margin-left: 10px;">
<div v-if="dialogFormVisiblec">
  <!-- 打印 -->
  <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
    <div style="display: flex; flex-direction: row; align-items: center; margin-top: 5px;margin-left: 10px;">
    <el-input :placeholder="$t('processCard.projectnumber')" v-model="engineerId" autocomplete="off" style="width: 300px;"/>
    <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('processCard.inquire') }}</el-button>
    <el-button type="info" style="margin-left: 10px;" @click="printing()">{{ $t('processCard.printing') }}</el-button>
  </div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
    <el-table
    height="350"
     ref="table"
     :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
      :data="tableData"
    >
      <el-table-column prop="engineerId" :label="$t('processCard.project')" width="200" align="center"/>
      <el-table-column prop="workingProcedure" :label="$t('processCard.awayprocess')" align="center"/>
      <el-table-column prop="deviceName" :label="$t('processCard.awayequipment')" align="center"/>
      <el-table-column prop="teamsGroupsName" :label="$t('processCard.awayteam')" align="center"/>
    </el-table>
      </div>
      </el-card>
   </el-card>
</div>
<el-dialog v-model="blind1" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose1">
        <el-button type="warning" plain :icon="Delete" @click="handleDamage1"  style="width: 140px;margin-left: 10px;">
          {{ $t('order.dilapidation') }}
        </el-button>
  </el-dialog>
<el-dialog v-model="blind2" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose2">
        <el-button type="warning" plain :icon="Delete" @click="handleDamage2"  style="width: 140px;margin-left: 10px;">
          {{ $t('order.dilapidation') }}
        </el-button>
  </el-dialog>
<el-dialog v-model="blinda" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClosea">
        <el-button type="warning" plain :icon="Delete" @click="handleDamagea"  style="width: 140px;margin-left: 10px;">
          {{ $t('order.dilapidation') }}
        </el-button>
  </el-dialog>
<el-dialog v-model="blindb" top="30vh" width="15%" style="text-align: center;" @close="handleDialogCloseb">
        <el-button type="warning" plain :icon="Delete" @click="handleDamageb"  style="width: 140px;margin-left: 10px;">
          {{ $t('order.dilapidation') }}
        </el-button>
  </el-dialog> 
  <el-dialog
      v-model="dialogVisible"
      width="100%"
      :title="$t('processCard.glasstakeout')"
      top="0vh"
      >
      <el-table
        :data="tableData"
        style="width: 100%;height: 860px"
      >
      <el-table-column prop="flowCardId" :label="$t('processCard.flowcard')" width="140" align="center"/>
      <el-table-column prop="layer" :label="$t('processCard.layer')" align="center" width="80"/>
      <el-table-column prop="engineerId" :label="$t('processCard.project')" align="center" width="110"/>
      <el-table-column prop="temperingLayoutId" :label="$t('processCard.temperinglayout')" align="center" width="80"/>
      <el-table-column prop="temperingFeedSequence" :label="$t('processCard.temperingfeed')" align="center" width="80"/>
      <el-table-column prop="width" :label="$t('processCard.width')" align="center" width="80"/>
      <el-table-column prop="height" :label="$t('processCard.height')" align="center" width="80"/>
      <el-table-column prop="thickness" :label="$t('processCard.thickness')" align="center" width="80"/>
      </el-table>
    </el-dialog>
  </div>
</template>
<style scoped>
@@ -509,7 +715,6 @@
#rect {  
  position: relative; /* 确保箭头可以相对于矩形定位 */  
  /* 其他样式 */
}  
.centered-text {
  /* 设置文字居中样式 */  
UI-Project/src/views/largescreen/largescreen.vue
@@ -1,6 +1,6 @@
<template>  
  <el-card style="flex: 1;margin-left: 1px;margin-top: 10px;margin-right: 1px;" v-loading="loading">
    <el-scrollbar height="600px">
    <el-scrollbar height="800px">
<div id="top" style="height: 150px;display: flex;">  
  <div class="echarts-container">
  <div v-for="(processData, index) in processesData" :key="index" class="echarts-item">
@@ -46,32 +46,9 @@
  <div  class="moving-rect xiapianji5" v-show="xiapian5"></div>
  <div  class="moving-rect xiapianji6" v-show="xiapian6"></div>
</div>
<!-- <div class="parter" style="margin-top: 10px;margin-left: 150px; height: 240px;width: 1000px;">
    <img src="../../assets/dpxsa.png" style="margin-left: -10px; width: 100%;height: 100%;" alt="Your Image">
    <div class="moving-rect vertical"></div>
    <div class="moving-rect all"></div>
    <div class="moving-rect horizontal"></div>
    <div class="moving-rect xiao"></div>
    <div class="moving-rect zhan"></div>
    <div class="moving-rect tu"></div>
    <div class="moving-rect zi"></div>
    <div class="moving-rect xia"></div>
    <div class="moving-rect zan"></div>
    <div class="moving-rect fa"></div>
    <div class="moving-rect hua"></div>
    <div class="moving-rect shui"></div>
</div> -->
<!-- <div id="centerright" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 240px;background-color: #911005;">
  <el-table height="240" ref="table" width="340px"
      @selection-change="handleSelectionChange"
      :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
        <el-table-column prop="projectNo" align="center" :label="$t('large.projectnumber')" min-width="50" />
        <el-table-column prop="projectName" align="center" :label="$t('large.projectname')" min-width="50" />
      </el-table>
</div>  -->
</div>
<div id="bottom" style="margin-top: 10px;height: 190px;background-color: #911005;">
<el-table height="190" ref="table"
<div id="bottom" style="margin-top: 10px;height: 190px;">
<el-table height="390" ref="table"
      @selection-change="handleSelectionChange"
      :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
        <el-table-column prop="orderId" align="center" :label="$t('large.orderId')" min-width="50" />
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
@@ -3,6 +3,7 @@
import cn.hutool.core.date.DateTime;
import com.mes.damage.entity.Damage;
import com.mes.damage.entity.DamagePrint;
import com.mes.damage.service.DamageService;
import com.mes.utils.Result;
import io.swagger.annotations.Api;
@@ -62,6 +63,18 @@
        damageService.insertDamage(damage);
        return Result.build(200,"新增成功",1);
    }
    @ApiOperation("拿走数据查询")
    @PostMapping("/selectDamagePrint")
    public Result selectDamagePrint(@RequestBody Damage damage) {
        List<Damage> damage2=damageService.selectDamagePrint(damage);
        return Result.build(200,"查询成功",damage2);
    }
    @ApiOperation("拿走打印查询")
    @PostMapping("/selectDamagePrintDetails")
    public Result selectDamagePrintDetails(@RequestBody Damage damage) {
        List<DamagePrint> damage2=damageService.selectDamagePrintDetails(damage);
        return Result.build(200,"查询成功",damage2);
    }
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
@@ -1,6 +1,7 @@
package com.mes.damage.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.github.yulichang.base.MPJBaseMapper;
import com.mes.damage.entity.Damage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -13,6 +14,6 @@
 * @since 2024-06-13
 */
@DS("hangzhoumes")
public interface DamageMapper extends BaseMapper<Damage> {
public interface DamageMapper extends MPJBaseMapper<Damage> {
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
@@ -1,9 +1,12 @@
package com.mes.damage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.yulichang.base.MPJBaseService;
import com.mes.damage.entity.Damage;
import com.mes.damage.entity.DamagePrint;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -13,7 +16,7 @@
 * @author wu
 * @since 2024-06-13
 */
public interface DamageService extends IService<Damage> {
public interface DamageService extends MPJBaseService<Damage> {
    List<Damage> selectDamage(String startTime, String endTime, int type, int status, String workingProcedure);
@@ -32,4 +35,8 @@
     * @param damageList
     */
    void batchInsertDamage(List<Damage> damageList);
    List<Damage> selectDamagePrint(Damage damage);
    List<DamagePrint> selectDamagePrintDetails(Damage damage);
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -1,8 +1,12 @@
package com.mes.damage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.github.yulichang.query.MPJQueryWrapper;
import com.mes.damage.entity.Damage;
import com.mes.damage.entity.DamagePrint;
import com.mes.damage.mapper.DamageMapper;
import com.mes.damage.service.DamageService;
import com.mes.glassinfo.entity.GlassInfo;
@@ -10,11 +14,14 @@
import com.mes.work_assignment.entity.WorkAssignment;
import com.mes.work_assignment.mapper.WorkAssignmentMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -28,12 +35,14 @@
 * @since 2024-06-13
 */
@Service
public class DamageServiceImpl extends ServiceImpl<DamageMapper, Damage> implements DamageService {
public class DamageServiceImpl extends MPJBaseServiceImpl<DamageMapper, Damage> implements DamageService {
    @Resource
    GlassInfoMapper glassInfoMapper;
    @Resource
    WorkAssignmentMapper workAssignmentMapper;
    @Autowired
    private DamageMapper damageMapper;
    /**
     * 查询报工信息
@@ -136,4 +145,29 @@
        }
        this.saveBatch(damageList);
    }
    @Override
    public List<Damage> selectDamagePrint(Damage damage) {
        QueryWrapper<Damage> wrapper = new QueryWrapper<>();
        wrapper.select("working_procedure,engineer_id,teams_groups_name,device_name,count(glass_id)as glass_id")
                .eq("type",damage.getType())
                .eq("working_procedure",damage.getWorkingProcedure())
                .groupBy("working_procedure,engineer_id,teams_groups_name,device_name");
                  if (damage.getEngineerId() != null) {
                      wrapper.eq("engineer_id", damage.getEngineerId());
                  }
        return this.list(wrapper);
    }
    @Override
    public List<DamagePrint> selectDamagePrintDetails(Damage damage) {
        List<DamagePrint> listDamage=damageMapper.selectJoinList(DamagePrint.class,new MPJQueryWrapper<Damage>()
                .select("b.flow_card_id,b.layer,t.engineer_id,b.tempering_layout_id,b.tempering_feed_sequence,t.glass_id,b.width,b.height,b.thickness")
                .leftJoin("glass_info as b  on t.glass_id=b.glass_id")
                .eq("t.working_procedure",damage.getWorkingProcedure())
                .eq("t.type",damage.getType())
                .eq("t.engineer_id",damage.getEngineerId())
        );
        return listDamage;
    }
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java
@@ -12,6 +12,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@@ -33,14 +36,28 @@
     * fixedDelay : 上一个调用结束后再次调用的延时
     */
    @Scheduled(fixedDelay = 2000)
    @Scheduled(fixedDelay = 10000)
    public void screenHome() {
        JSONObject jsonObject = new JSONObject();
        Reportingdamage reportingdamage = new Reportingdamage();
        reportingdamage.setReportingWorkTime("2024-05-11");
        //reportingdamage.setReportingWorkTime("2024-05-11");
        // 获取当前日期
        LocalDate today = LocalDate.now();
        // 计算最近七天的开始日期
        LocalDate startOfPeriod = today.minusDays(6); // 7天的范围包括今天,所以减去6天
        // 最近七天的结束日期就是今天
        LocalDate endOfPeriod = today;
        // 格式化日期为字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String startOfPeriodStr = startOfPeriod.format(formatter);
        String endOfPeriodStr = endOfPeriod.format(formatter);
        // 设置为最近七天的时间范围
        reportingdamage.setReportingWorkTime(startOfPeriodStr + " to " + endOfPeriodStr);
        //reportingdamage.setReportingWorkTime(startOfPeriodStr + " to " + endOfPeriodStr);
        //扇形图各设备的加工破损数量
        List<Reportingdamage> device = reportingWorkService.selectDamage(reportingdamage);
        jsonObject.append("device", device);
        //获取次破未补信息
        List<AwaitingRepair> awaitingRepairs = reportingWorkService.selectAwaitingRepair();
        jsonObject.append("awaitingRepairs", awaitingRepairs);
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
spring:
  profiles:
    active: cz
    active: prod
  application:
    name: unLoadGlass