| | |
| | | import cn.hutool.core.collection.CollectionUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer; |
| | | import com.kangaroohy.milo.model.ReadWriteEntity; |
| | | import com.kangaroohy.milo.service.MiloService; |
| | | import com.mes.common.config.Const; |
| | |
| | | import com.mes.rawglassstation.service.RawGlassStorageStationService; |
| | | import com.mes.rawglasstask.entity.RawGlassStorageTask; |
| | | import com.mes.rawglasstask.service.RawGlassStorageTaskService; |
| | | import com.mes.s7.entity.S7Data; |
| | | import com.mes.uppattenusage.entity.UpPattenUsage; |
| | | import com.mes.uppattenusage.entity.vo.UpPattenUsageVO; |
| | | import com.mes.uppattenusage.mapper.UpPattenUsageMapper; |
| | |
| | | @Autowired(required = false) |
| | | private MiloService miloService; |
| | | |
| | | @Autowired(required = false) |
| | | S7Serializer s7Serializer; |
| | | |
| | | |
| | | private static final String LOAD_GLASS_DEVICE_ONE_TASK = "load_glass_device_one_task"; |
| | | |
| | |
| | | |
| | | private static final List<Integer> LOAD_STATION_01 = Arrays.asList(101, 102); |
| | | private static final List<Integer> LOAD_STATION_02 = Arrays.asList(103, 104); |
| | | private static final List<Integer> LOAD_STATION_ALL = Arrays.asList(101, 102, 103, 104); |
| | | private static final Integer LEFTING_01 = 98; |
| | | private static final Integer LEFTING_02 = 99; |
| | | private static final Integer LOAD_GLASS_ONE_DEVICE = 5; |
| | |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void rawStorageTask() throws Exception { |
| | | ReadWriteEntity requestWord = miloService.readFromOpcUa("CC.CC.request"); |
| | | ReadWriteEntity confireWord = miloService.readFromOpcUa("CC.CC.confirmation"); |
| | | ReadWriteEntity reportWord = miloService.readFromOpcUa("CC.CC.reportWord"); |
| | | ReadWriteEntity taskWord = miloService.readFromOpcUa("CC.CC.taskWord"); |
| | | String requestValue = requestWord.getValue() + ""; |
| | | S7Data S7DataWL1 = s7Serializer.read(S7Data.class); |
| | | String requestWord = S7DataWL1.getRequest().toString(); |
| | | String confireWord = S7DataWL1.getConfirmation().toString(); |
| | | String reportWord = S7DataWL1.getReportWord().toString(); |
| | | String taskWord = S7DataWL1.getTaskWord().toString(); |
| | | String requestValue = requestWord; |
| | | // ReadWriteEntity requestWord = miloService.readFromOpcUa("CC.CC.request"); |
| | | // ReadWriteEntity confireWord = miloService.readFromOpcUa("CC.CC.confirmation"); |
| | | // ReadWriteEntity reportWord = miloService.readFromOpcUa("CC.CC.reportWord"); |
| | | // ReadWriteEntity taskWord = miloService.readFromOpcUa("CC.CC.taskWord"); |
| | | // String requestValue = requestWord.getValue() + ""; |
| | | if ("0".equals(requestValue)) { |
| | | if ("1".equals(confireWord.getValue() + "") && "0".equals(reportWord.getValue() + "")) { |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | list.add(generateReadWriteEntity("CC.CC.confirmation", 0)); |
| | | miloService.writeToOpcWord(list); |
| | | if ("1".equals(confireWord) && "0".equals(reportWord)) { |
| | | // if ("1".equals(confireWord.getValue() + "") && "0".equals(reportWord.getValue() + "")) { |
| | | S7Data s7Data = new S7Data(); |
| | | s7Data.setConfirmation((short) 0); |
| | | s7Serializer.write(s7Data); |
| | | // List<ReadWriteEntity> list = new ArrayList<>(); |
| | | // list.add(generateReadWriteEntity("CC.CC.confirmation", 0)); |
| | | // miloService.writeToOpcWord(list); |
| | | } |
| | | if ("1".equals(taskWord.getValue() + "")) { |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | list.add(generateReadWriteEntity("CC.CC.taskWord", 0)); |
| | | list.add(generateReadWriteEntity("CC.CC.startSlot", 0)); |
| | | list.add(generateReadWriteEntity("CC.CC.endSlot", 0)); |
| | | miloService.writeToOpcWord(list); |
| | | if ("1".equals(taskWord)) { |
| | | // if ("1".equals(taskWord.getValue() + "")) { |
| | | S7Data s7Data = new S7Data(); |
| | | s7Data.setTaskWord((short) 0); |
| | | s7Data.setStartSlot((short) 0); |
| | | s7Data.setEndSlot((short) 0); |
| | | s7Serializer.write(s7Data); |
| | | // List<ReadWriteEntity> list = new ArrayList<>(); |
| | | // list.add(generateReadWriteEntity("CC.CC.taskWord", 0)); |
| | | // list.add(generateReadWriteEntity("CC.CC.startSlot", 0)); |
| | | // list.add(generateReadWriteEntity("CC.CC.endSlot", 0)); |
| | | // miloService.writeToOpcWord(list); |
| | | } |
| | | return; |
| | | } |
| | |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void rawStorageInCar() throws Exception { |
| | | ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.inCar"); |
| | | String value = entity.getValue() + ""; |
| | | S7Data S7DataWL1 = s7Serializer.read(S7Data.class); |
| | | String value = S7DataWL1.getInCar().toString(); |
| | | // ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.inCar"); |
| | | // String value = entity.getValue() + ""; |
| | | if (!"1".equals(value)) { |
| | | log.info("大车上没有架子"); |
| | | return; |
| | |
| | | } |
| | | rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getId, one.getId()) |
| | | .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_CAR)); |
| | | |
| | | } |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void rawStorageFinish() throws Exception { |
| | | ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.reportWord"); |
| | | String value = entity.getValue() + ""; |
| | | S7Data S7DataWL1 = s7Serializer.read(S7Data.class); |
| | | String value = S7DataWL1.getReportWord().toString(); |
| | | // ReadWriteEntity entity = miloService.readFromOpcUa("CC.CC.reportWord"); |
| | | // String value = entity.getValue() + ""; |
| | | if ("0".equals(value)) { |
| | | log.info("当前任务未汇报,结束本次任务"); |
| | | return; |
| | |
| | | } |
| | | RawGlassStorageTask task = rawGlassStorageTaskService.getOne(new LambdaQueryWrapper<RawGlassStorageTask>() |
| | | .in(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_NEW)); |
| | | RawGlassStorageDetails targetDetails = generateDetails(details, task.getEndSlot()); |
| | | RawGlassStorageDetails targetDetails = rawGlassStorageDetailsService.generateDetails(details, task.getEndSlot()); |
| | | int deviceId = details.getDeviceId(); |
| | | Integer taskType = task.getTaskType(); |
| | | if ("1".equals(value)) { |
| | |
| | | .set(RawGlassStorageTask::getTaskState, Const.RAW_GLASS_TASK_FAILURE)); |
| | | |
| | | } |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | list.add(generateReadWriteEntity("CC.CC.confirmation", 1)); |
| | | miloService.writeToOpcWord(list); |
| | | S7Data s7Data = new S7Data(); |
| | | s7Data.setConfirmation((short) 1); |
| | | s7Serializer.write(s7Data); |
| | | // List<ReadWriteEntity> list = new ArrayList<>(); |
| | | // list.add(generateReadWriteEntity("CC.CC.confirmation", 1)); |
| | | // miloService.writeToOpcWord(list); |
| | | } |
| | | |
| | | private boolean isHasRunningTask() { |
| | |
| | | } |
| | | //生成复位任务 |
| | | |
| | | rawGlassStorageDetailsService.generateTask(rawGlassList.get(0).getSlot(), rawGlassList.get(0).getShelf(), rawGlassList.get(0).getShelf(), rawGlassList.get(0).getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH); |
| | | // rawGlassStorageDetailsService.generatask(rawGlassList.get(0).getSlot(), rawGlassList.get(0).getShelf(), rawGlassList.get(0).getShelf(), rawGlassList.get(0).getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH); |
| | | |
| | | // List<ReadWriteEntity> list = new ArrayList<>(); |
| | | // list.add(generateReadWriteEntity("CC.CC.taskWord", 1)); |
| | |
| | | return Boolean.FALSE; |
| | | } |
| | | |
| | | |
| | | List<RawGlassStorageDetails> loadStationList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>() |
| | | .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1") |
| | | .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) |
| | |
| | | if (CollectionUtils.isEmpty(loadStationList)) { |
| | | log.info("1号上片位生成调度任务"); |
| | | RawGlassStorageDetails rawDetails = getRawGlassStorageDetailsBySize(usageVOS.get(0), usageVOS.size()); |
| | | if (CollectionUtils.isEmpty(loadStationList)) { |
| | | log.info("仓库内无匹配的玻璃"); |
| | | return Boolean.FALSE; |
| | | } |
| | | rawGlassStorageDetailsService.generateTask(rawDetails.getSlot(), loadStation.get(0), rawDetails.getShelf(), rawDetails.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_DISPATCH); |
| | | //结束调度任务 修改工位状态(起始位)状态为103 RAW_GLASS_STATE_RUNNING 任务完成后将状态改为101 目标位新增一条数据,架子号为(起始位) |
| | | rawGlassStorageDetailsService.update(new LambdaUpdateWrapper<RawGlassStorageDetails>() |
| | |
| | | log.info("2号上片位玻璃尺寸不一致,1号上片位生成调度任务"); |
| | | //按照尺寸及数量获取数量最接近的格子信息 |
| | | RawGlassStorageDetails rawDetails = getRawGlassStorageDetailsBySize(usageVOS.get(0), usageVOS.size()); |
| | | if(null == rawDetails){ |
| | | if (null == rawDetails) { |
| | | log.info("仓库内无需要上架的玻璃"); |
| | | return Boolean.FALSE; |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | private RawGlassStorageDetails generateDetails(RawGlassStorageDetails details, Integer targetSlot) { |
| | | RawGlassStorageDetails targetDetails = new RawGlassStorageDetails(); |
| | | RawGlassStorageStation station = rawGlassStorageStationService.getOne(new LambdaQueryWrapper<RawGlassStorageStation>() |
| | | .eq(RawGlassStorageStation::getSlot, targetSlot)); |
| | | targetDetails.setDeviceId(station.getDeviceId()); |
| | | targetDetails.setSlot(targetSlot); |
| | | targetDetails.setShelf(details.getShelf()); |
| | | targetDetails.setPatternWidth(details.getPatternWidth()); |
| | | targetDetails.setPatternHeight(details.getPatternHeight()); |
| | | targetDetails.setPatternThickness(details.getPatternThickness()); |
| | | targetDetails.setFilmsId(details.getFilmsId()); |
| | | targetDetails.setRemainQuantity(details.getRemainQuantity()); |
| | | targetDetails.setCreateTime(new Date()); |
| | | targetDetails.setState(Const.RAW_GLASS_STATE_IN); |
| | | return targetDetails; |
| | | } |
| | | |
| | | |
| | | private ReadWriteEntity generateReadWriteEntity(String identifier, int value) { |
| | | ReadWriteEntity readWriteEntity = new ReadWriteEntity(); |
| | | readWriteEntity.setIdentifier(identifier); |
| | |
| | | .eq(RawGlassStorageDetails::getPatternWidth, usageVO.getWidth()) |
| | | .eq(RawGlassStorageDetails::getPatternHeight, usageVO.getHeight()) |
| | | .eq(RawGlassStorageDetails::getPatternThickness, usageVO.getThickness()) |
| | | .notIn(RawGlassStorageDetails::getSlot, LOAD_STATION_ALL) |
| | | .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN) |
| | | .orderByAsc(RawGlassStorageDetails::getRemainQuantity) |
| | | .last("order by abs(t.remain_quantity - " + remainQuantity + ") asc") |