wu
2024-12-05 16bc036b693e98f854210499641beb0eac80c760
Merge branch 'master' of http://10.153.19.25:10105/r/YiWuProject
2个文件已添加
18个文件已修改
3个文件已删除
1159 ■■■■■ 已修改文件
UI-Project/src/lang/zh.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass.rar 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass.zip 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/hollow/hollowequipment.vue 175 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java 552 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassTestCallback.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/OpcNGTemperingTask.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-yw.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassOutRelationInfoController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js
@@ -671,5 +671,9 @@
        pforcedfilming: '是否强制出片?',
        brokenpieces: '破损片数',
        realpieces: '实际片数',
        route: '路线:',
        croute: '请选择路线',
        pairQuantity: '总配对数量:',
        cpairQuantity: '请输入总配对数量',
    }
}
UI-Project/src/views/UnLoadGlass.rar
Binary files differ
UI-Project/src/views/UnLoadGlass.zip
Binary files differ
UI-Project/src/views/hollow/hollowequipment.vue
@@ -56,6 +56,7 @@
      </div>
    </el-card>
  </div>
  <!-- 创建任务 -->
  <el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%">
    <el-table ref="table" style="margin-top: 20px;height: 500px;"
              :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
@@ -70,18 +71,85 @@
      <!-- <el-table-column prop="lackCount" align="center" :label="$t('hellow.missingnumber')" min-width="80"/> -->
      <el-table-column fixed="right" :label="$t('hellow.operate')" align="center" width="270">
        <template #default="scope">
          <el-button size="mini" type="text" plain @click="finisha(scope.row)">{{ $t('hellow.claimquest') }}</el-button>
          <el-button size="mini" type="text" plain @click="handletake(scope.row)">{{ $t('hellow.claimquest') }}</el-button>
          <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">{{
              $t('hellow.missingfilms')
            }}
          </el-button>
          <el-button size="mini" type="text" plain @click="finishb(scope.row)">{{
          <el-button size="mini" type="text" plain @click="handleout(scope.row)">{{
              $t('hellow.forcedfilming')
            }}
          </el-button>
        </template>
      </el-table-column>
    </el-table>
  </el-dialog>
  <!-- 领取任务 -->
  <el-dialog v-model="dialogFormVisiblec" top="21vh" width="40%" :title="$t('hellow.claimquest')">
    <div style="margin-left: 20px;margin-top: 10px;margin-bottom: 10px;">
      <el-form size="mini" label-width="100px">
        <el-form label-width="210px" label-position="right">
          <el-form-item :label="$t('hellow.pairQuantity')" :required="true" style="width: 25vw">
            <el-input :placeholder="$t('hellow.cpairQuantity')" v-model="totalPairQuantity" autocomplete="off" />
          </el-form-item>
          <el-form-item :label="$t('hellow.route')" :required="true" style="width: 25vw;">
            <el-select
            :placeholder="$t('hellow.croute')"
             style="width: 270px"
             v-model="cell">
               <el-option
                v-for="item in options"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
          </el-select>
          </el-form-item>
        </el-form>
      </el-form>
    </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="finisha">
          {{ $t('reportWork.sure') }}
        </el-button>
        <el-button @click="dialogFormVisiblec = false">{{ $t('reportWork.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>
  <!-- 强制出片 -->
  <el-dialog v-model="dialogFormVisibled" top="21vh" width="40%" :title="$t('hellow.forcedfilming')">
    <div style="margin-left: 20px;margin-top: 10px;margin-bottom: 10px;">
      <el-form size="mini" label-width="100px">
        <el-form label-width="210px" label-position="right">
          <el-form-item :label="$t('hellow.pairQuantity')" :required="true" style="width: 25vw">
            <el-input :placeholder="$t('hellow.cpairQuantity')" v-model="totalPairQuantity" autocomplete="off" />
          </el-form-item>
          <el-form-item :label="$t('hellow.route')" :required="true" style="width: 25vw;">
            <el-select
            :placeholder="$t('hellow.croute')"
             style="width: 270px"
             v-model="cell">
               <el-option
                v-for="item in options"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
          </el-select>
          </el-form-item>
        </el-form>
      </el-form>
    </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="finishb">
          {{ $t('reportWork.sure') }}
        </el-button>
        <el-button @click="dialogFormVisibled = false">{{ $t('reportWork.cancel') }}</el-button>
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="dialogFormVisibleb" top="7vh" width="70%" height="500">
    <div style="margin-top: -20px;text-align: center;margin-left: 400px;">
@@ -103,6 +171,7 @@
      </div>
    </el-table>
  </el-dialog>
  <!-- 开始任务 -->
  <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('hellow.pstarttask')">
    <template #footer>
      <div id="dialog-footer">
@@ -113,6 +182,7 @@
      </div>
    </template>
  </el-dialog>
  <!-- 停止任务 -->
  <el-dialog v-model="blindb" top="30vh" width="25%" :title="$t('hellow.pstoptask')">
    <template #footer>
      <div id="dialog-footer">
@@ -137,10 +207,27 @@
const tableDatab = ref([])
const tableDatac = ref([])
const flowCard = ref('')
const cell = ref('')
const totalPairQuantity = ref('')
const dialogFormVisiblea = ref(false)
const dialogFormVisibleb = ref(false)
const dialogFormVisiblec = ref(false)
const dialogFormVisibled = ref(false)
const currentRow = reactive({}); // 当前行的数据 
const options = [
  {
    value: 930,
    label: 930,
  },
  {
    value: 931,
    label: 931,
  },
  {
    value: 932,
    label: 932,
  }
]
let socket = null;
// const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/screen`;
// const handleMessage = (data) => {
@@ -175,9 +262,19 @@
};
const handleBindRack = (row) => {
  const { flowCardId, layer } = row;
  currentRow.flowCardId  = row.flowCardId; // 直接设置响应式属性
  currentRow.flowCardId  = row.flowCardId;
  dialogFormVisibleb.value = true;
  fetchFlowBind(flowCardId, layer);
};
// 领取任务
const handletake = (row) => {
  window.localStorage.setItem('flowCardId', row.flowCardId)
  dialogFormVisiblec.value = true;
};
// 强制出片
const handleout = (row) => {
  window.localStorage.setItem('flowCardId', row.flowCardId)
  dialogFormVisibled.value = true;
};
// 创建任务
const fetchFlowCardId = async () => {
@@ -237,53 +334,41 @@
  }
}
// 领取任务
const finisha = async (row) => {
const finisha = async () => {
  let flowCardId = window.localStorage.getItem('flowCardId')
  try {
    const confirmResult = await ElMessageBox.confirm(
        t('hellow.pclaimquest'),
        t('searchOrder.prompt'),
        {
          confirmButtonText: t('searchOrder.yes'),
          cancelButtonText: t('searchOrder.cancel'),
          type: 'warning',
      var url="/hollowGlass/hollowGlassOutRelationInfo/receiveTask?cell="+cell.value + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantity.value;
      const response = await request.post(url)
    if (response.code == 200) {
      ElMessage.success(response.message);
      dialogFormVisiblec.value = false;
      cell.value = '';
      totalPairQuantity.value = '';
    } else {
          ElMessage.error(response.message);
        }
    );
    if (confirmResult === 'confirm') {
      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/finishBigStorageCageDetails", row)
      if (response.code === 200) {
        ElMessage.success(response.message);
      } else {
        ElMessage.error(response.message);
      } catch (error) {
        console.error(error);
      }
    }
  } catch (error) {
    console.error('发生错误:', error);
  }
};
// 强制出片
const finishb = async (row) => {
const finishb = async () => {
  let flowCardId = window.localStorage.getItem('flowCardId')
  try {
    const confirmResult = await ElMessageBox.confirm(
        t('hellow.pforcedfilming'),
        t('searchOrder.prompt'),
        {
          confirmButtonText: t('searchOrder.yes'),
          cancelButtonText: t('searchOrder.cancel'),
          type: 'warning',
      var url="/hollowGlass/hollowGlassOutRelationInfo/forceOutGlass?cell="+cell.value + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantity.value;
      const response = await request.post(url)
    if (response.code == 200) {
      ElMessage.success(response.message);
      dialogFormVisibled.value = false;
      cell.value = '';
      totalPairQuantity.value = '';
    } else {
          ElMessage.error(response.message);
        }
    );
    if (confirmResult === 'confirm') {
      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/finishBigStorageCageDetails", row)
      if (response.code === 200) {
        ElMessage.success(response.message);
      } else {
        ElMessage.error(response.message);
      } catch (error) {
        console.error(error);
      }
    }
  } catch (error) {
    console.error('发生错误:', error);
  }
};
onUnmounted(() => {
  socket.close();
});
@@ -302,4 +387,8 @@
});
</script>
<style scoped></style>
<style scoped>
#dialog-footer {
  text-align: center;
  margin-top: -15px;
}</style>
hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -114,14 +114,16 @@
    {
        List<TemperingGlassInfo> result=null;
        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
        wrapper.select("Top 1 *").in("state",1,0).eq("temperingLayoutId",id);
        wrapper.select("Top 1 *").in("state",1,0).eq("tempering_layout_id",id);
        TemperingGlassInfo glass=temperingMapper.selectOne(wrapper);
        if(glass!=null) {
            QueryWrapper<TemperingGlassInfo> glassinfo = new QueryWrapper<>();
            glassinfo.eq("engineer_id", glass.getEngineerId())
                    .eq("tempering_layout_id", id);
            //return temperingMapper.selectList(glassinfo);
            result= temperingMapper.selectByEngineerIdAndLayoutId(glass.getEngineerId(),glass.getTemperingLayoutId());
                    .eq("tempering_layout_id", id)
                    .orderByDesc("tempering_layout_id")
            .orderByAsc("tempering_feed_sequence");
            return temperingMapper.selectList(glassinfo);
//            result= temperingMapper.selectByEngineerIdAndLayoutId(glass.getEngineerId(),glass.getTemperingLayoutId());
        }
        return result;
    }
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -872,73 +872,4 @@
        }
    }
    //    @Scheduled(fixedDelay = 1000)
    public void CacheGlassTasks() {
        JSONObject jsonObject = new JSONObject();
        List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory();
        jsonObject.append("currentCutTerritory", currentCutTerritorys);
        //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys);
        //卧室缓存笼内信息
        List<Map<String, Object>> EdgStorageCageinfos = edgStorageCageService.selectEdgStorageCages();
        jsonObject.append("EdgStorageCageinfos", EdgStorageCageinfos);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlass");
        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");
                }
            }
        }
    }
    //    @Scheduled(fixedDelay = 1000)
    public void cacheGlassIsRun() {
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        List<EdgGlassTaskInfo> taskCaches = edgGlassTaskInfoService.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");
                }
            }
        }
    }
    //    @Scheduled(fixedDelay = 1000)
    public void CacheGlassTaskss() {
        JSONObject jsonObject = new JSONObject();
        //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys);
        //磨边信息
        List<EdgGlassTaskInfo> edgTasks = edgGlassTaskInfoService.selectEdgInfo();
        jsonObject.append("edgTasks", edgTasks);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("edgTasks");
        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("edgTasks is closed");
                }
            }
        }
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
New file
@@ -0,0 +1,103 @@
package com.mes.job;
import cn.hutool.json.JSONObject;
import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
import com.mes.edgstoragecage.service.EdgStorageCageService;
import com.mes.tools.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * @Author : zhoush
 * @Date: 2024/12/4 9:41
 * @Description:
 */
