From d835d1b51f832889929cdf69010034a30ef44d02 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期四, 17 十月 2024 13:57:29 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java | 251 +++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 227 insertions(+), 24 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 3e9339b..b39dad9 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,28 +1,29 @@ package com.zy.asrs.wcs.core.controller; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.CreateInTaskParam; -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.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -30,6 +31,7 @@ import org.springframework.web.bind.annotation.RestController; import java.util.Date; +import java.util.List; /** * 瀵瑰鏆撮湶鎺ュ彛 @@ -49,26 +51,101 @@ 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("/createInTask") public R createInTask(@RequestBody CreateInTaskParam param) { //鑾峰彇鍏ュ簱浠诲姟绫诲瀷 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() - .eq(TaskCtg::getFlag, "IN") + .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.IN)) .eq(TaskCtg::getStatus, 1)); if (taskCtg == null) { return R.error("浠诲姟绫诲瀷寮傚父"); } + + Long hostId = 1L;//榛樿涓讳粨搴� Loc loc = locService.selectByLocNo(param.getDestLoc()); if (loc == null) { return R.error("搴撲綅鍙蜂笉瀛樺湪"); } - if (!loc.getLocStsFlag().equals("O")) { + //鑾峰彇涓ユ牸妯″紡鍙傛暟 + 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; @@ -79,20 +156,22 @@ Task task = new Task(); task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); task.setTaskNo(String.valueOf(Utils.getTaskNo("IN"))); + task.setWmsTaskNo(param.getTaskNo()); task.setTaskSts(TaskStsType.NEW_INBOUND.sts); task.setTaskCtg(taskCtg.getId()); task.setPriority(priority); task.setOriginSite(param.getOriginSite()); task.setOriginLoc(null); - task.setDestSite(param.getDestSite()); + 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 boolean result = taskService.save(task); if (!result) { @@ -106,20 +185,103 @@ public R createOutTask(@RequestBody CreateOutTaskParam param) { //鑾峰彇鍑哄簱浠诲姟绫诲瀷 TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() - .eq(TaskCtg::getFlag, "OUT") + .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("搴撲綅鍙蜂笉瀛樺湪"); } - if (!loc.getLocStsFlag().equals("F")) { + //鑾峰彇涓ユ牸妯″紡鍙傛暟 + 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; @@ -130,10 +292,11 @@ 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(param.getOriginSite()); + task.setOriginSite(originSite); task.setOriginLoc(param.getOriginLoc()); task.setDestSite(param.getDestSite()); task.setDestLoc(null); @@ -143,7 +306,7 @@ task.setMemo(""); task.setShuttleNo(null);//绛夊緟涓荤嚎绋嬪垎閰嶅皬杞� task.setRecordLoc("Y");//璁板綍搴撳瓨淇℃伅 - task.setHostId(1L);//涓存椂鎺у埗鍙厑璁竓ost涓�1 + task.setHostId(hostId);//涓存椂鎺у埗鍙厑璁竓ost涓�1 boolean result = taskService.save(task); if (!result) { @@ -157,10 +320,18 @@ 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("浠诲姟宸插瓨鍦�"); } //浼樺厛绾� @@ -172,6 +343,7 @@ 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(priority); @@ -199,7 +371,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("浠诲姟绫诲瀷寮傚父"); @@ -218,8 +390,18 @@ 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("浠诲姟宸插瓨鍦�"); } //浼樺厛绾� @@ -231,13 +413,14 @@ 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(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); @@ -253,4 +436,24 @@ 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(); + } + } -- Gitblit v1.9.1