ZengTao
2024-07-18 06ab9d2c987383154fe7759e23be7f4a69bf4f33
Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes
21个文件已修改
2 文件已重命名
13个文件已添加
1个文件已删除
650 ■■■■ 已修改文件
JsonFile/PlcTemperingGlass.json 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/d1a.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/dlpl9.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/lp9.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/lpa9.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseStorage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/Landingindication.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/largescreen/largescreen.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeDetailController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/common/S7object.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/controller/TemperingRecordController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/entity/TemperingRecord.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/mapper/TemperingRecordMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/mapper/xml/TemperingRecordMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/service/TemperingRecordService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/service/impl/TemperingRecordServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
JsonFile/PlcTemperingGlass.json
New file
@@ -0,0 +1,132 @@
{
    "plcAddressBegin": "DB88.0",
    "plcAddressLenght": "58",
    "dataType": "word",
    "parameteInfor": [
        {
            "codeId": "confirmationWord",
            "addressIndex": "0",
            "addressLenght": "2"
        },
        {
            "codeId": "temperingLayoutId",
            "addressIndex": "2",
            "addressLenght": "2"
        },
        {
            "codeId": "filmsid",
            "addressIndex": "4",
            "addressLenght": "2"
        },
        {
            "codeId": "temperingType",
            "addressIndex": "6",
            "addressLenght": "2"
        },
        {
            "codeId": "thickness",
            "addressIndex": "8",
            "addressLenght": "2"
        },
        {
            "codeId": "loadingRate",
            "addressIndex": "10",
            "addressLenght": "2"
        },
        {
            "codeId": "areaDifference",
            "addressIndex": "12",
            "addressLenght": "2"
        },
        {
            "codeId": "state",
            "addressIndex": "22",
            "addressLenght": "2"
        },
        {
            "codeId": "deviceState",
            "addressIndex": "24",
            "addressLenght": "2"
        },
        {
            "codeId": "resultState",
            "addressIndex": "26",
            "addressLenght": "2"
        },
        {
            "codeId": "loadSpeed",
            "addressIndex": "28",
            "addressLenght": "2"
        },
        {
            "codeId": "downSpeed",
            "addressIndex": "30",
            "addressLenght": "2"
        },
        {
            "codeId": "load1",
            "addressIndex": "32",
            "addressLenght": "2"
        },
        {
            "codeId": "heat1",
            "addressIndex": "34",
            "addressLenght": "2"
        },
        {
            "codeId": "heat2",
            "addressIndex": "36",
            "addressLenght": "2"
        },
        {
            "codeId": "cool1",
            "addressIndex": "38",
            "addressLenght": "2"
        },
        {
            "codeId": "cool2",
            "addressIndex": "40",
            "addressLenght": "2"
        },
        {
            "codeId": "downId",
            "addressIndex": "42",
            "addressLenght": "2"
        },
        {
            "codeId": "productionTime",
            "addressIndex": "44",
            "addressLenght": "2"
        },
        {
            "codeId": "heatEnergy",
            "addressIndex": "46",
            "addressLenght": "2"
        },
        {
            "codeId": "coolEnergy",
            "addressIndex": "48",
            "addressLenght": "2"
        },
        {
            "codeId": "temperatureUp1",
            "addressIndex": "50",
            "addressLenght": "2"
        },
        {
            "codeId": "temperatureDown1",
            "addressIndex": "52",
            "addressLenght": "2"
        },
        {
            "codeId": "temperatureUp2",
            "addressIndex": "54",
            "addressLenght": "2"
        },
        {
            "codeId": "temperatureDown2",
            "addressIndex": "56",
            "addressLenght": "2"
        }
    ]
}
UI-Project/src/assets/d1a.png
UI-Project/src/assets/dlpl9.png
UI-Project/src/assets/lp9.png
UI-Project/src/assets/lpa9.png
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -89,7 +89,7 @@
    >
     <div  class="centered-text">
    <div >{{ rect.flowcardId }}</div>  
    <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>
    <div style="text-align: center;">{{ rect.widtha }}*{{ rect.heighta }}</div>
  </div>
  </div>
   </div>