@Component
@Slf4j
public class PushMessageToIndex {
    @Resource
    EdgStorageCageDetailsService edgStorageCageDetailsService;
    @Resource
    EdgStorageCageService edgStorageCageService;
    @Resource
    EdgGlassTaskInfoService edgGlassTaskInfoService;
    @Scheduled(fixedDelay = 1000)
    public void CacheGlassTasks() {
        JSONObject jsonObject = new JSONObject();
        List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory();
        jsonObject.append("currentCutTerritory", currentCutTerritorys);
        //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys);
        //卧室缓存笼内信息
        List<Map<String, Object>> EdgStorageCageinfos = edgStorageCageService.selectEdgStorageCages();
        jsonObject.append("EdgStorageCageinfos", EdgStorageCageinfos);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlass");
        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");
                }
            }
        }
    }
    @Scheduled(fixedDelay = 1000)
    public void cacheGlassIsRun() {
        JSONObject jsonObject = new JSONObject();
        //正在进行的任务
        List<EdgGlassTaskInfo> taskCaches = edgGlassTaskInfoService.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");
                }
            }
        }
    }
    @Scheduled(fixedDelay = 1000)
    public void CacheGlassTaskss() {
        JSONObject jsonObject = new JSONObject();
        //log.info("本次识别版图{},++++{}",engineerId,currentCutTerritorys);
        //磨边信息
        List<EdgGlassTaskInfo> edgTasks = edgGlassTaskInfoService.selectEdgInfo();
        jsonObject.append("edgTasks", edgTasks);
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("edgTasks");
        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("edgTasks is closed");
                }
            }
        }
    }
}
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java
@@ -1,14 +1,12 @@
package com.mes.job.opccallback;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
import com.mes.common.config.Const;
import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo;
import com.mes.edgglasstaskqueueinfo.service.EdgGlassTaskQueueInfoService;
import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
import com.mes.edgstoragecage.entity.EdgStorageCage;
import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
@@ -54,7 +52,7 @@
    EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService;
    @Resource
    EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService;
    EdgGlassTaskInfoService edgGlassTaskInfoService;
    @Value("${mes.glassGap}")
    private int glassGap;
