diff --git a/src/main/java/com/wms/controller/StockController.java b/src/main/java/com/wms/controller/StockController.java index 4ed3e91..446abfa 100644 --- a/src/main/java/com/wms/controller/StockController.java +++ b/src/main/java/com/wms/controller/StockController.java @@ -70,7 +70,7 @@ public class StockController { .eq(StringUtils.isNotEmpty(stockQuery.getLocationId()), Stock::getLocationId, stockQuery.getLocationId()) .eq(stockQuery.getStockStatus() != null, Stock::getStockStatus, stockQuery.getStockStatus()) .apply(StringUtils.isNotEmpty(stockQuery.getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')", stockQuery.getGoodsId()) - .apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')", stockQuery.getGoodsName())); + .apply(StringUtils.isNotEmpty(stockQuery.getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')", stockQuery.getGoodsName())); PageDto pageDto = PageDto.of(stockPage, stock -> BeanUtil.copyProperties(stock, StockVo.class)); response.setCode(ResponseCode.OK.getCode()); diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index 2b6df8c..e513370 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -1,7 +1,6 @@ package com.wms.controller; import cn.hutool.core.bean.BeanUtil; -import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,7 +12,9 @@ import com.wms.entity.app.dto.extend.StockDetailInfo; import com.wms.entity.app.request.TaskInRequest; import com.wms.entity.app.request.TaskOutRequest; import com.wms.entity.app.request.TaskQuery; +import com.wms.entity.app.request.WorkQuery; import com.wms.entity.app.vo.TaskVO; +import com.wms.entity.app.wcs.WcsBoxArriveRequest; import com.wms.entity.app.wcs.WcsTaskResultRequest; import com.wms.entity.app.wcs.WcsVehicleInRequest; import com.wms.entity.table.*; @@ -34,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; @@ -88,6 +90,14 @@ public class TaskController { * 验证服务 */ private final IValidateService validateService; + /** + * 站台服务 + */ + private final StandService standService; + /** + * 工作流服务 + */ + private final WorkFlowService workFlowService; /** * 接收入库任务请求 @@ -100,7 +110,7 @@ public class TaskController { @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @MyLog(logTitle = "入库请求", logMethod = "requestIn") public String receiveTaskInRequest(@RequestBody TaskInRequest taskInRequest) { - logger.info("接收到入库请求:{},ip地址:{}", JSON.toJSONString(taskInRequest), HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到入库请求:{},ip地址:{}", convertJsonString(taskInRequest), HttpUtils.getIpAddr(servletRequest)); // 创建响应信息 ResponseEntity response = new ResponseEntity(); try { @@ -153,7 +163,7 @@ public class TaskController { @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @MyLog(logTitle = "出库请求", logMethod = "requestOut") public String receiveTaskOutRequest(@RequestBody TaskOutRequest taskOutRequest) { - logger.info("接收到出库请求:{},ip地址:{}", JSON.toJSONString(taskOutRequest), HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到出库请求:{},ip地址:{}", convertJsonString(taskOutRequest), HttpUtils.getIpAddr(servletRequest)); // 创建响应信息 ResponseEntity response = new ResponseEntity(); try { @@ -205,7 +215,7 @@ public class TaskController { @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @MyLog(logTitle = "Wcs任务反馈", logMethod = "sendTaskResult") public String receiveTaskResult(@RequestBody WcsTaskResultRequest wcsTaskResultRequest) { - logger.info("接收到任务反馈:{},ip地址:{}", JSON.toJSONString(wcsTaskResultRequest), HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到任务反馈:{},ip地址:{}", convertJsonString(wcsTaskResultRequest), HttpUtils.getIpAddr(servletRequest)); // 创建响应信息 ResponseEntity response = new ResponseEntity(); try { @@ -451,7 +461,7 @@ public class TaskController { @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @MyLog(logTitle = "Wcs请求载具入库", logMethod = "WcsVehicleIn") public String WcsVehicleInRequest(@RequestBody WcsVehicleInRequest wcsVehicleInRequest) { - logger.info("接收到Wcs请求载具入库:{},ip地址:{}", JSON.toJSONString(wcsVehicleInRequest), HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到Wcs请求载具入库:{},ip地址:{}", convertJsonString(wcsVehicleInRequest), HttpUtils.getIpAddr(servletRequest)); // 创建响应信息 ResponseEntity response = new ResponseEntity(); try { @@ -536,7 +546,7 @@ public class TaskController { @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @MyLog(logTitle = "Wcs反馈重复入库问题", logMethod = "duplicateLocationOccurred") public String ResolveDuplicateLocation(@RequestBody WcsTaskResultRequest duplicateLocationRequest) { - logger.info("接收到Wcs反馈重复入库问题:{},ip地址:{}", JSON.toJSONString(duplicateLocationRequest), HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到Wcs反馈重复入库问题:{},ip地址:{}", convertJsonString(duplicateLocationRequest), HttpUtils.getIpAddr(servletRequest)); // 创建响应信息 ResponseEntity response = new ResponseEntity(); try { @@ -647,7 +657,7 @@ public class TaskController { } /** - * 根据 + * 根据请求参数查询任务信息 */ @PostMapping("/getTasks") @ResponseBody @@ -677,4 +687,151 @@ public class TaskController { return convertJsonString(response); } } + + /** + * WCS向WMS上报箱子到达 + * @param boxArriveRequest 请求参数 + * @return 结果 + */ + @PostMapping("/boxArrive") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "Wcs上报箱子到达", logMethod = "boxArrive") + public String boxArrive(@RequestBody WcsBoxArriveRequest boxArriveRequest) { + logger.info("接收到Wcs上报箱子到达:{},ip地址:{}", convertJsonString(boxArriveRequest), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + // 校验请求参数 + String validateInfo = validateService.validateBoxArriveRequest(boxArriveRequest); + if (!Objects.equals(validateInfo, "")) {// 验证未通过 + logger.error("Wcs上报箱子到达验证错误:{}", validateInfo); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage(validateInfo); + return convertJsonString(response); + } + // 查找到对应的拣选任务 + PickTask pickTask = pickTaskService.getOne(new LambdaQueryWrapper() + .eq(PickTask::getVehicleId, boxArriveRequest.getVehicleNo()) + .eq(PickTask::getStandId, boxArriveRequest.getLocation())); + if (pickTask == null || StringUtils.isEmpty(pickTask.getPickTaskId())) { + logger.error("拣选任务查询失败"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("拣选任务查询失败"); + return convertJsonString(response); + } + pickTask.setPickStatus(2); + pickTask.setLastUpdateTime(LocalDateTime.now()); + // 更新为完成 + pickTaskService.updateById(pickTask); + + 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); + } + } + + /** + * 根据站台号以及料号获取工作信息给前台界面展示 + * + * @param workQuery 查询参数 + * @return 生成的vo信息 + */ + @PostMapping("/getWorkByStandAndGoods") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "获取备料工作信息", logMethod = "boxArrive") + public String getWorkByStandAndGoods(@RequestBody WorkQuery workQuery) { + logger.info("接收到获取备料工作信息请求:{},ip地址:{}", convertJsonString(workQuery), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + String validateInfo = validateService.validateGetWorkVoRequest(workQuery); + if (!Objects.equals(validateInfo, "")) { + logger.error("获取备料工作请求参数验证错误:{}", validateInfo); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage(validateInfo); + return convertJsonString(response); + } + String standId = ""; + if (StringUtils.isNotEmpty(workQuery.getStandId())) { + // 站台号从请求参数中获取 + standId = workQuery.getStandId(); + } else { + // 站台号从ip获取 + Stand standOfIp = standService.getOne(new LambdaQueryWrapper() + .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) + .eq(Stand::getStandType, 1)); + 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); + } + // 根据站台号查找对应的载具号 + PickTask pickTask = pickTaskService.getOne(new LambdaQueryWrapper() + .eq(PickTask::getStandId, standId) + .eq(PickTask::getPickStatus, 2)); + if (pickTask == null || StringUtils.isEmpty(pickTask.getVehicleId())) { + logger.error("当前站台查不到正在拣选的箱子"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("当前站台查不到正在拣选的箱子"); + return convertJsonString(response); + } + String vehicleId = pickTask.getVehicleId(); + // 查找库存信息 + Stock stock = stockService.getOne(new LambdaQueryWrapper() + .eq(Stock::getVehicleId, vehicleId) + .apply("goods_related ->> '$.goodsId' = {0}", workQuery.getGoodsId())); + if (stock == null || StringUtils.isEmpty(stock.getStockId()) || stock.getGoodsRelated() == null) { + logger.error("请求料号:{}与正在拣选的箱子:{}无对应关系", workQuery.getGoodsId(), vehicleId); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("请求料号:" + workQuery.getGoodsId() + "与正在拣选的箱子:" + vehicleId + "无对应关系"); + return convertJsonString(response); + } + // 查找工作流 + List workFlows = workFlowService.list(new LambdaQueryWrapper() + .eq(WorkFlow::getWorkStation, standId) + .eq(WorkFlow::getGoodsId, workQuery.getGoodsId()) + .eq(WorkFlow::getWorkStatus, 1) + .ne(WorkFlow::getLightStatus, 2));// 未拍灯 + if (workFlows == null || workFlows.isEmpty()) { + logger.error("当前站台当前物料查询不到对应的工作"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("当前站台当前物料查询不到对应的工作"); + return convertJsonString(response); + } + // 亮灯 + BigDecimal realNum = stock.getGoodsRelated().getRemainNum(); + for (WorkFlow tempWork : workFlows) { + // 查找对应的标签配置 + + } + + // 发送亮灯 + // 返回VO实体 + + + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("查询成功"); + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("查询任务发生异常"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("查询任务发生异常"); + return convertJsonString(response); + } + } } \ No newline at end of file diff --git a/src/main/java/com/wms/entity/app/request/WorkQuery.java b/src/main/java/com/wms/entity/app/request/WorkQuery.java new file mode 100644 index 0000000..113c418 --- /dev/null +++ b/src/main/java/com/wms/entity/app/request/WorkQuery.java @@ -0,0 +1,18 @@ +package com.wms.entity.app.request; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class WorkQuery { + /** + * 站台号 + */ + @JsonProperty("standId") + private String standId; + /** + * 料号 + */ + @JsonProperty("goodsId") + private String goodsId; +} diff --git a/src/main/java/com/wms/entity/table/Goods.java b/src/main/java/com/wms/entity/table/Goods.java index 2439d8f..2a7d756 100644 --- a/src/main/java/com/wms/entity/table/Goods.java +++ b/src/main/java/com/wms/entity/table/Goods.java @@ -93,7 +93,7 @@ public class Goods { * 看板的数量 */ @TableField("kanban_num") - private Integer kanbanNum; + private BigDecimal kanbanNum; /** * 看板详细信息 */ diff --git a/src/main/java/com/wms/entity/table/GoodsToStation.java b/src/main/java/com/wms/entity/table/GoodsToStation.java index eb3a05e..bee55b9 100644 --- a/src/main/java/com/wms/entity/table/GoodsToStation.java +++ b/src/main/java/com/wms/entity/table/GoodsToStation.java @@ -1,6 +1,7 @@ package com.wms.entity.table; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -15,7 +16,7 @@ public class GoodsToStation { /** * 主键 */ - @TableField("config_id") + @TableId("config_id") private String configId; /** * 工作站台 diff --git a/src/main/java/com/wms/entity/table/KateDBS.java b/src/main/java/com/wms/entity/table/KateDBS.java index 70f3344..6d3bb05 100644 --- a/src/main/java/com/wms/entity/table/KateDBS.java +++ b/src/main/java/com/wms/entity/table/KateDBS.java @@ -39,7 +39,7 @@ public class KateDBS { * 1:已开始未完成 * 2:已完成 */ - @TableField("last_update_time") + @TableField("dbs_status") private Integer dbsStatus; /** * 最近更新时间 diff --git a/src/main/java/com/wms/entity/table/KateDBSHistory.java b/src/main/java/com/wms/entity/table/KateDBSHistory.java index 8439b89..c70b077 100644 --- a/src/main/java/com/wms/entity/table/KateDBSHistory.java +++ b/src/main/java/com/wms/entity/table/KateDBSHistory.java @@ -39,7 +39,7 @@ public class KateDBSHistory { * 1:已开始未完成 * 2:已完成 */ - @TableField("last_update_time") + @TableField("dbs_status") private Integer dbsStatus; /** * 最近更新时间 diff --git a/src/main/java/com/wms/entity/table/KateDBSLast.java b/src/main/java/com/wms/entity/table/KateDBSLast.java index e3de24c..cc73034 100644 --- a/src/main/java/com/wms/entity/table/KateDBSLast.java +++ b/src/main/java/com/wms/entity/table/KateDBSLast.java @@ -39,7 +39,7 @@ public class KateDBSLast { * 1:已开始未完成 * 2:已完成 */ - @TableField("last_update_time") + @TableField("dbs_status") private Integer dbsStatus; /** * 最近更新时间 diff --git a/src/main/java/com/wms/entity/table/PickTaskRecord.java b/src/main/java/com/wms/entity/table/PickTaskRecord.java index 2b61035..086d13d 100644 --- a/src/main/java/com/wms/entity/table/PickTaskRecord.java +++ b/src/main/java/com/wms/entity/table/PickTaskRecord.java @@ -1,4 +1,45 @@ package com.wms.entity.table; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 拣选任务记录 + */ +@Data +@TableName(value = "tbl_app_pick_task_bak", autoResultMap = true) public class PickTaskRecord { + /** + * 拣选任务号 + */ + @TableId("pick_task_id") + private String pickTaskId; + /** + * 载具号 + */ + @TableField("vehicle_id") + private String vehicleId; + /** + * 站台号 + */ + @TableField("stand_id") + private String standId; + /** + * 拣选任务状态 + * -1:暂时不可发送 + * 0:初始化 + * 1:已发送 + * 2:已完成 + */ + @TableField("pick_status") + private Integer pickStatus; + /** + * 最近更新时间 + */ + @TableField("last_update_time") + private LocalDateTime lastUpdateTime; } diff --git a/src/main/java/com/wms/entity/table/WorkStationConfig.java b/src/main/java/com/wms/entity/table/WorkStationConfig.java index 07bcc46..730c5d2 100644 --- a/src/main/java/com/wms/entity/table/WorkStationConfig.java +++ b/src/main/java/com/wms/entity/table/WorkStationConfig.java @@ -24,7 +24,7 @@ public class WorkStationConfig { @TableField("work_station") private String workStation; /** - * 小盒子---对面工单表里面的工位 + * 小盒子---对面工单表里面的小工位 */ @TableField("small_box") private String smallBox; diff --git a/src/main/java/com/wms/service/business/IValidateService.java b/src/main/java/com/wms/service/business/IValidateService.java index 84c148b..9a384dd 100644 --- a/src/main/java/com/wms/service/business/IValidateService.java +++ b/src/main/java/com/wms/service/business/IValidateService.java @@ -2,6 +2,8 @@ package com.wms.service.business; import com.wms.entity.app.request.TaskInRequest; import com.wms.entity.app.request.TaskOutRequest; +import com.wms.entity.app.request.WorkQuery; +import com.wms.entity.app.wcs.WcsBoxArriveRequest; import com.wms.entity.app.wcs.WcsTaskResultRequest; import com.wms.entity.app.wcs.WcsVehicleInRequest; @@ -43,4 +45,18 @@ public interface IValidateService { * @return 验证结果 */ String validateDuplicateLocationRequest(WcsTaskResultRequest duplicateLocationRequest); + + /** + * 验证Wcs上报箱子到达请求 + * @param boxArriveRequest Wcs上报箱子到达请求 + * @return 验证结果 + */ + String validateBoxArriveRequest(WcsBoxArriveRequest boxArriveRequest); + + /** + * 验证获取工作信息请求 + * @param workQuery 请求参数 + * @return 验证结果 + */ + String validateGetWorkVoRequest(WorkQuery workQuery); } diff --git a/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java index fbbeafe..ecfb84c 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java @@ -5,6 +5,8 @@ import com.wms.constants.enums.*; import com.wms.entity.app.request.GoodsInRequest; import com.wms.entity.app.request.TaskInRequest; import com.wms.entity.app.request.TaskOutRequest; +import com.wms.entity.app.request.WorkQuery; +import com.wms.entity.app.wcs.WcsBoxArriveRequest; import com.wms.entity.app.wcs.WcsTaskResultRequest; import com.wms.entity.app.wcs.WcsVehicleInRequest; import com.wms.entity.table.Location; @@ -271,4 +273,32 @@ public class ValidateServiceImplements implements IValidateService { return ""; } + + /** + * 验证Wcs上报箱子到达请求 + * @param boxArriveRequest Wcs上报箱子到达请求 + * @return 验证结果 + */ + @Override + public String validateBoxArriveRequest(WcsBoxArriveRequest boxArriveRequest) { + if (boxArriveRequest == null || StringUtils.isEmpty(boxArriveRequest.getVehicleNo()) || StringUtils.isEmpty(boxArriveRequest.getLocation())) { + return "请求参数不全,载具号和站台号不可缺少"; + } + + return ""; + } + + /** + * 验证获取工作信息请求 + * @param workQuery 请求参数 + * @return 验证结果 + */ + @Override + public String validateGetWorkVoRequest(WorkQuery workQuery) { + if (workQuery == null || StringUtils.isEmpty(workQuery.getGoodsId())) { + return "请求参数补全,料号必须可少"; + } + + return ""; + } } diff --git a/src/main/resources/mapper/MenuMapper.xml b/src/main/resources/mapper/MenuMapper.xml index ba76d6e..55a8162 100644 --- a/src/main/resources/mapper/MenuMapper.xml +++ b/src/main/resources/mapper/MenuMapper.xml @@ -2,5 +2,10 @@ - + \ No newline at end of file