@@ -106,7 +106,7 @@
    >
     <div  class="centered-text">
    <div >{{ rect.flowcardId }}</div>  
    <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>
    <div style="text-align: center;">{{ rect.widtha }}*{{ rect.heighta }}</div>
  </div>
  </div>
   </div>
@@ -128,7 +128,7 @@
       backgroundColor: rect.state === 0 ? '#dedfe0' : '#d1edc4' }">
     <div  class="centered-text">
    <div >{{ rect.flowcardId }}</div>  
    <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>
    <div style="text-align: center;">{{ rect.widtha }}*{{ rect.heighta }}</div>
  </div>
  </div> 
   </div>
@@ -149,7 +149,7 @@
       backgroundColor: rect.state === 4 ? '#911005' : '#f8e3c5' }">
     <div  class="centered-text">
    <div >{{ rect.flowcardId }}</div>  
    <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>
    <div style="text-align: center;">{{ rect.widtha }}*{{ rect.heighta }}</div>
  </div>
  </div> 
   </div>
UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
@@ -67,7 +67,7 @@
       backgroundColor: rect.state === 4 ? '#d1edc4' : '#f8e3c5' }">
     <div  class="centered-text">
    <div >{{ rect.flowcardId }}</div>  
    <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>
    <div style="text-align: center;">{{ rect.widtha }}*{{ rect.heighta }}</div>
  </div>
  </div> 
   </div>
UI-Project/src/views/Slicecage/slicecage.vue
UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -1,7 +1,7 @@
<template>
  <div class="glass-rack">
    <div >
      <svg width="500" height="500" xmlns="http://www.w3.org/2000/svg">
      <svg width="500" height="370" xmlns="http://www.w3.org/2000/svg">
        <g stroke="null" id="Layer_1">
          <!-- 使用 v-for 循环渲染数据 -->
          <g v-for="(rack, index) in racks" :key="index"   :data="tableData">
@@ -42,11 +42,11 @@
import { initializeWebSocket } from '@/utils/WebSocketService';
 import { WebSocketHost } from '@/utils/constants';
const racks = ref([
  { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: '',downGlassInfoList:"" } },
  { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456',downGlassInfoList:"" } },
 
  { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: '',downGlassInfoList:"" } },
  { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678',downGlassInfoList:"" } },
 
  { x: 140, y: 320, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: '' ,downGlassInfoList:""} }
  { x: 140, y: 280, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' ,downGlassInfoList:""} }
  
]);
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -1,7 +1,7 @@
<template>
  <div class="glass-rack">
    <div >
      <svg width="500" height="500" xmlns="http://www.w3.org/2000/svg">
      <svg width="500" height="370" xmlns="http://www.w3.org/2000/svg">
        <g stroke="null" id="Layer_1">
          <!-- 使用 v-for 循环渲染数据 -->
          <g v-for="(rack, index) in racks" :key="index">
@@ -42,11 +42,11 @@
import { initializeWebSocket } from '@/utils/WebSocketService';
import { WebSocketHost ,host} from '@/utils/constants'
const racks = ref([
  { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: '' } },
  { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } },
 
  { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: '' } },
  { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678' } },
 
  { x: 140, y: 320, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: '' } }
  { x: 140, y: 280, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
  
]);
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -1,10 +1,8 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive, onMounted, onBeforeUnmount} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
import { useI18n } from 'vue-i18n'
  const { t } = useI18n()
  let language = ref(localStorage.getItem('lang') || 'zh')
