wangfei
2024-08-06 9887fc7be1578f465eee608e55b65097fa417d4c
Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes
31个文件已修改
1个文件已添加
440 ■■■■ 已修改文件
UI-Project/config.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/WebSocketService.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/constants.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Caching/cachingun.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/stockBasicData.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/request/DownGlassInfoRequest.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/config.js
@@ -1,7 +1,10 @@
export default {
 serverUrl: "10.153.19.150:88/api",
//  serverUrl: "10.153.19.150:88/api",
//  serverUrl: "192.168.1.199:88/api",
  serverUrl2: "10.153.19.150:88"
 serverUrl: "127.0.0.1:88/api",
  // serverUrl2: "10.153.19.150:88"
  // serverUrl2: "192.168.1.199:88"
    serverUrl2: "127.0.0.1:88"
  //serverUrl:"res.abeim.cn"
}
UI-Project/src/lang/zh.js
@@ -237,6 +237,7 @@
        takemessage:'是否拿走该条信息?',
        breakage:'破损',
        takeout:'拿走',
        glasstype:'玻璃类型',
    },
    processCard:{
        intofurnace:'进炉中',
UI-Project/src/utils/WebSocketService.js
@@ -1,4 +1,5 @@
// WebSocketService.js
let socket = null;
export const initializeWebSocket = (socketUrl, messageHandler) => {
  let messages='' ;
@@ -6,10 +7,13 @@
      console.log("Your browser does not support WebSocket");
      return null;
    }
    const socket = new WebSocket(socketUrl);
    socket.onopen = function () {
      console.log("WebSocket is now open");
    };
    socket.onmessage = (msg) => {
      if (!msg.data) {
        return;
@@ -21,14 +25,23 @@
        messages= messages.replace('<END>', '');
        const obj = JSON.parse(messages);
        messages='';
      // 调用消息处理函数,将数据传递给 Vue 组件
      if (messageHandler) {
        messageHandler(obj);
      }
      }
    };
    return socket;
  };
  export const closeWebSocket = (socket) => {
    if (socket && socket.readyState === WebSocket.OPEN) {
        socket.close();
UI-Project/src/utils/constants.js
@@ -1,3 +1,4 @@
// export const WebSocketHost = "192.168.1.199";
export const WebSocketHost = "10.153.19.150";
// export const WebSocketHost = "10.153.19.150";
export const WebSocketHost = "127.0.0.1";
export const host = "88";
UI-Project/src/views/Caching/cachingun.vue
@@ -210,11 +210,10 @@
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  tableData.value = data.params2[0]
  // tableData.splice(0, tableData.length, ...data.params2[0]);
  tableData.splice(0, tableData.length, ...data.params[0]);
  // tableData.value = data.params[0]
  // adjustedRects.value = data.EdgStorageCageinfos[0]
  adjustedRects.value = data.params2[0].map(rect => ({
  adjustedRects.value = data.params[0].map(rect => ({
            ...rect, // 复制原始对象的其他属性  
            width: rect.width * 0.5 ,
            id: rect.id * 10,
UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -20,20 +20,20 @@
const requestData = {  
  line: 2001  
};  
request.post("/cacheGlass/taskCache/selectEdgTask",{
  ...requestData,
// request.post("/cacheGlass/taskCache/selectEdgTask",{
//   ...requestData,
}).then((res) => {
          if (res.code == 200) {
// }).then((res) => {
//           if (res.code == 200) {
            
          console.log(res.data);
          tableData.value = res.data
          console.log(res.data[0].slot);
          } else {
          ElMessage.warning(res.msg)
//           console.log(res.data);
//           tableData.value = res.data
//           console.log(res.data[0].slot);
//           } else {
//           ElMessage.warning(res.msg)
        
          }
          });
//           }
//           });
// 破损
 const open = async(row) => { 
  try {
@@ -49,7 +49,7 @@
    if (confirmResult === 'confirm') {  
      // 用户点击了“是”,现在调用删除接口  
      const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
        glassId: row.GlassId,
        glassId: row.glass_id,
        controlsId: 300,
        line: 2001,
        machine: '冷加工',
@@ -82,7 +82,7 @@
    if (confirmResult === 'confirm') {  
      // 用户点击了“是”,现在调用删除接口  
      const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
        glassId: row.GlassId,
        glassId: row.glass_id,
        controlsId: 301,
        line: 2001,
        machine: '冷加工',
@@ -127,13 +127,11 @@
        <el-table height="240" ref="table" 
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="GlassId" align="center" :label="$t('workOrder.glassID')" min-width="180" />
          <el-table-column prop="Height" align="center" :label="$t('workOrder.height')" min-width="80" />
          <el-table-column prop="Width" align="center" :label="$t('workOrder.width')" min-width="120" />
          <el-table-column prop="Thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" />
          <el-table-column prop="FilmsId" align="center" :label="$t('workOrder.coatingtypes')" min-width="120" />
          <el-table-column prop="SerialNumber" align="center" :label="$t('workOrder.productionsequence')" min-width="120" />
          <el-table-column prop="FlowCardId" align="center" :label="$t('workOrder.cardnumber')" min-width="120" />
        <el-table-column prop="glass_id" align="center" :label="$t('workOrder.glassID')" min-width="180" />
          <el-table-column prop="width" align="center" :label="$t('workOrder.width')" min-width="120" />
          <el-table-column prop="height" align="center" :label="$t('workOrder.height')" min-width="80" />
          <el-table-column prop="thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" />
          <el-table-column prop="glass_type" align="center" :label="$t('workOrder.glasstype')" min-width="120" />
          <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }}</el-button>
UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
@@ -20,20 +20,20 @@
const requestData = {  
  line: 2002
};  
request.post("/cacheGlass/taskCache/selectEdgTask",{
  ...requestData,
// request.post("/cacheGlass/taskCache/selectEdgTask",{
//   ...requestData,
}).then((res) => {
          if (res.code == 200) {
// }).then((res) => {
//           if (res.code == 200) {
            
          console.log(res.data);
          tableData.value = res.data
          console.log(res.data[0].slot);
          } else {
          ElMessage.warning(res.msg)
//           console.log(res.data);
//           tableData.value = res.data
//           console.log(res.data[0].slot);
//           } else {
//           ElMessage.warning(res.msg)
        
          }
          });
//           }
//           });
// 破损
 const open = async(row) => {  
  try {
@@ -49,7 +49,7 @@
    if (confirmResult === 'confirm') {  
      // 用户点击了“是”,现在调用删除接口  
      const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
        glassId: row.GlassId,
        glassId: row.glass_id,
        controlsId: 300,
        line: 2002,
        machine: '冷加工',
@@ -82,7 +82,7 @@
    if (confirmResult === 'confirm') {  
      // 用户点击了“是”,现在调用删除接口  
      const response = await request.post("/cacheGlass/edgStorageCage/edgReportStatus", {
        glassId: row.GlassId,
        glassId: row.glass_id,
        controlsId: 301,
        line: 2002,
        machine: '冷加工',
@@ -128,13 +128,11 @@
        <el-table height="240" ref="table" 
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="GlassId" align="center" :label="$t('workOrder.glassID')" min-width="180" />
          <el-table-column prop="Height" align="center" :label="$t('workOrder.height')" min-width="80" />
          <el-table-column prop="Width" align="center" :label="$t('workOrder.width')" min-width="120" />
          <el-table-column prop="Thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" />
          <el-table-column prop="FilmsId" align="center" :label="$t('workOrder.coatingtypes')" min-width="120" />
          <el-table-column prop="SerialNumber" align="center" :label="$t('workOrder.productionsequence')" min-width="120" />
          <el-table-column prop="FlowCardId" align="center" :label="$t('workOrder.cardnumber')" min-width="120" />
          <el-table-column prop="glass_id" align="center" :label="$t('workOrder.glassID')" min-width="180" />
          <el-table-column prop="width" align="center" :label="$t('workOrder.width')" min-width="120" />
          <el-table-column prop="height" align="center" :label="$t('workOrder.height')" min-width="80" />
          <el-table-column prop="thickness" align="center" :label="$t('workOrder.thickness')" min-width="120" />
          <el-table-column prop="glass_type" align="center" :label="$t('workOrder.glasstype')" min-width="120" />
          <el-table-column fixed="right" :label="$t('workOrder.operate')" align="center" width="200">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('workOrder.breakage') }}</el-button>
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -15,6 +15,7 @@
import { WebSocketHost ,host} from '@/utils/constants'
const dialogFormVisiblea = ref(false)
const dialogFormVisiblea2 = ref(false)
const dialogFormVisibleaDownGlass = ref(false)
// 数据
const loading = ref(false);
// 弹框显示控制
@@ -25,6 +26,7 @@
const flowCardId = ref('');
const flowCardOptions = ref('[]');
const tableData = reactive([]);
const downGlass= ref([]);
// 方法
const handleSelectionChange = () => {
  // 处理表格行选择事件
@@ -144,7 +146,13 @@
// 定义消息处理函数,更新 receivedData 变量
const handleMessage = (data) => {
  // 更新 tableData 的数据
  tableData.splice(0, tableData.length, ...data.params[0]);
  if(data.sendDownGlass!=null){
    downGlass.value=data.sendDownGlass[0][1];
    console.log(downGlass.value);
    console.log(tableData.value);
  }
  // tableData.splice(0, tableData.length, ...data.params[0]);
//  console.log("更新后数据", data.params[0]);
};
// 初始化 WebSocket,并传递消息处理函数
@@ -208,6 +216,7 @@
</script>
<template>
  <div>
    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="primary" @click="dialogFormVisibleaDownGlass = true">落架详情</el-button>
    <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;">
@@ -230,7 +239,6 @@
            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>
@@ -241,9 +249,29 @@
            <el-button size="mini" type="text" plain v-show="scope.row.enableState !== '已启用' " @click="handleBindRack(scope.row)">{{ $t('reportWork.bindingshelves') }}</el-button>
            <el-button size="mini" type="text" plain  @click="handleBindRack2(scope.row)">{{ $t('reportWork.clear') }}</el-button>
          </template>
        </el-table-column>
        </el-table>
      </div>
      <el-dialog v-model="dialogFormVisibleaDownGlass" top="2vh" width="97%" :title="$t('searchOrder.cageinformation')">
        <el-table height="200px" ref="table"
        @selection-change="handleSelectionChange"
        :data="downGlass" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
        <el-table-column prop="workStationId" align="center" :label="$t('工位号')" min-width="80" />
        <el-table-column prop="engineerId" align="center" :label="$t('工程号')" min-width="80" />
          <el-table-column prop="flowCardId" align="center" :label="$t('流程卡号')" min-width="80" />
          <el-table-column prop="layer" align="center" :label="$t('层')" min-width="120" />
          <el-table-column prop="sequence" align="center" :label="$t('顺序')" min-width="150" />
          <el-table-column prop="width" align="center" :label="$t('宽')" min-width="120" />
          <el-table-column prop="height" align="center" :label="$t('高')" min-width="120" />
          <el-table-column prop="Filmsid" align="center" :label="$t('膜系')" min-width="120" />
          <el-table-column prop="thickness" align="center" label="厚度" min-width="120" />
          <el-table-column prop="glassId" align="center" :label="$t('玻璃id')" min-width="120" />
        </el-table>
      </el-dialog>
    </el-card>
    <!-- workstationId: '1',
    workstationId: '1005',
@@ -260,6 +288,7 @@
    </div>
    </div>
    </el-card>
  </div>
    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')">
@@ -279,6 +308,7 @@
    </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleConfirm">
          {{ $t('reportWork.sure') }}
        </el-button>
hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -161,6 +161,7 @@
    public static final List<Integer> G06_WORK_STATION = Arrays.asList(1, 2, 3);
    public static final List<Integer> G11_WORK_STATION = Arrays.asList(4, 5, 6);
    public static final int G13_WORK_STATION = 7;
    public static final List<Integer> WORK_STATION_ALL = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
    /**
     * 启用 1
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java
@@ -3,6 +3,9 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  服务类
@@ -13,4 +16,5 @@
 */
public interface EdgGlassTaskInfoService extends IService<EdgGlassTaskInfo> {
    List<Map<String, Object>> selectEdgInfo(String line);
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
@@ -1,10 +1,14 @@
package com.mes.edgglasstask.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import com.mes.edgglasstask.mapper.EdgGlassTaskInfoMapper;
import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -17,4 +21,13 @@
@Service
public class EdgGlassTaskInfoServiceImpl extends ServiceImpl<EdgGlassTaskInfoMapper, EdgGlassTaskInfo> implements EdgGlassTaskInfoService {
    @Override
    public List<Map<String, Object>> selectEdgInfo(String line) {
        LambdaQueryWrapper<EdgGlassTaskInfo> edgGlassWrapper = new LambdaQueryWrapper<>();
        edgGlassWrapper
                .eq(EdgGlassTaskInfo::getLine, line)
                .eq(EdgGlassTaskInfo::getStatus, "1")
                .orderByDesc(EdgGlassTaskInfo::getTime);
        return baseMapper.selectMaps(edgGlassWrapper);
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
@@ -34,7 +34,7 @@
     * @param current
     * @return
     */
    List<Map<String, Object>> selectCurrentCutTerritory(String current);
    List<List<Map<String, Object>>> selectCurrentCutTerritory(String current);
    /**
     * 查询笼内版图差值范围内的  此尺寸玻璃  如无则按照 钢化版图序号 以及玻璃序号
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -142,7 +142,7 @@
            List<Map<String, Object>> cutTerritorys=optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                    .selectAll(OptimizeDetail.class)
                    .selectAs(OptimizeLayout::getWidth, "olWidth")
                    .selectAs(OptimizeLayout::getWidth, "olHeight")
                    .selectAs(OptimizeLayout::getHeight, "olHeight")
                    .leftJoin(OptimizeLayout.class, on -> on
                            .eq(OptimizeLayout::getProjectNo, OptimizeDetail::getProjectNo)
                            .eq(OptimizeLayout::getStockId, OptimizeDetail::getStockId))
@@ -183,14 +183,14 @@
     * @return
     */
    @Override
    public List<Map<String, Object>> selectCurrentCutTerritory(String current) {
        //最终返回结果
    public List<List<Map<String, Object>>> selectCurrentCutTerritory(String current) {
        //结果
        List<Map<String, Object>> ResultcutTerritorys=new ArrayList<>();
        //此工程的所有优化数据
        List<Map<String, Object>> cutTerritorys=optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                .selectAll(OptimizeDetail.class)
                .selectAs(OptimizeLayout::getWidth, "olWidth")
                .selectAs(OptimizeLayout::getWidth, "olHeight")
                .selectAs(OptimizeLayout::getHeight, "olHeight")
                .leftJoin(OptimizeLayout.class, on -> on
                        .eq(OptimizeLayout::getProjectNo, OptimizeDetail::getProjectNo)
                        .eq(OptimizeLayout::getStockId, OptimizeDetail::getStockId))
@@ -202,7 +202,6 @@
                .eq(EdgStorageCageDetails::getEngineerId,current)
                .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
        ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId,EdgStorageCageDetails->EdgStorageCageDetails));
        for (Map<String, Object> cutTerritory : cutTerritorys) {
//                log.info("内容:{}-------{}",cutTerritory,edgStorageCageDetails);
            if(cutTerritory.get("glass_id")==null||"".equals(cutTerritory.get("glass_id"))){
@@ -215,7 +214,9 @@
            }
            ResultcutTerritorys.add(cutTerritory);
        }
        return ResultcutTerritorys;
        Map<String, List<Map<String, Object>>> groupBy=ResultcutTerritorys.stream().collect(Collectors.groupingBy(item->item.get("stock_id").toString()));
//        List<List<Map<String, Object>>> Result=groupBy.values().stream().collect(Collectors.toList());
        return new ArrayList<>(groupBy.values());
//Sql版本
//        return optimizeDetailMapper.selectJoinMaps(new MPJQueryWrapper<OptimizeDetail>().selectAll(OptimizeDetail.class)
//                .select("ol.width as olwidth","ol.height as olheight")
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -21,7 +21,6 @@
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.taskcache.entity.TaskCache;
import com.mes.taskcache.service.TaskCacheService;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.tools.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
@@ -140,6 +139,7 @@
        Date endDate = new Date();
        log.info("本次任务结束时间:{},共耗时:{}ms", endDate, endDate.getTime() - startDate.getTime());
    }
    @Scheduled(fixedDelay = 1000)
    public void temperingIsRun(){
        JSONObject jsonObject = new JSONObject();
@@ -157,6 +157,7 @@
            }
        }
    }
    /**
     * 进片任务
     *
@@ -173,20 +174,23 @@
        //查询玻璃并进行交换
        GlassInfo glassInfo = queryAndChangeGlass(glassId);
        log.info("3、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo);
        if (glassInfo == null) {
            return;
        }
        log.info("4、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo);
        EdgStorageCageDetails details = new EdgStorageCageDetails();
        BeanUtils.copyProperties(glassInfo, details);
        details.setState(Const.GLASS_STATE_IN);
        details.setSlot(nearestEmpty.getSlot());
        details.setDeviceId(nearestEmpty.getDeviceId());
        edgStorageCageDetailsService.save(details);
        log.info("4、玻璃信息已存入理片笼详情表,玻璃信息为{}", details);
        log.info("5、玻璃信息已存入理片笼详情表,玻璃信息为{}", details);
        //添加进片任务
        boolean taskCache = saveTaskCache(details.getGlassId(), 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN);
        log.info("5、生成进片任务信息存入任务表是否完成:{}", taskCache);
        log.info("6、生成进片任务信息存入任务表是否完成:{}", taskCache);
        S7object.getinstance().plccontrol.writeWord(confirmationWrodAddress, 1);
        log.info("6、发送确认字完成");
        log.info("7、发送确认字完成");
    }
@@ -201,6 +205,10 @@
        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
//                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
        Assert.isFalse(null == glassInfo, "玻璃信息不存在");
        if ((glassInfo.getWidth() < Double.parseDouble(minTwoFirstLength) && glassInfo.getHeight() < Double.parseDouble(minTwoSecondLength)) || (glassInfo.getWidth() < Double.parseDouble(minTwoSecondLength) && glassInfo.getHeight() < Double.parseDouble(minTwoFirstLength))) {
            log.info("3、玻璃信息不符合进入理片笼最小尺寸,玻璃信息为{}", glassInfo);
            return null;
        }
        //按照玻璃尺寸
        LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>()
                .eq(GlassInfo::getWidth, glassInfo.getWidth())
@@ -316,7 +324,7 @@
                            BeanUtils.copyProperties(one, resultDetails);
                            glassInfo = resultDetails;
                        } else {
                            log.info("获取笼内玻璃和带进片玻璃为空或者不符合磨边尺寸");
                            log.info("获取笼内玻璃和待进片玻璃为空或者不符合磨边尺寸");
                        }
                    } else {
                        glassInfo = queryMinGlass(list.get(0).getWidth(), list.get(0).getHeight(), glassId);
@@ -530,12 +538,12 @@
        if (endcell == Const.A10_OUT_TARGET_POSITION) {
            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                    "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
                    "on t.glass_id = t1.glass_id and (t1.first_length >= " + minOneFirstLength + " and t1.second_length >= " + minOneSecondLength);
        } else {
            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                    "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
        }
        wrapper.last("order by count(t.glass_id) desc  limit 2");
        List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
@@ -710,8 +718,8 @@
        jsonObject.append("currentCutTerritory", currentCutTerritorys);
        //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys);
        //磨边信息
        List<Map<String, Object>> EdgTasks1 = taskCacheService.selectEdgInfo("2001");
        List<Map<String, Object>> EdgTasks2 = taskCacheService.selectEdgInfo("2002");
        List<Map<String, Object>> EdgTasks1 = edgGlassTaskInfoService.selectEdgInfo("2001");
        List<Map<String, Object>> EdgTasks2 = edgGlassTaskInfoService.selectEdgInfo("2002");
        jsonObject.append("EdgTasks1", EdgTasks1);
        jsonObject.append("EdgTasks2", EdgTasks2);
@@ -735,6 +743,22 @@
            }
        }
    }
    @Scheduled(fixedDelay = 1000)
    public void cacheGlassIsRun(){
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        List<TaskCache>taskCaches=taskCacheService.selectTaskCacheIsRun();
        jsonObject.append("taskCaches", taskCaches);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlassIsRun");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
                    webserver.sendMessage(jsonObject.toString());
                } else {
                    log.info("Home is closed");
                }
            }
        }
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
@@ -41,7 +41,7 @@
    @ResponseBody
    public Result cutTerritory(String current) {
        //engineerId=current;
        List<Map<String, Object>> h = edgStorageCageDetailsService.selectCurrentCutTerritory(current);
        List<List<Map<String, Object>>> h = edgStorageCageDetailsService.selectCurrentCutTerritory(current);
        return Result.build(200,"成功",h);
    }
    @ApiOperation("识别显示  当前版图   参数()")
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
@@ -1,5 +1,6 @@
package com.mes.taskcache.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.base.MPJBaseServiceImpl;
@@ -7,6 +8,7 @@
import com.mes.common.config.Const;
import com.mes.damage.entity.Damage;
import com.mes.damage.service.DamageService;
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import com.mes.edgstoragecage.entity.EdgStorageCage;
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
@@ -44,6 +46,7 @@
    /**
     * 添加理片笼任务
     *
     * @param taskCache
     * @return
     */
@@ -55,6 +58,7 @@
    /**
     * 查询磨边任务
     *
     * @param line
     * @return
     */
@@ -111,6 +115,7 @@
    /**
     * 查询待理片工作的任务
     *
     * @return
     */
    @Override
@@ -121,6 +126,7 @@
    /**
     * 查询全部任务
     *
     * @return
     */
    @Override
@@ -130,6 +136,7 @@
    /**
     * 查询待进片任务
     *
     * @return
     */
    @Override
@@ -141,6 +148,7 @@
    /**
     * 查询待出片任务
     *
     * @return
     */
    @Override
@@ -151,6 +159,7 @@
    /**
     * 查询  A09  或 A10 最新的一片 出片任务
     *
     * @param line
     * @return
     */
@@ -162,6 +171,7 @@
    /**
     * 查询  A09  或 A10 最新的一片 出片任务
     *
     * @param line
     * @return
     */
@@ -169,8 +179,10 @@
    public TaskCache selectLastOutCacheInfo(int line){
        return baseMapper.selectOne(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell,line).eq(TaskCache::getTaskStatus,1).orderByDesc(TaskCache::getCreateTime));
    }
    /**
     * 查询判断磨边线是否有玻璃运行
     *
     * @param
     * @return
     */
hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -18,11 +18,11 @@
    secondLength: 2500
  min:
    one: #第一条磨边线的最小尺寸信息
      firstLength: 600
      secondLength: 350
      firstLength: 500
      secondLength: 400
    two: #第二条磨边线的最小尺寸信息
      firstLength: 400
      secondLength: 300
      secondLength: 400
  sequence:
    order: false
hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
@@ -138,7 +138,7 @@
    @Test
    public void testEngineerCutTerritory() {
        List<Map<String, Object>> map = edgStorageCageDetailsService.selectCurrentCutTerritory("P24051806");
        List<List<Map<String, Object>>> map = edgStorageCageDetailsService.selectCurrentCutTerritory("P24051806");
        log.info("切割工程版图信息:{}", Arrays.asList(map));
    }
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -802,7 +802,7 @@
                    trainNumber = trainNumber + 1;
                    serialNumber = 1;
                    maxX = e.getXCoordinate();
                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
                            e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1));
                }
            } else {
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
@@ -43,7 +43,7 @@
     * fixedDelay : 上一个调用结束后再次调用的延时
     */
    @Scheduled(fixedDelay = 300)
    @Scheduled(fixedDelay = 30000)
    public void plcLoadGlassTask() throws InterruptedException {
        try {
            //获取联机状态
@@ -87,7 +87,7 @@
        }
    }
    @Scheduled(fixedDelay = 300)
    @Scheduled(fixedDelay = 30000)
    public void plcLoadGlassReport() {
        //获取是否有汇报
        String loadStatus = plcParameterObject.getPlcParameter("PlcStatus").getValue();
@@ -152,8 +152,8 @@
    public void loadGlassStatus() {
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        String inkageStatus =plcParameterObject.getPlcParameter("InkageStatus").getValue();
//        String inkageStatus ="1";
//        String inkageStatus =plcParameterObject.getPlcParameter("InkageStatus").getValue();
        String inkageStatus ="1";
        jsonObject.append("InkageStatus", inkageStatus);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass");
        if (sendwServer != null) {
@@ -175,7 +175,7 @@
        }else {
            jsonObject.append("engineering", "0");
        }
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("IsRun");
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlassIsRun");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -76,7 +76,7 @@
        //正在进行的任务
        List<TemperingGlassInfo>temperingTaskType=temperingAgoService.selectTaskType();
        jsonObject.append("temperingTaskType", temperingTaskType);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("isRun");
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("temperingIsRun");
        if (sendwServer != null) {
            for (WebSocketServer webserver : sendwServer) {
                if (webserver != null) {
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/controller/DownGlassInfoController.java
@@ -1,5 +1,10 @@
package com.mes.downglassinfo.controller;
import com.mes.downglassinfo.entity.request.DownGlassInfoRequest;
import com.mes.downglassinfo.service.DownGlassInfoService;
import com.mes.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -7,5 +12,12 @@
@RequestMapping("/downGlassInfo")
public class DownGlassInfoController {
    @Autowired
    DownGlassInfoService downGlassInfoService;
    @RequestMapping("/selectDownGlassInfo")
    public Result<String> setDownGlassInfoRequest(@RequestBody DownGlassInfoRequest request) {
        return Result.success(downGlassInfoService.setDownGlassInfoRequest(request));
    }
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/DownGlassInfo.java
@@ -7,6 +7,7 @@
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
@@ -79,5 +80,10 @@
     */
    private String glassId;
    /**
     * 创建时间
     */
    private Date gmtCreate;
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/entity/request/DownGlassInfoRequest.java
New file
@@ -0,0 +1,48 @@
package com.mes.downglassinfo.entity.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 *
 * </p>
 *
 * @author zhoush
 * @since 2024-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class DownGlassInfoRequest implements Serializable {
    /**
     * 工位id
     */
    private Integer workStationId;
    /**
     * 工程id
     */
    private String engineerId;
    /**
     * 开始时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date beginDate;
    /**
     * 结束时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endDate;
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/mapper/DownGlassInfoMapper.java
@@ -33,5 +33,13 @@
     * @param isDownload 是否获取未落架玻璃信息  True 已落架  false 未落架
     * @return
     */
    List<DownGlassInfoDTO> queryWorkStationIsIn(@Param(value = "isDownload") Boolean isDownload);
    List<DownGlassInfoDTO> queryWorkStationIsIn(@Param(value = "workList") List<Integer> workList, @Param(value = "isDownload") Boolean isDownload);
    /**
     * 获取
     *
     * @param workList
     * @return
     */
    List<DownGlassInfoDTO> queryWorkStationFlowCard(@Param(value = "workList") List<Integer> workList);
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/DownGlassInfoService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.downglassinfo.entity.DownGlassInfo;
import com.mes.downglassinfo.entity.request.DownGlassInfoRequest;
import com.mes.downworkstation.entity.dto.DownGlassInfoDTO;
import java.util.List;
@@ -31,7 +32,15 @@
     * @param isDownload true/false
     * @return
     */
    List<DownGlassInfoDTO> queryWorkStationIsIn(Boolean isDownload);
    List<DownGlassInfoDTO> queryWorkStationIsIn(List<Integer> workList, Boolean isDownload);
    /**
     * 获取指定架子已绑定流程卡的架子未落玻璃的数据信息
     *
     * @param workList 指定的架子号
     * @return
     */
    List<DownGlassInfoDTO> queryWorkStationFlowCard(List<Integer> workList);
    /**
     * 生成出片任务
@@ -40,4 +49,6 @@
     * @return
     */
    boolean generateOutGlassTask(String glassId);
    String setDownGlassInfoRequest(DownGlassInfoRequest request);
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
@@ -5,7 +5,9 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mes.common.config.Const;
import com.mes.common.utils.RedisUtil;
import com.mes.downglassinfo.entity.DownGlassInfo;
import com.mes.downglassinfo.entity.request.DownGlassInfoRequest;
import com.mes.downglassinfo.mapper.DownGlassInfoMapper;
import com.mes.downglassinfo.service.DownGlassInfoService;
import com.mes.downstorage.entity.DownStorageCageDetails;
@@ -27,6 +29,9 @@
    @Autowired
    DownStorageCageDetailsService downStorageCageDetailsService;
    @Autowired
    RedisUtil redisUtil;
    /**
     * 根据流程卡号查询最大序号
@@ -60,8 +65,15 @@
    }
    @Override
    public List<DownGlassInfoDTO> queryWorkStationIsIn(Boolean isDownload) {
        return baseMapper.queryWorkStationIsIn(isDownload);
    public List<DownGlassInfoDTO> queryWorkStationIsIn(List<Integer> workList, Boolean isDownload) {
        //按照要求获取已落架/未落架的玻璃信息
        return baseMapper.queryWorkStationIsIn(workList, isDownload);
    }
    @Override
    public List<DownGlassInfoDTO> queryWorkStationFlowCard(List<Integer> workList) {
        //获取已绑定流程卡的架子未落玻璃的数据信息
        return baseMapper.queryWorkStationFlowCard(workList);
    }
    @Override
@@ -82,4 +94,14 @@
        BeanUtils.copyProperties(details, glassInfo);
        return downLoadCacheGlassTask.initDownGlassTask(glassInfo, details.getSlot(), Const.G13_WORK_STATION, 2);
    }
    @Override
    public String setDownGlassInfoRequest(DownGlassInfoRequest request) {
        if (request == null) {
            redisUtil.deleteObject("downGlassRequest");
        } else {
            redisUtil.setCacheObject("downGlassRequest", request);
        }
        return "success";
    }
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
@@ -71,6 +71,13 @@
     */
    boolean DirectConnection(GlassInfo glassInfo);
    /**
     * 获取当前非本架子可落架的玻璃信息
     *
     * @param glassId
     * @param workList G06/G11:传入G06实际获取的为可落架G11的玻璃 反之同理
     * @return
     */
    String getGlassInfoMaxCount(String glassId, List<Integer> workList);
    /**
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -170,7 +170,7 @@
            }
            if (!checkFlag) {
                log.info("无空架子,获取已绑定架子的流程卡信息,查看玻璃信息是否可被对调");
                List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationIsIn(Boolean.FALSE);
                List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationIsIn(Const.WORK_STATION_ALL, Boolean.FALSE);
                log.info("获取架子上已绑定流程卡落架的数量及未落架的玻璃数据:{}", downGlassInfoDTOList);
                if (CollectionUtils.isEmpty(downGlassInfoDTOList)) {
                    log.info("已绑定流程卡均无未落架玻璃,请及时处理架子上的玻璃,清除流程卡,执行进片任务");
@@ -309,6 +309,7 @@
            }
        }
        List<Integer> workStationAll = Arrays.asList(1, 2, 3, 4, 5, 6);
        //获取非本次落架的架子信息
        List<Integer> offWorkStationList = workStationAll.stream().filter(e -> !workList.contains(e)).collect(Collectors.toList());
        List<DownStorageCageDetails> list = new ArrayList();
        //是否有空架子 true:有   false:无
@@ -387,12 +388,12 @@
        loop:
        if (StringUtils.isBlank(tempGlassId)) {
            //获取正在落架的绑定流程卡的信息(流程卡、层数、落架数量)
            List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationIsIn(Boolean.TRUE);
            //todo:落架玻璃数为0,即使绑定了流程卡,也无法找到对应的架子信息,只能重新绑定
            List<DownGlassInfoDTO> downGlassInfoDTOList = downGlassInfoService.queryWorkStationFlowCard(workList);
            List<String> downGlassFlowList = downGlassInfoDTOList.stream().map(item -> item.getFlowCardId() + ":" + item.getLayer()).collect(Collectors.toList());
            if (CollectionUtils.isEmpty(downGlassFlowList)) {
                //架子都未绑定流程卡,出笼内子数量最多尺寸最大的玻璃id,无  则返回扫描扫到的玻璃id进行出片
                tempGlassId = downStorageCageDetailsService.getGlassInfoMaxCount(glassId, offWorkStationList);
                isNeedBind = Boolean.TRUE;
                break loop;
            }
@@ -527,6 +528,7 @@
        //落架片序
        downGlassInfo.setSequence(downGlassInfoService.queryMaxSequence(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer()));
        downGlassInfo.setWorkStationId(endCell);
        downGlassInfo.setGmtCreate(new Date());
        downGlassInfoService.save(downGlassInfo);
        //生成任务信息
        GlassInfo glassInfo = new GlassInfo();
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
@@ -2,13 +2,18 @@
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mes.common.config.Const;
import com.mes.common.utils.RedisUtil;
import com.mes.downglassinfo.entity.DownGlassInfo;
import com.mes.downglassinfo.entity.request.DownGlassInfoRequest;
import com.mes.downglassinfo.service.DownGlassInfoService;
import com.mes.downstorage.service.DownStorageCageService;
import com.mes.downworkstation.entity.DownWorkstation;
import com.mes.downworkstation.service.DownWorkstationService;
import com.mes.tools.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -28,6 +33,9 @@
    private DownStorageCageService downStorageCageService;
    @Autowired
    private DownGlassInfoService downGlassInfoService;
    @Autowired
    private RedisUtil redisUtil;
    @Scheduled(fixedDelay = 2000)
    public void sendDownWorkstations() {
@@ -101,14 +109,27 @@
    @Scheduled(fixedDelay = 2000)
    public void sendDownGlassInfo() {
        DownGlassInfoRequest request = redisUtil.getCacheObject("downGlassRequest");
        if (null == request) {
            request = new DownGlassInfoRequest();
        }
        log.info("发送当前正在执行工程已落架的玻璃信息");
        List<DownGlassInfo> downGlassInfos = downGlassInfoService.list(new LambdaQueryWrapper<DownGlassInfo>()
                .inSql(DownGlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
        LambdaQueryWrapper<DownGlassInfo> wrapper = new LambdaQueryWrapper<DownGlassInfo>()
                .between(null != request.getBeginDate(), DownGlassInfo::getGmtCreate, request.getBeginDate(), request.getEndDate())
                .eq(StringUtils.isNotBlank(request.getEngineerId()), DownGlassInfo::getEngineerId, request.getEngineerId());
        if (null == request.getWorkStationId() || 0 == request.getWorkStationId()) {
            wrapper.in(DownGlassInfo::getWorkStationId, Const.WORK_STATION_ALL);
        } else {
            wrapper.eq(DownGlassInfo::getWorkStationId, request.getWorkStationId());
        }
        List<DownGlassInfo> downGlassInfos = downGlassInfoService.list(wrapper);
        Map<Integer, List<DownGlassInfo>> listMap = downGlassInfos.stream().collect(Collectors.groupingBy(DownGlassInfo::getWorkStationId));
        List<Object> engineerIdListTemp = downGlassInfoService.listObjs(new QueryWrapper<DownGlassInfo>().select("distinct engineer_id"));
        List<String> engineerIdList = engineerIdListTemp.stream().map(String::valueOf).collect(Collectors.toList());
        JSONObject jsonObject4 = new JSONObject();
        List<Map<String, Object>> list = downStorageCageService.selectDownStorageCages();
        jsonObject4.append("params", listMap);
        ArrayList<WebSocketServer> sendwServer4 = WebSocketServer.sessionMap.get("sendDownGlass");
        jsonObject4.append("downGlassInfos", listMap);
        jsonObject4.append("engineerIdList", engineerIdList);
        ArrayList<WebSocketServer> sendwServer4 = WebSocketServer.sessionMap.get("unloadglass");
        if (sendwServer4 != null) {
            for (WebSocketServer webserver : sendwServer4) {
                if (webserver != null && webserver.session.isOpen()) {
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
@@ -58,16 +58,36 @@
        AND T.LAYER = T1.LAYER
        LEFT JOIN DOWN_GLASS_INFO T2 ON T1.GLASS_ID = T2.GLASS_ID
        <where>
            t.workstation_id in
            <foreach collection="workList" item="item" open='(' close=')' separator=','>
                #{item}
            </foreach>
            <if test="!isDownload">
                AND T2.GLASS_ID IS NULL
            </if>
            <if test="isDownload">
                AND T2.GLASS_ID IS not NULL
            </if>
        </where>
        ORDER BY
        T.RACKS_NUMBER DESC,
        T1.TEMPERING_LAYOUT_ID,
        T1.TEMPERING_FEED_SEQUENCE DESC
    </select>
    <select id="queryWorkStationFlowCard" resultMap="downGlassInfo">
        SELECT
        T.FLOW_CARD_ID,
        T.LAYER,
        T.RACKS_NUMBER
        FROM
        DOWN_WORKSTATION T
        where
        (t.flow_card_id is not null and t.flow_card_id != '')
        and t.workstation_id in
        <foreach collection="workList" item="item" open='(' close=')' separator=','>
            #{item}
        </foreach>
        ORDER BY T.RACKS_NUMBER DESC
    </select>
</mapper>
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownStorageCageDetailsMapper.xml
@@ -28,12 +28,11 @@
        FROM DOWN_STORAGE_CAGE_DETAILS
        WHERE STATE = 100
        and (FLOW_CARD_ID, LAYER) not in (
        select FLOW_CARD_ID, LAYER from down_workstation where flow_card_id is not null and workstation_id not in
        select FLOW_CARD_ID, LAYER from down_workstation where flow_card_id is not null and workstation_id in
        <foreach collection="workList" item="item" open='(' close=')' separator=','>
            #{item}
        </foreach>
        )
        GROUP BY FLOW_CARD_ID, LAYER
        ORDER BY COUNT(FLOW_CARD_ID) DESC
        LIMIT 1 )