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.BaseRes;
|
import com.core.common.Cools;
|
import com.core.common.R;
|
import com.core.exception.CoolException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.zy.asrs.entity.*;
|
import com.zy.asrs.entity.param.*;
|
import com.zy.asrs.service.*;
|
import com.zy.asrs.service.impl.BasShuttleServiceImpl;
|
import com.zy.asrs.utils.Utils;
|
import com.zy.common.web.BaseController;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.IOException;
|
import java.lang.reflect.Field;
|
import java.util.*;
|
|
import static org.apache.ibatis.ognl.OgnlRuntime.setFieldValue;
|
|
@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;
|
@Autowired
|
private ApiLogService apiLogService;
|
@Autowired
|
private BasCrnpService basCrnpService;
|
@Autowired
|
private StaDescService staDescService;
|
@Autowired
|
private LocMastService locMastService;
|
@Autowired
|
private BasCrnErrorService basCrnErrorService;
|
|
@Value("${wms.url}")
|
private String wmsUrl;
|
|
private static final boolean auth = true;
|
|
public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{
|
add("ea1f0459efc02a79f046f982767939ae");
|
}};
|
@Autowired
|
private BasShuttleServiceImpl basShuttleService;
|
|
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无误!");
|
}
|
}
|
|
//任务下发接口
|
@PostMapping("/outboundTaskSend")
|
// @Transactional
|
public HashMap<String, Object> outboundTaskSend(@RequestBody HashMap<String,Object> hashMap) {
|
String jsonString = JSON.toJSONString(hashMap.get("TaskList"));
|
List<CarryParam> params= JSONObject.parseArray(jsonString,CarryParam.class);
|
HashMap<String, Object> map = new HashMap<>();
|
for (CarryParam param:params){
|
if (Cools.isEmpty(param)){
|
map.put("Code","0");
|
map.put("Msg","参数为空!");
|
return map;
|
} else if (Cools.isEmpty(param.getTaskNo())){
|
map.put("Code","0");
|
map.put("Msg","任务号为空!");
|
return map;
|
} else if (Cools.isEmpty(param.getStereoscopicTaskType())){
|
map.put("Code","0");
|
map.put("Msg","任务类型为空!");
|
return map;
|
}
|
String fusion = Utils.Fusion(param.getOriginalRowNo(), param.getOriginalFloorNo(), param.getOriginalColumnNo());
|
param.setOriginStartPoint(fusion);
|
LocMast locMast = locMastService.selectByLocNo(fusion);
|
if(Cools.isEmpty(locMast)){
|
map.put("Code","0");
|
map.put("Msg","初始库位无法找到!");
|
return map;
|
}
|
|
HashMap<String,Object> r = new HashMap<>();
|
|
if(param.getStereoscopicTaskType() == 2){
|
//出库任务创建
|
StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
|
.eq("type_no",2)
|
.eq("stn_no",param.getTerminalNo()));
|
if(Cools.isEmpty(staDesc)){
|
map.put("Code","0");
|
map.put("Msg","出库路劲不存在!");
|
return map;
|
}
|
r = openService.taskCreate(param);
|
if(r.get("Code").equals("0")){
|
return r;
|
}
|
}else if (param.getStereoscopicTaskType() == 3){
|
String fusion1 = Utils.Fusion(param.getGoalRowNo(), param.getGoalFloorNo(), param.getGoalColumnNo());
|
param.setTerminalNo(fusion1);
|
//移库任务创建
|
r = openService.taskCreate(param);
|
if(r.get("Code").equals("0")){
|
return r;
|
}
|
}
|
apiLogService.save("Wms任务下发接口"
|
,request.getRemoteAddr()+request.getRequestURI()
|
,""
|
,request.getRemoteAddr()
|
,JSON.toJSONString(param)
|
,r.toString()
|
,true
|
);
|
}
|
map.put("Code","1");
|
map.put("Msg","ok");
|
return map;
|
}
|
|
//任务取消接口
|
@PostMapping("/taskCancel")
|
public R taskCancel(@RequestHeader String appkey,
|
@RequestBody WMSAndAGVInterfaceParam param,
|
HttpServletRequest request) {
|
auth(appkey, param, request);
|
if (Cools.isEmpty(param)){
|
return R.error("参数为空!");
|
} else if (Cools.isEmpty(param.getTaskNo())){
|
return R.error("工作号为空!");
|
} else if (Cools.isEmpty(param.getIoType())){
|
return R.error("操作类型为空!");
|
} else if (Cools.isEmpty(param.getBarcode())){
|
return R.error("托盘码不能为空!");
|
}
|
|
TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>()
|
.eq("task_no", param.getTaskNo())
|
.eq("io_type",param.getIoType())
|
.eq("barcode",param.getBarcode()));
|
if (Cools.isEmpty(taskWrk)){
|
return R.error("未查到当前任务---"+param);
|
}
|
boolean sign =false;
|
switch (param.getTaskStatus()){
|
case 1://正常取消
|
if (taskWrk.getStatus()>1){
|
return R.error("任务已开始执行");
|
}
|
break;
|
case 2://正常完成
|
if (taskWrk.getStatus()>1){
|
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();
|
}
|
}
|
|
//设备状态查询接口
|
@GetMapping("/deviceStatus")
|
@Transactional
|
public R deviceStatus() {
|
HashMap<String,Object> map = new HashMap<>();
|
List<BasShuttle> basShuttle = basShuttleService.selectList(null);
|
List<BasDevp> basDevp = basDevpService.selectList(null);
|
map.put("basShuttle",basShuttle);
|
map.put("basDevp",basDevp);
|
return R.ok(map);
|
}
|
|
//设备状态查询接口
|
@PostMapping("/devpdeviceStatus")
|
@Transactional
|
public String devpDeviceStatus(@RequestBody HashMap staNo) {
|
BasDevp basDevp=basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no",staNo.get("staNo")));
|
if(basDevp==null||basDevp.getLoading().equals("Y")||basDevp.getOutEnable().equals("N")){
|
return "no";
|
}
|
return "ok";
|
}
|
|
//rcs和wcs校验入库工作号是否一致
|
//设备状态查询接口
|
@PostMapping("/devpdeviceStatusTaskNo")
|
@Transactional
|
public String devpDeviceStatusTaskNo(@RequestBody HashMap staNo) {
|
BasDevp basDevp=basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no",staNo.get("staNo")));
|
String taskNo=staNo.get("superTaskNo").toString();
|
if(Cools.isEmpty(basDevp)&&Cools.isEmpty(taskNo)){
|
return "no";
|
}else if(!basDevp.getWrkNo().equals(Integer.valueOf(taskNo))){
|
return "no";
|
}
|
return "ok";
|
}
|
|
}
|