| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.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.common.config.ConstSysConfig; |
| | | import com.mes.damage.service.DamageService; |
| | | import com.mes.edgglasstask.entity.EdgGlassTaskInfo; |
| | | import com.mes.edgglasstask.service.EdgGlassTaskInfoService; |
| | |
| | | import com.mes.opctask.entity.EdgStorageDeviceTaskHistory; |
| | | import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService; |
| | | import com.mes.opctask.service.EdgStorageDeviceTaskService; |
| | | import com.mes.s7.entity.S7DataMB; |
| | | import com.mes.s7.entity.S7DataWL; |
| | | import com.mes.s7.entity.S7DataWLExtra; |
| | | import com.mes.sysconfig.service.SysConfigService; |
| | | import io.swagger.models.auth.In; |
| | | 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.beans.factory.annotation.Qualifier; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | |
| | | EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService; |
| | | @Resource |
| | | DamageService damageService; |
| | | @Resource |
| | | SysConfigService sysConfigService; |
| | | |
| | | @Value("${mes.glassGap}") |
| | | private int glassGap; |
| | | @Value("${mes.threshold}") |
| | | @Autowired |
| | | @Qualifier("s7SerializerWLOne") |
| | | private S7Serializer s7SerializerWLOne; |
| | | |
| | | @Autowired |
| | | @Qualifier("s7SerializerWLTwo") |
| | | private S7Serializer s7SerializerWLTwo; |
| | | |
| | | @Autowired |
| | | @Qualifier("s7SerializerMBOne") |
| | | private S7Serializer s7SerializerMBOne; |
| | | |
| | | @Autowired |
| | | @Qualifier("s7SerializerMBTwo") |
| | | private S7Serializer s7SerializerMBTwo; |
| | | |
| | | // @Value("${mes.threshold}") |
| | | private int threshold; |
| | | @Value("${mes.cellLength}") |
| | | // @Value("${mes.cellLength}") |
| | | private int cellLength; |
| | | @Value("${mes.ratio}") |
| | | // @Value("${mes.ratio}") |
| | | private int ratio; |
| | | |
| | | @Value("${mes.min.one.firstLength}") |
| | | // @Value("${mes.min.one.firstLength}") |
| | | private int minOneFirstLength; |
| | | |
| | | @Value("${mes.min.one.secondLength}") |
| | | // |
| | | // @Value("${mes.min.one.secondLength}") |
| | | private int minOneSecondLength; |
| | | |
| | | @Value("${mes.min.two.firstLength}") |
| | | // |
| | | // @Value("${mes.min.two.firstLength}") |
| | | private int minTwoFirstLength; |
| | | |
| | | @Value("${mes.min.two.secondLength}") |
| | | // |
| | | // @Value("${mes.min.two.secondLength}") |
| | | private int minTwoSecondLength; |
| | | |
| | | @Value("${mes.max.firstLength}") |
| | | // |
| | | // @Value("${mes.max.firstLength}") |
| | | private int maxTwoFirstLength; |
| | | |
| | | @Value("${mes.max.secondLength}") |
| | | // |
| | | // @Value("${mes.max.secondLength}") |
| | | private int maxTwoSecondLength; |
| | | |
| | | @Value("${mes.maxThickness}") |
| | | // |
| | | // @Value("${mes.maxThickness}") |
| | | private int maxThickness; |
| | | |
| | | private String glassInIdOne = ""; |
| | |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void startOneOpcTask() throws Exception { |
| | | S7DataWL s7DataWLTwo = s7SerializerWLTwo.read(S7DataWL.class); |
| | | S7DataWL s7DataWLOne = s7SerializerWLOne.read(S7DataWL.class); |
| | | log.info("二线卧理: {}", s7DataWLTwo); |
| | | //获取第二条线路的卧式理片笼状态 |
| | | ReadWriteEntity twoInkageEntity = miloService.readFromOpcUa("WL2.WL2.deviceState"); |
| | | // ReadWriteEntity twoInkageEntity = miloService.readFromOpcUa("WL2.WL2.deviceState"); |
| | | Boolean twoInkageEntity = s7DataWLTwo.getDeviceState(); |
| | | //默认只跑一台卧式理片,两条线路都可以走 |
| | | int cellFlag = 1; |
| | | //如果两条线都启动则只能跑一条线 |
| | | if (twoInkageEntity != null && !Boolean.parseBoolean(twoInkageEntity.getValue() + "")) { |
| | | // if (twoInkageEntity != null && !Boolean.parseBoolean(twoInkageEntity.getValue() + "")) { |
| | | if (twoInkageEntity != null && !twoInkageEntity) { |
| | | cellFlag = 2; |
| | | } |
| | | startOneOpcTaskChild(EDG_STORAGE_DEVICE_ONE_TASK, 1, cellFlag); |
| | | startOneOpcTaskChild(s7DataWLOne, 1, cellFlag); |
| | | } |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void startTwoOpcTask() throws Exception { |
| | | ReadWriteEntity oneInkageEntity = miloService.readFromOpcUa("WL1.WL1.deviceState"); |
| | | S7DataWL s7DataWLOne = s7SerializerWLOne.read(S7DataWL.class); |
| | | S7DataWL s7DataWLTwo = s7SerializerWLTwo.read(S7DataWL.class); |
| | | log.info("一线卧理: {}", s7DataWLOne); |
| | | // ReadWriteEntity oneInkageEntity = miloService.readFromOpcUa("WL1.WL1.deviceState"); |
| | | Boolean oneInkageEntity = s7DataWLOne.getDeviceState(); |
| | | int cellFlag = 1; |
| | | if (oneInkageEntity != null && !Boolean.parseBoolean(oneInkageEntity.getValue() + "")) { |
| | | // if (oneInkageEntity != null && !Boolean.parseBoolean(oneInkageEntity.getValue() + "")) { |
| | | if (oneInkageEntity != null && !oneInkageEntity) { |
| | | cellFlag = 2; |
| | | } |
| | | startOneOpcTaskChild(EDG_STORAGE_DEVICE_TWO_TASK, 2, cellFlag); |
| | | startOneOpcTaskChild(s7DataWLTwo, 2, cellFlag); |
| | | } |
| | | |
| | | private void startOneOpcTaskChild(String tableName, int device, int cellFlag) throws Exception { |
| | | EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName); |
| | | // private void startOneOpcTaskChild(String tableName, int device, int cellFlag) throws Exception { |
| | | private void startOneOpcTaskChild(S7DataWL task, int device, int cellFlag) throws Exception { |
| | | threshold = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_THRESHOLD); |
| | | cellLength = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_CELL_LENGTH); |
| | | ratio = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_RATIO); |
| | | minOneFirstLength = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_MIN_ONE_FIRST_LENGTH); |
| | | minOneSecondLength = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_MIN_ONE_SECOND_LENGTH); |
| | | minTwoFirstLength = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_MIN_TWO_FIRST_LENGTH); |
| | | minTwoSecondLength = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_MIN_TWO_SECOND_LENGTH); |
| | | maxTwoFirstLength = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_MAX_FIRST_LENGTH); |
| | | maxTwoSecondLength = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_MAX_SECOND_LENGTH); |
| | | maxThickness = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_MAX_THICKNESS); |
| | | |
| | | // EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName); |
| | | |
| | | if (task == null) { |
| | | log.info("任务表基础数据录入失败,请检查数据是否录入成功"); |
| | | return; |
| | |
| | | //进片任务 |
| | | log.info("设备:{}状态:{}", device, request); |
| | | log.info("进片任务:进片玻璃id为:{}", task.getGlassIdIn()); |
| | | intoTask(task, tableName, device); |
| | | intoTask(task, "", device); |
| | | } else if (request == 2 && taskRunning == 0) { |
| | | //出片任务 |
| | | outTask(task, tableName, device, cellFlag); |
| | | outTask(task, "", device, cellFlag); |
| | | } else if (request == 3 && taskRunning == 0) { |
| | | //直通任务 |
| | | log.info("设备:{}状态:{}", device, request); |
| | | if (!outTask(task, tableName, device, cellFlag)) { |
| | | intoTask(task, tableName, device); |
| | | if (!outTask(task, "", device, cellFlag)) { |
| | | intoTask(task, "", device); |
| | | } |
| | | } else if (request == 4) { |
| | | log.info("设备:{}状态:{}", device, request); |
| | | log.info("将启动子改为4"); |
| | | task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING); |
| | | edgStorageDeviceTaskService.updateTaskMessage(tableName, task); |
| | | // task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING); |
| | | // edgStorageDeviceTaskService.updateTaskMessage(tableName, task); |
| | | if (device == 2) { |
| | | s7SerializerWLTwo.write(S7DataWL.builder().taskRunning(Const.GLASS_CACHE_TYPE_RUNNING.shortValue()).build()); |
| | | } else { |
| | | s7SerializerWLOne.write(S7DataWL.builder().taskRunning(Const.GLASS_CACHE_TYPE_RUNNING.shortValue()).build()); |
| | | } |
| | | |
| | | } else if (request == 5) { |
| | | log.info("设备:{}状态:{}", device, request); |
| | | finishTask(task, tableName, device); |
| | | finishTask(task, "", device); |
| | | } else { |
| | | log.info("玻璃异常处理"); |
| | | damageTask(task, tableName, device); |
| | | damageTask(task, "", device); |
| | | } |
| | | // } catch(Exception e) |
| | | // |
| | |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void edgOneOpcTask() throws Exception { |
| | | EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK); |
| | | String glassId = task.getGlassId(); |
| | | // EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK); |
| | | // String glassId = task.getGlassId(); |
| | | S7DataWL s7DataWLOne = s7SerializerWLOne.read(S7DataWL.class); |
| | | String glassId = s7DataWLOne.getGlassId(); |
| | | if (StringUtils.isBlank(glassId) || glassId.equals(glassIdOne)) { |
| | | log.info("{}号线磨边前玻璃未就位,结束本次任务", 1); |
| | | return; |
| | |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void edgTwoOpcTask() throws Exception { |
| | | EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_TWO_TASK); |
| | | String glassId = task.getGlassId(); |
| | | // EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_TWO_TASK); |
| | | // String glassId = task.getGlassId(); |
| | | S7DataWL s7DataWLTwo = s7SerializerWLTwo.read(S7DataWL.class); |
| | | String glassId = s7DataWLTwo.getGlassId(); |
| | | if (StringUtils.isBlank(glassId) || glassId.equals(glassIdTwo)) { |
| | | log.info("{}号线磨边前玻璃未就位,结束本次任务", 2); |
| | | return; |
| | |
| | | } |
| | | |
| | | private void edgTaskChild(String glassId, int cell) throws Exception { |
| | | ratio = sysConfigService.queryConfigValue(ConstSysConfig.CACHE_RATIO); |
| | | GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId).last("limit 1")); |
| | | if (glassInfo == null) { |
| | | log.info("对列表中的玻璃id错误,请检查数据,玻璃id:{}", glassId); |
| | | return; |
| | | } |
| | | String toEndingId = glassInfo.getTemperingLayoutId() + "" + glassInfo.getTemperingFeedSequence(); |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | // list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".mesControl", true)); |
| | | list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".glassId", Integer.parseInt(toEndingId))); |
| | | list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".toEdingId", Integer.parseInt(toEndingId))); |
| | | list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".width", (int) Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10))); |
| | | list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".height", (int) Math.min(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10))); |
| | | // List<ReadWriteEntity> list = new ArrayList<>(); |
| | | //// list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".mesControl", true)); |
| | | // list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".glassId", Integer.parseInt(toEndingId))); |
| | | // list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".toEdingId", Integer.parseInt(toEndingId))); |
| | | // list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".width", (int) Math.max(glassInfo.getWidth() * ratio, glassInfo.getHeight() * ratio))); |
| | | // list.add(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".height", (int) Math.min(glassInfo.getWidth() * ratio, glassInfo.getHeight() * ratio))); |
| | | // |
| | | // miloService.writeToOpcUa(list); |
| | | // miloService.writeToOpcWord(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".thickness", (int) glassInfo.getThickness() * ratio)); |
| | | S7DataMB s7DataMB = new S7DataMB(); |
| | | s7DataMB.setToEdingId(Integer.parseInt(toEndingId)); |
| | | s7DataMB.setGlassId(Integer.parseInt(toEndingId)); |
| | | s7DataMB.setWidth((int) Math.max(glassInfo.getWidth() * ratio, glassInfo.getHeight() * ratio)); |
| | | s7DataMB.setHeight((int) Math.min(glassInfo.getWidth() * ratio, glassInfo.getHeight() * ratio)); |
| | | s7SerializerMBOne.write(s7DataMB); |
| | | |
| | | miloService.writeToOpcUa(list); |
| | | miloService.writeToOpcWord(generateReadWriteEntity("MB" + cell + ".MB" + cell + ".thickness", (int) glassInfo.getThickness() * 10)); |
| | | s7DataMB = new S7DataMB(); |
| | | s7DataMB.setThickness((short) (glassInfo.getThickness() * ratio)); |
| | | if (cell == 1) { |
| | | s7SerializerMBOne.write(s7DataMB); |
| | | } else { |
| | | s7SerializerMBTwo.write(s7DataMB); |
| | | } |
| | | //修改磨边对列中的磨边线路及状态 |
| | | edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>() |
| | | .set(EdgGlassTaskInfo::getLine, cell) |
| | |
| | | } |
| | | } |
| | | |
| | | private boolean intoTask(EdgStorageDeviceTask task, String tableName, int deviceId) { |
| | | private boolean intoTask(S7DataWL task, String tableName, int deviceId) { |
| | | Date startDate = new Date(); |
| | | log.info("开始执行进片任务,任务信息为:{},表名为:{},设备id:{},开始时间:{}", task, tableName, deviceId, startDate); |
| | | //获取玻璃的基本信息 |
| | |
| | | } |
| | | int firstLength = minTwoFirstLength; |
| | | int secondLength = minTwoSecondLength; |
| | | int fecondMaxLength = 2300; |
| | | if (deviceId == 1) { |
| | | firstLength = minOneFirstLength; |
| | | secondLength = minOneSecondLength; |
| | | fecondMaxLength = 2500; |
| | | } |
| | | if (Math.max(glassInfo.getWidth(), glassInfo.getHeight()) < firstLength || Math.min(glassInfo.getWidth(), glassInfo.getHeight()) < secondLength) { |
| | | if (Math.max(glassInfo.getWidth(), glassInfo.getHeight()) < firstLength || Math.min(glassInfo.getWidth(), glassInfo.getHeight()) < secondLength |
| | | || Math.max(glassInfo.getWidth(), glassInfo.getHeight()) > fecondMaxLength) { |
| | | log.info("进片玻璃尺寸小于{}*{},禁止进笼玻璃id:{},尺寸为{}、{}", firstLength, secondLength, task.getGlassIdIn(), glassInfo.getWidth(), glassInfo.getHeight()); |
| | | Date endDate = new Date(); |
| | | log.info("结束进片任务设备为{},结束时间为:{},共耗时:{}ms", deviceId, endDate, endDate.getTime() - startDate.getTime()); |
| | | return Boolean.FALSE; |
| | | } |
| | | EdgStorageCage edgStorageCage = edgStorageCageService.selectNearestEmpty(task.getCurrentCell(), deviceId, Boolean.FALSE); |
| | | // EdgStorageCage edgStorageCage = edgStorageCageService.selectNearestEmpty(task.getCurrentCell(), deviceId, Boolean.FALSE); |
| | | EdgStorageCage edgStorageCage = edgStorageCageService.selectNearestEmpty(Integer.parseInt(task.getCurrentCell().toString()), deviceId, Boolean.FALSE); |
| | | Assert.isTrue(null != edgStorageCage, "格子已满"); |
| | | log.info("4、将玻璃信息插入卧式理片笼,当前玻璃信息:{}", glassInfo); |
| | | EdgStorageCageDetails details = new EdgStorageCageDetails(); |
| | |
| | | edgStorageCageDetailsService.save(details); |
| | | |
| | | //更新任务信息 |
| | | task.setStartCell(edgStorageCage.getSlot()); |
| | | task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN); |
| | | edgStorageDeviceTaskService.updateTaskMessage(tableName, task); |
| | | // task.setStartCell(edgStorageCage.getSlot()); |
| | | // task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN); |
| | | // edgStorageDeviceTaskService.updateTaskMessage(tableName, task); |
| | | task.setStartCell(edgStorageCage.getSlot().shortValue()); |
| | | task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN.shortValue()); |
| | | if (deviceId == 1) { |
| | | s7SerializerWLOne.write( |
| | | S7DataWL.builder().startCell(edgStorageCage.getSlot().shortValue()) |
| | | .taskRunning(Const.GLASS_CACHE_TYPE_IN.shortValue()).build() |
| | | ); |
| | | } else { |
| | | s7SerializerWLTwo.write( |
| | | S7DataWL.builder().startCell(edgStorageCage.getSlot().shortValue()) |
| | | .taskRunning(Const.GLASS_CACHE_TYPE_IN.shortValue()).build() |
| | | ); |
| | | } |
| | | saveHistoryTask(task, deviceId); |
| | | //记录进片任务的玻璃id用于下次任务的比较,防止同一块玻璃重复执行 |
| | | if (deviceId == 1) { |
| | |
| | | return Boolean.TRUE; |
| | | } |
| | | |
| | | private boolean outTask(EdgStorageDeviceTask task, String tableName, int deviceId, int cellFlag) throws Exception { |
| | | private boolean outTask(S7DataWL task, String tableName, int deviceId, int cellFlag) throws Exception { |
| | | Date startDate = new Date(); |
| | | //获取对应的设备状态信息 |
| | | ReadWriteEntity oneOutStateEntity = miloService.readFromOpcUa("WL1.WL1.slotState"); |
| | | ReadWriteEntity twoOutStateEntity = miloService.readFromOpcUa("WL2.WL2.slotState"); |
| | | // ReadWriteEntity oneOutStateEntity = miloService.readFromOpcUa("WL1.WL1.slotState"); |
| | | // ReadWriteEntity twoOutStateEntity = miloService.readFromOpcUa("WL2.WL2.slotState"); |
| | | // ReadWriteEntity d06OutStateEntity = miloService.readFromOpcUa("WL2.WL2.d06SlotState"); |
| | | S7DataWL s7DataWLOne = s7SerializerWLOne.read(S7DataWL.class); |
| | | S7DataWL s7DataWLTwo = s7SerializerWLTwo.read(S7DataWL.class); |
| | | S7DataWLExtra s7DataWLExtraTwo = s7SerializerWLTwo.read(S7DataWLExtra.class); |
| | | Short oneOutStateEntity = s7DataWLOne.getSlotState(); |
| | | Short twoOutStateEntity = s7DataWLTwo.getSlotState(); |
| | | Short d06OutStateEntity = s7DataWLExtraTwo.getD06SlotState(); |
| | | //状态有3中情况:0空闲 1忙碌 2禁用 |
| | | String oneOutState = "2"; |
| | | String twoOutState = "2"; |
| | | if (null != oneOutStateEntity && null != oneOutStateEntity.getValue()) { |
| | | oneOutState = oneOutStateEntity.getValue().toString(); |
| | | String oneOutState = Const.OUT_DISABLE; |
| | | String twoOutState = Const.OUT_DISABLE; |
| | | String d06OutState = Const.OUT_DISABLE; |
| | | // if (null != oneOutStateEntity && null != oneOutStateEntity.getValue()) { |
| | | // oneOutState = oneOutStateEntity.getValue().toString(); |
| | | // } |
| | | if (null != oneOutStateEntity) { |
| | | oneOutState = oneOutStateEntity.toString(); |
| | | } |
| | | if (null != twoOutStateEntity && null != twoOutStateEntity.getValue()) { |
| | | twoOutState = twoOutStateEntity.getValue().toString(); |
| | | // if (null != twoOutStateEntity && null != twoOutStateEntity.getValue()) { |
| | | // twoOutState = twoOutStateEntity.getValue().toString(); |
| | | // } |
| | | if (null != twoOutStateEntity) { |
| | | twoOutState = twoOutStateEntity.toString(); |
| | | } |
| | | |
| | | if ((cellFlag == 2 && Const.OUT_BUSY.equals(oneOutState) && Const.OUT_BUSY.equals(twoOutState)) || (Const.OUT_DISABLE.equals(oneOutState) && Const.OUT_DISABLE.equals(twoOutState))) { |
| | | //两条线都为禁用则不出玻璃 |
| | | if (Const.OUT_DISABLE.equals(oneOutState) && Const.OUT_DISABLE.equals(twoOutState)) { |
| | | log.info("A09、A10为{},{}非自动状态,无法出片", oneOutState, oneOutState); |
| | | return Boolean.FALSE; |
| | | } |
| | | // if (null != d06OutStateEntity && null != d06OutStateEntity.getValue()) { |
| | | // d06OutState = d06OutStateEntity.getValue().toString(); |
| | | // } |
| | | if (null != d06OutStateEntity) { |
| | | d06OutState = d06OutStateEntity.toString(); |
| | | } |
| | | //获取d06片台状态 |
| | | // 1:一对一的情况下不需要判断d06状态 |
| | | // 2:一号线一对多的情况下,获取二号线磨边前片台D07的状态,D07非禁用时,二号线将按照D06片台状态觉得出片 |
| | | // 3:二号线一对多的情况下,获取一号线磨边前片台C08的状态,C08非禁用时,一号线将按照D06片台状态觉得出片 |
| | | if (cellFlag == 2) { |
| | | if (deviceId == 1) { |
| | | twoOutState = Const.OUT_DISABLE.equals(twoOutState) ? Const.OUT_DISABLE : d06OutState; |
| | | } else { |
| | | oneOutState = Const.OUT_DISABLE.equals(oneOutState) ? Const.OUT_DISABLE : d06OutState; |
| | | } |
| | | if (Const.OUT_BUSY.equals(oneOutState) && Const.OUT_BUSY.equals(twoOutState)) { |
| | | log.info("A09、A10为{},{}非自动状态,无法出片", oneOutState, oneOutState); |
| | | return Boolean.FALSE; |
| | | } |
| | | } |
| | | |
| | | log.info("开始执行出片/直通任务,任务信息为:{},表名为:{},设备id:{},开始时间:{},一号线状态:{},二号线状态:{}", |
| | | task, tableName, deviceId, startDate, oneOutState, twoOutState); |
| | | //获取当前需要走那条线 |
| | |
| | | return Boolean.TRUE; |
| | | } |
| | | |
| | | private boolean outChildTask(EdgStorageDeviceTask task, String tableName, int deviceId, int cell, Date startDate) { |
| | | private boolean outChildTask(S7DataWL task, String tableName, int deviceId, int cell, Date startDate) { |
| | | EdgStorageCageDetails edgStorageCageDetails = null; |
| | | |
| | | //笼内是版图相差是否超过阈值 |
| | |
| | | } |
| | | //前面已经尺寸问题处理完毕,开始计算无相同尺寸的新玻璃小片 |
| | | if (null == edgStorageCageDetails) { |
| | | edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsByLimitSize(deviceId, task.getCurrentCell(), 0, 0, |
| | | edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsByLimitSize(deviceId, Integer.parseInt(task.getCurrentCell().toString()), 0, 0, |
| | | cell, minOneFirstLength, minOneSecondLength, maxTwoFirstLength, maxTwoSecondLength, maxThickness); |
| | | } |
| | | if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) { |
| | |
| | | log.info("5、更新出片玻璃的状态为{}", Const.GLASS_STATE_OUT); |
| | | } |
| | | //生成出片任务 |
| | | task.setGlassIdOut(edgStorageCageDetails.getGlassId()); |
| | | task.setStartCell(edgStorageCageDetails.getSlot()); |
| | | task.setTaskRunning(taskType); |
| | | task.setEndCell(cell); |
| | | |
| | | edgStorageDeviceTaskService.updateTaskMessage(tableName, task); |
| | | // task.setGlassIdOut(edgStorageCageDetails.getGlassId()); |
| | | // task.setStartCell(edgStorageCageDetails.getSlot()); |
| | | // task.setTaskRunning(taskType); |
| | | // task.setEndCell(cell); |
| | | // edgStorageDeviceTaskService.updateTaskMessage(tableName, task); |
| | | if (deviceId == 1) { |
| | | s7SerializerWLOne.write( |
| | | S7DataWL.builder() |
| | | .glassIdOut(edgStorageCageDetails.getGlassId()) |
| | | .startCell(edgStorageCageDetails.getSlot().shortValue()) |
| | | .taskRunning((short) taskType) |
| | | .endCell((short) cell) |
| | | .build() |
| | | ); |
| | | } else { |
| | | s7SerializerWLTwo.write( |
| | | S7DataWL.builder() |
| | | .glassIdOut(edgStorageCageDetails.getGlassId()) |
| | | .startCell(edgStorageCageDetails.getSlot().shortValue()) |
| | | .taskRunning((short) taskType) |
| | | .endCell((short) cell) |
| | | .build() |
| | | ); |
| | | } |
| | | saveHistoryTask(task, deviceId); |
| | | //记录直通任务的玻璃id用于下次任务的比较,防止同一块玻璃重复执行 |
| | | if (3 == task.getTaskState()) { |
| | |
| | | return Boolean.TRUE; |
| | | } |
| | | |
| | | private boolean finishTask(EdgStorageDeviceTask task, String tableName, int device) { |
| | | private boolean finishTask(S7DataWL task, String tableName, int device) { |
| | | if (task.getTaskState() <= 4) { |
| | | log.info("有正在执行的任务或这任务已执行任务状态{},任务启动情况{},结束", task.getTaskState(), task.getTaskRunning()); |
| | | return Boolean.FALSE; |
| | | } |
| | | Date startDate = new Date(); |
| | | log.info("开始执行完成任务后清除动作,任务信息为:{},表名为:{},开始时间:{}", task, tableName, startDate); |
| | | task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); |
| | | task.setGlassIdOut(""); |
| | | task.setStartCell(0); |
| | | task.setEndCell(0); |
| | | // task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); |
| | | // task.setGlassIdOut(""); |
| | | // task.setStartCell(0); |
| | | // task.setEndCell(0); |
| | | EdgStorageDeviceTaskHistory taskHistory = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>() |
| | | .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW) |
| | | .eq(EdgStorageDeviceTaskHistory::getDeviceId, device) |
| | |
| | | ); |
| | | } |
| | | //最后更新任务,保证任务前的动作都做完 |
| | | edgStorageDeviceTaskService.updateTaskMessage(tableName, task); |
| | | |
| | | // task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); |
| | | // task.setGlassIdOut(""); |
| | | // task.setStartCell(0); |
| | | // task.setEndCell(0); |
| | | // edgStorageDeviceTaskService.updateTaskMessage(tableName, task); |
| | | if (device == 1) { |
| | | s7SerializerWLOne.write( |
| | | S7DataWL.builder() |
| | | .taskRunning(Const.GLASS_CACHE_TYPE_EMPTY.shortValue()) |
| | | .glassIdOut("") |
| | | .startCell((short) 0) |
| | | .endCell((short) 0) |
| | | .build() |
| | | ); |
| | | } else { |
| | | s7SerializerWLTwo.write( |
| | | S7DataWL.builder() |
| | | .taskRunning(Const.GLASS_CACHE_TYPE_EMPTY.shortValue()) |
| | | .glassIdOut("") |
| | | .startCell((short) 0) |
| | | .endCell((short) 0) |
| | | .build() |
| | | ); |
| | | } |
| | | Date endDate = new Date(); |
| | | log.info("结束完成任务后清除动作,表名为:{},结束时间为:{},共耗时:{}ms", tableName, endDate, endDate.getTime() - startDate.getTime()); |
| | | return Boolean.TRUE; |
| | | } |
| | | |
| | | private boolean damageTask(EdgStorageDeviceTask task, String tableName, int device) { |
| | | private boolean damageTask(S7DataWL task, String tableName, int device) { |
| | | if (task.getTaskState() <= 5) { |
| | | log.info("任务未发生异常清空,任务结束,电气状态{},mes状态{}", task.getTaskState(), task.getTaskRunning()); |
| | | return Boolean.FALSE; |
| | |
| | | ); |
| | | } |
| | | //最后更新任务,保证任务前的动作都做完 |
| | | task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); |
| | | task.setGlassIdOut(""); |
| | | task.setStartCell(0); |
| | | task.setEndCell(0); |
| | | edgStorageDeviceTaskService.updateTaskMessage(tableName, task); |
| | | // task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY); |
| | | // task.setGlassIdOut(""); |
| | | // task.setStartCell(0); |
| | | // task.setEndCell(0); |
| | | // edgStorageDeviceTaskService.updateTaskMessage(tableName, task); |
| | | if (device == 1) { |
| | | s7SerializerWLOne.write( |
| | | S7DataWL.builder() |
| | | .taskRunning(Const.GLASS_CACHE_TYPE_EMPTY.shortValue()) |
| | | .glassIdOut("") |
| | | .startCell((short) 0) |
| | | .endCell((short) 0) |
| | | .build() |
| | | ); |
| | | } else { |
| | | s7SerializerWLTwo.write( |
| | | S7DataWL.builder() |
| | | .taskRunning(Const.GLASS_CACHE_TYPE_EMPTY.shortValue()) |
| | | .glassIdOut("") |
| | | .startCell((short) 0) |
| | | .endCell((short) 0) |
| | | .build() |
| | | ); |
| | | } |
| | | Date endDate = new Date(); |
| | | log.info("完成执行异常处理任务后清除动作,表名为:{},结束时间为:{},共耗时:{}ms", tableName, endDate, endDate.getTime() - startDate.getTime()); |
| | | return Boolean.TRUE; |
| | |
| | | } |
| | | } |
| | | |
| | | public boolean saveHistoryTask(EdgStorageDeviceTask task, int deviceId) { |
| | | // public boolean saveHistoryTask(EdgStorageDeviceTask task, int deviceId) { |
| | | public boolean saveHistoryTask(S7DataWL task, int deviceId) { |
| | | EdgStorageDeviceTaskHistory taskHistory = new EdgStorageDeviceTaskHistory(); |
| | | BeanUtils.copyProperties(task, taskHistory); |
| | | taskHistory.setTaskType(task.getTaskRunning()); |
| | | // taskHistory.setTaskType(task.getTaskRunning()); |
| | | taskHistory.setTaskType(Integer.parseInt(task.getTaskRunning().toString())); |
| | | taskHistory.setCreateTime(new Date()); |
| | | taskHistory.setTaskState(Const.RAW_GLASS_TASK_NEW); |
| | | taskHistory.setDeviceId(deviceId); |
| | | edgStorageDeviceTaskHistoryService.save(taskHistory); |
| | | return Boolean.TRUE; |
| | | } |
| | | |
| | | public boolean updateCellRemainWidth(int slot, int device, EdgStorageDeviceTaskHistory taskHistory) { |
| | | List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, slot) |
| | | .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)); |
| | | int remainWidth = cellLength; |
| | | if (CollectionUtil.isNotEmpty(list)) { |
| | | if (2 == taskHistory.getTaskType()) { |
| | | remainWidth = 0; |
| | | } else { |
| | | for (EdgStorageCageDetails item : list) { |
| | | remainWidth = remainWidth - glassGap - (int) Math.max(item.getWidth(), item.getHeight()); |
| | | } |
| | | if (remainWidth <= 0) { |
| | | remainWidth = 0; |
| | | } |
| | | } |
| | | } |
| | | edgStorageCageService.update(new LambdaUpdateWrapper<EdgStorageCage>(). |
| | | set(EdgStorageCage::getRemainWidth, remainWidth).eq(EdgStorageCage::getSlot, slot).eq(EdgStorageCage::getDeviceId, device)); |
| | | return Boolean.TRUE; |
| | | } |
| | | |