| | |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.EmptyPlateOutParam; |
| | | import com.zy.asrs.entity.param.StockOutParam; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.common.model.LocDto; |
| | | import com.zy.common.model.OrderDto; |
| | |
| | | @Autowired |
| | | private AgvBasDevpService agvBasDevpService; |
| | | @Autowired |
| | | private AgvLocMastService agvLockMastService; |
| | | private AgvLocMastService agvLocMastService; |
| | | @Autowired |
| | | private AgvLocDetlService agvLocDetlService; |
| | | @Autowired |
| | |
| | | |
| | | agvTaskDtos.forEach(taskDto -> { |
| | | |
| | | AgvLocMast agvLocMast = agvLockMastService.selectById(taskDto.getLocNo()); |
| | | AgvLocMast agvLocMast = agvLocMastService.selectById(taskDto.getLocNo()); |
| | | AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", taskDto.getLocNo())); |
| | | |
| | | //工作档所需参数 |
| | | double anfme = taskDto.getLocDtos().get(0).getAnfme(); |
| | | long wrkSts = 21L; |
| | | String sourceLocNo = taskDto.getLocNo(); |
| | | String targetLocNo = taskDto.getAgvStaNo(); |
| | | String barcode = agvLocMast.getBarcode(); |
| | | String barcode = agvLocDetl.getZpallet(); |
| | | //明细档所需参数 |
| | | String mantr = taskDto.getLocDtos().get(0).getMatnr(); |
| | | String orderNo = taskDto.getLocDtos().get(0).getOrderNo(); |
| | |
| | | //修改订单信息 |
| | | modifyOrderDetl(taskDto.getLocDtos().get(0), userId); |
| | | //更新源站点信息 |
| | | updateAgvLocMast(agvLockMastService.selectById(sourceLocNo),"R"); |
| | | String locSts = ioType == 101 ? "R" : "P"; |
| | | updateAgvLocMast(agvLocMastService.selectById(sourceLocNo),locSts); |
| | | //更新目标站点状态 |
| | | //locSts = ioType == 101 ? "S" : "Q"; |
| | | updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo),"S"); |
| | | |
| | | }); |
| | | } |
| | | |
| | | //拣料入库 |
| | | @Transactional |
| | | public void pickIn(List<AgvWrkMast> agvWrkMastList){ |
| | | Date now = new Date(); |
| | | agvWrkMastList.forEach(agvWrkMast -> { |
| | | //修改工作党 |
| | | agvWrkMast.setWrkSts(201L); |
| | | |
| | | //根据出库类型 设置入库类型 53拣料入库 57盘点入库 |
| | | int ioType = agvWrkMast.getIoType() == 103 ? 53 : 57; |
| | | |
| | | agvWrkMast.setIoType(ioType); |
| | | String locNo = agvWrkMast.getLocNo(); |
| | | agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo()); |
| | | agvWrkMast.setSourceLocNo(locNo); |
| | | agvWrkMast.setIoTime(now); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | |
| | | AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); |
| | | AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getLocNo()); |
| | | AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocMast.getLocNo())); |
| | | AgvBasDevp agvBasDevp = agvBasDevpService.selectById(agvWrkMast.getSourceLocNo()); |
| | | |
| | | //拣料入库 |
| | | if(ioType == 53){ |
| | | //修改工作党明细 |
| | | agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme()); |
| | | agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo())); |
| | | //修改库存信息 |
| | | agvLocDetl.setAnfme(agvWrkDetl.getAnfme()); |
| | | agvLocDetlService.update(agvLocDetl,new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocDetl.getLocNo())); |
| | | } |
| | | //修改库位信息 |
| | | updateAgvLocMast(agvLocMast,"Q"); |
| | | //修改站点信息 |
| | | updateAgvBasDevp(agvBasDevp,"R"); |
| | | |
| | | }); |
| | | } |
| | | |
| | | /* |
| | | 盘点出库 |
| | | */ |
| | | @Transactional |
| | | public void locCheckOut(StockOutParam param, Long userId) { |
| | | String station = param.getStation(); |
| | | List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>() |
| | | .eq("station_code", station) |
| | | .eq("loc_sts","O")); |
| | | |
| | | if(param.getLocDetls().size() > agvBasDevpList.size()){ |
| | | throw new CoolException("当前站点可用缓存货架数量为" + agvBasDevpList.size() + ",少于需要盘点出库库位数量,请重新选择盘点库位"); |
| | | } |
| | | |
| | | param.getLocDetls().forEach(locDetl -> { |
| | | AgvLocMast agvLocMast = agvLocMastService.selectById(locDetl.getLocNo()); |
| | | AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", locDetl.getLocNo())); |
| | | AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>() |
| | | .eq("station_code", station) |
| | | .eq("loc_sts","O")); |
| | | Date now = new Date(); |
| | | |
| | | //生成工作党 |
| | | AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getZpallet(), now, userId); |
| | | //生成工作明细档 |
| | | createWrkDetlReWrite(locDetl.getMatnr(),wrkMast.getWrkNo(),null,locDetl.getBatch(),locDetl.getCount(),wrkMast.getBarcode(),now,userId); |
| | | //修改库位信息 |
| | | updateAgvLocMast(agvLocMast,"P"); |
| | | //修改站点信息 |
| | | updateAgvBasDevp(agvBasDevp,"S"); |
| | | |
| | | }); |
| | | |
| | | } |
| | | |
| | | /* |
| | | 库位移转 |
| | | */ |
| | | @Transactional |
| | | public void locMove(String sourceLocNo, String targetLocNo, Long userId) { |
| | | AgvLocMast sourceLocMast = agvLocMastService.selectById(sourceLocNo); |
| | | AgvLocMast targetLocMast = agvLocMastService.selectById(targetLocNo); |
| | | AgvLocDetl sourceLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", sourceLocMast.getLocNo())); |
| | | |
| | | if(!sourceLocMast.getLocSts().equals("F")){ |
| | | throw new CoolException(sourceLocMast.getLocNo() + "源库位出库失败,状态:"+sourceLocMast.getLocSts$()); |
| | | } |
| | | if(!targetLocMast.getLocSts().equals("O")){ |
| | | throw new CoolException("移转失败,目标库位状态:"+targetLocMast.getLocSts$()); |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | //生成移库工作档 |
| | | AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getZpallet(), now, userId); |
| | | //生成工作党明细 |
| | | createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId); |
| | | //修改目标库位状态 |
| | | updateAgvLocMast(targetLocMast,"S"); |
| | | //修改原库位状态 |
| | | updateAgvLocMast(sourceLocMast,"R"); |
| | | } |
| | | |
| | | /* |
| | | 空板入库 |
| | | */ |
| | | @Transactional |
| | | public String emptyPlateIn(String sourceStaion, Long userId) { |
| | | Date now = new Date(); |
| | | // 源站点状态检测 |
| | | AgvBasDevp agvBasDevp = agvBasDevpService.selectById(sourceStaion); |
| | | if(!agvBasDevp.getLocSts().equals("O")){ |
| | | throw new CoolException("当前工作位状态为" + agvBasDevp.getLocSts()+",无法进行空板入库"); |
| | | } |
| | | // 检索库位 |
| | | AgvLocMast locMast = agvCommonService.getLocNo(null, agvBasDevp.getFloor()); |
| | | // 生成工作档 10.空板入库 |
| | | createWrkMast(10,201L,agvBasDevp.getDevNo(),locMast.getLocNo(),null,now,userId); |
| | | //更新源站点状态 |
| | | updateAgvBasDevp(agvBasDevp,"R"); |
| | | //更新目标库位状态 |
| | | updateAgvLocMast(locMast,"S"); |
| | | return locMast.getLocNo(); |
| | | } |
| | | |
| | | /* |
| | | 空板出库 |
| | | */ |
| | | @Transactional |
| | | public void emptyPlateOut(EmptyPlateOutParam param, Long userId) { |
| | | Date now = new Date(); |
| | | //判断所选工作站空余工作位数量是否满足出库数量 |
| | | List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>() |
| | | .eq("station_code", param.getStationCode()) |
| | | .eq("loc_sts","O")); |
| | | if(agvBasDevpList.size() < param.getLocNos().size()){ |
| | | throw new CoolException("当前工作站可出库工作位数量为"+ agvBasDevpList.size() + ",小于要出库的库位数量,请重新选择出库库位"); |
| | | } |
| | | param.getLocNos().forEach(locNo -> { |
| | | AgvLocMast agvLocMast = agvLocMastService.selectById(locNo); |
| | | if(!agvLocMast.getLocSts().equals("D")){ |
| | | throw new CoolException(agvLocMast.getLocNo() + "库位状态已经不为D.空桶/空栈板,请重新选择库位进行空板出库"); |
| | | } |
| | | //检索工作位 |
| | | AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>() |
| | | .eq("station_code", param.getStationCode()) |
| | | .eq("loc_sts", "O")); |
| | | //生成工作档 |
| | | createWrkMast(110,21L,locNo,agvBasDevp.getDevNo(),null,now,userId); |
| | | //修改源库位状态 |
| | | updateAgvLocMast(agvLocMast,"R"); |
| | | //修改目标工作位状态 |
| | | updateAgvBasDevp(agvBasDevp,"S"); |
| | | }); |
| | | } |
| | | |
| | |
| | | */ |
| | | private void updateAgvLocMast(AgvLocMast locMast, String locSts){ |
| | | locMast.setLocSts(locSts); |
| | | agvLockMastService.updateById(locMast); |
| | | agvLocMastService.updateById(locMast); |
| | | } |
| | | |
| | | /* |
| | |
| | | }else { |
| | | //合并出库 |
| | | List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class); |
| | | |
| | | //实际出库数量 |
| | | Double locAnfme = locDto.getAnfme(); |
| | | //订单实际出库数量 |
| | | Double orderAnfme; |
| | | |
| | | for (OrderDto orderDto : orderDtoList) { |
| | | OrderDetl orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch()); |
| | | if (orderDetl == null) { |
| | | orderDetl = orderDetlService.selectItem(orderDto.getOrderNo(), locDto.getMatnr(), null); |
| | | } |
| | | if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDto.getAnfme())) { |
| | | |
| | | if(locAnfme > orderDetl.getAnfme()){ |
| | | orderAnfme = orderDetl.getAnfme(); |
| | | locAnfme -= orderAnfme; |
| | | }else { |
| | | orderAnfme = locAnfme; |
| | | } |
| | | |
| | | if (!orderDetlService.increase(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), orderAnfme)) { |
| | | throw new CoolException("修改订单明细数量失败"); |
| | | } |
| | | orderService.updateSettle(orderDetl.getOrderId(), 2L, userId); |