代码更新:

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

View File

@ -1,14 +1,21 @@
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.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.annotation.MyLog;
import com.wms.constants.enums.ResponseCode; 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.MenuDto;
import com.wms.entity.app.dto.UserDto; import com.wms.entity.app.dto.UserDto;
import com.wms.entity.app.request.UserQuery; import com.wms.entity.app.request.UserQuery;
import com.wms.entity.app.vo.MenuEntity; import com.wms.entity.app.vo.MenuEntity;
import com.wms.entity.app.ResponseEntity; import com.wms.entity.app.ResponseEntity;
import com.wms.entity.app.vo.UserConfigEntity; import com.wms.entity.app.vo.UserConfigEntity;
import com.wms.entity.table.User;
import com.wms.service.MenuService; import com.wms.service.MenuService;
import com.wms.service.StandService; import com.wms.service.StandService;
import com.wms.service.UserService; 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 当前用户 * @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") @JsonProperty("taskId")
private String 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.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.wms.constants.enums.ConfigMapKeyEnum; import com.wms.constants.enums.ConfigMapKeyEnum;
import com.wms.constants.enums.StockStatus;
import com.wms.entity.app.dto.WorkCenterAndOrderDto; import com.wms.entity.app.dto.WorkCenterAndOrderDto;
import com.wms.entity.table.*; import com.wms.entity.table.*;
import com.wms.service.*; import com.wms.service.*;
@ -40,6 +41,7 @@ public class WorkServiceImplements implements IWorkService {
private final OutsideVehiclesService outsideVehiclesService;// 流转中的箱子服务 private final OutsideVehiclesService outsideVehiclesService;// 流转中的箱子服务
private final WorkSummaryService workSummaryService;// 工作总结服务 private final WorkSummaryService workSummaryService;// 工作总结服务
private final ELocationConfigLastService eLocationConfigLastService;// 上一次标签配置的服务 private final ELocationConfigLastService eLocationConfigLastService;// 上一次标签配置的服务
private final StockService stockService;// 库存服务
private final IWmsTaskService wmsTaskService; private final IWmsTaskService wmsTaskService;
private final List<String> workCreatingStations = new ArrayList<>();// 当前正在创建任务的站台 private final List<String> workCreatingStations = new ArrayList<>();// 当前正在创建任务的站台
private final List<String> workDoingStations = new ArrayList<>();// 当前正在执行任务的站台 private final List<String> workDoingStations = new ArrayList<>();// 当前正在执行任务的站台
@ -174,11 +176,10 @@ public class WorkServiceImplements implements IWorkService {
workDoingStations.add(workStation); workDoingStations.add(workStation);
} }
try { try {
// TODO 分配任务
// 查找当前站台未开始的工作流 // 查找当前站台未开始的工作流
List<WorkFlow> currentWorkFlowList = workFlowService.list(new LambdaQueryWrapper<WorkFlow>() List<WorkFlow> currentWorkFlowList = workFlowService.list(new LambdaQueryWrapper<WorkFlow>()
.eq(WorkFlow::getWorkStation, workStation) .eq(WorkFlow::getWorkStation, workStation)
.eq(WorkFlow::getWorkStatus, 0)); .ne(WorkFlow::getWorkStatus, 2));
// 没有可做的任务 // 没有可做的任务
if (currentWorkFlowList == null || currentWorkFlowList.isEmpty()) { if (currentWorkFlowList == null || currentWorkFlowList.isEmpty()) {
return; return;
@ -188,9 +189,33 @@ public class WorkServiceImplements implements IWorkService {
.eq(GoodsToStation::getWorkStation, workStation) .eq(GoodsToStation::getWorkStation, workStation)
.eq(GoodsToStation::getDistributeStatus, 0) .eq(GoodsToStation::getDistributeStatus, 0)
.or().eq(GoodsToStation::getDistributeStatus, 1)); .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) { for (GoodsToStation goodsToStation : goodsToStationList) {
// 当前物料当前站台需求数量 // 当前物料当前站台需求数量
BigDecimal needNum = goodsToStation.getTotalNum().subtract(goodsToStation.getDistributedNum()); 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); needNum = wmsTaskService.callGoods(goodsToStation.getGoodsId(), needNum, workStation);
// 判断此时需求数量是否为0 // 判断此时需求数量是否为0
@ -201,7 +226,7 @@ public class WorkServiceImplements implements IWorkService {
needNum = wmsTaskService.callStocks(goodsToStation.getGoodsId(), needNum, workStation); needNum = wmsTaskService.callStocks(goodsToStation.getGoodsId(), needNum, workStation);
if (needNum.compareTo(BigDecimal.ZERO) > 0) { 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> workFlowIds = currentWorkFlowList.stream().map(WorkFlow::getWorkFlowId).distinct().toList();
List<String> orderIds = currentWorkFlowList.stream().map(WorkFlow::getOrderId).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>() workFlowService.update(new LambdaUpdateWrapper<WorkFlow>()
.set(WorkFlow::getWorkStatus, 1) .set(WorkFlow::getWorkStatus, 1)
.in(WorkFlow::getWorkFlowId, workFlowIds) .in(WorkFlow::getWorkFlowId, workFlowIds)
@ -219,6 +246,8 @@ public class WorkServiceImplements implements IWorkService {
kateOrdersService.update(new LambdaUpdateWrapper<KateOrders>() kateOrdersService.update(new LambdaUpdateWrapper<KateOrders>()
.set(KateOrders::getOrderStatus, 2) .set(KateOrders::getOrderStatus, 2)
.in(KateOrders::getOrderId, orderIds) .in(KateOrders::getOrderId, orderIds)
.in(KateOrders::getGoodsId, goodsIds)
.in(KateOrders::getSupplyArea, smallBoxes)
.eq(KateOrders::getOrderStatus, 1)); .eq(KateOrders::getOrderStatus, 1));
} catch (Exception e) { } catch (Exception e) {
logger.error("执行站台:{}工作发生异常:{}", workStation, convertJsonString(e)); logger.error("执行站台:{}工作发生异常:{}", workStation, convertJsonString(e));