zhoushihao
2024-05-28 7e018f8c1f6e591440cc85b029c09e0533d4791f
Merge remote-tracking branch 'origin/master'
14个文件已修改
817 ■■■■ 已修改文件
UI-Project/src/views/Returns/returns.vue 539 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/User/permissions.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/User/rolelist.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/User/userlist.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/returns.vue
@@ -4,7 +4,6 @@
import {useRouter} from "vue-router"
const router = useRouter()
import type { TableColumnCtx } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
const dialogFormVisible = ref(false)
const blind = ref(false)
@@ -14,54 +13,51 @@
const adda = ref(false)
const flake = ref(false)
const flakea = ref(false)
// const patternHeight = ref('');
// const patternWidth = ref('');
// const filmsId = ref('');
// const patternThickness = ref('');
// const number = ref('');
//  patternHeight.value = '';
    //  patternWidth.value = '';
    //  filmsId.value = '';
    //  patternThickness.value = '';
    //  number.value = '';
import { WebSocketHost } from '@/utils/constants'
import request from "@/utils/request"
const ida = ref(null); 
import { ref, onMounted, onUnmounted } from "vue";
// import http from "@/http/index";
let ruleForm = ref({
  projectNo: '',
  workstationId: '',
  patternHeight: '',
  patternWidth: '',
  filmsId: '',
  patternThickness: '',
  number: '',
})
const tableDataa = ref([])
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
import { ref, onMounted, onUnmounted, onBeforeUnmount } from "vue";
// 响应式数据
const selectedProjectNo = ref(''); // 当前选中的工程号
const selectedProjectNoa = ref(''); // 当前选中的工程号
const selectedValue = ref(''); // 当前选中的宽
const selectedValuea = ref('');
const selectedValueb = ref('');
const selectedValuec = ref('');
const options = ref<any[]>([]); // 下拉选项列表
const selectOptions = ref<Array<any>>([]); // 下拉选选项数组
const selectOptionsa = ref<Array<any>>([]); // 下拉选选项数组
const selectOptionsb = ref<Array<any>>([]); // 下拉选选项数组
const selectOptionsc = ref<Array<any>>([]); // 下拉选选项数组
  const tableDataa = ref([])
  const tableData = reactive([]);
//   let filterData = ref({
//   damageDetails: {
//     state: '',
//   },
// })
// 发送获取表格数据的请求
const fetchTableData = async () => {
  const fetchTableData = async () => {
  try {
    const response = await request.get("/loadGlass/up-patten-usage/prioritylist");
    // 检查响应状态
    if (response.code === 200) {
      // 更新表格数据
      console.log('成功获取表格数据:', response.data);
      tableData.splice(0, tableData.length, ...response.data);
      window.localStorage.setItem('engineeringId', response.data[0].engineeringId)
      selectOptions.value = response.data.map(item => ({
      value: item.width, // 假设这是你想要作为value的属性
      label: item.width, // 假设这是你想要显示的label
    }));
    selectOptionsa.value = response.data.map(item => ({
      value: item.height,
      label: item.height,
    }));
    selectOptionsb.value = response.data.map(item => ({
      value: item.filmsId,
      label: item.filmsId,
    }));
    selectOptionsc.value = response.data.map(item => ({
      value: item.thickness,
      label: item.thickness,
    }));
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.msg);
    }
  } catch (error) {
@@ -69,135 +65,45 @@
    // ElMessage.error('获取表格数据失败,请重试');
  }
};
onMounted(async () => {
  await fetchTableData();
  // 设置定时器来定期刷新数据
  const intervalId = setInterval(async () => {
    await fetchTableData();
  }, 1000); // 每1秒刷新一次
  // 组件卸载时清除定时器
  onUnmounted(() => {
    clearInterval(intervalId);
  });
});
onMounted(async () => {
  await fetchTableDataa();
  // 设置定时器来定期刷新数据
  const intervalId = setInterval(async () => {
    await fetchTableDataa();
  }, 1000); // 每1秒刷新一次
  // 组件卸载时清除定时器
  onUnmounted(() => {
    clearInterval(intervalId);
  });
});
  //  request.get("/loadGlass/LoadGlass/list").then((res) => {
  //   if (res.code === 200) {
  //    console.log(res.data);
  //    tableDataa.value = res.data;
  //   if (tableDataa.value.length === 2) {
  //    if (tableDataa.value[0].patternWidth > 0) {
  //     flake.value = true;
  //    }
  //   if (tableDataa.value[1].patternWidth > 0) {
  //   flakea.value = true;
  //   }
  //   }
  //   } else {
  //   ElMessage.warning(res.msg);
  //   // router.push("/login");
  //   }
  //  });
   async function fetchTableDataa() {
  try {
    const res = await request.get("/loadGlass/LoadGlass/list");
    if (res.code === 200) {
      tableDataa.value = res.data;
      // 根据数据更新 flake 和 flakea 的值
      if (res.data.length >= 2) {
        if (res.data[0].patternWidth > 0) {
          flake.value = true;
        } else {
          flake.value = false;
        }
        if (res.data[1].patternWidth > 0) {
          flakea.value = true;
        } else {
          flakea.value = false;
        }
      }
    } else {
      ElMessage.warning(res.msg);
    }
  } catch (error) {
    console.error('获取表格数据失败', error);
    // 可以在这里添加额外的错误处理逻辑
  }
}
// request.get("/loadGlass/LoadGlass/list").then((res) => {
//       window.localStorage.setItem('patternWidth', res.data.patternWidth)
//       window.localStorage.setItem('workstationId', res.data.workstationId)
//           if (res.code == 200) {
//           console.log(res.data);
//           tableDataa.value = res.data
//           console.log(res.data.patternWidth);
request.get("/loadGlass/LoadGlass/list").then((res) => {
      window.localStorage.setItem('patternWidth', res.data.patternWidth)
      window.localStorage.setItem('workstationId', res.data.workstationId)
          if (res.code == 200) {
          console.log(res.data);
          tableDataa.value = res.data
          console.log(res.data.patternWidth);
          
//       let workstationId = window.localStorage.getItem('workstationId')
//       let patternWidth = window.localStorage.getItem('patternWidth')
//       if (patternWidth !== '' || workstationId == '1') {
//       flake.value = true
//     } else if (patternWidth !== '' || workstationId == '2') {
//       flakea.value = true
//     }
//           } else {
//           ElMessage.warning(res.msg)
//           // router.push("/login")
//           }
//           });
      let workstationId = window.localStorage.getItem('workstationId')
      let patternWidth = window.localStorage.getItem('patternWidth')
      if (patternWidth !== '' || workstationId == '1') {
      flake.value = true
    } else if (patternWidth !== '' || workstationId == '2') {
      flakea.value = true
    }
          } else {
          ElMessage.warning(res.msg)
          // router.push("/login")
          }
          });