@@ -39,7 +37,6 @@
    fetchFlowCardId(); 
  dialogFormVisiblea.value = true; // 打开绑定架子对话框
};
//获取流程卡号
const fetchFlowCardId = async () => {
  try {
@@ -59,7 +56,6 @@
  }
};
//确认
const handleConfirm = async () => {
  try {
    const firstPart = flowCardId.value.split('|')[0].trim(); // 
@@ -68,9 +64,7 @@
      workstationId: workstationId.value,
      flowCardId: firstPart,
      layer:twoPart
    }); 
    console.log(response)
    if (response.code == 200) {
      // 绑定成功,处理逻辑
@@ -88,16 +82,12 @@
    console.error(error);
  }
};
const updatePageData = () => {
  // 假设你的页面上有一个名为 tableData 的 Vue 组件
  // 你可以直接更新 tableData 的数据
  fetchTableData()
  // 使用 $forceUpdate() 强制更新组件
};
const handleBindRack2 = (row) => {
  workstationId.value = row.workstationId; // 假设rackNumber是架号字段的属性名
  dialogFormVisiblea2.value = true; // 打开绑定架子对话框
@@ -129,8 +119,6 @@
            dialogFormVisiblea2.value = false;
    }
};
// 发送获取表格数据的请求
const fetchTableData = async () => {
  try {
@@ -151,78 +139,43 @@
    ElMessage.error('获取表格数据失败,请重试');
  }
};
const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  tableData.splice(0, tableData.length, ...data.params[0]);
//  console.log("更新后数据", data.params[0]);
};
// 初始化 WebSocket,并传递消息处理函数
onMounted(() => {
  fetchFlowCardId();
  fetchTableData(); // 获取数据
  initializeWebSocket(socketUrl, handleMessage);
});
onBeforeUnmount(() => {
  console.log("关闭了")
  closeWebSocket();
});
const getTagType =(status) => {
      return status === 1 ? 'success' : 'danger';
      // 根据状态值决定标签类型,这里假设状态为1时为成功(绿色),否则为失败(红色)
    }
    const toggleStatus = (row) => {
      // 切换料架状态的逻辑
      row.enableState = 1 - row.enableState; // Toggle between 0 and 1
      // 此处可以添加保存状态的逻辑,比如调用 API 更新数据
      updateRowStatus(row);
    };
    const updateRowStatus = async (row) => {
  try {
    // 假设你的后端 API 接收 PUT 请求,并且需要传递 row.id 和 row.enableState 参数
    const response = await request.post('unLoadGlass/downWorkStation/updateDownWorkstation', {
      enableState:row.enableState,
      id:row.id
    });
    console.log('Updated row status:', response.data);
    // 可以根据后端返回的数据进行进一步处理,比如更新本地状态等
  } catch (error) {
    console.error('Error updating row status:', error);
    // 处理错误情况,比如提示用户更新失败
  }
};
// beforeUnmount(() => {
//   closeWebSocket();
// });
// setInterval(fetchTableData, 2000)
</script>
<template>
  <div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;">
        <el-table height="100%" ref="table"
    <el-card style="flex: 1;" v-loading="loading">
      <el-card style="flex: 1;margin-left: 4px;margin-top: 1px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
        <el-table height="200px" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="workstationId" align="center" :label="$t('reportWork.lowerbit')" min-width="80" />
          <el-table-column prop="workstationId" align="center" :label="$t('reportWork.shelfnumber')" min-width="120" />
          <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="120" />
          <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="150" />
          <el-table-column prop="totalquantity" align="center" :label="$t('reportWork.totalquantity')" min-width="120" />
          <el-table-column prop="racksnumber" align="center" :label="$t('reportWork.beendropped')" min-width="120" />
          <el-table-column prop="layer" align="center" label="层数" min-width="120" />
          <el-table-column prop="otherNumber" align="center" label="人工下片数" min-width="120" />
          <el-table-column prop="artificialnumber" align="center" label="人工下片数" min-width="120" />
          <el-table-column prop="work_state" align="center" :label="$t('reportWork.state')" min-width="120" />
          <el-table-column prop="deviceId" align="center" :label="$t('reportWork.devicenumber')" min-width="120" />
          <el-table-column