@@ -68,263 +66,263 @@
    @Override
    public void onSubscribe(String identifier, Object value) {
        log.info("当前正在执行的任务为{}", value);
        String tableName = identifier.contains("edg_storage_device_one_task") ? EDG_STORAGE_DEVICE_ONE_TASK : EDG_STORAGE_DEVICE_TWO_TASK;
        int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2;
        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName);
        try {
            if (task == null) {
                log.info("任务表基础数据录入失败,请检查数据是否录入成功");
                return;
            }
            if (task.getTaskState() == 2) {
                //防止出片任务且笼前有玻璃的情况,将进片id置空,即出片仅考虑笼内的玻璃
                task.setGlassIdIn("");
            }
            int request = Integer.parseInt("" + value);
            log.info("开始执行任务,任务请信息为{}", task);
            if (request == 0) {
                log.info("未收到任务请求,结束本次任务");
            } else if (request == 1) {
                //进片任务
                log.info("进片任务:进片玻璃id为:{}", task.getGlassIdIn());
                intoTask(task, tableName, device);
            } else if (request == 2) {
                //出片任务
                outTask(task, tableName, device);
            } else if (request == 3) {
                //直通任务
                if (!outTask(task, tableName, device)) {
                    intoTask(task, tableName, device);
                }
            } else if (request == 4) {
                log.info("将启动子改为0");
                task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING);
                edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
            } else {
                finishTask(task, tableName);
            }
        } catch (Exception e) {
            log.info("执行任务过程中发生异常,任务字{},{}", task.getTaskState(), e.getMessage());
            log.info("将启动子改为0");
            task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY);
            edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
        }
//        log.info("当前正在执行的任务为{}", value);
//        String tableName = identifier.contains("edg_storage_device_one_task") ? EDG_STORAGE_DEVICE_ONE_TASK : EDG_STORAGE_DEVICE_TWO_TASK;
//        int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2;
//        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName);
//        try {
//            if (task == null) {
//                log.info("任务表基础数据录入失败,请检查数据是否录入成功");
//                return;
//            }
//            if (task.getTaskState() == 2) {
//                //防止出片任务且笼前有玻璃的情况,将进片id置空,即出片仅考虑笼内的玻璃
//                task.setGlassIdIn("");
//            }
//            int request = Integer.parseInt("" + value);
//            log.info("开始执行任务,任务请信息为{}", task);
//            if (request == 0) {
//                log.info("未收到任务请求,结束本次任务");
//            } else if (request == 1) {
//                //进片任务
//                log.info("进片任务:进片玻璃id为:{}", task.getGlassIdIn());
//                intoTask(task, tableName, device);
//            } else if (request == 2) {
//                //出片任务
//                outTask(task, tableName, device);
//            } else if (request == 3) {
//                //直通任务
//                if (!outTask(task, tableName, device)) {
//                    intoTask(task, tableName, device);
//                }
//            } else if (request == 4) {
//                log.info("将启动子改为0");
//                task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING);
//                edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
//            } else {
//                finishTask(task, tableName);
//            }
//        } catch (Exception e) {
//            log.info("执行任务过程中发生异常,任务字{},{}", task.getTaskState(), e.getMessage());
//            log.info("将启动子改为0");
//            task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY);
//            edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
//        }
    }
    private boolean intoTask(EdgStorageDeviceTask task, String tableName, int deviceId) {
        //获取玻璃的基本信息
        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
        if (null == glassInfo) {
            log.info("进片玻璃信息不存在,玻璃id:{}", task.getGlassIdIn());
            return Boolean.FALSE;
        }
        //获取当前进片玻璃id和进片格子  相同尺寸可以放下的格子
        EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(deviceId, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell());
        if (edgStorageCage == null) {
            log.info("相同尺寸可以放下的格子未找到,格子id:{}", task.getCurrentCell());
//            SELECT * from edg_storage_cage where device_id = 1 and remain_width > 1000 order by abs(slot - 10)
            List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>()
                    .eq(EdgStorageCage::getDeviceId, deviceId)
                    .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
                    .ge(EdgStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())).last("order by abs(slot - " + task.getCurrentCell() + ")"));
//            //直通任务
//            if (flag && CollectionUtil.isNotEmpty(emptyList)) {
//                return emptyList.get(0);
//        //获取玻璃的基本信息
//        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
//        if (null == glassInfo) {
//            log.info("进片玻璃信息不存在,玻璃id:{}", task.getGlassIdIn());
//            return Boolean.FALSE;
//        }
//        //获取当前进片玻璃id和进片格子  相同尺寸可以放下的格子
//        EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(deviceId, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell());
//        if (edgStorageCage == null) {
//            log.info("相同尺寸可以放下的格子未找到,格子id:{}", task.getCurrentCell());
////            SELECT * from edg_storage_cage where device_id = 1 and remain_width > 1000 order by abs(slot - 10)
//            List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>()
//                    .eq(EdgStorageCage::getDeviceId, deviceId)
//                    .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
//                    .ge(EdgStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())).last("order by abs(slot - " + task.getCurrentCell() + ")"));
////            //直通任务
////            if (flag && CollectionUtil.isNotEmpty(emptyList)) {
////                return emptyList.get(0);
////            }
//            if (CollectionUtil.isEmpty(storageCageList) || storageCageList.size() == 1) {
//                log.info("没有多余的空格子");
//                return Boolean.FALSE;
//            }
            if (CollectionUtil.isEmpty(storageCageList) || storageCageList.size() == 1) {
                log.info("没有多余的空格子");
                return Boolean.FALSE;
            }
            edgStorageCage = storageCageList.get(0);
        }
        log.info("4、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo);
        EdgStorageCageDetails details = new EdgStorageCageDetails();
        BeanUtils.copyProperties(glassInfo, details);
        details.setState(Const.GLASS_STATE_IN);
        details.setSlot(edgStorageCage.getSlot());
        details.setDeviceId(edgStorageCage.getDeviceId());
        edgStorageCageDetailsService.save(details);
        //更新任务信息
        task.setStartCell(edgStorageCage.getSlot());
        task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN);
        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
        saveHistoryTask(task);
//            edgStorageCage = storageCageList.get(0);
//        }
//        log.info("4、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo);
//        EdgStorageCageDetails details = new EdgStorageCageDetails();
//        BeanUtils.copyProperties(glassInfo, details);
//        details.setState(Const.GLASS_STATE_IN);
//        details.setSlot(edgStorageCage.getSlot());
//        details.setDeviceId(edgStorageCage.getDeviceId());
//        edgStorageCageDetailsService.save(details);
//
//        //更新任务信息
//        task.setStartCell(edgStorageCage.getSlot());
//        task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN);
//        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
//        saveHistoryTask(task);
        return Boolean.TRUE;
    }
    private boolean outTask(EdgStorageDeviceTask task, String tableName, int deviceId) {
        EdgStorageCageDetails edgStorageCageDetails = null;
        //笼内是版图相差是否超过阈值
        boolean flag = queryMaxMinDiff(threshold);
        if (flag) {
            EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                    .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
                    .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
                    .eq(EdgStorageCageDetails::getDeviceId, deviceId)
                    .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId)
                    .orderBy(Boolean.TRUE, Boolean.TRUE, EdgStorageCageDetails::getTemperingFeedSequence)
                    .last("limit 1"));
