| | |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.SnowflakeIdWorker; |
| | | import com.core.common.*; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.EmptyPlateOutParam; |
| | | import com.zy.asrs.entity.param.OpenOrderPakinParam; |
| | | import com.zy.asrs.entity.param.OpenOrderPakoutParam; |
| | | import com.zy.asrs.mapper.OrderDetlPakoutMapper; |
| | | import com.zy.asrs.mapper.OrderPakoutMapper; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.common.model.DetlDto; |
| | | import com.zy.common.model.LocDto; |
| | | import com.zy.common.model.TaskDto; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | |
| | | private WrkDetlService wrkDetlService; |
| | | @Autowired |
| | | private OrderDetlPakoutServiceImpl orderDetlPakoutService; |
| | | @Autowired |
| | | private LocDetlService locDetlService; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | @Autowired |
| | | private StaDescService staDescService; |
| | | @Autowired |
| | | private WorkService workService; |
| | | @Autowired |
| | | private BasDevpService basDevpService; |
| | | |
| | | @Resource |
| | | private OrderPakoutService orderPakOutService; |
| | | |
| | | @Override |
| | | public OrderPakout selectByNo(String orderNo) { |
| | |
| | | return this.baseMapper.selectOrderMoveStatusInitial(); |
| | | } |
| | | |
| | | @Override |
| | | public R pakout(List<LocDto> locDtos) { |
| | | if (Cools.isEmpty(locDtos)) { |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | List<LocDto> locDtoArrayList = new ArrayList<>(); |
| | | for (LocDto locDto : locDtos) { |
| | | if (locDto.getFrozen() != 1 && locDto.getFrozenLoc() != 1) { |
| | | locDtoArrayList.add(locDto); |
| | | } |
| | | } |
| | | locDtos = locDtoArrayList; |
| | | if (Cools.isEmpty(locDtos)) { |
| | | return R.parse("库存/库位被冻结,请处理后出库!!!"); |
| | | } |
| | | boolean lack = true; |
| | | for (LocDto locDto : locDtos) { |
| | | if (!locDto.isLack()) { |
| | | lack = false; |
| | | break; |
| | | } |
| | | } |
| | | if (lack) { |
| | | return R.error("库存不足"); |
| | | } |
| | | |
| | | List<TaskDto> taskDtos = new ArrayList<>(); |
| | | // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务 |
| | | for (LocDto locDto : locDtos) { |
| | | if (locDto.isLack()) { |
| | | continue; |
| | | } |
| | | TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto); |
| | | if (TaskDto.has(taskDtos, taskDto)) { |
| | | TaskDto dto = TaskDto.find(taskDtos, taskDto); |
| | | assert dto != null; |
| | | dto.getLocDtos().addAll(taskDto.getLocDtos()); |
| | | } else { |
| | | taskDtos.add(taskDto); |
| | | } |
| | | } |
| | | OrderPakout orderPakout = orderPakOutService.selectByNo(locDtos.get(0).getOrderNo()); |
| | | |
| | | //配盘出库单用, i=5时或者出库到最后时下发空板出库任务 |
| | | int i = 0; |
| | | //需要出库的托盘数量 |
| | | int size = taskDtos.size(); |
| | | //优先级 |
| | | int ioPri = 50; |
| | | //已下空板出库任务数量 |
| | | int j = 1; |
| | | // ----------------------------------------------------------------------------------------------- |
| | | for (TaskDto taskDto : taskDtos) { |
| | | BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo()); |
| | | workService.stockOut(staNo, taskDto, 9995L, ioPri); |
| | | ioPri--; |
| | | i++; |
| | | //配盘出库单使用,下发需要出的空板任务 |
| | | if (orderPakout.getDocType() == 11) { |
| | | if (i == size) { |
| | | for (; j <= orderPakout.getPayType(); j++) { |
| | | LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", taskDto.getLocNo())); |
| | | Integer locType = Integer.valueOf(locMast1.getLocType2()); |
| | | //配盘 出库单出库区域时Q-L4时,出大托盘空板 |
| | | if(!Cools.isEmpty(orderPakout.getCstmrName())&&orderPakout.getCstmrName().equals("Q-L4")){ |
| | | locType = 2; |
| | | } |
| | | String bar = ""; |
| | | //具体待定 |
| | | // if(!Cools.isEmpty(orderPakout.getShipCode())&&orderPakout.getShipCode().equals("A01")){ |
| | | // bar = "A01"; |
| | | // } |
| | | LocMast locMast = new LocMast(); |
| | | if (Cools.isEmpty(bar)) { |
| | | locMast = locMastService.selectOne(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "D").eq("loc_type2", locType).orderBy("row1",false)); |
| | | } else { |
| | | locMast = locMastService.selectOne(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "D").eq("loc_type2", locType).like("barcode", bar).orderBy("row1",false)); |
| | | } |
| | | |
| | | if (Cools.isEmpty(locMast)) { |
| | | return R.error("库存没有空板"); |
| | | } |
| | | String locNo = locMast.getLocNo(); |
| | | EmptyPlateOutParam emptyPlateOutParam = new EmptyPlateOutParam(); |
| | | emptyPlateOutParam.setOutSite(303); |
| | | emptyPlateOutParam.setLocNos(new ArrayList<String>() {{ |
| | | add(locNo); |
| | | }}); |
| | | String agvSta = ""; |
| | | if (locMast.getLocType3() == 2) { |
| | | agvSta = "Z-LZP26"; |
| | | }else if(locType ==2){ |
| | | |
| | | } else { |
| | | agvSta = orderPakout.getCstmrName();//agv目标站点位置 |
| | | } |
| | | WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam, ioPri, agvSta); |
| | | ioPri--; |
| | | |
| | | } |
| | | } else if (i == 4) { |
| | | LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", taskDto.getLocNo())); |
| | | Integer locType = Integer.valueOf(locMast1.getLocType2()); |
| | | //配盘 出库单出库区域时Q-L4时,出大托盘空板 |
| | | if(orderPakout.getCstmrName().equals("Q-L4")){ |
| | | locType = 2; |
| | | } |
| | | |
| | | String bar = ""; |
| | | if (!Cools.isEmpty(orderPakout.getShipCode()) && orderPakout.getShipCode().equals("A01")) { |
| | | bar = "A01"; |
| | | } |
| | | LocMast locMast = null; |
| | | if (Cools.isEmpty(bar)) { |
| | | locMast = locMastService.selectOne(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "D").eq("loc_type2", locType).orderBy("row1",false)); |
| | | } else { |
| | | locMast = locMastService.selectOne(new EntityWrapper<LocMast>() |
| | | .eq("loc_sts", "D").eq("loc_type2", locType).like("barcode", bar).orderBy("row1",false)); |
| | | } |
| | | |
| | | if (Cools.isEmpty(locMast)) { |
| | | return R.error("库存没有空板"); |
| | | } |
| | | String locNo = locMast.getLocNo(); |
| | | EmptyPlateOutParam emptyPlateOutParam = new EmptyPlateOutParam(); |
| | | emptyPlateOutParam.setOutSite(303); |
| | | emptyPlateOutParam.setLocNos(new ArrayList<String>() {{ |
| | | add(locNo); |
| | | }}); |
| | | String agvSta = ""; |
| | | if (locMast.getLocType3() == 2) { |
| | | agvSta = "Z-LZP26"; |
| | | }else if(locType ==2){ |
| | | |
| | | } else { |
| | | agvSta = orderPakout.getCstmrName();//agv目标站点位置 |
| | | } |
| | | WrkMast wrkMast = workService.emptyPlateOut(emptyPlateOutParam, ioPri, agvSta); |
| | | ioPri--; |
| | | j++; |
| | | } |
| | | } |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | } |