From 1592fea84d060a0dac91e1a48dcbe665bbe34886 Mon Sep 17 00:00:00 2001 From: liangzhou <594755172@qq.com> Date: Sun, 18 Aug 2024 10:23:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0=EF=BC=9A?= =?UTF-8?q?=201.=E8=B0=83=E6=95=B4=E4=BA=AE=E7=81=AF=E5=8F=8A=E8=A6=81?= =?UTF-8?q?=E6=96=99=E9=80=BB=E8=BE=91=202.=E5=A2=9E=E5=8A=A0=E5=8D=A1?= =?UTF-8?q?=E7=89=B9=E7=99=BB=E5=BD=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wms/controller/TaskController.java | 250 ++++++++++-------- .../com/wms/controller/UserController.java | 72 +++++ .../java/com/wms/entity/app/dto/KateUser.java | 14 + .../com/wms/entity/app/wcs/ETaskData.java | 5 + .../WorkServiceImplements.java | 35 ++- 5 files changed, 260 insertions(+), 116 deletions(-) create mode 100644 src/main/java/com/wms/entity/app/dto/KateUser.java diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index 10b3a05..8e5d8b0 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -133,6 +133,10 @@ public class TaskController { * 工作站配置服务 */ private final WorkStationConfigService workStationConfigService; + /** + * 站台要料服务 + */ + private final GoodsToStationService goodsToStationService; /** * Wcs服务 */ @@ -312,7 +316,6 @@ public class TaskController { // 添加库存 if (inTask.getGoodsRelated() != null && StringUtils.isNotEmpty(inTask.getGoodsRelated().getGoodsId())) { // 查询这个物料有没有库存 - // TODO 查询条件根据项目要求调整 Stock existStock = stockService.getOne(new LambdaQueryWrapper() .apply("goods_related -> '$.goodsId' = {0}", inTask.getGoodsRelated().getGoodsId()) .eq(Stock::getVehicleId, inTask.getVehicleId()) @@ -344,23 +347,24 @@ public class TaskController { // 更新库存状态 List backStocks = stockService.list(new LambdaQueryWrapper() .eq(Stock::getVehicleId, inTask.getVehicleId())); - backStocks.forEach(stock -> { + for (Stock stock : backStocks) { if (stock.getGoodsRelated().getRemainNum().compareTo(BigDecimal.ZERO) == 0) { // 库存数量为0时要删除当前库存 stockService.removeById(stock.getStockId()); - } - if (haveMoveTask) { - // 后续有移库 - stock.setStockStatus(StockStatus.MOVE.getCode()); } else { - // 后续没有移库 - stock.setStockStatus(StockStatus.OK.getCode()); + if (haveMoveTask) { + // 后续有移库 + stock.setStockStatus(StockStatus.MOVE.getCode()); + } else { + // 后续没有移库 + stock.setStockStatus(StockStatus.OK.getCode()); + } + stock.setLocationId(inTask.getDestination()); + stock.setLastUpdateTime(LocalDateTime.now()); + stock.setLastUpdateUser(inTask.getUserName()); + stockService.update(stock, new LambdaUpdateWrapper().eq(Stock::getStockId, stock.getStockId())); } - stock.setLocationId(inTask.getDestination()); - stock.setLastUpdateTime(LocalDateTime.now()); - stock.setLastUpdateUser(inTask.getUserName()); - stockService.update(stock, new LambdaUpdateWrapper().eq(Stock::getStockId, stock.getStockId())); - }); + } // 当前载具 Vehicle currentVehicle = vehicleService.getOne(new LambdaQueryWrapper().eq(Vehicle::getVehicleId, inTask.getVehicleId()).last("limit 1")); if (currentVehicle == null) { @@ -902,6 +906,13 @@ public class TaskController { BigDecimal realNum = stock.getGoodsRelated().getRemainNum(); List eTaskDataList = new ArrayList<>(); for (WorkFlow tempWork : workFlows) { + if (tempWork.getLightStatus() != 0) { + // 不是未亮灯的状态 + // 当次拣选数量 + BigDecimal thisPickNum = realNum.compareTo(tempWork.getNeedNum().subtract(tempWork.getPickedNum())) > 0 ? tempWork.getNeedNum().subtract(tempWork.getPickedNum()) : realNum; + realNum = realNum.subtract(thisPickNum); + continue; + } if (realNum.compareTo(BigDecimal.ZERO) <= 0) {// 当前物料数量不足 break; } @@ -916,6 +927,7 @@ public class TaskController { BigDecimal thisPickNum = realNum.compareTo(tempWork.getNeedNum().subtract(tempWork.getPickedNum())) > 0 ? tempWork.getNeedNum().subtract(tempWork.getPickedNum()) : realNum; ETaskData eTaskData = new ETaskData(); eTaskData.setTaskId(tempWork.getWorkFlowId());// 用户查询对应的拣选任务 + eTaskData.setETaskId(generateId("ETASK_")); eTaskData.setGoodsId(tempWork.getGoodsId()); eTaskData.setGoodsName(goodsInfo != null ? goodsInfo.getGoodsName() : ""); eTaskData.setNeedNum(thisPickNum.intValue()); @@ -934,79 +946,82 @@ public class TaskController { realNum = realNum.subtract(thisPickNum); } } - // 发送亮灯 - WcsETaskRequest wcsETaskRequest = new WcsETaskRequest(); - wcsETaskRequest.setTaskGroup(generateId(vehicleId + "_")); - wcsETaskRequest.setTaskType(1); - wcsETaskRequest.setTaskData(eTaskDataList); - wcsETaskRequest.setOrderId(generateId(workQuery.getGoodsId() + "_")); - wcsETaskRequest.setVehicleNo(vehicleId); - String sendToWcsETaskUrl = configMap.get(ConfigMapKeyEnum.URL_WCS_E_TASK.getConfigKey()); - if (StringUtils.isEmpty(sendToWcsETaskUrl)) { - // url地址为空 - logger.error("向Wcs发送电子标签亮灯任务的地址为空"); - throw new Exception("向Wcs发送电子标签亮灯任务的地址为空"); - } else { - // - ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(sendToWcsETaskUrl, convertJsonString(wcsETaskRequest)), ResponseEntity.class); - if (result == null || !Objects.equals(result.getCode(), ResponseCode.OK.getCode())) { - logger.error("发送电子标签亮灯任务失败"); - throw new Exception("发送电子标签亮灯任务失败"); + if (!eTaskDataList.isEmpty()) { + // 发送亮灯 + WcsETaskRequest wcsETaskRequest = new WcsETaskRequest(); + wcsETaskRequest.setTaskGroup(generateId(vehicleId + "_")); + wcsETaskRequest.setTaskType(1); + wcsETaskRequest.setTaskData(eTaskDataList); + wcsETaskRequest.setOrderId(generateId(workQuery.getGoodsId() + "_")); + wcsETaskRequest.setVehicleNo(vehicleId); + String sendToWcsETaskUrl = configMap.get(ConfigMapKeyEnum.URL_WCS_E_TASK.getConfigKey()); + if (StringUtils.isEmpty(sendToWcsETaskUrl)) { + // url地址为空 + logger.error("向Wcs发送电子标签亮灯任务的地址为空"); + throw new Exception("向Wcs发送电子标签亮灯任务的地址为空"); } else { - // 更新workFlow数据 - workFlowService.updateBatchById(workFlows); - // 更新亮灯数据 - etagLocationService.update(new LambdaUpdateWrapper() - .set(ETagLocation::getPickStatus, 1) - .set(ETagLocation::getTaskType, wcsETaskRequest.getTaskType()) - .set(ETagLocation::getVehicleNo, wcsETaskRequest.getVehicleNo()) - .in(ETagLocation::getELocationId, eTaskDataList.stream().map(ETaskData::getLocation).collect(Collectors.toList()))); - // 更新站台数据 - standService.update(new LambdaUpdateWrapper() - .set(Stand::getPickGoods, workQuery.getGoodsId()) - .set(Stand::getPickVehicle, vehicleId) - .eq(Stand::getStandId, standId)); - // 生成前台VO - StandPickVo standPickVo = new StandPickVo(); - standPickVo.setStandId(standId); - standPickVo.setGoodsId(workQuery.getGoodsId()); - standPickVo.setPlanPickNum(originNum.subtract(realNum)); - standPickVo.setRemainNumOrigin(realNum); - standPickVo.setRemainNumReal(realNum); - try { - // 获取当前站台已完成数量 - List allWorkFlows = workFlowService.list(); - int finishingRows = 0; - BigDecimal finishedCounts = BigDecimal.ZERO; - BigDecimal allCounts = BigDecimal.ZERO; - for (WorkFlow workFlow : allWorkFlows) { - if (workFlow.getWorkStatus() == 2) { - finishingRows++; - } - finishedCounts = finishedCounts.add(workFlow.getPickedNum()); - allCounts = allCounts.add(workFlow.getNeedNum()); - } - standPickVo.setFinishedRows(finishingRows); - standPickVo.setTotalRows(allWorkFlows.size()); - standPickVo.setFinishedCounts(finishedCounts); - standPickVo.setTotalCounts(allCounts); - } catch (Exception e) { - logger.error("获取已完成数据报表失败,可能存在类型转换错误"); + // 发送信息 + logger.info("发送电子标签亮灯请求:{}", convertJsonString(wcsETaskRequest)); + ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(sendToWcsETaskUrl, convertJsonString(wcsETaskRequest)), ResponseEntity.class); + if (result == null || !Objects.equals(result.getCode(), ResponseCode.OK.getCode())) { + logger.error("发送电子标签亮灯任务失败:{}", convertJsonString(result)); + throw new Exception("发送电子标签亮灯任务失败"); + } else { + // 更新workFlow数据 + workFlowService.updateBatchById(workFlows); + // 更新亮灯数据 + etagLocationService.update(new LambdaUpdateWrapper() + .set(ETagLocation::getPickStatus, 1) + .set(ETagLocation::getTaskType, wcsETaskRequest.getTaskType()) + .set(ETagLocation::getVehicleNo, wcsETaskRequest.getVehicleNo()) + .in(ETagLocation::getELocationId, eTaskDataList.stream().map(ETaskData::getLocation).collect(Collectors.toList()))); + // 更新站台数据 + standService.update(new LambdaUpdateWrapper() + .set(Stand::getPickGoods, workQuery.getGoodsId()) + .set(Stand::getPickVehicle, vehicleId) + .eq(Stand::getStandId, standId)); } - standPickVo.setRemark(goodsInfo != null ? goodsInfo.getUnpackingType() : ""); - // 返回成功 - response.setCode(ResponseCode.OK.getCode()); - response.setMessage("获取工作信息成功"); - response.setReturnData(standPickVo); - return convertJsonString(response); } } + // 生成前台VO + StandPickVo standPickVo = new StandPickVo(); + standPickVo.setStandId(standId); + standPickVo.setGoodsId(workQuery.getGoodsId()); + standPickVo.setPlanPickNum(originNum.subtract(realNum)); + standPickVo.setRemainNumOrigin(realNum); + standPickVo.setRemainNumReal(realNum); + try { + // 获取当前站台已完成数量 + List allWorkFlows = workFlowService.list(); + int finishingRows = 0; + BigDecimal finishedCounts = BigDecimal.ZERO; + BigDecimal allCounts = BigDecimal.ZERO; + for (WorkFlow workFlow : allWorkFlows) { + if (workFlow.getWorkStatus() == 2) { + finishingRows++; + } + finishedCounts = finishedCounts.add(workFlow.getPickedNum()); + allCounts = allCounts.add(workFlow.getNeedNum()); + } + standPickVo.setFinishedRows(finishingRows); + standPickVo.setTotalRows(allWorkFlows.size()); + standPickVo.setFinishedCounts(finishedCounts); + standPickVo.setTotalCounts(allCounts); + } catch (Exception e) { + logger.error("获取已完成数据报表失败,可能存在类型转换错误"); + } + standPickVo.setRemark(goodsInfo != null ? goodsInfo.getUnpackingType() : ""); + // 返回成功 + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("获取工作信息成功"); + response.setReturnData(standPickVo); + return convertJsonString(response); } catch (Exception e) { // 回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); logger.error("获取工作信息异常:{}", convertJsonString(e)); response.setCode(ResponseCode.ERROR.getCode()); - response.setMessage("获取工作信息异常"); + response.setMessage("获取工作信息异常:" + e.getMessage()); return convertJsonString(response); } } @@ -1120,6 +1135,22 @@ public class TaskController { } // 更新实际拣选数量 workFlow.setPickedNum(workFlow.getPickedNum().add(BigDecimal.valueOf(eTaskFeedbackRequest.getConfirmNum()))); + if (eTaskFeedbackRequest.getConfirmNum().compareTo(eTaskFeedbackRequest.getNeedNum()) < 0) { + int diffNum = eTaskFeedbackRequest.getNeedNum() - eTaskFeedbackRequest.getConfirmNum(); + // 查站台要料表---未分配以及分配但未完全分配 + GoodsToStation goodsToStation = goodsToStationService.getOne(new LambdaQueryWrapper() + .eq(GoodsToStation::getWorkStation, workFlow.getWorkStation()) + .eq(GoodsToStation::getGoodsId, workFlow.getGoodsId()) + .eq(GoodsToStation::getDistributeStatus, 0) + .or().eq(GoodsToStation::getDistributeStatus, 1) + .last("limit 1")); + if (goodsToStation != null) { + // 更新站台要料数量 + goodsToStation.setDistributedNum(goodsToStation.getDistributedNum().subtract(BigDecimal.valueOf(diffNum))); + goodsToStation.setDistributeStatus(1); + goodsToStationService.updateById(goodsToStation); + } + } if (workFlow.getPickedNum().compareTo(workFlow.getNeedNum()) < 0) { // 判断后续有无物料进此站台 List pickedTasks = pickTaskService.list(new LambdaQueryWrapper() @@ -1129,25 +1160,8 @@ public class TaskController { if (outsideVehiclesService.exists(new LambdaQueryWrapper() .eq(OutsideVehicles::getGoodsId, workFlow.getGoodsId()) .in(OutsideVehicles::getVehicleId, vehicleIds))) { - workFlow.setLightStatus(1);// 已亮灯 + workFlow.setLightStatus(0);// 未亮灯 workFlow.setWorkStatus(1);// 正在做 - } else { - // 当前物料当前站台需求数量 - BigDecimal needNum = workFlow.getNeedNum().subtract(workFlow.getPickedNum()); - // 判断当前物料是否在流转中 - needNum = wmsTaskService.callGoods(workFlow.getGoodsId(), needNum, workFlow.getWorkStation()); - // 判断此时需求数量是否为0 - if (needNum.compareTo(BigDecimal.ZERO) > 0) { - // 向库存请求 - needNum = wmsTaskService.callStocks(workFlow.getGoodsId(), needNum, workFlow.getWorkStation()); - } - if (needNum.compareTo(workFlow.getNeedNum().subtract(workFlow.getPickedNum())) == 0) { - workFlow.setLightStatus(2);// 已拍灯 - workFlow.setWorkStatus(2);// 已完成 - } else { - workFlow.setLightStatus(1);// 已亮灯 - workFlow.setWorkStatus(1);// 正在做 - } } } else { workFlow.setLightStatus(2);// 已拍灯 @@ -1270,24 +1284,33 @@ public class TaskController { } else { // 处理库存偏差 if (workConfirmRequest.getRemainNumReal().compareTo(workConfirmRequest.getRemainNumOrigin()) != 0) { - // TODO 这里库存的处理仍然需要完善 - if (workConfirmRequest.getRemainNumReal().compareTo(BigDecimal.ZERO) == 0) {// 实际剩余数量为0 - // 删除库存 - stockService.remove(new LambdaQueryWrapper() - .apply("goods_related -> '$.goodsId' = {0}", workConfirmRequest.getGoodsId()) - .eq(Stock::getVehicleId, pickTask.getVehicleId())); - // - } else { - // 更新库存数量 - Stock existStock = stockService.getOne(new LambdaQueryWrapper() - .apply("goods_related -> '$.goodsId' = {0}", workConfirmRequest.getGoodsId()) - .eq(Stock::getVehicleId, pickTask.getVehicleId()) - .last("limit 1")); - StockDetailInfo goodsRelated = existStock.getGoodsRelated(); - goodsRelated.setRemainNum(workConfirmRequest.getRemainNumReal()); - existStock.setGoodsRelated(goodsRelated); + Stock existStock = stockService.getOne(new LambdaQueryWrapper() + .apply("goods_related -> '$.goodsId' = {0}", workConfirmRequest.getGoodsId()) + .eq(Stock::getVehicleId, pickTask.getVehicleId()) + .last("limit 1"));// 更新库存数量 + if (existStock != null && existStock.getGoodsRelated() != null) { + StockDetailInfo goodsDetail = existStock.getGoodsRelated(); + goodsDetail.setRemainNum(workConfirmRequest.getRemainNumReal()); + existStock.setGoodsRelated(goodsDetail); stockService.updateById(existStock); } + OutsideVehicles currentGoodsVehicle = outsideVehiclesService.getOne(new LambdaQueryWrapper() + .eq(OutsideVehicles::getVehicleId, pickTask.getVehicleId()) + .eq(OutsideVehicles::getGoodsId, workConfirmRequest.getGoodsId()) + .last("limit 1")); + if (workConfirmRequest.getRemainNumReal().compareTo(BigDecimal.ZERO) == 0) {// 实际剩余数量为0 + // 更新流转载具表剩余数量 + if (currentGoodsVehicle != null) { + currentGoodsVehicle.setRemainNum(BigDecimal.ZERO); + outsideVehiclesService.updateById(currentGoodsVehicle); + } + } else { + // 更新流转载具表剩余数量 + if (currentGoodsVehicle != null) { + currentGoodsVehicle.setRemainNum(currentGoodsVehicle.getRemainNum().add(workConfirmRequest.getRemainNumReal().subtract(workConfirmRequest.getRemainNumOrigin()))); + outsideVehiclesService.updateById(currentGoodsVehicle); + } + } } // 查询当前载具上的流转中的物料 List outsideVehicles = outsideVehiclesService.list(new LambdaQueryWrapper() @@ -2114,6 +2137,7 @@ public class TaskController { // 当次拣选数量 ETaskData eTaskData = new ETaskData(); eTaskData.setTaskId(generateId(smallBox + "_"));// 用户查询对应的拣选任务 + eTaskData.setETaskId(generateId(smallBox + "_")); eTaskData.setGoodsId(smallBox); eTaskData.setGoodsName(""); eTaskData.setNeedNum(1); @@ -2140,10 +2164,10 @@ public class TaskController { // url地址为空 logger.error("向Wcs发送电子标签亮灯任务的地址为空"); } else { - // + logger.info("发送电子标签亮灯请求:{}", convertJsonString(wcsETaskRequest)); ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(sendToWcsETaskUrl, convertJsonString(wcsETaskRequest)), ResponseEntity.class); if (result == null || !Objects.equals(result.getCode(), ResponseCode.OK.getCode())) { - logger.error("发送电子标签亮灯任务失败"); + logger.error("发送电子标签亮灯任务失败:{}", convertJsonString(result)); throw new Exception("发送电子标签亮灯任务失败"); } else { // 更新亮灯数据 diff --git a/src/main/java/com/wms/controller/UserController.java b/src/main/java/com/wms/controller/UserController.java index c9546b1..5a6961e 100644 --- a/src/main/java/com/wms/controller/UserController.java +++ b/src/main/java/com/wms/controller/UserController.java @@ -1,14 +1,21 @@ package com.wms.controller; import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.auth0.jwt.JWT; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.wms.annotation.MyLog; import com.wms.constants.enums.ResponseCode; +import com.wms.entity.app.dto.KateUser; import com.wms.entity.app.dto.MenuDto; import com.wms.entity.app.dto.UserDto; import com.wms.entity.app.request.UserQuery; import com.wms.entity.app.vo.MenuEntity; import com.wms.entity.app.ResponseEntity; import com.wms.entity.app.vo.UserConfigEntity; +import com.wms.entity.table.User; import com.wms.service.MenuService; import com.wms.service.StandService; import com.wms.service.UserService; @@ -158,6 +165,71 @@ public class UserController { } } + /** + * 获得用户信息菜单 + * @param codeInfo code信息 + * @return 结果 + */ + @PostMapping("/getUser") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "获得用户信息菜单", logMethod = "getUser") + public String getUser(@RequestBody JSONObject codeInfo) { + logger.info("卡特账号请求登录,登录信息:{},登录ip:{}", convertJsonString(codeInfo), HttpUtils.getIpAddr(servletRequest)); + // 响应信息 + ResponseEntity rsp = new ResponseEntity(); + String idToken = codeInfo.getString("id_token"); + logger.info("卡特登录回调,idToken:{}", idToken); + if (StringUtils.isEmpty(idToken)) { + logger.error("ID_TOKEN为空"); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("ID_TOKEN为空"); + return JSON.toJSONString(rsp); + } + try { + // 解码token + DecodedJWT decodedJWT = JWT.decode(idToken); + // 创建用户信息 + KateUser kateUser = new KateUser(); + kateUser.setName(decodedJWT.getClaim("name").asString()); + kateUser.setGroups(decodedJWT.getClaim("groups").asList(String.class)); + // 卡特用户信息映射本地用户信息 + User newUser = new User(); + newUser.setUserName(kateUser.getName()); + List localUsers = userService.list(new LambdaQueryWrapper() + .eq(User::getUserName, kateUser.getName())); + if (localUsers.size() > 0) {// 本地存在 + newUser.setRoleId(localUsers.get(0).getRoleId()); + } else { + if (kateUser.getGroups().contains("CXL-ASRS-Admin")) {// 普通用户 + newUser.setRoleId(1); + } else if (kateUser.getGroups().contains("CXL-ASRS-User")) { + newUser.setRoleId(2); + } else { + logger.error("当前用户不被允许登录:{}", newUser.getUserName()); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("当前用户不被允许登录"); + return JSON.toJSONString(rsp); + } + } + // 返回成功 + logger.info("登录成功,登录用户:{}", newUser.getUserName()); + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("登录成功"); + // 返回用户数据 + rsp.setReturnData(generateUserInfo(BeanUtil.copyProperties(newUser, UserDto.class), HttpUtils.getIpAddr(servletRequest))); + } catch (Exception exception) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error(exception.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("构建用户及菜单错误"); + } + return JSON.toJSONString(rsp); + } + /** * 构造用户信息(菜单、按钮等权限) * @param currentUser 当前用户 diff --git a/src/main/java/com/wms/entity/app/dto/KateUser.java b/src/main/java/com/wms/entity/app/dto/KateUser.java new file mode 100644 index 0000000..910b499 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/KateUser.java @@ -0,0 +1,14 @@ +package com.wms.entity.app.dto; + +import lombok.Data; + +import java.util.List; + +/** + * 卡特用户组 + */ +@Data +public class KateUser { + private String name; + private List groups; +} diff --git a/src/main/java/com/wms/entity/app/wcs/ETaskData.java b/src/main/java/com/wms/entity/app/wcs/ETaskData.java index c1415f2..585e512 100644 --- a/src/main/java/com/wms/entity/app/wcs/ETaskData.java +++ b/src/main/java/com/wms/entity/app/wcs/ETaskData.java @@ -15,6 +15,11 @@ public class ETaskData extends BaseWcsRequest { */ @JsonProperty("taskId") private String taskId; + /** + * 任务号 + */ + @JsonProperty("eTaskId") + private String eTaskId; /** * 点位 */ diff --git a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java index 9b88fe6..89207bc 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java @@ -3,6 +3,7 @@ package com.wms.service.business.serviceImplements; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.wms.constants.enums.ConfigMapKeyEnum; +import com.wms.constants.enums.StockStatus; import com.wms.entity.app.dto.WorkCenterAndOrderDto; import com.wms.entity.table.*; import com.wms.service.*; @@ -40,6 +41,7 @@ public class WorkServiceImplements implements IWorkService { private final OutsideVehiclesService outsideVehiclesService;// 流转中的箱子服务 private final WorkSummaryService workSummaryService;// 工作总结服务 private final ELocationConfigLastService eLocationConfigLastService;// 上一次标签配置的服务 + private final StockService stockService;// 库存服务 private final IWmsTaskService wmsTaskService; private final List workCreatingStations = new ArrayList<>();// 当前正在创建任务的站台 private final List workDoingStations = new ArrayList<>();// 当前正在执行任务的站台 @@ -174,11 +176,10 @@ public class WorkServiceImplements implements IWorkService { workDoingStations.add(workStation); } try { - // TODO 分配任务 // 查找当前站台未开始的工作流 List currentWorkFlowList = workFlowService.list(new LambdaQueryWrapper() .eq(WorkFlow::getWorkStation, workStation) - .eq(WorkFlow::getWorkStatus, 0)); + .ne(WorkFlow::getWorkStatus, 2)); // 没有可做的任务 if (currentWorkFlowList == null || currentWorkFlowList.isEmpty()) { return; @@ -188,9 +189,33 @@ public class WorkServiceImplements implements IWorkService { .eq(GoodsToStation::getWorkStation, workStation) .eq(GoodsToStation::getDistributeStatus, 0) .or().eq(GoodsToStation::getDistributeStatus, 1)); + if (goodsToStationList == null || goodsToStationList.isEmpty()) { + // 更新工作流状态-->完成 + List workFlowIds = currentWorkFlowList.stream().map(WorkFlow::getWorkFlowId).distinct().toList(); + workFlowService.update(new LambdaUpdateWrapper() + .set(WorkFlow::getWorkStatus, 2) + .set(WorkFlow::getFinishTime, LocalDateTime.now()) + .set(WorkFlow::getOpUser, "库存等原因,系统自动完成") + .in(WorkFlow::getWorkFlowId, workFlowIds) + .ne(WorkFlow::getWorkStatus, 2)); + return; + } for (GoodsToStation goodsToStation : goodsToStationList) { // 当前物料当前站台需求数量 BigDecimal needNum = goodsToStation.getTotalNum().subtract(goodsToStation.getDistributedNum()); + if (needNum.compareTo(BigDecimal.ZERO) == 0) { + // 需求数量为0 + continue; + } + // 判断实际库存是否充足 + List stockList = stockService.list(new LambdaQueryWrapper() + .eq(Stock::getStockStatus, StockStatus.OK.getCode()) + .apply("goods_related ->> '$.goodsId' = {0}", goodsToStation.getGoodsId()) + .apply("goods_related ->> '$.remainNum' > 0", goodsToStation.getGoodsId())); + if (stockList == null || stockList.isEmpty()) { + goodsToStation.setDistributeStatus(3); + continue; + } // 判断当前物料是否在流转中 needNum = wmsTaskService.callGoods(goodsToStation.getGoodsId(), needNum, workStation); // 判断此时需求数量是否为0 @@ -201,7 +226,7 @@ public class WorkServiceImplements implements IWorkService { needNum = wmsTaskService.callStocks(goodsToStation.getGoodsId(), needNum, workStation); if (needNum.compareTo(BigDecimal.ZERO) > 0) { // 分配完成但库存缺料 - goodsToStation.setDistributeStatus(3); + goodsToStation.setDistributeStatus(1); } } // 更新已分配数量 @@ -211,6 +236,8 @@ public class WorkServiceImplements implements IWorkService { // 更新工作流状态 List workFlowIds = currentWorkFlowList.stream().map(WorkFlow::getWorkFlowId).distinct().toList(); List orderIds = currentWorkFlowList.stream().map(WorkFlow::getOrderId).distinct().toList(); + List goodsIds = currentWorkFlowList.stream().map(WorkFlow::getGoodsId).distinct().toList(); + List smallBoxes = currentWorkFlowList.stream().map(WorkFlow::getWorkCenter).distinct().toList(); workFlowService.update(new LambdaUpdateWrapper() .set(WorkFlow::getWorkStatus, 1) .in(WorkFlow::getWorkFlowId, workFlowIds) @@ -219,6 +246,8 @@ public class WorkServiceImplements implements IWorkService { kateOrdersService.update(new LambdaUpdateWrapper() .set(KateOrders::getOrderStatus, 2) .in(KateOrders::getOrderId, orderIds) + .in(KateOrders::getGoodsId, goodsIds) + .in(KateOrders::getSupplyArea, smallBoxes) .eq(KateOrders::getOrderStatus, 1)); } catch (Exception e) { logger.error("执行站台:{}工作发生异常:{}", workStation, convertJsonString(e));