代码更新:

1.调整亮灯及要料逻辑
2.增加卡特登录功能
This commit is contained in:
梁州 2024-08-18 10:23:16 +08:00
parent 36fcf6e326
commit 1592fea84d
5 changed files with 260 additions and 116 deletions

View File

@ -133,6 +133,10 @@ public class TaskController {
* 工作站配置服务
*/
private final WorkStationConfigService workStationConfigService;
/**
* 站台要料服务
*/
private final GoodsToStationService goodsToStationService;
/**
* Wcs服务
*/
@ -312,7 +316,6 @@ public class TaskController {
// 添加库存
if (inTask.getGoodsRelated() != null && StringUtils.isNotEmpty(inTask.getGoodsRelated().getGoodsId())) {
// 查询这个物料有没有库存
// TODO 查询条件根据项目要求调整
Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", inTask.getGoodsRelated().getGoodsId())
.eq(Stock::getVehicleId, inTask.getVehicleId())
@ -344,23 +347,24 @@ public class TaskController {
// 更新库存状态
List<Stock> backStocks = stockService.list(new LambdaQueryWrapper<Stock>()
.eq(Stock::getVehicleId, inTask.getVehicleId()));
backStocks.forEach(stock -> {
for (Stock stock : backStocks) {
if (stock.getGoodsRelated().getRemainNum().compareTo(BigDecimal.ZERO) == 0) {
// 库存数量为0时要删除当前库存
stockService.removeById(stock.getStockId());
}
if (haveMoveTask) {
// 后续有移库
stock.setStockStatus(StockStatus.MOVE.getCode());
} else {
// 后续没有移库
stock.setStockStatus(StockStatus.OK.getCode());
if (haveMoveTask) {
// 后续有移库
stock.setStockStatus(StockStatus.MOVE.getCode());
} else {
// 后续没有移库
stock.setStockStatus(StockStatus.OK.getCode());
}
stock.setLocationId(inTask.getDestination());
stock.setLastUpdateTime(LocalDateTime.now());
stock.setLastUpdateUser(inTask.getUserName());
stockService.update(stock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, stock.getStockId()));
}
stock.setLocationId(inTask.getDestination());
stock.setLastUpdateTime(LocalDateTime.now());
stock.setLastUpdateUser(inTask.getUserName());
stockService.update(stock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, stock.getStockId()));
});
}
// 当前载具
Vehicle currentVehicle = vehicleService.getOne(new LambdaQueryWrapper<Vehicle>().eq(Vehicle::getVehicleId, inTask.getVehicleId()).last("limit 1"));
if (currentVehicle == null) {
@ -902,6 +906,13 @@ public class TaskController {
BigDecimal realNum = stock.getGoodsRelated().getRemainNum();
List<ETaskData> eTaskDataList = new ArrayList<>();
for (WorkFlow tempWork : workFlows) {
if (tempWork.getLightStatus() != 0) {
// 不是未亮灯的状态
// 当次拣选数量
BigDecimal thisPickNum = realNum.compareTo(tempWork.getNeedNum().subtract(tempWork.getPickedNum())) > 0 ? tempWork.getNeedNum().subtract(tempWork.getPickedNum()) : realNum;
realNum = realNum.subtract(thisPickNum);
continue;
}
if (realNum.compareTo(BigDecimal.ZERO) <= 0) {// 当前物料数量不足
break;
}
@ -916,6 +927,7 @@ public class TaskController {
BigDecimal thisPickNum = realNum.compareTo(tempWork.getNeedNum().subtract(tempWork.getPickedNum())) > 0 ? tempWork.getNeedNum().subtract(tempWork.getPickedNum()) : realNum;
ETaskData eTaskData = new ETaskData();
eTaskData.setTaskId(tempWork.getWorkFlowId());// 用户查询对应的拣选任务
eTaskData.setETaskId(generateId("ETASK_"));
eTaskData.setGoodsId(tempWork.getGoodsId());
eTaskData.setGoodsName(goodsInfo != null ? goodsInfo.getGoodsName() : "");
eTaskData.setNeedNum(thisPickNum.intValue());
@ -934,79 +946,82 @@ public class TaskController {
realNum = realNum.subtract(thisPickNum);
}
}
// 发送亮灯
WcsETaskRequest wcsETaskRequest = new WcsETaskRequest();
wcsETaskRequest.setTaskGroup(generateId(vehicleId + "_"));
wcsETaskRequest.setTaskType(1);
wcsETaskRequest.setTaskData(eTaskDataList);
wcsETaskRequest.setOrderId(generateId(workQuery.getGoodsId() + "_"));
wcsETaskRequest.setVehicleNo(vehicleId);
String sendToWcsETaskUrl = configMap.get(ConfigMapKeyEnum.URL_WCS_E_TASK.getConfigKey());
if (StringUtils.isEmpty(sendToWcsETaskUrl)) {
// url地址为空
logger.error("向Wcs发送电子标签亮灯任务的地址为空");
throw new Exception("向Wcs发送电子标签亮灯任务的地址为空");
} else {
//
ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(sendToWcsETaskUrl, convertJsonString(wcsETaskRequest)), ResponseEntity.class);
if (result == null || !Objects.equals(result.getCode(), ResponseCode.OK.getCode())) {
logger.error("发送电子标签亮灯任务失败");
throw new Exception("发送电子标签亮灯任务失败");
if (!eTaskDataList.isEmpty()) {
// 发送亮灯
WcsETaskRequest wcsETaskRequest = new WcsETaskRequest();
wcsETaskRequest.setTaskGroup(generateId(vehicleId + "_"));
wcsETaskRequest.setTaskType(1);
wcsETaskRequest.setTaskData(eTaskDataList);
wcsETaskRequest.setOrderId(generateId(workQuery.getGoodsId() + "_"));
wcsETaskRequest.setVehicleNo(vehicleId);
String sendToWcsETaskUrl = configMap.get(ConfigMapKeyEnum.URL_WCS_E_TASK.getConfigKey());
if (StringUtils.isEmpty(sendToWcsETaskUrl)) {
// url地址为空
logger.error("向Wcs发送电子标签亮灯任务的地址为空");
throw new Exception("向Wcs发送电子标签亮灯任务的地址为空");
} else {
// 更新workFlow数据
workFlowService.updateBatchById(workFlows);
// 更新亮灯数据
etagLocationService.update(new LambdaUpdateWrapper<ETagLocation>()
.set(ETagLocation::getPickStatus, 1)
.set(ETagLocation::getTaskType, wcsETaskRequest.getTaskType())
.set(ETagLocation::getVehicleNo, wcsETaskRequest.getVehicleNo())
.in(ETagLocation::getELocationId, eTaskDataList.stream().map(ETaskData::getLocation).collect(Collectors.toList())));
// 更新站台数据
standService.update(new LambdaUpdateWrapper<Stand>()
.set(Stand::getPickGoods, workQuery.getGoodsId())
.set(Stand::getPickVehicle, vehicleId)
.eq(Stand::getStandId, standId));
// 生成前台VO
StandPickVo standPickVo = new StandPickVo();
standPickVo.setStandId(standId);
standPickVo.setGoodsId(workQuery.getGoodsId());
standPickVo.setPlanPickNum(originNum.subtract(realNum));
standPickVo.setRemainNumOrigin(realNum);
standPickVo.setRemainNumReal(realNum);
try {
// 获取当前站台已完成数量
List<WorkFlow> allWorkFlows = workFlowService.list();
int finishingRows = 0;
BigDecimal finishedCounts = BigDecimal.ZERO;
BigDecimal allCounts = BigDecimal.ZERO;
for (WorkFlow workFlow : allWorkFlows) {
if (workFlow.getWorkStatus() == 2) {
finishingRows++;
}
finishedCounts = finishedCounts.add(workFlow.getPickedNum());
allCounts = allCounts.add(workFlow.getNeedNum());
}
standPickVo.setFinishedRows(finishingRows);
standPickVo.setTotalRows(allWorkFlows.size());
standPickVo.setFinishedCounts(finishedCounts);
standPickVo.setTotalCounts(allCounts);
} catch (Exception e) {
logger.error("获取已完成数据报表失败,可能存在类型转换错误");
// 发送信息
logger.info("发送电子标签亮灯请求:{}", convertJsonString(wcsETaskRequest));
ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(sendToWcsETaskUrl, convertJsonString(wcsETaskRequest)), ResponseEntity.class);
if (result == null || !Objects.equals(result.getCode(), ResponseCode.OK.getCode())) {
logger.error("发送电子标签亮灯任务失败:{}", convertJsonString(result));
throw new Exception("发送电子标签亮灯任务失败");
} else {
// 更新workFlow数据
workFlowService.updateBatchById(workFlows);
// 更新亮灯数据
etagLocationService.update(new LambdaUpdateWrapper<ETagLocation>()
.set(ETagLocation::getPickStatus, 1)
.set(ETagLocation::getTaskType, wcsETaskRequest.getTaskType())
.set(ETagLocation::getVehicleNo, wcsETaskRequest.getVehicleNo())
.in(ETagLocation::getELocationId, eTaskDataList.stream().map(ETaskData::getLocation).collect(Collectors.toList())));
// 更新站台数据
standService.update(new LambdaUpdateWrapper<Stand>()
.set(Stand::getPickGoods, workQuery.getGoodsId())
.set(Stand::getPickVehicle, vehicleId)
.eq(Stand::getStandId, standId));
}
standPickVo.setRemark(goodsInfo != null ? goodsInfo.getUnpackingType() : "");
// 返回成功
response.setCode(ResponseCode.OK.getCode());
response.setMessage("获取工作信息成功");
response.setReturnData(standPickVo);
return convertJsonString(response);
}
}
// 生成前台VO
StandPickVo standPickVo = new StandPickVo();
standPickVo.setStandId(standId);
standPickVo.setGoodsId(workQuery.getGoodsId());
standPickVo.setPlanPickNum(originNum.subtract(realNum));
standPickVo.setRemainNumOrigin(realNum);
standPickVo.setRemainNumReal(realNum);
try {
// 获取当前站台已完成数量
List<WorkFlow> allWorkFlows = workFlowService.list();
int finishingRows = 0;
BigDecimal finishedCounts = BigDecimal.ZERO;
BigDecimal allCounts = BigDecimal.ZERO;
for (WorkFlow workFlow : allWorkFlows) {
if (workFlow.getWorkStatus() == 2) {
finishingRows++;
}
finishedCounts = finishedCounts.add(workFlow.getPickedNum());
allCounts = allCounts.add(workFlow.getNeedNum());
}
standPickVo.setFinishedRows(finishingRows);
standPickVo.setTotalRows(allWorkFlows.size());
standPickVo.setFinishedCounts(finishedCounts);
standPickVo.setTotalCounts(allCounts);
} catch (Exception e) {
logger.error("获取已完成数据报表失败,可能存在类型转换错误");
}
standPickVo.setRemark(goodsInfo != null ? goodsInfo.getUnpackingType() : "");
// 返回成功
response.setCode(ResponseCode.OK.getCode());
response.setMessage("获取工作信息成功");
response.setReturnData(standPickVo);
return convertJsonString(response);
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.error("获取工作信息异常:{}", convertJsonString(e));
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("获取工作信息异常");
response.setMessage("获取工作信息异常" + e.getMessage());
return convertJsonString(response);
}
}
@ -1120,6 +1135,22 @@ public class TaskController {
}
// 更新实际拣选数量
workFlow.setPickedNum(workFlow.getPickedNum().add(BigDecimal.valueOf(eTaskFeedbackRequest.getConfirmNum())));
if (eTaskFeedbackRequest.getConfirmNum().compareTo(eTaskFeedbackRequest.getNeedNum()) < 0) {
int diffNum = eTaskFeedbackRequest.getNeedNum() - eTaskFeedbackRequest.getConfirmNum();
// 查站台要料表---未分配以及分配但未完全分配
GoodsToStation goodsToStation = goodsToStationService.getOne(new LambdaQueryWrapper<GoodsToStation>()
.eq(GoodsToStation::getWorkStation, workFlow.getWorkStation())
.eq(GoodsToStation::getGoodsId, workFlow.getGoodsId())
.eq(GoodsToStation::getDistributeStatus, 0)
.or().eq(GoodsToStation::getDistributeStatus, 1)
.last("limit 1"));
if (goodsToStation != null) {
// 更新站台要料数量
goodsToStation.setDistributedNum(goodsToStation.getDistributedNum().subtract(BigDecimal.valueOf(diffNum)));
goodsToStation.setDistributeStatus(1);
goodsToStationService.updateById(goodsToStation);
}
}
if (workFlow.getPickedNum().compareTo(workFlow.getNeedNum()) < 0) {
// 判断后续有无物料进此站台
List<PickTask> pickedTasks = pickTaskService.list(new LambdaQueryWrapper<PickTask>()
@ -1129,25 +1160,8 @@ public class TaskController {
if (outsideVehiclesService.exists(new LambdaQueryWrapper<OutsideVehicles>()
.eq(OutsideVehicles::getGoodsId, workFlow.getGoodsId())
.in(OutsideVehicles::getVehicleId, vehicleIds))) {
workFlow.setLightStatus(1);// 亮灯
workFlow.setLightStatus(0);// 亮灯
workFlow.setWorkStatus(1);// 正在做
} else {
// 当前物料当前站台需求数量
BigDecimal needNum = workFlow.getNeedNum().subtract(workFlow.getPickedNum());
// 判断当前物料是否在流转中
needNum = wmsTaskService.callGoods(workFlow.getGoodsId(), needNum, workFlow.getWorkStation());
// 判断此时需求数量是否为0
if (needNum.compareTo(BigDecimal.ZERO) > 0) {
// 向库存请求
needNum = wmsTaskService.callStocks(workFlow.getGoodsId(), needNum, workFlow.getWorkStation());
}
if (needNum.compareTo(workFlow.getNeedNum().subtract(workFlow.getPickedNum())) == 0) {
workFlow.setLightStatus(2);// 已拍灯
workFlow.setWorkStatus(2);// 已完成
} else {
workFlow.setLightStatus(1);// 已亮灯
workFlow.setWorkStatus(1);// 正在做
}
}
} else {
workFlow.setLightStatus(2);// 已拍灯
@ -1270,24 +1284,33 @@ public class TaskController {
} else {
// 处理库存偏差
if (workConfirmRequest.getRemainNumReal().compareTo(workConfirmRequest.getRemainNumOrigin()) != 0) {
// TODO 这里库存的处理仍然需要完善
if (workConfirmRequest.getRemainNumReal().compareTo(BigDecimal.ZERO) == 0) {// 实际剩余数量为0
// 删除库存
stockService.remove(new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", workConfirmRequest.getGoodsId())
.eq(Stock::getVehicleId, pickTask.getVehicleId()));
//
} else {
// 更新库存数量
Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", workConfirmRequest.getGoodsId())
.eq(Stock::getVehicleId, pickTask.getVehicleId())
.last("limit 1"));
StockDetailInfo goodsRelated = existStock.getGoodsRelated();
goodsRelated.setRemainNum(workConfirmRequest.getRemainNumReal());
existStock.setGoodsRelated(goodsRelated);
Stock existStock = stockService.getOne(new LambdaQueryWrapper<Stock>()
.apply("goods_related -> '$.goodsId' = {0}", workConfirmRequest.getGoodsId())
.eq(Stock::getVehicleId, pickTask.getVehicleId())
.last("limit 1"));// 更新库存数量
if (existStock != null && existStock.getGoodsRelated() != null) {
StockDetailInfo goodsDetail = existStock.getGoodsRelated();
goodsDetail.setRemainNum(workConfirmRequest.getRemainNumReal());
existStock.setGoodsRelated(goodsDetail);
stockService.updateById(existStock);
}
OutsideVehicles currentGoodsVehicle = outsideVehiclesService.getOne(new LambdaQueryWrapper<OutsideVehicles>()
.eq(OutsideVehicles::getVehicleId, pickTask.getVehicleId())
.eq(OutsideVehicles::getGoodsId, workConfirmRequest.getGoodsId())
.last("limit 1"));
if (workConfirmRequest.getRemainNumReal().compareTo(BigDecimal.ZERO) == 0) {// 实际剩余数量为0
// 更新流转载具表剩余数量
if (currentGoodsVehicle != null) {
currentGoodsVehicle.setRemainNum(BigDecimal.ZERO);
outsideVehiclesService.updateById(currentGoodsVehicle);
}
} else {
// 更新流转载具表剩余数量
if (currentGoodsVehicle != null) {
currentGoodsVehicle.setRemainNum(currentGoodsVehicle.getRemainNum().add(workConfirmRequest.getRemainNumReal().subtract(workConfirmRequest.getRemainNumOrigin())));
outsideVehiclesService.updateById(currentGoodsVehicle);
}
}
}
// 查询当前载具上的流转中的物料
List<OutsideVehicles> outsideVehicles = outsideVehiclesService.list(new LambdaQueryWrapper<OutsideVehicles>()
@ -2114,6 +2137,7 @@ public class TaskController {
// 当次拣选数量
ETaskData eTaskData = new ETaskData();
eTaskData.setTaskId(generateId(smallBox + "_"));// 用户查询对应的拣选任务
eTaskData.setETaskId(generateId(smallBox + "_"));
eTaskData.setGoodsId(smallBox);
eTaskData.setGoodsName("");
eTaskData.setNeedNum(1);
@ -2140,10 +2164,10 @@ public class TaskController {
// url地址为空
logger.error("向Wcs发送电子标签亮灯任务的地址为空");
} else {
//
logger.info("发送电子标签亮灯请求:{}", convertJsonString(wcsETaskRequest));
ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(sendToWcsETaskUrl, convertJsonString(wcsETaskRequest)), ResponseEntity.class);
if (result == null || !Objects.equals(result.getCode(), ResponseCode.OK.getCode())) {
logger.error("发送电子标签亮灯任务失败");
logger.error("发送电子标签亮灯任务失败{}", convertJsonString(result));
throw new Exception("发送电子标签亮灯任务失败");
} else {
// 更新亮灯数据

View File

@ -1,14 +1,21 @@
package com.wms.controller;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.auth0.jwt.JWT;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wms.annotation.MyLog;
import com.wms.constants.enums.ResponseCode;
import com.wms.entity.app.dto.KateUser;
import com.wms.entity.app.dto.MenuDto;
import com.wms.entity.app.dto.UserDto;
import com.wms.entity.app.request.UserQuery;
import com.wms.entity.app.vo.MenuEntity;
import com.wms.entity.app.ResponseEntity;
import com.wms.entity.app.vo.UserConfigEntity;
import com.wms.entity.table.User;
import com.wms.service.MenuService;
import com.wms.service.StandService;
import com.wms.service.UserService;
@ -158,6 +165,71 @@ public class UserController {
}
}
/**
* 获得用户信息菜单
* @param codeInfo code信息
* @return 结果
*/
@PostMapping("/getUser")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
@MyLog(logTitle = "获得用户信息菜单", logMethod = "getUser")
public String getUser(@RequestBody JSONObject codeInfo) {
logger.info("卡特账号请求登录,登录信息:{}登录ip{}", convertJsonString(codeInfo), HttpUtils.getIpAddr(servletRequest));
// 响应信息
ResponseEntity rsp = new ResponseEntity();
String idToken = codeInfo.getString("id_token");
logger.info("卡特登录回调idToken{}", idToken);
if (StringUtils.isEmpty(idToken)) {
logger.error("ID_TOKEN为空");
// 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("ID_TOKEN为空");
return JSON.toJSONString(rsp);
}
try {
// 解码token
DecodedJWT decodedJWT = JWT.decode(idToken);
// 创建用户信息
KateUser kateUser = new KateUser();
kateUser.setName(decodedJWT.getClaim("name").asString());
kateUser.setGroups(decodedJWT.getClaim("groups").asList(String.class));
// 卡特用户信息映射本地用户信息
User newUser = new User();
newUser.setUserName(kateUser.getName());
List<User> localUsers = userService.list(new LambdaQueryWrapper<User>()
.eq(User::getUserName, kateUser.getName()));
if (localUsers.size() > 0) {// 本地存在
newUser.setRoleId(localUsers.get(0).getRoleId());
} else {
if (kateUser.getGroups().contains("CXL-ASRS-Admin")) {// 普通用户
newUser.setRoleId(1);
} else if (kateUser.getGroups().contains("CXL-ASRS-User")) {
newUser.setRoleId(2);
} else {
logger.error("当前用户不被允许登录:{}", newUser.getUserName());
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("当前用户不被允许登录");
return JSON.toJSONString(rsp);
}
}
// 返回成功
logger.info("登录成功,登录用户:{}", newUser.getUserName());
rsp.setCode(ResponseCode.OK.getCode());
rsp.setMessage("登录成功");
// 返回用户数据
rsp.setReturnData(generateUserInfo(BeanUtil.copyProperties(newUser, UserDto.class), HttpUtils.getIpAddr(servletRequest)));
} catch (Exception exception) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.error(exception.getMessage());
// 返回其他异常
rsp.setCode(ResponseCode.ERROR.getCode());
rsp.setMessage("构建用户及菜单错误");
}
return JSON.toJSONString(rsp);
}
/**
* 构造用户信息菜单按钮等权限
* @param currentUser 当前用户

View File

@ -0,0 +1,14 @@
package com.wms.entity.app.dto;
import lombok.Data;
import java.util.List;
/**
* 卡特用户组
*/
@Data
public class KateUser {
private String name;
private List<String> groups;
}

View File

@ -15,6 +15,11 @@ public class ETaskData extends BaseWcsRequest {
*/
@JsonProperty("taskId")
private String taskId;
/**
* 任务号
*/
@JsonProperty("eTaskId")
private String eTaskId;
/**
* 点位
*/

View File

@ -3,6 +3,7 @@ package com.wms.service.business.serviceImplements;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.wms.constants.enums.ConfigMapKeyEnum;
import com.wms.constants.enums.StockStatus;
import com.wms.entity.app.dto.WorkCenterAndOrderDto;
import com.wms.entity.table.*;
import com.wms.service.*;
@ -40,6 +41,7 @@ public class WorkServiceImplements implements IWorkService {
private final OutsideVehiclesService outsideVehiclesService;// 流转中的箱子服务
private final WorkSummaryService workSummaryService;// 工作总结服务
private final ELocationConfigLastService eLocationConfigLastService;// 上一次标签配置的服务
private final StockService stockService;// 库存服务
private final IWmsTaskService wmsTaskService;
private final List<String> workCreatingStations = new ArrayList<>();// 当前正在创建任务的站台
private final List<String> workDoingStations = new ArrayList<>();// 当前正在执行任务的站台
@ -174,11 +176,10 @@ public class WorkServiceImplements implements IWorkService {
workDoingStations.add(workStation);
}
try {
// TODO 分配任务
// 查找当前站台未开始的工作流
List<WorkFlow> currentWorkFlowList = workFlowService.list(new LambdaQueryWrapper<WorkFlow>()
.eq(WorkFlow::getWorkStation, workStation)
.eq(WorkFlow::getWorkStatus, 0));
.ne(WorkFlow::getWorkStatus, 2));
// 没有可做的任务
if (currentWorkFlowList == null || currentWorkFlowList.isEmpty()) {
return;
@ -188,9 +189,33 @@ public class WorkServiceImplements implements IWorkService {
.eq(GoodsToStation::getWorkStation, workStation)
.eq(GoodsToStation::getDistributeStatus, 0)
.or().eq(GoodsToStation::getDistributeStatus, 1));
if (goodsToStationList == null || goodsToStationList.isEmpty()) {
// 更新工作流状态-->完成
List<String> workFlowIds = currentWorkFlowList.stream().map(WorkFlow::getWorkFlowId).distinct().toList();
workFlowService.update(new LambdaUpdateWrapper<WorkFlow>()
.set(WorkFlow::getWorkStatus, 2)
.set(WorkFlow::getFinishTime, LocalDateTime.now())
.set(WorkFlow::getOpUser, "库存等原因,系统自动完成")
.in(WorkFlow::getWorkFlowId, workFlowIds)
.ne(WorkFlow::getWorkStatus, 2));
return;
}
for (GoodsToStation goodsToStation : goodsToStationList) {
// 当前物料当前站台需求数量
BigDecimal needNum = goodsToStation.getTotalNum().subtract(goodsToStation.getDistributedNum());
if (needNum.compareTo(BigDecimal.ZERO) == 0) {
// 需求数量为0
continue;
}
// 判断实际库存是否充足
List<Stock> stockList = stockService.list(new LambdaQueryWrapper<Stock>()
.eq(Stock::getStockStatus, StockStatus.OK.getCode())
.apply("goods_related ->> '$.goodsId' = {0}", goodsToStation.getGoodsId())
.apply("goods_related ->> '$.remainNum' > 0", goodsToStation.getGoodsId()));
if (stockList == null || stockList.isEmpty()) {
goodsToStation.setDistributeStatus(3);
continue;
}
// 判断当前物料是否在流转中
needNum = wmsTaskService.callGoods(goodsToStation.getGoodsId(), needNum, workStation);
// 判断此时需求数量是否为0
@ -201,7 +226,7 @@ public class WorkServiceImplements implements IWorkService {
needNum = wmsTaskService.callStocks(goodsToStation.getGoodsId(), needNum, workStation);
if (needNum.compareTo(BigDecimal.ZERO) > 0) {
// 分配完成但库存缺料
goodsToStation.setDistributeStatus(3);
goodsToStation.setDistributeStatus(1);
}
}
// 更新已分配数量
@ -211,6 +236,8 @@ public class WorkServiceImplements implements IWorkService {
// 更新工作流状态
List<String> workFlowIds = currentWorkFlowList.stream().map(WorkFlow::getWorkFlowId).distinct().toList();
List<String> orderIds = currentWorkFlowList.stream().map(WorkFlow::getOrderId).distinct().toList();
List<String> goodsIds = currentWorkFlowList.stream().map(WorkFlow::getGoodsId).distinct().toList();
List<String> smallBoxes = currentWorkFlowList.stream().map(WorkFlow::getWorkCenter).distinct().toList();
workFlowService.update(new LambdaUpdateWrapper<WorkFlow>()
.set(WorkFlow::getWorkStatus, 1)
.in(WorkFlow::getWorkFlowId, workFlowIds)
@ -219,6 +246,8 @@ public class WorkServiceImplements implements IWorkService {
kateOrdersService.update(new LambdaUpdateWrapper<KateOrders>()
.set(KateOrders::getOrderStatus, 2)
.in(KateOrders::getOrderId, orderIds)
.in(KateOrders::getGoodsId, goodsIds)
.in(KateOrders::getSupplyArea, smallBoxes)
.eq(KateOrders::getOrderStatus, 1));
} catch (Exception e) {
logger.error("执行站台:{}工作发生异常:{}", workStation, convertJsonString(e));