代码更新

This commit is contained in:
梁州 2024-07-10 10:52:43 +08:00
parent d8c89b156b
commit 54e6bdff63
4 changed files with 187 additions and 10 deletions

View File

@ -991,4 +991,142 @@ public class TaskController {
return convertJsonString(response);
}
}
/**
* 拣货完成确认回库
*
* @param finishPickingRequest 拣货完成确认回库请求
* @return 结果
*/
@PostMapping("/finishPickingAndBack")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "拣货完成确认回库", logMethod = "finishPickingAndBack")
public String finishPickingAndBack(@RequestBody FinishPickingRequest finishPickingRequest) {
logger.info("接收到拣货完成确认回库:{}ip地址{}", JSON.toJSONString(finishPickingRequest), HttpUtils.getIpAddr(servletRequest));
ResponseEntity response = new ResponseEntity();
try {
String validateInfo = validateConfirmPickRequest(finishPickingRequest);
if (!validateInfo.equals("")) {
logger.error("拣货完成确认回库请求验证错误:{}", validateInfo);
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage(validateInfo);
return convertJsonString(response);
}
// 查询到对应的任务
Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskId, finishPickingRequest.getTaskId()));
if (task == null) {
logger.error("请勿重复操作");
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("请勿重复操作");
return convertJsonString(response);
}
// 查询对应库存
Stock stock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.eq(Stock::getVehicleId, finishPickingRequest.getVehicleId())
.apply("goods_related ->> '$.goodsId' = {0}", finishPickingRequest.getGoodsId()));
// 删除当前任务并生成任务记录
task.setFinishTime(LocalDateTime.now());
task.setUserName(finishPickingRequest.getUserName());
task.setTaskStatus(WmsTaskStatus.FINISH.getCode());
taskRecordService.save(BeanUtil.copyProperties(task, TaskRecord.class));
taskService.remove(new LambdaQueryWrapper<Task>().eq(Task::getTaskId, finishPickingRequest.getTaskId()));
// 更新库存
StockDetailInfo goodsInfo = stock.getGoodsRelated();
goodsInfo.setRemainNum(BigDecimal.valueOf(finishPickingRequest.getOriginNum() - finishPickingRequest.getOpNum()));
stock.setGoodsRelated(goodsInfo);
stockService.update(stock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, stock.getStockId()));
// 判断当前载具是否还有拣选任务
LambdaQueryWrapper<Task> sameVehicleTaskQuery = new LambdaQueryWrapper<Task>()
.eq(Task::getVehicleId, finishPickingRequest.getVehicleId());
if (!taskService.exists(sameVehicleTaskQuery)) {
// 生成回库任务
Map<String, String> nextLocationMap = new HashMap<>();
// 请求可用库位
for (int i = 0; i < locationService.count(new LambdaQueryWrapper<Location>().eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode())); i++) {
Map<String, String> resultMap = locationService.getOneLocation(task.getDestination(), null);
if (resultMap.isEmpty() || !resultMap.containsKey("nextLocationId")) {
logger.error("暂无可用库位");
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("暂无可用库位!");
return convertJsonString(response);
} else {
Location nextLocation = locationService.getOne(new LambdaQueryWrapper<Location>().eq(Location::getLocationId, resultMap.get("nextLocationId")));
LambdaUpdateWrapper<Location> updateLocationWrapper = new LambdaUpdateWrapper<Location>()
.set(Location::getLocationStatus, LocationStatus.OCCUPY.getCode())
.set(Location::getVehicleId, task.getVehicleId())
.eq(Location::getLocationId, nextLocation.getLocationId())
.eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode());
if (locationService.update(updateLocationWrapper)) {
nextLocationMap = resultMap;
break;
}
}
}
if (nextLocationMap.isEmpty() || !nextLocationMap.containsKey("nextLocationId")) {
logger.error("暂无可用库位");
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("暂无可用库位!");
return convertJsonString(response);
}
// 生成入库任务
Task tempInTask = new Task();
tempInTask.setTaskId(generateId("HK_"));
tempInTask.setTaskType(TaskType.IN.getCode());
tempInTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
tempInTask.setTaskGroup(generateId(""));
tempInTask.setTaskPriority(1);
tempInTask.setVehicleId(task.getVehicleId());
tempInTask.setOrigin(task.getDestination());
tempInTask.setDestination(nextLocationMap.get("nextLocationId"));
tempInTask.setVehicleSize(1);
tempInTask.setWeight(BigDecimal.valueOf(0.0));
tempInTask.setCreateTime(LocalDateTime.now());
tempInTask.setUserName(finishPickingRequest.getUserName());
tempInTask.setPreTask(nextLocationMap.get("preTaskId"));
taskService.save(tempInTask);
// 返回请求
logger.info("处理拣货完成确认回库成功");
response.setCode(ResponseCode.OK.getCode());
response.setMessage("处理拣货完成确认回库成功");
} else {
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);
}
}
/**
* 验证拣货完成确认回库的请求的正确性
* @param finishPickingRequest 拣货完成确认回库的请求
* @return 结果-----正确则为""
*/
private String validateConfirmPickRequest(FinishPickingRequest finishPickingRequest) {
// 判断是否缺少必须信息
if (StringUtils.isEmpty(finishPickingRequest.getTaskId()) || StringUtils.isEmpty(finishPickingRequest.getVehicleId())
|| StringUtils.isEmpty(finishPickingRequest.getGoodsId())) {
return "请求缺少必须信息,请检查任务号+载具+物料组合是否齐全。";
}
LambdaQueryWrapper<Task> taskLambdaQueryWrapperById = new LambdaQueryWrapper<Task>()
.eq(Task::getTaskId, finishPickingRequest.getTaskId())
.eq(Task::getVehicleId, finishPickingRequest.getVehicleId())
.apply("goods_related ->> '$.goodsId' = {0}", finishPickingRequest.getGoodsId())
.eq(Task::getTaskType, TaskType.OUT.getCode())
.eq(Task::getTaskStatus, WmsTaskStatus.PICKING.getCode())
.eq(Task::getIsPicking, 1);
if (!taskService.exists(taskLambdaQueryWrapperById)) {
return "当前的请求信息没有对应的可拣选任务";
}
return "";
}
}

