package com.zy.asrs.controller;
|
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.common.BaseRes;
|
import com.core.common.Cools;
|
import com.core.common.R;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.BasDevp;
|
import com.zy.asrs.entity.CommandInfo;
|
import com.zy.asrs.entity.TaskWrk;
|
import com.zy.asrs.entity.WrkMast;
|
import com.zy.asrs.entity.param.WMSAndAGVInterfaceParam;
|
import com.zy.asrs.entity.param.taskCreateParam;
|
import com.zy.asrs.service.*;
|
import com.zy.common.web.BaseController;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
@Slf4j
|
@RestController
|
@RequestMapping("/open")
|
public class OpenController extends BaseController {
|
|
@Autowired
|
private OpenService openService;
|
@Autowired
|
private TaskWrkService taskWrkService;
|
@Autowired
|
private CommandInfoService commandInfoService;
|
@Autowired
|
private TaskWrkController taskWrkController;
|
@Autowired
|
private BasDevpService basDevpService;
|
|
public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{
|
add("ea1f0459efc02a79f046f982767939ae");
|
}};
|
|
//创建任务
|
@PostMapping("/taskCreate")
|
public R taskCreate(@RequestHeader String appkey,
|
@RequestBody taskCreateParam param,
|
HttpServletRequest request) {
|
auth(appkey, param, request);
|
if (Cools.isEmpty(param)) {
|
return R.parse(BaseRes.PARAM);
|
}
|
if (Cools.isEmpty(param.getTaskNo())) {
|
return R.error("任务号[taskNo]不能为空");
|
}
|
if (Cools.isEmpty(param.getIoType())) {
|
return R.error("任务类型[ioType]不能为空");
|
}
|
if (Cools.isEmpty(param.getBarcode())) {
|
return R.error("条码[barcode]不能为空");
|
}
|
openService.taskCreate(param);
|
return R.ok();
|
}
|
|
//查询任务详情
|
@GetMapping("/queryTask")
|
public R queryTask(@RequestHeader String appkey,
|
@RequestParam String taskNo,
|
HttpServletRequest request) {
|
auth(appkey, taskNo, request);
|
TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo);
|
if (taskWrk == null) {
|
return R.error("任务不存在");
|
}
|
return R.ok().add(taskWrk);
|
}
|
|
//查询任务指令集合
|
@GetMapping("/queryTaskCommand")
|
public R queryTaskCommand(@RequestHeader String appkey,
|
@RequestParam String taskNo,
|
HttpServletRequest request) {
|
auth(appkey, taskNo, request);
|
TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo);
|
if (taskWrk == null) {
|
return R.error("任务不存在");
|
}
|
|
List<CommandInfo> commandInfos = commandInfoService.selectByTaskNo(taskNo);
|
return R.ok().add(commandInfos);
|
}
|
|
private void auth(String appkey, Object obj, HttpServletRequest request) {
|
log.info("{}接口被访问;appkey:{};请求数据:{}", request.getServletPath(), appkey, JSON.toJSONString(obj));
|
request.setAttribute("cache", obj);
|
if (Cools.isEmpty(appkey)) {
|
throw new CoolException("认证失败,请确认appkey无误!");
|
}
|
if (!APP_KEY_LIST.contains(appkey)) {
|
throw new CoolException("认证失败,请确认appkey无误!");
|
}
|
}
|
|
//AGV请求入库码头接口
|
@PostMapping("/targetWharfApply")
|
public R targetWharfApply(@RequestHeader String appkey,
|
@RequestBody WMSAndAGVInterfaceParam param,
|
HttpServletRequest request) {
|
if (Cools.isEmpty(param)){
|
return R.error("参数为空!");
|
} else if (Cools.isEmpty(param.getTaskNo())){
|
return R.error("工作号为空!");
|
} else if (Cools.isEmpty(param.getContainerCode())){
|
return R.error("托盘编码为空!");
|
} else if (Cools.isEmpty(param.getWharfSource())){
|
return R.error("源码头为空!");
|
} else if (Cools.isEmpty(param.getFreeWharfs()) || param.getFreeWharfs().size()==0){
|
return R.error("空闲的入库码头(AGV)为空!");
|
}
|
TaskWrk taskWrk = taskWrkService.selectByTaskNo(param.getTaskNo());
|
|
if (Cools.isEmpty(taskWrk)){
|
return R.error("未查询到任务,任务号:"+param.getTaskNo());
|
}
|
return R.ok(taskWrk.getStartPoint());
|
}
|
|
//AGV请求动作接口
|
@PostMapping("/agvTaskRequest")
|
public R agvTaskRequest(@RequestHeader String appkey,
|
@RequestBody WMSAndAGVInterfaceParam param,
|
HttpServletRequest request) {
|
if (Cools.isEmpty(param)){
|
return R.error("参数为空!");
|
} else if (Cools.isEmpty(param.getRequestType())){
|
return R.error("请求类型为空!");
|
} else if (Cools.isEmpty(param.getWharfCode())){
|
return R.error("码头编号为空!");
|
}
|
|
try{
|
BasDevp basDevp = basDevpService.selectById(param.getWharfCode());
|
if (basDevp.getAutoing().equals("Y") && basDevp.getLoading().equals("N")){
|
return R.ok();
|
}else {
|
return R.error();
|
}
|
}catch (Exception e){
|
log.error("AGV请求动作接口报错:"+e);
|
return R.error("程序报错,未查询到站点");
|
}
|
|
}
|
|
//任务下发接口
|
@PostMapping("/outboundTaskSend")
|
@Transactional
|
public R outboundTaskSend(@RequestHeader String appkey,
|
@RequestBody List<WMSAndAGVInterfaceParam> params,
|
HttpServletRequest request) {
|
List<WMSAndAGVInterfaceParam> params1 =new ArrayList<>();
|
for (WMSAndAGVInterfaceParam param:params){
|
try {
|
if (Cools.isEmpty(param)){
|
return R.error("参数为空!");
|
} else if (Cools.isEmpty(param.getTaskNo())){
|
return R.error("任务号为空!");
|
} else if (Cools.isEmpty(param.getTaskType())){
|
return R.error("任务类型为空!");
|
} else if (Cools.isEmpty(param.getWarehouseId())){
|
return R.error("仓库标识为空!");
|
}
|
if (Cools.isEmpty(param.getTaskPriority())){
|
param.setTaskPriority(1);
|
}
|
if (Cools.isEmpty(param.getContainerCode())){
|
return R.error("容器编码(托盘码)为空!");
|
}
|
if (Cools.isEmpty(param.getEmptyContainer())){
|
return R.error("是否空托盘信号为空!");
|
}
|
// if (Cools.isEmpty(param.getTaskTunnel())){
|
// return R.error("任务巷道为空!");
|
// }
|
// if (Cools.isEmpty(param.getGroupNo())){
|
// return R.error("任务组为空!");
|
// }
|
// if (Cools.isEmpty(param.getTaskSerialNo())){
|
// return R.error("任务执行顺序为空!");
|
// }
|
if (Cools.isEmpty(param.getTargetWharf())){
|
return R.error("目标码头区域为空!");//G开头=7车间,H开头=8层,J开头=9车间
|
}
|
|
openService.taskCreate(new taskCreateParam(param));
|
|
params1.add(param);
|
// return R.ok(param);
|
}catch (Exception e){
|
String errorMsg = Cools.isEmpty(e.getLocalizedMessage()) ? "" : e.getLocalizedMessage();
|
return R.error("生成任务失败,请联系管理员!"+ errorMsg);
|
}
|
}
|
return R.ok(params1);
|
}
|
|
//任务取消接口
|
@PostMapping("/taskCancel")
|
public R taskCancel(@RequestHeader String appkey,
|
@RequestBody WMSAndAGVInterfaceParam param,
|
HttpServletRequest request) {
|
if (Cools.isEmpty(param)){
|
return R.error("参数为空!");
|
} else if (Cools.isEmpty(param.getTaskNo())){
|
return R.error("工作号为空!");
|
} else if (Cools.isEmpty(param.getTaskStatus())){
|
return R.error("操作类型为空!");
|
}
|
// else if (Cools.isEmpty(param.getWarehouseId())){
|
// return R.error("仓库标识为空!");
|
// }
|
|
TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("task_no", param.getTaskNo()));
|
if (Cools.isEmpty(taskWrk)){
|
return R.error("未查到当前任务");
|
}
|
boolean sign =false;
|
switch (param.getTaskStatus()){
|
case 1://正常取消
|
if (taskWrk.getWrkSts()>1){
|
return R.error("任务已开始执行");
|
}
|
case 2://强制取消
|
if (taskWrk.getWrkSts()>3){
|
return R.error("任务已执行完成");
|
}
|
break;
|
case 3://正常完成
|
if (taskWrk.getWrkSts()>11){
|
return R.error("任务已开始执行");
|
}
|
case 4://强制完成
|
if (taskWrk.getWrkSts()>14){
|
return R.error("任务已执行完成");
|
}
|
sign=true;
|
break;
|
default:
|
return R.error("未知操作");
|
}
|
return taskWrkOperate(taskWrk,sign);
|
}
|
|
//任务操作
|
private R taskWrkOperate(TaskWrk taskWrk,boolean sign){
|
try{
|
if (sign){//完成
|
return taskWrkController.complete(taskWrk.getTaskNo());
|
}else {//取消
|
return taskWrkController.cancel(taskWrk.getTaskNo());
|
}
|
}catch (Exception e){
|
return R.error();
|
}
|
}
|
|
}
|