package com.zy.asrs.controller;
|
|
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.zy.asrs.entity.WrkMast;
|
import com.zy.asrs.entity.param.ArmPrecomputeParam;
|
import com.zy.asrs.service.OpenService;
|
import com.zy.asrs.service.impl.WrkMastServiceImpl;
|
import com.zy.common.web.BaseController;
|
import com.zy.core.cache.RgvStatusCache;
|
import com.zy.core.cache.SlaveConnection;
|
import com.zy.core.enums.SlaveType;
|
import com.zy.core.model.CrnSlave;
|
import com.zy.core.model.DevpSlave;
|
import com.zy.core.model.protocol.CrnProtocol;
|
import com.zy.core.model.protocol.RgvProtocol;
|
import com.zy.core.model.protocol.StaProtocol;
|
import com.zy.core.properties.SlaveProperties;
|
import com.zy.core.thread.SiemensCrnThread;
|
import com.zy.core.thread.SiemensDevpThread;
|
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.*;
|
|
import com.zy.asrs.entity.param.TaskCreateParam;
|
|
/**
|
* Created by vincent on 2024/10/16
|
*/
|
@Slf4j
|
@RestController
|
@RequestMapping("open/")
|
public class OpenController extends BaseController {
|
|
private static final boolean auth = true;
|
public static final ArrayList<String> APP_KEY_LIST = new ArrayList<String>() {{
|
add("ea1f0459efc02a79f046f982767939ae");
|
}};
|
|
@Autowired
|
private OpenService openService;
|
|
@Autowired
|
private SlaveProperties slaveProperties;
|
@Autowired
|
private WrkMastServiceImpl wrkMastService;
|
|
/**
|
* 添加出库单
|
*/
|
@PostMapping("/task/cs/down/default/v1")
|
@AppAuth(memo = "WCS任务下发")
|
public synchronized R wcsTaskDistribution(@RequestHeader(required = false) String appkey,
|
@RequestBody ArmPrecomputeParam param,
|
HttpServletRequest request) {
|
try{
|
auth(appkey, param, request);
|
} catch (Exception e){
|
return new R(403,e.getMessage());
|
}
|
if (Cools.isEmpty(param)) {
|
return R.parse(BaseRes.PARAM);
|
}
|
// if (Cools.isEmpty(param.getTaskNo())) {
|
// return R.error("工作号[taskNo]不能为空");
|
// }
|
// if (Cools.isEmpty(param.getStartSta()) || param.getStartSta$()==0) {
|
// return R.error("起点[startSta]不能为空");
|
// }
|
// if (Cools.isEmpty(param.getEndSta()) || param.getEndSta$()==0) {
|
// return R.error("终点[endSta]不能为空");
|
// }
|
|
return R.ok().add(param);
|
}
|
|
/**
|
* 设备状态
|
*/
|
@PostMapping("/deviceStatus")
|
@AppAuth(memo = "设备状态获取")
|
public R deviceStatus(
|
@RequestHeader(required = false) String appkey,
|
HttpServletRequest request) {
|
|
try {
|
auth(appkey, null, request);
|
} catch (Exception e) {
|
return new R(403, e.getMessage());
|
}
|
|
// 1. 站点
|
List<Map<String, Object>> devList = new ArrayList<>();
|
if (slaveProperties.getDevp() != null) {
|
for (DevpSlave devpSlave : slaveProperties.getDevp()) {
|
SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId());
|
if (devpThread != null && devpThread.getStation() != null) {
|
for (StaProtocol staProtocol : devpThread.getStation().values()) {
|
Map<String, Object> dev = new HashMap<>();
|
dev.put("devNo", staProtocol.getSiteId());
|
dev.put("inEnable", staProtocol.isInEnable() ? "1" : "0");
|
dev.put("outEnable", staProtocol.isOutEnable() ? "1" : "0");
|
dev.put("autoing", staProtocol.isAutoing() ? "1" : "0");
|
dev.put("loading", staProtocol.isLoading() ? "1" : "0");
|
dev.put("wrkNo", staProtocol.getWorkNo());
|
dev.put("barcode", staProtocol.getBarcode());
|
dev.put("devErr", staProtocol.getErrorDev$());
|
dev.put("devErrM", staProtocol.getExceptions());
|
devList.add(dev);
|
}
|
}
|
}
|
}
|
devList.sort(Comparator.comparingInt(m -> (Integer) m.get("devNo")));
|
|
// 2. 堆垛机
|
List<Map<String, Object>> crnList = new ArrayList<>();
|
if (slaveProperties.getCrn() != null) {
|
for (CrnSlave crnSlave : slaveProperties.getCrn()) {
|
SiemensCrnThread crnThread = (SiemensCrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
|
if (crnThread != null && crnThread.getCrnProtocol() != null) {
|
CrnProtocol crnProtocol = crnThread.getCrnProtocol();
|
Map<String, Object> crn = new HashMap<>();
|
crn.put("crnNo", crnProtocol.getCrnNo());
|
crn.put("crnNoH", crnProtocol.getCrnNo());
|
crn.put("crnSts", crnProtocol.getMode());
|
crn.put("wrkNo", crnProtocol.getTaskNo());
|
crn.put("crnErr", crnProtocol.getAlarm());
|
crn.put("crnErrM", crnProtocol.getExceptions());
|
WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no",crnProtocol.getTaskNo()));
|
crn.put("frmLocno",wrkMast != null ? wrkMast.getSourceLocNo():null);
|
crn.put("frmSta",wrkMast != null ? wrkMast.getSourceStaNo():0);
|
crn.put("toSta", wrkMast != null? wrkMast.getStaNo():0);
|
crn.put("toLocno", wrkMast != null ? wrkMast.getLocNo():null);
|
crnList.add(crn);
|
}
|
}
|
}
|
crnList.sort(Comparator.comparingInt(m -> (Integer) m.get("crnNo")));
|
|
// 3. 穿梭车
|
List<Map<String, Object>> steList = new ArrayList<>();
|
Map<Integer, RgvProtocol> rgvMap = RgvStatusCache.getAllRgvStatus();
|
if (rgvMap != null) {
|
for (RgvProtocol rgvProtocol : rgvMap.values()) {
|
Map<String, Object> ste = new HashMap<>();
|
ste.put("steNo", rgvProtocol.getRgvNo());
|
ste.put("crnSts", rgvProtocol.getStatusType() != null ? rgvProtocol.getStatusType().id : 1);
|
ste.put("wrkNo", rgvProtocol.getTaskNo());
|
ste.put("steErr", rgvProtocol.getAlarm$());
|
ste.put("steErrM", rgvProtocol.getAlarmM());
|
steList.add(ste);
|
}
|
}
|
steList.sort(Comparator.comparingInt(m -> (Integer) m.get("steNo")));
|
|
R r = R.ok();
|
r.put("devList", devList);
|
r.put("crnList", crnList);
|
r.put("steList", steList);
|
return r;
|
}
|
|
|
|
/**
|
* 任务下发
|
*/
|
@PostMapping("/taskCreate")
|
@AppAuth(memo = "任务下发")
|
public R taskCreate(@RequestHeader(required = false) String appkey,
|
@RequestBody TaskCreateParam param,
|
HttpServletRequest request) {
|
try {
|
auth(appkey, param, request);
|
} catch (Exception e) {
|
return new R(403, e.getMessage());
|
}
|
|
if (Cools.isEmpty(param)) {
|
return R.parse(BaseRes.PARAM);
|
}
|
|
if (Cools.isEmpty(param.getTaskNo())) {
|
return R.error("工作号[taskNo]不能为空");
|
}
|
if (Cools.isEmpty(param.getBarcode())) {
|
return R.error("容器编码[barcode]不能为空");
|
}
|
if (Cools.isEmpty(param.getStartPoint())) {
|
return R.error("起点[startPoint]不能为空");
|
}
|
if (Cools.isEmpty(param.getTargetPoint())) {
|
return R.error("目标点[targetPoint]不能为空");
|
}
|
|
try {
|
boolean result = openService.taskCreate(param);
|
if (result) {
|
return R.ok("任务下发成功");
|
} else {
|
return R.error("任务下发失败");
|
}
|
} catch (Exception e) {
|
log.error("任务下发异常", e);
|
return R.error("任务下发异常: " + e.getMessage());
|
}
|
}
|
|
private void auth(String appkey, Object obj, HttpServletRequest request) {
|
// log.info("{}接口被访问;appkey:{};请求数据:{}", "open/sensorType/list/auth/v1", appkey, JSON.toJSONString(obj));
|
request.setAttribute("cache", obj);
|
if (!auth) {
|
return;
|
}
|
if (Cools.isEmpty(appkey)) {
|
throw new CoolException("认证失败,请确认appkey无误!");
|
}
|
if (!APP_KEY_LIST.contains(appkey)) {
|
throw new CoolException("认证失败,请确认appkey无误!");
|
}
|
}
|
|
|
}
|