Merge branch 'phyzasrs' of http://47.97.1.152:5880/r/zy-asrs into phyzasrs
| | |
| | | AgvWaitPakinService agvWaitPakinService; |
| | | @Autowired |
| | | AgvWorkService agvWorkService; |
| | | @Autowired |
| | | AgvLocDetlService agvLocDetlService; |
| | | |
| | | @RequestMapping(value = "/basDevp/list/auth") |
| | | @ManagerAuth |
| | |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>() |
| | | .eq("loc_no", agvBasDevp.getDevNo()) |
| | | .or().eq("source_loc_no",agvBasDevp.getDevNo())); |
| | | if (Cools.isEmpty(agvWrkMast)) { |
| | | Page<AgvLocDetl> agvLocDetlPage = agvLocDetlService.selectPage(new Page<>(curr, limit), new EntityWrapper<AgvLocDetl>() |
| | | .eq("supp_code", agvBasDevp.getBarcode())); |
| | | if (agvLocDetlPage.getRecords().size() > 0) { |
| | | return R.ok(agvLocDetlPage); |
| | | } else { |
| | | return R.error("当前货架码异常!"); |
| | | } |
| | | } |
| | | |
| | | Page<AgvWrkDetl> agvWrkDetlPage = agvWrkDetlService.selectPage(new Page<>(curr, limit), new EntityWrapper<AgvWrkDetl>() |
| | | .eq("wrk_no", agvWrkMast.getWrkNo())); |
| | |
| | | short floor =(short)Integer.parseInt(fl.substring(0, 1)); |
| | | List<HashMap<String,String>> dbList = (List<HashMap<String, String>>) params.get("dbList"); |
| | | params.get("dbList"); |
| | | Object moveType = params.get("moveType"); |
| | | if (moveType == "unAuto") { |
| | | return R.error("手动功能暂时无法使用"); |
| | | Object mT = params.get("moveType"); |
| | | String moveType = ""; |
| | | if (mT.equals("unAuto")) { |
| | | moveType = "2"; |
| | | } else { |
| | | moveType = "1"; |
| | | } |
| | | for (HashMap<String, String> map : dbList) { |
| | | String locNo = map.get("locNo"); |
| | | Wrapper<AgvLocMast> wrapper = new EntityWrapper<AgvLocMast>().eq("loc_no", locNo); |
| | | AgvLocMast agvLocMast = agvLocMastService.selectOne(wrapper); |
| | | agvLocMast.setLocType("1"); |
| | | agvLocMast.setLocType(moveType); |
| | | agvLocMast.setLocType3(floor); |
| | | agvLocMastService.update(agvLocMast,wrapper); |
| | | // 同步调拨单 |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | @PostMapping("/hand/control/allocationOut") |
| | | @Transactional |
| | | @ManagerAuth(memo = "调拨离场") |
| | | public R allocationOut(@RequestBody AgvMobileStartPakin param){ |
| | | agvMobileService.allocationOut(param, getUserId()); |
| | | return R.ok(); |
| | | } |
| | | |
| | | @PostMapping("/hand/control/allocationIn") |
| | | @Transactional |
| | | @ManagerAuth(memo = "调拨进场") |
| | | public R allocationIn(@RequestBody AgvMobileStartPakin param){ |
| | | agvMobileService.allocationIn(param, getUserId()); |
| | | return R.ok(); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | List<AgvLocDetl> agvLocDetls1 = new ArrayList<>(); |
| | | List<AgvLocDetl> agvLocDetls2 = new ArrayList<>(); |
| | |
| | | package com.zy.asrs.service; |
| | | |
| | | import com.zy.asrs.entity.AgvBasDevp; |
| | | import com.zy.asrs.entity.param.CombParam; |
| | | import com.zy.asrs.entity.param.LocMoveParam; |
| | | import com.zy.asrs.entity.param.MobileAdjustParam; |
| | | import com.zy.asrs.entity.param.PickParam; |
| | | import com.zy.asrs.entity.param.*; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | */ |
| | | String handControlLocMove(LocMoveParam param, Long userId); |
| | | |
| | | /** |
| | | * 调拨离场 |
| | | */ |
| | | String allocationOut(AgvMobileStartPakin param, Long userId); |
| | | |
| | | /** |
| | | * 调拨离场 |
| | | */ |
| | | String allocationIn(AgvMobileStartPakin param, Long userId); |
| | | |
| | | } |
| | |
| | | |
| | | public int callCancelTask(int wrkNo); |
| | | |
| | | public int startAllcationIn(AgvWrkMast agvWrkMast) throws IOException; |
| | | |
| | | } |
| | |
| | | import com.core.common.R; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.CombParam; |
| | | import com.zy.asrs.entity.param.LocMoveParam; |
| | | import com.zy.asrs.entity.param.MobileAdjustParam; |
| | | import com.zy.asrs.entity.param.PickParam; |
| | | import com.zy.asrs.entity.param.*; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.common.model.DetlDto; |
| | | import com.zy.common.service.AgvCommonService; |
| | |
| | | private AgvLocMastService agvLocMastService; |
| | | @Autowired |
| | | private AgvCommonService agvCommonService; |
| | | @Autowired |
| | | private AgvWrkMastLogService agvWrkMastLogService; |
| | | @Autowired |
| | | private AgvWrkDetlLogService agvWrkDetlLogService; |
| | | |
| | | |
| | | /* |
| | |
| | | } |
| | | |
| | | /* |
| | | 调拨离场 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public String allocationOut(AgvMobileStartPakin param, Long userId) { |
| | | Date now = new Date(); |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", param.getDevNo())); |
| | | if (Cools.isEmpty(agvWrkMast)) { |
| | | throw new CoolException("工作档中没有此站点任务"); |
| | | } |
| | | //生成AGV工作历史档 + 生成AGV工作明细历史档 |
| | | agvWrkMastLogService.save(agvWrkMast); |
| | | agvWrkDetlLogService.save(agvWrkMast.getWrkNo()); |
| | | |
| | | //生成工作档 |
| | | AgvWrkMast mast = new AgvWrkMast(); |
| | | //工作状态 |
| | | mast.setWrkSts(210L); |
| | | //入出库类型 |
| | | mast.setIoType(111); |
| | | mast.setIoTime(now); |
| | | //优先级 |
| | | mast.setIoPri(300.0); |
| | | //源站点 |
| | | mast.setSourceLocNo(""); |
| | | //目标站点 |
| | | mast.setLocNo(""); |
| | | //容器编码 |
| | | mast.setBarcode(agvWrkMast.getBarcode()); |
| | | //容器类型 |
| | | mast.setWhsType(30); |
| | | // 目标楼层 |
| | | mast.setPauseMk(agvWrkMast.getPauseMk()); |
| | | mast.setAppeUser(userId); |
| | | mast.setAppeTime(now); |
| | | mast.setModiUser(userId); |
| | | mast.setModiTime(now); |
| | | if (!agvWrkMastService.insertByIncrease(mast)) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | // 更新工作明细 |
| | | List<AgvWrkDetl> agvWrkDetls = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); |
| | | for (AgvWrkDetl agvWrkDetl : agvWrkDetls) { |
| | | agvWrkDetl.setWrkNo(mast.getWrkNo()); |
| | | if (!agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("supp_code", agvWrkMast.getBarcode()))) { |
| | | throw new CoolException("更新工作明细失败"); |
| | | } |
| | | } |
| | | // 更新站点状态 |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null); |
| | | // 更新源库位状态 |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"O","",agvWrkMast.getWhsType().shortValue()); |
| | | //删除AGV工作档 |
| | | agvWrkMastService.deleteById(agvWrkMast); |
| | | return "ok"; |
| | | } |
| | | /* |
| | | 调拨进场 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public String allocationIn(AgvMobileStartPakin param, Long userId) { |
| | | Date now = new Date(); |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode", param.getBarcode())); |
| | | if (Cools.isEmpty(agvWrkMast)) { |
| | | throw new CoolException("工作档中没有此货架任务"); |
| | | } |
| | | //工作状态 |
| | | agvWrkMast.setWrkSts(211L); |
| | | //入出库类型 |
| | | agvWrkMast.setIoType(112); |
| | | agvWrkMast.setSourceLocNo(param.getDevNo()); |
| | | agvWrkMast.setModiUser(userId); |
| | | agvWrkMast.setModiTime(now); |
| | | if (!agvWrkMastService.update(agvWrkMast,new EntityWrapper<AgvWrkMast>().eq("wrk_no",agvWrkMast.getWrkNo()))) { |
| | | throw new CoolException("更新工作档失败"); |
| | | } |
| | | // 更新源库位状态 |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); |
| | | //删除AGV工作档 |
| | | return "ok"; |
| | | } |
| | | /* |
| | | 更新目标库位信息 |
| | | */ |
| | | private void updateAgvLocMast(AgvLocMast locMast, String locSts){ |
| | |
| | | agvLocMastService.updateLocStsByLocNo(locNo,"F",wrkMast.getBarcode(),(short)getContainerTypeByloc(locNo)); |
| | | agvLocMastService.updateLocStsByLocNo(targetLocNo,"O","",null); |
| | | // 自动调拨出库取消 |
| | | } else if(wrkMast.getIoType() == 108 ) { |
| | | } else if(wrkMast.getIoType() == 108 || wrkMast.getIoType() == 111) { |
| | | // 源库位 |
| | | String locNo = wrkMast.getSourceLocNo(); |
| | | // 目标库位 |
| | | String targetLocNo = wrkMast.getLocNo(); |
| | | agvLocMastService.updateLocStsByLocNo(locNo,"F",wrkMast.getBarcode(),(short)getContainerTypeByloc(locNo),"",(short)0); |
| | | agvLocMastService.updateLocStsByLocNo(targetLocNo,"O","",null); |
| | | if (wrkMast.getIoType() == 108) { |
| | | agvLocMastService.updateLocStsByLocNo(targetLocNo,"O","",null); |
| | | } else { |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(targetLocNo,"O","",wrkMast.getWhsType().shortValue()); |
| | | } |
| | | |
| | | List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo)); |
| | | // 更新订单 |
| | | for (AgvLocDetl agvLocDetl : agvLocDetls) { |
| | |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.AgvBasDevp; |
| | | import com.zy.asrs.entity.AgvLocMast; |
| | | import com.zy.asrs.entity.AgvWrkMast; |
| | | import com.zy.asrs.entity.param.AgvTaskCreateParam; |
| | | import com.zy.asrs.entity.param.AgvTaskParam; |
| | | import com.zy.asrs.mapper.AgvWrkMastMapper; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.common.service.AgvCommonService; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | ApiLogService apiLogService; |
| | | @Autowired |
| | | AgvBasDevpService agvBasDevpService; |
| | | @Autowired |
| | | private AgvCommonService agvCommonService; |
| | | @Autowired |
| | | private AgvWrkMastService agvWrkMastService; |
| | | |
| | | public void updateWrkStsByWrkNo(int wrkNo, long wrkSts) { |
| | | AgvWrkMast agvWrkMast = this.selectById(wrkNo); |
| | |
| | | //return containerMoveParam; |
| | | } |
| | | |
| | | public int startAllcationIn(AgvWrkMast agvWrkMast) throws IOException { |
| | | AgvBasDevp basDevp = agvBasDevpService.selectByDevNo(agvWrkMast.getSourceLocNo()); |
| | | //检索库位,选择合适的库位 |
| | | AgvLocMast locMast = agvCommonService.getLocNo(basDevp.getLocType1(),basDevp.getFloor()); |
| | | agvWrkMast.setLocNo(locMast.getLocNo()); |
| | | agvWrkMast.setWrkSts(201L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | return 0; |
| | | |
| | | } |
| | | |
| | | //容器入场 |
| | | public int containerMoveIn(List<AgvWrkMast> agvWrkMastList) throws IOException { |
| | | //调用容器入场时所需要参数 |
| | |
| | | .or().eq("io_type",11) |
| | | .or().eq("io_type",12) |
| | | .or().eq("io_type",108) |
| | | .or().eq("io_type",109)); |
| | | .or().eq("io_type",109) |
| | | .or().eq("io_type",112)); |
| | | if(!Cools.isEmpty(agvWrkMastList)){ |
| | | agvWrkMastList.stream().forEach(agvWrkMast -> { |
| | | agvWrkMastHandler.completedPutWayWrk(agvWrkMast); |
| | |
| | | .or().eq("io_type", 11) |
| | | .or().eq("io_type", 12) |
| | | .or().eq("io_type", 109) |
| | | .or().eq("io_type", 108)).getRecords(); |
| | | .or().eq("io_type", 108) |
| | | .or().eq("io_type", 112)).getRecords(); |
| | | |
| | | if(!Cools.isEmpty(agvWrkMastList)){ |
| | | agvWrkMastList.forEach(agvWrkMast -> { |
| | |
| | | } |
| | | |
| | | /* |
| | | putaway:上架 |
| | | 定时处理AGV工作档中工作状态为201.生成入库任务ID 且(出库类型为 53.拣料再入库 || 1.入库 || 10.空板入库栽 || 57.盘点再入库)的数据 |
| | | */ |
| | | @Scheduled(cron = "0/3 * * * * ? ") |
| | | public void startAllcationIn(){ |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) |
| | | ,new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 211) |
| | | .andNew().eq("io_type", 112)).getRecords(); |
| | | |
| | | if(!Cools.isEmpty(agvWrkMastList)){ |
| | | agvWrkMastList.forEach(agvWrkMast -> { |
| | | try { |
| | | agvWrkMastHandler.startAllcationIn(agvWrkMast); |
| | | } catch (IOException e) { |
| | | log.error(e.getMessage()); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | carry:搬运,统指出库、移库、点到点搬运等 |
| | | 定时处理AGV工作档中工作状态为21.生成出库任务 且(出库类型为 101.出库 || 103.拣料出库 || 11.库格移栽 || 110.空板出库 || 107.盘点出库)的数据 |
| | | */ |
| | |
| | | @Autowired |
| | | private AutoMoveHandler autoMoveHandler; |
| | | |
| | | |
| | | // 调拨出库 |
| | | @Scheduled(cron = "0/2 * * * * ? ") |
| | | private void execute(){ |
| | | List<AgvLocMast> agvLocMasts = agvLocMastService.selectList( |
| | |
| | | |
| | | } |
| | | |
| | | // 空板自动回库 |
| | | @Scheduled(cron = "0/2 * * * * ? ") |
| | | private void autoEmptyBack(){ |
| | | // 查询 不为1楼的空货架 |
| | |
| | | |
| | | } |
| | | |
| | | @Transactional |
| | | @Synchronized |
| | | public ReturnT<String> startAllcationIn(AgvWrkMast agvWrkMast) throws IOException { |
| | | |
| | | //下发任务 |
| | | int startWrkCode = agvWrkMastService.startAllcationIn(agvWrkMast); |
| | | if(startWrkCode != 0){ |
| | | throw new CoolException("任务下发失败"); |
| | | } |
| | | return SUCCESS; |
| | | |
| | | } |
| | | |
| | | // @Transactional |
| | | // public ReturnT<String> startCarryWrk(AgvWrkMast agvWrkMast) throws IOException { |
| | | // //log.info(agvWrkMastList.toString()); |
| | |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.service.AgvLocDetlService; |
| | | import com.zy.asrs.service.AgvLocMastService; |
| | | import com.zy.asrs.service.AgvWrkDetlService; |
| | | import com.zy.asrs.service.AgvWrkMastService; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.task.core.ReturnT; |
| | | import com.zy.common.service.AgvCommonService; |
| | |
| | | private AgvLocDetlService agvLocDetlService; |
| | | @Autowired |
| | | private AgvWrkDetlService agvWrkDetlService; |
| | | @Autowired |
| | | AgvBasDevpService agvBasDevpService; |
| | | |
| | | public ReturnT<String> start(AgvLocMast agvLocMast) { |
| | | // locType 1. 自动, 2. 手动 |
| | |
| | | } |
| | | |
| | | private ReturnT<String> doHandMove(AgvLocMast agvLocMast) { |
| | | Date now = new Date(); |
| | | //查询工作档 |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(agvLocMast.getBarcode()); |
| | | if(!Cools.isEmpty(agvWrkMast)){ |
| | | throw new CoolException("当前"+agvLocMast.getBarcode()+"货架码已在工作档中"); |
| | | } |
| | | // //检索库位,选择合适的库位 |
| | | // AgvLocMast LocMast = agvCommonService.getLocNo(3,agvLocMast.getLocType3()); |
| | | // 检索agv接驳位 |
| | | AgvBasDevp devpNo = agvCommonService.getDevpNo(3, 1); |
| | | //生成工作档 |
| | | AgvWrkMast mast = new AgvWrkMast(); |
| | | //工作状态 |
| | | mast.setWrkSts(21L); |
| | | //入出库类型 |
| | | mast.setIoType(111); |
| | | mast.setIoTime(now); |
| | | //优先级 |
| | | mast.setIoPri(300.0); |
| | | //源站点 |
| | | mast.setSourceLocNo(agvLocMast.getLocNo()); |
| | | //目标站点 |
| | | mast.setLocNo(devpNo.getDevNo()); |
| | | //容器编码 |
| | | mast.setBarcode(agvLocMast.getBarcode()); |
| | | //容器类型 |
| | | mast.setWhsType(30); |
| | | // 目标楼层 |
| | | mast.setPauseMk(agvLocMast.getLocType3().toString()); |
| | | |
| | | mast.setAppeUser(9527L); |
| | | mast.setAppeTime(now); |
| | | mast.setModiUser(9527L); |
| | | mast.setModiTime(now); |
| | | if (!agvWrkMastService.insertByIncrease(mast)) { |
| | | throw new CoolException("保存工作档失败"); |
| | | } |
| | | |
| | | AgvWrkMast mast1 = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devpNo.getDevNo()).eq("source_loc_no",agvLocMast.getLocNo())); |
| | | //生成工作档明细 |
| | | List<AgvLocDetl> agvLocDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", agvLocMast.getLocNo())); |
| | | agvLocDetls.forEach(agvLocDetl -> { |
| | | AgvWrkDetl wrkDetl = new AgvWrkDetl(); |
| | | wrkDetl.setWrkNo(mast1.getWrkNo()); |
| | | wrkDetl.sync(agvLocDetl); |
| | | wrkDetl.setSpecs("1-" + agvLocMast.getLocType3()); |
| | | wrkDetl.setSuppCode(agvLocDetl.getSuppCode()); |
| | | wrkDetl.setIoTime(now); |
| | | wrkDetl.setAppeUser(9527L); |
| | | wrkDetl.setAppeTime(now); |
| | | wrkDetl.setModiUser(9527L); |
| | | wrkDetl.setModiTime(now); |
| | | if (!agvWrkDetlService.insert(wrkDetl)) { |
| | | throw new CoolException("保存工作明细失败"); |
| | | } |
| | | }); |
| | | //更新目标库位状态 |
| | | updateAgvLocMast(agvLocMast,"R"); |
| | | updateAgvBasDevp(devpNo,"S",null,agvLocMast.getBarcode()); |
| | | return SUCCESS; |
| | | } |
| | | |
| | |
| | | locMast.setLocSts(locSts); |
| | | agvLocMastService.updateById(locMast); |
| | | } |
| | | /* |
| | | 更新源站点信息 |
| | | */ |
| | | private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts){ |
| | | if(!Cools.isEmpty(agvBasDevp)){ |
| | | agvBasDevp.setLocSts(locSts); |
| | | agvBasDevpService.updateById(agvBasDevp); |
| | | } |
| | | } |
| | | private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts, Short continerType, String containerCode){ |
| | | if(!Cools.isEmpty(agvBasDevp)){ |
| | | agvBasDevp.setLocSts(locSts); |
| | | agvBasDevp.setBarcode(containerCode); |
| | | agvBasDevpService.updateById(agvBasDevp); |
| | | } |
| | | } |
| | | |
| | | public ReturnT<String> autoEmptyBack(AgvLocMast agvLocMast) { |
| | | Date now = new Date(); |
| | |
| | | private MatService matService; |
| | | @Autowired |
| | | private LocRuleService locRuleService; |
| | | @Autowired |
| | | AgvBasDevpService agvBasDevpService; |
| | | |
| | | public int getWorkNo(Integer wrkMk) { |
| | | AgvWrkLastno wrkLastno = agvWrkLastnoService.selectById(wrkMk); |
| | |
| | | .eq("floor",floor) |
| | | .eq("loc_type1",type)); |
| | | } |
| | | /** |
| | | * 检索库位号 |
| | | * @return locNo 检索到的库位号 |
| | | */ |
| | | public AgvBasDevp getDevpNo(int type, int floor) { |
| | | // 目标库位 |
| | | AgvBasDevp basDevp = null; |
| | | |
| | | // 开始查找库位 ==============================>> |
| | | basDevp = getDevpNoRule(type,floor); |
| | | if (basDevp != null) { |
| | | return basDevp; |
| | | } |
| | | |
| | | //找不到库位,抛出异常 |
| | | throw new CoolException("该楼层没有空库位"); |
| | | } |
| | | |
| | | //随机取一个货位 |
| | | private AgvBasDevp getDevpNoRule(int type,int floor){ |
| | | return agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>() |
| | | .eq("loc_sts","O") |
| | | .eq("floor",floor) |
| | | .eq("loc_type1",type) |
| | | .like("dev_no","DB")); |
| | | } |
| | | |
| | | } |