//package com.mes.job; // //import cn.hutool.core.lang.Assert; //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; //import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; //import com.github.yulichang.toolkit.JoinWrappers; //import com.github.yulichang.wrapper.MPJLambdaWrapper; //import com.kangaroohy.milo.model.ReadWriteEntity; //import com.kangaroohy.milo.service.MiloService; //import com.mes.base.entity.BigStorageCageBaseInfo; //import com.mes.bigstorage.entity.BigStorageCage; //import com.mes.bigstorage.entity.BigStorageCageDetails; //import com.mes.bigstorage.entity.BigStorageDTO; //import com.mes.bigstorage.entity.dto.SlotSequenceDTO; //import com.mes.bigstorage.entity.dto.TemperingLayoutDTO; //import com.mes.bigstorage.service.BigStorageCageDetailsService; //import com.mes.bigstorage.service.BigStorageCageService; //import com.mes.bigstoragecagetask.entity.BigStorageCageHistoryTask; //import com.mes.bigstoragecagetask.entity.BigStorageCageTask; //import com.mes.bigstoragecagetask.service.BigStorageCageHistoryTaskService; //import com.mes.bigstoragecagetask.service.BigStorageCageTaskService; //import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO; //import com.mes.common.config.Const; //import com.mes.damage.entity.Damage; //import com.mes.damage.service.DamageService; //import com.mes.glassinfo.entity.GlassInfo; //import com.mes.glassinfo.service.GlassInfoService; //import com.mes.temperingglass.entity.TemperingGlass; //import com.mes.temperingglass.entity.TemperingGlassInfo; //import com.mes.temperingglass.service.TemperingGlassService; //import com.mes.utils.RedisUtil; //import lombok.extern.slf4j.Slf4j; //import org.apache.commons.lang.StringUtils; //import org.springframework.beans.BeanUtils; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Value; //import org.springframework.scheduling.annotation.Scheduled; //import org.springframework.stereotype.Component; // //import javax.annotation.Resource; //import java.util.*; //import java.util.stream.Collectors; // ///** // * @author SNG-015 // */ //@Component //@Slf4j //public class OpcPlcStorageCageTask { // @Resource // private BigStorageCageDetailsService bigStorageCageDetailsService; // @Resource // private TemperingGlassService temperingGlassService; // @Resource // private DamageService damageService; // @Resource // private GlassInfoService glassInfoService; // @Resource // private BigStorageCageService bigStorageCageService; // @Resource // private BigStorageCageHistoryTaskService bigStorageCageHistoryTaskService; // @Resource // private BigStorageCageTaskService bigStorageCageTaskService; // // @Autowired(required = false) // MiloService miloService; // // @Resource // private RedisUtil redisUtil; // // @Value("${mes.slotWidth}") // private Integer slotWidth; // // @Value("${mes.glassGap}") // private Integer glassGap; // // @Value("${mes.carWidth}") // private Integer carWidth; // // @Value("${mes.outCarMaxSize}") // private Integer outCarMaxSize; // // @Value("${mes.sequence.order}") // private boolean sequenceOrder; // // //// @Scheduled(fixedDelay = 1000) // public void inBigStorageTask() throws Exception { // ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP1A.DLP1A.mesControl"); // if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) { // log.info("当前为非联机状态,结束进片任务"); // return; // } // ReadWriteEntity requestEntity = miloService.readFromOpcUa("DLP1A.DLP1A.RequestMes"); // if (!"1".equals(requestEntity.getValue() + "")) { // log.info("当前未收到进片请求,结束进片任务"); // return; // } // ReadWriteEntity mesReplyEntity = miloService.readFromOpcUa("DLP1A.DLP1A.MesReply"); // if ("1".equals(mesReplyEntity.getValue() + "")) { // log.info("有正在执行的任务,结束进片任务"); // return; // } // //获取进片任务表 // List inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); // if (CollectionUtils.isEmpty(inTaskList)) { // log.info("当前大车无进片玻璃,结束进片任务"); // } // List glassIdList = inTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); // log.info("获取任务的玻璃id:{}", glassIdList); // List glassInfoList = glassInfoService.list(new LambdaQueryWrapper().in(GlassInfo::getGlassId, glassIdList)); // Map> glassListMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getGlassId)); // // //计算目标格子 // List historyTasks = new ArrayList<>(); // for (BigStorageCageTask task : inTaskList) { // GlassInfo info = glassListMap.get(task.getGlassId()).get(0); // //获取目标格子信息 // BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info); //// 临时更新格子的剩余尺寸:防止相邻玻璃进同一格子造成剩余尺寸不足,玻璃越界的情况,任务完成后再次更新大理片笼表剩余宽度(按照笼内玻璃数量更新大理片笼剩余尺寸) // bigStorageCageService.update(new LambdaUpdateWrapper() // .set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap) // .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot())); // task.setTargetSlot(bigStorageDTO.getSlot()); // task.setGlassId(info.getGlassId()); // bigStorageCageTaskService.updateTaskMessage("big_storage_cage_in_one_task", task); // //存放历史任务 // BigStorageCageHistoryTask historyTask = new BigStorageCageHistoryTask(); // BeanUtils.copyProperties(task, historyTask); // historyTask.setTaskType(Const.BIG_STORAGE_BEFORE_IN); // historyTask.setGlassCount(glassInfoList.size()); // historyTask.setTaskState(Const.ENGINEERING_NEW); // historyTasks.add(historyTask); // BigStorageCageDetails cageDetails = new BigStorageCageDetails(); // BeanUtils.copyProperties(info, cageDetails); // cageDetails.setSlot(bigStorageDTO.getSlot()); // cageDetails.setState(Const.GLASS_STATE_NEW); // cageDetails.setDeviceId(bigStorageDTO.getDeviceId()); // cageDetails.setGap(glassGap); // cageDetails.setId(null); // bigStorageCageDetailsService.save(cageDetails); // } // //历史数据入库 // bigStorageCageHistoryTaskService.saveBatch(historyTasks); // //向opc发送启动信号 // miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.MesReply", 1)); // } // //// @Scheduled(fixedDelay = 1000) // public void outBigStorageTask() throws Exception { // Date startDate = new Date(); // ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP1B.DLP1B.mesControl"); // if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) { // log.info("当前为非联机状态,结束进片任务"); // return; // } // ReadWriteEntity requestEntity = miloService.readFromOpcUa("DLP1B.DLP1B.RequestMes"); // if (!"1".equals(requestEntity.getValue() + "")) { // log.info("当前未收到出片请求,结束出片任务"); // return; // } // //获取出片任务表 // List outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_one_task"); // if (CollectionUtils.isNotEmpty(outTaskList)) { // log.info("有正在执行的出片任务,结束本次出片任务"); // return; // } // //todo:是否允许钢化 // if (redisUtil.getCacheObject("temperingSwitch")) { // //是否有正在钢化的玻璃:钢化小片表关联历史任务表,筛选未出笼的玻璃信息 // List temperingGlassList = temperingGlassService.selectJoinList(TemperingGlass.class, new MPJLambdaWrapper() // .selectAll(TemperingGlass.class) // .leftJoin(BigStorageCageHistoryTask.class, BigStorageCageHistoryTask::getGlassId, TemperingGlass::getGlassId) // .eq(TemperingGlass::getState, Const.TEMPERING_NEW) // .eq(BigStorageCageHistoryTask::getTaskType, Const.BIG_STORAGE_BEFORE_OUT) // .isNull(BigStorageCageHistoryTask::getGlassId) // .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlass::getTemperingFeedSequence)); // //todo:历史任务表 // if (CollectionUtils.isNotEmpty(temperingGlassList)) { // log.info("有正在出片的钢化任务"); // computeOutGlassInfo(temperingGlassList, "big_storage_cage_out_one_task", Const.TEMPERING_OUT_TARGET_POSITION, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); // Date endDate = new Date(); // log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); // return; // } // //钢化优先:获取理片笼 玻璃小片 破损表 数量 判断笼内版图是否到齐 // List temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll(); // if (CollectionUtils.isNotEmpty(temperingLayoutDTOList)) { // //玻璃到齐包括已出片的 // //到齐,将玻璃小片数据存入钢化小片表,逻辑生成出片任务 结束 // for (TemperingLayoutDTO item : temperingLayoutDTOList) { //// if (item.getEngineerId().equals(redisUtil.getCacheObject("temperingengineerId"))) { // List temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlass.class, JoinWrappers.lambda(GlassInfo.class) // .selectAll(GlassInfo.class) // .select("-1 as state") // .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot) // .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId) // .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) // .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId()) // .eq(GlassInfo::getEngineerId, item.getEngineerId()) // .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)); // if (CollectionUtils.isNotEmpty(temperingGlassInfos)) { // temperingGlassService.saveBatch(temperingGlassInfos); // computeOutGlassInfo(temperingGlassInfos, "big_storage_cage_out_one_task", Const.TEMPERING_OUT_TARGET_POSITION, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); // Date endDate = new Date(); // log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); // return; // } //// } // } // } // } // //是否有人工下片任务 有直接出 // List artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper() // .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL) // .orderByAsc(BigStorageCageDetails::getSlot) // .orderByDesc(BigStorageCageDetails::getId)); // if (CollectionUtils.isNotEmpty(artificialList)) { // computeOutGlassInfo(artificialList, "big_storage_cage_out_one_task", Const.ARTIFICIAL_OUT_TARGET_POSITION, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); // Date endDate = new Date(); // log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); // return; // } // //是否存在需要内部调度的格子:执行内部调度任务 // List temperingOccupySlotList = bigStorageCageDetailsService.queryTemperingOccupySlot(); // if (CollectionUtils.isNotEmpty(temperingOccupySlotList)) { // loop: // for (TemperingLayoutDTO temperingOccupySlot : temperingOccupySlotList) { // List slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId()); // for (int i = 0; i < slotSequenceList.size() - 1; i++) { // SlotSequenceDTO first = slotSequenceList.get(i); // SlotSequenceDTO second = slotSequenceList.get(i + 1); // int slotWidth = carWidth - first.getRemainWidth() - glassGap; // int totalCount = first.getGlassCount() + second.getGlassCount(); // if (totalCount <= 6 && first.getMinSequence() == second.getMaxSequence() + 1 // && second.getRemainWidth() > slotWidth && slotWidth >= 0) { // // List list = bigStorageCageDetailsService.list(new LambdaQueryWrapper() // .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) // .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence)); // if (CollectionUtils.isNotEmpty(list)) { // computeOutGlassInfo(list, "big_storage_cage_out_one_task", second.getSlot(), Const.GLASS_STATE_SCHEDULE_ING, Const.BIG_STORAGE_BEFORE_DISPATCH); // } // updateSlotRemainBySlots(Arrays.asList(second.getSlot())); // break loop; // } // } // } // } // Date endDate = new Date(); // log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); // return; // } // //// @Scheduled(fixedDelay = 1000) // public void finishInBigStorageTask() throws Exception { // ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP1A.DLP1A.mesControl"); // if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) { // log.info("当前为非联机状态,结束完成进片任务"); // return; // } // //获取进片任务表 // List inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); // if (CollectionUtils.isEmpty(inTaskList)) { // log.info("当前大车无进片玻璃,结束完成进片任务"); // return; // } // List unFinishTaskList = inTaskList.stream().filter(e -> e.getTaskState() <= 1 || e.getStartSlot() == 0).collect(Collectors.toList()); // if (CollectionUtils.isNotEmpty(unFinishTaskList)) { // log.info("存在未完成的玻璃信息,玻璃:{}", unFinishTaskList); // return; // } // Map> taskMap = inTaskList.stream().collect(Collectors.groupingBy(BigStorageCageTask::getTaskState)); // //按照任务状态修改大理片笼内的玻璃数据 //// 重新计算大理片笼内的剩余尺寸 // taskMap.forEach((e1, v) -> { // if (e1 == 2) { // //进片完成 // log.info("3、获取进片已完成的玻璃信息id:{}", v); // List inSuccessGlassSlot = v.stream().map(BigStorageCageTask::getTargetSlot).collect(Collectors.toList()); // List storageCageDTOList = v.stream().map(e -> { // UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); // BeanUtils.copyProperties(e, storageCageDTO); // return storageCageDTO; // }).collect(Collectors.toList()); // bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN); // log.info("4、大理片笼进片状态已完成已完成的玻璃信息id:{}", v); // updateSlotRemainBySlots(inSuccessGlassSlot); // } else if (e1 == 3) { // //破损处理 // dealDamageInTask(v); // } else { // //清空理片笼空数据 // noDealInTask(v); // } // }); // for (BigStorageCageTask item : inTaskList) { // //更新历史任务表中的任务状态 // bigStorageCageHistoryTaskService.update(new LambdaUpdateWrapper() // .set(BigStorageCageHistoryTask::getTaskState, item.getTaskState()) // .eq(BigStorageCageHistoryTask::getTaskType, Const.BIG_STORAGE_BEFORE_IN) // .eq(BigStorageCageHistoryTask::getTargetSlot, item.getTargetSlot()) // .eq(BigStorageCageHistoryTask::getGlassId, item.getGlassId())); // item.setTargetSlot(0); // //清空任务表数据 // bigStorageCageTaskService.updateTaskMessage("big_storage_cage_in_one_task", item); // } // //清空启动状态 // //向opc发送启动信号 // miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.MesReply", 0)); // } // //// @Scheduled(fixedDelay = 1000) // public void finishOutBigStorageTask() throws Exception { //// ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP1B.DLP1B.mesControl"); //// if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) { //// log.info("当前为非联机状态,结束完成出片任务"); //// return; //// } // //获取进片任务表 // List outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_one_task"); // if (CollectionUtils.isEmpty(outTaskList)) { // log.info("当前大车无进片玻璃,结束完成进片任务"); // return; // } // List unFinishTaskList = outTaskList.stream().filter(e -> e.getTaskState() <= 1 || e.getStartSlot() == 0).collect(Collectors.toList()); // if (CollectionUtils.isNotEmpty(unFinishTaskList)) { // log.info("存在未完成的玻璃信息,玻璃:{}", unFinishTaskList); // return; // } // Map> taskMap = outTaskList.stream().collect(Collectors.groupingBy(BigStorageCageTask::getTaskState)); // int taskType = 0; // if (Const.OUT_TARGET_POSITION_ALL.contains(outTaskList.get(0).getTargetSlot())) { // taskType = Const.BIG_STORAGE_BEFORE_OUT; // } else { // taskType = Const.BIG_STORAGE_BEFORE_DISPATCH; // } // //按照任务状态修改大理片笼内的玻璃数据 //// 重新计算大理片笼内的剩余尺寸 // Integer finalTaskType = taskType; // taskMap.forEach((e1, v) -> { // if (e1 == 2) { // //进片完成 // log.info("3、获取进片已完成的玻璃信息id:{}", v); // List outSuccessGlassSlot = new ArrayList<>(); // if (finalTaskType.equals(Const.BIG_STORAGE_BEFORE_OUT)) { // outSuccessGlassSlot = v.stream().map(BigStorageCageTask::getStartSlot).collect(Collectors.toList()); // } else { // outSuccessGlassSlot = v.stream().map(BigStorageCageTask::getTargetSlot).collect(Collectors.toList()); // } // List storageCageDTOList = v.stream().map(e -> { // UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO(); // storageCageDTO.setGlassId(e.getGlassId()); // if (finalTaskType.equals(Const.BIG_STORAGE_BEFORE_OUT)) { // storageCageDTO.setTargetSlot(e.getStartSlot()); // } else { // storageCageDTO.setTargetSlot(e.getTargetSlot()); // } // return storageCageDTO; // }).collect(Collectors.toList()); // bigStorageCageDetailsService.updateBySlot(storageCageDTOList, finalTaskType); // log.info("4、大理片笼进片状态已完成已完成的玻璃信息id:{}", v); // updateSlotRemainBySlots(outSuccessGlassSlot); // } else if (e1 == 3) { // //破损处理 // dealDamageOutTask(v); // } else { // //清空理片笼空数据 // noDealOutTask(v); // } // }); // for (BigStorageCageTask item : outTaskList) { // //更新历史任务表中的任务状态 // bigStorageCageHistoryTaskService.update(new LambdaUpdateWrapper() // .set(BigStorageCageHistoryTask::getTaskState, item.getTaskState()) // .eq(BigStorageCageHistoryTask::getTaskType, taskType) // .eq(BigStorageCageHistoryTask::getGlassId, item.getGlassId())); // } // //清空任务表数据 // bigStorageCageTaskService.removeAll("big_storage_cage_out_one_task"); // //清空启动状态 // //向opc发送启动信号 // miloService.writeToOpcWord(generateReadWriteEntity("DLP1B.DLP1B.MesReply", 0)); // } // // private void dealDamageInTask(List damageTaskList) { //// 获取进片任务表中状态为破损的数据 // log.info("破损的玻璃信息有:{}", damageTaskList); // //移除理片笼详情表任务执行过程中破损的玻璃 // bigStorageCageDetailsService.remove(new LambdaQueryWrapper() // .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW) // .in(BigStorageCageDetails::getGlassId, damageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()))); // //将破损信息新增入破损表 // List slotList = new ArrayList<>(); // for (BigStorageCageTask item : damageTaskList) { // Damage damage = new Damage(); // damage.setGlassId(item.getGlassId()); // damage.setLine(item.getStartSlot()); // damage.setWorkingProcedure("磨边"); // damage.setRemark("进笼前卧转立"); // damage.setStatus(1); // damage.setType(item.getTaskState()); // damageService.insertDamage(damage); // slotList.add(item.getTargetSlot()); // } // //更新格子剩余宽度 // updateSlotRemainBySlots(slotList); // log.info("进片任务-破损任务执行完成"); // } // // private void dealDamageOutTask(List damageTaskList) { //// 获取进片任务表中状态为破损的数据 // log.info("破损的玻璃信息有:{}", damageTaskList); // //移除理片笼详情表任务执行过程中破损的玻璃 // bigStorageCageDetailsService.remove(new LambdaQueryWrapper() // .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO) // .in(BigStorageCageDetails::getGlassId, damageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()))); // //将破损信息新增入破损表 // List slotList = new ArrayList<>(); // for (BigStorageCageTask item : damageTaskList) { // Damage damage = new Damage(); // damage.setGlassId(item.getGlassId()); // damage.setLine(item.getStartSlot()); // damage.setWorkingProcedure("钢化前"); // damage.setRemark("进笼后卧转立"); // damage.setStatus(1); // damage.setType(item.getTaskState()); // damageService.insertDamage(damage); // slotList.add(item.getTargetSlot()); // slotList.add(item.getStartSlot()); // } // //更新格子剩余宽度 // updateSlotRemainBySlots(slotList); // log.info("出片任务-破损任务执行完成"); // } // // private void noDealInTask(List noDealTaskList) { //// 获取进片任务表中状态为破损的数据 // log.info("破损的玻璃信息有:{}", noDealTaskList); // //移除理片笼详情表未执行任务的空记录信息 // bigStorageCageDetailsService.remove(new LambdaQueryWrapper() // .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW) // .in(BigStorageCageDetails::getGlassId, noDealTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()))); // //记录格子号,按格子号更新剩余尺寸 // List slotList = new ArrayList<>(); // for (BigStorageCageTask item : noDealTaskList) { // slotList.add(item.getTargetSlot()); // slotList.add(item.getStartSlot()); // } // //更新格子剩余宽度 // updateSlotRemainBySlots(slotList); // log.info("进片任务-无动作执行完成"); // } // // private void noDealOutTask(List noDealTaskList) { //// 获取进片任务表中状态为破损的数据 // log.info("破损的玻璃信息有:{}", noDealTaskList); // if (Const.OUT_TARGET_POSITION_ALL.contains(noDealTaskList.get(0).getTargetSlot())) { // //出片任务:将出片中状态恢复为在笼内 // List glassList = noDealTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); // bigStorageCageDetailsService.update(new LambdaUpdateWrapper() // .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) // .in(BigStorageCageDetails::getGlassId, glassList)); // // } else { // //调度任务:将调度中状态改为在笼内,格子号恢复为调度前的格子 // for (BigStorageCageTask item : noDealTaskList) { // bigStorageCageDetailsService.update(new LambdaUpdateWrapper() // .set(BigStorageCageDetails::getSlot, item.getStartSlot()) // .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) // .eq(BigStorageCageDetails::getGlassId, item.getGlassId())); // } // } // //将破损信息新增入破损表 // List slotList = new ArrayList<>(); // for (BigStorageCageTask item : noDealTaskList) { // slotList.add(item.getTargetSlot()); // slotList.add(item.getStartSlot()); // } // //更新格子剩余宽度 // updateSlotRemainBySlots(slotList); // log.info("出片任务-无动作执行完成"); // } // // /** // * 出片一次仅生成一车玻璃 // * // * @param list // * @param // * @return // */ // private Boolean computeOutGlassInfo(List list, String tableName, int targetSlot, int state, int taskType) { // //任务数据:获取车子存放玻璃最大数量,玻璃间隔 // List bigStorageCageTaskList = new ArrayList<>(); // //打车剩余尺寸 // Integer remainWidth = carWidth; // for (T e : list) { // if (bigStorageCageTaskList.size() >= outCarMaxSize || Math.max((int) e.getWidth(), (int) e.getHeight()) > remainWidth) { // break; // } // //计算当前出片车剩尺寸 // remainWidth = remainWidth - Math.max((int) e.getWidth(), (int) e.getHeight()) - glassGap; // bigStorageCageTaskList.add(new BigStorageCageTask(e.getGlassId(), e.getSlot(), targetSlot, // 0)); // } // Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageTaskList), "未获取出片数据,结束出片任务"); // log.info("获取出片任务数据{}条,执行保存", bigStorageCageTaskList.size()); // List glassIds = bigStorageCageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); // int glassCount = bigStorageCageTaskList.size(); // //生成出片任务条数不足6补全 // while (bigStorageCageTaskList.size() < 6) { // bigStorageCageTaskList.add(new BigStorageCageTask("", 0, 0, 0)); // } // bigStorageCageTaskService.saveTaskMessage(tableName, bigStorageCageTaskList); // List historyList = bigStorageCageTaskList.stream().filter(e -> StringUtils.isNotBlank(e.getGlassId())).map(e -> { // BigStorageCageHistoryTask history = new BigStorageCageHistoryTask(); // BeanUtils.copyProperties(e, history); // history.setGlassCount(glassCount); // history.setTaskType(taskType); // return history; // }).collect(Collectors.toList()); // bigStorageCageHistoryTaskService.saveBatch(historyList); // // log.info("将出片玻璃{}玻璃状态改为出片中", glassIds); // bigStorageCageDetailsService.update(new LambdaUpdateWrapper() // .set(BigStorageCageDetails::getState, state) // .set(Const.GLASS_STATE_SCHEDULE_ING.equals(state), BigStorageCageBaseInfo::getSlot, targetSlot) // .in(BigStorageCageDetails::getGlassId, glassIds)); // return Boolean.TRUE; // } // // // public void updateSlotRemainBySlots(List slotList) { // //获取格子内所有的玻璃信息 // List inSlotGlassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper() // .in(BigStorageCageDetails::getSlot, slotList).in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); // Map slotRemainMap = new HashMap<>(); // //是否存在有格子非空的玻璃 // if (CollectionUtils.isNotEmpty(inSlotGlassList)) { // //存在 将格子内的玻璃分别进行更新 // slotRemainMap = inSlotGlassList.stream() // .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> Math.max(item.getWidth(), item.getHeight()) + glassGap))); // slotRemainMap.forEach((e, v) -> { // double remainWidth = slotWidth - v >= 0 ? slotWidth - v : 0; // bigStorageCageService.update(new LambdaUpdateWrapper().set(BigStorageCage::getRemainWidth, remainWidth) // .eq(BigStorageCage::getSlot, e)); // }); // } // //过滤不存在玻璃的格子 将宽度重置为原始宽度5000 // Set remainSlotList = slotRemainMap.keySet(); // slotList.removeAll(remainSlotList); // if (CollectionUtils.isNotEmpty(slotList)) { // bigStorageCageService.update(new LambdaUpdateWrapper().set(BigStorageCage::getRemainWidth, slotWidth) // .in(BigStorageCage::getSlot, slotList)); // } // } // // private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) { // return ReadWriteEntity.builder() // .identifier(identifier) // //Kep中是Long类型,即:Int32,Java中的int类型 // .value(value) // .build(); // } //}