//定义接收加载表头下拉数据
const titleSelectJson = ref({
  processType: [],
})
const titleSelectJsona = ref({
  processTypea: [],
})
// const getBasicData = ref({
//   id: '',
//   projectNo: '',
// })
// const requestData = {
//     // projectNo:"P24030805",
//     state:100
//   };
// request.post("/loadGlass/optimizeProject/listByState", requestData)
// .then((res) => {
//           if (res.code == 200) {
//     titleSelectJson.value.processType = res.data;
//           console.log(res.data);
//           } else {
//           ElMessage.warning(res.msg)
//           // router.push("/login")
//           }
//           });
          // 初始请求参数
const socketUrl = `ws://10.153.19.150:88/api/loadGlass/api/talk/loadGlass`;
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  tableData.splice(0, tableData.length, ...data.prioritylist[0]);
  tableDataa.value = data.list[0]
 // console.log("更新后数据", tableData);
};
const requestData = {  
  state: 100  
};  
// 响应式数据
const selectedProjectNo = ref(''); // 当前选中的工程号
const selectedProjectNoa = ref(''); // 当前选中的工程号
const options = ref<any[]>([]); // 下拉选项列表
// 调用接口获取选项数据的函数  
const fetchOptions = async (queryString: string) => {  
  try {  
@@ -218,22 +124,6 @@
    console.error('Error fetching options:', error);  
  }  
};  
  // 开始上片下拉选