//            select * from edg_storage_cage_details where width = 551 and height = 1151 and id in (select min(id ) from edg_storage_cage_details where state = 100 group by slot )
            edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                    .eq(EdgStorageCageDetails::getWidth, minEdgDetails.getWidth())
                    .eq(EdgStorageCageDetails::getHeight, minEdgDetails.getHeight())
                    .eq(EdgStorageCageDetails::getDeviceId, deviceId)
                    .inSql(EdgStorageCageDetails::getId, "select min(id) from edg_storage_cage_details where state = 100 group by slot ")
                    .last("order by abs(slot - " + task.getCurrentCell() + ")  asc limit 1")
            );
            //给直通任务
            if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) {
                GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                        .eq(GlassInfo::getGlassId, task.getGlassIdIn())
                        .eq(GlassInfo::getWidth, minEdgDetails.getWidth())
                        .eq(GlassInfo::getHeight, minEdgDetails.getHeight()));
                if (null != glassInInfo) {
                    edgStorageCageDetails = new EdgStorageCageDetails();
                    BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
                }
            }
            if (null == edgStorageCageDetails) {
                edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                        .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
                        .eq(EdgStorageCageDetails::getDeviceId, deviceId)
                        .eq(EdgStorageCageDetails::getSlot, minEdgDetails.getSlot())
                        .orderByAsc(EdgStorageCageDetails::getId)
                        .last("limit 1")
                );
            }
        }
        if (null == edgStorageCageDetails) {
            //        获取上次任务
//        获取历史表中上次任务最后一片尺寸
            EdgStorageDeviceTaskHistory edgeData = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
                    .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS)
                    .in(EdgStorageDeviceTaskHistory::getTaskType, Const.GLASS_CACHE_TYPE_OUT, Const.GLASS_CACHE_TYPE_THROUGH)
                    .orderByDesc(EdgStorageDeviceTaskHistory::getId).last("limit 1"));
            if (null != edgeData) {
                GlassInfo glassOutInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut()));
                //笼内的玻璃的尺寸是否和上一次任务一致
                edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), glassOutInfo.getWidth(), glassOutInfo.getHeight());
                if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) {
                    GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                            .eq(GlassInfo::getGlassId, task.getGlassIdIn())
                            .eq(GlassInfo::getWidth, glassOutInfo.getWidth())
                            .eq(GlassInfo::getHeight, glassOutInfo.getHeight()));
                    if (null != glassInInfo) {
                        edgStorageCageDetails = new EdgStorageCageDetails();
                        BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
                    }
                }
            }
        }
        if (null == edgStorageCageDetails) {
            edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0);
        }
        if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) {
            //和上次任务不存在相同尺寸
            GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
            edgStorageCageDetails = new EdgStorageCageDetails();
            BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
        }
        if (edgStorageCageDetails == null) {
            //和上次任务不存在相同尺寸
            log.info("笼内没有玻璃了");
            return Boolean.FALSE;
        }
        int taskType = Const.GLASS_CACHE_TYPE_OUT;
        String glassId = edgStorageCageDetails.getGlassId();
        if (glassId.equals(task.getGlassIdIn())) {
            if (3 != task.getTaskState()) {
                return Boolean.FALSE;
            }
            log.info("5、直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", edgStorageCageDetails);
            //玻璃信息替换
            String glassIdChange = queryAndChangeGlass(glassId);
            //处理在卧理内的玻璃信息:笼内的数据处理
            queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange);
            if (StringUtils.isNotBlank(glassIdChange)) {
                edgStorageCageDetails = new EdgStorageCageDetails();
                GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
                BeanUtils.copyProperties(one, edgStorageCageDetails);
            }
            EdgStorageCage storageCage = edgStorageCageService.getOne(new LambdaQueryWrapper<EdgStorageCage>()
                    .eq(EdgStorageCage::getDeviceId, deviceId)
                    .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
                    .ge(EdgStorageCage::getRemainWidth, cellLength)
                    .last("order by abs(slot - " + task.getCurrentCell() + ") limit 1"));
            Assert.isTrue(null != storageCage, "格子已满,无法执行直通任务");
            log.info("3、查询卧式理片笼里面的空格:{}", storageCage);
            edgStorageCageDetails.setSlot(storageCage.getSlot());
            edgStorageCageDetails.setDeviceId(storageCage.getDeviceId());
            edgStorageCageDetails.setState(Const.GLASS_STATE_OUT);
            edgStorageCageDetailsService.save(edgStorageCageDetails);
            taskType = Const.GLASS_CACHE_TYPE_THROUGH;
        } else {
            log.info("5、非直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", edgStorageCageDetails);
            if (!edgStorageCageDetails.getSlot().equals(task.getCurrentCell())) {
                EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                        .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
                        .eq(EdgStorageCageDetails::getDeviceId, deviceId)
                        .eq(EdgStorageCageDetails::getSlot, task.getCurrentCell()).eq(EdgStorageCageDetails::getWidth, edgStorageCageDetails.getWidth())
                        .eq(EdgStorageCageDetails::getHeight, edgStorageCageDetails.getHeight()).eq(EdgStorageCageDetails::getThickness, edgStorageCageDetails.getThickness())
                        .orderByAsc(EdgStorageCageDetails::getId).last("limit 1")
                );
                if (null != currentGlass) {
                    edgStorageCageDetails = currentGlass;
                }
            }
            //玻璃信息替换
            String glassIdChange = queryAndChangeGlass(edgStorageCageDetails.getGlassId());
            //处理在卧理内的玻璃信息:笼内的数据处理
            queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange);
            LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>();
            wrapper.eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT);
            edgStorageCageDetailsService.update(wrapper);
            log.info("5、更新出片玻璃的状态为{}", Const.GLASS_STATE_OUT);
        }
        //生成出片任务
        task.setGlassIdOut(edgStorageCageDetails.getGlassId());
        task.setStartCell(edgStorageCageDetails.getSlot());
        task.setTaskRunning(taskType);
        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
        saveHistoryTask(task);
        //更新详情表任务出片中
        edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
                .set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT)
                .eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()));
        //磨边对列表新增一条数据
        EdgGlassTaskQueueInfo edgInfo = new EdgGlassTaskQueueInfo();
        BeanUtils.copyProperties(task, edgInfo);
        edgInfo.setCreateTime(new Date());
        edgInfo.setWidth((int) edgStorageCageDetails.getWidth());
        edgInfo.setHeight((int) edgStorageCageDetails.getWidth());
        edgInfo.setThickness((int) edgStorageCageDetails.getWidth());
        edgInfo.setState(Const.GLASS_STATE_NEW);
        edgGlassTaskQueueInfoService.save(edgInfo);
