| | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.AgvLocDetl; |
| | | import com.zy.asrs.entity.AgvWaitPakin; |
| | | import com.zy.asrs.entity.AgvWrkDetl; |
| | | import com.zy.asrs.entity.AgvWrkMast; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import lombok.Synchronized; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | public class AgvWrkMastHandler extends AbstractHandler<String> { |
| | | |
| | | @Value("${agvBasDev.maxWorkNum}") |
| | | private int maxWrokNum; |
| | | |
| | | @Autowired |
| | | AgvWrkMastService agvWrkMastService; |
| | | private AgvWrkMastService agvWrkMastService; |
| | | @Autowired |
| | | AgvLocMastService agvLocMastService; |
| | | private AgvLocMastService agvLocMastService; |
| | | @Autowired |
| | | AgvLocDetlService agvLocDetlService; |
| | | private AgvLocDetlService agvLocDetlService; |
| | | @Autowired |
| | | AgvWrkMastLogService agvWrkMastLogService; |
| | | private AgvWrkMastLogService agvWrkMastLogService; |
| | | @Autowired |
| | | AgvWrkDetlService agvWrkDetlService; |
| | | private AgvWrkDetlService agvWrkDetlService; |
| | | @Autowired |
| | | AgvWrkDetlLogService agvWrkDetlLogService; |
| | | private AgvWrkDetlLogService agvWrkDetlLogService; |
| | | @Autowired |
| | | AgvWaitPakinService agvWaitPakinService; |
| | | private AgvWaitPakinService agvWaitPakinService; |
| | | @Autowired |
| | | AgvWaitPakinLogService agvWaitPakinLogService; |
| | | private AgvWaitPakinLogService agvWaitPakinLogService; |
| | | @Autowired |
| | | OrderService orderService; |
| | | private OrderService orderService; |
| | | @Autowired |
| | | private AgvBasDevpService agvBasDevpService; |
| | | @Autowired |
| | | private AgvWorkService agvWorkService; |
| | | |
| | | @Transactional |
| | | public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) { |
| | |
| | | //修改工作档状态为207.库存更新完成 |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | if(agvWrkMast.getIoType() == 10){ |
| | | // 空板入库 设置库位状态为D.空桶/空栈板 |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D"); |
| | | }else{ |
| | | //修改目标库位状态为F.在库 |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F"); |
| | | } |
| | | // 空板入库 设置库位状态为D.空桶/空栈板 |
| | | String locSts = agvWrkMast.getIoType() == 10 ? "D" : "F"; |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),locSts,agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | //生成AGV工作历史档 |
| | | agvWrkMastLogService.save(agvWrkMast); |
| | | //生成AGV工作明细历史档 |
| | |
| | | //更新库存明细 |
| | | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O"); |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | } |
| | | |
| | | //删除AGV工作档 |
| | |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O"); |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | if(agvWrkMast.getIoType() == 101){ |
| | | //更新目标库位明细 101.出库 删除源库位库存明细 |
| | | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); |
| | | //生成空板入库任务 |
| | | Short containerType = Short.valueOf(agvWrkMast.getBarcode().substring(0, 2)); |
| | | try { |
| | | agvWorkService.emptyPlateIn(agvWrkMast.getLocNo(),agvWrkMast.getBarcode(),containerType,9527L,true); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | log.error(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | //生成AGV工作历史档 |
| | |
| | | } |
| | | |
| | | @Transactional |
| | | public ReturnT<String> startPutWayWrk(List<AgvWrkMast> agvWrkMastList) throws IOException { |
| | | @Synchronized |
| | | public ReturnT<String> startPutWayWrk(AgvWrkMast agvWrkMast) throws IOException { |
| | | |
| | | //下发任务 |
| | | int startWrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway"); |
| | | int startWrkCode = agvWrkMastService.startWrk(agvWrkMast); |
| | | if(startWrkCode != 0){ |
| | | throw new CoolException("任务下发失败"); |
| | | } |
| | | |
| | | //下发容器入场指令 (缓存货架) |
| | | int code = agvWrkMastService.containerMoveIn(agvWrkMastList); |
| | | |
| | | if(code == 0){ |
| | | for(AgvWrkMast agvWrkMast : agvWrkMastList){ |
| | | //下发容器达到通知 (输送线) |
| | | if("Y".equals(agvWrkMast.getMk())){ |
| | | int containerArrivedCode = agvWrkMastService.containerArrived(agvWrkMast); |
| | | if(containerArrivedCode != 0){ |
| | | log.error("容器到达指令下发失败"); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | //202.RCS取货中 |
| | | agvWrkMast.setWrkSts(202L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | if(agvWrkMast.getIoType() == 1){ |
| | | //修改AGV入库通知档状态入出状态为Y |
| | | agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y"); |
| | | } |
| | | } |
| | | |
| | | return SUCCESS; |
| | | agvWrkMast.setWrkSts(202L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | if(agvWrkMast.getIoType() == 1){ |
| | | //修改AGV入库通知档状态入出状态为Y |
| | | agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y"); |
| | | } |
| | | return SUCCESS; |
| | | |
| | | return FAIL; |
| | | } |
| | | |
| | | // @Transactional |
| | | // public ReturnT<String> startCarryWrk(AgvWrkMast agvWrkMast) throws IOException { |
| | | // //log.info(agvWrkMastList.toString()); |
| | | // //任务过滤,过滤掉已存在相同目标库位的工作档 |
| | | // //agvWrkMastList = filter(agvWrkMastList); |
| | | // int code = agvWrkMastService.startWrk(agvWrkMast); |
| | | // //log.info(agvWrkMastList.toString()); |
| | | // if (Cools.isEmpty(agvWrkMastList)){ |
| | | // return SUCCESS; |
| | | // } |
| | | // if(code == 0){ |
| | | // agvWrkMastList.forEach(agvWrkMast -> { |
| | | // //202.RCS取货中 |
| | | // agvWrkMast.setWrkSts(202L); |
| | | // agvWrkMastService.updateById(agvWrkMast); |
| | | // }); |
| | | // //agvWrkMastService.updateBatchById(agvWrkMastList); |
| | | // |
| | | // return SUCCESS; |
| | | // } |
| | | // |
| | | // return FAIL; |
| | | // } |
| | | |
| | | @Synchronized |
| | | @Transactional |
| | | public ReturnT<String> startCarryWrk(List<AgvWrkMast> agvWrkMastList) throws IOException { |
| | | int code = agvWrkMastService.startWrk(agvWrkMastList,"carry"); |
| | | if(code == 0){ |
| | | agvWrkMastList.forEach(agvWrkMast -> { |
| | | //202.RCS取货中 |
| | | agvWrkMast.setWrkSts(202L); |
| | | public ReturnT<String> dealWatiWrk(List<AgvWrkMast> agvWrkMastList) throws IOException { |
| | | |
| | | agvWrkMastList.forEach(agvWrkMast -> { |
| | | //查询该站点所有暂存位在工作档中出现的次数 |
| | | List<Map<String, Object>> devNoMaps = agvBasDevpService.selectDevNoAndNumBystationCode(agvWrkMast.getLocNo()); |
| | | //取第一个暂存位,并查询其次数与配置的次数做比较 |
| | | Map<String, Object> devNoMap = devNoMaps.get(0); |
| | | if((int)devNoMap.get("num") < maxWrokNum){ |
| | | agvWrkMast.setLocNo(devNoMap.get("dev_no").toString()); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | }); |
| | | //agvWrkMastService.updateBatchById(agvWrkMastList); |
| | | log.info("after:" + devNoMap.toString() + ", wrkNo:" + agvWrkMast.getWrkNo() + ", locNo: " + agvWrkMast.getLocNo()); |
| | | } |
| | | }); |
| | | |
| | | return SUCCESS; |
| | | } |
| | | return SUCCESS; |
| | | } |
| | | |
| | | return FAIL; |
| | | @Synchronized |
| | | @Transactional |
| | | public ReturnT<String> autoEmptyOut(AgvBasDevp agvBasDevp) { |
| | | |
| | | agvWorkService.emptyPlateOut(agvBasDevp.getDevNo(),0,9527L); |
| | | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | private String getOrderNoByWrkNo(int wrkNo){ |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | private List<AgvWrkMast> filter(List<AgvWrkMast> agvWrkMastList){ |
| | | return agvWrkMastList.stream().filter(agvWrkMast -> { |
| | | AgvWrkMast agvWrkMastWroking = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("source_loc_no", agvWrkMast.getLocNo())); |
| | | if(!Cools.isEmpty(agvWrkMastWroking) && agvWrkMastWroking.getWrkSts()<=202){ |
| | | System.out.println("source_loc_no > 1"); |
| | | return false; |
| | | } |
| | | log.info(agvWrkMast.toString()); |
| | | int num = agvWrkMastService.selectCount(new EntityWrapper<AgvWrkMast>().eq("loc_no", agvWrkMast.getLocNo())); |
| | | return num <= maxWrokNum; |
| | | }).collect(Collectors.toList()); |
| | | } |
| | | } |