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.annotations.ManagerAuth;
|
import com.core.common.Cools;
|
import com.core.common.R;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.entity.CanFin;
|
import com.zy.asrs.entity.Task;
|
import com.zy.asrs.entity.WrkMast;
|
import com.zy.asrs.entity.mes.*;
|
import com.zy.asrs.entity.param.CombParam;
|
import com.zy.asrs.mapper.CanFinMapper;
|
import com.zy.asrs.service.MesService;
|
import com.zy.asrs.service.MobileService;
|
import com.zy.asrs.service.TaskService;
|
import com.zy.asrs.service.WrkMastService;
|
import com.zy.common.web.BaseController;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.IOException;
|
import java.util.Date;
|
import java.util.List;
|
|
@RestController
|
@Slf4j
|
public class MesController extends BaseController {
|
|
@Resource
|
private MesService mesService;
|
|
@Autowired
|
private MobileService mobileService;
|
@Autowired
|
private WrkMastService wrkMastService;
|
@Autowired
|
private TaskService taskService;
|
@Autowired
|
private CanFinMapper canFinMapper;
|
|
private void auth(String appkey, Object obj, HttpServletRequest request) {
|
log.info("{}接口被访问;appkey:{};请求数据:{}", request.getRequestURI(), appkey, JSON.toJSONString(obj));
|
request.setAttribute("cache", obj);
|
}
|
|
// 物料信息同步
|
@PostMapping("/api/mes/synMatInfo")
|
@AppAuth(memo = "物料信息同步")
|
// public MesReturn synMatInfo(@RequestHeader(required = false) String appkey, @RequestBody List<MesMatRecvForm> params, HttpServletRequest request){
|
public MesReturn synMatInfo(@RequestHeader(required = false) String appkey, @RequestBody MesMatRecvForm params, HttpServletRequest request){
|
auth(appkey, params, request);
|
MesReturn mesReturn = new MesReturn();
|
try {
|
// for (MesMatRecvForm param : params){
|
// mesReturn = mesService.matInfoAndInBound(param);
|
// }
|
mesReturn = mesService.matInfoAndInBound(params);
|
} catch (Exception e) {
|
log.error(String.valueOf(e));
|
mesReturn.setSuccess("2");
|
mesReturn.setMessage("物料信息同步失败");
|
}
|
return mesReturn;
|
}
|
|
// 出库申请
|
@PostMapping("/api/mes/outBoundOrder")
|
public MesReturn outBoundOrder(@RequestBody MesOutApply param){
|
|
MesReturn mesReturn = new MesReturn();
|
mesReturn.setSuccess(mesService.outBoundOrder(param) == 1 ? "1" : "2");
|
return mesReturn;
|
}
|
|
// // 出库入库订单申请
|
@PostMapping("/api/mes/callOutBoundOrder")
|
public MesReturn callOutBoundOrder(@RequestBody MesCallOutApply param){
|
|
MesReturn mesReturn = new MesReturn();
|
mesReturn.setSuccess(mesService.callOutBoundOrder(param) == 1 ? "1" : "2");
|
return mesReturn;
|
}
|
|
// 入库申请
|
@PostMapping("/api/mes/inBoundOrder")
|
public MesReturn inBoundOrder(@RequestBody MesInApply param){
|
|
MesReturn mesReturn = new MesReturn();
|
mesReturn.setSuccess(mesService.inBoundOrder(param) == 1 ? "1" : "2");
|
return mesReturn;
|
}
|
|
// 入站允许
|
@PostMapping("/api/mes/allowInStation")
|
public MesReturn allowInStation(@RequestBody TransInOutStationAllow param){
|
return mesService.allowInStation(param);
|
}
|
|
// 离站允许,装配库、滑块库
|
@PostMapping("/api/mes/allowOutStation")
|
public MesReturn allowOutStation(@RequestBody TransInOutStationAllow param){
|
return mesService.allowOutStation(param);
|
}
|
|
// 下发运输任务
|
@PostMapping("/api/mes/submitTask")
|
public JSONObject submitTask(@RequestBody TransTask param){
|
|
return mesService.submitTask(param);
|
}
|
|
// region 临时测试
|
|
@GetMapping("/api/mes/testInFeedback")
|
public int test(@RequestParam String orderNo){
|
|
return mesService.inFeedback(orderNo);
|
}
|
|
@GetMapping("/api/mes/testInFeedback2")
|
public int test(@RequestParam String orderNo, @RequestParam String zapplet){
|
|
return mesService.recvFeedback(orderNo, zapplet);
|
}
|
// endregion
|
|
// 库存查询接口
|
// 按 物料编码+oderNo
|
@PostMapping("/api/mes/queryInventory")
|
public MesReturn queryInventory(@RequestBody JSONObject param){
|
MesReturn mesReturn = new MesReturn();
|
String itemno = param.getString("itemno");
|
String orderNo = param.getString("orderNo");
|
if(Cools.isEmpty(itemno,orderNo)) {
|
mesReturn.setSuccess("2");
|
mesReturn.setMessage("参数不能为空");
|
return mesReturn;
|
}
|
|
return mesService.queryInventory(itemno,orderNo);
|
}
|
|
/**
|
* MES调用PDA的AGV订单入库接口
|
* @param combParam
|
* @return
|
*/
|
@RequestMapping("/comb/auth")
|
@ManagerAuth(memo = "组托")
|
public R comb(@RequestBody CombParam combParam){
|
log.info("=============== MES下发组托订单 ===============");
|
log.info("{}", combParam);
|
log.info("=============== MES下发组托订单 ===============");
|
if (combParam.getUserId() != null && !combParam.getUserId().equals(null)){
|
mobileService.comb(combParam, combParam.getUserId());
|
}else {
|
mobileService.comb(combParam, getUserId());
|
}
|
return R.ok("组托成功");
|
}
|
|
/**
|
* MES调用PDA的补空板
|
*
|
* @param locNo 目标站点
|
* @param size 托盘大小 1:小托盘 2:大托盘
|
* @return
|
*/
|
@PostMapping("/callEmptyBinOutBound")
|
public synchronized R callEmptyBinOutBound(@RequestParam(required = false) String locNo
|
, @RequestParam(required = false) String size
|
, @RequestParam(required = false) String palletFormat
|
, @RequestParam(required = false) String agvTaskNo) {
|
if (Cools.isEmpty(locNo) || Cools.isEmpty(size)) {
|
return R.error("站点或者大小不能为空");
|
}
|
WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("memo", locNo));
|
if (wrkMast != null) {
|
return R.error("该站点="+locNo+"已经有空板出库任务,为了不堵塞堆垛机接驳站点,禁止下发多个空板出库任务");
|
}
|
return mobileService.callEmptyBinOutBound(locNo, size, palletFormat, agvTaskNo, 9995L);
|
}
|
|
|
/**
|
* 空板回库或者拣料回库
|
*
|
* @param sourceStaNo
|
* @param staNo
|
* @return
|
*/
|
@RequestMapping("/AGVStartReturn")
|
public synchronized R AGVStartReturn(@RequestParam(required = false) String sourceStaNo
|
, @RequestParam(required = false) String staNo
|
, @RequestParam(required = false) String taskNo) {
|
if (Cools.isEmpty(sourceStaNo) || Cools.isEmpty(staNo)) {
|
return R.error("源站点和托盘码不能为空");
|
}
|
List<Task> tasks = taskService.selectList(new EntityWrapper<Task>().eq("source_sta_no", sourceStaNo).eq("barcode", staNo));
|
if (tasks.size() > 0) {
|
return R.error("该托盘="+staNo+"已经存在搬运任务,请不要重复下发");
|
}
|
|
String barcode = staNo.substring(0,1);
|
if(barcode.equals("3")){
|
taskNo = "307";
|
}else if(barcode.equals("4")){
|
taskNo = "402";
|
}else if(barcode.equals("5")){
|
taskNo = "401";
|
}
|
|
R r = R.ok();
|
//生成AGV搬运出库任务
|
// 保存工作档
|
Task task = new Task();
|
Date date = new Date();
|
String TaskNo = 555555 + "aa" + date.getTime();
|
task.setWrkNo((int) date.getTime())
|
.setTaskNo(TaskNo)
|
.setIoTime(date)
|
.setWrkSts(301L) // 工作状态:301.任务下发
|
.setIoType(3) // 入出库状态: 3.站到站 4.站到区域
|
.setTaskType("agv")
|
.setIoPri(10D)
|
.setFullPlt("Y") // 满板:Y
|
.setPicking("N") // 拣料
|
.setExitMk("N")// 退出
|
.setStaNo(taskNo)
|
.setSourceStaNo(sourceStaNo)//agv取货站点
|
.setEmptyMk("N")// 空板
|
.setBarcode(staNo)// 托盘码
|
.setLinkMis("N")
|
.setAppeUser(9945L)
|
.setAppeTime(date)
|
.setModiUser(9945L)
|
.setModiTime(date);
|
if (taskService.insert(task)) {
|
Date now = new Date();
|
CanFin canFin = new CanFin();
|
canFin.setAgvType("agv-in");
|
canFin.setInNo(TaskNo);
|
canFin.setApplyTime(now);
|
canFinMapper.insert(canFin);
|
}else{
|
throw new CoolException("保存工作档失败");
|
}
|
|
return r;
|
}
|
@PostMapping("/api/mes/pauseAGV")
|
public MesReturn AGVPause(@RequestBody JSONObject param){
|
MesReturn mesReturn = new MesReturn();
|
|
String type = "STOP";
|
if (param.getString("type") != null){
|
type = "START";
|
}
|
|
switch (mesService.AGVPause(param, type)){
|
case 1:
|
mesReturn.setSuccess("1");
|
mesReturn.setMessage("AGV暂停或启动成功");
|
return mesReturn;
|
case 2:
|
mesReturn.setSuccess("1");
|
mesReturn.setMessage("海康AGV暂停或启动成功");
|
return mesReturn;
|
case 3:
|
mesReturn.setSuccess("1");
|
mesReturn.setMessage("华晓AGV暂停或启动成功");
|
return mesReturn;
|
case 4:
|
mesReturn.setSuccess("2");
|
mesReturn.setMessage("AGV暂停或启动调用失败");
|
return mesReturn;
|
}
|
mesReturn.setSuccess("2");
|
mesReturn.setMessage("AGV暂停或启动调用失败");
|
return mesReturn;
|
}
|
}
|