//        EdgStorageCageDetails edgStorageCageDetails = null;
//        //笼内是版图相差是否超过阈值
//        boolean flag = queryMaxMinDiff(threshold);
//        if (flag) {
//            EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
//                    .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
//                    .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
//                    .eq(EdgStorageCageDetails::getDeviceId, deviceId)
//                    .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId)
//                    .orderBy(Boolean.TRUE, Boolean.TRUE, EdgStorageCageDetails::getTemperingFeedSequence)
//                    .last("limit 1"));
////            select * from edg_storage_cage_details where width = 551 and height = 1151 and id in (select min(id ) from edg_storage_cage_details where state = 100 group by slot )
//            edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
//                    .eq(EdgStorageCageDetails::getWidth, minEdgDetails.getWidth())
//                    .eq(EdgStorageCageDetails::getHeight, minEdgDetails.getHeight())
//                    .eq(EdgStorageCageDetails::getDeviceId, deviceId)
//                    .inSql(EdgStorageCageDetails::getId, "select min(id) from edg_storage_cage_details where state = 100 group by slot ")
//                    .last("order by abs(slot - " + task.getCurrentCell() + ")  asc limit 1")
//            );
//            //给直通任务
//            if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) {
//                GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
//                        .eq(GlassInfo::getGlassId, task.getGlassIdIn())
//                        .eq(GlassInfo::getWidth, minEdgDetails.getWidth())
//                        .eq(GlassInfo::getHeight, minEdgDetails.getHeight()));
//                if (null != glassInInfo) {
//                    edgStorageCageDetails = new EdgStorageCageDetails();
//                    BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
//                }
//            }
//            if (null == edgStorageCageDetails) {
//                edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
//                        .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
//                        .eq(EdgStorageCageDetails::getDeviceId, deviceId)
//                        .eq(EdgStorageCageDetails::getSlot, minEdgDetails.getSlot())
//                        .orderByAsc(EdgStorageCageDetails::getId)
//                        .last("limit 1")
//                );
//            }
//        }
//        if (null == edgStorageCageDetails) {
//            //        获取上次任务
////        获取历史表中上次任务最后一片尺寸
//            EdgStorageDeviceTaskHistory edgeData = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
//                    .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS)
//                    .in(EdgStorageDeviceTaskHistory::getTaskType, Const.GLASS_CACHE_TYPE_OUT, Const.GLASS_CACHE_TYPE_THROUGH)
//                    .orderByDesc(EdgStorageDeviceTaskHistory::getId).last("limit 1"));
//            if (null != edgeData) {
//                GlassInfo glassOutInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut()));
//                //笼内的玻璃的尺寸是否和上一次任务一致
//                edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), glassOutInfo.getWidth(), glassOutInfo.getHeight());
//                if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) {
//                    GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
//                            .eq(GlassInfo::getGlassId, task.getGlassIdIn())
//                            .eq(GlassInfo::getWidth, glassOutInfo.getWidth())
//                            .eq(GlassInfo::getHeight, glassOutInfo.getHeight()));
//                    if (null != glassInInfo) {
//                        edgStorageCageDetails = new EdgStorageCageDetails();
//                        BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
//                    }
//                }
//            }
//        }
//        if (null == edgStorageCageDetails) {
//            edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), 0, 0);
//        }
//        if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) {
//            //和上次任务不存在相同尺寸
//            GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
//            edgStorageCageDetails = new EdgStorageCageDetails();
//            BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
//        }
//        if (edgStorageCageDetails == null) {
//            //和上次任务不存在相同尺寸
//            log.info("笼内没有玻璃了");
//            return Boolean.FALSE;
//        }
//        int taskType = Const.GLASS_CACHE_TYPE_OUT;
//        String glassId = edgStorageCageDetails.getGlassId();
//        if (glassId.equals(task.getGlassIdIn())) {
//            if (3 != task.getTaskState()) {
//                return Boolean.FALSE;
//            }
//            log.info("5、直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", edgStorageCageDetails);
//            //玻璃信息替换
//            String glassIdChange = queryAndChangeGlass(glassId);
//            //处理在卧理内的玻璃信息:笼内的数据处理
//            queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange);
//            if (StringUtils.isNotBlank(glassIdChange)) {
//                edgStorageCageDetails = new EdgStorageCageDetails();
//                GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
//                BeanUtils.copyProperties(one, edgStorageCageDetails);
//            }
//            EdgStorageCage storageCage = edgStorageCageService.getOne(new LambdaQueryWrapper<EdgStorageCage>()
//                    .eq(EdgStorageCage::getDeviceId, deviceId)
//                    .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
//                    .ge(EdgStorageCage::getRemainWidth, cellLength)
//                    .last("order by abs(slot - " + task.getCurrentCell() + ") limit 1"));
//            Assert.isTrue(null != storageCage, "格子已满,无法执行直通任务");
//            log.info("3、查询卧式理片笼里面的空格:{}", storageCage);
//            edgStorageCageDetails.setSlot(storageCage.getSlot());
//            edgStorageCageDetails.setDeviceId(storageCage.getDeviceId());
//            edgStorageCageDetails.setState(Const.GLASS_STATE_OUT);
//            edgStorageCageDetailsService.save(edgStorageCageDetails);
//            taskType = Const.GLASS_CACHE_TYPE_THROUGH;
//        } else {
//            log.info("5、非直通任务,将玻璃信息插入卧式理片笼,当前玻璃信息:{}", edgStorageCageDetails);
//            if (!edgStorageCageDetails.getSlot().equals(task.getCurrentCell())) {
//                EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
//                        .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
//                        .eq(EdgStorageCageDetails::getDeviceId, deviceId)
//                        .eq(EdgStorageCageDetails::getSlot, task.getCurrentCell()).eq(EdgStorageCageDetails::getWidth, edgStorageCageDetails.getWidth())
//                        .eq(EdgStorageCageDetails::getHeight, edgStorageCageDetails.getHeight()).eq(EdgStorageCageDetails::getThickness, edgStorageCageDetails.getThickness())
//                        .orderByAsc(EdgStorageCageDetails::getId).last("limit 1")
//                );
//                if (null != currentGlass) {
//                    edgStorageCageDetails = currentGlass;
//                }
//            }
//            //玻璃信息替换
//            String glassIdChange = queryAndChangeGlass(edgStorageCageDetails.getGlassId());
//            //处理在卧理内的玻璃信息:笼内的数据处理
//            queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange);
//            LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>();
//            wrapper.eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT);
//            edgStorageCageDetailsService.update(wrapper);
//            log.info("5、更新出片玻璃的状态为{}", Const.GLASS_STATE_OUT);
//        }
//        //生成出片任务
//        task.setGlassIdOut(edgStorageCageDetails.getGlassId());
//        task.setStartCell(edgStorageCageDetails.getSlot());
//        task.setTaskRunning(taskType);
//
//        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
//        saveHistoryTask(task);
//        //更新详情表任务出片中
//        edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
//                .set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT)
//                .eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()));
//        //磨边对列表新增一条数据
//        EdgGlassTaskQueueInfo edgInfo = new EdgGlassTaskQueueInfo();
//        BeanUtils.copyProperties(task, edgInfo);
//        edgInfo.setCreateTime(new Date());
//        edgInfo.setWidth((int) edgStorageCageDetails.getWidth());
//        edgInfo.setHeight((int) edgStorageCageDetails.getWidth());
//        edgInfo.setThickness((int) edgStorageCageDetails.getWidth());
//        edgInfo.setState(Const.GLASS_STATE_NEW);
//        edgGlassTaskQueueInfoService.save(edgInfo);
        return Boolean.TRUE;
    }
    private boolean finishTask(EdgStorageDeviceTask task, String tableName) {
        log.info("当前任务信息为:{}", task);
        if (task.getTaskState() <= 4) {
            log.info("有正在执行的任务,结束");
            return Boolean.FALSE;
        }
        Integer cell = task.getStartCell();
        Integer state = task.getTaskState();
        task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY);
        task.setGlassIdOut("");
        task.setStartCell(0);
        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
        edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>()
                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
                .set(EdgStorageDeviceTaskHistory::getTaskState,
                        Const.GLASS_CACHE_TYPE_FINISH.equals(state) ? Const.RAW_GLASS_TASK_SUCCESS : Const.RAW_GLASS_TASK_FAILURE)
        );
        int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2;
        updateCellRemainWidth(cell, device);
