| | |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.R; |
| | | import com.zy.asrs.entity.AgvBasDevp; |
| | | import com.zy.asrs.entity.BasDevp; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.*; |
| | | import com.zy.asrs.entity.param.LocMastInitParam; |
| | | import com.zy.asrs.service.AgvBasDevpService; |
| | | import com.zy.asrs.service.*; |
| | | import com.zy.common.web.BaseController; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @RestController |
| | | @RequestMapping("/agv") |
| | |
| | | |
| | | @Autowired |
| | | AgvBasDevpService agvBasDevpService; |
| | | @Autowired |
| | | AgvWrkMastService agvWrkMastService; |
| | | @Autowired |
| | | AgvWrkDetlService agvWrkDetlService; |
| | | @Autowired |
| | | AgvWaitPakinService agvWaitPakinService; |
| | | @Autowired |
| | | AgvWorkService agvWorkService; |
| | | |
| | | @RequestMapping(value = "/basDevp/list/auth") |
| | | @ManagerAuth |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/basDevp/detail/list/auth") |
| | | public R basDevpDetailList(@RequestParam(defaultValue = "1")Integer curr, |
| | | @RequestParam(defaultValue = "10")Integer limit, |
| | | @RequestParam Map<String, Object> param){ |
| | | String devNo = param.get("devNo").toString(); |
| | | AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo); |
| | | if("F".equals(agvBasDevp.getLocSts()) || "R".equals(agvBasDevp.getLocSts())){ |
| | | //先去入库通知档找明细 |
| | | Page<AgvWaitPakin> agvWaitPakinPage = agvWaitPakinService.selectPage(new Page<>(curr, limit), new EntityWrapper<AgvWaitPakin>() |
| | | .eq("zpallet", agvBasDevp.getBarcode())); |
| | | if(agvWaitPakinPage.getRecords().size()>0){ |
| | | return R.ok(agvWaitPakinPage); |
| | | }else { |
| | | //如果入库通档明细为空,则去工作档找明细 |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>() |
| | | .eq("loc_no", agvBasDevp.getDevNo()) |
| | | .or().eq("source_loc_no",agvBasDevp.getDevNo())); |
| | | |
| | | Page<AgvWrkDetl> agvWrkDetlPage = agvWrkDetlService.selectPage(new Page<>(curr, limit), new EntityWrapper<AgvWrkDetl>() |
| | | .eq("wrk_no", agvWrkMast.getWrkNo())); |
| | | |
| | | if(agvWrkDetlPage.getRecords().size()>0){ |
| | | return R.ok(agvWrkDetlPage); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return R.error("数据异常"); |
| | | } |
| | | |
| | | @RequestMapping(value = "/basDevp/visualized/list/auth") |
| | | public R visualizedList(@RequestBody JSONObject param){ |
| | | |
| | |
| | | return R.ok(result); |
| | | } |
| | | |
| | | /* |
| | | 容器离场 |
| | | */ |
| | | @RequestMapping(value = "/basDevp/visualized/container/moveOut") |
| | | public R visualiZedContainerMoveOut(@RequestBody Map<String,Object> map) { |
| | | |
| | | List<String> devNos = (List<String>) map.get("devNo"); |
| | | List<AgvWrkMast> agvWrkMastList = devNos.stream().map(devNo -> { |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo)); |
| | | if(agvWrkMast.getIoType() == 103){ |
| | | throw new CoolException("工作号为" + agvWrkMast.getWrkNo() + "类型为103.拣料入库,无法执行容器离场任务,请重新选择站点。"); |
| | | } |
| | | return agvWrkMast; |
| | | }).collect(Collectors.toList()); |
| | | |
| | | try { |
| | | int code = agvWrkMastService.containerMoveOut(agvWrkMastList); |
| | | if(code == 0){ |
| | | //将工作党状态改为容器离场 |
| | | agvWrkMastList.forEach(agvWrkMast -> { |
| | | agvWrkMast.setWrkSts(207L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | }); |
| | | //修改站点状态 |
| | | devNos.forEach(devNo -> { |
| | | AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo); |
| | | agvBasDevp.setBarcode(""); |
| | | agvBasDevp.setLocSts("O"); |
| | | agvBasDevpService.updateById(agvBasDevp); |
| | | }); |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | return R.error("容器离场失败"); |
| | | } |
| | | |
| | | return R.ok("容器离场成功"); |
| | | } |
| | | |
| | | /* |
| | | 拣料入库 |
| | | */ |
| | | @RequestMapping(value = "/basDevp/visualized/container/pickIn") |
| | | public R visualiZedPickIn(@RequestBody Map<String,Object> map){ |
| | | List<String> devNos = (List<String>) map.get("devNo"); |
| | | List<AgvWrkMast> agvWrkMastList = devNos.stream().map(devNo -> { |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo)); |
| | | if(agvWrkMast.getIoType() == 101){ |
| | | throw new CoolException("工作号为" + agvWrkMast.getWrkNo() + "类型为101.入库,无法执行拣料入库任务,请重新选择站点。"); |
| | | } |
| | | return agvWrkMast; |
| | | }).collect(Collectors.toList()); |
| | | |
| | | agvWorkService.pickIn(agvWrkMastList); |
| | | |
| | | return R.ok("生成拣料出库任务成功"); |
| | | } |
| | | |
| | | private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ |
| | | for (Map.Entry<String, Object> entry : map.entrySet()){ |
| | | String val = String.valueOf(entry.getValue()); |
| | |
| | | AgvTask agvTask = AgvTask.valueOf(param.getEventType()); |
| | | Class<AgvTask> clz = AgvTask.class; |
| | | try { |
| | | Method method = clz.getDeclaredMethod(param.getStatus(),AgvTaskCallBackParam.class); |
| | | method.invoke(agvTask,param); |
| | | Method method = clz.getDeclaredMethod(param.getStatus(), AgvWrkMast.class, AgvTaskCallBackParam.class); |
| | | method.invoke(agvTask,agvWrkMast,param); |
| | | } catch (NoSuchMethodException e) { |
| | | return R.error("任务状态status参数有误"); |
| | | } catch (InvocationTargetException e) { |
| | |
| | | */ |
| | | task{ |
| | | @Transactional |
| | | public void success(AgvTaskCallBackParam param) { |
| | | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | //修改AGV工作档的工作状态为205.工作完成 |
| | | agvWrkMastService.updateWrkStsByWrkNo(Integer.valueOf(param.getTaskCode()),205); |
| | | agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),205); |
| | | |
| | | //出库任务 101.出库 || 103.拣料出库 |
| | | if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103){ |
| | | //修改出库站点状态 |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode()); |
| | | } |
| | | } |
| | | |
| | | public void fail(AgvTaskCallBackParam param) { |
| | | public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void cancel(AgvTaskCallBackParam param) { |
| | | public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void suspend(AgvTaskCallBackParam param) { |
| | | public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | }, |
| | |
| | | */ |
| | | task_allocated{ |
| | | @Transactional |
| | | public void success(AgvTaskCallBackParam param) { |
| | | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void fail(AgvTaskCallBackParam param) { |
| | | public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void cancel(AgvTaskCallBackParam param) { |
| | | public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void suspend(AgvTaskCallBackParam param) { |
| | | public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | }, |
| | |
| | | */ |
| | | tote_load{ |
| | | @Transactional |
| | | public void success(AgvTaskCallBackParam param) { |
| | | //修改源站点状态为O.空,以及解绑托盘条码 |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getStationCode(),"O",""); |
| | | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | //入库任务 || 拣料入库任务 |
| | | if(agvWrkMast.getIoType() == 1 || agvWrkMast.getIoType() == 53){ |
| | | //修改源站点状态为O.空,以及解绑托盘条码 |
| | | agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O",""); |
| | | } |
| | | |
| | | //出库任务 101.出库 || 103.拣料出库 |
| | | if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103){ |
| | | //修改源库位状态 |
| | | |
| | | } |
| | | |
| | | //修改AGV工作档的工作状态为203.RCS放货中 |
| | | agvWrkMastService.updateWrkStsByWrkNo(Integer.valueOf(param.getTaskCode()),203); |
| | | //修改AGV入库通知档状态 |
| | | //agvWaitPakinService.updateIoStatus(Integer.valueOf(param.getTaskCode()),"Y"); |
| | | agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),203); |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | public void fail(AgvTaskCallBackParam param) { |
| | | public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void cancel(AgvTaskCallBackParam param) { |
| | | public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void suspend(AgvTaskCallBackParam param) { |
| | | public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | }, |
| | |
| | | */ |
| | | tote_unload{ |
| | | @Transactional |
| | | public void success(AgvTaskCallBackParam param) { |
| | | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | //修改工作档状态为204.放货完成 |
| | | agvWrkMastService.updateWrkStsByWrkNo(Integer.valueOf(param.getTaskCode()),204); |
| | | agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),204); |
| | | } |
| | | |
| | | public void fail(AgvTaskCallBackParam param) { |
| | | public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void cancel(AgvTaskCallBackParam param) { |
| | | public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void suspend(AgvTaskCallBackParam param) { |
| | | public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | }, |
| | | robot_reach{ |
| | | @Transactional |
| | | public void success(AgvTaskCallBackParam param) { |
| | | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void fail(AgvTaskCallBackParam param) { |
| | | public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void cancel(AgvTaskCallBackParam param) { |
| | | public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void suspend(AgvTaskCallBackParam param) { |
| | | public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | }, |
| | | weight{ |
| | | @Transactional |
| | | public void success(AgvTaskCallBackParam param) { |
| | | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void fail(AgvTaskCallBackParam param) { |
| | | public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void cancel(AgvTaskCallBackParam param) { |
| | | public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void suspend(AgvTaskCallBackParam param) { |
| | | public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | }, |
| | | rfid{ |
| | | @Transactional |
| | | public void success(AgvTaskCallBackParam param) { |
| | | public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void fail(AgvTaskCallBackParam param) { |
| | | public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void cancel(AgvTaskCallBackParam param) { |
| | | public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | |
| | | public void suspend(AgvTaskCallBackParam param) { |
| | | public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { |
| | | |
| | | } |
| | | }; |
| | | |
| | | //任务状态为成功 |
| | | public abstract void success(AgvTaskCallBackParam param); |
| | | public abstract void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param); |
| | | //任务状态为失败 |
| | | public abstract void fail(AgvTaskCallBackParam param); |
| | | public abstract void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param); |
| | | //任务状态为取消 |
| | | public abstract void cancel(AgvTaskCallBackParam param); |
| | | public abstract void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param); |
| | | //任务状态为挂起 |
| | | public abstract void suspend(AgvTaskCallBackParam param); |
| | | public abstract void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param); |
| | | |
| | | @Setter |
| | | AgvBasDevpService agvBasDevpService; |
| | |
| | | if (Cools.isEmpty(agvWrkMastList)){ |
| | | return R.error(); |
| | | } |
| | | Map<String, List<Map<String, String>>> containerMoveParam = agvWrkMastService.startWrk(agvWrkMastList); |
| | | int startWrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway"); |
| | | |
| | | int code = agvWrkMastService.containerMove(containerMoveParam); |
| | | int code = agvWrkMastService.containerMove(agvWrkMastList); |
| | | |
| | | if(code == 0){ |
| | | agvWrkMastList.forEach(agvWrkMast -> { |
| | |
| | | continue; |
| | | } |
| | | //先找AGV的库存,如果返回的issued大于0,则去四项库找 |
| | | issued = agvLocDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),null,locDtoList,issued); |
| | | issued = agvLocDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),JSON.toJSONString(vo.getOrderDtos()),locDtoList,issued); |
| | | //从四项库的库存里面找, |
| | | issued = locDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),null,locDtoList,issued); |
| | | issued = locDetlService.queryStockAndSetLocDto(vo.getMatnr(),vo.getBatch(),JSON.toJSONString(vo.getOrderDtos()),locDtoList,issued); |
| | | |
| | | if (issued > 0) { |
| | | LocDto locDto = new LocDto(null, vo.getMatnr(), vo.getMaktx(), vo.getBatch(), null, issued); |
| | | LocDto locDto = new LocDto(null, vo.getMatnr(), vo.getMaktx(), vo.getBatch(), JSON.toJSONString(vo.getOrderDtos()), issued); |
| | | locDto.setLack(Boolean.TRUE); |
| | | locDtoList.add(locDto); |
| | | } |
| | |
| | | //TODO 假如出库站点不足,记录未出库的库位; |
| | | return; |
| | | } |
| | | agvBasDevp.setLocSts("S"); |
| | | agvBasDevpService.updateById(agvBasDevp); |
| | | TaskDto taskDto = new TaskDto(locDto.getLocNo(), agvBasDevp.getDevNo(), locDto); |
| | | //TODO 暂不考虑库位混载状态(后续看情况是否需要判断) |
| | | agvTaskDtos.add(taskDto); |
| | |
| | | package com.zy.asrs.service; |
| | | |
| | | import com.zy.asrs.entity.AgvBasDevp; |
| | | import com.zy.asrs.entity.AgvWrkMast; |
| | | import com.zy.common.model.StartupDto; |
| | | import com.zy.common.model.TaskDto; |
| | | |
| | |
| | | */ |
| | | void stockOutWrkMast(List<TaskDto> agvTaskDtos, Long userId); |
| | | |
| | | /* |
| | | 生成拣料入库任务 |
| | | */ |
| | | void pickIn(List<AgvWrkMast> agvWrkMastList); |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | public interface AgvWrkMastService extends IService<AgvWrkMast> { |
| | | |
| | | public void updateWrkStsByWrkNo(int wrkNo, long wrkSts); |
| | | |
| | | public Map<String,List<Map<String,String>>> startWrk(List<AgvWrkMast> agvWrkMastList) throws IOException; |
| | | public int startWrk(List<AgvWrkMast> agvWrkMastList, String taskType) throws IOException; |
| | | |
| | | public int containerMove(Map<String, List<Map<String, String>>> containerMoveParam) throws IOException; |
| | | public int containerMove(List<AgvWrkMast> agvWrkMastList) throws IOException; |
| | | |
| | | public int containerMoveOut(List<AgvWrkMast> agvWrkMastList) throws IOException; |
| | | } |
| | |
| | | import com.core.common.Cools; |
| | | import com.zy.asrs.entity.AgvBasDevp; |
| | | import com.zy.asrs.entity.AgvWaitPakin; |
| | | import com.zy.asrs.entity.AgvWrkDetl; |
| | | import com.zy.asrs.entity.AgvWrkMast; |
| | | import com.zy.asrs.mapper.AgvBasDevpMapper; |
| | | import com.zy.asrs.service.AgvBasDevpService; |
| | |
| | | AgvBasDevpDto agvBasDevpDto = new AgvBasDevpDto(); |
| | | BeanUtils.copyProperties(agvBasDevp, agvBasDevpDto); |
| | | |
| | | if (Cools.isEmpty(agvBasDevpDto.getBarcode())) { |
| | | // if (Cools.isEmpty(agvBasDevpDto.getBarcode())) { |
| | | // return agvBasDevpDto; |
| | | // } |
| | | |
| | | if("O".equals(agvBasDevpDto.getLocSts())){ |
| | | return agvBasDevpDto; |
| | | } |
| | | |
| | | AgvWaitPakin agvWaitPakin = agvWaitPakinService.selectOne(new EntityWrapper<AgvWaitPakin>() |
| | | .eq("zpallet", agvBasDevpDto.getBarcode())); |
| | | |
| | | agvBasDevpDto.setAgvWaitPakin(agvWaitPakin); |
| | | |
| | | // AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>() |
| | | // .eq("barcode", agvBasDevpDto.getBarcode())); |
| | | AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>() |
| | | .eq("barcode", agvBasDevpDto.getBarcode())); |
| | | .eq("loc_no", agvBasDevpDto.getDevNo()) |
| | | .or().eq("source_loc_no",agvBasDevpDto.getDevNo())); |
| | | |
| | | agvBasDevpDto.setAgvWrkMast(agvWrkMast); |
| | | |
| | | if("F".equals(agvBasDevpDto.getLocSts()) || "R".equals(agvBasDevpDto.getLocSts())){ |
| | | AgvWaitPakin agvWaitPakin = agvWaitPakinService.selectOne(new EntityWrapper<AgvWaitPakin>() |
| | | .eq("zpallet", agvBasDevpDto.getBarcode())); |
| | | |
| | | agvBasDevpDto.setAgvWaitPakin(agvWaitPakin); |
| | | |
| | | if(Cools.isEmpty(agvWaitPakin)){ |
| | | AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>(). |
| | | eq("wrk_no",agvWrkMast.getWrkNo())); |
| | | |
| | | agvBasDevpDto.setAgvWrkDetl(agvWrkDetl); |
| | | } |
| | | } |
| | | |
| | | return agvBasDevpDto; |
| | | |
| | | }).collect(Collectors.toList()); |
| | |
| | | agvTaskDtos.forEach(taskDto -> { |
| | | |
| | | AgvLocMast agvLocMast = agvLockMastService.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(agvLockMastService.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); |
| | | agvWrkMast.setIoType(53); |
| | | 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 = agvLockMastService.selectById(agvWrkMast.getLocNo()); |
| | | AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocMast.getLocNo())); |
| | | AgvBasDevp agvBasDevp = agvBasDevpService.selectById(agvWrkMast.getSourceLocNo()); |
| | | //修改工作党明细 |
| | | 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())); |
| | | //修改库位信息 |
| | | agvLocMast.setLocSts("Q"); |
| | | agvLockMastService.selectById(agvLocMast); |
| | | //修改站点信息 |
| | | agvBasDevp.setLocSts("R"); |
| | | agvBasDevpService.updateById(agvBasDevp); |
| | | |
| | | }); |
| | | } |
| | |
| | | }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); |
| | |
| | | import com.zy.asrs.entity.param.AgvTaskParam; |
| | | import com.zy.asrs.entity.param.AgvTaskkDescribeParam; |
| | | import com.zy.asrs.mapper.AgvWrkMastMapper; |
| | | import com.zy.asrs.service.AgvLocMastService; |
| | | import com.zy.asrs.service.AgvWrkDetlService; |
| | | import com.zy.asrs.service.AgvWrkMastService; |
| | | import com.zy.asrs.service.ApiLogService; |
| | | import com.zy.common.utils.HttpHandler; |
| | |
| | | @Autowired |
| | | AgvWrkMastMapper agvWrkMastMapper; |
| | | @Autowired |
| | | AgvWrkDetlService agvWrkDetlService; |
| | | @Autowired |
| | | AgvLocMastService agvLocMastService; |
| | | @Autowired |
| | | ApiLogService apiLogService; |
| | | |
| | | public void updateWrkStsByWrkNo(int wrkNo, long wrkSts) { |
| | |
| | | this.updateById(agvWrkMast); |
| | | } |
| | | |
| | | // TODO 判断规则 |
| | | private boolean checkWrkSts(AgvWrkMast agvWrkMast,long wrkSts){ |
| | | |
| | | // 判断规则TODO |
| | | |
| | | |
| | | return true; |
| | | } |
| | | |
| | | public Map<String,List<Map<String,String>>> startWrk(List<AgvWrkMast> agvWrkMastList) throws IOException { |
| | | public int startWrk(List<AgvWrkMast> agvWrkMastList, String taskType) throws IOException { |
| | | |
| | | AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam(); |
| | | agvTaskCreateParam.setTaskType("putaway"); |
| | | agvTaskCreateParam.setTaskType(taskType); |
| | | |
| | | // //调用容器入场时所需要参数 |
| | | // Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>(); |
| | | // List<Map<String,String>> positionCodeMapList = new ArrayList<>(); |
| | | // containerMoveParam.put("containerMoveIns",positionCodeMapList); |
| | | |
| | | getRequestParam(agvTaskCreateParam,agvWrkMastList); |
| | | |
| | | return doHttpRequest(agvTaskCreateParam,"上架任务下发",url, taskCreatePath,null,"127.0.0.1"); |
| | | |
| | | //return containerMoveParam; |
| | | } |
| | | |
| | | //容器入场 |
| | | public int containerMove(List<AgvWrkMast> agvWrkMastList) throws IOException { |
| | | //调用容器入场时所需要参数 |
| | | Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>(); |
| | | List<Map<String,String>> positionCodeMapList = new ArrayList<>(); |
| | | containerMoveParam.put("containerMoveIns",positionCodeMapList); |
| | | |
| | | getRequestParam(agvTaskCreateParam,agvWrkMastList,positionCodeMapList); |
| | | |
| | | doHttpRequest(agvTaskCreateParam,"上架任务下发",url, taskCreatePath,null,"127.0.0.1"); |
| | | |
| | | return containerMoveParam; |
| | | } |
| | | |
| | | public int containerMove(Map<String, List<Map<String, String>>> containerMoveParam) throws IOException { |
| | | |
| | | getContainerMoveParam(agvWrkMastList,positionCodeMapList); |
| | | return doHttpRequest(containerMoveParam,"容器入场任务下发",url, containerMoveInPath,null,"127.0.0.1"); |
| | | |
| | | } |
| | | |
| | | private void getRequestParam(AgvTaskCreateParam agvTaskCreateParam,List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){ |
| | | //容器离场 |
| | | public int containerMoveOut(List<AgvWrkMast> agvWrkMastList){ |
| | | Map<String,List<Map<String,String>>> containerMoveParam = new HashMap<>(); |
| | | List<Map<String,String>> positionCodeMapList = new ArrayList<>(); |
| | | containerMoveParam.put("containerMoveOuts",positionCodeMapList); |
| | | for(AgvWrkMast agvWrkMast : agvWrkMastList){ |
| | | Map<String,String> positionCodeMap = new HashMap<>(); |
| | | positionCodeMap.put("positionCode",agvWrkMast.getLocNo()); |
| | | positionCodeMapList.add(positionCodeMap); |
| | | } |
| | | return doHttpRequest(containerMoveParam,"容器入场任务下发",url, containerMoveInPath,null,"127.0.0.1"); |
| | | } |
| | | |
| | | private void getContainerMoveParam(List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){ |
| | | //往容器入场参数中放入源站点位置 |
| | | for(AgvWrkMast agvWrkMast : agvWrkMastList){ |
| | | Map<String,String> positionCodeMap = new HashMap<>(); |
| | | positionCodeMap.put("positionCode",agvWrkMast.getSourceLocNo()); |
| | | positionCodeMapList.add(positionCodeMap); |
| | | } |
| | | } |
| | | |
| | | private void getRequestParam(AgvTaskCreateParam agvTaskCreateParam,List<AgvWrkMast> agvWrkMastList){ |
| | | List<AgvTaskParam> agvTaskParamList = agvWrkMastList.stream().map(agvWrkMast -> { |
| | | AgvTaskParam agvTaskParam = new AgvTaskParam(); |
| | | AgvTaskkDescribeParam agvTaskkDescribeParam = new AgvTaskkDescribeParam(); |
| | |
| | | //AgvTaskParam |
| | | agvTaskParam.setTaskCode(agvWrkMast.getWrkNo().toString()); |
| | | agvTaskParam.setTaskPriority(agvWrkMast.getIoPri().intValue()); |
| | | |
| | | //往容器入场参数中放入源站点位置 |
| | | Map<String,String> positionCodeMap = new HashMap<>(); |
| | | positionCodeMap.put("positionCode",agvWrkMast.getSourceLocNo()); |
| | | positionCodeMapList.add(positionCodeMap); |
| | | |
| | | //AgvTaskkDescribeParam |
| | | agvTaskkDescribeParam.setFromLocationCode(agvWrkMast.getSourceLocNo()); |
| | |
| | | } |
| | | // 如果 作业数量等于单据总数量 && 工作明细档中无该单据的数据 && AGV工作明细档中无该单据的数据 |
| | | if (complete |
| | | && wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("order_no", orderNo)) < 1 |
| | | && agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().eq("order_no",orderNo)) < 1) { |
| | | && wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().like("order_no", orderNo)) < 1 |
| | | && agvWrkDetlService.selectCount(new EntityWrapper<AgvWrkDetl>().like("order_no",orderNo)) < 1) { |
| | | // 出库订单重新整理明细 |
| | | DocType docType = docTypeService.selectById(order.getDocType()); |
| | | if (null != docType && docType.getPakout() == 1) { |
| | | // 重组明细 |
| | | if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) { |
| | | throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); |
| | | } |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo); |
| | | for (WrkDetl wrkDetl : wrkDetls) { |
| | | OrderDetl orderDetl = new OrderDetl(); |
| | | orderDetl.sync(wrkDetl); |
| | | orderDetl.setQty(orderDetl.getAnfme()); |
| | | orderDetl.setOrderId(order.getId()); |
| | | orderDetl.setOrderNo(orderNo); |
| | | orderDetl.setStatus(1); |
| | | orderDetl.setCreateTime(order.getCreateTime()); |
| | | orderDetl.setCreateBy(order.getCreateBy()); |
| | | orderDetl.setUpdateTime(order.getUpdateTime()); |
| | | orderDetl.setUpdateBy(order.getUpdateBy()); |
| | | if (!orderDetlService.insert(orderDetl)) { |
| | | throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); |
| | | } |
| | | } |
| | | } |
| | | // DocType docType = docTypeService.selectById(order.getDocType()); |
| | | // if (null != docType && docType.getPakout() == 1) { |
| | | // // 重组明细 |
| | | // if (!orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()))) { |
| | | // throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); |
| | | // } |
| | | // List<WrkDetl> wrkDetls = wrkDetlService.selectAndLogByOrderNo(orderNo); |
| | | // for (WrkDetl wrkDetl : wrkDetls) { |
| | | // OrderDetl orderDetl = new OrderDetl(); |
| | | // orderDetl.sync(wrkDetl); |
| | | // orderDetl.setQty(orderDetl.getAnfme()); |
| | | // orderDetl.setOrderId(order.getId()); |
| | | // orderDetl.setOrderNo(orderNo); |
| | | // orderDetl.setStatus(1); |
| | | // orderDetl.setCreateTime(order.getCreateTime()); |
| | | // orderDetl.setCreateBy(order.getCreateBy()); |
| | | // orderDetl.setUpdateTime(order.getUpdateTime()); |
| | | // orderDetl.setUpdateBy(order.getUpdateBy()); |
| | | // if (!orderDetlService.insert(orderDetl)) { |
| | | // throw new CoolException("重整出库订单【orderNo = " + order.getOrderNo() + "】明细失败"); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | if (!this.updateSettle(order.getId(), 4L, null)) { |
| | | throw new CoolException("修改订单【orderNo = " + order.getOrderNo() + "】状态为已完成失败"); |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.swing.*; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | |
| | | } 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); |
| | |
| | | } |
| | | } else { |
| | | // 订单合并出库 |
| | | |
| | | //实际取消的出库数量 |
| | | Double wrkDetlAnfme = wrkDetl.getAnfme(); |
| | | //订单实际出库数量 |
| | | Double orderAnfme; |
| | | |
| | | List<OrderDto> orderDtoList = JSON.parseArray(wrkDetl.getOrderNo(), OrderDto.class); |
| | | for (OrderDto orderDto : orderDtoList) { |
| | | if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderDto.getAnfme())) { |
| | | |
| | | if(wrkDetlAnfme > orderDto.getAnfme()){ |
| | | orderAnfme = orderDto.getAnfme(); |
| | | wrkDetlAnfme -= orderAnfme; |
| | | }else { |
| | | orderAnfme = wrkDetlAnfme; |
| | | } |
| | | |
| | | if (!orderDetlService.decrease(orderDto.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), orderAnfme)) { |
| | | throw new CoolException("订单数据回滚失败"); |
| | | } |
| | | } |
| | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 定时处理AGV工作档中工作状态为205.工作完成的数据 |
| | | * 任务类型: |
| | | * putaway:上架。 |
| | | * carry:搬运,统指出库、移库、点到点搬运等。 |
| | | * scan:扫描盘点。 |
| | | * weight:称重盘点。 |
| | | * rfid:rfid盘点。 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | |
| | | @Autowired |
| | | AgvWrkMastService agvWrkMastService; |
| | | |
| | | |
| | | /* |
| | | 定时处理AGV工作档中工作状态为205.工作完成 且 (1.入库 || 53,拣料入库)的数据 |
| | | */ |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | public void excutePutwayWrk(){ |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 205) |
| | | .eq("io_type",1)); |
| | | .andNew().eq("io_type",53) |
| | | .or().eq("io_type",1)); |
| | | if(!Cools.isEmpty(agvWrkMastList)){ |
| | | agvWrkMastList.stream().forEach(agvWrkMast -> { |
| | | ReturnT<String> returnT = agvWrkMastHandler.completedPutWayWrk(agvWrkMast); |
| | |
| | | } |
| | | } |
| | | |
| | | /* |
| | | 定时处理AGV工作档中工作状态为205.工作完成 且 101出库类型的数据 |
| | | */ |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | public void excuteCarryWrk(){ |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 207) |
| | | .eq("io_type",101)); |
| | | if(!Cools.isEmpty(agvWrkMastList)){ |
| | | agvWrkMastList.stream().forEach(agvWrkMast -> { |
| | | ReturnT<String> returnT = agvWrkMastHandler.completedCarryWrk(agvWrkMast); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | /* |
| | | putaway:上架 |
| | | */ |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | public void startPutwayWrk(){ |
| | | |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) |
| | | ,new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 201) |
| | | .eq("wrk_sts", 201) //201.生成入库任务ID |
| | | .andNew().eq("io_type", 53).or() //53.拣料再入库 |
| | | .eq("io_type", 1)).getRecords(); |
| | | |
| | | if(!Cools.isEmpty(agvWrkMastList)){ |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* |
| | | carry:搬运,统指出库、移库、点到点搬运等 |
| | | */ |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | public void startCarryWrk(){ |
| | | |
| | | List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) |
| | | ,new EntityWrapper<AgvWrkMast>() |
| | | .eq("wrk_sts", 21) //21.生成出库任务 |
| | | .andNew().eq("io_type", 101).or() |
| | | .eq("io_type", 103)).getRecords(); |
| | | |
| | | if(!Cools.isEmpty(agvWrkMastList)){ |
| | | try { |
| | | ReturnT<String> returnT = agvWrkMastHandler.startCarryWrk(agvWrkMastList); |
| | | } catch (IOException e) { |
| | | log.error(e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | package com.zy.asrs.task.handler; |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | | import com.zy.asrs.entity.AgvLocDetl; |
| | | import com.zy.asrs.entity.AgvWaitPakin; |
| | | import com.zy.asrs.entity.AgvWrkDetl; |
| | | import com.zy.asrs.entity.AgvWrkMast; |
| | |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //修改目标库位状态为F.在库 |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F"); |
| | | //更新目标库位明细 |
| | | agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo); |
| | | //生成AGV工作历史档 |
| | | agvWrkMastLogService.save(wrkNo); |
| | | //生成AGV工作明细历史档 |
| | | agvWrkDetlLogService.save(wrkNo); |
| | | //生成入库通知历史档 |
| | | agvWaitPakinLogService.save(barcode); |
| | | //删除AGV工作档 |
| | | agvWrkMastService.deleteById(wrkNo); |
| | | //删除AGV工作明细档 |
| | | agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); |
| | | //删除入库通知档 |
| | | agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("zpallet",barcode)); |
| | | if(agvWrkMast.getIoType() == 1){ |
| | | //更新目标库位明细 |
| | | agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo); |
| | | //生成入库通知历史档 |
| | | agvWaitPakinLogService.save(barcode); |
| | | //删除入库通知档 |
| | | agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("zpallet",barcode)); |
| | | |
| | | //检查订单是否已完成 |
| | | orderService.checkComplete(orderNo); |
| | | } |
| | | 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; |
| | | } |
| | | |
| | | @Transactional |
| | | public ReturnT<String> startPutWayWrk(List<AgvWrkMast> agvWrkMastList) throws IOException { |
| | | Map<String, List<Map<String, String>>> containerMoveParam = agvWrkMastService.startWrk(agvWrkMastList); |
| | | public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) { |
| | | int wrkNo = agvWrkMast.getWrkNo(); |
| | | String orderNo = getOrderNoByWrkNo(wrkNo); |
| | | //修改工作档状态为206.库存更新完成 |
| | | agvWrkMast.setWrkSts(206L); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | //修改源库位状态为O |
| | | agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O"); |
| | | //更新目标库位明细 |
| | | agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); |
| | | //生成AGV工作历史档 |
| | | agvWrkMastLogService.save(wrkNo); |
| | | //生成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; |
| | | } |
| | | |
| | | int code = agvWrkMastService.containerMove(containerMoveParam); |
| | | @Transactional |
| | | public ReturnT<String> startPutWayWrk(List<AgvWrkMast> agvWrkMastList) throws IOException { |
| | | |
| | | int startWwrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway"); |
| | | |
| | | int code = agvWrkMastService.containerMove(agvWrkMastList); |
| | | |
| | | if(code == 0){ |
| | | agvWrkMastList.forEach(agvWrkMast -> { |
| | | //202.RCS取货中 |
| | | agvWrkMast.setWrkSts((long)202); |
| | | //修改AGV入库通知档状态入出状态为Y |
| | | agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y"); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | if(agvWrkMast.getIoType() == 1){ |
| | | //修改AGV入库通知档状态入出状态为Y |
| | | agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y"); |
| | | } |
| | | |
| | | }); |
| | | //agvWrkMastService.updateBatchById(agvWrkMastList); |
| | | |
| | | return SUCCESS; |
| | | } |
| | | |
| | | return FAIL; |
| | | } |
| | | |
| | | @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((long)202); |
| | | agvWrkMastService.updateById(agvWrkMast); |
| | | }); |
| | | //agvWrkMastService.updateBatchById(agvWrkMastList); |
| | |
| | | AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkNo)); |
| | | return agvWrkDetl.getOrderNo(); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | String order = "[{\"anfme\":50.0,\"orderNo\":\"CS110011001111\"},{\"anfme\":50.0,\"orderNo\":\"CS110011001110\"}]"; |
| | | List<Map> maps = JSONArray.parseArray(order, Map.class); |
| | | maps.forEach(map -> { |
| | | Object orderNo = map.get("orderNo"); |
| | | System.out.println(orderNo ); |
| | | }); |
| | | } |
| | | |
| | | private boolean isJSON(String str) { |
| | | if (Cools.isEmpty(str)) { |
| | | return false; |
| | | } else { |
| | | str = str.trim(); |
| | | if (str.startsWith("{") && str.endsWith("}")) { |
| | | return true; |
| | | } else if (str.startsWith("[") && str.endsWith("]")) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | import com.zy.asrs.entity.AgvBasDevp; |
| | | import com.zy.asrs.entity.AgvWaitPakin; |
| | | import com.zy.asrs.entity.AgvWrkDetl; |
| | | import com.zy.asrs.entity.AgvWrkMast; |
| | | import lombok.Data; |
| | | |
| | |
| | | |
| | | private AgvWaitPakin agvWaitPakin; |
| | | |
| | | private AgvWrkDetl agvWrkDetl; |
| | | |
| | | } |
| | |
| | | layer.msg("此站点的状态不存在物料"); |
| | | return; |
| | | } |
| | | locDetlToLayer(data.barcode); |
| | | locDetlToLayer(data.devNo,data.barcode); |
| | | break; |
| | | case 'unbind': |
| | | // locDetl(data.locNo); |
| | |
| | | } |
| | | |
| | | // iframe物料详情 |
| | | function locDetlToLayer(val) { |
| | | barcode = val; |
| | | function locDetlToLayer(val1,val2) { |
| | | devNo = val1; |
| | | barcode = val2; |
| | | layer.open({ |
| | | type: 2, |
| | | title: '站点明细', |
| | |
| | | ] |
| | | |
| | | var detlCols = [ |
| | | ,{field: 'zpallet', align: 'center',title: '托盘条码', width: 110} |
| | | ,{field: 'zpallet', align: 'center',title: '托盘条码', hide: true} |
| | | ,{field: 'zpallet', align: 'center',title: '托盘条码', hide: false} |
| | | ,{field: 'matnr', align: 'center',title: '物料号'} |
| | | ,{field: 'batch', align: 'center',title: '序列码', width: 300, sort:true, hide: false} |
| | | ,{field: 'maktx', align: 'center',title: '物料名称'} |
| | |
| | | }else { |
| | | $('#zpallet').val(tmp); |
| | | } |
| | | |
| | | // 数据渲染 |
| | | tableIns = table.render({ |
| | | elem: '#locDetlByMap', |
| | | headers: {token: localStorage.getItem('token')}, |
| | | url: baseUrl+'/agv/waitPakin/list/auth', |
| | | url: baseUrl+'/agv/basDevp/detail/list/auth', |
| | | page: true, |
| | | limit: 20, |
| | | skin: 'line', |
| | | where: {zpallet: $('#zpallet').val()}, |
| | | //where: {zpallet: $('#zpallet').val()}, |
| | | where: {devNo: parent.devNo}, |
| | | even: true, |
| | | cellMinWidth: 50, |
| | | cols: [getCol()], |
| | |
| | | <input type="checkbox" lay-skin="primary" name="cardCheckBox" value="{{devNo}}"/> |
| | | </div> |
| | | <div style="float:right; width:85%;"> |
| | | <!-- <div>--> |
| | | <!-- <button type="button" class="layui-btn layui-btn-normal" value="{{devNo}}">拣料入库</button>--> |
| | | <!-- </div>--> |
| | | |
| | | {{#if agvWrkDetl}} |
| | | <div style=" padding-bottom: 20px"> |
| | | |
| | | <button type="button" class="layui-btn layui-btn-normal" value="{{devNo}}" lay-submit lay-filter="containerMoveOut">容器离场</button> |
| | | <button type="button" class="layui-btn layui-btn-normal" value="{{devNo}}" lay-submit lay-filter="pickIn">拣料入库</button> |
| | | |
| | | </div> |
| | | {{/if}} |
| | | |
| | | <div> |
| | | 工作站编码:{{devNo}} </br> |
| | | 站点状态:{{locSts$}} |
| | |
| | | 工作号:{{agvWrkMast.wrkNo}} </br> |
| | | 工作状态:{{agvWrkMast.wrkSts$ }} </br> |
| | | 工作类型:{{agvWrkMast.ioType$}} |
| | | </div> |
| | | {{/if}} |
| | | {{#if agvWrkDetl}} |
| | | <div style="padding-top: 10px;"> |
| | | 物料号:{{agvWrkDetl.matnr}} </br> |
| | | {{#if agvWrkDetl.batch}} |
| | | 序列码:{{agvWrkDetl.batch}} </br> |
| | | {{/if}} |
| | | 托盘码:{{agvWrkDetl.zpallet}} </br> |
| | | 数量:{{agvWrkDetl.anfme}} |
| | | </div> |
| | | {{/if}} |
| | | </div> |
| | |
| | | var table = layui.table; |
| | | var layer = layui.layer; |
| | | var param = {'stationCode' : 'CS-101'}; |
| | | loadData(param); |
| | | |
| | | form.on('select(floorSelect)', function (data) { |
| | | |
| | |
| | | param = null; |
| | | param = {'stationCode' : $('#rowSelect').val()}; |
| | | loadData(param); |
| | | // $.ajax({ |
| | | // url: baseUrl+"/agv/basDevp/visualized/list/auth", |
| | | // headers: {'token': localStorage.getItem('token')}, |
| | | // data: JSON.stringify(param), |
| | | // dataType:'json', |
| | | // contentType:'application/json;charset=UTF-8', |
| | | // method: 'POST', |
| | | // success: function (res) { |
| | | // if (res.code === 200){ |
| | | // var tpl = $("#basDevpMapTemplate").html(); |
| | | // var template = Handlebars.compile(tpl); |
| | | // var html = template(res.data); |
| | | // $('#basDevpMap').html(html); |
| | | // } else if (res.code === 403){ |
| | | // top.location.href = baseUrl+"/"; |
| | | // }else { |
| | | // layer.msg(res.msg) |
| | | // } |
| | | // } |
| | | // }) |
| | | }); |
| | | |
| | | //全选 |
| | |
| | | for (var i = 0; i < cks.length; i++) { |
| | | cks[i].checked = !cks[i].checked; |
| | | } |
| | | }); |
| | | |
| | | //容器离场 |
| | | form.on('submit(containerMoveOut)', function () { |
| | | var devNoList = []; |
| | | devNoList.push(this.value); |
| | | var moveOutParam = {'devNo' : devNoList}; |
| | | $.ajax({ |
| | | url: baseUrl+"/agv/basDevp/visualized/container/moveOut", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | data: JSON.stringify(moveOutParam), |
| | | dataType:'json', |
| | | contentType:'application/json;charset=UTF-8', |
| | | method: 'POST', |
| | | success: function (res) { |
| | | if (res.code === 200){ |
| | | layer.msg(res.msg); |
| | | loadData(param); |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | } else { |
| | | layer.msg(res.msg) |
| | | } |
| | | } |
| | | }) |
| | | |
| | | }); |
| | | |
| | | //拣料入库 |
| | | form.on('submit(pickIn)', function () { |
| | | var devNoList = []; |
| | | devNoList.push(this.value); |
| | | var pickInParam = {'devNo' : devNoList}; |
| | | $.ajax({ |
| | | url: baseUrl+"/agv/basDevp/visualized/container/pickIn", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | data: JSON.stringify(pickInParam), |
| | | dataType:'json', |
| | | contentType:'application/json;charset=UTF-8', |
| | | method: 'POST', |
| | | success: function (res) { |
| | | if (res.code === 200){ |
| | | layer.msg(res.msg); |
| | | loadData(param); |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | } else { |
| | | layer.msg(res.msg) |
| | | } |
| | | } |
| | | }) |
| | | }); |
| | | |
| | | //启动入库 |
| | |
| | | //定时刷新数据 |
| | | //setInterval(loadData(param), 1000); |
| | | |
| | | setInterval(function() { |
| | | loadData(param); |
| | | }, 1000); |
| | | // setInterval(function() { |
| | | // loadData(param); |
| | | // }, 1000); |
| | | |
| | | function loadData(param){ |
| | | $.ajax({ |
| | |
| | | </div> |
| | | </td> |
| | | </tr> |
| | | <tr style="height: 74px; font-size: 18px;font-weight: 400"> |
| | | <tr style="height: 50px; font-size: 18px;font-weight: 400"> |
| | | <td width="50px" align="center" colspan="1">规格</td> |
| | | <td align="center" colspan="3" style=" |
| | | overflow:hidden; |