| | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.entity.WrkDetl; |
| | | import com.zy.asrs.entity.WrkLastno; |
| | | import com.zy.asrs.entity.WrkMast; |
| | | import com.zy.asrs.entity.param.TaskCreateParam; |
| | | import com.zy.asrs.entity.param.TaskStatusFeedbackParam; |
| | | import com.zy.asrs.service.ApiLogService; |
| | | import com.zy.asrs.service.OpenService; |
| | | import com.zy.asrs.service.WrkDetlService; |
| | | import com.zy.asrs.service.WrkMastService; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.common.service.CommonService; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import com.zy.core.cache.MessageQueue; |
| | |
| | | |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | |
| | | @Autowired |
| | | private WrkLastnoService wrkLastnoService; |
| | | @Autowired |
| | | private RowLastnoService rowLastnoService; |
| | | @Autowired |
| | | private CommonService commonService; |
| | | |
| | |
| | | |
| | | @Autowired |
| | | private WrkDetlService wrkDetlService; |
| | | |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | @Autowired |
| | | private SlaveProperties slaveProperties; |
| | | |
| | |
| | | } |
| | | return false; |
| | | } |
| | | /** |
| | | * 生成工作号 |
| | | * |
| | | * @param wrkMk |
| | | * @return workNo(工作号) |
| | | */ |
| | | public int getWorkNo(Integer wrkMk) { |
| | | WrkLastno wrkLastno = wrkLastnoService.selectById(wrkMk); |
| | | if (Cools.isEmpty(wrkLastno)) { |
| | | throw new CoolException("数据异常,请联系管理员"); |
| | | } |
| | | |
| | | int workNo = wrkLastno.getWrkNo(); |
| | | int sNo = wrkLastno.getSNo(); |
| | | int eNo = wrkLastno.getENo(); |
| | | workNo = workNo >= eNo ? sNo : workNo + 1; |
| | | while (true) { |
| | | WrkMast wrkMast = wrkMastService.selectById(workNo); |
| | | if (null != wrkMast) { |
| | | workNo = workNo >= eNo ? sNo : workNo + 1; |
| | | } else { |
| | | break; |
| | | } |
| | | } |
| | | // 修改序号记录 |
| | | if (workNo > 0) { |
| | | wrkLastno.setWrkNo(workNo); |
| | | wrkLastnoService.updateById(wrkLastno); |
| | | } |
| | | // 检验 |
| | | if (workNo == 0) { |
| | | throw new CoolException("生成工作号失败,请联系管理员"); |
| | | } else { |
| | | if (wrkMastService.selectById(workNo) != null) { |
| | | throw new CoolException("生成工作号" + workNo + "在工作档中已存在"); |
| | | } |
| | | } |
| | | return workNo; |
| | | } |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean taskCreate(TaskCreateParam param) { |
| | |
| | | //21:拣选出库 22:拣选入库 |
| | | //31:盘点出库 32:盘点入库 |
| | | switch (param.getIoType()){ |
| | | case 1: Inbound = false;break; |
| | | case 2 : Inbound = true;break; |
| | | case 3: Inbound = false;break; |
| | | case 1: Inbound = false;ioType = 101;break; |
| | | case 2 : Inbound = true;ioType = 1;break; |
| | | case 3: Inbound = false;ioType = 11;break; |
| | | case 11: Inbound = false;ioType = 110;break; |
| | | case 12: Inbound = true;break; |
| | | case 12: Inbound = true;ioType = 10;break; |
| | | case 21: Inbound = false;ioType = 103;break; |
| | | case 22: Inbound = true;break; |
| | | case 22: Inbound = true;ioType = 53;break; |
| | | case 31: Inbound = false;ioType = 107;break; |
| | | case 32: Inbound = true;break; |
| | | case 32: Inbound = true;ioType = 57;break; |
| | | } |
| | | // 2. 保存WrkMast |
| | | WrkMast wrkMast = new WrkMast(); |
| | | |
| | | int workNo = getWorkNo(0); |
| | | if(param.getIoType() == 2 || param.getIoType() == 12){ |
| | | wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo())); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setUserNo(param.getTaskNo()); |
| | | wrkMast.setIoType(param.getIoType() != 2?10:1); |
| | | wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0); |
| | | wrkMast.setBarcode(param.getBarcode()); |
| | |
| | | }else if(param.getIoType() == 22 || param.getIoType() == 32){ |
| | | wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("barcode",param.getBarcode())); |
| | | wrkMast.setWrkSts(param.getIoType() != 32 ? 53L: 57L); |
| | | wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo())); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setUserNo(param.getTaskNo()); |
| | | wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0); |
| | | wrkMast.setBarcode(param.getBarcode()); |
| | | wrkMast.setMemo(param.getMemo()); |
| | |
| | | wrkMast.setLocNo(param.getTargetLocNo()); |
| | | wrkMast.setSourceLocNo(param.getSourceLocNo()); |
| | | }else if(param.getIoType() == 3){ |
| | | wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo())); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setUserNo(param.getTaskNo()); |
| | | wrkMast.setIoType(11); |
| | | wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 12.0); |
| | | wrkMast.setBarcode(param.getBarcode()); |
| | |
| | | wrkMast.setLocNo(param.getTargetLocNo()); |
| | | wrkMast.setSourceLocNo(param.getSourceLocNo()); |
| | | }else{ |
| | | wrkMast.setWrkNo(Integer.valueOf(param.getTaskNo())); |
| | | wrkMast.setWrkNo(workNo); |
| | | wrkMast.setUserNo(param.getTaskNo()); |
| | | wrkMast.setIoType(ioType); |
| | | wrkMast.setIoPri(param.getTaskPriority() != null ? param.getTaskPriority().doubleValue() : 11.0); |
| | | wrkMast.setBarcode(param.getBarcode()); |
| | |
| | | }else{ |
| | | wrkMast.setWrkSts(11L); |
| | | } |
| | | String locNo = null; |
| | | if (param.getSourceLocNo() != null && !param.getSourceLocNo().isEmpty()) { |
| | | locNo = param.getSourceLocNo(); |
| | | } |
| | | if (param.getTargetLocNo() != null && !param.getTargetLocNo().isEmpty()) { |
| | | locNo = param.getTargetLocNo(); |
| | | } |
| | | // 取前两位 |
| | | int rowNo = Integer.parseInt(locNo.substring(0, 2)); |
| | | |
| | | int crnNo; |
| | | |
| | | if (rowNo >= 1 && rowNo <= 4) { |
| | | crnNo = 1; |
| | | } else if (rowNo >= 5 && rowNo <= 8) { |
| | | crnNo = 2; |
| | | } else if (rowNo >= 9 && rowNo <= 10) { |
| | | crnNo = 3; |
| | | } else if (rowNo >= 11 && rowNo <= 14) { |
| | | crnNo = 4; |
| | | } else { |
| | | throw new IllegalArgumentException("排号超出范围: " + rowNo); |
| | | } |
| | | |
| | | wrkMast.setCrnNo(crnNo); |
| | | wrkMast.setIoTime(new Date()); |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMast.setAppeTime(new Date()); |
| | | wrkMast.setWrkDate(new Date()); |
| | | |
| | | wrkMastService.insert(wrkMast); |
| | | if(param.getIoType() == 22 || param.getIoType() == 32){ |
| | | wrkMastService.updateById(wrkMast); |
| | | }else{ |
| | | wrkMastService.insert(wrkMast); |
| | | } |
| | | |
| | | // 3. 保存WrkDetl |
| | | if (param.getDetlList() != null && !param.getDetlList().isEmpty()) { |
| | |
| | | wrkDetlService.insert(wrkDetl); |
| | | } |
| | | } |
| | | |
| | | if(param.getIoType() == 2 || param.getIoType() == 12){ |
| | | locMastService.updateLocMast(param.getTargetLocNo(),"S"); |
| | | }else if(param.getIoType() == 3){ |
| | | locMastService.updateLocMast(param.getSourceLocNo(),"R"); |
| | | locMastService.updateLocMast(param.getTargetLocNo(),"S"); |
| | | }else if(param.getIoType() == 22 || param.getIoType() == 32){ |
| | | locMastService.updateLocMast(param.getTargetLocNo(),"Q"); |
| | | }else if(param.getIoType() == 1 || param.getIoType() == 11){ |
| | | locMastService.updateLocMast(param.getSourceLocNo(),"R" ); |
| | | }else{ |
| | | locMastService.updateLocMast(param.getSourceLocNo(),"P" ); |
| | | } |
| | | |
| | | // 4. 下发给PLC |
| | | if(Inbound){ |
| | | writeToPlc(wrkMast); |
| | |
| | | } |
| | | |
| | | return true; |
| | | } catch (Exception e) { |
| | | log.error("任务下发异常", e); |
| | | } catch (Exception e) { log.error("任务下发异常", e); |
| | | try { |
| | | apiLogService.save("任务下发", |
| | | "/taskCreate", |
| | |
| | | if (devpThread == null) continue; |
| | | |
| | | // 检查该PLC是否管理该站点 |
| | | if (devpThread.getStation().containsKey(sourceStaNo.shortValue())) { |
| | | StaProtocol staProtocol = devpThread.getStation().get(sourceStaNo.shortValue()); |
| | | if (staProtocol != null && staProtocol.getWorkNo() == 9998) { |
| | | if (devpThread.getStation().containsKey(sourceStaNo)) { |
| | | StaProtocol staProtocol = devpThread.getStation().get(sourceStaNo); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | if (staProtocol != null && staProtocol.getWorkNo() == 9999) { |
| | | |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | if (wrkMast.getStaNo() != null) { |
| | |
| | | } |
| | | |
| | | // 下发PLC指令 |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false, 283); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false, 9999); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | |
| | | if (result) { |