View File

@ -0,0 +1,41 @@
package com.wms.entity.app.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* 拣货完成确认回库请求
*/
@Data
public class FinishPickingRequest {
/**
* 任务号
*/
@JsonProperty("taskId")
private String taskId;
/**
* 载具号
*/
@JsonProperty("vehicleId")
private String vehicleId;
/**
* 物料编号
*/
@JsonProperty("goodsId")
private String goodsId;
/**
* 操作数量
*/
@JsonProperty("opNum")
private Integer opNum;
/**
* 原库存数量
*/
@JsonProperty("originNum")
private Integer originNum;
/**
* 操作人员
*/
@JsonProperty("userName")
private String userName;
}

View File

@ -1,8 +1,6 @@
package com.wms.entity.app.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data

View File

@ -13,15 +13,15 @@ spring:
# password: coder
# driver-class-name: com.mysql.cj.jdbc.Driver
# 宝开服务器--内网
url: jdbc:mysql://192.168.3.254:3306/wms_miniload_bk7?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
# url: jdbc:mysql://192.168.3.254:3306/wms_miniload_bk7?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
# username: coder
# password: coder
# driver-class-name: com.mysql.cj.jdbc.Driver
# 上线环境
url: jdbc:mysql://192.168.3.254:3306/wms_miniload_bk7_test?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
username: coder
password: coder
driver-class-name: com.mysql.cj.jdbc.Driver
# 上线环境
# url: jdbc:mysql://localhost:3306/wms_xizhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
# username: developer
# password: developer
# driver-class-name: com.mysql.cj.jdbc.Driver
# 从库
# slave_1:
# url: jdbc:mysql://localhost:3306/wms_miniload_bk7?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true