代码更新

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(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<StockVo> pageDto = PageDto.of(stockPage, stock -> BeanUtil.copyProperties(stock, StockVo.class));
response.setCode(ResponseCode.OK.getCode());

View File

@ -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<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")
private Integer kanbanNum;
private BigDecimal kanbanNum;
/**
* 看板详细信息
*/

View File

@ -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;
/**
* 工作站台

View File

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

View File

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

View File

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

View File

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

View File

@ -24,7 +24,7 @@ public class WorkStationConfig {
@TableField("work_station")
private String workStation;
/**
* 小盒子---对面工单表里面的工位
* 小盒子---对面工单表里面的工位
*/
@TableField("small_box")
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.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);
}

View File

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

View File

@ -2,5 +2,10 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<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>