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 APP_KEY_LIST = new ArrayList() {{ 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> 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 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> 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 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().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> steList = new ArrayList<>(); Map rgvMap = RgvStatusCache.getAllRgvStatus(); if (rgvMap != null) { for (RgvProtocol rgvProtocol : rgvMap.values()) { Map 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无误!"); } } }