代码更新:
1.调整亮灯及要料逻辑 2.增加卡特登录功能
This commit is contained in:
parent
36fcf6e326
commit
1592fea84d
|
|
@ -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 {
|
||||||
// 更新亮灯数据
|
// 更新亮灯数据
|
||||||
|
|
|
||||||
|
|
@ -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 当前用户
|
||||||
|
|
|
||||||
14
src/main/java/com/wms/entity/app/dto/KateUser.java
Normal file
14
src/main/java/com/wms/entity/app/dto/KateUser.java
Normal 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;
|
||||||
|
}
|
||||||
|
|
@ -15,6 +15,11 @@ public class ETaskData extends BaseWcsRequest {
|
||||||
*/
|
*/
|
||||||
@JsonProperty("taskId")
|
@JsonProperty("taskId")
|
||||||
private String taskId;
|
private String taskId;
|
||||||
|
/**
|
||||||
|
* 任务号
|
||||||
|
*/
|
||||||
|
@JsonProperty("eTaskId")
|
||||||
|
private String eTaskId;
|
||||||
/**
|
/**
|
||||||
* 点位
|
* 点位
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user