//        log.info("当前任务信息为:{}", task);
//        if (task.getTaskState() <= 4) {
//            log.info("有正在执行的任务,结束");
//            return Boolean.FALSE;
//        }
//        Integer cell = task.getStartCell();
//        Integer state = task.getTaskState();
//        task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY);
//        task.setGlassIdOut("");
//        task.setStartCell(0);
//        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
//        edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>()
//                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
//                .set(EdgStorageDeviceTaskHistory::getTaskState,
//                        Const.GLASS_CACHE_TYPE_FINISH.equals(state) ? Const.RAW_GLASS_TASK_SUCCESS : Const.RAW_GLASS_TASK_FAILURE)
//        );
//        int device = tableName.equals("edg_storage_device_one_task") ? 1 : 2;
//        updateCellRemainWidth(cell, device);
        return Boolean.TRUE;
    }
@@ -335,34 +333,34 @@
     * @return
     */
    public String queryAndChangeGlass(String glassId) {
        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, "玻璃信息不存在");        //按照玻璃尺寸
        LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>()
                .eq(GlassInfo::getWidth, glassInfo.getWidth())
                .eq(GlassInfo::getHeight, glassInfo.getHeight())
                .eq(GlassInfo::getThickness, glassInfo.getThickness())
                .eq(GlassInfo::getFilmsid, glassInfo.getFilmsid())
                .eq(GlassInfo::getFlowCardId, glassInfo.getFlowCardId())
                .eq(GlassInfo::getTotalLayer, glassInfo.getTotalLayer())
                .eq(GlassInfo::getLayer, glassInfo.getLayer())
                .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId())
                .notInSql(GlassInfo::getGlassId, "select distinct glass_id from edg_storage_cage_details " +
                        "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight()
                        + " and state != 100")
                .orderByAsc(GlassInfo::getTemperingLayoutId)
                .orderBy(Boolean.TRUE, Boolean.TRUE, GlassInfo::getTemperingFeedSequence)
                .last("Limit 1");
        GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper);
        if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) {
            String swapGlassId = swapGlassInfo.getGlassId();
            log.info("将玻璃{}和玻璃{},信息互换,进玻璃 {}", glassInfo, swapGlassInfo, swapGlassInfo);
            swapGlassInfo.setGlassId(glassId);
            glassInfo.setGlassId(swapGlassId);
            glassInfoService.updateById(swapGlassInfo);
            glassInfoService.updateById(glassInfo);
            return swapGlassId;
        }
//        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, "玻璃信息不存在");        //按照玻璃尺寸
//        LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>()
//                .eq(GlassInfo::getWidth, glassInfo.getWidth())
//                .eq(GlassInfo::getHeight, glassInfo.getHeight())
//                .eq(GlassInfo::getThickness, glassInfo.getThickness())
//                .eq(GlassInfo::getFilmsid, glassInfo.getFilmsid())
//                .eq(GlassInfo::getFlowCardId, glassInfo.getFlowCardId())
//                .eq(GlassInfo::getTotalLayer, glassInfo.getTotalLayer())
//                .eq(GlassInfo::getLayer, glassInfo.getLayer())
//                .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId())
//                .notInSql(GlassInfo::getGlassId, "select distinct glass_id from edg_storage_cage_details " +
//                        "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight()
//                        + " and state != 100")
//                .orderByAsc(GlassInfo::getTemperingLayoutId)
//                .orderBy(Boolean.TRUE, Boolean.TRUE, GlassInfo::getTemperingFeedSequence)
//                .last("Limit 1");
//        GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper);
//        if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) {
//            String swapGlassId = swapGlassInfo.getGlassId();
//            log.info("将玻璃{}和玻璃{},信息互换,进玻璃 {}", glassInfo, swapGlassInfo, swapGlassInfo);
//            swapGlassInfo.setGlassId(glassId);
//            glassInfo.setGlassId(swapGlassId);
//            glassInfoService.updateById(swapGlassInfo);
//            glassInfoService.updateById(glassInfo);
//            return swapGlassId;
//        }
        return "";
    }
hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassTestCallback.java
File was deleted
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
@@ -300,7 +300,7 @@
                int sequence = -1;
                int startSlot = -1;
                for (BigStorageSequenceDTO item : sequenceDTOList) {
                    if (item.getMinSequence() == sequence + 1) {
                    if (item.getMaxSequence() == sequence - 1) {
                        //生成调度任务
                        int targetSlot = item.getSlot();
                        list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
@@ -311,7 +311,7 @@
                        updateSlotRemainBySlots(slotList);
                        break loop;
                    }
                    sequence = item.getMaxSequence();
                    sequence = item.getMinSequence();
                    startSlot = item.getSlot();
                }
            }
hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -170,6 +170,6 @@
              (select engineer_id, tempering_layout_id, tempering_feed_sequence from glass_id_temp)
          and t.state = 100
        group by t.slot
        order by max_sequence
        order by max_sequence desc
    </select>
</mapper>
hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java
@@ -55,5 +55,5 @@
    boolean pauseTask(String engineerId, Integer state);
    boolean changeTask(String engineerId, Integer state, Integer filmRemove, Integer stationCell);