@@ -232,10 +185,7 @@
            prop="enableState"
          >
          <template #default="scope">
            <el-tag :type="getTagType(scope.row.enableState)" @click="toggleStatus(scope.row)">
          {{ scope.row.enableState === 1 ? $t('reportWork.enable') : $t('reportWork.unenable') }}
        </el-tag>
            <el-tag type="success" >{{ scope.row.enableState==1? $t('reportWork.enable') : $t('reportWork.unenable')}}</el-tag>
          </template>
          </el-table-column>
          <el-table-column fixed="right" :label="$t('reportWork.operate')" align="center" width="200">
@@ -247,7 +197,22 @@
        </el-table>
      </div>
    </el-card>
    <!-- workstationId: '1',
    workstationId: '1005',
    flowCardId: '183.6',
    totalquantity: '1991',
    racksnumber:"1",
    work_state: '待识别', -->
  <div style="display: flex;" class="awatch">
  <div id="main-body">
      <Landingindication></Landingindication>
    </div>
  <div id="main-bodya">
    <Landingindicationtwo></Landingindicationtwo>
    </div>
    </div>
    </el-card>
  </div>
    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')">
    <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
@@ -273,12 +238,7 @@
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="dialogFormVisiblea2" top="21vh" width="30%" :title="$t('reportWork.clearglass')">
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleclear">
@@ -288,26 +248,8 @@
      </div>
    </template>
  </el-dialog>
    <!-- workstationId: '1',
    workstationId: '1005',
    flowCardId: '183.6',
    totalquantity: '1991',
    racksnumber:"1",
    work_state: '待识别', -->
  </div>
  <div style="display: flex;">
  <div id="main-body">
      <Landingindication></Landingindication>
    </div>
  <div id="main-bodya">
    <Landingindicationtwo></Landingindicationtwo>
    </div></div>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
@@ -323,15 +265,15 @@
   background-color: #337ecc;
   margin-left: 28%;
}
#awatch{
  height: 450px;
.awatch{
  max-width: 100%;
}
#main-body{
  margin-top: -20px;
  margin-left: 200px;
  margin-top: -40px;
  margin-left: 150px;
}
#main-bodya{
  margin-top: -10px;
  margin-top: -40px;
  margin-left: 100px;
}
</style>
UI-Project/src/views/largescreen/largescreen.vue
@@ -26,7 +26,7 @@
      </el-table>
</div> 
<div id="center" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 750px;">
  <img src="../../assets/d1.png" alt="" style="margin-left: -30px; width: 110%;height: 100%;position: relative;">
  <img src="../../assets/d1a.png" alt="" style="margin-left: -10px; width: 100%;height: 100%;position: relative;">
