|  |  | 
 |  |  | package com.zy.asrs.controller; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSON; | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
 |  |  | import com.core.annotations.AppAuth; | 
 |  |  | import com.core.common.Cools; | 
 |  |  | 
 |  |  | import java.lang.reflect.InvocationTargetException; | 
 |  |  | import java.lang.reflect.Method; | 
 |  |  | import java.util.EnumSet; | 
 |  |  | import java.util.Map; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 上报事件类型(eventType): | 
 |  |  | 
 |  |  |     @AppAuth(memo = "ESS任务回调") | 
 |  |  |     public R taskEventStaus(@RequestBody AgvTaskCallBackParam param, HttpServletRequest request){ | 
 |  |  |  | 
 |  |  |         apiLogService.save( | 
 |  |  |                 "ESS任务回调", | 
 |  |  |                 "/phyzwms/agv/task/event/status", | 
 |  |  |                 null, | 
 |  |  |                 null, | 
 |  |  |                 JSON.toJSONString(JSONObject.toJSONString(param)), | 
 |  |  |                 null, | 
 |  |  |                 true | 
 |  |  |         ); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         //save api log (appkey 后续添加) | 
 |  |  |         AppAuthUtil.auth("test-appkey",param, request); | 
 |  |  |  | 
 |  |  |         AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("wrk_no", param.getTaskCode())); | 
 |  |  |         AppAuthUtil.auth("",param, request); | 
 |  |  |         int wrkNo = Integer.parseInt(param.getTaskCode()); | 
 |  |  |         if(wrkNo < 0){ | 
 |  |  |             wrkNo = -wrkNo; | 
 |  |  |         } | 
 |  |  |         AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("wrk_no", wrkNo)); | 
 |  |  |         if(Cools.isEmpty(agvWrkMast)){ | 
 |  |  |             return R.error("任务编号错误"); | 
 |  |  |             agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode",param.getPodCode())); | 
 |  |  |             if (Cools.isEmpty(agvWrkMast)){ | 
 |  |  |                 return R.error("任务编号错误"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if(!checkParam(param,agvWrkMast)){ | 
 |  |  |             return R.error("任务参数与工作档参数不符合"); | 
 |  |  |         if(agvWrkMast.getWrkSts() >= 205){ | 
 |  |  |             return R.error("当前任务已完成"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         AgvTask agvTask = AgvTask.valueOf(param.getEventType()); | 
 |  |  |         AgvTask agvTask = AgvTask.valueOf(param.getMethod()); | 
 |  |  |         Class<AgvTask> clz = AgvTask.class; | 
 |  |  |         try { | 
 |  |  |             Method method = clz.getDeclaredMethod(param.getStatus(),AgvTaskCallBackParam.class); | 
 |  |  |             method.invoke(agvTask,param); | 
 |  |  |             Method method = clz.getDeclaredMethod("success", AgvWrkMast.class, AgvTaskCallBackParam.class); | 
 |  |  |             method.invoke(agvTask,agvWrkMast,param); | 
 |  |  |         } catch (NoSuchMethodException e) { | 
 |  |  |             return R.error("任务状态status参数有误"); | 
 |  |  |         } catch (InvocationTargetException e) { | 
 |  |  | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private boolean checkParam(AgvTaskCallBackParam param, AgvWrkMast agvWrkMast){ | 
 |  |  |         if(!agvWrkMast.getLocNo().equals(param.getLocationCode())){ | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |         if(!agvWrkMast.getSourceLocNo().equals(param.getStationCode())){ | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |         return true; | 
 |  |  |     } | 
 |  |  |     @PostMapping("/conveyor/loadContainerFinish ") | 
 |  |  |     @AppAuth(memo = "取容器完成通知") | 
 |  |  |     public R loadContainerFinish(@RequestBody Map<String,Object> params){ | 
 |  |  |  | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  | } | 
 |  |  |  | 
 |  |  | enum AgvTask{ | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 上报任务状态 | 
 |  |  |      * 上报任务完成 | 
 |  |  |      */ | 
 |  |  |     task{ | 
 |  |  |     end{ | 
 |  |  |         @Transactional | 
 |  |  |         public void success(AgvTaskCallBackParam param) { | 
 |  |  |         public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { | 
 |  |  |             //修改AGV工作档的工作状态为205.工作完成 | 
 |  |  |             agvWrkMastService.updateWrkStsByWrkNo(Integer.valueOf(param.getTaskCode()),205); | 
 |  |  |         } | 
 |  |  |             agvWrkMast.setWrkSts(205L); | 
 |  |  |  | 
 |  |  |         public void fail(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void cancel(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void suspend(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |             //出库任务 101.出库 || 103.拣料出库 || 107.盘点出库 | 
 |  |  |             if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103 || agvWrkMast.getIoType() == 107){ | 
 |  |  |                 //修改出库站点状态 | 
 |  |  |                 agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
 |  |  |             } | 
 |  |  |             //出库任务 110.空板出库 | 
 |  |  |             if(agvWrkMast.getIoType() == 110){ | 
 |  |  |                 agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue()); | 
 |  |  |                 agvWrkMast.setWrkSts(206L); | 
 |  |  |             } | 
 |  |  |             agvWrkMastService.updateById(agvWrkMast); | 
 |  |  |         } | 
 |  |  |     }, | 
 |  |  |     /** | 
 |  |  |      * 上报任务分配给机器人 | 
 |  |  |      * 任务开始 | 
 |  |  |      */ | 
 |  |  |     task_allocated{ | 
 |  |  |     start{ | 
 |  |  |         @Transactional | 
 |  |  |         public void success(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void fail(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void cancel(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void suspend(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { | 
 |  |  |             //修改AGV工作档的工作状态为203.任务开始 | 
 |  |  |             agvWrkMast.setWrkSts(203L); | 
 |  |  |             agvWrkMastService.updateById(agvWrkMast); | 
 |  |  |         } | 
 |  |  |     }, | 
 |  |  |     /** | 
 |  |  |      * 上报取箱状态 | 
 |  |  |      * 走出储位状态 | 
 |  |  |      */ | 
 |  |  |     tote_load{ | 
 |  |  |     outbin{ | 
 |  |  |         @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 || agvWrkMast.getIoType() == 57 || agvWrkMast.getIoType() == 10){ | 
 |  |  |                 //修改源站点状态为O.空,以及解绑托盘条码 | 
 |  |  |                 agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",null); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             //修改AGV工作档的工作状态为203.RCS放货中 | 
 |  |  |             agvWrkMastService.updateWrkStsByWrkNo(Integer.valueOf(param.getTaskCode()),203); | 
 |  |  |             //修改AGV入库通知档状态 | 
 |  |  |             //agvWaitPakinService.updateIoStatus(Integer.valueOf(param.getTaskCode()),"Y"); | 
 |  |  |             agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),204); | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void fail(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void cancel(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void suspend(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     }, | 
 |  |  |     /** | 
 |  |  |      * 上报放箱状态 | 
 |  |  |      */ | 
 |  |  |     tote_unload{ | 
 |  |  |     cancel{ | 
 |  |  |         @Transactional | 
 |  |  |         public void success(AgvTaskCallBackParam param) { | 
 |  |  |             //修改工作档状态为204.放货完成 | 
 |  |  |             agvWrkMastService.updateWrkStsByWrkNo(Integer.valueOf(param.getTaskCode()),204); | 
 |  |  |         } | 
 |  |  |         public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         public void fail(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void cancel(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void suspend(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     }, | 
 |  |  |     robot_reach{ | 
 |  |  |     apply{ | 
 |  |  |         @Transactional | 
 |  |  |         public void success(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void fail(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void cancel(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void suspend(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     }, | 
 |  |  |     weight{ | 
 |  |  |         @Transactional | 
 |  |  |         public void success(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void fail(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void cancel(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void suspend(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     }, | 
 |  |  |     rfid{ | 
 |  |  |         @Transactional | 
 |  |  |         public void success(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void fail(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void cancel(AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         public void suspend(AgvTaskCallBackParam param) { | 
 |  |  |         public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     }; | 
 |  |  |  | 
 |  |  |     //任务状态为成功 | 
 |  |  |     public abstract void success(AgvTaskCallBackParam param); | 
 |  |  |     //任务状态为失败 | 
 |  |  |     public abstract void fail(AgvTaskCallBackParam param); | 
 |  |  |     //任务状态为取消 | 
 |  |  |     public abstract void cancel(AgvTaskCallBackParam param); | 
 |  |  |     //任务状态为挂起 | 
 |  |  |     public abstract void suspend(AgvTaskCallBackParam param); | 
 |  |  |     public abstract void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param); | 
 |  |  | //    //任务状态为失败 | 
 |  |  | //    public abstract void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param); | 
 |  |  | //    //任务状态为取消 | 
 |  |  | //    public abstract void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param); | 
 |  |  | //    //任务状态为挂起 | 
 |  |  | //    public abstract void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param); | 
 |  |  |  | 
 |  |  |     @Setter | 
 |  |  |     AgvBasDevpService agvBasDevpService; |