//    boolean changeTask(String engineerId, Integer state, Integer filmRemove, Integer stationCell);
}
hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
@@ -5,17 +5,17 @@
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      datasource:
        hangzhoumes:
          url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        pp:
          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
          url: jdbc:mysql://127.0.0.1:3306/pp?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        sd:
          url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8
          url: jdbc:mysql://127.0.0.1:3306/sd?serverTimezone=GMT%2b8
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/OpcNGTemperingTask.java
@@ -1,16 +1,18 @@
package com.mes.job;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.kangaroohy.milo.model.ReadWriteEntity;
import com.kangaroohy.milo.service.MiloService;
import com.mes.common.config.Const;
import com.mes.pp.entity.OptimizeHeatDetail;
import com.mes.pp.entity.OptimizeHeatLayout;
import com.mes.pp.service.OptimizeHeatDetailService;
import com.mes.pp.service.OptimizeHeatLayoutService;
import com.mes.temperingglass.entity.TemperingGlass;
import com.mes.temperingglass.entity.TemperingGlassInfo;
import com.mes.temperingglass.service.TemperingGlassInfoService;
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;
@@ -41,7 +43,7 @@
     * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成)
     * fixedDelay : 上一个调用结束后再次调用的延时
     */
    //@Scheduled(fixedDelay = 1000)
    @Scheduled(fixedDelay = 1000)
    public void requestTemperingTask() throws Exception {
        ReadWriteEntity requestInTempering = miloService.readFromOpcUa("GH1S7.GH1S7.requestInTempering");//请求进片
        ReadWriteEntity requestTemperingId = miloService.readFromOpcUa("GH1S7.GH1S7.requestTemperingId");//请求进片 炉号ID
@@ -50,9 +52,13 @@
        if (request == 0) {
            miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 0));//允许送片清零
        } else {
            if (id == 0){
                log.info("炉号不能为0");
                return;
            }
            ReadWriteEntity placedNumber = miloService.readFromOpcUa("GH1S7.GH1S7.placedNumber");//已摆片数量
            List<TemperingGlassInfo> glassList = temperingAgoService.selectGlassInfoById(id);
            if (glassList.size() == Integer.parseInt(placedNumber.getValue().toString())) {
            if (Integer.parseInt(placedNumber.getValue().toString()) == glassList.size()) {
                miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 1));//写入允许送片
            } else {
                miloService.writeToOpcUa(generateReadWriteEntity("GH1S7.GH1S7.responseInTempering", 2));//不满足进炉条件
@@ -65,16 +71,32 @@
     * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成)
     * fixedDelay : 上一个调用结束后再次调用的延时
     */
    //@Scheduled(fixedDelay = 1000)
    @Scheduled(fixedDelay = 1000)
    public void loadTemperingTask() throws Exception {
        ReadWriteEntity loadTemperingId = miloService.readFromOpcUa("GH1S7.GH1S7.loadTemperingId");//进片完成 炉号ID
        getNewTemperingID(Integer.parseInt(loadTemperingId.getValue().toString()));//进片完成 下发参数
    }
    /**
     * 更新钢化小片表内的玻璃状态
     * fixedRate : 上一个调用开始后再次调用的延时(不用等待上一次调用完成)
     * fixedDelay : 上一个调用结束后再次调用的延时
     */
    @Scheduled(fixedDelay = 5000)
    public void updateTemperingTask() throws Exception {
        ReadWriteEntity furanchiIdEntity = miloService.readFromOpcUa("GH1S7.GH1S7.Furanch1Id");//进片完成 炉号ID
        if (StringUtils.isNotBlank(furanchiIdEntity.getValue()+"")){
            int temperingid = Integer.parseInt(furanchiIdEntity.getValue().toString());
            temperingAgoService.update(new LambdaUpdateWrapper<TemperingGlassInfo>().set(TemperingGlassInfo::getState, Const.TEMPERING_START)
                    .in(TemperingGlassInfo::getState, Const.TEMPERING_OUT, Const.TEMPERING_DROP).eq(TemperingGlassInfo::getTemperingLayoutId,temperingid));
        }
    }
    //获取到炉号id执行参数下发任务
    private void getNewTemperingID(Integer temperingid) throws Exception {
        ReadWriteEntity AutoStatus = miloService.readFromOpcUa("GH1.GH1.AutoStatus");
        if (1 != Integer.parseInt(AutoStatus.getValue().toString())) {
        ReadWriteEntity autoStatus = miloService.readFromOpcUa("GH1.GH1.AutoStatus");
        if (1 != Integer.parseInt(autoStatus.getValue().toString())) {
            log.info("当前为非联机状态,结束钢化下发参数任务");
            return;
        }
@@ -118,7 +140,7 @@
            miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.WorkMode", workmode));//写入工位数
            miloService.writeToOpcUa(generateReadWriteEntity("GH1.GH1.FurnaceMode", furmode));//写入炉体工作方式
            log.info("炉号" + temperingid + "版面信息尝试下发");
        }
       }
    }
hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-yw.yml
@@ -9,6 +9,11 @@
          username: root
          password: beibo.123/
          driver-class-name: com.mysql.cj.jdbc.Driver
        salve_hangzhoumes:
          url: jdbc:sqlserver://192.168.2.100:1433;databasename=mes
          username: sa
          password: beibo.123/
          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
        pp:
          url: jdbc:mysql://192.168.2.100:3306/pp?serverTimezone=GMT%2b8
          username: root
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassOutRelationInfoController.java
@@ -35,5 +35,11 @@
        return Result.success(hollowGlassOutRelationInfoService.forceOutGlass(flowCardId, cell, totalPairQuantity));
    }
    @ApiOperation("是否调度开关")
    @PostMapping("/dispatchHollowSwitch")
    public Result<Boolean> dispatchHollowSwitch(Boolean flag) {
        return Result.build(200, "修改成功",hollowGlassOutRelationInfoService.dispatchHollowSwitch(flag));
    }
}
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java
@@ -36,8 +36,8 @@
    @ApiOperation("查询指定流程卡及层数的缺片详情")
    @PostMapping("/queryLackByFlowCard")
    public Result<List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId, int layer) {
        List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId, layer);
    public Result<Map<Integer, List<LackDetailsDTO>> > queryLackByFlowCard(String flowCardId) {
        Map<Integer, List<LackDetailsDTO>>  lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId);
        return Result.success(lackDetailsList);
    }
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java
@@ -22,6 +22,6 @@
    List<HollowGlassDetailsDTO> queryFlowCardIdLayerGlassInfo(@Param("flowCardId") String flowCardId, @Param("totalLayer") int totalLayer, @Param("layer") int layer);
    List<LackDetailsDTO> queryLackByFlowCard(String flowCardId, int layer);
    List<LackDetailsDTO> queryLackByFlowCard(String flowCardId);
}
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java
@@ -30,7 +30,7 @@
    Map<String, List<FlowCardGlassInfoDTO>> queryHollowAllFlowCard();
    List<LackDetailsDTO> queryLackByFlowCard(String flowCardId, int layer);
    Map<Integer, List<LackDetailsDTO>>  queryLackByFlowCard(String flowCardId);
}
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -243,15 +243,10 @@
    }
    @Override
    public List<LackDetailsDTO> queryLackByFlowCard(String flowCardId, int layer) {
        return this.baseMapper.queryLackByFlowCard(flowCardId, layer);
//        return this.list(new LambdaQueryWrapper<HollowGlassRelationInfo>()
//                .eq(HollowGlassRelationInfo::getFlowCardId,flowCardId)
//                .eq(HollowGlassRelationInfo::getLayer,layer)
//                .isNull(HollowGlassRelationInfo::getTemperingLayoutId)
//                .isNull(HollowGlassRelationInfo::getTemperingFeedSequence)
//        );
    public Map<Integer, List<LackDetailsDTO>>  queryLackByFlowCard(String flowCardId) {
        List<LackDetailsDTO> lackDetailsList = this.baseMapper.queryLackByFlowCard(flowCardId);
        Map<Integer, List<LackDetailsDTO>> listMap = lackDetailsList.stream().collect(Collectors.groupingBy(LackDetailsDTO::getLayer));
        return listMap;
    }
}
hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
New file
@@ -0,0 +1,55 @@
package com.mes.job;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mes.common.config.Const;
import com.mes.hollow.entity.HollowGlassOutRelationInfo;
import com.mes.hollow.service.HollowGlassOutRelationInfoService;
import com.mes.hollowqueue.entity.HollowGlassQueueInfo;
import com.mes.hollowqueue.service.HollowGlassQueueInfoService;
import com.mes.tools.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @Author : zhoush
 * @Date: 2024/12/4 9:41
 * @Description:
 */