const fetchOptionsa = async (queryString: string) => {
  try {
    // 发送请求到后端接口
    const response = await request.get('/loadGlass/engineering/engineering/selectTask');
    if (response.code == 200) {
    titleSelectJsona.value.processTypea = response.data;
    console.log(response.data);
    } else {
      ElMessage.warning(response.data);
    }
  } catch (error) {
    console.error('Error fetching options:', error);
  }
};
// 处理用户输入变化的方法  
const handleInputChange = async (value: string) => {  
  if (value) {  
@@ -252,28 +142,14 @@
};  
// 初始化加载数据(如果需要)  
onMounted(() => {  
  // 在组件挂载后调用 fetchOptions('') 来加载初始数据(如果需要)
  fetchOptions('');  
  initializeWebSocket(socketUrl, handleMessage);
});  
onMounted(() => {
  // 在组件挂载后调用 fetchOptions('') 来加载初始数据(如果需要)
  fetchOptionsa('');
});
// const billall  = () => {
//   request.post("/loadGlass/optimizeProject/listByState", requestData)
//     .then((res: any) => {
//       // if (res.code == 200) {
//       tableData.value = res.data;
//       // let self = this
//       // }
//     })
//     .catch((err: any) => {});
// }
onBeforeUnmount(() => {
  console.log("关闭了")
  closeWebSocket();
});
const user = ref('');
// 定义表头上传数据
// let titleUploadData = ref({
//   projectNo:'',
// })
const projectNo = ref('');
const workstationId = ref('');
const id = ref('');
@@ -298,10 +174,10 @@
    const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
      id: workstationId.value,
      workstationId: workstationId.value,
      patternHeight: patternHeight.value,
      patternWidth: patternWidth.value,
      filmsId: filmsId.value,
      patternThickness: patternThickness.value,
      patternHeight: selectedValuea.value,
      patternWidth: selectedValue.value,
      filmsId: selectedValueb.value,
      patternThickness: selectedValuec.value,
      number: number.value
    }); 
    if (response.code == 200) {
@@ -310,11 +186,11 @@
      // window.location.reload() 
      add.value = false;
     tableDataa.value = response.data;
    //  patternHeight = '';
    //  patternWidth.value = '';
    //  filmsId.value = '';
    //  patternThickness.value = '';
    //  number.value = '';
      selectedValuea.value = '';
      selectedValue.value = '';
      selectedValueb.value = '';
      selectedValuec.value = '';
      number.value = '';
      window.localStorage.setItem('workstationId', response.data.workstationId)
      let workstationId = window.localStorage.getItem('workstationId')
      if (workstationId == '1') {
@@ -337,10 +213,10 @@
    const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
      id: workstationId.value,
      workstationId: workstationId.value,
      patternHeight: patternHeight.value,
      patternWidth: patternWidth.value,
      filmsId: filmsId.value,
      patternThickness: patternThickness.value,
      patternHeight: selectedValuea.value,
      patternWidth: selectedValue.value,
      filmsId: selectedValueb.value,
      patternThickness: selectedValuec.value,
      number: number.value
    }); 
    if (response.code == 200) {
@@ -349,6 +225,11 @@
      // window.location.reload() 
      add.value = false;
     tableDataa.value = response.data;
      selectedValuea.value = '';
      selectedValue.value = '';
      selectedValueb.value = '';
      selectedValuec.value = '';
      number.value = '';
      window.localStorage.setItem('workstationId', response.data.workstationId)
      let workstationId = window.localStorage.getItem('workstationId')
      if (workstationId == '1') {
@@ -410,7 +291,7 @@
// 选择工程确认
const handleup = async () => {
  try  {
  const response = await request.post('/loadGlass/up-patten-usage/saveUpPattenUsage', {
  const response = await request.post('/loadGlass/up-patten-usage/selectUpPattenUsage', {
    engineerId: selectedProjectNo.value,
    })
    if (response.code == 200) {
@@ -418,7 +299,10 @@
      ElMessage.success(response.message);
      // window.location.reload() 
      dialogFormVisible.value = false;
      tableData.splice(0, tableData.length, ...response.data);
      selectedProjectNo.value = ''
      markingMachineStatus.value = '#911005';
      cuttingMachineStatus.value = '#911005';
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.msg);
@@ -431,9 +315,14 @@
}
// 开始上片
const handle = async () => {
  if (markingMachineStatus.value === 'green' && cuttingMachineStatus.value === 'green') {
  try  {
  let engineeringId = window.localStorage.getItem('engineeringId')
console.log(engineeringId);
  const response = await request.post('/loadGlass/engineering/engineering/changeTask', {
    engineerId: selectedProjectNoa.value,
    engineerId: engineeringId,
    state: 1,
    })
    if (response.code == 200) {
@@ -441,7 +330,6 @@
      ElMessage.success(response.message);
      // window.location.reload() 
      blind.value = false;
      tableData.splice(0, tableData.length, ...response.data);
      selectedProjectNoa.value = ''
    } else {
      // 请求失败,显示错误消息
@@ -452,6 +340,10 @@
    // 处理错误
    console.error(error);
  }
    } else if (markingMachineStatus.value === '#911005' || cuttingMachineStatus.value === '#911005') {
      // 提示用户打标机未就绪
      ElMessage.warning('请确认打标机和切割机的就绪状态!');
    }
}
// 暂停
const handlea = async () => {
@@ -459,17 +351,13 @@
  let engineeringId = window.localStorage.getItem('engineeringId')
console.log(engineeringId);
if (engineeringId !== '') {
  const response = await request.post('/loadGlass/engineering/engineering/changeTask', {
  const response = await request.post('/loadGlass/engineering/engineering/pauseTask', {
      engineeringId: engineeringId,
      state: 0,
    })
    if (response.code == 200) {
      // 绑定成功,处理逻辑
      ElMessage.success(response.message);
      // window.location.reload()
      blinda.value = false;
      // tableData.value = response.data
      // tableData.value = [];
      tableData.splice([]);
    } else {
      // 请求失败,显示错误消息
@@ -494,7 +382,7 @@
  let engineeringId = window.localStorage.getItem('engineeringId')
console.log(engineeringId);
if (engineeringId !== '') {
  const response = await request.post('/loadGlass/engineering/engineering/changeTask', {
  const response = await request.post('/loadGlass/engineering/engineering/pauseTask', {
      engineeringId: engineeringId,
      state: 0,
    })
@@ -522,7 +410,6 @@
  }
}
onMounted(fetchTableData);
onMounted(fetchTableDataa);
function getStatusText(state: number) {
  switch (state) {
    case 0:  
@@ -533,115 +420,63 @@
      return '上片中';  
    case 100:  
      return '已完成';  
    default:
      return '未知状态';
  }  
}  
function getStatusType(state: number) {  
  // 这里假设只有100时类型不是success,其他都是success
  return state === 100 ? 'info' : 'success'; // 根据需要调整类型
  switch (state) {
    case 0:
      return 'warning';
    case 1:
      return 'primary';
    case 2:
      return 'primary';
    case 100:
      return 'success';
  }
}  
// const open = () => {
//   ElMessageBox.confirm(
//     '是否删除该条信息?',
//     '提示',
//     {
//       confirmButtonText: '是',
//       cancelButtonText: '取消',
//       type: 'warning',
//     }
//   )
//     .then(() => {
//       ElMessage({
//         type: 'success',
//         message: '删除成功!',
//       })
//     })
//     .catch(() => {
//       ElMessage({
//         type: 'info',
//         message: '删除失败',
//       })
//     })
// }
// 开始上片
const handleBind = (row) => {
  // engineeringId.value = row.engineeringId;
  blind.value = true; // 打开绑定架子对话框
};
// 暂停
const handleBinda = (row) => {
  // engineeringId.value = row.engineeringId;
  blinda.value = true; // 打开绑定架子对话框
  blinda.value = true;
};
// 停止任务
const handleBindb = (row) => {
  // engineeringId.value = row.engineeringId;
  blindb.value = true; // 打开绑定架子对话框
  blindb.value = true;
};
// 删除
const handleBindRacka = (row) => {
  workstationId.value = row.workstationId; // 假设rackNumber是架号字段的属性名
  adda.value = true; // 打开绑定架子对话框
  workstationId.value = row.workstationId;
  adda.value = true;
};
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
})
// 定义一个响应式引用,用于存储颜色状态
const markingMachineStatus = ref('#911005');
const cuttingMachineStatus = ref('#911005');
// 定义一个方法来改变颜色状态
const confirmMarkingMachine = () => {
  markingMachineStatus.value = 'green';
};
const confirmCuttingMachine = () => {
  cuttingMachineStatus.value = 'green';
};
</script>
 
<template>
  <div>
    <div id="dotClass">
      <div>打标机就绪状态:</div>
      <i style="margin-top: 2px; background-color: green;width:18px;  height:18px;  border-radius: 50%;  display: block"></i>
    <el-button style="margin-left: 30px;margin-top: -3px;">手动确认</el-button>
      <div>打标机就绪状态:</div>
    <i :style="{ marginTop: '2px', backgroundColor: markingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
    <el-button @click="confirmMarkingMachine" style="margin-left: 30px;margin-top: -3px;">手动确认</el-button>
 
    <div style="margin-left: 70px;">切割机就绪状态:</div>
     <i style="margin-top: 2px; background-color: #911005 ;width:18px;  height:18px;  border-radius: 50%;  display: block"></i>
    <el-button style="margin-left: 30px;margin-top: -3px;" >手动确认</el-button>
    <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
    <el-button @click="confirmCuttingMachine" style="margin-left: 30px;margin-top: -3px;" >手动确认</el-button>
   </div>
    <el-button style="margin-top: 5px;margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">选择工程</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="primary" @click="handleBind">开始上片</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">开始上片</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">暂停</el-button>
    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="danger" @click="handleBindb">停止任务</el-button>
    
@@ -655,7 +490,7 @@
    >
    <el-table-column prop="engineeringId" label="工程号" width="200" align="center"/>
      <el-table-column prop="width" label="原片宽" align="center"/>
      <el-table-column prop="height" label="原片长" align="center"/>
      <el-table-column prop="height" label="原片高" align="center"/>
      <el-table-column prop="filmsId" label="膜系" align="center"/>
      <el-table-column prop="layoutSequence" label="数量" align="center"/>
      <el-table-column prop="thickness" label="厚度" align="center"/>
@@ -670,34 +505,11 @@
          {{ getStatusText(scope.row.state) }}  
        </el-tag>  
      </template> 
          <!-- <template #default="scope">
            <el-tag type="success" >{{ scope.row.state==0?"等待中":"上片中"  }}</el-tag>
          </template> -->
          </el-table-column>
    </el-table>
      </div>
    </el-card>
    <el-dialog v-model="blind" top="24vh" width="30%" title="是否开始上片?" >
    <div style="margin-left: 50px;margin-bottom: 10px;">
      <el-form-item label="工程号:" :required="true">
        <el-select
           v-model="selectedProjectNoa"
           filterable
           clearable
           placeholder="请选择工程"
           style="width: 220px"
           @input="handleInputChangea"
         >
      <el-option
         v-for="item in titleSelectJsona['processTypea']"
         :key="item.id"
         :label="item.engineerId"
         :value="item.engineerId"
      />
    </el-select>
              </el-form-item>
          </div>
  <el-dialog v-model="blind" top="30vh" width="25%" title="是否开始上片?" >
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handle">
@@ -707,16 +519,6 @@
      </div>
    </template>
  </el-dialog>
  <!-- <el-dialog v-model="blind" top="30vh" width="25%" title="是否开始上片?" >
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handle">
          确认
        </el-button>
        <el-button @click="blind = false">取消</el-button>
      </div>
    </template>
  </el-dialog> -->
  <el-dialog v-model="blinda" top="30vh" width="25%" title="是否暂停?" >
    <template #footer>
      <div id="dialog-footer">
@@ -743,9 +545,10 @@
        <div id="overlaya" v-show="flakea"></div>
      </div>
      <div style="margin-top: -350px;margin-left: 650px;">
        <el-table :data="tableDataa" border style="width: 60%"
        <el-table :data="tableDataa" border style="width: 70%"
     :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
        >
          <el-table-column prop="workstationId" align="center" label="工位" min-width="50" />
          <el-table-column prop="patternWidth" align="center" label="宽" min-width="80" />
          <el-table-column prop="patternHeight" align="center" label="高" min-width="80" />
          <el-table-column prop="filmsId" align="center" label="膜系" min-width="80" />
@@ -767,15 +570,44 @@
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="高:" :required="true" style="width: 14vw">
                <el-input  v-model="patternHeight" autocomplete="off" />
              </el-form-item></div></div>
              <el-form-item label="宽:" :required="true" style="width: 14vw">
               <el-select
                      v-model="selectedValue"
                      filterable
                      clearable
                      placeholder="请选择宽"
                      style="width: 220px"
                      @input="handleInputChangea"
                    >
                 <el-option
                    v-for="item in selectOptions"
                    :key="item.id"
                    :label="item.label"
                    :value="item.value"
                 />
               </el-select>
              </el-form-item>
              </div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="宽:" :required="true" style="width: 14vw">
                <el-input v-model="patternWidth" autocomplete="off" />
          <el-form-item label="高:" :required="true" style="width: 14vw">
            <el-select
                      v-model="selectedValuea"
                      filterable
                      clearable
                      placeholder="请选择高"
                      style="width: 220px"
                      @input="handleInputChangea"
                    >
                 <el-option
                    v-for="item in selectOptionsa"
                    :key="item.id"
                    :label="item.label"
                    :value="item.value"
                 />
               </el-select>
              </el-form-item></div>
              </div>
          </el-col>
@@ -785,14 +617,43 @@
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="膜系:" :required="true" style="width: 14vw;">
                <el-input v-model="filmsId" autocomplete="off" />
                <el-select
                      v-model="selectedValueb"
                      filterable
                      clearable
                      placeholder="请选择膜系"
                      style="width: 220px"
                      @input="handleInputChangea"
                    >
                 <el-option
                    v-for="item in selectOptionsb"
                    :key="item.id"
                    :label="item.label"
                    :value="item.value"
                 />
               </el-select>
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="厚度:" :required="true" style="width: 14vw">
                <el-input v-model="patternThickness" autocomplete="off" />
                <el-select
                      v-model="selectedValuec"
                      filterable
                      clearable
                      placeholder="请选择厚度"
                      style="width: 220px"
                      @input="handleInputChangea"
                    >
                 <el-option
                    v-for="item in selectOptionsc"
                    :key="item.id"
                    :label="item.label"
                    :value="item.value"
                 />
               </el-select>
                <!-- <el-input v-model="patternThickness" autocomplete="off" /> -->
              </el-form-item></div></div>
          </el-col>
        </el-row>
@@ -828,8 +689,6 @@
    </template>
  </el-dialog>
        </div>
  <el-dialog v-model="dialogFormVisible" top="24vh" width="30%" title="工程" >
    <div style="margin-left: 50px;margin-bottom: 10px;">
      <el-form-item label="工程号:" :required="true">
UI-Project/src/views/User/permissions.vue
@@ -6,6 +6,7 @@
const add = ref(false)
const adda = ref(false)
const editingUser = ref({}); // 用于存储当前编辑的用户数据
import request from "@/utils/request"
import { ref, onMounted } from "vue";
// import { ref } from 'vue'
@@ -83,6 +84,11 @@
    console.error(error);
  }
};
// 处理编辑按钮点击
function handleEdit(row) {
  editingUser.value = { ...row }; // 使用展开运算符复制当前行数据
  adda.value = true; // 显示对话框
}
// 编辑
const getTableRowa = async () => {
  try {
@@ -95,7 +101,8 @@
    if (response.code == 200) {
      // 绑定成功,处理逻辑
      ElMessage.success(response.message);
      add.value = false;
      editingUser.value = {};
      adda.value = false;
     tableData.value = response.data;
    } else {
      // 请求失败,显示错误消息
@@ -204,7 +211,7 @@
          <el-table-column prop="id" align="center" label="排序" min-width="140"/>
                  <el-table-column fixed="right" label="操作" align="center">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="adda = true">编辑</el-button>
              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">编辑</el-button>
              <el-button size="mini" type="text" plain @click="opena(scope.row)">删除</el-button>
            </template>
        </el-table-column>
@@ -217,7 +224,7 @@
          <el-table-column prop="id" align="center" label="排序" min-width="180" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="adda = true">编辑</el-button>
              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">编辑</el-button>
              <el-button size="mini" type="text" plain @click="opena(scope.row)">删除</el-button>
            </template>
        </el-table-column>
@@ -289,14 +296,14 @@
  </el-dialog> 
  <el-dialog v-model="adda" top="23vh" width="37%" title="修改菜单" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
     <el-form  :model="editingUser" ref="formRef" size="mini" label-width="150px">
      <el-form label-width="100px" label-position="right">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div> 
          <el-form-item label="菜单栏:" :required="true" style="width: 25vw">
                <el-input v-model="menuName" autocomplete="off" />
                <el-input v-model="editingUser.menuName" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
@@ -305,7 +312,7 @@
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item label="链接:" :required="true" style="width: 25vw">
                <el-input v-model="url" autocomplete="off" />
                <el-input v-model="editingUser.url" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
@@ -314,7 +321,7 @@
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item label="排序:" :required="true" style="width: 25vw">
                <el-input v-model="parentId" autocomplete="off" />
                <el-input v-model="editingUser.parentId" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
UI-Project/src/views/User/rolelist.vue
@@ -5,7 +5,7 @@
const router = useRouter()
const add = ref(false)
const adda = ref(false)
const editingUser = ref({}); // 用于存储当前编辑的用户数据
import request from "@/utils/request"
import { ref, onMounted } from "vue";
// import { ref } from 'vue'
@@ -73,6 +73,11 @@
    console.error(error);
  }
};
// 处理编辑按钮点击
function handleEdit(row) {
  editingUser.value = { ...row }; // 使用展开运算符复制当前行数据
  adda.value = true; // 显示对话框
}
// 编辑
const getTableRowa = async () => {
  try {
@@ -84,7 +89,8 @@
    if (response.code == 200) {
      // 绑定成功,处理逻辑
      ElMessage.success(response.message);
      add.value = false;
      editingUser.value = {};
      adda.value = false;
     tableData.value = response.data;
    } else {
      // 请求失败,显示错误消息
@@ -177,7 +183,7 @@
          <el-table-column prop="name" align="center" label="角色" min-width="180" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="adda = true">编辑</el-button>
              <el-button size="mini" type="text" plain  @click="handleEdit(scope.row)">编辑</el-button>
              <el-button size="mini" type="text" plain @click="opena(scope.row)">删除</el-button>
            </template>
        </el-table-column>
@@ -212,14 +218,14 @@
  </el-dialog> 
  <el-dialog v-model="adda" top="23vh" width="37%" title="修改角色" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
            <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px">
              <el-form label-width="100px" label-position="right">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item label="角色:" :required="true" style="width: 25vw">
                <el-input v-model="name" autocomplete="off" />
                <el-input v-model="editingUser.name" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
UI-Project/src/views/User/userlist.vue
@@ -5,7 +5,7 @@
const router = useRouter()
const add = ref(false)
const adda = ref(false)
const editingUser = ref({}); // 用于存储当前编辑的用户数据
import request from "@/utils/request"
import { ref, onMounted } from "vue";
// import { ref } from 'vue'
@@ -94,6 +94,11 @@
    console.error('Error fetching options:', error);  
  }  
}; 
// 处理编辑按钮点击
function handleEdit(row) {
  editingUser.value = { ...row }; // 使用展开运算符复制当前行数据
  adda.value = true; // 显示对话框
}
// 添加 
const getTableRow = async () => {
  try {
@@ -129,7 +134,8 @@
    if (response.code == 200) {
      // 绑定成功,处理逻辑
      ElMessage.success(response.message);
      add.value = false;
      editingUser.value = {};
      adda.value = false;
     tableData.value = response.data;
    } else {
      // 请求失败,显示错误消息
@@ -230,7 +236,7 @@
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="open(scope.row)">重置密码</el-button>
              <el-button size="mini" type="text" plain @click="adda = true">编辑</el-button>
              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">编辑</el-button>
              <el-button size="mini" type="text" plain @click="opena(scope.row)">删除</el-button>
            </template>
        </el-table-column>
@@ -300,14 +306,14 @@
  </el-dialog> 
  <el-dialog v-model="adda" top="23vh" width="37%" title="修改用户" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
            <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px">
      <el-form label-width="100px" label-position="right">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item label="用户名:" :required="true" style="width: 25vw">
                <el-input v-model="userName" autocomplete="off" />
                <el-input v-model="editingUser.userName" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
@@ -315,6 +321,13 @@
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
          <!-- <el-table-column align="center" label="角色" min-width="80">
            <template #default="scope">
             <el-tag v-for="role in scope.row.roleList">
            {{role.name}}
           </el-tag>
         </template>
            </el-table-column> -->
              <el-form-item label="角色:" :required="true" style="width: 25vw;">
                <el-select
               v-model="selectedProjectNoa"
@@ -339,7 +352,7 @@
        <div>
              <el-form-item label="密码:" :required="true" style="width: 25vw;">
                <el-input style="width: 340px;"
                        v-model="password"
                        v-model="editingUser.password"
                        autocomplete="off"
                        :prefix-icon="Lock"
                        show-password/>
hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -37,7 +37,7 @@
            optimizeGlassinfos = optimizeProjectMapper.selectJoinList(OptimizeGlassinfo.class, new MPJQueryWrapper<OptimizeProject>()
                    .select("b.process_id,t.type,b.width,b.height,t.glass_thickness,t.glass_type,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,b.x_axis,b.y_axis,b.project_no,b.glass_id")
                    .leftJoin("optimize_detail b on t.project_no=b.project_no")
                    .eq("t.state",100)
                    //.eq("t.state",100)
                    .eq("t.project_no", engineeringId));
        }
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
@@ -3,6 +3,7 @@
import com.github.yulichang.base.MPJBaseService;
import com.mes.pp.entity.OptimizeProject;
import com.mes.pp.entity.request.OptimizeRequest;
import com.mes.uppattenusage.entity.UpPattenUsage;
import java.util.List;
@@ -26,4 +27,10 @@
     * 将工程信息更新状态为已领取
     */
    void changeTask(String engineeringId, int i);
    /**
     * 完成工程任务改为300
     *
     * @return
     */
    boolean overTask(UpPattenUsage sequence, int state);
}
hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
@@ -9,6 +9,7 @@
import com.mes.pp.entity.request.OptimizeRequest;
import com.mes.pp.mapper.OptimizeProjectMapper;
import com.mes.pp.service.OptimizeProjectService;
import com.mes.uppattenusage.entity.UpPattenUsage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -29,13 +30,14 @@
    @Override
    public List<OptimizeProject> listByState(OptimizeRequest optimizeRequest) {
        log.info("将参数传入到查询类里,工程号做非空判断模糊查询");
        //将参数传入到查询类里,工程号做非空判断模糊查询
        LambdaQueryWrapper<OptimizeProject> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(OptimizeProject::getState,optimizeRequest.getState())
                .or(qw -> qw.eq(OptimizeProject::getState, 200))
                .like(StringUtils.isNotBlank(optimizeRequest.getProjectNo()),OptimizeProject::getProjectNo,optimizeRequest.getProjectNo())
                //.groupBy(OptimizeProject::getProjectNo)
        ;
        log.info("返回工程信息");
        //返回工程信息
        return this.list(wrapper);
    }
@@ -50,6 +52,17 @@
    }
    @Override
    public boolean overTask(UpPattenUsage sequence, int state) {
        if(sequence.getState()==100){
            UpdateWrapper<OptimizeProject> wrapper=new  UpdateWrapper<>();
            wrapper.eq("project_no",sequence.getEngineeringId())
                    .set("state",state);
            boolean updateSuccess = this.update(wrapper);
            log.info("工程完成更新状态{}",updateSuccess);
        }
        return false;
    }
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java
@@ -3,6 +3,9 @@
import com.mes.engineering.entity.Engineering;
import com.mes.engineering.service.EngineeringService;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.pp.service.OptimizeProjectService;
import com.mes.uppattenusage.entity.UpPattenUsage;
import com.mes.uppattenusage.service.UpPattenUsageService;
import com.mes.utils.Result;
@@ -29,17 +32,51 @@
    private EngineeringService engineeringService;
    @Autowired
    private UpPattenUsageService upPattenUsageService;
    @Autowired
    private GlassInfoService glassInfoService;
    @Autowired
    private OptimizeProjectService optimizeProjectService;
    @ApiOperation("开始/暂停任务/传递工程号和状态,开始是1 暂停是0")
    @PostMapping("/changeTask") //调用上片任务
    @PostMapping("/pauseTask") //调用上片任务
    @ResponseBody
    public  Result <List<UpPattenUsage>> changeTask(@RequestBody Engineering engineering) {
    public  Result <List<UpPattenUsage>> pauseTask(@RequestBody Engineering engineering) {
        boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState());
        List<UpPattenUsage> glass = upPattenUsageService.prioritylist();
        log.info("StartorStop:{},{}", work,engineering);
        return Result.build(200, engineering.getEngineerId(),glass);
    }
    @ApiOperation("开始上片")
    @PostMapping("/changeTask") //调用上片任务
    @ResponseBody
    public  Result <Boolean> changeTask(@RequestBody Engineering engineering) {
        log.info("engineeringId:{}", engineering);
        UpPattenUsage upPattenUsage = upPattenUsageService.selectedEngineering(engineering.getEngineerId());
        if (upPattenUsage != null) {
            boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState());
            List<UpPattenUsage> glass = upPattenUsageService.prioritylist();
            optimizeProjectService.changeTask(engineering.getEngineerId(), 200);
            return Result.build(200, "已保存过", work);
        } else {
            List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineering.getEngineerId());
            log.info("将查询出的UpPattenUsage数据保存到数据库表里");
            upPattenUsageService.saveUpPattenUsage(upPattenUsages);
            log.info("从PP表查询glassinfo的数据并保存到表里");
            List<GlassInfo> glassinfo = glassInfoService.selectGlassInfo(engineering.getEngineerId());
            glassInfoService.saveGlassInfo(glassinfo);
            log.info("从PP表查询engineering的数据并保存到表里");
            List<Engineering> listEngineering = engineeringService.selectEngineering(engineering.getEngineerId());
            engineeringService.saveEngineering(listEngineering);
            log.info("更改pp表状态为已领取");
            //将engineering表状态为正在上片
            boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState());
            List<UpPattenUsage> glass = upPattenUsageService.prioritylist();
            optimizeProjectService.changeTask(engineering.getEngineerId(), 200);
            return Result.build(200, "保存成功", work);
        }
    }
    @ApiOperation("查询可以上片的工程号")
    @GetMapping("/selectTask") //调用上片任务
    @ResponseBody
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java
@@ -20,7 +20,7 @@
     * 开始/暂停任务
     * @return boolean
     */
    boolean  changeTask(String projectId, Integer state);
    boolean changeTask(String projectId, Integer state);
    /**
     * 查询钢化信息
     * @return List<Engineering>
@@ -35,6 +35,9 @@
     * @return Engineering
     */
    Engineering selectInitiate(Integer state);
    /**
     * 查询上片任务
     * @return Engineering
     */
    List<Engineering> selectTask();
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
@@ -1,9 +1,13 @@
package com.mes.job;
import cn.hutool.json.JSONObject;
import com.mes.common.S7object;
import com.mes.device.PlcParameterObject;
import com.mes.engineering.entity.Engineering;
import com.mes.engineering.service.EngineeringService;
import com.mes.pp.entity.OptimizeProject;
import com.mes.pp.service.OptimizeProjectService;
import com.mes.tools.WebSocketServer;
import com.mes.uppattenusage.entity.UpPattenUsage;
import com.mes.uppattenusage.service.UpPattenUsageService;
import com.mes.workstation.entity.UpWorkstation;
@@ -12,6 +16,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
 * @author SNG-010
@@ -26,6 +33,9 @@
    private EngineeringService engineeringService;
    @Autowired
    private UpPattenUsageService upPattenUsageService;
    @Autowired
    private OptimizeProjectService optimizeProjectService;
    PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
@@ -52,16 +62,16 @@
                    int workId = upwork.getWorkstationId();//工位id
                    double width = upwork.getPatternWidth();//宽度
                    double height = upwork.getPatternHeight();//高度
                    S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("WorkId").getAddress(), (short) workId);
                    S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("GlassWidth").getAddress(), (short) width);
                    S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("GlassHeight").getAddress(), (short) height);
                    S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("MesToPlc").getAddress(), (short) 1);
                    S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("WorkId").getAddress(), workId);
                    S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("GlassWidth").getAddress(), (long) width);
                    S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("GlassHeight").getAddress(), (long) height);
                    S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlc").getAddress(), 1);
                    //更改上片表状态
                    upPattenUsageService.updateUpPattenUsageState(upPattenUsage, workId);
                }
            }
            if ("1".equals(mesToPlc) && "0".equals(loadRequest)) {
            if("1".equals(mesToPlc)&& "0".equals(loadRequest)){
                //请求字为零时,任务字清零
                S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlc").getAddress(), 0);
            }
@@ -73,7 +83,7 @@
    }
    @Scheduled(fixedDelay = 300)
    public void plcLoadGlassReport() {
    public void plcLoadGlassReport(){
        //获取是否有汇报
        String loadStatus = plcParameterObject.getPlcParameter("PlcStatus").getValue();
        if (loadStatus != null) {
@@ -81,7 +91,8 @@
            switch (loadStatus) {
                case "1":
                    log.info("收到汇报任务完成");
                    S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 1);
                    //减少工位数量,完成任务状态
                    overTask(loadStatus, 100);
                    break;
                case "2":
                    log.info("收到汇报未完成任务");
@@ -93,15 +104,40 @@
                    overTask(loadStatus, 0);
                    break;
                case "0":
                    log.info("收到汇报清0状态");
                    //减少工位数量,完成任务状态
                    overTask(loadStatus, 100);
                    S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 0);
                    break;
            }
        }
    }
    public void overTask(String loadStatus, int state) {
    @Scheduled(fixedDelay = 300)
    public void loadGlassHome(){
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        List<UpPattenUsage> upPattenUsages = upPattenUsageService.prioritylist();
        jsonObject.append("prioritylist", upPattenUsages);
        //工位信息
        List<UpWorkstation> upWorkstations = upWorkstationService.list();
        jsonObject.append("list", upWorkstations);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
                    webserver.sendMessage(jsonObject.toString());
                    List<String> messages = webserver.getMessages();
                    if (!messages.isEmpty()) {
                        // // 将最后一个消息转换为整数类型的列表
                        webserver.clearMessages();
                    }
                } else {
                    log.info("Home is closed");
                }
            }
        }
    }
    public void overTask(String loadStatus, int state)  {
        UpPattenUsage upPattenUsage = upPattenUsageService.selectOverTask();
        if (upPattenUsage != null) {
            log.info("收到汇报清{}状态", loadStatus);
@@ -109,8 +145,12 @@
            upWorkstationService.reduceWorkstationNumber(upPattenUsage.getState());
            //完成上片表状态
            upPattenUsageService.updateUpPattenUsageState(upPattenUsage, state);
            S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 0);
            //判断是否是最后一块玻璃
            UpPattenUsage sequence=upPattenUsageService.selectSequence(upPattenUsage);
            //如果是最后一块时完成工程任务
            optimizeProjectService.overTask(sequence,300);
        }
        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 1);
    }
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
@@ -45,32 +45,14 @@
        return Result.build(200, "", glass);
    }
    @ApiOperation("点击选择工程保存后进行调用,传入工程号")
    @PostMapping("/saveUpPattenUsage") //查询现在上片机的玻璃信息
    @ApiOperation("选择工程号后显示上片顺序预览")
    @PostMapping("/selectUpPattenUsage") //查询现在上片机的玻璃信息
    @ResponseBody
    public Result<Engineering> saveUpPattenUsage(@RequestBody Engineering engineering) {
        log.info("engineeringId:{}", engineering);
        UpPattenUsage upPattenUsage= upPattenUsageService.selectedEngineering(engineering.getEngineerId());
        if (upPattenUsage!=null){
            log.info("已保存过");
            return Result.build(200, "已保存的工程", null);
        }else {
            List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineering.getEngineerId());
            log.info("将查询出的UpPattenUsage数据保存到数据库表里");
            upPattenUsageService.saveUpPattenUsage(upPattenUsages);
            log.info("从PP表查询glassinfo的数据并保存到表里");
            List<GlassInfo> glassinfo=glassInfoService.selectGlassInfo(engineering.getEngineerId());
            glassInfoService.saveGlassInfo(glassinfo);
            log.info("从PP表查询engineering的数据并保存到表里");
            List<Engineering> listEngineering= engineeringService.selectEngineering(engineering.getEngineerId());
            engineeringService.saveEngineering(listEngineering);
            log.info("更改pp表状态为已领取");
            optimizeProjectService.changeTask(engineering.getEngineerId(), 200);
//            List<UpPattenUsage> data=upPattenUsageService.prioritylist();
//            log.info("显示保存后的上片顺序表");
            return Result.build(200, "", engineering);
    public Result<List<UpPattenUsage>> selectUpPattenUsage(@RequestBody Engineering engineering) {
        List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineering.getEngineerId());
        return Result.build(200, "", upPattenUsages);
        }
    }
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
@@ -41,5 +41,11 @@
      * @return UpPattenUsage
      */
     UpPattenUsage selectOverTask();
     /**
      * 查询上片最后一块的玻璃
      * @return UpPattenUsage
      */
     UpPattenUsage selectSequence(UpPattenUsage upPattenUsage);
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
@@ -40,7 +40,7 @@
    public List<UpPattenUsage> prioritylist() {
        //获取正在上片的任务id
        Engineering engineering= engineeringService.selectInitiate(1);
        log.info("将参数传入到查询类里{}",engineering);
        //log.info("将参数传入到查询类里{}",engineering);
        if(engineering!=null){
            LambdaQueryWrapper<UpPattenUsage> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(UpPattenUsage::getEngineeringId,engineering.getEngineerId());
@@ -117,5 +117,15 @@
        return this.getOne(wrapper);
    }
    @Override
    //获取最后一块玻璃
    public UpPattenUsage selectSequence(UpPattenUsage upPattenUsage) {
        QueryWrapper<UpPattenUsage>wrapper = new QueryWrapper<>();
        wrapper.eq("engineering_id",upPattenUsage.getEngineeringId())
                .orderByDesc("layout_sequence")
                .last("limit 1");
        return this.getOne(wrapper);
    }
}
hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java
@@ -4,6 +4,8 @@
import com.mes.engineering.service.EngineeringService;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.pp.entity.OptimizeProject;
import com.mes.pp.entity.request.OptimizeRequest;
import com.mes.pp.service.OptimizeProjectService;
import com.mes.uppattenusage.entity.UpPattenUsage;
import com.mes.uppattenusage.service.impl.UpPattenUsageServiceImpl;
@@ -72,23 +74,31 @@
        engineeringService.saveEngineering(glass);
        log.info("glassinfo:{}", Arrays.asList(glass));
    }
    @Test
    public  void  textengineering2(){
        //更新工程表状态为已领取
        //optimizeProjectService.changeTask("P24050801",200);
        engineeringService.changeTask("P24051102",1);
    }
    @Test
    public  void  textengineering3(){
        //判断是否已保存过工程号到上片表
        UpPattenUsage upPattenUsage=upPattenUsageService.selectOverTask();
        log.info("上片表任务中的数据{}",upPattenUsage);
        //上片表最后一片
        UpPattenUsage upPattenUsage=new UpPattenUsage();
        upPattenUsage.setEngineeringId("P24051103");
        UpPattenUsage upPattenUsage1=upPattenUsageService.selectSequence(upPattenUsage);
        log.info("上片表任务中的数据{}",upPattenUsage1);
        boolean isOver= optimizeProjectService.overTask(upPattenUsage1,300);
        log.info("更改是否成功{}",isOver);
    }
    @Test
    public  void  textengineering4(){
        //判断是否已保存过工程号到上片表
        List<Engineering> engineerings=engineeringService.selectTask();
        log.info("上片表任务中的数据{}",engineerings);
    }
    @Test
    public  void  textengineering5(){
        //显示选择工程
        OptimizeRequest optimizeRequest=new OptimizeRequest();
        optimizeRequest.setState(100);
        List<OptimizeProject> engineerings=optimizeProjectService.listByState(optimizeRequest);
        log.info("上片表任务中的数据{}",engineerings);
    }
}