| | |
| | | package com.mes.job; |
| | | |
| | | 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.update.LambdaUpdateWrapper; |
| | | import com.github.yulichang.toolkit.JoinWrappers; |
| | | 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.dto.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.TemperingGlassInfo; |
| | | import com.mes.temperingglass.service.TemperingGlassInfoService; |
| | | 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.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 TemperingGlassInfoService temperingGlassInfoService; |
| | | @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; |
| | | |
| | | @Value("${mes.temperingOutTargetPosition}") |
| | | private Integer temperingOutTargetPosition; |
| | | @Value("${mes.artificialOutTargetPosition}") |
| | | private Integer artificialOutTargetPosition; |
| | | |
| | | |
| | | // @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<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); |
| | | if (CollectionUtil.isEmpty(inTaskList)) { |
| | | log.info("当前大车无进片玻璃,结束进片任务"); |
| | | } |
| | | |
| | | List<String> glassIdList = inTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); |
| | | log.info("获取任务的玻璃id:{}", glassIdList); |
| | | Map<String, Long> glassCountMap = glassIdList.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting())); |
| | | for (Map.Entry<String, Long> entry : glassCountMap.entrySet()) { |
| | | if (entry.getValue() > 1) { |
| | | log.info("进片玻璃{}存在相同,结束本次任务", entry.getKey()); |
| | | //todo:向plc发送报警 |
| | | return; |
| | | } |
| | | } |
| | | List<BigStorageCageDetails> detailsList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, glassIdList) |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); |
| | | if (CollectionUtil.isNotEmpty(detailsList)) { |
| | | log.info("理片笼存在相同的进片玻璃{},结束本次任务", detailsList); |
| | | //todo:向plc发送报警 |
| | | return; |
| | | } |
| | | List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIdList)); |
| | | |
| | | Map<String, List<GlassInfo>> glassListMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getGlassId)); |
| | | |
| | | //计算目标格子 |
| | | List<BigStorageCageHistoryTask> historyTasks = new ArrayList<>(); |
| | | for (BigStorageCageTask task : inTaskList) { |
| | | GlassInfo info = glassListMap.get(task.getGlassId()).get(0); |
| | | //获取目标格子信息 |
| | | BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info); |
| | | // 临时更新格子的剩余尺寸:防止相邻玻璃进同一格子造成剩余尺寸不足,玻璃越界的情况,任务完成后再次更新大理片笼表剩余宽度(按照笼内玻璃数量更新大理片笼剩余尺寸) |
| | | bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>() |
| | | .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<BigStorageCageTask> outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_one_task"); |
| | | if (CollectionUtil.isNotEmpty(outTaskList)) { |
| | | log.info("有正在执行的出片任务,结束本次出片任务"); |
| | | return; |
| | | } |
| | | //todo:是否允许钢化 |
| | | if (redisUtil.getCacheObject("temperingSwitch")) { |
| | | //是否有正在钢化的玻璃:钢化小片表关联历史任务表,筛选未出笼的玻璃信息 |
| | | // 获取当前钢化任务未完成出片的玻璃信息 |
| | | List<TemperingGlassInfo> unFinishTemperingGlassInfoList = temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>().eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)); |
| | | if (CollectionUtil.isNotEmpty(unFinishTemperingGlassInfoList)) { |
| | | List<String> glassIdList = unFinishTemperingGlassInfoList.stream().map(TemperingGlassInfo::getGlassId).collect(Collectors.toList()); |
| | | List<BigStorageCageHistoryTask> historyTaskList = bigStorageCageHistoryTaskService.list(new LambdaQueryWrapper<BigStorageCageHistoryTask>() |
| | | .eq(BigStorageCageHistoryTask::getTaskType, Const.BIG_STORAGE_BEFORE_OUT) |
| | | .in(BigStorageCageHistoryTask::getGlassId, glassIdList)); |
| | | List<TemperingGlassInfo> temperingGlassList = unFinishTemperingGlassInfoList; |
| | | if (CollectionUtil.isNotEmpty(historyTaskList)) { |
| | | List<String> taskGlassList = historyTaskList.stream().map(BigStorageCageHistoryTask::getGlassId).collect(Collectors.toList()); |
| | | temperingGlassList = unFinishTemperingGlassInfoList.stream().filter(e -> !taskGlassList.contains(e.getGlassId())).collect(Collectors.toList()); |
| | | } |
| | | if (CollectionUtil.isNotEmpty(temperingGlassList)) { |
| | | log.info("有正在出片的钢化任务"); |
| | | computeOutGlassInfo(temperingGlassList, "big_storage_cage_out_one_task", temperingOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); |
| | | Date endDate = new Date(); |
| | | log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | | } |
| | | } |
| | | //钢化优先:获取理片笼 玻璃小片 破损表 数量 判断笼内版图是否到齐 |
| | | List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll(); |
| | | if (CollectionUtil.isNotEmpty(temperingLayoutDTOList)) { |
| | | //玻璃到齐包括已出片的 |
| | | //到齐,将玻璃小片数据存入钢化小片表,逻辑生成出片任务 结束 |
| | | for (TemperingLayoutDTO item : temperingLayoutDTOList) { |
| | | // if (item.getEngineerId().equals(redisUtil.getCacheObject("temperingengineerId"))) { |
| | | List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.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 (CollectionUtil.isNotEmpty(temperingGlassInfos)) { |
| | | temperingGlassInfoService.saveBatch(temperingGlassInfos); |
| | | computeOutGlassInfo(temperingGlassInfos, "big_storage_cage_out_one_task", temperingOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); |
| | | Date endDate = new Date(); |
| | | log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | | } |
| | | //package com.mes.job; |
| | | // |
| | | //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.update.LambdaUpdateWrapper; |
| | | //import com.github.yulichang.toolkit.JoinWrappers; |
| | | //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.dto.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.TemperingGlassInfo; |
| | | //import com.mes.temperingglass.service.TemperingGlassInfoService; |
| | | //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.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 TemperingGlassInfoService temperingGlassInfoService; |
| | | // @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; |
| | | // |
| | | // @Value("${mes.temperingOutTargetPosition}") |
| | | // private Integer temperingOutTargetPosition; |
| | | // @Value("${mes.artificialOutTargetPosition}") |
| | | // private Integer artificialOutTargetPosition; |
| | | // |
| | | // |
| | | // // @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<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); |
| | | // if (CollectionUtil.isEmpty(inTaskList)) { |
| | | // log.info("当前大车无进片玻璃,结束进片任务"); |
| | | // } |
| | | // |
| | | // List<String> glassIdList = inTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); |
| | | // log.info("获取任务的玻璃id:{}", glassIdList); |
| | | // Map<String, Long> glassCountMap = glassIdList.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting())); |
| | | // for (Map.Entry<String, Long> entry : glassCountMap.entrySet()) { |
| | | // if (entry.getValue() > 1) { |
| | | // log.info("进片玻璃{}存在相同,结束本次任务", entry.getKey()); |
| | | // //todo:向plc发送报警 |
| | | // return; |
| | | // } |
| | | // } |
| | | // List<BigStorageCageDetails> detailsList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, glassIdList) |
| | | // .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); |
| | | // if (CollectionUtil.isNotEmpty(detailsList)) { |
| | | // log.info("理片笼存在相同的进片玻璃{},结束本次任务", detailsList); |
| | | // //todo:向plc发送报警 |
| | | // return; |
| | | // } |
| | | // List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIdList)); |
| | | // |
| | | // Map<String, List<GlassInfo>> glassListMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getGlassId)); |
| | | // |
| | | // //计算目标格子 |
| | | // List<BigStorageCageHistoryTask> historyTasks = new ArrayList<>(); |
| | | // for (BigStorageCageTask task : inTaskList) { |
| | | // GlassInfo info = glassListMap.get(task.getGlassId()).get(0); |
| | | // //获取目标格子信息 |
| | | // BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info); |
| | | //// 临时更新格子的剩余尺寸:防止相邻玻璃进同一格子造成剩余尺寸不足,玻璃越界的情况,任务完成后再次更新大理片笼表剩余宽度(按照笼内玻璃数量更新大理片笼剩余尺寸) |
| | | // bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>() |
| | | // .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<BigStorageCageTask> outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_one_task"); |
| | | // if (CollectionUtil.isNotEmpty(outTaskList)) { |
| | | // log.info("有正在执行的出片任务,结束本次出片任务"); |
| | | // return; |
| | | // } |
| | | // //todo:是否允许钢化 |
| | | // if (redisUtil.getCacheObject("temperingSwitch")) { |
| | | // //是否有正在钢化的玻璃:钢化小片表关联历史任务表,筛选未出笼的玻璃信息 |
| | | //// 获取当前钢化任务未完成出片的玻璃信息 |
| | | // List<TemperingGlassInfo> unFinishTemperingGlassInfoList = temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>().eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)); |
| | | // if (CollectionUtil.isNotEmpty(unFinishTemperingGlassInfoList)) { |
| | | // List<String> glassIdList = unFinishTemperingGlassInfoList.stream().map(TemperingGlassInfo::getGlassId).collect(Collectors.toList()); |
| | | // List<BigStorageCageHistoryTask> historyTaskList = bigStorageCageHistoryTaskService.list(new LambdaQueryWrapper<BigStorageCageHistoryTask>() |
| | | // .eq(BigStorageCageHistoryTask::getTaskType, Const.BIG_STORAGE_BEFORE_OUT) |
| | | // .in(BigStorageCageHistoryTask::getGlassId, glassIdList)); |
| | | // List<TemperingGlassInfo> temperingGlassList = unFinishTemperingGlassInfoList; |
| | | // if (CollectionUtil.isNotEmpty(historyTaskList)) { |
| | | // List<String> taskGlassList = historyTaskList.stream().map(BigStorageCageHistoryTask::getGlassId).collect(Collectors.toList()); |
| | | // temperingGlassList = unFinishTemperingGlassInfoList.stream().filter(e -> !taskGlassList.contains(e.getGlassId())).collect(Collectors.toList()); |
| | | // } |
| | | // if (CollectionUtil.isNotEmpty(temperingGlassList)) { |
| | | // log.info("有正在出片的钢化任务"); |
| | | // computeOutGlassInfo(temperingGlassList, "big_storage_cage_out_one_task", temperingOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); |
| | | // Date endDate = new Date(); |
| | | // log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | // return; |
| | | // } |
| | | // } |
| | | // //钢化优先:获取理片笼 玻璃小片 破损表 数量 判断笼内版图是否到齐 |
| | | // List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll(); |
| | | // if (CollectionUtil.isNotEmpty(temperingLayoutDTOList)) { |
| | | // //玻璃到齐包括已出片的 |
| | | // //到齐,将玻璃小片数据存入钢化小片表,逻辑生成出片任务 结束 |
| | | // for (TemperingLayoutDTO item : temperingLayoutDTOList) { |
| | | //// if (item.getEngineerId().equals(redisUtil.getCacheObject("temperingengineerId"))) { |
| | | // List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.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 (CollectionUtil.isNotEmpty(temperingGlassInfos)) { |
| | | // temperingGlassInfoService.saveBatch(temperingGlassInfos); |
| | | // computeOutGlassInfo(temperingGlassInfos, "big_storage_cage_out_one_task", temperingOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); |
| | | // Date endDate = new Date(); |
| | | // log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | // return; |
| | | // } |
| | | } |
| | | } |
| | | } |
| | | //是否有人工下片任务 有直接出 |
| | | List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL) |
| | | .orderByAsc(BigStorageCageDetails::getSlot) |
| | | .orderByAsc(BigStorageCageDetails::getId)); |
| | | if (CollectionUtil.isNotEmpty(artificialList)) { |
| | | computeOutGlassInfo(artificialList, "big_storage_cage_out_one_task", artificialOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); |
| | | Date endDate = new Date(); |
| | | log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | return; |
| | | } |
| | | //是否存在需要内部调度的格子:执行内部调度任务 |
| | | List<TemperingLayoutDTO> temperingOccupySlotList = bigStorageCageDetailsService.queryTemperingOccupySlot(); |
| | | if (CollectionUtil.isNotEmpty(temperingOccupySlotList)) { |
| | | loop: |
| | | for (TemperingLayoutDTO temperingOccupySlot : temperingOccupySlotList) { |
| | | List<SlotSequenceDTO> 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<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence)); |
| | | if (CollectionUtil.isNotEmpty(list)) { |
| | | computeOutGlassInfo(list, "big_storage_cage_out_one_task", second.getSlot(), Const.GLASS_STATE_SCHEDULE_ING, Const.BIG_STORAGE_BEFORE_DISPATCH); |
| | | } |
| | | //使用Arrays.asList() 使用removeAll报错,改为正常使用List |
| | | List<Integer> slotList = new ArrayList<>(); |
| | | slotList.add(second.getSlot()); |
| | | updateSlotRemainBySlots(slotList); |
| | | 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<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); |
| | | if (CollectionUtil.isEmpty(inTaskList)) { |
| | | log.info("当前大车无进片玻璃,结束完成进片任务"); |
| | | return; |
| | | } |
| | | List<BigStorageCageTask> unFinishTaskList = inTaskList.stream().filter(e -> e.getTaskState() <= 1 || e.getStartSlot() == 0).collect(Collectors.toList()); |
| | | if (CollectionUtil.isNotEmpty(unFinishTaskList)) { |
| | | log.info("存在未完成的玻璃信息,玻璃:{}", unFinishTaskList); |
| | | return; |
| | | } |
| | | Map<Integer, List<BigStorageCageTask>> taskMap = inTaskList.stream().collect(Collectors.groupingBy(BigStorageCageTask::getTaskState)); |
| | | //按照任务状态修改大理片笼内的玻璃数据 |
| | | // 重新计算大理片笼内的剩余尺寸 |
| | | taskMap.forEach((e1, v) -> { |
| | | if (e1 == 2) { |
| | | //进片完成 |
| | | log.info("3、获取进片已完成的玻璃信息id:{}", v); |
| | | List<Integer> inSuccessGlassSlot = v.stream().map(BigStorageCageTask::getTargetSlot).collect(Collectors.toList()); |
| | | List<UpdateBigStorageCageDTO> 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<BigStorageCageHistoryTask>() |
| | | .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<BigStorageCageTask> outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_one_task"); |
| | | if (CollectionUtil.isEmpty(outTaskList)) { |
| | | log.info("当前大车无进片玻璃,结束完成进片任务"); |
| | | return; |
| | | } |
| | | List<BigStorageCageTask> unFinishTaskList = outTaskList.stream().filter(e -> e.getTaskState() <= 1 || e.getStartSlot() == 0).collect(Collectors.toList()); |
| | | if (CollectionUtil.isNotEmpty(unFinishTaskList)) { |
| | | log.info("存在未完成的玻璃信息,玻璃:{}", unFinishTaskList); |
| | | return; |
| | | } |
| | | Map<Integer, List<BigStorageCageTask>> 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<Integer> 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<UpdateBigStorageCageDTO> 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, Const.GLASS_STATE_OUT); |
| | | log.info("4、大理片笼进片状态已完成已完成的玻璃信息id:{}", v); |
| | | updateSlotRemainBySlots(outSuccessGlassSlot); |
| | | } else if (e1 == 3) { |
| | | //破损处理 |
| | | dealDamageOutTask(v); |
| | | } else { |
| | | //清空理片笼空数据 |
| | | noDealOutTask(v); |
| | | } |
| | | }); |
| | | for (BigStorageCageTask item : outTaskList) { |
| | | //更新历史任务表中的任务状态 |
| | | bigStorageCageHistoryTaskService.update(new LambdaUpdateWrapper<BigStorageCageHistoryTask>() |
| | | .set(BigStorageCageHistoryTask::getTaskState, item.getTaskState()) |
| | | .eq(BigStorageCageHistoryTask::getTaskType, taskType) |
| | | .eq(BigStorageCageHistoryTask::getGlassId, item.getGlassId())); |
| | | //更新钢化小片表 |
| | | Integer taskState = item.getTaskState(); |
| | | if (taskState == 2) { |
| | | temperingGlassInfoService.update(new LambdaUpdateWrapper<TemperingGlassInfo>() |
| | | .set(TemperingGlassInfo::getState, Const.TEMPERING_OUT).eq(TemperingGlassInfo::getGlassId, item.getGlassId())); |
| | | } else if (taskState == 3) { |
| | | // temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().eq(TemperingGlassInfo::getGlassId, item.getGlassId())); |
| | | temperingGlassInfoService.update(new LambdaUpdateWrapper<TemperingGlassInfo>() |
| | | .set(TemperingGlassInfo::getState, Const.TEMPERING_DAMAGE |
| | | ).eq(TemperingGlassInfo::getGlassId, item.getGlassId())); |
| | | |
| | | } else { |
| | | // 空执行 |
| | | } |
| | | } |
| | | // 重置任务表数据 |
| | | bigStorageCageTaskService.updateOutTaskMessage("big_storage_cage_out_one_task"); |
| | | //清空启动状态 |
| | | //向opc发送启动信号 |
| | | miloService.writeToOpcWord(generateReadWriteEntity("DLP1B.DLP1B.MesReply", 0)); |
| | | } |
| | | |
| | | private void dealDamageInTask(List<BigStorageCageTask> damageTaskList) { |
| | | // 获取进片任务表中状态为破损的数据 |
| | | log.info("破损的玻璃信息有:{}", damageTaskList); |
| | | //移除理片笼详情表任务执行过程中破损的玻璃 |
| | | bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW) |
| | | .in(BigStorageCageDetails::getGlassId, damageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()))); |
| | | //将破损信息新增入破损表 |
| | | List<Integer> 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<BigStorageCageTask> damageTaskList) { |
| | | // 获取进片任务表中状态为破损的数据 |
| | | log.info("破损的玻璃信息有:{}", damageTaskList); |
| | | //移除理片笼详情表任务执行过程中破损的玻璃 |
| | | bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO) |
| | | .in(BigStorageCageDetails::getGlassId, damageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()))); |
| | | //将破损信息新增入破损表 |
| | | List<Integer> 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<BigStorageCageTask> noDealTaskList) { |
| | | // 获取进片任务表中状态为破损的数据 |
| | | log.info("破损的玻璃信息有:{}", noDealTaskList); |
| | | //移除理片笼详情表未执行任务的空记录信息 |
| | | bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW) |
| | | .in(BigStorageCageDetails::getGlassId, noDealTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()))); |
| | | //记录格子号,按格子号更新剩余尺寸 |
| | | List<Integer> slotList = new ArrayList<>(); |
| | | for (BigStorageCageTask item : noDealTaskList) { |
| | | slotList.add(item.getTargetSlot()); |
| | | slotList.add(item.getStartSlot()); |
| | | } |
| | | //更新格子剩余宽度 |
| | | updateSlotRemainBySlots(slotList); |
| | | log.info("进片任务-无动作执行完成"); |
| | | } |
| | | |
| | | private void noDealOutTask(List<BigStorageCageTask> noDealTaskList) { |
| | | // 获取进片任务表中状态为破损的数据 |
| | | log.info("破损的玻璃信息有:{}", noDealTaskList); |
| | | if (Const.OUT_TARGET_POSITION_ALL.contains(noDealTaskList.get(0).getTargetSlot())) { |
| | | //出片任务:将出片中状态恢复为在笼内 |
| | | List<String> glassList = noDealTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); |
| | | bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() |
| | | .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .in(BigStorageCageDetails::getGlassId, glassList)); |
| | | |
| | | } else { |
| | | //调度任务:将调度中状态改为在笼内,格子号恢复为调度前的格子 |
| | | for (BigStorageCageTask item : noDealTaskList) { |
| | | bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() |
| | | .set(BigStorageCageDetails::getSlot, item.getStartSlot()) |
| | | .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | .eq(BigStorageCageDetails::getGlassId, item.getGlassId())); |
| | | } |
| | | } |
| | | //将破损信息新增入破损表 |
| | | List<Integer> slotList = new ArrayList<>(); |
| | | for (BigStorageCageTask item : noDealTaskList) { |
| | | slotList.add(item.getTargetSlot()); |
| | | slotList.add(item.getStartSlot()); |
| | | } |
| | | //更新格子剩余宽度 |
| | | updateSlotRemainBySlots(slotList); |
| | | log.info("出片任务-无动作执行完成"); |
| | | } |
| | | |
| | | /** |
| | | * 出片一次仅生成一车玻璃 |
| | | * |
| | | * @param list |
| | | * @param <T> |
| | | * @return |
| | | */ |
| | | private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, String tableName, int targetSlot, int state, int taskType) { |
| | | //任务数据:获取车子存放玻璃最大数量,玻璃间隔 |
| | | List<BigStorageCageTask> 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(CollectionUtil.isEmpty(bigStorageCageTaskList), "未获取出片数据,结束出片任务"); |
| | | log.info("获取出片任务数据{}条,执行保存", bigStorageCageTaskList.size()); |
| | | List<String> 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.removeAll("big_storage_cage_out_one_task"); |
| | | bigStorageCageTaskService.saveTaskMessage(tableName, bigStorageCageTaskList); |
| | | List<BigStorageCageHistoryTask> 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<BigStorageCageDetails>() |
| | | .set(BigStorageCageDetails::getState, state) |
| | | .set(Const.GLASS_STATE_SCHEDULE_ING.equals(state), BigStorageCageBaseInfo::getSlot, targetSlot) |
| | | .in(BigStorageCageDetails::getGlassId, glassIds)); |
| | | try { |
| | | miloService.writeToOpcWord(generateReadWriteEntity("DLP1B.DLP1B.MesReply", 1)); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return Boolean.TRUE; |
| | | } |
| | | |
| | | |
| | | public void updateSlotRemainBySlots(List<Integer> slotList) { |
| | | //获取格子内所有的玻璃信息 |
| | | List<BigStorageCageDetails> inSlotGlassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | .in(BigStorageCageDetails::getSlot, slotList).in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); |
| | | Map<Integer, Double> slotRemainMap = new HashMap<>(); |
| | | //是否存在有格子非空的玻璃 |
| | | if (CollectionUtil.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<BigStorageCage>().set(BigStorageCage::getRemainWidth, remainWidth) |
| | | .eq(BigStorageCage::getSlot, e)); |
| | | }); |
| | | } |
| | | //过滤不存在玻璃的格子 将宽度重置为原始宽度5000 |
| | | Set<Integer> remainSlotList = slotRemainMap.keySet(); |
| | | slotList.removeAll(remainSlotList); |
| | | if (CollectionUtil.isNotEmpty(slotList)) { |
| | | bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().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(); |
| | | } |
| | | } |
| | | //// } |
| | | // } |
| | | // } |
| | | // } |
| | | // //是否有人工下片任务 有直接出 |
| | | // List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL) |
| | | // .orderByAsc(BigStorageCageDetails::getSlot) |
| | | // .orderByAsc(BigStorageCageDetails::getId)); |
| | | // if (CollectionUtil.isNotEmpty(artificialList)) { |
| | | // computeOutGlassInfo(artificialList, "big_storage_cage_out_one_task", artificialOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT); |
| | | // Date endDate = new Date(); |
| | | // log.info("大理片笼出片任务结束时间:{},共耗时:{}ms,结束扫码任务", endDate, endDate.getTime() - startDate.getTime()); |
| | | // return; |
| | | // } |
| | | // //是否存在需要内部调度的格子:执行内部调度任务 |
| | | // List<TemperingLayoutDTO> temperingOccupySlotList = bigStorageCageDetailsService.queryTemperingOccupySlot(); |
| | | // if (CollectionUtil.isNotEmpty(temperingOccupySlotList)) { |
| | | // loop: |
| | | // for (TemperingLayoutDTO temperingOccupySlot : temperingOccupySlotList) { |
| | | // List<SlotSequenceDTO> 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<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | // .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence)); |
| | | // if (CollectionUtil.isNotEmpty(list)) { |
| | | // computeOutGlassInfo(list, "big_storage_cage_out_one_task", second.getSlot(), Const.GLASS_STATE_SCHEDULE_ING, Const.BIG_STORAGE_BEFORE_DISPATCH); |
| | | // } |
| | | // //使用Arrays.asList() 使用removeAll报错,改为正常使用List |
| | | // List<Integer> slotList = new ArrayList<>(); |
| | | // slotList.add(second.getSlot()); |
| | | // updateSlotRemainBySlots(slotList); |
| | | // 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<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_one_task"); |
| | | // if (CollectionUtil.isEmpty(inTaskList)) { |
| | | // log.info("当前大车无进片玻璃,结束完成进片任务"); |
| | | // return; |
| | | // } |
| | | // List<BigStorageCageTask> unFinishTaskList = inTaskList.stream().filter(e -> e.getTaskState() <= 1 || e.getStartSlot() == 0).collect(Collectors.toList()); |
| | | // if (CollectionUtil.isNotEmpty(unFinishTaskList)) { |
| | | // log.info("存在未完成的玻璃信息,玻璃:{}", unFinishTaskList); |
| | | // return; |
| | | // } |
| | | // Map<Integer, List<BigStorageCageTask>> taskMap = inTaskList.stream().collect(Collectors.groupingBy(BigStorageCageTask::getTaskState)); |
| | | // //按照任务状态修改大理片笼内的玻璃数据 |
| | | //// 重新计算大理片笼内的剩余尺寸 |
| | | // taskMap.forEach((e1, v) -> { |
| | | // if (e1 == 2) { |
| | | // //进片完成 |
| | | // log.info("3、获取进片已完成的玻璃信息id:{}", v); |
| | | // List<Integer> inSuccessGlassSlot = v.stream().map(BigStorageCageTask::getTargetSlot).collect(Collectors.toList()); |
| | | // List<UpdateBigStorageCageDTO> 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<BigStorageCageHistoryTask>() |
| | | // .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<BigStorageCageTask> outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_one_task"); |
| | | // if (CollectionUtil.isEmpty(outTaskList)) { |
| | | // log.info("当前大车无进片玻璃,结束完成进片任务"); |
| | | // return; |
| | | // } |
| | | // List<BigStorageCageTask> unFinishTaskList = outTaskList.stream().filter(e -> e.getTaskState() <= 1 || e.getStartSlot() == 0).collect(Collectors.toList()); |
| | | // if (CollectionUtil.isNotEmpty(unFinishTaskList)) { |
| | | // log.info("存在未完成的玻璃信息,玻璃:{}", unFinishTaskList); |
| | | // return; |
| | | // } |
| | | // Map<Integer, List<BigStorageCageTask>> 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<Integer> 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<UpdateBigStorageCageDTO> 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, Const.GLASS_STATE_OUT); |
| | | // log.info("4、大理片笼进片状态已完成已完成的玻璃信息id:{}", v); |
| | | // updateSlotRemainBySlots(outSuccessGlassSlot); |
| | | // } else if (e1 == 3) { |
| | | // //破损处理 |
| | | // dealDamageOutTask(v); |
| | | // } else { |
| | | // //清空理片笼空数据 |
| | | // noDealOutTask(v); |
| | | // } |
| | | // }); |
| | | // for (BigStorageCageTask item : outTaskList) { |
| | | // //更新历史任务表中的任务状态 |
| | | // bigStorageCageHistoryTaskService.update(new LambdaUpdateWrapper<BigStorageCageHistoryTask>() |
| | | // .set(BigStorageCageHistoryTask::getTaskState, item.getTaskState()) |
| | | // .eq(BigStorageCageHistoryTask::getTaskType, taskType) |
| | | // .eq(BigStorageCageHistoryTask::getGlassId, item.getGlassId())); |
| | | // //更新钢化小片表 |
| | | // Integer taskState = item.getTaskState(); |
| | | // if (taskState == 2) { |
| | | // temperingGlassInfoService.update(new LambdaUpdateWrapper<TemperingGlassInfo>() |
| | | // .set(TemperingGlassInfo::getState, Const.TEMPERING_OUT).eq(TemperingGlassInfo::getGlassId, item.getGlassId())); |
| | | // } else if (taskState == 3) { |
| | | //// temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().eq(TemperingGlassInfo::getGlassId, item.getGlassId())); |
| | | // temperingGlassInfoService.update(new LambdaUpdateWrapper<TemperingGlassInfo>() |
| | | // .set(TemperingGlassInfo::getState, Const.TEMPERING_DAMAGE |
| | | // ).eq(TemperingGlassInfo::getGlassId, item.getGlassId())); |
| | | // |
| | | // } else { |
| | | //// 空执行 |
| | | // } |
| | | // } |
| | | //// 重置任务表数据 |
| | | // bigStorageCageTaskService.updateOutTaskMessage("big_storage_cage_out_one_task"); |
| | | // //清空启动状态 |
| | | // //向opc发送启动信号 |
| | | // miloService.writeToOpcWord(generateReadWriteEntity("DLP1B.DLP1B.MesReply", 0)); |
| | | // } |
| | | // |
| | | // private void dealDamageInTask(List<BigStorageCageTask> damageTaskList) { |
| | | //// 获取进片任务表中状态为破损的数据 |
| | | // log.info("破损的玻璃信息有:{}", damageTaskList); |
| | | // //移除理片笼详情表任务执行过程中破损的玻璃 |
| | | // bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW) |
| | | // .in(BigStorageCageDetails::getGlassId, damageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()))); |
| | | // //将破损信息新增入破损表 |
| | | // List<Integer> 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<BigStorageCageTask> damageTaskList) { |
| | | //// 获取进片任务表中状态为破损的数据 |
| | | // log.info("破损的玻璃信息有:{}", damageTaskList); |
| | | // //移除理片笼详情表任务执行过程中破损的玻璃 |
| | | // bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO) |
| | | // .in(BigStorageCageDetails::getGlassId, damageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()))); |
| | | // //将破损信息新增入破损表 |
| | | // List<Integer> 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<BigStorageCageTask> noDealTaskList) { |
| | | //// 获取进片任务表中状态为破损的数据 |
| | | // log.info("破损的玻璃信息有:{}", noDealTaskList); |
| | | // //移除理片笼详情表未执行任务的空记录信息 |
| | | // bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW) |
| | | // .in(BigStorageCageDetails::getGlassId, noDealTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()))); |
| | | // //记录格子号,按格子号更新剩余尺寸 |
| | | // List<Integer> slotList = new ArrayList<>(); |
| | | // for (BigStorageCageTask item : noDealTaskList) { |
| | | // slotList.add(item.getTargetSlot()); |
| | | // slotList.add(item.getStartSlot()); |
| | | // } |
| | | // //更新格子剩余宽度 |
| | | // updateSlotRemainBySlots(slotList); |
| | | // log.info("进片任务-无动作执行完成"); |
| | | // } |
| | | // |
| | | // private void noDealOutTask(List<BigStorageCageTask> noDealTaskList) { |
| | | //// 获取进片任务表中状态为破损的数据 |
| | | // log.info("破损的玻璃信息有:{}", noDealTaskList); |
| | | // if (Const.OUT_TARGET_POSITION_ALL.contains(noDealTaskList.get(0).getTargetSlot())) { |
| | | // //出片任务:将出片中状态恢复为在笼内 |
| | | // List<String> glassList = noDealTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList()); |
| | | // bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() |
| | | // .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | // .in(BigStorageCageDetails::getGlassId, glassList)); |
| | | // |
| | | // } else { |
| | | // //调度任务:将调度中状态改为在笼内,格子号恢复为调度前的格子 |
| | | // for (BigStorageCageTask item : noDealTaskList) { |
| | | // bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>() |
| | | // .set(BigStorageCageDetails::getSlot, item.getStartSlot()) |
| | | // .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN) |
| | | // .eq(BigStorageCageDetails::getGlassId, item.getGlassId())); |
| | | // } |
| | | // } |
| | | // //将破损信息新增入破损表 |
| | | // List<Integer> slotList = new ArrayList<>(); |
| | | // for (BigStorageCageTask item : noDealTaskList) { |
| | | // slotList.add(item.getTargetSlot()); |
| | | // slotList.add(item.getStartSlot()); |
| | | // } |
| | | // //更新格子剩余宽度 |
| | | // updateSlotRemainBySlots(slotList); |
| | | // log.info("出片任务-无动作执行完成"); |
| | | // } |
| | | // |
| | | // /** |
| | | // * 出片一次仅生成一车玻璃 |
| | | // * |
| | | // * @param list |
| | | // * @param <T> |
| | | // * @return |
| | | // */ |
| | | // private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, String tableName, int targetSlot, int state, int taskType) { |
| | | // //任务数据:获取车子存放玻璃最大数量,玻璃间隔 |
| | | // List<BigStorageCageTask> 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(CollectionUtil.isEmpty(bigStorageCageTaskList), "未获取出片数据,结束出片任务"); |
| | | // log.info("获取出片任务数据{}条,执行保存", bigStorageCageTaskList.size()); |
| | | // List<String> 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.removeAll("big_storage_cage_out_one_task"); |
| | | // bigStorageCageTaskService.saveTaskMessage(tableName, bigStorageCageTaskList); |
| | | // List<BigStorageCageHistoryTask> 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<BigStorageCageDetails>() |
| | | // .set(BigStorageCageDetails::getState, state) |
| | | // .set(Const.GLASS_STATE_SCHEDULE_ING.equals(state), BigStorageCageBaseInfo::getSlot, targetSlot) |
| | | // .in(BigStorageCageDetails::getGlassId, glassIds)); |
| | | // try { |
| | | // miloService.writeToOpcWord(generateReadWriteEntity("DLP1B.DLP1B.MesReply", 1)); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // return Boolean.TRUE; |
| | | // } |
| | | // |
| | | // |
| | | // public void updateSlotRemainBySlots(List<Integer> slotList) { |
| | | // //获取格子内所有的玻璃信息 |
| | | // List<BigStorageCageDetails> inSlotGlassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>() |
| | | // .in(BigStorageCageDetails::getSlot, slotList).in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)); |
| | | // Map<Integer, Double> slotRemainMap = new HashMap<>(); |
| | | // //是否存在有格子非空的玻璃 |
| | | // if (CollectionUtil.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<BigStorageCage>().set(BigStorageCage::getRemainWidth, remainWidth) |
| | | // .eq(BigStorageCage::getSlot, e)); |
| | | // }); |
| | | // } |
| | | // //过滤不存在玻璃的格子 将宽度重置为原始宽度5000 |
| | | // Set<Integer> remainSlotList = slotRemainMap.keySet(); |
| | | // slotList.removeAll(remainSlotList); |
| | | // if (CollectionUtil.isNotEmpty(slotList)) { |
| | | // bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().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(); |
| | | // } |
| | | //} |