@Component
@Slf4j
public class PushMessageToIndex {
    @Resource
    HollowGlassQueueInfoService  hollowGlassQueueInfoService;
    @Resource
    HollowGlassOutRelationInfoService hollowGlassOutRelationInfoService;
    @Scheduled(fixedDelay = 1000)
    public void CacheGlassTasks() {
        List<HollowGlassOutRelationInfo> taskList = hollowGlassOutRelationInfoService.list(new LambdaQueryWrapper<HollowGlassOutRelationInfo>()
                .in(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_START, Const.HOLLOW_FLOW_CARD_PAUSE));
        if (CollectionUtil.isEmpty(taskList)){
            return;
        }
        JSONObject jsonObject = new JSONObject();
        List<String> flowCardIdList = taskList.stream().map(HollowGlassOutRelationInfo::getFlowCardId).collect(Collectors.toList());
        List<HollowGlassQueueInfo> list = hollowGlassQueueInfoService.list(new LambdaQueryWrapper<HollowGlassQueueInfo>().in(HollowGlassQueueInfo::getFlowCardId, flowCardIdList));
        Map<Integer, List<HollowGlassQueueInfo>> listMap = list.stream().collect(Collectors.groupingBy(HollowGlassQueueInfo::getCell));
        jsonObject.append("HollowGlass",listMap);
        List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("HollowGlass");
        if (CollectionUtil.isNotEmpty(sendwServer)) {
                WebSocketServer socketServer = sendwServer.get(0);
                if (socketServer != null && socketServer.session.isOpen()) {
                    socketServer.sendMessage(jsonObject.toString());
                }
        }
    }
}
hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
spring:
  profiles:
    active: yw
    active: dev
  application:
    name: hollowGlass
  liquibase:
@@ -35,7 +35,7 @@
    port: 5000
kangaroohy:
  milo:
    enabled: true
    enabled: false
    primary: default
    config:
      default:
hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
@@ -39,52 +39,25 @@
    </update>
    <select id="hollowIsAll" resultMap="baseMap">
        WITH sum_flow_layer_count AS (
        SELECT
        flow_card_id,
        layer,
        min( films_id ) AS films_id,
        count(*) AS sum_count
        FROM
        hollow_glass_relation_info
        GROUP BY
        flow_card_id,
        layer
        ),
        real_flow_layer_count AS (
        SELECT
        flow_card_id,
        layer,
        count(*) AS real_count
        FROM
        hollow_glass_relation_info
        WHERE
        tempering_layout_id IS NOT NULL
        AND tempering_feed_sequence IS NOT NULL
        GROUP BY
        flow_card_id,
        layer
        ),
        damage_flow_layer_count AS ( SELECT process_id AS flow_card_id, technology_number AS layer, count(*)
        damage_count FROM damage GROUP BY process_id, technology_number ),
        WITH sum_flow_layer_count AS ( SELECT flow_card_id, layer, min( films_id ) AS films_id, count(*) AS sum_count FROM hollow_glass_relation_info GROUP BY flow_card_id, layer ),
        real_flow_layer_count AS ( SELECT flow_card_id, layer, count(*) AS real_count FROM hollow_glass_relation_info WHERE tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL GROUP BY flow_card_id, layer ),
        damage_flow_layer_count AS ( SELECT process_id AS flow_card_id, technology_number AS layer, count(*) as damage_count FROM damage GROUP BY process_id, technology_number )
        ,
        lack_flow_layer_count AS (
        SELECT
        t.flow_card_id,
        t.layer,
        ( sum_count - real_count - damage_count ) AS lack_count
        ifnull((sum_count - real_count - ifnull(damage_count,0)),0) AS lack_count
        FROM
        sum_flow_layer_count t
        INNER JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id
        left JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id
        AND t.layer = t1.layer
        INNER JOIN damage_flow_layer_count t2 ON t1.flow_card_id = t2.flow_card_id
        left JOIN damage_flow_layer_count t2 ON t1.flow_card_id = t2.flow_card_id
        AND t1.layer = t2.layer
        ),
        layer_one AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 1 AND tempering_layout_id IS NOT NULL AND
        tempering_feed_sequence IS NOT NULL ),
        layer_two AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 2 AND tempering_layout_id IS NOT NULL AND
        tempering_feed_sequence IS NOT NULL ),
        layer_three AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 3 AND tempering_layout_id IS NOT NULL
        AND tempering_feed_sequence IS NOT NULL )
        layer_one AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 1 AND tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL ),
        layer_two AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 2 AND tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL ),
        layer_three AS ( SELECT * FROM hollow_glass_relation_info WHERE layer = 3 AND tempering_layout_id IS NOT NULL AND tempering_feed_sequence IS NOT NULL )
        ,
        pair_flow_layer_count AS (
        SELECT
@@ -102,25 +75,25 @@
        </if>
        GROUP BY
        t.flow_card_id
        )
        ,result_flow_layer_count AS (
        ),
        result_flow_layer_count AS (
        SELECT
        t.flow_card_id,
        t.layer,
        t.films_id,
        sum_count,
        t3.pair_count,
        IFNULL(real_count,0) as real_count,
        IFNULL(damage_count,0) as damage_count,
        IFNULL(lack_count,0) as lack_count
        IFNULL( t3.pair_count, 0 ) AS pair_count,
        IFNULL( real_count, 0 ) AS real_count,
        IFNULL( damage_count, 0 ) AS damage_count,
        IFNULL( lack_count, 0 ) AS lack_count
        FROM
        sum_flow_layer_count t
        left JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id
        LEFT JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id
        AND t.layer = t1.layer
        left JOIN lack_flow_layer_count t2 ON t.flow_card_id = t2.flow_card_id
        LEFT JOIN lack_flow_layer_count t2 ON t.flow_card_id = t2.flow_card_id
        AND t.layer = t2.layer
        left JOIN pair_flow_layer_count t3 ON t.flow_card_id = t3.flow_card_id
        left JOIN damage_flow_layer_count t4 ON t.flow_card_id = t4.flow_card_id
        LEFT JOIN pair_flow_layer_count t3 ON t.flow_card_id = t3.flow_card_id
        LEFT JOIN damage_flow_layer_count t4 ON t.flow_card_id = t4.flow_card_id
        AND t.layer = t4.layer
        ) SELECT
        *