|  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONArray; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | import com.core.common.R; | 
|---|
|  |  |  | 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 org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.io.IOException; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  | import java.util.stream.Collectors; | 
|---|
|  |  |  | 
|---|
|  |  |  | private OrderService orderService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private AgvBasDevpService agvBasDevpService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private AgvWorkService agvWorkService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) { | 
|---|
|  |  |  | int wrkNo = agvWrkMast.getWrkNo(); | 
|---|
|  |  |  | String barcode = agvWrkMast.getBarcode(); | 
|---|
|  |  |  | String orderNo = getOrderNoByWrkNo(wrkNo); | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | int wrkNo = agvWrkMast.getWrkNo(); | 
|---|
|  |  |  | String barcode = agvWrkMast.getBarcode(); | 
|---|
|  |  |  | String orderNo = getOrderNoByWrkNo(wrkNo); | 
|---|
|  |  |  | String agvBasDevp = ""; | 
|---|
|  |  |  | if (agvWrkMast.getIoType() > 100) { | 
|---|
|  |  |  | agvBasDevp = agvWrkMast.getLocNo(); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | agvBasDevp = agvWrkMast.getSourceLocNo(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //修改工作档状态为207.库存更新完成 | 
|---|
|  |  |  | agvWrkMast.setWrkSts(207L); | 
|---|
|  |  |  | agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  | if(agvWrkMast.getIoType() == 10){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | agvWrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | //修改工作档状态为207.库存更新完成 | 
|---|
|  |  |  | agvWrkMast.setWrkSts(207L); | 
|---|
|  |  |  | agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  | // 空板入库 设置库位状态为D.空桶/空栈板 | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode()); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //修改目标库位状态为F.在库 | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //生成AGV工作历史档 | 
|---|
|  |  |  | agvWrkMastLogService.save(agvWrkMast); | 
|---|
|  |  |  | //生成AGV工作明细历史档 | 
|---|
|  |  |  | agvWrkDetlLogService.save(wrkNo); | 
|---|
|  |  |  | //类型为入库时 | 
|---|
|  |  |  | if(agvWrkMast.getIoType() == 1){ | 
|---|
|  |  |  | //更新目标库位明细 | 
|---|
|  |  |  | log.info("更新目标库位明细 agvWrkMast.getLocNo(): " + agvWrkMast.getLocNo() + ", wrkNo: " + wrkNo); | 
|---|
|  |  |  | agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo); | 
|---|
|  |  |  | //生成入库通知历史档 | 
|---|
|  |  |  | boolean save = agvWaitPakinLogService.save(barcode); | 
|---|
|  |  |  | //删除入库通知档 | 
|---|
|  |  |  | log.info("删除入库通知档 supp_code: " + barcode); | 
|---|
|  |  |  | agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",barcode)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //类型为库位移转时 | 
|---|
|  |  |  | if(agvWrkMast.getIoType() == 11){ | 
|---|
|  |  |  | //更新库存明细 | 
|---|
|  |  |  | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O",""); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String locSts = agvWrkMast.getIoType() == 10 ? "D" : "F"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //删除AGV工作档 | 
|---|
|  |  |  | agvWrkMastService.deleteById(wrkNo); | 
|---|
|  |  |  | //删除AGV工作明细档 | 
|---|
|  |  |  | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); | 
|---|
|  |  |  | if (agvWrkMast.getIoType() != 111) { | 
|---|
|  |  |  | //生成AGV工作历史档 | 
|---|
|  |  |  | agvWrkMastLogService.save(agvWrkMast); | 
|---|
|  |  |  | //生成AGV工作明细历史档 | 
|---|
|  |  |  | agvWrkDetlLogService.save(wrkNo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(!isJSON(orderNo)){ | 
|---|
|  |  |  | //检查订单是否已完成 | 
|---|
|  |  |  | orderService.checkComplete(orderNo); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); | 
|---|
|  |  |  | maps.forEach(map -> { | 
|---|
|  |  |  | String o = map.get("orderNo").toString(); | 
|---|
|  |  |  | orderService.checkComplete(o); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | switch (agvWrkMast.getIoType()){ | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | //更新目标库位明细 | 
|---|
|  |  |  | log.info("更新目标库位明细 agvWrkMast.getLocNo(): " + agvWrkMast.getLocNo() + ", wrkNo: " + wrkNo); | 
|---|
|  |  |  | agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo); | 
|---|
|  |  |  | //生成入库通知历史档 | 
|---|
|  |  |  | boolean save = agvWaitPakinLogService.save(barcode); | 
|---|
|  |  |  | //删除入库通知档 | 
|---|
|  |  |  | log.info("删除入库通知档 supp_code: " + barcode); | 
|---|
|  |  |  | agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",barcode)); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 10: | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 11: | 
|---|
|  |  |  | case 12: | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | //更新库存明细 | 
|---|
|  |  |  | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 53: | 
|---|
|  |  |  | //修改工作党明细 | 
|---|
|  |  |  | //修改库存信息 | 
|---|
|  |  |  | List<AgvWrkDetl> agvWrkDetlList = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); | 
|---|
|  |  |  | agvWrkDetlList.forEach(agvWrkDetl -> { | 
|---|
|  |  |  | AgvLocDetl agvLocDetl = agvLocDetlService.selectByMatnrAndBatchAndCsocodeAndisoCode(agvWrkMast.getLocNo(), agvWrkDetl.getMatnr(), agvWrkDetl.getBatch(), agvWrkDetl.getThreeCode(), agvWrkDetl.getDeadTime()); | 
|---|
|  |  |  | if (!Cools.isEmpty(agvLocDetl)) { | 
|---|
|  |  |  | double updateAnfme = agvLocDetl.getAnfme() - agvWrkDetl.getAnfme(); | 
|---|
|  |  |  | agvLocDetlService.updateAnfme(updateAnfme,agvLocDetl.getLocNo(),agvLocDetl.getMatnr(),agvLocDetl.getBatch(),agvLocDetl.getThreeCode(),agvLocDetl.getDeadTime()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //AgvLocDetl agvLocDetl = agvLocDetlService.selectLocdetl(agvWrkMast.getLocNo(),agvWrkDetl.getMatnr(),agvWrkDetl.getBatch(),agvWrkDetl.getThreeCode(),agvWrkDetl.getDeadTime()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 57: | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // 更新库存明细 | 
|---|
|  |  |  | List<AgvWrkDetl> wrkDetlList = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); | 
|---|
|  |  |  | wrkDetlList.forEach(agvWrkDetl -> { | 
|---|
|  |  |  | AgvLocDetl agvLocDetl = new AgvLocDetl(); | 
|---|
|  |  |  | agvLocDetl.setLocNo(agvWrkMast.getLocNo()); | 
|---|
|  |  |  | agvLocDetl.sync(agvWrkDetl); | 
|---|
|  |  |  | agvLocDetl.setModiTime(now); | 
|---|
|  |  |  | agvLocDetl.setAppeTime(now); | 
|---|
|  |  |  | if (!agvLocDetlService.insert(agvLocDetl)) { | 
|---|
|  |  |  | throw new CoolException("保存工作明细失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | // 更新站点 + 库位状态     源库位是站点 | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 58: | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 108: | 
|---|
|  |  |  | case 114: | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | //更新库存明细 | 
|---|
|  |  |  | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 109: | 
|---|
|  |  |  | // 库位 -- 接驳位 / 库位 | 
|---|
|  |  |  | if (agvWrkMast.getLocNo().substring(0,2).equals("DB")) { | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | // 接驳位 -- 库位 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 接驳位 -- 库位 | 
|---|
|  |  |  | if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); | 
|---|
|  |  |  | // 库位 -- 接驳位 / 库位 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 111: | 
|---|
|  |  |  | // 库位 -- 接驳位 / 库位 | 
|---|
|  |  |  | if (agvWrkMast.getLocNo().substring(0,2).equals("DB")) { | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | // 接驳位 -- 库位 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 接驳位 -- 库位 | 
|---|
|  |  |  | if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); | 
|---|
|  |  |  | // 库位 -- 接驳位 / 库位 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); | 
|---|
|  |  |  | //更新目标库位明细 101.出库 删除源库位库存明细 | 
|---|
|  |  |  | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 112: | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); | 
|---|
|  |  |  | for (AgvWrkDetl agvWrkDetl : agvWrkDetls) { | 
|---|
|  |  |  | AgvLocDetl locDetl = new AgvLocDetl(); | 
|---|
|  |  |  | locDetl.setLocNo(agvWrkMast.getLocNo()); | 
|---|
|  |  |  | locDetl.sync(agvWrkDetl); | 
|---|
|  |  |  | locDetl.setModiTime(new Date()); | 
|---|
|  |  |  | agvLocDetlService.insert(locDetl); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 接驳位 -- 库位 | 
|---|
|  |  |  | if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); | 
|---|
|  |  |  | // 库位 -- 接驳位 / 库位 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 113: | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | // 接驳位 -- 库位 | 
|---|
|  |  |  | if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { | 
|---|
|  |  |  | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 121: | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | //更新库存明细 | 
|---|
|  |  |  | agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (agvWrkMast.getIoType() != 111) { | 
|---|
|  |  |  | //删除AGV工作档 | 
|---|
|  |  |  | agvWrkMastService.deleteById(wrkNo); | 
|---|
|  |  |  | //删除AGV工作明细档 | 
|---|
|  |  |  | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //            else { | 
|---|
|  |  |  | //                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); | 
|---|
|  |  |  | //                if (!agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) { | 
|---|
|  |  |  | //                    agvWrkMast.setSourceLocNo(""); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | //                agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(!isJSON(orderNo)){ | 
|---|
|  |  |  | //检查订单是否已完成 | 
|---|
|  |  |  | orderService.checkComplete(orderNo); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); | 
|---|
|  |  |  | maps.forEach(map -> { | 
|---|
|  |  |  | String o = map.get("orderNo").toString(); | 
|---|
|  |  |  | orderService.checkComplete(o); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error(""+e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | return FAIL; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) { | 
|---|
|  |  |  | int wrkNo = agvWrkMast.getWrkNo(); | 
|---|
|  |  |  | String orderNo = getOrderNoByWrkNo(wrkNo); | 
|---|
|  |  |  | //修改工作档状态为207.库存更新完成 | 
|---|
|  |  |  | agvWrkMast.setWrkSts(207L); | 
|---|
|  |  |  | agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O",""); | 
|---|
|  |  |  | if(agvWrkMast.getIoType() == 101){ | 
|---|
|  |  |  | //更新目标库位明细 101.出库 删除源库位库存明细 | 
|---|
|  |  |  | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | int wrkNo = agvWrkMast.getWrkNo(); | 
|---|
|  |  |  | String orderNo = getOrderNoByWrkNo(wrkNo); | 
|---|
|  |  |  | //修改工作档状态为207.库存更新完成 | 
|---|
|  |  |  | agvWrkMast.setWrkSts(207L); | 
|---|
|  |  |  | agvWrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | if (agvWrkMast.getIoType() == 110) { | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | AgvWrkMast wrkMast = new AgvWrkMast(); | 
|---|
|  |  |  | //工作状态 | 
|---|
|  |  |  | wrkMast.setWrkSts(201L); | 
|---|
|  |  |  | //入出库类型 | 
|---|
|  |  |  | wrkMast.setIoType(10); | 
|---|
|  |  |  | wrkMast.setIoTime(now); | 
|---|
|  |  |  | //优先级 | 
|---|
|  |  |  | wrkMast.setIoPri(300.0); | 
|---|
|  |  |  | //源站点 | 
|---|
|  |  |  | wrkMast.setSourceLocNo(agvWrkMast.getLocNo()); | 
|---|
|  |  |  | //目标站点 | 
|---|
|  |  |  | wrkMast.setLocNo(agvWrkMast.getSourceLocNo()); | 
|---|
|  |  |  | //货架编码 | 
|---|
|  |  |  | wrkMast.setBarcode(agvWrkMast.getBarcode()); | 
|---|
|  |  |  | //货架类型 | 
|---|
|  |  |  | wrkMast.setWhsType(Integer.valueOf(agvWrkMast.getBarcode().substring(0, 2))); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //生成AGV工作历史档 | 
|---|
|  |  |  | agvWrkMastLogService.save(agvWrkMast); | 
|---|
|  |  |  | //生成AGV工作明细历史档 | 
|---|
|  |  |  | agvWrkDetlLogService.save(wrkNo); | 
|---|
|  |  |  | //删除AGV工作档 | 
|---|
|  |  |  | agvWrkMastService.deleteById(wrkNo); | 
|---|
|  |  |  | //删除AGV工作明细档 | 
|---|
|  |  |  | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); | 
|---|
|  |  |  | if(!isJSON(orderNo)){ | 
|---|
|  |  |  | //检查订单是否已完成 | 
|---|
|  |  |  | orderService.checkComplete(orderNo); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); | 
|---|
|  |  |  | maps.forEach(map -> { | 
|---|
|  |  |  | String o = map.get("orderNo").toString(); | 
|---|
|  |  |  | orderService.checkComplete(o); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wrkMast.setAppeUser(9527L); | 
|---|
|  |  |  | wrkMast.setAppeTime(now); | 
|---|
|  |  |  | wrkMast.setModiUser(9527L); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | wrkMast.setLogErrMemo("completedCarryWrk"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public ReturnT<String> startPutWayWrk(List<AgvWrkMast> agvWrkMastList) throws IOException { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //下发任务 | 
|---|
|  |  |  | int startWrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway"); | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | if (!agvWrkMastService.insertByIncrease(wrkMast)) { | 
|---|
|  |  |  | throw new CoolException("保存工作档失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //202.RCS取货中 | 
|---|
|  |  |  | agvWrkMast.setWrkSts(202L); | 
|---|
|  |  |  | agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  | if(agvWrkMast.getIoType() == 1){ | 
|---|
|  |  |  | //修改AGV入库通知档状态入出状态为Y | 
|---|
|  |  |  | agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y"); | 
|---|
|  |  |  | AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getSourceLocNo()); | 
|---|
|  |  |  | agvLocMast.setLocSts("S"); | 
|---|
|  |  |  | agvLocMast.setModiTime(now); | 
|---|
|  |  |  | agvLocMastService.updateById(agvLocMast); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | AgvBasDevp agvBasDevp = agvBasDevpService.selectById(agvWrkMast.getLocNo()); | 
|---|
|  |  |  | agvBasDevp.setLocSts("R"); | 
|---|
|  |  |  | agvBasDevp.setLocType2(Short.valueOf(agvWrkMast.getBarcode().substring(0, 2))); | 
|---|
|  |  |  | agvBasDevpService.updateById(agvBasDevp); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | log.error(e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //生成AGV工作历史档 | 
|---|
|  |  |  | agvWrkMastLogService.save(agvWrkMast); | 
|---|
|  |  |  | //生成AGV工作明细历史档 | 
|---|
|  |  |  | agvWrkDetlLogService.save(wrkNo); | 
|---|
|  |  |  | //删除AGV工作档 | 
|---|
|  |  |  | agvWrkMastService.deleteById(wrkNo); | 
|---|
|  |  |  | //删除AGV工作明细档 | 
|---|
|  |  |  | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); | 
|---|
|  |  |  | if(!isJSON(orderNo)){ | 
|---|
|  |  |  | //检查订单是否已完成 | 
|---|
|  |  |  | orderService.checkComplete(orderNo); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); | 
|---|
|  |  |  | maps.forEach(map -> { | 
|---|
|  |  |  | String o = map.get("orderNo").toString(); | 
|---|
|  |  |  | orderService.checkComplete(o); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error(""+e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return FAIL; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public ReturnT<String> startCarryWrk(List<AgvWrkMast> agvWrkMastList) throws IOException { | 
|---|
|  |  |  | //log.info(agvWrkMastList.toString()); | 
|---|
|  |  |  | //任务过滤,过滤掉已存在相同目标库位的工作档 | 
|---|
|  |  |  | //agvWrkMastList = filter(agvWrkMastList); | 
|---|
|  |  |  | int code = agvWrkMastService.startWrk(agvWrkMastList,"carry"); | 
|---|
|  |  |  | //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); | 
|---|
|  |  |  | public ReturnT<String> completedCarryWrk2(AgvWrkMast agvWrkMast) { | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | int wrkNo = agvWrkMast.getWrkNo(); | 
|---|
|  |  |  | String orderNo = getOrderNoByWrkNo(wrkNo); | 
|---|
|  |  |  | String agvBasDevp = ""; | 
|---|
|  |  |  | if (agvWrkMast.getIoType() > 100) { | 
|---|
|  |  |  | agvBasDevp = agvWrkMast.getLocNo(); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | agvBasDevp = agvWrkMast.getSourceLocNo(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //修改工作档状态为207.库存更新完成 | 
|---|
|  |  |  | agvWrkMast.setWrkSts(207L); | 
|---|
|  |  |  | agvWrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  | //修改源库位状态为O | 
|---|
|  |  |  | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); | 
|---|
|  |  |  | if(agvWrkMast.getIoType() == 101){ | 
|---|
|  |  |  | //更新目标库位明细 101.出库 删除源库位库存明细 | 
|---|
|  |  |  | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //生成AGV工作历史档 | 
|---|
|  |  |  | agvWrkMastLogService.save(agvWrkMast); | 
|---|
|  |  |  | //生成AGV工作明细历史档 | 
|---|
|  |  |  | agvWrkDetlLogService.save(wrkNo); | 
|---|
|  |  |  | //删除AGV工作档 | 
|---|
|  |  |  | agvWrkMastService.deleteById(wrkNo); | 
|---|
|  |  |  | //删除AGV工作明细档 | 
|---|
|  |  |  | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); | 
|---|
|  |  |  | if(!isJSON(orderNo)){ | 
|---|
|  |  |  | //检查订单是否已完成 | 
|---|
|  |  |  | orderService.checkComplete(orderNo); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | List<Map> maps = JSONArray.parseArray(orderNo, Map.class); | 
|---|
|  |  |  | maps.forEach(map -> { | 
|---|
|  |  |  | String o = map.get("orderNo").toString(); | 
|---|
|  |  |  | orderService.checkComplete(o); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error(""+e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return FAIL; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | @Synchronized | 
|---|
|  |  |  | public ReturnT<String> startPutWayWrk(AgvWrkMast agvWrkMast) throws IOException { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | //下发任务 | 
|---|
|  |  |  | int startWrkCode = agvWrkMastService.startWrk(agvWrkMast); | 
|---|
|  |  |  | if(startWrkCode != 0){ | 
|---|
|  |  |  | throw new CoolException("任务下发失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | agvWrkMast.setWrkSts(202L); | 
|---|
|  |  |  | agvWrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  | if(agvWrkMast.getIoType() == 1){ | 
|---|
|  |  |  | //修改AGV入库通知档状态入出状态为Y | 
|---|
|  |  |  | agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("修改AGV入库通知档状态入出状态为Y"+e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return FAIL; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | @Synchronized | 
|---|
|  |  |  | public ReturnT<String> startAllcationIn(AgvWrkMast agvWrkMast) throws IOException { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //下发任务 | 
|---|
|  |  |  | try{ | 
|---|
|  |  |  | int startWrkCode = agvWrkMastService.startAllcationIn(agvWrkMast); | 
|---|
|  |  |  | if(startWrkCode != 0){ | 
|---|
|  |  |  | throw new CoolException("任务下发失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | log.error("任务下发失败"+e.getMessage()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | 
|---|
|  |  |  | Map<String, Object> devNoMap = devNoMaps.get(0); | 
|---|
|  |  |  | if((int)devNoMap.get("num") < maxWrokNum){ | 
|---|
|  |  |  | agvWrkMast.setLocNo(devNoMap.get("dev_no").toString()); | 
|---|
|  |  |  | agvWrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | agvWrkMastService.updateById(agvWrkMast); | 
|---|
|  |  |  | log.info("after:" + devNoMap.toString()  +  ", wrkNo:" + agvWrkMast.getWrkNo() + ", locNo: " + agvWrkMast.getLocNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Synchronized | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public ReturnT<String> autoEmptyOut(AgvBasDevp agvBasDevp) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | agvWorkService.emptyPlateOut(agvBasDevp.getDevNo(),0,9527L); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return SUCCESS; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | return num <= maxWrokNum; | 
|---|
|  |  |  | }).collect(Collectors.toList()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | 生成工作档 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private AgvWrkMast createWrkMast(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId, int containerType, int floor){ | 
|---|
|  |  |  | AgvWrkMast wrkMast = new AgvWrkMast(); | 
|---|
|  |  |  | //工作状态 | 
|---|
|  |  |  | wrkMast.setWrkSts(wrkSts); | 
|---|
|  |  |  | //入出库类型 | 
|---|
|  |  |  | wrkMast.setIoType(ioType); | 
|---|
|  |  |  | wrkMast.setIoTime(now); | 
|---|
|  |  |  | //优先级 | 
|---|
|  |  |  | wrkMast.setIoPri(300.0); | 
|---|
|  |  |  | //源站点 | 
|---|
|  |  |  | wrkMast.setSourceLocNo(sourceLocNo); | 
|---|
|  |  |  | //目标站点 | 
|---|
|  |  |  | wrkMast.setLocNo(locNo); | 
|---|
|  |  |  | //货架编码 | 
|---|
|  |  |  | wrkMast.setBarcode(barcode); | 
|---|
|  |  |  | //货架类型 | 
|---|
|  |  |  | wrkMast.setWhsType(containerType); | 
|---|
|  |  |  | // 目标楼层 | 
|---|
|  |  |  | wrkMast.setCrnNo(floor); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setAppeUser(userId); | 
|---|
|  |  |  | wrkMast.setAppeTime(now); | 
|---|
|  |  |  | wrkMast.setModiUser(userId); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!agvWrkMastService.insertByIncrease(wrkMast)) { | 
|---|
|  |  |  | throw new CoolException("保存工作档失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no",sourceLocNo).eq("barcode",barcode).orderBy("modi_time",false)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return wrkMast; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|