代码更新

This commit is contained in:
梁州 2024-07-22 17:01:59 +08:00
parent e27702f8ce
commit cc90c09e3b
13 changed files with 283 additions and 15 deletions

View File

@ -70,7 +70,7 @@ public class StockController {
.eq(StringUtils.isNotEmpty(stockQuery.getLocationId()), Stock::getLocationId, stockQuery.getLocationId()) .eq(StringUtils.isNotEmpty(stockQuery.getLocationId()), Stock::getLocationId, stockQuery.getLocationId())
.eq(stockQuery.getStockStatus() != null, Stock::getStockStatus, stockQuery.getStockStatus()) .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.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<StockVo> pageDto = PageDto.of(stockPage, stock -> BeanUtil.copyProperties(stock, StockVo.class)); PageDto<StockVo> pageDto = PageDto.of(stockPage, stock -> BeanUtil.copyProperties(stock, StockVo.class));
response.setCode(ResponseCode.OK.getCode()); response.setCode(ResponseCode.OK.getCode());

View File

@ -1,7 +1,6 @@
package com.wms.controller; package com.wms.controller;
import cn.hutool.core.bean.BeanUtil; 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.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.TaskInRequest;
import com.wms.entity.app.request.TaskOutRequest; import com.wms.entity.app.request.TaskOutRequest;
import com.wms.entity.app.request.TaskQuery; 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.vo.TaskVO;
import com.wms.entity.app.wcs.WcsBoxArriveRequest;
import com.wms.entity.app.wcs.WcsTaskResultRequest; import com.wms.entity.app.wcs.WcsTaskResultRequest;
import com.wms.entity.app.wcs.WcsVehicleInRequest; import com.wms.entity.app.wcs.WcsVehicleInRequest;
import com.wms.entity.table.*; import com.wms.entity.table.*;
@ -34,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -88,6 +90,14 @@ public class TaskController {
* 验证服务 * 验证服务
*/ */
private final IValidateService validateService; 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) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "入库请求", logMethod = "requestIn") @MyLog(logTitle = "入库请求", logMethod = "requestIn")
public String receiveTaskInRequest(@RequestBody TaskInRequest taskInRequest) { 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(); ResponseEntity response = new ResponseEntity();
try { try {
@ -153,7 +163,7 @@ public class TaskController {
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "出库请求", logMethod = "requestOut") @MyLog(logTitle = "出库请求", logMethod = "requestOut")
public String receiveTaskOutRequest(@RequestBody TaskOutRequest taskOutRequest) { 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(); ResponseEntity response = new ResponseEntity();
try { try {
@ -205,7 +215,7 @@ public class TaskController {
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "Wcs任务反馈", logMethod = "sendTaskResult") @MyLog(logTitle = "Wcs任务反馈", logMethod = "sendTaskResult")
public String receiveTaskResult(@RequestBody WcsTaskResultRequest wcsTaskResultRequest) { 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(); ResponseEntity response = new ResponseEntity();
try { try {
@ -451,7 +461,7 @@ public class TaskController {
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "Wcs请求载具入库", logMethod = "WcsVehicleIn") @MyLog(logTitle = "Wcs请求载具入库", logMethod = "WcsVehicleIn")
public String WcsVehicleInRequest(@RequestBody WcsVehicleInRequest wcsVehicleInRequest) { 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(); ResponseEntity response = new ResponseEntity();
try { try {
@ -536,7 +546,7 @@ public class TaskController {
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "Wcs反馈重复入库问题", logMethod = "duplicateLocationOccurred") @MyLog(logTitle = "Wcs反馈重复入库问题", logMethod = "duplicateLocationOccurred")
public String ResolveDuplicateLocation(@RequestBody WcsTaskResultRequest duplicateLocationRequest) { 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(); ResponseEntity response = new ResponseEntity();
try { try {
@ -647,7 +657,7 @@ public class TaskController {
} }
/** /**
* 根据 * 根据请求参数查询任务信息
*/ */
@PostMapping("/getTasks") @PostMapping("/getTasks")
@ResponseBody @ResponseBody
@ -677,4 +687,151 @@ public class TaskController {
return convertJsonString(response); 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<PickTask>()
.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<Stand>()
.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<PickTask>()
.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<Stock>()
.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<WorkFlow> workFlows = workFlowService.list(new LambdaQueryWrapper<WorkFlow>()
.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);
}
}
} }

View File

@ -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;
}

View File

@ -93,7 +93,7 @@ public class Goods {
* 看板的数量 * 看板的数量
*/ */
@TableField("kanban_num") @TableField("kanban_num")
private Integer kanbanNum; private BigDecimal kanbanNum;
/** /**
* 看板详细信息 * 看板详细信息
*/ */

View File

@ -1,6 +1,7 @@
package com.wms.entity.table; package com.wms.entity.table;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
@ -15,7 +16,7 @@ public class GoodsToStation {
/** /**
* 主键 * 主键
*/ */
@TableField("config_id") @TableId("config_id")
private String configId; private String configId;
/** /**
* 工作站台 * 工作站台

View File

@ -39,7 +39,7 @@ public class KateDBS {
* 1已开始未完成 * 1已开始未完成
* 2已完成 * 2已完成
*/ */
@TableField("last_update_time") @TableField("dbs_status")
private Integer dbsStatus; private Integer dbsStatus;
/** /**
* 最近更新时间 * 最近更新时间

View File

@ -39,7 +39,7 @@ public class KateDBSHistory {
* 1已开始未完成 * 1已开始未完成
* 2已完成 * 2已完成
*/ */
@TableField("last_update_time") @TableField("dbs_status")
private Integer dbsStatus; private Integer dbsStatus;
/** /**
* 最近更新时间 * 最近更新时间

View File

@ -39,7 +39,7 @@ public class KateDBSLast {
* 1已开始未完成 * 1已开始未完成
* 2已完成 * 2已完成
*/ */
@TableField("last_update_time") @TableField("dbs_status")
private Integer dbsStatus; private Integer dbsStatus;
/** /**
* 最近更新时间 * 最近更新时间

View File

@ -1,4 +1,45 @@
package com.wms.entity.table; 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 { 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;
} }

View File

@ -24,7 +24,7 @@ public class WorkStationConfig {
@TableField("work_station") @TableField("work_station")
private String workStation; private String workStation;
/** /**
* 小盒子---对面工单表里面的工位 * 小盒子---对面工单表里面的工位
*/ */
@TableField("small_box") @TableField("small_box")
private String smallBox; private String smallBox;

View File

@ -2,6 +2,8 @@ package com.wms.service.business;
import com.wms.entity.app.request.TaskInRequest; import com.wms.entity.app.request.TaskInRequest;
import com.wms.entity.app.request.TaskOutRequest; 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.WcsTaskResultRequest;
import com.wms.entity.app.wcs.WcsVehicleInRequest; import com.wms.entity.app.wcs.WcsVehicleInRequest;
@ -43,4 +45,18 @@ public interface IValidateService {
* @return 验证结果 * @return 验证结果
*/ */
String validateDuplicateLocationRequest(WcsTaskResultRequest duplicateLocationRequest); String validateDuplicateLocationRequest(WcsTaskResultRequest duplicateLocationRequest);
/**
* 验证Wcs上报箱子到达请求
* @param boxArriveRequest Wcs上报箱子到达请求
* @return 验证结果
*/
String validateBoxArriveRequest(WcsBoxArriveRequest boxArriveRequest);
/**
* 验证获取工作信息请求
* @param workQuery 请求参数
* @return 验证结果
*/
String validateGetWorkVoRequest(WorkQuery workQuery);
} }

View File

@ -5,6 +5,8 @@ import com.wms.constants.enums.*;
import com.wms.entity.app.request.GoodsInRequest; import com.wms.entity.app.request.GoodsInRequest;
import com.wms.entity.app.request.TaskInRequest; import com.wms.entity.app.request.TaskInRequest;
import com.wms.entity.app.request.TaskOutRequest; 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.WcsTaskResultRequest;
import com.wms.entity.app.wcs.WcsVehicleInRequest; import com.wms.entity.app.wcs.WcsVehicleInRequest;
import com.wms.entity.table.Location; import com.wms.entity.table.Location;
@ -271,4 +273,32 @@ public class ValidateServiceImplements implements IValidateService {
return ""; 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 "";
}
} }

View File

@ -2,5 +2,10 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wms.mapper.MenuMapper"> <mapper namespace="com.wms.mapper.MenuMapper">
<select id="selMenuByRoleId" parameterType="Integer" resultType="com.wms.entity.table.Menu">
select tsm.menu_id, tsm.label_name, tsm.icon_value, tsm.path, tsm.parent_id
from tbl_sys_menu tsm left join tbl_sys_permission tsp on tsm.menu_id = tsp.menu_id
where tsp.role_id = #{roleId}
order by tsm.menu_id
</select>
</mapper> </mapper>