From 1e14df84554a455512ce868160fb883c3ec349e4 Mon Sep 17 00:00:00 2001 From: liangzhou <594755172@qq.com> Date: Fri, 9 Aug 2024 15:44:51 +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.=E5=A2=9E=E5=8A=A0=E6=A0=87=E7=AD=BE=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wms/controller/StockController.java | 2 +- .../com/wms/controller/TaskController.java | 188 +++++++++++++++++- .../com/wms/controller/UserController.java | 1 - .../wms/entity/app/request/PrintRequest.java | 21 ++ .../com/wms/entity/app/vo/BoxPrintData.java | 54 +++++ .../java/com/wms/entity/app/vo/StockVo.java | 40 ++-- .../UserServiceImplements.java | 8 +- src/main/resources/application.yml | 2 +- 8 files changed, 285 insertions(+), 31 deletions(-) create mode 100644 src/main/java/com/wms/entity/app/request/PrintRequest.java create mode 100644 src/main/java/com/wms/entity/app/vo/BoxPrintData.java diff --git a/src/main/java/com/wms/controller/StockController.java b/src/main/java/com/wms/controller/StockController.java index 446abfa..f298e17 100644 --- a/src/main/java/com/wms/controller/StockController.java +++ b/src/main/java/com/wms/controller/StockController.java @@ -72,7 +72,7 @@ public class StockController { .apply(StringUtils.isNotEmpty(stockQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')", stockQuery.getGoodsId()) .apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')", stockQuery.getGoodsName())); - PageDto pageDto = PageDto.of(stockPage, stock -> BeanUtil.copyProperties(stock, StockVo.class)); + PageDto pageDto = PageDto.of(stockPage, StockVo::of); response.setCode(ResponseCode.OK.getCode()); response.setMessage("查询库存成功"); response.setReturnData(pageDto); diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index 8744652..d0fa97b 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -10,6 +10,7 @@ import com.wms.constants.enums.*; import com.wms.entity.app.*; import com.wms.entity.app.dto.PageDto; import com.wms.entity.app.dto.extend.StockDetailInfo; +import com.wms.entity.app.dto.extend.TaskDetailInfo; import com.wms.entity.app.request.*; import com.wms.entity.app.vo.StandPickFinishVo; import com.wms.entity.app.vo.StandPickVo; @@ -297,7 +298,7 @@ public class TaskController { // 如果是入库 if (inTask.getTaskId().startsWith("RK")) { // 添加库存 - if (inTask.getGoodsRelated() != null && !inTask.getGoodsRelated().getGoodsId().isEmpty()) { + if (inTask.getGoodsRelated() != null && StringUtils.isNotEmpty(inTask.getGoodsRelated().getGoodsId())) { // 查询这个物料有没有库存 // TODO 查询条件根据项目要求调整 Stock existStock = stockService.getOne(new LambdaQueryWrapper() @@ -330,8 +331,7 @@ public class TaskController { } // 更新库存状态 List backStocks = stockService.list(new LambdaQueryWrapper() - .eq(Stock::getVehicleId, inTask.getVehicleId()) - .ne(Stock::getStockStatus, StockStatus.OK.getCode())); + .eq(Stock::getVehicleId, inTask.getVehicleId())); backStocks.forEach(stock -> { if (stock.getGoodsRelated().getRemainNum().compareTo(BigDecimal.ZERO) == 0) { // 库存数量为0时要删除当前库存 @@ -1894,8 +1894,45 @@ public class TaskController { } } + /** + * 请求打印标签的数据 + * + * @param printRequest 请求信息 + * @return 结果 + */ + @PostMapping("/requestPrintData") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "请求打印标签的数据", logMethod = "requestPrintData") + public String requestPrintData(@RequestBody PrintRequest printRequest) { + logger.info("请求打印标签的数据:{},ip地址:{}", convertJsonString(printRequest), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("可以回库。"); + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("处理回库请求异常,{}", convertJsonString(e)); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("处理回库请求异常。"); + return convertJsonString(response); + } + } + + + + + + + + + + + /// 下面的代码8月10号之后需要删除 /** * 特殊用法---请求拣选 * @@ -1980,7 +2017,7 @@ public class TaskController { tempOutTask.setTaskStatus(WmsTaskStatus.NEW.getCode()); tempOutTask.setTaskPriority(1); tempOutTask.setVehicleId(tempStock.getVehicleId()); - tempOutTask.setUserName("WMS_AUTO"); + tempOutTask.setUserName(taskOutRequest.getUserName()); tempOutTask.setOrigin(tempStock.getLocationId()); tempOutTask.setDestination(""); tempOutTask.setCreateTime(LocalDateTime.now()); @@ -2007,13 +2044,23 @@ public class TaskController { } } else { List vehicles = vehicleService.list(new LambdaQueryWrapper() + .eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode()) .eq(StringUtils.isNotEmpty(taskOutRequest.getVehicleId()), Vehicle::getVehicleId, taskOutRequest.getVehicleId())); + if (taskOutRequest.getGoodsNum() == null || taskOutRequest.getGoodsNum().compareTo(BigDecimal.ZERO) <= 0) { + logger.error("缺少数量!"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("缺少数量!"); + return convertJsonString(response); + } BigDecimal needNum = taskOutRequest.getGoodsNum(); // 出库任务列表 List outTasks = new ArrayList<>(); // 载具列表 List vehicleIds = new ArrayList<>(); for (Vehicle vehicle : vehicles) { + if (needNum.compareTo(BigDecimal.ZERO) <= 0) { + break; + } if (vehicleIds.contains(vehicle.getVehicleId())) { continue; } @@ -2025,7 +2072,7 @@ public class TaskController { tempOutTask.setTaskStatus(WmsTaskStatus.NEW.getCode()); tempOutTask.setTaskPriority(1); tempOutTask.setVehicleId(vehicle.getVehicleId()); - tempOutTask.setUserName("WMS_AUTO"); + tempOutTask.setUserName(taskOutRequest.getUserName()); tempOutTask.setOrigin(vehicle.getCurrentLocation()); tempOutTask.setDestination(""); tempOutTask.setCreateTime(LocalDateTime.now()); @@ -2034,6 +2081,7 @@ public class TaskController { outTasks.add(tempOutTask); // 添加载具列表 vehicleIds.add(vehicle.getVehicleId()); + needNum = needNum.subtract(BigDecimal.ONE); } // 保存出库任务至任务表 taskService.saveBatch(outTasks); @@ -2086,7 +2134,6 @@ public class TaskController { pickTaskService.saveBatch(pickTasks); } - /** * 特殊用法---请求回库 * @@ -2156,6 +2203,7 @@ public class TaskController { Stock newStock = new Stock(); newStock.setStockId(generateId("ST_")); newStock.setVehicleId(pickTask.getVehicleId()); + newStock.setLocationId(""); newStock.setNoUseDays(0); newStock.setIsInventory(0); newStock.setCreateTime(LocalDateTime.now()); @@ -2197,4 +2245,132 @@ public class TaskController { return convertJsonString(response); } } + + /** + * 特殊用法---请求入库 + * + * @param taskOutRequest 出库任务 + * @return 结果 + */ + @PostMapping("/requestInTest") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "特殊用法---请求入库", logMethod = "requestInTest") + public String requestInTest(@RequestBody TaskOutRequest taskOutRequest) { + logger.info("接收到特殊用法---请求入库:{},ip地址:{}", convertJsonString(taskOutRequest), HttpUtils.getIpAddr(servletRequest)); + // 创建响应信息 + ResponseEntity response = new ResponseEntity(); + try { + // 获取站台号 + String standId = ""; + if (StringUtils.isNotEmpty(taskOutRequest.getPickStand())) { + // 站台号从请求参数中获取 + standId = taskOutRequest.getPickStand(); + } else { + // 站台号从ip获取 + Stand standOfIp = standService.getOne(new LambdaQueryWrapper() + .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) + .eq(Stand::getStandType, 2)); + if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) { + standId = standOfIp.getStandId(); + } + } + if (StringUtils.isEmpty(standId)) { + logger.error("请求参数缺少站台号。"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("请求参数缺少站台号。"); + return convertJsonString(response); + } + if (StringUtils.isEmpty(taskOutRequest.getVehicleId())) { + logger.error("缺少箱号。"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("缺少箱号。"); + return convertJsonString(response); + } + // 查找当前箱子是否有其他等待入库的箱子 + Task sameVehicleTempTask = taskService.getOne(new LambdaQueryWrapper() + .eq(Task::getVehicleId, taskOutRequest.getVehicleId()) + .eq(Task::getTaskStatus, WmsTaskStatus.TEMP.getCode()) + .eq(Task::getTaskType, TaskType.IN.getCode()) + .last("limit 1")); + // 生成入库任务 + if (sameVehicleTempTask != null) {// 有相同的箱子任务 + if (StringUtils.isEmpty(taskOutRequest.getGoodsId())) {// 空托入库 + logger.error("请勿重复入空箱!"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("请勿重复入空箱!"); + return convertJsonString(response); + } else {// 带料入库 + String taskGroupId = sameVehicleTempTask.getTaskGroup(); + Task tempInTask = new Task(); + tempInTask.setTaskId(generateId("RK_")); + tempInTask.setTaskType(TaskType.IN.getCode()); + tempInTask.setTaskStatus(WmsTaskStatus.TEMP.getCode()); + tempInTask.setTaskGroup(taskGroupId); + tempInTask.setTaskPriority(1); + tempInTask.setVehicleId(taskOutRequest.getVehicleId()); + tempInTask.setVehicleSize(1); + tempInTask.setWeight(BigDecimal.ONE); + tempInTask.setCreateTime(LocalDateTime.now()); + tempInTask.setUserName(taskOutRequest.getUserName()); + // 物料相关信息 + TaskDetailInfo goodsRelatedInfo = new TaskDetailInfo(); + goodsRelatedInfo.setGoodsId(taskOutRequest.getGoodsId()); + goodsRelatedInfo.setGoodsName(taskOutRequest.getGoodsId()); + goodsRelatedInfo.setOpNum(taskOutRequest.getGoodsNum()); + goodsRelatedInfo.setOriginNum(BigDecimal.ZERO); + tempInTask.setGoodsRelated(goodsRelatedInfo); + taskService.save(tempInTask); + } + } else {// 没有这个箱子的任务 + if (StringUtils.isEmpty(taskOutRequest.getGoodsId())) {// 空托入库 + Task tempInTask = new Task(); + tempInTask.setTaskId(generateId("RK_")); + tempInTask.setTaskType(TaskType.IN.getCode()); + tempInTask.setTaskStatus(WmsTaskStatus.TEMP.getCode()); + tempInTask.setTaskGroup(generateId("")); + tempInTask.setTaskPriority(1); + tempInTask.setVehicleId(taskOutRequest.getVehicleId()); + tempInTask.setVehicleSize(1); + tempInTask.setWeight(BigDecimal.ONE); + tempInTask.setCreateTime(LocalDateTime.now()); + tempInTask.setUserName(taskOutRequest.getUserName()); + taskService.save(tempInTask); + } else {// 带料入库 + Task tempInTask = new Task(); + tempInTask.setTaskId(generateId("RK_")); + tempInTask.setTaskType(TaskType.IN.getCode()); + tempInTask.setTaskStatus(WmsTaskStatus.TEMP.getCode()); + tempInTask.setTaskGroup(generateId("")); + tempInTask.setTaskPriority(1); + tempInTask.setVehicleId(taskOutRequest.getVehicleId()); + tempInTask.setVehicleSize(1); + tempInTask.setWeight(BigDecimal.ONE); + tempInTask.setCreateTime(LocalDateTime.now()); + tempInTask.setUserName(taskOutRequest.getUserName()); + // 物料相关信息 + TaskDetailInfo goodsRelatedInfo = new TaskDetailInfo(); + goodsRelatedInfo.setGoodsId(taskOutRequest.getGoodsId()); + goodsRelatedInfo.setGoodsName(taskOutRequest.getGoodsId()); + goodsRelatedInfo.setOpNum(taskOutRequest.getGoodsNum()); + goodsRelatedInfo.setOriginNum(BigDecimal.ZERO); + tempInTask.setGoodsRelated(goodsRelatedInfo); + taskService.save(tempInTask); + } + } + + logger.info("请求入库成功!"); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("请求入库成功"); + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("发生异常:{}", convertJsonString(e)); + // 返回其他异常 + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("发生异常"); + return convertJsonString(response); + } + } } \ No newline at end of file diff --git a/src/main/java/com/wms/controller/UserController.java b/src/main/java/com/wms/controller/UserController.java index b7a2f27..c9546b1 100644 --- a/src/main/java/com/wms/controller/UserController.java +++ b/src/main/java/com/wms/controller/UserController.java @@ -1,7 +1,6 @@ package com.wms.controller; import cn.hutool.core.bean.BeanUtil; -import com.alibaba.fastjson2.JSON; import com.wms.annotation.MyLog; import com.wms.constants.enums.ResponseCode; import com.wms.entity.app.dto.MenuDto; diff --git a/src/main/java/com/wms/entity/app/request/PrintRequest.java b/src/main/java/com/wms/entity/app/request/PrintRequest.java new file mode 100644 index 0000000..8860050 --- /dev/null +++ b/src/main/java/com/wms/entity/app/request/PrintRequest.java @@ -0,0 +1,21 @@ +package com.wms.entity.app.request; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 打印标签数据请求 + */ +@Data +public class PrintRequest { + /** + * 站台号 + */ + @JsonProperty("standId") + private String standId; + /** + * 用户名 + */ + @JsonProperty("userName") + private String userName; +} diff --git a/src/main/java/com/wms/entity/app/vo/BoxPrintData.java b/src/main/java/com/wms/entity/app/vo/BoxPrintData.java new file mode 100644 index 0000000..a455849 --- /dev/null +++ b/src/main/java/com/wms/entity/app/vo/BoxPrintData.java @@ -0,0 +1,54 @@ +package com.wms.entity.app.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 打印标签数据 + */ +@Data +public class BoxPrintData { + /** + * 顺序号 + */ + @JsonProperty("sequenceNo") + private Integer sequenceNo; + /** + * 机器序列号 + */ + @JsonProperty("machineNo") + private String machineNo; + /** + * 工单 + */ + @JsonProperty("workOrder") + private String workOrder; + /** + * 小工位 + */ + @JsonProperty("smallWorkCenter") + private String smallWorkCenter; + /** + * 料号数量 + */ + @JsonProperty("goodsCount") + private Integer goodsCount; + /** + * 零件数量 + */ + @JsonProperty("goodsNumCount") + private BigDecimal goodsNumCount; + /** + * 配料人员 + */ + @JsonProperty("opUser") + private String opUser; + /** + * 配料日期 + */ + @JsonProperty("opTime") + private LocalDateTime opTime; +} diff --git a/src/main/java/com/wms/entity/app/vo/StockVo.java b/src/main/java/com/wms/entity/app/vo/StockVo.java index 54aab96..9d9e44c 100644 --- a/src/main/java/com/wms/entity/app/vo/StockVo.java +++ b/src/main/java/com/wms/entity/app/vo/StockVo.java @@ -100,28 +100,28 @@ public class StockVo { private BigDecimal totalNum; /** - * 从数据库实体转换为excel对象 + * 从数据库实体转换为前端显示 * @param stockPo 数据库实体 * @return excel对象 */ - public static StockExcelVo of(Stock stockPo) { - StockExcelVo stockExcelVo = new StockExcelVo(); - stockExcelVo.setStockId(stockPo.getStockId()); - stockExcelVo.setLocationId(stockPo.getLocationId()); - stockExcelVo.setVehicleId(stockPo.getVehicleId()); - stockExcelVo.setWeight(stockPo.getWeight()); - stockExcelVo.setStockStatus(stockPo.getStockStatus()); - stockExcelVo.setCreateTime(stockPo.getCreateTime()); - stockExcelVo.setLastUpdateTime(stockPo.getLastUpdateTime()); - stockExcelVo.setLastUpdateUser(stockPo.getLastUpdateUser()); - stockExcelVo.setIsInventory(stockPo.getIsInventory()); - stockExcelVo.setInventoryTaskId(stockPo.getInventoryTaskId()); - stockExcelVo.setNoUseDays(stockPo.getNoUseDays()); - stockExcelVo.setGoodsId(stockPo.getGoodsRelated().getGoodsId()); - stockExcelVo.setGoodsName(stockPo.getGoodsRelated().getGoodsName()); - stockExcelVo.setGoodsStatus(stockPo.getGoodsRelated().getGoodsStatus()); - stockExcelVo.setRemainNum(stockPo.getGoodsRelated().getRemainNum()); - stockExcelVo.setTotalNum(stockPo.getGoodsRelated().getTotalNum()); - return stockExcelVo; + public static StockVo of(Stock stockPo) { + StockVo stockVo = new StockVo(); + stockVo.setStockId(stockPo.getStockId()); + stockVo.setLocationId(stockPo.getLocationId()); + stockVo.setVehicleId(stockPo.getVehicleId()); + stockVo.setWeight(stockPo.getWeight()); + stockVo.setStockStatus(stockPo.getStockStatus()); + stockVo.setCreateTime(stockPo.getCreateTime()); + stockVo.setLastUpdateTime(stockPo.getLastUpdateTime()); + stockVo.setLastUpdateUser(stockPo.getLastUpdateUser()); + stockVo.setIsInventory(stockPo.getIsInventory()); + stockVo.setInventoryTaskId(stockPo.getInventoryTaskId()); + stockVo.setNoUseDays(stockPo.getNoUseDays()); + stockVo.setGoodsId(stockPo.getGoodsRelated().getGoodsId()); + stockVo.setGoodsName(stockPo.getGoodsRelated().getGoodsName()); + stockVo.setGoodsStatus(stockPo.getGoodsRelated().getGoodsStatus()); + stockVo.setRemainNum(stockPo.getGoodsRelated().getRemainNum()); + stockVo.setTotalNum(stockPo.getGoodsRelated().getTotalNum()); + return stockVo; } } diff --git a/src/main/java/com/wms/service/serviceImplements/UserServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/UserServiceImplements.java index 63ca061..0c1bb88 100644 --- a/src/main/java/com/wms/service/serviceImplements/UserServiceImplements.java +++ b/src/main/java/com/wms/service/serviceImplements/UserServiceImplements.java @@ -7,10 +7,13 @@ import com.wms.entity.app.dto.UserDto; import com.wms.entity.table.User; import com.wms.mapper.UserMapper; import com.wms.service.UserService; +import com.wms.utils.StringUtils; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + @Service @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class UserServiceImplements extends ServiceImpl implements UserService { @@ -20,7 +23,8 @@ public class UserServiceImplements extends ServiceImpl impleme public UserDto validateUser(User user, boolean withAuth) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .eq(User::getLoginAccount, user.getLoginAccount()) - .eq(withAuth, User::getLoginPassword, user.getLoginPassword()); - return BeanUtil.copyProperties(super.getOne(queryWrapper), UserDto.class); + .or().eq(withAuth, User::getLoginPassword, user.getLoginPassword()) + .or().eq(StringUtils.isEmpty(user.getLoginPassword()), User::getLoginAccount, null); + return BeanUtil.copyProperties(userMapper.selectOne(queryWrapper), UserDto.class); } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1822891..dbba78b 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -17,7 +17,7 @@ spring: # username: coder # password: coder # driver-class-name: com.mysql.cj.jdbc.Driver - # 本地环境 +# # 本地环境 url: jdbc:mysql://localhost:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true username: developer password: developer