代码更新:
1.增加非计划领料 2。修改部分拉货逻辑
This commit is contained in:
parent
4f7c0732e3
commit
f9b41b7ba2
|
|
@ -94,11 +94,11 @@ public class StockController {
|
||||||
/**
|
/**
|
||||||
* 查询某个物料的库存总数
|
* 查询某个物料的库存总数
|
||||||
*/
|
*/
|
||||||
@PostMapping("/getStocksByGoods")
|
@PostMapping("/getStockNumByGoodsId")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||||
public String getStocksByGoods(@RequestBody StockQuery stockQuery) {
|
public String getStockNumByGoodsId(@RequestBody StockQuery stockQuery) {
|
||||||
logger.info("接收到查询物料库存数据请求:{},请求ip:{}", convertJsonString(stockQuery), HttpUtils.getIpAddr(servletRequest));
|
logger.info("接收到查询物料库存总数请求:{},请求ip:{}", convertJsonString(stockQuery), HttpUtils.getIpAddr(servletRequest));
|
||||||
ResponseEntity response = new ResponseEntity();
|
ResponseEntity response = new ResponseEntity();
|
||||||
try {
|
try {
|
||||||
if (StringUtils.isEmpty(stockQuery.getGoodsId())) {
|
if (StringUtils.isEmpty(stockQuery.getGoodsId())) {
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,10 @@ public class TaskController {
|
||||||
* 站台要料服务
|
* 站台要料服务
|
||||||
*/
|
*/
|
||||||
private final GoodsToStationService goodsToStationService;
|
private final GoodsToStationService goodsToStationService;
|
||||||
|
/**
|
||||||
|
* 非计划领料服务
|
||||||
|
*/
|
||||||
|
private final NoPlanRecordService noPlanRecordService;
|
||||||
/**
|
/**
|
||||||
* Wcs服务
|
* Wcs服务
|
||||||
*/
|
*/
|
||||||
|
|
@ -426,26 +430,30 @@ public class TaskController {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (outTask.getIsPicking() == 1) {
|
if (outTask.getIsPicking() == 1) {
|
||||||
// 当前载具上所有库存状态设置为拣选
|
|
||||||
stockService.update(new LambdaUpdateWrapper<Stock>()
|
|
||||||
.set(Stock::getStockStatus, StockStatus.PICKING.getCode())
|
|
||||||
.eq(Stock::getVehicleId, outTask.getVehicleId())
|
|
||||||
.ne(Stock::getStockStatus, StockStatus.PICKING.getCode()));
|
|
||||||
// 当前载具设置为出库中状态
|
// 当前载具设置为出库中状态
|
||||||
vehicleService.update(new LambdaUpdateWrapper<Vehicle>()
|
vehicleService.update(new LambdaUpdateWrapper<Vehicle>()
|
||||||
.set(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode())
|
.set(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode())
|
||||||
.eq(Vehicle::getVehicleId, outTask.getVehicleId())
|
.eq(Vehicle::getVehicleId, outTask.getVehicleId())
|
||||||
.ne(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode()));
|
.ne(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode()));
|
||||||
// 将该载具对应的拣选任务设置为可发送状态
|
if (StringUtils.isNotEmpty(outTask.getPickStand())) {
|
||||||
pickTaskService.update(new LambdaUpdateWrapper<PickTask>()
|
// 当前载具上所有库存状态设置为拣选
|
||||||
.set(PickTask::getPickStatus, PickTaskStatusEnum.NEW.getCode())
|
stockService.update(new LambdaUpdateWrapper<Stock>()
|
||||||
.eq(PickTask::getVehicleId, outTask.getVehicleId())
|
.set(Stock::getStockStatus, StockStatus.PICKING.getCode())
|
||||||
.eq(PickTask::getPickStatus, PickTaskStatusEnum.TEMP.getCode()));
|
.eq(Stock::getVehicleId, outTask.getVehicleId())
|
||||||
|
.ne(Stock::getStockStatus, StockStatus.PICKING.getCode()));
|
||||||
|
// 将该载具对应的拣选任务设置为可发送状态
|
||||||
|
pickTaskService.update(new LambdaUpdateWrapper<PickTask>()
|
||||||
|
.set(PickTask::getPickStatus, PickTaskStatusEnum.NEW.getCode())
|
||||||
|
.eq(PickTask::getVehicleId, outTask.getVehicleId())
|
||||||
|
.eq(PickTask::getPickStatus, PickTaskStatusEnum.TEMP.getCode()));
|
||||||
|
}
|
||||||
} else {// 代表整出
|
} else {// 代表整出
|
||||||
// 删除当前载具上所有库存
|
// 删除当前载具上所有库存
|
||||||
stockService.remove(new LambdaQueryWrapper<Stock>().eq(Stock::getVehicleId, outTask.getVehicleId()));
|
stockService.remove(new LambdaQueryWrapper<Stock>().eq(Stock::getVehicleId, outTask.getVehicleId()));
|
||||||
// 删除载具
|
// 删除载具
|
||||||
vehicleService.remove(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, outTask.getVehicleId()));
|
vehicleService.remove(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, outTask.getVehicleId()));
|
||||||
|
// 删除当前载具的所有拣选任务
|
||||||
|
pickTaskService.remove(new LambdaQueryWrapper<PickTask>().eq(PickTask::getVehicleId, outTask.getVehicleId()));
|
||||||
}
|
}
|
||||||
// 添加任务记录
|
// 添加任务记录
|
||||||
outTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
|
outTask.setTaskStatus(WmsTaskStatus.FINISH.getCode());
|
||||||
|
|
@ -2263,7 +2271,6 @@ public class TaskController {
|
||||||
}
|
}
|
||||||
// 查询库存
|
// 查询库存
|
||||||
List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>()
|
List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>()
|
||||||
.eq(Stock::getStockStatus, StockStatus.OK.getCode())
|
|
||||||
.apply("goods_related ->> '$.goodsId' = {0}", noPlanRequest.getGoodsId())
|
.apply("goods_related ->> '$.goodsId' = {0}", noPlanRequest.getGoodsId())
|
||||||
.apply("goods_related ->> '$.remainNum' > 0")
|
.apply("goods_related ->> '$.remainNum' > 0")
|
||||||
.orderByAsc(Stock::getCreateTime));
|
.orderByAsc(Stock::getCreateTime));
|
||||||
|
|
@ -2272,33 +2279,95 @@ public class TaskController {
|
||||||
// 总数量
|
// 总数量
|
||||||
BigDecimal stockNum = stockOfGoodsList.stream().map(StockOfGoodsDto::getRemainNumSum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal stockNum = stockOfGoodsList.stream().map(StockOfGoodsDto::getRemainNumSum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
if (stockList != null && !stockList.isEmpty()) {
|
if (stockList != null && !stockList.isEmpty()) {
|
||||||
|
// 需求数量
|
||||||
|
BigDecimal needNum = noPlanRequest.getNeedNum();
|
||||||
List<Stock> waitForOutStockList = new ArrayList<>();
|
List<Stock> waitForOutStockList = new ArrayList<>();
|
||||||
// TODO 生成出库任务
|
// 出库任务列表
|
||||||
|
List<Task> outTasks = new ArrayList<>();
|
||||||
// 尝试生成出库任务
|
// 尝试生成出库任务
|
||||||
// for (Stock tempStock : stockList) {
|
for (Stock tempStock : stockList) {
|
||||||
// if (needNum.compareTo(BigDecimal.ZERO) <= 0) {// 需求数量小于等于0
|
if (needNum.compareTo(BigDecimal.ZERO) <= 0) {// 需求数量小于等于0
|
||||||
// break;
|
break;
|
||||||
// }
|
}
|
||||||
// if (tempStock.getGoodsRelated().getRemainNum().compareTo(needNum) > 0) {
|
if (Objects.equals(tempStock.getStockStatus(), StockStatus.OK.getCode())) {
|
||||||
// // 当前箱子剩余物料数量多于需求数量
|
if (tempStock.getGoodsRelated().getRemainNum().compareTo(needNum) > 0) {
|
||||||
// needNum = BigDecimal.ZERO;
|
// 当前箱子剩余物料数量多于需求数量
|
||||||
// // 设置剩余数量
|
needNum = BigDecimal.ZERO;
|
||||||
// StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
// 设置剩余数量
|
||||||
// goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
|
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||||
// tempStock.setGoodsRelated(goodsRelated);
|
goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
|
||||||
// waitForOutStockList.add(tempStock);
|
tempStock.setGoodsRelated(goodsRelated);
|
||||||
// break;
|
waitForOutStockList.add(tempStock);
|
||||||
// } else {
|
break;
|
||||||
// // 当前箱子物料剩余数量少于需求数量
|
} else {
|
||||||
// needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum());
|
// 当前箱子物料剩余数量少于需求数量
|
||||||
// // 设置剩余数量
|
needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum());
|
||||||
// StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
// 设置剩余数量
|
||||||
// goodsRelated.setRemainNum(BigDecimal.ZERO);
|
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||||
// tempStock.setGoodsRelated(goodsRelated);
|
goodsRelated.setRemainNum(BigDecimal.ZERO);
|
||||||
// waitForOutStockList.add(tempStock);
|
tempStock.setGoodsRelated(goodsRelated);
|
||||||
// }
|
waitForOutStockList.add(tempStock);
|
||||||
// }
|
}
|
||||||
// createVehicleOutTaskAndPickTask(waitForOutStockList, workStation);
|
// 创建出库任务
|
||||||
|
Task tempOutTask = new Task();
|
||||||
|
tempOutTask.setTaskId(generateId("CK_"));
|
||||||
|
tempOutTask.setTaskType(TaskType.OUT.getCode());
|
||||||
|
tempOutTask.setTaskGroup(generateId(""));
|
||||||
|
tempOutTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
|
||||||
|
tempOutTask.setTaskPriority(2);
|
||||||
|
tempOutTask.setVehicleId(tempStock.getVehicleId());
|
||||||
|
tempOutTask.setUserName(noPlanRequest.getUserName());
|
||||||
|
tempOutTask.setOrigin(tempStock.getLocationId());
|
||||||
|
tempOutTask.setDestination("");
|
||||||
|
tempOutTask.setCreateTime(LocalDateTime.now());
|
||||||
|
tempOutTask.setIsPicking(1);
|
||||||
|
outTasks.add(tempOutTask);
|
||||||
|
} else if (Objects.equals(tempStock.getStockStatus(), StockStatus.OUT.getCode())) {
|
||||||
|
// 判断这个料箱是否有拣选任务
|
||||||
|
boolean hasPickTask = pickTaskService.exists(new LambdaQueryWrapper<PickTask>()
|
||||||
|
.eq(PickTask::getVehicleId, tempStock.getVehicleId()));
|
||||||
|
if (!hasPickTask) {
|
||||||
|
// 有拣选任务时,不做处理
|
||||||
|
if (tempStock.getGoodsRelated().getRemainNum().compareTo(needNum) > 0) {
|
||||||
|
// 当前箱子剩余物料数量多于需求数量
|
||||||
|
needNum = BigDecimal.ZERO;
|
||||||
|
// 设置剩余数量
|
||||||
|
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||||
|
goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
|
||||||
|
tempStock.setGoodsRelated(goodsRelated);
|
||||||
|
waitForOutStockList.add(tempStock);
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
// 当前箱子物料剩余数量少于需求数量
|
||||||
|
needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum());
|
||||||
|
// 设置剩余数量
|
||||||
|
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||||
|
goodsRelated.setRemainNum(BigDecimal.ZERO);
|
||||||
|
tempStock.setGoodsRelated(goodsRelated);
|
||||||
|
waitForOutStockList.add(tempStock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (waitForOutStockList.isEmpty()) {
|
||||||
|
logger.error("所有库存在站台备料中。");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("所有库存在站台备料中。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
// 添加出库任务
|
||||||
|
taskService.saveBatch(outTasks);
|
||||||
|
List<String> vehicleIds = outTasks.stream().map(Task::getVehicleId).distinct().toList();
|
||||||
|
// 更新库存状态
|
||||||
|
stockService.update(new LambdaUpdateWrapper<Stock>()
|
||||||
|
.set(Stock::getStockStatus, StockStatus.OUT.getCode())
|
||||||
|
.in(Stock::getVehicleId, vehicleIds)
|
||||||
|
.eq(Stock::getStockStatus, StockStatus.OK.getCode()));
|
||||||
|
// 更新料箱状态
|
||||||
|
vehicleService.update(new LambdaUpdateWrapper<Vehicle>()
|
||||||
|
.set(Vehicle::getVehicleStatus, VehicleStatus.OUT.getCode())
|
||||||
|
.in(Vehicle::getVehicleId, vehicleIds)
|
||||||
|
.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode()));
|
||||||
// 非计划领料记录生成
|
// 非计划领料记录生成
|
||||||
NoPlanRecord noPlanRecord = new NoPlanRecord();
|
NoPlanRecord noPlanRecord = new NoPlanRecord();
|
||||||
noPlanRecord.setRecordId(generateId("CLC-NO-PLAN_"));
|
noPlanRecord.setRecordId(generateId("CLC-NO-PLAN_"));
|
||||||
|
|
@ -2306,22 +2375,25 @@ public class TaskController {
|
||||||
noPlanRecord.setGoodsId(noPlanRequest.getGoodsId());
|
noPlanRecord.setGoodsId(noPlanRequest.getGoodsId());
|
||||||
noPlanRecord.setNeedNum(noPlanRequest.getNeedNum());
|
noPlanRecord.setNeedNum(noPlanRequest.getNeedNum());
|
||||||
noPlanRecord.setStockNum(stockNum);
|
noPlanRecord.setStockNum(stockNum);
|
||||||
} else {
|
noPlanRecord.setWorkOrder(noPlanRequest.getWorkOrder());
|
||||||
if (stockNum.compareTo(BigDecimal.ZERO) > 0) {
|
noPlanRecord.setSmallVehicleNo(noPlanRequest.getSmallVehicleNo());
|
||||||
logger.error("所有库存在站台备料中。");
|
noPlanRecord.setCallReason(noPlanRequest.getCallReason());
|
||||||
response.setCode(ResponseCode.ERROR.getCode());
|
noPlanRecord.setFlowNo(noPlanRequest.getFlowNo());
|
||||||
response.setMessage("所有库存在站台备料中。");
|
noPlanRecord.setRemark(noPlanRequest.getRemark());
|
||||||
} else {
|
noPlanRecord.setCallTime(LocalDateTime.now());
|
||||||
logger.error("非计划领料没有库存。");
|
noPlanRecord.setCallUser(noPlanRequest.getCallUser());
|
||||||
response.setCode(ResponseCode.ERROR.getCode());
|
noPlanRecord.setPickedNum(BigDecimal.ZERO);
|
||||||
response.setMessage("非计划领料没有库存。");
|
noPlanRecord.setPickStatus(0);// 未拣选
|
||||||
}
|
noPlanRecordService.save(noPlanRecord);
|
||||||
return convertJsonString(response);
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.info("处理整理盒子请求成功。");
|
logger.info("处理直接物料非计划领料请求成功。");
|
||||||
response.setCode(ResponseCode.OK.getCode());
|
response.setCode(ResponseCode.OK.getCode());
|
||||||
response.setMessage("请根据灯光拣选盒子。");
|
response.setMessage("处理直接物料非计划领料请求成功。");
|
||||||
|
} else {
|
||||||
|
logger.error("非计划领料没有库存。");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("非计划领料没有库存。");
|
||||||
|
}
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
|
|
@ -2333,45 +2405,156 @@ public class TaskController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前物料的待领料数量
|
||||||
|
*
|
||||||
|
* @param pickNumQuery 请求信息
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@PostMapping("/getCurrentGoodsPickNum")
|
||||||
|
@ResponseBody
|
||||||
|
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||||
|
@MyLog(logTitle = "获取当前物料的待领料数量", logMethod = "getCurrentGoodsPickNum")
|
||||||
|
public String getCurrentGoodsPickNum(@RequestBody PickNumQuery pickNumQuery) {
|
||||||
|
logger.info("获取当前物料的待领料数量:{},ip地址:{}", convertJsonString(pickNumQuery), HttpUtils.getIpAddr(servletRequest));
|
||||||
|
ResponseEntity response = new ResponseEntity();
|
||||||
|
try {
|
||||||
|
|
||||||
|
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 noPlanRequest 请求信息
|
* @param pickNumQuery 请求信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@PostMapping("/clcNoPlanConfirmBack")
|
@PostMapping("/clcNoPlanConfirmBack")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||||
@MyLog(logTitle = "直接物料非计划领料确认回库", logMethod = "clcNoPlanConfirmBack")
|
@MyLog(logTitle = "直接物料非计划领料确认回库", logMethod = "clcNoPlanConfirmBack")
|
||||||
public String clcNoPlanConfirmBack(@RequestBody NoPlanRequest noPlanRequest) {
|
public String clcNoPlanConfirmBack(@RequestBody PickNumQuery pickNumQuery) {
|
||||||
logger.info("直接物料非计划领料确认回库:{},ip地址:{}", convertJsonString(noPlanRequest), HttpUtils.getIpAddr(servletRequest));
|
logger.info("直接物料非计划领料确认回库:{},ip地址:{}", convertJsonString(pickNumQuery), HttpUtils.getIpAddr(servletRequest));
|
||||||
ResponseEntity response = new ResponseEntity();
|
ResponseEntity response = new ResponseEntity();
|
||||||
try {
|
try {
|
||||||
// 获取站台号
|
// TODO 确认拣货完成回库
|
||||||
Stand targetStand;
|
// 判断信息是否完备
|
||||||
if (StringUtils.isNotEmpty(noPlanRequest.getStandId())) {
|
if (StringUtils.isEmpty(pickNumQuery.getGoodsId())
|
||||||
// 站台号从请求参数中获取
|
|| StringUtils.isEmpty(pickNumQuery.getVehicleId())
|
||||||
targetStand = standService.getById(noPlanRequest.getStandId());
|
|| pickNumQuery.getRealPickNum() == null) {
|
||||||
} else {
|
logger.error("请求缺少必须参数,箱号、料号、数量不可缺少。");
|
||||||
// 站台号从ip获取
|
response.setCode(ResponseCode.OK.getCode());
|
||||||
targetStand = standService.getOne(new LambdaQueryWrapper<Stand>()
|
response.setMessage("请求缺少必须参数,箱号、料号、数量不可缺少。");
|
||||||
.eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest))
|
|
||||||
.eq(Stand::getStandType, 1)
|
|
||||||
.last("limit 1"));
|
|
||||||
}
|
|
||||||
if (targetStand == null) {
|
|
||||||
logger.error("查询拣选站台错误。");
|
|
||||||
response.setCode(ResponseCode.ERROR.getCode());
|
|
||||||
response.setMessage("查询拣选站台错误。");
|
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
}
|
}
|
||||||
// 查询库存
|
// 更新库存
|
||||||
// Task中的isPicking=1
|
Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
|
||||||
|
.apply("goods_related -> '$.goodsId' = {0}", pickNumQuery.getGoodsId())
|
||||||
|
.eq(Stock::getVehicleId, pickNumQuery.getVehicleId())
|
||||||
logger.info("处理整理盒子请求成功。");
|
.last("limit 1"));
|
||||||
response.setCode(ResponseCode.OK.getCode());
|
// 更新库存数量
|
||||||
response.setMessage("请根据灯光拣选盒子。");
|
if (existStock != null && existStock.getGoodsRelated() != null) {
|
||||||
|
StockDetailInfo goodsDetail = existStock.getGoodsRelated();
|
||||||
|
goodsDetail.setRemainNum(goodsDetail.getRemainNum().subtract(pickNumQuery.getRealPickNum()));
|
||||||
|
existStock.setGoodsRelated(goodsDetail);
|
||||||
|
stockService.updateById(existStock);
|
||||||
|
}
|
||||||
|
// 判断这个箱子是否还有拣选任务
|
||||||
|
boolean hasPickTasks = pickTaskService.exists(new LambdaQueryWrapper<PickTask>()
|
||||||
|
.eq(PickTask::getVehicleId, pickNumQuery.getVehicleId()));
|
||||||
|
if (!hasPickTasks) {
|
||||||
|
// 判断当前载具是否有回库任务
|
||||||
|
boolean hasBackTask = taskService.exists(new LambdaQueryWrapper<Task>()
|
||||||
|
.eq(Task::getVehicleId, pickNumQuery.getVehicleId())
|
||||||
|
.eq(Task::getTaskType, TaskType.IN.getCode())
|
||||||
|
.likeRight(Task::getTaskId, "HK_"));
|
||||||
|
if (!hasBackTask) {
|
||||||
|
// 判断当前载具是否有入库任务
|
||||||
|
boolean hasInTask = taskService.exists(new LambdaQueryWrapper<Task>()
|
||||||
|
.eq(Task::getVehicleId, pickNumQuery.getVehicleId())
|
||||||
|
.eq(Task::getTaskType, TaskType.IN.getCode())
|
||||||
|
.eq(Task::getTaskStatus, WmsTaskStatus.TEMP.getCode())
|
||||||
|
.likeRight(Task::getTaskId, "RK_"));
|
||||||
|
if (!hasInTask) {
|
||||||
|
// 寻找库位
|
||||||
|
String nextLocationId = "";
|
||||||
|
for (int i = 0; i < locationService.count(new LambdaQueryWrapper<Location>().eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode())); i++) {
|
||||||
|
Map<String, String> resultMap = locationService.getOneLocation("", "");
|
||||||
|
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")).last("limit 1"));
|
||||||
|
LambdaUpdateWrapper<Location> updateLocationWrapper = new LambdaUpdateWrapper<Location>()
|
||||||
|
.set(Location::getLocationStatus, LocationStatus.OCCUPY.getCode())
|
||||||
|
.set(Location::getVehicleId, pickNumQuery.getVehicleId())
|
||||||
|
.eq(Location::getLocationId, nextLocation.getLocationId())
|
||||||
|
.eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode());
|
||||||
|
if (locationService.update(updateLocationWrapper)) {
|
||||||
|
nextLocationId = resultMap.get("nextLocationId");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Objects.equals(nextLocationId, "")) {
|
||||||
|
logger.error("暂无可用库位");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("暂无可用库位!");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
// 生成回库任务
|
||||||
|
Task backTask = new Task();
|
||||||
|
backTask.setTaskId(generateId("HK_"));
|
||||||
|
backTask.setTaskGroup(generateId(""));
|
||||||
|
backTask.setTaskType(TaskType.IN.getCode());
|
||||||
|
backTask.setTaskStatus(WmsTaskStatus.NEW.getCode());
|
||||||
|
backTask.setVehicleId(pickNumQuery.getVehicleId());
|
||||||
|
backTask.setDestination(nextLocationId);
|
||||||
|
backTask.setVehicleSize(1);
|
||||||
|
backTask.setWeight(BigDecimal.ZERO);
|
||||||
|
backTask.setTaskPriority(1);
|
||||||
|
backTask.setUserName(pickNumQuery.getUserName());
|
||||||
|
backTask.setCreateTime(LocalDateTime.now());
|
||||||
|
if (taskService.save(backTask)) {
|
||||||
|
// 设置库存状态为回库中
|
||||||
|
stockService.update(new LambdaUpdateWrapper<Stock>()
|
||||||
|
.set(Stock::getStockStatus, StockStatus.BACK.getCode())
|
||||||
|
.eq(Stock::getVehicleId, pickNumQuery.getVehicleId()));
|
||||||
|
} else {
|
||||||
|
// 回退库位锁定
|
||||||
|
locationService.update(new LambdaUpdateWrapper<Location>()
|
||||||
|
.set(Location::getLocationStatus, LocationStatus.EMPTY.getCode())
|
||||||
|
.set(Location::getVehicleId, "")
|
||||||
|
.eq(Location::getLocationId, nextLocationId)
|
||||||
|
.eq(Location::getLocationStatus, LocationStatus.OCCUPY.getCode()));
|
||||||
|
logger.error("生成回库任务失败,箱号:{}", pickNumQuery.getVehicleId());
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("生成回库任务失败。");
|
||||||
|
return convertJsonString(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logger.info("确认回库成功。");
|
||||||
|
response.setCode(ResponseCode.OK.getCode());
|
||||||
|
response.setMessage("确认回库成功。");
|
||||||
|
} else {
|
||||||
|
logger.error("当前箱子还有拣选任务,不能回库,请将箱子置入拣货环线。");
|
||||||
|
response.setCode(ResponseCode.ERROR.getCode());
|
||||||
|
response.setMessage("当前箱子还有拣选任务,不能回库,请将箱子置入拣货环线。");
|
||||||
|
}
|
||||||
return convertJsonString(response);
|
return convertJsonString(response);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 回滚事务
|
// 回滚事务
|
||||||
|
|
|
||||||
30
src/main/java/com/wms/entity/app/request/PickNumQuery.java
Normal file
30
src/main/java/com/wms/entity/app/request/PickNumQuery.java
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.wms.entity.app.request;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拣货/领料数量确认
|
||||||
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
public class PickNumQuery extends PageQuery{
|
||||||
|
/**
|
||||||
|
* 箱号
|
||||||
|
*/
|
||||||
|
@JsonProperty("vehicleId")
|
||||||
|
private String vehicleId;
|
||||||
|
/**
|
||||||
|
* 料号
|
||||||
|
*/
|
||||||
|
@JsonProperty("goodsId")
|
||||||
|
private String goodsId;
|
||||||
|
/**
|
||||||
|
* 领料数量
|
||||||
|
*/
|
||||||
|
@JsonProperty("realPickNum")
|
||||||
|
private BigDecimal realPickNum;
|
||||||
|
}
|
||||||
13
src/main/java/com/wms/entity/app/vo/PickNumOfGoodsVo.java
Normal file
13
src/main/java/com/wms/entity/app/vo/PickNumOfGoodsVo.java
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.wms.entity.app.vo;
|
||||||
|
|
||||||
|
import com.wms.entity.app.request.PickNumQuery;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 非计划领料界面显示领料数量
|
||||||
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
public class PickNumOfGoodsVo extends PickNumQuery {
|
||||||
|
}
|
||||||
|
|
@ -74,4 +74,14 @@ public class NoPlanRecord {
|
||||||
*/
|
*/
|
||||||
@TableField("call_user")
|
@TableField("call_user")
|
||||||
private String callUser;
|
private String callUser;
|
||||||
|
/**
|
||||||
|
* 已拣选数量
|
||||||
|
*/
|
||||||
|
@TableField("picked_num")
|
||||||
|
private BigDecimal pickedNum;
|
||||||
|
/**
|
||||||
|
* 状态
|
||||||
|
*/
|
||||||
|
@TableField("pick_status")
|
||||||
|
private Integer pickStatus;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -317,19 +317,19 @@ public class WmsTaskServiceImplements implements IWmsTaskService {
|
||||||
.apply("goods_related ->> '$.remainNum' > 0")
|
.apply("goods_related ->> '$.remainNum' > 0")
|
||||||
.last("limit 1"));
|
.last("limit 1"));
|
||||||
if (stock == null) {
|
if (stock == null) {
|
||||||
// 没有库存,那么就要移除当前的outsideVehicles
|
// 没有库存,
|
||||||
outsideVehiclesService.removeById(outsideVehicle.getOutsideId());
|
outsideVehicle.setRemainNum(BigDecimal.ZERO);
|
||||||
|
outsideVehiclesService.updateById(outsideVehicle);
|
||||||
} else {
|
} else {
|
||||||
StockDetailInfo goodsRelated = stock.getGoodsRelated();
|
if (outsideVehicle.getRemainNum().compareTo(needNum) > 0) {
|
||||||
if (goodsRelated.getRemainNum().compareTo(needNum) > 0) {
|
|
||||||
// 当前箱子剩余物料数量多于需求数量
|
// 当前箱子剩余物料数量多于需求数量
|
||||||
needNum = BigDecimal.ZERO;
|
needNum = BigDecimal.ZERO;
|
||||||
outsideVehicle.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
|
outsideVehicle.setRemainNum(outsideVehicle.getRemainNum().subtract(needNum));
|
||||||
usedOutsideVehiclesList.add(outsideVehicle);
|
usedOutsideVehiclesList.add(outsideVehicle);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
// 当前箱子物料剩余数量少于需求数量
|
// 当前箱子物料剩余数量少于需求数量
|
||||||
needNum = needNum.subtract(goodsRelated.getRemainNum());
|
needNum = needNum.subtract(outsideVehicle.getRemainNum());
|
||||||
outsideVehicle.setRemainNum(BigDecimal.ZERO);
|
outsideVehicle.setRemainNum(BigDecimal.ZERO);
|
||||||
usedOutsideVehiclesList.add(outsideVehicle);
|
usedOutsideVehiclesList.add(outsideVehicle);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,20 +8,20 @@ spring:
|
||||||
# 主库
|
# 主库
|
||||||
master:
|
master:
|
||||||
# 卡特数据库服务器
|
# 卡特数据库服务器
|
||||||
url: jdbc:mysql://10.90.36.71:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
# url: jdbc:mysql://10.90.36.71:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
username: developer
|
# username: developer
|
||||||
password: developer
|
# password: developer
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
# 宝开服务器--内网
|
# 宝开服务器--内网
|
||||||
# url: jdbc:mysql://192.168.3.254:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
# url: jdbc:mysql://192.168.3.254:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
# username: coder
|
# username: coder
|
||||||
# password: coder
|
# password: coder
|
||||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
# 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
|
url: jdbc:mysql://localhost:3306/wms_kate_suzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
# username: developer
|
username: developer
|
||||||
# password: developer
|
password: developer
|
||||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
# 从库
|
# 从库
|
||||||
# slave_1:
|
# slave_1:
|
||||||
# url: jdbc:mysql://localhost:3306/wms_aaa?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
# url: jdbc:mysql://localhost:3306/wms_aaa?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user