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<AgvWrkMast>().eq("wrk_no", param.getTaskCode()));
|
if(wrkMastCount < 1){
|
return R.error("任务编号错误");
|
}
|
|
AgvTask agvTask = AgvTask.valueOf(param.getEventType());
|
Class<AgvTask> 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<AgvWrkDetl>().eq("wrk_no",wrkNo));
|
//生成入库通知历史档
|
agvWaitPakinLogService.save(barcode);
|
//删除入库通知档
|
agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().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);
|
}
|
}
|
|
}
|
}
|