package com.zy.asrs.controller; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.R; import com.zy.asrs.entity.AgvWaitPakin; import com.zy.asrs.entity.AgvWrkDetl; import com.zy.asrs.entity.AgvWrkMast; import com.zy.asrs.entity.param.AgvTaskCallBackParam; import com.zy.asrs.service.*; import com.zy.common.web.BaseController; import lombok.Setter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.PostConstruct; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.EnumSet; @RestController @RequestMapping("/agv") public class AgvOpenController extends BaseController { @Autowired AgvWrkMastService agvWrkMastService; @PostMapping("/task/event/status") public R taskEventStaus(@RequestBody AgvTaskCallBackParam param){ int wrkMastCount = agvWrkMastService.selectCount(new EntityWrapper().eq("wrk_no", param.getTaskCode())); if(wrkMastCount < 1){ return R.error("任务编号错误"); } AgvTask agvTask = AgvTask.valueOf(param.getEventType()); Class clz = AgvTask.class; try { Method method = clz.getDeclaredMethod(param.getStatus(),AgvTaskCallBackParam.class); method.invoke(agvTask,param); } catch (NoSuchMethodException e) { return R.error("任务状态status参数有误"); } catch (InvocationTargetException e) { e.printStackTrace(); return R.error(); } catch (IllegalAccessException e) { e.printStackTrace(); return R.error(); } return R.ok(); } } enum AgvTask{ /** * 上报任务状态 */ task{ @Transactional public void success(AgvTaskCallBackParam param) { int wrkNo = Integer.valueOf(param.getTaskCode()); String barcode = agvWrkMastService.selectById(wrkNo).getBarcode(); //生成AGV工作历史档 agvWrkMastLogService.save(wrkNo); //生成AGV工作明细历史档 agvWrkDetlLogService.save(wrkNo); //删除AGV工作档 agvWrkMastService.deleteById(wrkNo); //删除AGV工作明细档 agvWrkDetlService.delete(new EntityWrapper().eq("wrk_no",wrkNo)); //生成入库通知历史档 agvWaitPakinLogService.save(barcode); //删除入库通知档 agvWaitPakinService.delete(new EntityWrapper().eq("zpallet",barcode)); } public void fail(AgvTaskCallBackParam param) { } public void cancel(AgvTaskCallBackParam param) { } public void suspend(AgvTaskCallBackParam param) { } }, /** * 上报任务分配给机器人 */ task_allocated{ @Transactional public void success(AgvTaskCallBackParam param) { } public void fail(AgvTaskCallBackParam param) { } public void cancel(AgvTaskCallBackParam param) { } public void suspend(AgvTaskCallBackParam param) { } }, /** * 上报取箱状态 */ tote_load{ @Transactional public void success(AgvTaskCallBackParam param) { //修改源站点状态为O.空,以及解绑托盘条码 agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getStationCode(),"O",""); //修改AGV工作档的工作状态为2(设备上走) agvWrkMastService.updateWrkStsByWrkNo(Integer.valueOf(param.getTaskCode()),2); //修改AGV入库通知档状态 agvWaitPakinService.updateIoStatus(Integer.valueOf(param.getTaskCode()),"Y"); } public void fail(AgvTaskCallBackParam param) { } public void cancel(AgvTaskCallBackParam param) { } public void suspend(AgvTaskCallBackParam param) { } }, /** * 上报放箱状态 */ tote_unload{ @Transactional public void success(AgvTaskCallBackParam param) { int wrkNo = Integer.valueOf(param.getTaskCode()); String barcode = agvWrkMastService.selectById(wrkNo).getBarcode(); //修改目标库位状态为F.在库 agvLocMastService.updateLocStsByLocNo(param.getLocationCode(),"F"); //更新目标库位明细 agvLocDetlService.addLocDetlInfo(param.getLocationCode(),wrkNo); //修改工作档状态为14(入库完成) agvWrkMastService.updateWrkStsByWrkNo(wrkNo,14); } public void fail(AgvTaskCallBackParam param) { } public void cancel(AgvTaskCallBackParam param) { } public void suspend(AgvTaskCallBackParam param) { } }, robot_reach{ @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 abstract void success(AgvTaskCallBackParam param); //任务状态为失败 public abstract void fail(AgvTaskCallBackParam param); //任务状态为取消 public abstract void cancel(AgvTaskCallBackParam param); //任务状态为挂起 public abstract void suspend(AgvTaskCallBackParam param); @Setter AgvBasDevpService agvBasDevpService; @Setter AgvLocMastService agvLocMastService; @Setter AgvLocDetlService agvLocDetlService; @Setter AgvWrkMastService agvWrkMastService; @Setter AgvWrkDetlService agvWrkDetlService; @Setter AgvWaitPakinService agvWaitPakinService; @Setter AgvWaitPakinLogService agvWaitPakinLogService; @Setter AgvWrkMastLogService agvWrkMastLogService; @Setter AgvWrkDetlLogService agvWrkDetlLogService; @Component public static class ReportTypeServiceInjector { @Autowired AgvBasDevpService agvBasDevpService; @Autowired AgvLocMastService agvLocMastService; @Autowired AgvLocDetlService agvLocDetlService; @Autowired AgvWrkMastService agvWrkMastService; @Autowired AgvWrkDetlService agvWrkDetlService; @Autowired AgvWaitPakinService agvWaitPakinService; @Autowired AgvWaitPakinLogService agvWaitPakinLogService; @Autowired AgvWrkMastLogService agvWrkMastLogService; @Autowired AgvWrkDetlLogService agvWrkDetlLogService; @PostConstruct public void postConstruct(){ for(AgvTask task : EnumSet.allOf(AgvTask.class)){ task.setAgvBasDevpService(agvBasDevpService); task.setAgvLocDetlService(agvLocDetlService); task.setAgvLocMastService(agvLocMastService); task.setAgvWrkMastService(agvWrkMastService); task.setAgvWaitPakinService(agvWaitPakinService); task.setAgvWaitPakinLogService(agvWaitPakinLogService); task.setAgvWrkMastLogService(agvWrkMastLogService); task.setAgvWrkDetlLogService(agvWrkDetlLogService); task.setAgvWrkDetlService(agvWrkDetlService); } } } }