</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"
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeDetailController.java
File was deleted
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java
@@ -34,11 +34,12 @@
private ReportingDamageMapper reportingDamageMapper;
@Autowired
private AwaitingRepairMapper awaitingRepairMapper;
    @Override
    public List<Reportingdamage> selectDamage(Reportingdamage reportingdamage) {
        QueryWrapper<Reportingdamage>queryWrapper=new QueryWrapper<>();
        queryWrapper.select("this_process,sum(completed_quantity)as completedQuantity,sum(breakage_quantity)as breakageQuantity,device_name ")
                .eq("this_process",reportingdamage.getThisProcess())
        queryWrapper.select("this_process,sum(completed_quantity) as completedQuantity,sum(breakage_quantity) as breakageQuantity ")
                //.eq("this_process", reportingdamage.getThisProcess())
                //.eq("device_name",reportingdamage.getDeviceName())
                .ge("reporting_work_time",reportingdamage.getReportingWorkTime())
                .groupBy("this_process");
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
@@ -1,5 +1,4 @@
package com.mes.temperingglass.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.mes.base.entity.BigStorageCageBaseInfo;
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
File was renamed from hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingAgoService.java
@@ -11,7 +11,7 @@
 * @author zhoush
 * @since 2024-04-07
 */
public interface TemperingAgoService extends MPJBaseService<TemperingGlassInfo> {
public interface TemperingGlassInfoService extends MPJBaseService<TemperingGlassInfo> {
    List<TemperingGlassInfo> selectWaitingGlass();
@@ -22,4 +22,6 @@
    List<TemperingGlassInfo> selectOverGlass();
    List<TemperingGlassInfo> selectLayoutId();
    List<TemperingGlassInfo> selectTaskType();
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
File was renamed from hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingAgoServiceImpl.java
@@ -1,12 +1,13 @@
package com.mes.temperingglass.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.yulichang.base.MPJBaseServiceImpl;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
import com.mes.temperingglass.service.TemperingAgoService;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.github.yulichang.base.MPJBaseServiceImpl;
import java.util.List;
@@ -19,7 +20,8 @@
 * @since 2024-04-07
 */
@Service
public class TemperingAgoServiceImpl extends MPJBaseServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingAgoService {
@DS("salve_hangzhoumes")
public class TemperingGlassInfoServiceImpl extends MPJBaseServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingGlassInfoService {
    @Autowired
    TemperingGlassInfoMapper temperingMapper;
@@ -55,12 +57,16 @@
    public List<TemperingGlassInfo> selectOverGlass() {
        //获取过旋转台最大的钢化版图id
        QueryWrapper<TemperingGlassInfo> wapper = new QueryWrapper<>();
        wapper.select("top 1 *").eq("state", 4)
        wapper.select("Top 1 *").eq("state", 4)
                .orderByDesc("tempering_layout_id");
        //根据最大的版图id显示钢化后的版图信息
        TemperingGlassInfo glassinfo= temperingMapper.selectOne(wapper);
        if (glassinfo == null) {
            return null;  // 直接返回null,表示没有找到符合条件的记录
        }
        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
        wrapper.eq("tempering_layout_id",glassinfo.getTemperingLayoutId());
        return  temperingMapper.selectList(wrapper);
    }
@@ -72,4 +78,12 @@
                .orderByAsc("tempering_layout_id");
        return temperingMapper.selectList(wrapper);
    }
    @Override
        public List<TemperingGlassInfo> selectTaskType() {
        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
        wrapper.select("state")
                .groupBy("state");
        return temperingMapper.selectList(wrapper);
    }
}
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java
@@ -33,15 +33,19 @@
    @ApiOperation("新增角色及角色下的权限信息")
    @PostMapping("/saveRole")
//    @PreAuthorize("hasAuthority('sys:role:save')")
    public Result<SysRole> saveRole(@Validated @RequestBody SysRoleVO sysRoleVO) {
        return Result.success(sysRoleService.saveRole(sysRoleVO));
    public Result<SysRoleVO> saveRole(@Validated @RequestBody SysRoleVO sysRoleVO) {
        //return Result.success(sysRoleService.saveRole(sysRoleVO));
        sysRoleService.saveRole(sysRoleVO);
        return Result.build(200,"新增成功",sysRoleVO);
    }
    @ApiOperation("编辑角色及角色下的权限信息")
    @PostMapping("/updateRole")
//    @PreAuthorize("hasAuthority('sys:role:save')")
    public Result<String> updateRole(@Validated @RequestBody SysRoleVO sysRoleVO) {
        return Result.success(sysRoleService.updateRole(sysRoleVO));
    public Result<SysRoleVO> updateRole(@Validated @RequestBody SysRoleVO sysRoleVO) {
       // return Result.success(sysRoleService.updateRole(sysRoleVO));
        sysRoleService.updateRole(sysRoleVO);
        return Result.build(200,"新增成功",sysRoleVO);
    }
    @ApiOperation("查询角色及角色下的权限信息")
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java
@@ -117,10 +117,21 @@
            roleMenu.setMenuId(menu.getId());
            return roleMenu;
        }).collect(Collectors.toList());
        // 使用流处理菜单列表,提取 children 的 id,并设置到 SysRoleMenu 中
        List<SysRoleMenu> childrenList = menuList.stream()
                .flatMap(menu -> menu.getChildren().stream()) // 扁平化处理 children 列表
                .map(child -> {
                    SysRoleMenu roleMenu = new SysRoleMenu();
                    roleMenu.setRoleId(roleId);
                    roleMenu.setMenuId(child.getId()); // 设置 child 的 id 到 menuId
                    return roleMenu;
                })
                .collect(Collectors.toList());
        log.info("清空角色权限表中该角色信息");
        // 先删除原来的记录,再保存新的
        sysRoleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, roleId));
        sysRoleMenuService.saveBatch(roleMenuList);
        sysRoleMenuService.saveBatch(childrenList);
        // 删除缓存
        sysUserService.clearUserAuthorityInfoByRoleId(roleId);
        return "success";
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java
@@ -43,7 +43,6 @@
    @ApiOperation("退出登录")
    @PostMapping("/logout")
//    @PreAuthorize("hasRole('ROLE_admin')")
    @PreAuthorize("hasAuthority('xt:yh')")
    public Result<String> logout() {
        return Result.success(sysUserService.logout());
@@ -61,10 +60,9 @@
    @PostMapping("/updateUser")
//    @PreAuthorize("hasAuthority('sys:user:update')")
    public Result<List<SysUserVO>> updateUser(@Validated @RequestBody SysUserVO sysUser) {
        //return Result.success(sysUserService.updateUser(sysUser));
        sysUserService.updateUser(sysUser);
        GeneralRequest request=new GeneralRequest();
        request.setKey("");
        //request.setKey("");
        return Result.success(sysUserService.listByUserName(request));
        //更改了修改之后返回所有用户列表
    }
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -375,7 +375,7 @@
        List<Object> list = edgStorageCageDetailsService.listObjs(queryWrapper);
        //获取笼内玻璃版图差值是否大于阈值
        if (CollectionUtil.isNotEmpty(list)) {
            int diff = (int) list.get(0);
            Long diff = (Long) list.get(0);
            return diff > threshold;
        } else {
            return Boolean.FALSE;
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
@@ -43,7 +43,7 @@
     * fixedDelay : 上一个调用结束后再次调用的延时
     */
    @Scheduled(fixedDelay = 300)
    @Scheduled(fixedDelay = 30000000)
    public void plcLoadGlassTask() throws InterruptedException {
        try {
            //获取联机状态
@@ -87,7 +87,7 @@
        }
    }
    @Scheduled(fixedDelay = 300)
    @Scheduled(fixedDelay = 30000000)
    public void plcLoadGlassReport(){
        //获取是否有汇报
        String loadStatus = plcParameterObject.getPlcParameter("PlcStatus").getValue();
@@ -144,8 +144,8 @@
    public void loadGlassStatus(){
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        String inkageStatus =plcParameterObject.getPlcParameter("MesToPlc").getValue();
        //String inkageStatus ="1";
        //String inkageStatus =plcParameterObject.getPlcParameter("MesToPlc").getValue();
        String inkageStatus ="1";
        jsonObject.append("InkageStatus", inkageStatus);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass");
        if (sendwServer != null) {
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
@@ -52,7 +52,11 @@
      */
     UpPattenUsage selectSequence(UpPattenUsage upPattenUsage);
     /**
      * 更改上片玻璃状态
      * @return UpPattenUsage
      */
     Boolean updateGlassState(UpPattenUsage upPattenUsage);
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/common/S7object.java
New file
@@ -0,0 +1,60 @@
package com.mes.common;
import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
import com.mes.device.PlcParameterObject;
import com.mes.tools.InitUtil;
import com.mes.tools.S7control;
/**
 * @Author : zhoush
 * @Date: 2024/4/9 15:13
 * @Description:
 */
public class S7object extends Thread {
    public S7control plccontrol; // PLC通讯类实例
    private EPlcType plcType = EPlcType.S1200; // 西门子PLC类型
    private String ip = "192.168.20.202"; // plc ip地址
    private int port = 102; // plc 端口号
    public PlcParameterObject PlcMesObject;
    private static volatile S7object instance = null;
    private S7object() {
        if (plccontrol == null) {
            plccontrol = new S7control(plcType, ip, port, 0, 0);
            String PlcLoadGlass = System.getProperty("user.dir") + "/JsonFile/PlcTemperingGlass.json";
            PlcMesObject = InitUtil.initword(PlcLoadGlass);
        }
    }
    // 单例模式 获取类的唯一实例
    public static S7object getinstance() {
        if (instance == null) {
            synchronized (S7object.class) {
                if (instance == null) {
                    instance = new S7object();
                }
            }
        }
        return instance;
    }
    @Override
    public void run() {
        while (this != null) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            byte[] getplcvlues = plccontrol.readByte(PlcMesObject.getPlcAddressBegin(), PlcMesObject.getPlcAddressLength());
            if (getplcvlues != null) {
                PlcMesObject.setPlcParameterList(getplcvlues);
            }
        }
    }
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -1,6 +1,6 @@
package com.mes.job;
import cn.hutool.json.JSONObject;
import com.mes.temperingglass.service.TemperingAgoService;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.tools.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
@@ -19,13 +19,13 @@
public class PlcTemperingGlassTask {
    @Autowired
    private TemperingAgoService temperingAgoService;
    private TemperingGlassInfoService temperingAgoService;
    /**
     * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成)
     * fixedDelay : 上一个调用结束后再次调用的延时
     */
    @Scheduled(fixedDelay = 1000)
    @Scheduled(fixedDelay = 2000)
    public void temperingGlassHome(){
        JSONObject jsonObject = new JSONObject();
        //正在等待进片的玻璃
@@ -46,6 +46,7 @@
        jsonObject.append("outGlass", outGlass);
        //过旋转台钢化后的玻璃
        List<TemperingGlassInfo> overGlass = temperingAgoService.selectOverGlass();
        jsonObject.append("overGlass", overGlass);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("temperingGlass");
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
New file
@@ -0,0 +1,29 @@
package com.mes.job;
import com.mes.tempering_record.service.TemperingRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
/**
 * @Author : zhoush
 * @Date: 2024/7/17 12:47
 * @Description:
 */
public class TemperingTask {
    @Autowired
    private TemperingRecordService temporalRecordService;
    @Scheduled(fixedDelay = 1000)
    public void temperingGlassBefore() {
        //todo:获取钢化版图中状态为2的(进炉完成的玻璃信息)  且不存在钢化记录表内的
    }
    @Scheduled(fixedDelay = 1000)
    public void temperingGlassAfter() {
    }
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/controller/TemperingRecordController.java
New file
@@ -0,0 +1,20 @@
package com.mes.tempering_record.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author zhoush
 * @since 2024-07-17
 */
@RestController
@RequestMapping("/temperingRecord")
public class TemperingRecordController {
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/entity/TemperingRecord.java
New file
@@ -0,0 +1,73 @@
package com.mes.tempering_record.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-07-17
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class TemperingRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 钢化版图
     */
    private Integer temperingLayoutId;
    /**
     * 玻璃材质(膜系0.白玻1.单银2.双银3三银 4.超白5.热反射)
     */
    private Integer glassType;
    /**
     * 钢化类型(1.全钢:2.半钢)
     */
    private Integer temperingType;
    /**
     * 厚度(厚度*10)
     */
    private Double thickness;
    /**
     * 装载率
     */
    private Double loadingRate;
    /**
     * 面积差
     */
    private Double areaDifference;
    /**
     * 生产耗时
     */
    private String productionTime;
    /**
     * 加热能耗
     */
    private String heatEnergy;
    /**
     * 冷却能耗
     */
    private String coolEnergy;
    /**
     * 是否完成(plc获取非1:参数不存在;2、匹配完成;3、匹配超时)
     */
    private Integer state;
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/mapper/TemperingRecordMapper.java
New file
@@ -0,0 +1,16 @@
package com.mes.tempering_record.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.tempering_record.entity.TemperingRecord;
/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author zhoush
 * @since 2024-07-17
 */
public interface TemperingRecordMapper extends BaseMapper<TemperingRecord> {
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/mapper/xml/TemperingRecordMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mes.tempering_record.mapper.TemperingRecordMapper">
</mapper>
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/service/TemperingRecordService.java
New file
@@ -0,0 +1,16 @@
package com.mes.tempering_record.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.tempering_record.entity.TemperingRecord;
/**
 * <p>
 * 服务类
 * </p>
 *
 * @author zhoush
 * @since 2024-07-17
 */
public interface TemperingRecordService extends IService<TemperingRecord> {
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/tempering_record/service/impl/TemperingRecordServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.mes.tempering_record.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.tempering_record.entity.TemperingRecord;
import com.mes.tempering_record.mapper.TemperingRecordMapper;
import com.mes.tempering_record.service.TemperingRecordService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author zhoush
 * @since 2024-07-17
 */
@Service
public class TemperingRecordServiceImpl extends ServiceImpl<TemperingRecordMapper, TemperingRecord> implements TemperingRecordService {
}
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
@@ -1,5 +1,5 @@
package com.mes.temperingglass.controller;
import com.mes.temperingglass.service.TemperingAgoService;
import com.mes.temperingglass.service.TemperingGlassInfoService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.utils.Result;
import io.swagger.annotations.ApiOperation;
@@ -22,7 +22,7 @@
public class TemperingGlassInfoController {
    @Autowired
    private TemperingAgoService temperingAgoService;
    private TemperingGlassInfoService temperingAgoService;
    @ApiOperation("查询钢化等片中的版图信息,状态为1的为已到,状态为0的为等待中")
    @GetMapping("/selectWaitingGlass") // 查询钢化等片中的版图信息,状态为1的为已到,状态为0的为等待中
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
@@ -4,8 +4,18 @@
      primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
#        hangzhoumes:
#          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
#          username: root
#          password: beibo.123/
#          driver-class-name: com.mysql.cj.jdbc.Driver
#        salve_hangzhoumes:
#          url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes
#          username: sa
#          password: beibo.123/
#          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
        hangzhoumes:
          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
          url: jdbc:mysql:127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
@@ -15,12 +25,12 @@
          password: beibo.123/
          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
        pp:
          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
          url: jdbc:mysql://127.0.0.1:3306/pp?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        sd:
          url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8
          url: jdbc:mysql://127.0.0.1:3306/sd?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml
@@ -1,7 +1,7 @@
spring:
  datasource:
    dynamic:
      primary: hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      primary: salve_hangzhoumes #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        hangzhoumes:
@@ -28,6 +28,8 @@
    nacos:
      discovery:
        server-addr: 10.153.19.150:8848
  application:
        name: temperingGlass
  redis:
    database: 0
    host: 10.153.19.150
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -489,6 +489,7 @@
        DownGlassInfo downGlassInfo = new DownGlassInfo();
        BeanUtils.copyProperties(downStorageCageDetails, downGlassInfo);
        //todo:落架片序
        downGlassInfo.setSequence(downGlassInfoService.queryMaxSequence(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer()));
        downGlassInfoService.save(downGlassInfo);
        //生成任务信息
        GlassInfo glassInfo = new GlassInfo();
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
@@ -38,7 +38,7 @@
        order by count desc limit 1
    </select>
    <select id="queryMaxSequence" resultType="java.lang.Integer">
        SELECT max(sequence) + 1 as sequence
        SELECT COALESCE(max(sequence) + 1, 0) as sequence
        FROM down_glass_info
        WHERE flow_card_id = #{flowCardId}
          AND layer = #{layer}