From c13fe87d70e81d7dcb604f8f1227de8f313cbefc Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期三, 10 七月 2024 09:26:51 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java | 793 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 756 insertions(+), 37 deletions(-) diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java index 0aab8fc..53a9308 100644 --- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java +++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java @@ -1,34 +1,39 @@ package com.zy.asrs.wcs.core.controller; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zy.asrs.common.utils.HttpHandler; +import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.common.SnowflakeIdWorker; -import com.zy.asrs.wcs.core.domain.param.CreateManualTakeTaskParam; -import com.zy.asrs.wcs.core.domain.param.CreateMoveTaskParam; -import com.zy.asrs.wcs.core.domain.param.CreateOutTaskParam; -import com.zy.asrs.wcs.core.entity.Loc; -import com.zy.asrs.wcs.core.entity.Task; -import com.zy.asrs.wcs.core.entity.TaskCtg; +import com.zy.asrs.wcs.core.domain.dto.BasLiftStaDto; +import com.zy.asrs.wcs.core.domain.param.*; +import com.zy.asrs.wcs.core.entity.*; import com.zy.asrs.wcs.core.model.enums.DeviceCtgType; +import com.zy.asrs.wcs.core.model.enums.TaskCtgType; import com.zy.asrs.wcs.core.model.enums.TaskStsType; -import com.zy.asrs.wcs.core.service.LocService; -import com.zy.asrs.wcs.core.service.TaskCtgService; -import com.zy.asrs.wcs.core.service.TaskService; +import com.zy.asrs.wcs.core.service.*; import com.zy.asrs.wcs.core.utils.Utils; import com.zy.asrs.wcs.rcs.cache.SlaveConnection; import com.zy.asrs.wcs.rcs.entity.Device; import com.zy.asrs.wcs.rcs.model.enums.SlaveType; +import com.zy.asrs.wcs.rcs.model.enums.WorkModeType; import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol; import com.zy.asrs.wcs.rcs.service.DeviceService; +import com.zy.asrs.wcs.rcs.thread.DevpThread; import com.zy.asrs.wcs.rcs.thread.ShuttleThread; import com.zy.asrs.wcs.system.controller.BaseController; +import com.zy.asrs.wcs.system.entity.Dict; +import com.zy.asrs.wcs.system.service.DictService; +import org.apache.poi.ss.formula.functions.T; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.Date; +import java.text.SimpleDateFormat; +import java.util.*; /** * 瀵瑰鏆撮湶鎺ュ彛 @@ -38,6 +43,7 @@ @RequestMapping("/openapi") public class OpenController extends BaseController { + private static final Logger log = LoggerFactory.getLogger(OpenController.class); @Autowired private SnowflakeIdWorker snowflakeIdWorker; @Autowired @@ -48,44 +54,649 @@ private DeviceService deviceService; @Autowired private LocService locService; + @Autowired + private DictService dictService; + @Autowired + private BasConveyorPathService basConveyorPathService; + @Autowired + private BasLiftService basLiftService; + @Autowired + private BasConveyorService basConveyorService; + @Autowired + private BasConveyorStaService basConveyorStaService; - //鐢熸垚鍑哄簱浠诲姟 - @PostMapping("/createOutTask") - public R createOutTask(@RequestBody CreateOutTaskParam param) { - //鑾峰彇鍑哄簱浠诲姟绫诲瀷 + + @PostMapping("/agvPickupComplete") + public Map<String, Object> agvPickupComplete(@RequestBody AgvTaskParam agvTaskParam) { + HashMap<String, String> mesMap = new HashMap<>(); + mesMap.put("taskNo", agvTaskParam.getRobotTaskCode()); + mesMap.put("contNo",agvTaskParam.getExtra().getValues().getCarrierCode()); + boolean returnTask3 = toMesHttpRequest(mesMap, "172.18.231.126", "/api/wcs/wcsTaskInfo", "3",agvTaskParam.getExtra().getValues().getSlotName()); + + HashMap<String, Object> map = new HashMap<>(); + map.put("code","0"); + map.put("message","鎴愬姛"); + map.put("reqCode", ""); + log.info("agv璇锋眰鍙栬揣瀹屾垚锛寃ms浠诲姟鍙�:"+JSON.toJSONString(agvTaskParam)); + return map; + + } + + @PostMapping("/agvTaskComplete") + public Map<String, Object> agvTaskComplete(@RequestBody AgvTaskParam agvTaskParam) { + log.info("agv璇锋眰浠诲姟瀹屾垚锛寃ms浠诲姟鍙�:"+JSON.toJSONString(agvTaskParam)); + HashMap<String, Object> map = new HashMap<>(); + Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getWmsTaskNo, agvTaskParam.getRobotTaskCode())); + if (!Cools.isEmpty(task)){ + if (agvTaskParam.getExtra().getValues().getSlotName().equals("06YZ0001")){ + Device device = deviceService.getOne(new LambdaQueryWrapper<Device>() + .eq(Device::getDeviceType, DeviceCtgType.CONVEYOR.val()) + .eq(Device::getStatus, 1) + .eq(Device::getDeviceNo, 1)); + if (device == null) { + map.put("code","1"); + map.put("message","澶辫触锛岃澶囦笉瀛樺湪"); + map.put("reqCode", ""); + return map; + } + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, device.getId().intValue()); + if (devpThread == null) { + map.put("code","1"); + map.put("message","澶辫触锛岃緭閫佺嚎涓嶅湪绾�"); + map.put("reqCode", ""); + return map; + } + boolean result = devpThread.writeWorkSta(100, Short.parseShort("9999"), (short) 101); + if (!result) { + map.put("code","1"); + map.put("message","澶辫触锛岃緭閫佺嚎鍛戒护涓嬪彂澶辫触"); + map.put("reqCode", ""); + return map; + } + }else { + if (task.getTaskSts() == 1000 || task.getMemo().equals(agvTaskParam.getExtra().getValues().getSlotName())){ + task.setTaskSts(1001L); + taskService.updateById(task); + } + } + }else { + HashMap<String, String> mesMap = new HashMap<>(); + mesMap.put("taskNo", agvTaskParam.getRobotTaskCode()); + mesMap.put("contNo",agvTaskParam.getExtra().getValues().getCarrierCode()); + boolean returnTask4 = toMesHttpRequest(mesMap, "172.18.231.126", "/api/wcs/wcsTaskInfo", "4",agvTaskParam.getExtra().getValues().getSlotName()); + } + + map.put("code","0"); + map.put("message","鎴愬姛"); + map.put("reqCode", ""); + return map; + } + + private boolean toMesHttpRequest(Map<String,String> map, String url, String path, String code,String location){ + Date now = new Date(); + long time = now.getTime()/1000; + ReturnWcsTaskStatisParam returnWcsTaskStatisParam = new ReturnWcsTaskStatisParam(); + returnWcsTaskStatisParam.setRequestPK(map.get("taskNo")); + returnWcsTaskStatisParam.setTrkId(map.get("taskNo")); + returnWcsTaskStatisParam.setContNo(map.get("contNo")); + returnWcsTaskStatisParam.setCode(code); + returnWcsTaskStatisParam.setOperator("wcs"); + returnWcsTaskStatisParam.setOperationTime(time); + returnWcsTaskStatisParam.setTrkType("01"); + returnWcsTaskStatisParam.setCurPos(location); + String response = ""; + boolean success = false; + try { + response = new HttpHandler.Builder() + .setUri(url) + .setPath(path) + .setJson(JSONObject.toJSONString(returnWcsTaskStatisParam)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + + String code1 = jsonObject.get("success").toString(); + log.info("涓婃姤mes鎺ュ彛璇锋眰浣�:"+JSON.toJSONString(returnWcsTaskStatisParam) +",杩斿洖鍊�:"+jsonObject.toJSONString()); + if(code1.equals("1")){ + success = true; + } + }catch (Exception e){ + return success; + } + return success; + } + + + //鍙栨秷wcs浠诲姟 + @PostMapping("/cancelWcsTask") + public HashMap<String,Object> cancelWcsTask(@RequestBody CreateWcsTaskParam param){ + HashMap<String, Object> map = new HashMap<>(); + if (Cools.isEmpty(param)){ + map.put("success", "0"); + map.put("message", "澶辫触锛岃姹傚弬鏁颁负绌�"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + if (Cools.isEmpty(param.getRequestPK()) || Cools.isEmpty(param.getContNo()) ){ + map.put("success", "0"); + map.put("message", "澶辫触锛岃姹傚弬鏁颁负绌�"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, param.getRequestPK()).eq(Task::getHostId,1L)); + if (task == null){ + map.put("success", "0"); + map.put("message", "澶辫触锛屾湭鎵惧埌鐩稿悓缂栧彿鐨勪换鍔�"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + if (task.getTaskSts() == 1 || task.getTaskSts() == 101){ + boolean remove = false; + try { + remove = taskService.removeById(task); + }catch (Exception e){ + map.put("success", "0"); + map.put("message", "鍙栨秷浠诲姟澶辫触:"+e.getMessage()); + map.put("result", ""); + map.put("requestPK",param.getRequestPK()); + return map; + }finally { + if (remove){ + map.put("success", "1"); + map.put("message", "鍙栨秷浠诲姟鎴愬姛"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + }else { + map.put("success", "0"); + map.put("message", "鍙栨秷浠诲姟澶辫触"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + } + } + }else { + map.put("success", "0"); + map.put("message", "澶辫触锛屼换鍔″凡鎵ц"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + return map; + + } + + + //mes涓嬪彂浠诲姟 + @PostMapping("/createWcsTask") + public HashMap<String,Object> createWcsTask(@RequestBody CreateWcsTaskParam param){ + log.info("mes浠诲姟涓嬪彂锛岃姹備綋:"+JSONObject.toJSONString(param)); + HashMap<String, Object> map = new HashMap<>(); + if (Cools.isEmpty(param)){ + map.put("success", "0"); + map.put("message", "澶辫触锛岃姹傚弬鏁颁负绌�"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + if (Cools.isEmpty(param.getRequestPK()) || Cools.isEmpty(param.getContNo()) || Cools.isEmpty(param.getTrkPrty()) || Cools.isEmpty(param.getToPos())){ + map.put("success", "0"); + map.put("message", "澶辫触锛岃姹傚弬鏁颁负绌�"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + + Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, param.getRequestPK()).eq(Task::getHostId,1L)); + if(task != null){ + map.put("success", "0"); + map.put("message", "澶辫触锛屽瓨鍦ㄧ浉鍚岀紪鍙风殑浠诲姟"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + String sta = "06YZ"; + String loc = "0601KW"; + if (param.getFrmPos().substring(0,4).equals(sta) && param.getToPos().substring(0,6).equals(loc)){ + if (!param.getFrmPos().equals("06YZ0001")){ + try { + AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam(); + getInRequestParam(agvTaskCreateParam,param); + String httpRequest = doHttpRequest(agvTaskCreateParam, "172.18.16.248:443", "/rcs/rtas/api/robot/controller/task/submit"); + if (!httpRequest.equals("SUCCESS")){ + map.put("success", "0"); + map.put("message", httpRequest); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + }catch (Exception e){ + map.put("success", "0"); + map.put("message", "杞彂AGV浠诲姟鍑洪敊"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + } + + CreateInTaskParam createInTaskParam = new CreateInTaskParam(); + createInTaskParam.setTaskNo(param.getRequestPK()); + createInTaskParam.setDestLoc(getWMStoWCSLocNo(param.getToPos())); + createInTaskParam.setOriginSite("100"); + createInTaskParam.setBarcode(param.getContNo()); + createInTaskParam.setPriority(Integer.valueOf(param.getTrkPrty())); + createInTaskParam.setEndSite(param.getToPos()); + R inTask = null; + try { + inTask = createInTask(createInTaskParam); + }catch (Exception e){ + map.put("success", "0"); + map.put("message", "鐢熸垚浠诲姟鍑洪敊"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + }finally { + int code = (int) inTask.get("code"); + if (code == 200){ + map.put("success", "1"); + map.put("message", inTask.get("msg")); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + }else { + map.put("success", "0"); + map.put("message", inTask.get("msg")); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + } + } + } else if (param.getFrmPos().substring(0,6).equals(loc) && param.getToPos().substring(0,4).equals(sta)) { + CreateOutTaskParam createOutTaskParam = new CreateOutTaskParam(); + createOutTaskParam.setTaskNo(param.getRequestPK()); + createOutTaskParam.setOriginLoc(getWMStoWCSLocNo(param.getFrmPos())); + createOutTaskParam.setOriginSite("101"); + createOutTaskParam.setDestSite("100"); + createOutTaskParam.setPriority(Integer.valueOf(param.getTrkPrty())); + createOutTaskParam.setEndSite(param.getToPos()); + createOutTaskParam.setZpallet(param.getContNo()); + R outTask = null; + try { + outTask = createOutTask(createOutTaskParam); + }catch (Exception e){ + map.put("success", "0"); + map.put("message", "鐢熸垚浠诲姟鍑洪敊"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + }finally { + int code = (int) outTask.get("code"); + if (code == 200){ + map.put("success", "1"); + map.put("message", outTask.get("msg")); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + }else { + map.put("success", "0"); + map.put("message", outTask.get("msg")); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + } + } + + } else if (param.getFrmPos().substring(0,4).equals(sta) && param.getToPos().substring(0,4).equals(sta)) { + try { + AgvTaskCreateParam agvTaskCreateParam = new AgvTaskCreateParam(); + getTransmitRequestParam(agvTaskCreateParam,param); + String httpRequest = doHttpRequest(agvTaskCreateParam, "172.18.16.248:443", "/rcs/rtas/api/robot/controller/task/submit"); + if (!httpRequest.equals("SUCCESS")){ + map.put("success", "0"); + map.put("message", httpRequest); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + }catch (Exception e){ + map.put("success", "0"); + map.put("message", "杞彂AGV浠诲姟鍑洪敊"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + return map; + } + + } else { + map.put("success", "0"); + map.put("message", "鏈壘鍒板搴斾换鍔$被鍨�"); + map.put("result", ""); + map.put("requestPK", param.getRequestPK()); + } + return map; + } + public static String getWMStoWCSLocNo(String loc){ + String locNo = ""; + int row = Integer.parseInt(loc.substring(6,8)); + int bay = Integer.parseInt(loc.substring(8,10)); + int lev = Integer.parseInt(loc.substring(10,12)); + locNo = row +"-"+bay+"-"+lev; + return locNo; + } + private void getInRequestParam(AgvTaskCreateParam agvTaskCreateParam,CreateWcsTaskParam param){ + List<AgvTaskCreateParam.AgvTaskParam> agvTaskParamList = Arrays.asList( + //璧峰浣� + new AgvTaskCreateParam.AgvTaskParam("SITE",param.getFrmPos(),0,1), + //鐩爣浣� + new AgvTaskCreateParam.AgvTaskParam("SITE","06YZ0001",1,1) + ); + List<AgvTaskCreateParam.carrierInfoParam> carrierInfoParam = Arrays.asList( + //璧峰浣� + new AgvTaskCreateParam.carrierInfoParam() + + ); + agvTaskCreateParam.setTaskType("F01"); + agvTaskCreateParam.setInitPriority(param.getTrkPrty()); + agvTaskCreateParam.setRobotTaskCode(param.getRequestPK()); + agvTaskCreateParam.setTargetRoute(agvTaskParamList); + agvTaskCreateParam.setCarrierInfo(carrierInfoParam); + + } + private void getTransmitRequestParam(AgvTaskCreateParam agvTaskCreateParam,CreateWcsTaskParam param){ + List<AgvTaskCreateParam.AgvTaskParam> agvTaskParamList = Arrays.asList( + //璧峰浣� + new AgvTaskCreateParam.AgvTaskParam("SITE",param.getFrmPos(),0,1), + //鐩爣浣� + new AgvTaskCreateParam.AgvTaskParam("SITE",param.getToPos(),1,1) + ); + List<AgvTaskCreateParam.carrierInfoParam> carrierInfoParam = Arrays.asList( + //璧峰浣� + new AgvTaskCreateParam.carrierInfoParam() + + ); + agvTaskCreateParam.setTaskType("F01"); + agvTaskCreateParam.setInitPriority(param.getTrkPrty()); + agvTaskCreateParam.setRobotTaskCode(param.getRequestPK()); + agvTaskCreateParam.setTargetRoute(agvTaskParamList); + agvTaskCreateParam.setCarrierInfo(carrierInfoParam); + + } + private String doHttpRequest(AgvTaskCreateParam requestParam, String url, String path){ + String response = ""; + String success = "error"; + Map<String, Object> map = new HashMap<>(); + map.put("Content-Type", "application/json;charset=UTF-8"); + map.put("X-lr-request-id", requestParam.getRobotTaskCode()); + map.put("X-lr-version", 4.1); + map.put("X-lr-trace-id", "{{$guid}}"); + try { + response = new HttpHandler.Builder() + .setHeaders(map) + .setUri(url) + .setHttps(true) + .setPath(path) + .setJson(JSONObject.toJSONString(requestParam)) + .build() + .doPost(); + JSONObject jsonObject = JSON.parseObject(response); + + String code = jsonObject.get("code").toString(); + if(code.equals("SUCCESS")){ + success = "SUCCESS"; + }else { + success = jsonObject.get("message").toString(); + } + log.info("杞彂agv浠诲姟锛氳姹備綋:"+JSONObject.toJSONString(requestParam)+",杩斿洖鍊�:"+jsonObject); + }catch (Exception e){ + + } + return success; + } + + //鐢熸垚鍏ュ簱浠诲姟 + @PostMapping("/createInTask") + public R createInTask(@RequestBody CreateInTaskParam param) { + //鑾峰彇鍏ュ簱浠诲姟绫诲瀷 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() - .eq(TaskCtg::getFlag, "OUT") + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.IN)) .eq(TaskCtg::getStatus, 1)); if (taskCtg == null) { return R.error("浠诲姟绫诲瀷寮傚父"); } - Loc loc = locService.selectByLocNo(param.getOriginLoc()); + Long hostId = 1L;//榛樿涓讳粨搴� + + Loc loc = locService.selectByLocNo(param.getDestLoc()); if (loc == null) { return R.error("搴撲綅鍙蜂笉瀛樺湪"); } - if (!loc.getLocStsFlag().equals("F")) { - return R.error("搴撲綅鐘舵�佷笉婊¤冻鍑哄簱鏉′欢"); + //鑾峰彇涓ユ牸妯″紡鍙傛暟 + boolean mapStrict = true;//榛樿涓ユ牸妯″紡 + Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "shuttleMapStrict")); + if (dict != null) { + mapStrict = Boolean.parseBoolean(dict.getValue()); + } + + if (mapStrict && !loc.getLocStsFlag().equals("O")) { + return R.error("搴撲綅鐘舵�佷笉婊¤冻鍏ュ簱鏉′欢"); + } + + Task one = taskService.getOne(new LambdaQueryWrapper<Task>() + .eq(Task::getTaskCtg, taskCtg.getId()) + .eq(Task::getOriginSite, param.getOriginSite()) + .eq(Task::getDestSite, param.getDestSite()) + .eq(Task::getDestLoc, param.getDestLoc())); + if (one != null) { + return R.error("浠诲姟宸插瓨鍦�"); + } + + String destSite = param.getDestSite(); + if (Cools.isEmpty(param.getDestSite())) { + //鐩爣绔欎负绌哄垯浣跨敤WCS绯荤粺鍐呯疆璺緞 + BasConveyorPath path = basConveyorPathService.getOne(new LambdaQueryWrapper<BasConveyorPath>() + .eq(BasConveyorPath::getTypeNo, taskCtg.getId()) + .eq(BasConveyorPath::getHostId, hostId) + .eq(BasConveyorPath::getStnNo, param.getOriginSite())); + if(path == null) { + return R.error("鍐呯疆璺緞涓嶅瓨鍦�"); + } + destSite = String.valueOf(path.getDeviceStn()); + } + + //鍒ゆ柇鍑哄叆搴撴ā寮� + BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>() + .eq(BasConveyorSta::getSiteNo, destSite)); + if (!basConveyorSta.getWorkMode().equals((int) WorkModeType.PAKIN_MODE.id)) { + //涓嶆槸鍏ュ簱妯″紡锛屾娴嬫槸鍚﹀彲鍒囨崲鍏ュ簱 + //鑾峰彇鍑哄簱浠诲姟绫诲瀷 + TaskCtg taskInCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.OUT)) + .eq(TaskCtg::getStatus, 1)); + if (taskInCtg == null) { + return R.error("浠诲姟绫诲瀷寮傚父"); + } + List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() + .eq(Task::getTaskCtg, taskInCtg.getId())); + if (!tasks.isEmpty()) { + return R.error("褰撳墠瀛樺湪鍑哄簱浠诲姟锛屾棤娉曞垏鎹㈠叆搴撴ā寮�"); + } + + BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getConveyorNo, basConveyorSta.getConveyorNo())); + if(basConveyor == null) { + return R.error("杈撻�佺嚎涓嶅瓨鍦�"); + } + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue()); + if(devpThread == null) { + return R.error("杈撻�佺嚎绾跨▼涓嶅瓨鍦�"); + } + + boolean result = devpThread.switchWorkMode(Integer.parseInt(destSite), WorkModeType.PAKIN_MODE.id); + if (!result) { + return R.error("妯″紡鍒囨崲澶辫触"); + } + } + + //浼樺厛绾� + Integer priority = 10; + if (param.getPriority() != null) { + priority = param.getPriority(); } Task task = new Task(); task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); - task.setTaskNo(String.valueOf(Utils.getTaskNo("OUT"))); - task.setTaskSts(TaskStsType.NEW_OUTBOUND.sts); + task.setTaskNo(String.valueOf(Utils.getTaskNo("IN"))); + task.setWmsTaskNo(param.getTaskNo()); + task.setTaskSts(TaskStsType.NEW_INBOUND.sts); task.setTaskCtg(taskCtg.getId()); - task.setPriority(10); + task.setPriority(priority); task.setOriginSite(param.getOriginSite()); - task.setOriginLoc(param.getOriginLoc()); - task.setDestSite(param.getDestSite()); - task.setDestLoc(null); + task.setOriginLoc(null); + task.setDestSite(destSite); + task.setDestLoc(param.getDestLoc()); + task.setZpallet(param.getBarcode()); task.setIoTime(new Date()); task.setStartTime(new Date()); task.setStatus(1); task.setMemo(""); task.setShuttleNo(null);//绛夊緟涓荤嚎绋嬪垎閰嶅皬杞� task.setRecordLoc("Y");//璁板綍搴撳瓨淇℃伅 - task.setHostId(1L);//涓存椂鎺у埗鍙厑璁竓ost涓�1 + task.setHostId(hostId);//涓存椂鎺у埗鍙厑璁竓ost涓�1 + task.setMemo(param.getEndSite()); + + boolean result = taskService.save(task); + if (!result) { + return R.error("鐢熸垚鍏ュ簱浠诲姟澶辫触锛�"); + } + return R.ok(); + } + + //鐢熸垚鍑哄簱浠诲姟 + @PostMapping("/createOutTask") + public R createOutTask(@RequestBody CreateOutTaskParam param) { + //鑾峰彇鍑哄簱浠诲姟绫诲瀷 + TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.OUT)) + .eq(TaskCtg::getStatus, 1)); + if (taskCtg == null) { + return R.error("浠诲姟绫诲瀷寮傚父"); + } + + Long hostId = 1L;//榛樿涓讳粨搴� + + Loc loc = locService.selectByLocNo(param.getOriginLoc()); + if (loc == null) { + return R.error("搴撲綅鍙蜂笉瀛樺湪"); + } + + //鑾峰彇涓ユ牸妯″紡鍙傛暟 + boolean mapStrict = true;//榛樿涓ユ牸妯″紡 + Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "shuttleMapStrict")); + if (dict != null) { + mapStrict = Boolean.parseBoolean(dict.getValue()); + } + + if (mapStrict && !loc.getLocStsFlag().equals("F")) { + return R.error("搴撲綅鐘舵�佷笉婊¤冻鍑哄簱鏉′欢"); + } + + Task one = taskService.getOne(new LambdaQueryWrapper<Task>() + .eq(Task::getTaskCtg, taskCtg.getId()) + .eq(Task::getOriginSite, param.getOriginSite()) + .eq(Task::getOriginLoc, param.getOriginLoc()) + .eq(Task::getDestSite, param.getDestSite())); + if (one != null) { + return R.error("浠诲姟宸插瓨鍦�"); + } + + String originSite = param.getOriginSite(); + if (Cools.isEmpty(param.getOriginSite())) { + //浣跨敤WCS绯荤粺鍐呯疆璺緞 + BasConveyorPath path = basConveyorPathService.getOne(new LambdaQueryWrapper<BasConveyorPath>() + .eq(BasConveyorPath::getTypeNo, taskCtg.getId()) + .eq(BasConveyorPath::getHostId, hostId) + .eq(BasConveyorPath::getStnNo, param.getDestSite())); + if(path == null) { + return R.error("鍐呯疆璺緞涓嶅瓨鍦�"); + } + Integer deviceNo = path.getDeviceNo();//鑾峰彇鎻愬崌鏈哄彿 + BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getLiftNo, deviceNo).eq(BasLift::getHostId, hostId)); + if(basLift == null) { + return R.error("鎻愬崌鏈哄璞′笉瀛樺湪"); + } + List<BasLiftStaDto> staList = JSON.parseArray(basLift.getSta(), BasLiftStaDto.class); + BasLiftStaDto originStaDto = null; + for (BasLiftStaDto sta : staList) { + if (sta.getLev() == Utils.getLev(param.getOriginLoc())) { + originStaDto = sta; + break; + } + } + + if (originStaDto == null) { + return R.error("婧愮珯涓嶅瓨鍦�"); + } + + originSite = String.valueOf(originStaDto.getStaNo()); + } + + //鍒ゆ柇鍑哄叆搴撴ā寮� + BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>() + .eq(BasConveyorSta::getSiteNo, originSite)); + if (!basConveyorSta.getWorkMode().equals((int) WorkModeType.PAKOUT_MODE.id)) { + //涓嶆槸鍑哄簱妯″紡锛屾娴嬫槸鍚﹀彲鍒囨崲鍑哄簱 + //鑾峰彇鍏ュ簱浠诲姟绫诲瀷 + TaskCtg taskInCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.IN)) + .eq(TaskCtg::getStatus, 1)); + if (taskInCtg == null) { + return R.error("浠诲姟绫诲瀷寮傚父"); + } + List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() + .eq(Task::getTaskCtg, taskInCtg.getId())); + if (!tasks.isEmpty()) { + return R.error("褰撳墠瀛樺湪鍏ュ簱浠诲姟锛屾棤娉曞垏鎹㈠嚭搴撴ā寮�"); + } + + BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getConveyorNo, basConveyorSta.getConveyorNo())); + if(basConveyor == null) { + return R.error("杈撻�佺嚎涓嶅瓨鍦�"); + } + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue()); + if(devpThread == null) { + return R.error("杈撻�佺嚎绾跨▼涓嶅瓨鍦�"); + } + + boolean result = devpThread.switchWorkMode(Integer.parseInt(originSite), WorkModeType.PAKOUT_MODE.id); + if (!result) { + return R.error("妯″紡鍒囨崲澶辫触"); + } + } + + //浼樺厛绾� + Integer priority = 10; + if (param.getPriority() != null) { + priority = param.getPriority(); + } + + Task task = new Task(); + task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); + task.setTaskNo(String.valueOf(Utils.getTaskNo("OUT"))); + task.setWmsTaskNo(param.getTaskNo()); + task.setTaskSts(TaskStsType.NEW_OUTBOUND.sts); + task.setTaskCtg(taskCtg.getId()); + task.setPriority(priority); + task.setOriginSite(originSite); + task.setOriginLoc(param.getOriginLoc()); + task.setDestSite(param.getDestSite()); + task.setDestLoc(null); + task.setIoTime(new Date()); + task.setStartTime(new Date()); + task.setStatus(1); + task.setMemo(param.getEndSite()); + task.setShuttleNo(null);//绛夊緟涓荤嚎绋嬪垎閰嶅皬杞� + task.setRecordLoc("Y");//璁板綍搴撳瓨淇℃伅 + task.setHostId(hostId);//涓存椂鎺у埗鍙厑璁竓ost涓�1 + task.setZpallet(param.getZpallet()); boolean result = taskService.save(task); if (!result) { @@ -99,18 +710,84 @@ public R createManualTakeTask(@RequestBody CreateManualTakeTaskParam param) { //鑾峰彇鎵嬪姩浠诲姟绫诲瀷 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() - .eq(TaskCtg::getFlag, "MANUAL") + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.MANUAL)) .eq(TaskCtg::getStatus, 1)); if (taskCtg == null) { return R.error("浠诲姟绫诲瀷寮傚父"); } + Task one = taskService.getOne(new LambdaQueryWrapper<Task>() + .eq(Task::getTaskCtg, taskCtg.getId()) + .eq(Task::getOriginLoc, param.getOriginLoc()) + .eq(Task::getDestLoc, param.getDestLoc())); + if (one != null) { + return R.error("浠诲姟宸插瓨鍦�"); + } + + //浼樺厛绾� + Integer priority = 10; + if (param.getPriority() != null) { + priority = param.getPriority(); + } + Task task = new Task(); task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); task.setTaskNo(String.valueOf(Utils.getTaskNo("OUT"))); + task.setWmsTaskNo(param.getTaskNo()); task.setTaskSts(TaskStsType.NEW_MANUAL.sts); task.setTaskCtg(taskCtg.getId()); - task.setPriority(10); + task.setPriority(priority); + task.setOriginSite(null); + task.setOriginLoc(param.getOriginLoc());//婧愬簱浣� + task.setDestSite(null); + task.setDestLoc(param.getDestLoc());//鐩爣搴撲綅 + task.setIoTime(new Date()); + task.setStartTime(new Date()); + task.setStatus(1); + task.setMemo(""); + task.setShuttleNo(null);//绛夊緟涓荤嚎绋嬪垎閰嶅皬杞� + task.setRecordLoc(param.getRecord() ? "Y" : "N");//璁板綍搴撳瓨淇℃伅 + task.setHostId(1L);//涓存椂鎺у埗鍙厑璁竓ost涓�1 + + boolean result = taskService.save(task); + if (!result) { + return R.error("鐢熸垚鎵嬪姩鍙栨斁璐т换鍔″け璐ワ紒"); + } + return R.ok(); + } + + //鐢熸垚杞借揣绉诲姩浠诲姟 + @PostMapping("/createLadenMoveTakeTask") + public R createLadenMoveTakeTask(@RequestBody CreateManualTakeTaskParam param) { + //鑾峰彇鎵嬪姩浠诲姟绫诲瀷 + TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.MOVE)) + .eq(TaskCtg::getStatus, 1)); + if (taskCtg == null) { + return R.error("浠诲姟绫诲瀷寮傚父"); + } + + Task one = taskService.getOne(new LambdaQueryWrapper<Task>() + .eq(Task::getTaskCtg, taskCtg.getId()) + .eq(Task::getOriginLoc, param.getOriginLoc()) + .eq(Task::getDestLoc, param.getDestLoc())); + if (one != null) { + return R.error("浠诲姟宸插瓨鍦�"); + } + + //浼樺厛绾� + Integer priority = 10; + if (param.getPriority() != null) { + priority = param.getPriority(); + } + + Task task = new Task(); + task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); + task.setTaskNo(String.valueOf(Utils.getTaskNo("OUT"))); + task.setWmsTaskNo(param.getTaskNo()); + task.setTaskSts(TaskStsType.NEW_LADEN_MOVE.sts); + task.setTaskCtg(taskCtg.getId()); + task.setPriority(priority); task.setOriginSite(null); task.setOriginLoc(param.getOriginLoc());//婧愬簱浣� task.setDestSite(null); @@ -135,7 +812,7 @@ public R createMoveTask(@RequestBody CreateMoveTaskParam param) { //鑾峰彇鍑哄簱浠诲姟绫诲瀷 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() - .eq(TaskCtg::getFlag, "MOVE") + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.MOVE)) .eq(TaskCtg::getStatus, 1)); if (taskCtg == null) { return R.error("浠诲姟绫诲瀷寮傚父"); @@ -154,20 +831,37 @@ return R.error("绌挎杞︿笉鍦ㄧ嚎"); } ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); - if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(param.getDestSite())) { - return R.error("绌挎杞﹀拰鐩爣浣嶇疆涓嶅湪鍚屼竴妤煎眰"); + if (shuttleProtocol == null) { + return R.error("绌挎杞︿笉鍦ㄧ嚎"); + } +// if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(param.getDestLoc())) { +// return R.error("绌挎杞﹀拰鐩爣浣嶇疆涓嶅湪鍚屼竴妤煎眰"); +// } + + Task one = taskService.getOne(new LambdaQueryWrapper<Task>() + .eq(Task::getTaskCtg, taskCtg.getId()) + .eq(Task::getDestLoc, param.getDestLoc())); + if (one != null) { + return R.error("浠诲姟宸插瓨鍦�"); + } + + //浼樺厛绾� + Integer priority = 10; + if (param.getPriority() != null) { + priority = param.getPriority(); } Task task = new Task(); task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); task.setTaskNo(String.valueOf(Utils.getTaskNo("OUT"))); + task.setWmsTaskNo(param.getTaskNo()); task.setTaskSts(TaskStsType.NEW_MOVE.sts); task.setTaskCtg(taskCtg.getId()); - task.setPriority(10); + task.setPriority(priority); task.setOriginSite(null); task.setOriginLoc(null); - task.setDestSite(param.getDestSite()); - task.setDestLoc(null); + task.setDestSite(null); + task.setDestLoc(param.getDestLoc()); task.setIoTime(new Date()); task.setStartTime(new Date()); task.setStatus(1); @@ -183,4 +877,29 @@ return R.ok(); } + //鍒囨崲宸ヤ綔妯″紡 + @PostMapping("/switchWorkMode") + public R switchWorkMode(@RequestBody SwitchWorkModeParam param) { + BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getConveyorNo, param.getConveyorNo())); + if(basConveyor == null) { + return R.error("杈撻�佺嚎涓嶅瓨鍦�"); + } + + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue()); + if(devpThread == null) { + return R.error("杈撻�佺嚎绾跨▼涓嶅瓨鍦�"); + } + + boolean result = devpThread.switchWorkMode(param.getSiteId(), param.getWorkMode()); + if (!result) { + return R.error("妯″紡鍒囨崲澶辫触"); + } + return R.ok(); + } + + public static void main(String[] args) { + String wmStoWCSLocNo = getWMStoWCSLocNo("0601KW010101"); + System.out.println(wmStoWCSLocNo); + } + } -- Gitblit v1.9.1