代码更新:
1. 调整下发任务逻辑 2. 调整非计划领料
This commit is contained in:
parent
e734e21174
commit
3b25a93b5e
|
|
@ -82,8 +82,10 @@ public class MyLogAspect {
|
|||
}
|
||||
wmsLog.setLogTime(LocalDateTime.now());
|
||||
// 获取用户名
|
||||
Method methodToGetUserName = wmsLog.getLogRequest().getClass().getMethod("getUserName");
|
||||
wmsLog.setLogUser((String) methodToGetUserName.invoke(wmsLog.getLogRequest(), new Object[]{}));
|
||||
if (wmsLog.getLogRequest() != null) {
|
||||
Method methodToGetUserName = wmsLog.getLogRequest().getClass().getMethod("getUserName");
|
||||
wmsLog.setLogUser((String) methodToGetUserName.invoke(wmsLog.getLogRequest(), new Object[]{}));
|
||||
}
|
||||
logService.save(wmsLog);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
|
@ -125,8 +127,10 @@ public class MyLogAspect {
|
|||
}
|
||||
wmsLog.setLogTime(LocalDateTime.now());
|
||||
// 获取用户名
|
||||
Method methodToGetUserName = wmsLog.getLogRequest().getClass().getMethod("getUserName");
|
||||
wmsLog.setLogUser((String) methodToGetUserName.invoke(wmsLog.getLogRequest(), new Object[]{}));
|
||||
if (wmsLog.getLogRequest() != null) {
|
||||
Method methodToGetUserName = wmsLog.getLogRequest().getClass().getMethod("getUserName");
|
||||
wmsLog.setLogUser((String) methodToGetUserName.invoke(wmsLog.getLogRequest(), new Object[]{}));
|
||||
}
|
||||
logService.save(wmsLog);
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
package com.wms.constants.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum StockUpdateReasonEnum {
|
||||
UPDATE_CLIENT("界面修改库存"),
|
||||
DELETE_CLIENT("界面删除库存"),
|
||||
ADD_CLIENT("界面增加库存"),
|
||||
UPDATE_IN("入库更新库存"),
|
||||
ADD_IN("入库增加库存"),
|
||||
FULL_OUT("整出"),
|
||||
KITTING_UPDATE("备料拣选更新"),
|
||||
CONFIRM_UPDATE("站台确认更新"),
|
||||
CONFIRM_DELETE("站台处理箱料错误"),
|
||||
CLC_NO_PLAN_UPDATE("直接物料非计划领料回库更新");
|
||||
|
||||
StockUpdateReasonEnum(String reason) {
|
||||
this.reason = reason;
|
||||
}
|
||||
|
||||
private final String reason;
|
||||
}
|
||||
|
|
@ -369,7 +369,7 @@ public class ExcelController {
|
|||
// 目标数量
|
||||
BigDecimal targetNum = stockOfGoodsDto.getNumOfKanban().multiply(stockOfGoodsDto.getNumOfPerKanban());
|
||||
// 计算需要多少个看板
|
||||
BigDecimal needKanbanQuantity = targetNum.subtract(stockOfGoodsDto.getRemainNumSum()).divide(stockOfGoodsDto.getNumOfPerKanban(), 0, RoundingMode.CEILING);
|
||||
BigDecimal needKanbanQuantity = targetNum.subtract(stockOfGoodsDto.getRemainNumSum()).divide(stockOfGoodsDto.getNumOfPerKanban(), 0, RoundingMode.FLOOR);
|
||||
// 设定物流数据
|
||||
tempClcKanbanRequirementExcelVo.setGoodsId(stockOfGoodsDto.getGoodsId());
|
||||
tempClcKanbanRequirementExcelVo.setReleasePoint(stockOfGoodsDto.getReleasePoint());
|
||||
|
|
|
|||
|
|
@ -67,6 +67,10 @@ public class KateWorkQueryController {
|
|||
* 工作流服务
|
||||
*/
|
||||
private final WorkFlowService workFlowService;
|
||||
/**
|
||||
* 工作总结服务
|
||||
*/
|
||||
private final WorkSummaryService workSummaryService;
|
||||
/**
|
||||
* 请求头部信息
|
||||
*/
|
||||
|
|
@ -487,7 +491,7 @@ public class KateWorkQueryController {
|
|||
TotalNumOfType = TotalNumOfType.add(BigDecimal.ONE);
|
||||
BigDecimal targetNum = stockOfGoodsDto.getNumOfKanban().multiply(stockOfGoodsDto.getNumOfPerKanban());
|
||||
// 计算需要多少个看板
|
||||
BigDecimal needKanbanQuantity = targetNum.subtract(stockOfGoodsDto.getRemainNumSum()).divide(stockOfGoodsDto.getNumOfPerKanban(), 0, RoundingMode.CEILING);
|
||||
BigDecimal needKanbanQuantity = targetNum.subtract(stockOfGoodsDto.getRemainNumSum()).divide(stockOfGoodsDto.getNumOfPerKanban(), 0, RoundingMode.FLOOR);
|
||||
TotalNumOfPc = TotalNumOfPc.add(needKanbanQuantity.multiply(stockOfGoodsDto.getNumOfPerKanban()));
|
||||
TotalNumOfBox = TotalNumOfBox.add(needKanbanQuantity);
|
||||
if (stockOfGoodsDto.getBoxType().contains("810")) {
|
||||
|
|
@ -621,4 +625,39 @@ public class KateWorkQueryController {
|
|||
return convertJsonString(rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询工作总结
|
||||
*/
|
||||
@PostMapping("/getWorkSummary")
|
||||
@ResponseBody
|
||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||
@MyLog(logTitle = "查询工作总结", logMethod = "getWorkSummary")
|
||||
public String getWorkSummary(@RequestBody WorkSummaryQuery workSummaryQuery) {
|
||||
logger.info("接收到查询工作总结请求:{},请求ip:{}", convertJsonString(workSummaryQuery), HttpUtils.getIpAddr(servletRequest));
|
||||
ResponseEntity response = new ResponseEntity();
|
||||
try {
|
||||
Page<WorkSummary> page = workSummaryQuery.toMpPage();
|
||||
Page<WorkSummary> workSummaryPage = workSummaryService.page(page, new LambdaQueryWrapper<WorkSummary>()
|
||||
.eq(workSummaryQuery.getLackStatus() != null, WorkSummary::getLackStatus, workSummaryQuery.getLackStatus())
|
||||
.eq(workSummaryQuery.getWorkDate() != null, WorkSummary::getWorkDate, workSummaryQuery.getWorkDate())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getWorkStation()), WorkSummary::getWorkStation, workSummaryQuery.getWorkStation())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getWorkOrder()), WorkSummary::getWorkOrder, workSummaryQuery.getWorkOrder())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getWorkCenter()), WorkSummary::getWorkCenter, workSummaryQuery.getWorkCenter())
|
||||
.like(StringUtils.isNotEmpty(workSummaryQuery.getGoodsId()), WorkSummary::getGoodsId, workSummaryQuery.getGoodsId()));
|
||||
PageDto<WorkSummaryVo> pageDto = PageDto.of(workSummaryPage, workSummary -> BeanUtil.copyProperties(workSummary, WorkSummaryVo.class));
|
||||
logger.info("查询工作总结成功。");
|
||||
response.setCode(ResponseCode.OK.getCode());
|
||||
response.setMessage("查询工作总结成功。");
|
||||
response.setReturnData(pageDto);
|
||||
return convertJsonString(response);
|
||||
} catch (Exception e) {
|
||||
// 回滚事务
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
logger.error("查询工作总结发生异常:{}", convertJsonString(e));
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("查询工作总结发生异常");
|
||||
return convertJsonString(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7,15 +7,18 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wms.annotation.MyLog;
|
||||
import com.wms.constants.enums.ResponseCode;
|
||||
import com.wms.constants.enums.StockUpdateReasonEnum;
|
||||
import com.wms.entity.app.ResponseEntity;
|
||||
import com.wms.entity.app.dto.PageDto;
|
||||
import com.wms.entity.app.dto.StockDto;
|
||||
import com.wms.entity.app.dto.extend.StockDetailInfo;
|
||||
import com.wms.entity.app.request.StockQuery;
|
||||
import com.wms.entity.app.request.StockUpdateRecordQuery;
|
||||
import com.wms.entity.app.request.WorkSummaryQuery;
|
||||
import com.wms.entity.app.vo.StockUpdateRecordVo;
|
||||
import com.wms.entity.app.vo.StockVo;
|
||||
import com.wms.entity.table.Location;
|
||||
import com.wms.entity.table.Stock;
|
||||
import com.wms.entity.table.Vehicle;
|
||||
import com.wms.entity.app.vo.WorkSummaryVo;
|
||||
import com.wms.entity.table.*;
|
||||
import com.wms.service.IStockUpdateRecordService;
|
||||
import com.wms.service.LocationService;
|
||||
import com.wms.service.StockService;
|
||||
|
|
@ -195,7 +198,7 @@ public class StockController {
|
|||
.eq(Vehicle::getVehicleId, stockBefore.getVehicleId())
|
||||
.eq(Vehicle::getIsEmpty, 0));
|
||||
}
|
||||
stockUpdateRecordService.addStockUpdateRecord(stockBefore, null, "删除库存", stockQuery.getUserName());
|
||||
stockUpdateRecordService.addStockUpdateRecord(stockBefore, null, StockUpdateReasonEnum.DELETE_CLIENT.getReason(), stockQuery.getUserName());
|
||||
// 返回成功
|
||||
logger.info("数量为0,删除库存成功");
|
||||
rsp.setCode(ResponseCode.OK.getCode());
|
||||
|
|
@ -223,7 +226,7 @@ public class StockController {
|
|||
}
|
||||
// 更新库存
|
||||
if (stockService.update(updatingStock, stockLambdaQueryWrapper)) {
|
||||
stockUpdateRecordService.addStockUpdateRecord(stockBefore, updatingStock, "修改库存", stockQuery.getUserName());
|
||||
stockUpdateRecordService.addStockUpdateRecord(stockBefore, updatingStock, StockUpdateReasonEnum.UPDATE_CLIENT.getReason(), stockQuery.getUserName());
|
||||
// 返回成功
|
||||
logger.info("更新库存信息成功");
|
||||
rsp.setCode(ResponseCode.OK.getCode());
|
||||
|
|
@ -272,7 +275,7 @@ public class StockController {
|
|||
.set(Vehicle::getIsEmpty, 0)
|
||||
.eq(Vehicle::getVehicleId, stockPo.getVehicleId())
|
||||
.eq(Vehicle::getIsEmpty, 1));
|
||||
stockUpdateRecordService.addStockUpdateRecord(null, stockPo, "新增库存", stockQuery.getUserName());
|
||||
stockUpdateRecordService.addStockUpdateRecord(null, stockPo, StockUpdateReasonEnum.ADD_CLIENT.getReason(), stockQuery.getUserName());
|
||||
// 返回成功
|
||||
logger.info("添加库存信息成功");
|
||||
rsp.setCode(ResponseCode.OK.getCode());
|
||||
|
|
@ -294,4 +297,39 @@ public class StockController {
|
|||
return convertJsonString(rsp);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询库存更新记录
|
||||
* @param stockUpdateRecordQuery 记录查询参数
|
||||
* @return 查询结果
|
||||
*/
|
||||
@PostMapping("/getStockUpdateRecord")
|
||||
@ResponseBody
|
||||
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
|
||||
@MyLog(logTitle = "查询库存更新记录", logMethod = "getStockUpdateRecord")
|
||||
public String getStockUpdateRecord(@RequestBody StockUpdateRecordQuery stockUpdateRecordQuery) {
|
||||
logger.info("接收到查询库存更新记录请求:{},请求ip:{}", convertJsonString(stockUpdateRecordQuery), HttpUtils.getIpAddr(servletRequest));
|
||||
ResponseEntity response = new ResponseEntity();
|
||||
try {
|
||||
Page<StockUpdateRecord> page = stockUpdateRecordQuery.toMpPage();
|
||||
Page<StockUpdateRecord> recordsPage = stockUpdateRecordService.page(page, new LambdaQueryWrapper<StockUpdateRecord>()
|
||||
.like(StringUtils.isNotEmpty(stockUpdateRecordQuery.getReason()), StockUpdateRecord::getReason, stockUpdateRecordQuery.getReason())
|
||||
.like(StringUtils.isNotEmpty(stockUpdateRecordQuery.getVehicleId()), StockUpdateRecord::getVehicleId, stockUpdateRecordQuery.getVehicleId())
|
||||
.like(StringUtils.isNotEmpty(stockUpdateRecordQuery.getGoodsId()), StockUpdateRecord::getGoodsId, stockUpdateRecordQuery.getGoodsId())
|
||||
.orderByDesc(StockUpdateRecord::getUpdateTime));
|
||||
PageDto<StockUpdateRecordVo> pageDto = PageDto.of(recordsPage, updateRecord -> BeanUtil.copyProperties(updateRecord, StockUpdateRecordVo.class));
|
||||
logger.info("查询库存更新记录成功。");
|
||||
response.setCode(ResponseCode.OK.getCode());
|
||||
response.setMessage("查询库存更新记录成功。");
|
||||
response.setReturnData(pageDto);
|
||||
return convertJsonString(response);
|
||||
} catch (Exception e) {
|
||||
// 回滚事务
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
logger.error("查询库存更新记录发生异常:{}", convertJsonString(e));
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("查询库存更新记录发生异常");
|
||||
return convertJsonString(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -341,7 +341,7 @@ public class TaskController {
|
|||
existStock.getGoodsRelated().setRemainNum(existStock.getGoodsRelated().getRemainNum().add(inTask.getGoodsRelated().getOpNum()));
|
||||
existStock.getGoodsRelated().setTotalNum(existStock.getGoodsRelated().getTotalNum().add(inTask.getGoodsRelated().getOpNum()));
|
||||
stockService.update(existStock, new LambdaUpdateWrapper<Stock>().eq(Stock::getStockId, existStock.getStockId()));
|
||||
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, "入库", inTask.getUserName());
|
||||
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, StockUpdateReasonEnum.UPDATE_IN.getReason(), inTask.getUserName());
|
||||
} else {
|
||||
Stock newStock = new Stock();
|
||||
newStock.setStockId(generateId("ST_"));
|
||||
|
|
@ -359,7 +359,7 @@ public class TaskController {
|
|||
detailInfo.setTotalNum(inTask.getGoodsRelated().getOpNum());
|
||||
newStock.setGoodsRelated(detailInfo);
|
||||
stockService.save(newStock);
|
||||
stockUpdateRecordService.addStockUpdateRecord(null, newStock, "入库", inTask.getUserName());
|
||||
stockUpdateRecordService.addStockUpdateRecord(null, newStock, StockUpdateReasonEnum.ADD_IN.getReason(), inTask.getUserName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -461,7 +461,7 @@ public class TaskController {
|
|||
// 删除当前载具上所有库存
|
||||
List<Stock> removeStocks = stockService.list(new LambdaQueryWrapper<Stock>().eq(Stock::getVehicleId, outTask.getVehicleId()));
|
||||
for (Stock stock : removeStocks) {
|
||||
stockUpdateRecordService.addStockUpdateRecord(stock, null, "整出", outTask.getUserName());
|
||||
stockUpdateRecordService.addStockUpdateRecord(stock, null, StockUpdateReasonEnum.FULL_OUT.getReason(), outTask.getUserName());
|
||||
}
|
||||
stockService.remove(new LambdaQueryWrapper<Stock>().eq(Stock::getVehicleId, outTask.getVehicleId()));
|
||||
// 删除载具
|
||||
|
|
@ -1242,7 +1242,7 @@ public class TaskController {
|
|||
goodsDetail.setRemainNum(goodsDetail.getRemainNum().subtract(BigDecimal.valueOf(eTaskFeedbackRequest.getConfirmNum())));
|
||||
existStock.setGoodsRelated(goodsDetail);
|
||||
stockService.updateById(existStock);
|
||||
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, "备料拣选更新", "电子标签灯光反馈");
|
||||
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, StockUpdateReasonEnum.KITTING_UPDATE.getReason(), "电子标签灯光反馈");
|
||||
}
|
||||
// 更新电子标签库位信息
|
||||
etagLocationService.update(new LambdaUpdateWrapper<ETagLocation>()
|
||||
|
|
@ -1263,6 +1263,15 @@ public class TaskController {
|
|||
eLocationConfigLast.setBoxStatus(2);
|
||||
eLocationConfigLastService.updateById(eLocationConfigLast);
|
||||
}
|
||||
// 更新电子标签库位信息
|
||||
etagLocationService.update(new LambdaUpdateWrapper<ETagLocation>()
|
||||
.set(ETagLocation::getPickStatus, 0)
|
||||
.set(ETagLocation::getTaskId, "")
|
||||
.set(ETagLocation::getVehicleNo, "")
|
||||
.set(ETagLocation::getTaskType, null)
|
||||
.set(ETagLocation::getNeedNum, null)
|
||||
.set(ETagLocation::getConfirmNum, null)
|
||||
.eq(ETagLocation::getELocationId, eTaskFeedbackRequest.getLocation()));
|
||||
}
|
||||
response.setCode(ResponseCode.OK.getCode());
|
||||
response.setMessage("处理反馈成功");
|
||||
|
|
@ -1358,7 +1367,7 @@ public class TaskController {
|
|||
goodsDetail.setRemainNum(workConfirmRequest.getRemainNumReal());
|
||||
existStock.setGoodsRelated(goodsDetail);
|
||||
stockService.updateById(existStock);
|
||||
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, "站台确认更新", workConfirmRequest.getUserName());
|
||||
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, StockUpdateReasonEnum.CONFIRM_UPDATE.getReason(), workConfirmRequest.getUserName());
|
||||
}
|
||||
OutsideVehicles currentGoodsVehicle = outsideVehiclesService.getOne(new LambdaQueryWrapper<OutsideVehicles>()
|
||||
.eq(OutsideVehicles::getVehicleId, pickTask.getVehicleId())
|
||||
|
|
@ -1428,6 +1437,7 @@ public class TaskController {
|
|||
.set(Stand::getPickVehicle, "")
|
||||
.set(Stand::getPickGoods, "")
|
||||
.set(Stand::getPickTip, "")
|
||||
.setDecrBy(Stand::getPickVehicleCount, 1)
|
||||
.eq(Stand::getStandId, standId));
|
||||
response.setMessage("确认成功,放行");
|
||||
} else {
|
||||
|
|
@ -1436,6 +1446,7 @@ public class TaskController {
|
|||
.set(Stand::getPickVehicle, "")
|
||||
.set(Stand::getPickGoods, "")
|
||||
.set(Stand::getPickTip, "当前工作已经全部完成,请至完成界面进行后续工作。")
|
||||
.setDecrBy(Stand::getPickVehicleCount, 1)
|
||||
.eq(Stand::getStandId, standId));
|
||||
StandPickVo pickVoEntity = new StandPickVo();
|
||||
pickVoEntity.setTip("当前工作已经全部完成,请至完成界面进行后续工作。");
|
||||
|
|
@ -1464,6 +1475,7 @@ public class TaskController {
|
|||
.set(Stand::getPickVehicle, "")
|
||||
.set(Stand::getPickGoods, "")
|
||||
.set(Stand::getPickTip, "")
|
||||
.setDecrBy(Stand::getPickVehicleCount, 1)
|
||||
.eq(Stand::getStandId, standId));
|
||||
response.setMessage("确认成功,放行");
|
||||
} else {
|
||||
|
|
@ -1472,6 +1484,7 @@ public class TaskController {
|
|||
.set(Stand::getPickVehicle, "")
|
||||
.set(Stand::getPickGoods, "")
|
||||
.set(Stand::getPickTip, "当前工作已经全部完成,请至完成界面进行后续工作。")
|
||||
.setDecrBy(Stand::getPickVehicleCount, 1)
|
||||
.eq(Stand::getStandId, standId));
|
||||
StandPickVo pickVoEntity = new StandPickVo();
|
||||
pickVoEntity.setTip("当前工作已经全部完成,请至完成界面进行后续工作。");
|
||||
|
|
@ -1598,6 +1611,7 @@ public class TaskController {
|
|||
.set(Stand::getPickVehicle, "")
|
||||
.set(Stand::getPickGoods, "")
|
||||
.set(Stand::getPickTip, "")
|
||||
.setDecrBy(Stand::getPickVehicleCount, 1)
|
||||
.eq(Stand::getStandId, targetStand.getStandId()));
|
||||
// 当前站台工作未全部完成
|
||||
response.setMessage("确认成功,放行");
|
||||
|
|
@ -1607,6 +1621,7 @@ public class TaskController {
|
|||
.set(Stand::getPickVehicle, "")
|
||||
.set(Stand::getPickGoods, "")
|
||||
.set(Stand::getPickTip, "当前工作已经全部完成,请至完成界面进行后续工作。")
|
||||
.setDecrBy(Stand::getPickVehicleCount, 1)
|
||||
.eq(Stand::getStandId, targetStand.getStandId()));
|
||||
// 当前站台工作已全部完成,需要提示工作完成,打印标签
|
||||
response.setMessage("当前工作已经全部完成,请至完成界面进行后续工作。");
|
||||
|
|
@ -1632,6 +1647,7 @@ public class TaskController {
|
|||
.set(Stand::getPickVehicle, "")
|
||||
.set(Stand::getPickGoods, "")
|
||||
.set(Stand::getPickTip, "")
|
||||
.setDecrBy(Stand::getPickVehicleCount, 1)
|
||||
.eq(Stand::getStandId, targetStand.getStandId()));
|
||||
response.setMessage("确认成功,放行");
|
||||
} else {
|
||||
|
|
@ -1640,6 +1656,7 @@ public class TaskController {
|
|||
.set(Stand::getPickVehicle, "")
|
||||
.set(Stand::getPickGoods, "")
|
||||
.set(Stand::getPickTip, "当前工作已经全部完成,请至完成界面进行后续工作。")
|
||||
.setDecrBy(Stand::getPickVehicleCount, 1)
|
||||
.eq(Stand::getStandId, targetStand.getStandId()));
|
||||
// 当前站台工作已全部完成,需要提示工作完成,打印标签
|
||||
response.setMessage("当前工作已经全部完成,请至完成界面进行后续工作。");
|
||||
|
|
@ -2160,7 +2177,7 @@ public class TaskController {
|
|||
ResponseEntity response = new ResponseEntity();
|
||||
try {
|
||||
// 判断请求参数是否正确
|
||||
if (sortBoxRequest == null || StringUtils.isEmpty(sortBoxRequest.getBigBoxNo()) || sortBoxRequest.getOrderOfOrders() == null) {
|
||||
if (sortBoxRequest == null || StringUtils.isEmpty(sortBoxRequest.getBigBoxNo())) {
|
||||
logger.error("请求参数不全。");
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("请求参数不全。");
|
||||
|
|
@ -2358,10 +2375,10 @@ public class TaskController {
|
|||
if (stockList != null && !stockList.isEmpty()) {
|
||||
// 需求数量
|
||||
BigDecimal needNum = noPlanRequest.getNeedNum();
|
||||
List<Stock> waitForOutStockList = new ArrayList<>();
|
||||
// 出库任务列表
|
||||
List<Task> outTasks = new ArrayList<>();
|
||||
// 尝试生成出库任务
|
||||
List<String> pickStandIds = new ArrayList<>();
|
||||
for (Stock tempStock : stockList) {
|
||||
if (needNum.compareTo(BigDecimal.ZERO) <= 0) {// 需求数量小于等于0
|
||||
break;
|
||||
|
|
@ -2374,7 +2391,6 @@ public class TaskController {
|
|||
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||
goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
|
||||
tempStock.setGoodsRelated(goodsRelated);
|
||||
waitForOutStockList.add(tempStock);
|
||||
} else {
|
||||
// 当前箱子物料剩余数量少于需求数量
|
||||
needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum());
|
||||
|
|
@ -2382,7 +2398,6 @@ public class TaskController {
|
|||
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||
goodsRelated.setRemainNum(BigDecimal.ZERO);
|
||||
tempStock.setGoodsRelated(goodsRelated);
|
||||
waitForOutStockList.add(tempStock);
|
||||
}
|
||||
// 创建出库任务
|
||||
Task tempOutTask = new Task();
|
||||
|
|
@ -2399,11 +2414,10 @@ public class TaskController {
|
|||
tempOutTask.setIsPicking(1);
|
||||
outTasks.add(tempOutTask);
|
||||
} else if (Objects.equals(tempStock.getStockStatus(), StockStatus.OUT.getCode())) {
|
||||
// 判断这个料箱是否有拣选任务
|
||||
boolean hasPickTask = pickTaskService.exists(new LambdaQueryWrapper<PickTask>()
|
||||
// 查询这个箱子的拣选任务
|
||||
List<PickTask> thisVehiclePickTasks = pickTaskService.list(new LambdaQueryWrapper<PickTask>()
|
||||
.eq(PickTask::getVehicleId, tempStock.getVehicleId()));
|
||||
if (!hasPickTask) {
|
||||
// 有拣选任务时,不做处理
|
||||
if (thisVehiclePickTasks.isEmpty()) {
|
||||
if (tempStock.getGoodsRelated().getRemainNum().compareTo(needNum) > 0) {
|
||||
// 当前箱子剩余物料数量多于需求数量
|
||||
needNum = BigDecimal.ZERO;
|
||||
|
|
@ -2411,7 +2425,6 @@ public class TaskController {
|
|||
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||
goodsRelated.setRemainNum(goodsRelated.getRemainNum().subtract(needNum));
|
||||
tempStock.setGoodsRelated(goodsRelated);
|
||||
waitForOutStockList.add(tempStock);
|
||||
} else {
|
||||
// 当前箱子物料剩余数量少于需求数量
|
||||
needNum = needNum.subtract(tempStock.getGoodsRelated().getRemainNum());
|
||||
|
|
@ -2419,17 +2432,21 @@ public class TaskController {
|
|||
StockDetailInfo goodsRelated = tempStock.getGoodsRelated();
|
||||
goodsRelated.setRemainNum(BigDecimal.ZERO);
|
||||
tempStock.setGoodsRelated(goodsRelated);
|
||||
waitForOutStockList.add(tempStock);
|
||||
}
|
||||
} else {
|
||||
// 将这个箱子对应的出库任务优先级设置位2
|
||||
taskService.update(new LambdaUpdateWrapper<Task>()
|
||||
.set(Task::getTaskPriority, 2)
|
||||
.eq(Task::getTaskId, tempStock.getVehicleId())
|
||||
.eq(Task::getTaskStatus, WmsTaskStatus.NEW.getCode()));
|
||||
thisVehiclePickTasks.forEach(pickTask -> {
|
||||
if (!pickStandIds.contains(pickTask.getStandId())) {
|
||||
pickStandIds.add(pickTask.getStandId());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
if (waitForOutStockList.isEmpty()) {
|
||||
logger.error("所有库存在站台备料中。");
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
response.setMessage("所有库存在站台备料中。");
|
||||
return convertJsonString(response);
|
||||
}
|
||||
// 添加出库任务
|
||||
if (!outTasks.isEmpty()) {
|
||||
taskService.saveBatch(outTasks);
|
||||
|
|
@ -2465,7 +2482,13 @@ public class TaskController {
|
|||
|
||||
logger.info("处理直接物料非计划领料请求成功。");
|
||||
response.setCode(ResponseCode.OK.getCode());
|
||||
response.setMessage("处理直接物料非计划领料请求成功。");
|
||||
StringBuilder message = new StringBuilder("处理直接物料非计划领料请求成功。");
|
||||
if (!pickStandIds.isEmpty()) {
|
||||
message.append("有料需要去工作站台领取。站台号:");
|
||||
pickStandIds.forEach(pickStandId -> message.append(pickStandId).append("、"));
|
||||
message.replace(message.length()-1, message.length(), "。");
|
||||
}
|
||||
response.setMessage(String.valueOf(message));
|
||||
} else {
|
||||
logger.error("非计划领料没有库存。");
|
||||
response.setCode(ResponseCode.ERROR.getCode());
|
||||
|
|
@ -2567,7 +2590,7 @@ public class TaskController {
|
|||
}
|
||||
existStock.setGoodsRelated(goodsDetail);
|
||||
stockService.updateById(existStock);
|
||||
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, "直接物料非计划领料确认回库更新", pickNumQuery.getUserName());
|
||||
stockUpdateRecordService.addStockUpdateRecord(originStock, existStock, StockUpdateReasonEnum.CLC_NO_PLAN_UPDATE.getReason(), pickNumQuery.getUserName());
|
||||
}
|
||||
// 判断这个箱子是否还有拣选任务
|
||||
boolean hasPickTasks = pickTaskService.exists(new LambdaQueryWrapper<PickTask>()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,97 @@
|
|||
package com.wms.entity.app.request;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 工作总结查询类
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class WorkSummaryQuery extends PageQuery {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@JsonProperty("workFlowId")
|
||||
private String workFlowId;
|
||||
/**
|
||||
* 工作站台
|
||||
*/
|
||||
@JsonProperty("workStation")
|
||||
private String workStation;
|
||||
/**
|
||||
* 工单
|
||||
*/
|
||||
@JsonProperty("workOrder")
|
||||
private String workOrder;
|
||||
/**
|
||||
* 工位
|
||||
*/
|
||||
@JsonProperty("workCenter")
|
||||
private String workCenter;
|
||||
/**
|
||||
* 物料编号
|
||||
*/
|
||||
@JsonProperty("goodsId")
|
||||
private String goodsId;
|
||||
/**
|
||||
* 已拣货数量
|
||||
*/
|
||||
@JsonProperty("pickedNum")
|
||||
private BigDecimal pickedNum;
|
||||
/**
|
||||
* 需求数量
|
||||
*/
|
||||
@JsonProperty("needNum")
|
||||
private BigDecimal needNum;
|
||||
/**
|
||||
* 缺件数量
|
||||
*/
|
||||
@JsonProperty("lackNum")
|
||||
private BigDecimal lackNum;
|
||||
/**
|
||||
* 工作日期
|
||||
*/
|
||||
@JsonProperty("workDate")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime workDate;
|
||||
/**
|
||||
* 工作状态
|
||||
* 0:未开始
|
||||
* 1:正在做
|
||||
* 2:已完成
|
||||
*/
|
||||
@JsonProperty("workStatus")
|
||||
private Integer workStatus;
|
||||
/**
|
||||
* 缺件状态
|
||||
* 0:不缺件
|
||||
* 1:缺件
|
||||
*/
|
||||
@JsonProperty("lackStatus")
|
||||
private Integer lackStatus;
|
||||
/**
|
||||
* 完成时间
|
||||
*/
|
||||
@JsonProperty("finishTime")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime finishTime;
|
||||
/**
|
||||
* 操作人员
|
||||
*/
|
||||
@JsonProperty("opUser")
|
||||
private String opUser;
|
||||
/**
|
||||
* 电子标签位
|
||||
*/
|
||||
@JsonProperty("eLocationId")
|
||||
private String eLocationId;
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package com.wms.entity.app.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
|
|
@ -67,4 +68,9 @@ public class StandVo {
|
|||
* 拣选提示信息
|
||||
*/
|
||||
private String pickTip;
|
||||
/**
|
||||
* 所有待拣选的箱子数量
|
||||
*/
|
||||
@JsonProperty("pickVehicleCount")
|
||||
private Integer pickVehicleCount;
|
||||
}
|
||||
|
|
|
|||
95
src/main/java/com/wms/entity/app/vo/WorkSummaryVo.java
Normal file
95
src/main/java/com/wms/entity/app/vo/WorkSummaryVo.java
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
package com.wms.entity.app.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 工作总结Vo
|
||||
*/
|
||||
@Data
|
||||
public class WorkSummaryVo {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@JsonProperty("workFlowId")
|
||||
private String workFlowId;
|
||||
/**
|
||||
* 工作站台
|
||||
*/
|
||||
@JsonProperty("workStation")
|
||||
private String workStation;
|
||||
/**
|
||||
* 工单
|
||||
*/
|
||||
@JsonProperty("workOrder")
|
||||
private String workOrder;
|
||||
/**
|
||||
* 工位
|
||||
*/
|
||||
@JsonProperty("workCenter")
|
||||
private String workCenter;
|
||||
/**
|
||||
* 物料编号
|
||||
*/
|
||||
@JsonProperty("goodsId")
|
||||
private String goodsId;
|
||||
/**
|
||||
* 已拣货数量
|
||||
*/
|
||||
@JsonProperty("pickedNum")
|
||||
private BigDecimal pickedNum;
|
||||
/**
|
||||
* 需求数量
|
||||
*/
|
||||
@JsonProperty("needNum")
|
||||
private BigDecimal needNum;
|
||||
/**
|
||||
* 缺件数量
|
||||
*/
|
||||
@JsonProperty("lackNum")
|
||||
private BigDecimal lackNum;
|
||||
/**
|
||||
* 工作日期
|
||||
*/
|
||||
@JsonProperty("workDate")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime workDate;
|
||||
/**
|
||||
* 工作状态
|
||||
* 0:未开始
|
||||
* 1:正在做
|
||||
* 2:已完成
|
||||
*/
|
||||
@JsonProperty("workStatus")
|
||||
private Integer workStatus;
|
||||
/**
|
||||
* 缺件状态
|
||||
* 0:不缺件
|
||||
* 1:缺件
|
||||
*/
|
||||
@JsonProperty("lackStatus")
|
||||
private Integer lackStatus;
|
||||
/**
|
||||
* 完成时间
|
||||
*/
|
||||
@JsonProperty("finishTime")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime finishTime;
|
||||
/**
|
||||
* 操作人员
|
||||
*/
|
||||
@JsonProperty("opUser")
|
||||
private String opUser;
|
||||
/**
|
||||
* 电子标签位
|
||||
*/
|
||||
@JsonProperty("eLocationId")
|
||||
private String eLocationId;
|
||||
}
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
package com.wms.entity.page;
|
||||
|
||||
import com.wms.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* 分页请求
|
||||
* 前端表格用
|
||||
*/
|
||||
public class PageDomain {
|
||||
/**
|
||||
* 当前记录起始索引
|
||||
*/
|
||||
private Integer pageNum;
|
||||
/**
|
||||
* 每页显示记录数
|
||||
*/
|
||||
private Integer pageSize;
|
||||
/**
|
||||
*排序列
|
||||
*/
|
||||
private String orderByColumn;
|
||||
/**
|
||||
* 排序方向
|
||||
*/
|
||||
private String isAsc = "asc";
|
||||
|
||||
public String getOrderBy()
|
||||
{
|
||||
if (StringUtils.isEmpty(orderByColumn))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
|
||||
}
|
||||
|
||||
public Integer getPageNum() {
|
||||
return pageNum;
|
||||
}
|
||||
|
||||
public void setPageNum(Integer pageNum) {
|
||||
this.pageNum = pageNum;
|
||||
}
|
||||
|
||||
public Integer getPageSize() {
|
||||
return pageSize;
|
||||
}
|
||||
|
||||
public void setPageSize(Integer pageSize) {
|
||||
this.pageSize = pageSize;
|
||||
}
|
||||
|
||||
public String getOrderByColumn() {
|
||||
return orderByColumn;
|
||||
}
|
||||
|
||||
public void setOrderByColumn(String orderByColumn) {
|
||||
this.orderByColumn = orderByColumn;
|
||||
}
|
||||
|
||||
public String getIsAsc() {
|
||||
return isAsc;
|
||||
}
|
||||
|
||||
public void setIsAsc(String isAsc) {
|
||||
this.isAsc = isAsc;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
package com.wms.entity.page;
|
||||
|
||||
/**
|
||||
* 前端请求表格数据
|
||||
*/
|
||||
public class TableRequest<T, T2> {
|
||||
/**
|
||||
* 分页请求数据
|
||||
*/
|
||||
private PageDomain page;
|
||||
/**
|
||||
* 参数
|
||||
*/
|
||||
private T param;
|
||||
/**
|
||||
* 参数2
|
||||
*/
|
||||
private T2 param2;
|
||||
|
||||
public PageDomain getPage() {
|
||||
return page;
|
||||
}
|
||||
|
||||
public void setPage(PageDomain page) {
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
public T getParam() {
|
||||
return param;
|
||||
}
|
||||
|
||||
public void setParam(T param) {
|
||||
this.param = param;
|
||||
}
|
||||
|
||||
public T2 getParam2() {
|
||||
return param2;
|
||||
}
|
||||
|
||||
public void setParam2(T2 param2) {
|
||||
this.param2 = param2;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
package com.wms.entity.page;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 前端表格请求的返回值
|
||||
*/
|
||||
public class TableResponse {
|
||||
/**
|
||||
* 总记录数
|
||||
*/
|
||||
private long total;
|
||||
/**
|
||||
* 列表数据
|
||||
*/
|
||||
private List<?> rows;
|
||||
/**
|
||||
* 状态码
|
||||
*/
|
||||
private int code;
|
||||
/**
|
||||
* 消息
|
||||
*/
|
||||
private String message;
|
||||
|
||||
public long getTotal() {
|
||||
return total;
|
||||
}
|
||||
|
||||
public void setTotal(long total) {
|
||||
this.total = total;
|
||||
}
|
||||
|
||||
public List<?> getRows() {
|
||||
return rows;
|
||||
}
|
||||
|
||||
public void setRows(List<?> rows) {
|
||||
this.rows = rows;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public void setMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
|
|
@ -86,4 +86,9 @@ public class Stand {
|
|||
*/
|
||||
@TableField("pick_tip")
|
||||
private String pickTip;
|
||||
/**
|
||||
* 所有待拣选的箱子数量
|
||||
*/
|
||||
@TableField("pick_vehicle_count")
|
||||
private Integer pickVehicleCount;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,4 +84,9 @@ public class WorkSummary {
|
|||
*/
|
||||
@TableField("op_user")
|
||||
private String opUser;
|
||||
/**
|
||||
* 电子标签位
|
||||
*/
|
||||
@TableField("e_location_id")
|
||||
private String eLocationId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,9 +80,11 @@ public class WmsJobServiceImplements implements IWmsJobService {
|
|||
continue;
|
||||
}
|
||||
}
|
||||
if (Objects.equals(task.getTaskType(), TaskType.OUT.getCode())
|
||||
&& task.getIsPicking() == 1 && StringUtils.isNotEmpty(task.getPickStand())) {
|
||||
continue;
|
||||
if (task.getTaskPriority() == 1) {
|
||||
if (Objects.equals(task.getTaskType(), TaskType.OUT.getCode())
|
||||
&& task.getIsPicking() == 1 && StringUtils.isNotEmpty(task.getPickStand())) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// 创建发送的任务
|
||||
WcsTaskRequest tempTask = new WcsTaskRequest();
|
||||
|
|
@ -151,6 +153,10 @@ public class WmsJobServiceImplements implements IWmsJobService {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送PickOut任务
|
||||
* @throws Exception 异常
|
||||
*/
|
||||
@Override
|
||||
public void sendPickOutTasks() throws Exception {
|
||||
try {
|
||||
|
|
@ -181,8 +187,10 @@ public class WmsJobServiceImplements implements IWmsJobService {
|
|||
List<WcsTaskRequest> request = new ArrayList<>();
|
||||
// 已经下发的任务组列表
|
||||
List<String> taskGroupIds = new ArrayList<>();
|
||||
// 本次生成的环线任务
|
||||
// 本次生成的箱子
|
||||
List<String> pickVehicleIds = new ArrayList<>();
|
||||
// 本次跳过的箱子
|
||||
List<String> skipVehicleIds = new ArrayList<>();
|
||||
// 查找所有站台拣选任务
|
||||
List<PickTask> standPickTasks = pickTaskService.list();
|
||||
// 生成一个Map,计算每个站台已经出库的拣选任务
|
||||
|
|
@ -192,155 +200,221 @@ public class WmsJobServiceImplements implements IWmsJobService {
|
|||
.eq(Stand::getIsLock, 0).eq(Stand::getStandStatus, 0)
|
||||
.eq(Stand::getStandType, 2));
|
||||
for (Stand workStation : stands) {
|
||||
outPickTaskMap.put(workStation.getStandId(), 0);
|
||||
outPickTaskMap.put(workStation.getStandId(), workStation.getPickVehicleCount());
|
||||
}
|
||||
standPickTasks.forEach(pickTask -> {
|
||||
if (!Objects.equals(pickTask.getPickStatus(), PickTaskStatusEnum.TEMP.getCode())) {
|
||||
outPickTaskMap.put(pickTask.getStandId(),
|
||||
outPickTaskMap.getOrDefault(pickTask.getStandId(), 0) + 1);
|
||||
}
|
||||
});
|
||||
// 轮询堆垛机状态
|
||||
List<Stand> stackerList = standService.list(new LambdaQueryWrapper<Stand>()
|
||||
.eq(Stand::getIsLock, 0).eq(Stand::getStandStatus, 0)
|
||||
.eq(Stand::getStandType, 3));
|
||||
List<Task> stackRunningTasks = taskService.list(new LambdaQueryWrapper<Task>()
|
||||
.eq(Task::getTaskType, TaskType.OUT.getCode())
|
||||
.and(wrapper -> {
|
||||
wrapper.eq(Task::getTaskStatus, WmsTaskStatus.WAIT.getCode())
|
||||
.or().eq(Task::getTaskStatus, WmsTaskStatus.RUN.getCode());
|
||||
}));
|
||||
.and(wrapper -> wrapper.eq(Task::getTaskStatus, WmsTaskStatus.WAIT.getCode())
|
||||
.or().eq(Task::getTaskStatus, WmsTaskStatus.RUN.getCode())));
|
||||
Map<Integer, Integer> runningTaskNumToEquipmentMap = new HashMap<>();
|
||||
Map<Integer, List<Task>> newTaskToEquipmentMap = new HashMap<>();
|
||||
for (Stand stacker : stackerList) {
|
||||
// 找这台堆垛机正在执行的拣选出库任务数量
|
||||
runningTaskNumToEquipmentMap.put(stacker.getEquipmentId(), 0);
|
||||
// 查询每台堆垛机还没有下发的任务
|
||||
List<Task> stackNewTasks = new ArrayList<>(allTasks.stream().filter(task ->
|
||||
task.getIsPicking() == 1 && StringUtils.isNotEmpty(task.getPickStand())
|
||||
&& Objects.equals(stacker.getEquipmentId(), instantLocationMap.get(task.getOrigin()).getEquipmentId())
|
||||
).toList());
|
||||
newTaskToEquipmentMap.put(stacker.getEquipmentId(), stackNewTasks);
|
||||
}
|
||||
stackRunningTasks.forEach(task -> {
|
||||
if (instantLocationMap.containsKey(task.getOrigin())) {
|
||||
int key = instantLocationMap.get(task.getOrigin()).getEquipmentId();
|
||||
runningTaskNumToEquipmentMap.put(key, runningTaskNumToEquipmentMap.get(key) + 1);
|
||||
// 生成堆垛机可用列表
|
||||
for (Task tempStackRunningTask : stackRunningTasks) {
|
||||
if (instantLocationMap.containsKey(tempStackRunningTask.getOrigin())) {
|
||||
int key = instantLocationMap.get(tempStackRunningTask.getOrigin()).getEquipmentId();
|
||||
if (runningTaskNumToEquipmentMap.isEmpty()) {
|
||||
// 没有可用堆垛机
|
||||
break;
|
||||
}
|
||||
if (runningTaskNumToEquipmentMap.containsKey(key)) {
|
||||
if (runningTaskNumToEquipmentMap.get(key) >= 2) {
|
||||
runningTaskNumToEquipmentMap.remove(key);
|
||||
} else {
|
||||
runningTaskNumToEquipmentMap.replace(key, runningTaskNumToEquipmentMap.get(key) + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
for (Stand stacker : stackerList) {
|
||||
}
|
||||
if (runningTaskNumToEquipmentMap.isEmpty()) {
|
||||
// 没有可用堆垛机
|
||||
return;
|
||||
}
|
||||
// 还有可用堆垛机
|
||||
while(!runningTaskNumToEquipmentMap.isEmpty()) {
|
||||
if (request.size() >= maxWcsAcceptNums || remainVehicleNums <= 0) {
|
||||
// 超过wcs一次可接受数量
|
||||
break;
|
||||
}
|
||||
int availableTaskNum = 4 - runningTaskNumToEquipmentMap.get(stacker.getEquipmentId());
|
||||
while (availableTaskNum > 0) {
|
||||
if (request.size() >= maxWcsAcceptNums || remainVehicleNums <= 0) {
|
||||
// 超过wcs一次可接受数量
|
||||
break;
|
||||
// 先找出目前数量最少的站台
|
||||
String standId = outPickTaskMap.entrySet().stream()
|
||||
.min(Comparator.comparingInt(Map.Entry::getValue))
|
||||
.map(Map.Entry::getKey)
|
||||
.orElse("");
|
||||
List<String> vehicleIds;
|
||||
if (StringUtils.isNotEmpty(standId)) {
|
||||
// 查找这个站台未下发的料箱
|
||||
vehicleIds = standPickTasks.stream()
|
||||
.filter(pickTask -> pickTask.getStandId().equals(standId) && pickTask.getPickStatus().equals(PickTaskStatusEnum.TEMP.getCode())
|
||||
&& !pickVehicleIds.contains(pickTask.getVehicleId())
|
||||
&& !skipVehicleIds.contains(pickTask.getVehicleId()))
|
||||
.map(PickTask::getVehicleId)
|
||||
.distinct()
|
||||
.toList();
|
||||
if (vehicleIds.isEmpty()) {
|
||||
outPickTaskMap.remove(standId);
|
||||
continue;
|
||||
}
|
||||
// 可以继续发任务
|
||||
List<Task> currentStackerTasks = newTaskToEquipmentMap.get(stacker.getEquipmentId());
|
||||
// 从这些任务里面找到最适合的任务下发
|
||||
if (!currentStackerTasks.isEmpty()) {
|
||||
// 先找出目前数量最少的站台
|
||||
String standId = outPickTaskMap.entrySet().stream()
|
||||
.min(Comparator.comparingInt(Map.Entry::getValue))
|
||||
.map(Map.Entry::getKey)
|
||||
.orElse("");
|
||||
List<String> vehicleIds;
|
||||
List<String> currentStackerVehicleIds = currentStackerTasks.stream().map(Task::getVehicleId).distinct().toList();
|
||||
if (StringUtils.isNotEmpty(standId)) {
|
||||
// 查找这个站台未下发的料箱
|
||||
vehicleIds = standPickTasks.stream()
|
||||
.filter(pickTask -> pickTask.getStandId().equals(standId) && pickTask.getPickStatus().equals(PickTaskStatusEnum.TEMP.getCode())
|
||||
&& !pickVehicleIds.contains(pickTask.getVehicleId()) && currentStackerVehicleIds.contains(pickTask.getVehicleId()))
|
||||
.map(PickTask::getVehicleId)
|
||||
.distinct()
|
||||
.toList();
|
||||
if (vehicleIds.isEmpty()) {
|
||||
outPickTaskMap.remove(standId);
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
vehicleIds = standPickTasks.stream()
|
||||
.filter(pickTask -> pickTask.getPickStatus().equals(PickTaskStatusEnum.TEMP.getCode())
|
||||
&& !pickVehicleIds.contains(pickTask.getVehicleId()) && currentStackerVehicleIds.contains(pickTask.getVehicleId()))
|
||||
.map(PickTask::getVehicleId)
|
||||
.distinct()
|
||||
.toList();
|
||||
if (vehicleIds.isEmpty()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 生成箱子-站台数量的Map
|
||||
Map<String, Integer> vehicleStandsMap = new HashMap<>();
|
||||
standPickTasks.forEach(pickTask -> {
|
||||
if (vehicleIds.contains(pickTask.getVehicleId())) {
|
||||
vehicleStandsMap.put(pickTask.getVehicleId(),
|
||||
vehicleStandsMap.getOrDefault(pickTask.getVehicleId(), 0) + 1);
|
||||
}
|
||||
});
|
||||
// 先找出适合的料箱
|
||||
String vehicleId = vehicleStandsMap.entrySet().stream()
|
||||
.min(Comparator.comparingInt(Map.Entry::getValue))
|
||||
.map(Map.Entry::getKey)
|
||||
.orElse("");
|
||||
if (StringUtils.isEmpty(vehicleId)) {
|
||||
continue;
|
||||
}
|
||||
// 更新每个站台的拣选箱数量
|
||||
List<String> standIds = standPickTasks.stream()
|
||||
.filter(pickTask -> pickTask.getVehicleId().equals(vehicleId))
|
||||
.map(PickTask::getStandId)
|
||||
.distinct()
|
||||
.toList();
|
||||
if (!standIds.isEmpty()) {
|
||||
standIds.forEach(tempStandId -> outPickTaskMap.put(tempStandId, outPickTaskMap.getOrDefault(tempStandId, 0) + 1));
|
||||
}
|
||||
// 找到这个箱子的任务
|
||||
List<Task> outPickTasks = currentStackerTasks.stream().filter(task -> task.getVehicleId().equals(vehicleId)).toList();
|
||||
for (Task task : outPickTasks) {
|
||||
if (taskGroupIds.contains(task.getTaskGroup())) {
|
||||
// 该任务组已经下发
|
||||
currentStackerTasks.remove(task);
|
||||
continue;
|
||||
}
|
||||
if (StringUtils.isNotEmpty(task.getPreTask())) {// 当前任务具有前置任务
|
||||
// 查询一下前置的任务有没有存在,存在则不下发
|
||||
if (taskService.exists(new LambdaQueryWrapper<Task>().eq(Task::getTaskId, task.getPreTask()))) {
|
||||
currentStackerTasks.remove(task);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// 创建发送的任务
|
||||
WcsTaskRequest tempTask = new WcsTaskRequest();
|
||||
tempTask.setTaskId(task.getTaskGroup());
|
||||
tempTask.setTaskType(task.getTaskType());
|
||||
tempTask.setOrigin(task.getOrigin());
|
||||
tempTask.setDestination(task.getDestination());
|
||||
tempTask.setVehicleNo(task.getVehicleId());
|
||||
tempTask.setVehicleSize(task.getVehicleSize());
|
||||
tempTask.setWeight(task.getWeight());
|
||||
tempTask.setPriority(task.getTaskPriority());
|
||||
request.add(tempTask);
|
||||
// 已经发送过的任务组
|
||||
taskGroupIds.add(task.getTaskGroup());
|
||||
}
|
||||
// 已经发送过的vehicleId
|
||||
pickVehicleIds.add(vehicleId);
|
||||
// 移除已经发送过的任务
|
||||
currentStackerTasks.removeIf(task -> task.getVehicleId().equals(vehicleId));
|
||||
newTaskToEquipmentMap.replace(stacker.getEquipmentId(), currentStackerTasks);
|
||||
// 可用数量-1
|
||||
availableTaskNum--;
|
||||
// 剩余线体可继续出库料箱数量
|
||||
remainVehicleNums--;
|
||||
} else {
|
||||
} else {
|
||||
vehicleIds = standPickTasks.stream()
|
||||
.filter(pickTask -> pickTask.getPickStatus().equals(PickTaskStatusEnum.TEMP.getCode())
|
||||
&& !pickVehicleIds.contains(pickTask.getVehicleId())
|
||||
&& !skipVehicleIds.contains(pickTask.getVehicleId()))
|
||||
.map(PickTask::getVehicleId)
|
||||
.distinct()
|
||||
.toList();
|
||||
if (vehicleIds.isEmpty()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 生成箱子-站台数量的Map
|
||||
Map<String, Integer> vehicleStandsMap = new HashMap<>();
|
||||
standPickTasks.forEach(pickTask -> {
|
||||
if (vehicleIds.contains(pickTask.getVehicleId())) {
|
||||
vehicleStandsMap.put(pickTask.getVehicleId(),
|
||||
vehicleStandsMap.getOrDefault(pickTask.getVehicleId(), 0) + 1);
|
||||
}
|
||||
});
|
||||
// 最多使用的箱子
|
||||
String maxVehicleId = vehicleStandsMap.entrySet().stream()
|
||||
.max(Comparator.comparingInt(Map.Entry::getValue))
|
||||
.map(Map.Entry::getKey)
|
||||
.orElse("");
|
||||
if (!StringUtils.isEmpty(maxVehicleId)) {
|
||||
// 找到这个箱子的任务
|
||||
List<Task> outPickTasks = allTasks.stream().filter(task -> task.getVehicleId().equals(maxVehicleId) && !pickVehicleIds.contains(task.getVehicleId())
|
||||
&& task.getIsPicking() == 1 && StringUtils.isNotEmpty(task.getPickStand())).toList();
|
||||
if (!outPickTasks.isEmpty()) {
|
||||
// 更新每个站台的拣选箱数量
|
||||
List<String> maxStandIds = standPickTasks.stream()
|
||||
.filter(pickTask -> pickTask.getVehicleId().equals(maxVehicleId))
|
||||
.map(PickTask::getStandId)
|
||||
.distinct()
|
||||
.toList();
|
||||
// 给当前设备号+1
|
||||
int equipmentId = instantLocationMap.get(outPickTasks.get(0).getOrigin()).getEquipmentId();
|
||||
if (runningTaskNumToEquipmentMap.containsKey(equipmentId)) {
|
||||
boolean flag = false;
|
||||
for (Task task : outPickTasks) {
|
||||
if (taskGroupIds.contains(task.getTaskGroup())) {
|
||||
// 该任务组已经下发
|
||||
continue;
|
||||
}
|
||||
if (StringUtils.isNotEmpty(task.getPreTask())) {// 当前任务具有前置任务
|
||||
// 查询一下前置的任务有没有存在,存在则不下发
|
||||
if (taskService.exists(new LambdaQueryWrapper<Task>().eq(Task::getTaskId, task.getPreTask()))) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// 创建发送的任务
|
||||
WcsTaskRequest tempTask = new WcsTaskRequest();
|
||||
tempTask.setTaskId(task.getTaskGroup());
|
||||
tempTask.setTaskType(task.getTaskType());
|
||||
tempTask.setOrigin(task.getOrigin());
|
||||
tempTask.setDestination(task.getDestination());
|
||||
tempTask.setVehicleNo(task.getVehicleId());
|
||||
tempTask.setVehicleSize(task.getVehicleSize());
|
||||
tempTask.setWeight(task.getWeight());
|
||||
tempTask.setPriority(task.getTaskPriority());
|
||||
request.add(tempTask);
|
||||
// 已经发送过的任务组
|
||||
taskGroupIds.add(task.getTaskGroup());
|
||||
flag = true;
|
||||
}
|
||||
if (flag) {
|
||||
if (!maxStandIds.isEmpty()) {
|
||||
maxStandIds.forEach(tempStandId -> outPickTaskMap.put(tempStandId, outPickTaskMap.getOrDefault(tempStandId, 0) + 1));
|
||||
}
|
||||
runningTaskNumToEquipmentMap.replace(equipmentId, runningTaskNumToEquipmentMap.get(equipmentId) + 1);
|
||||
// 已经发送过的vehicleId
|
||||
pickVehicleIds.add(maxVehicleId);
|
||||
// 剩余线体可继续出库料箱数量
|
||||
remainVehicleNums--;
|
||||
}
|
||||
} else {
|
||||
if (!skipVehicleIds.contains(maxVehicleId)) {
|
||||
skipVehicleIds.add(maxVehicleId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 最少使用的箱子
|
||||
String minVehicleId = vehicleStandsMap.entrySet().stream()
|
||||
.min(Comparator.comparingInt(Map.Entry::getValue))
|
||||
.map(Map.Entry::getKey)
|
||||
.orElse("");
|
||||
if (!StringUtils.isEmpty(minVehicleId)) {
|
||||
// 找到这个箱子的任务
|
||||
List<Task> outPickTasks = allTasks.stream().filter(task -> task.getVehicleId().equals(minVehicleId) && !pickVehicleIds.contains(task.getVehicleId())
|
||||
&& task.getIsPicking() == 1 && StringUtils.isNotEmpty(task.getPickStand())).toList();
|
||||
if (!outPickTasks.isEmpty()) {
|
||||
// 更新每个站台的拣选箱数量
|
||||
List<String> minStandIds = standPickTasks.stream()
|
||||
.filter(pickTask -> pickTask.getVehicleId().equals(minVehicleId))
|
||||
.map(PickTask::getStandId)
|
||||
.distinct()
|
||||
.toList();
|
||||
// 给当前设备号+1
|
||||
int equipmentId = instantLocationMap.get(outPickTasks.get(0).getOrigin()).getEquipmentId();
|
||||
if (runningTaskNumToEquipmentMap.containsKey(equipmentId)) {
|
||||
boolean flag = false;
|
||||
for (Task task : outPickTasks) {
|
||||
if (taskGroupIds.contains(task.getTaskGroup())) {
|
||||
// 该任务组已经下发
|
||||
continue;
|
||||
}
|
||||
if (StringUtils.isNotEmpty(task.getPreTask())) {// 当前任务具有前置任务
|
||||
// 查询一下前置的任务有没有存在,存在则不下发
|
||||
if (taskService.exists(new LambdaQueryWrapper<Task>().eq(Task::getTaskId, task.getPreTask()))) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// 创建发送的任务
|
||||
WcsTaskRequest tempTask = new WcsTaskRequest();
|
||||
tempTask.setTaskId(task.getTaskGroup());
|
||||
tempTask.setTaskType(task.getTaskType());
|
||||
tempTask.setOrigin(task.getOrigin());
|
||||
tempTask.setDestination(task.getDestination());
|
||||
tempTask.setVehicleNo(task.getVehicleId());
|
||||
tempTask.setVehicleSize(task.getVehicleSize());
|
||||
tempTask.setWeight(task.getWeight());
|
||||
tempTask.setPriority(task.getTaskPriority());
|
||||
request.add(tempTask);
|
||||
// 已经发送过的任务组
|
||||
taskGroupIds.add(task.getTaskGroup());
|
||||
flag = true;
|
||||
}
|
||||
if (flag) {
|
||||
if (!minStandIds.isEmpty()) {
|
||||
minStandIds.forEach(tempStandId -> outPickTaskMap.put(tempStandId, outPickTaskMap.getOrDefault(tempStandId, 0) + 1));
|
||||
}
|
||||
runningTaskNumToEquipmentMap.replace(equipmentId, runningTaskNumToEquipmentMap.get(equipmentId) + 1);
|
||||
// 已经发送过的vehicleId
|
||||
pickVehicleIds.add(minVehicleId);
|
||||
// 剩余线体可继续出库料箱数量
|
||||
remainVehicleNums--;
|
||||
}
|
||||
} else {
|
||||
if (!skipVehicleIds.contains(minVehicleId)) {
|
||||
skipVehicleIds.add(minVehicleId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
List<Integer> removeKeys = new ArrayList<>(runningTaskNumToEquipmentMap.keySet().stream().toList());
|
||||
for (int equipmentId : removeKeys) {
|
||||
if (runningTaskNumToEquipmentMap.get(equipmentId) >= 2) {
|
||||
runningTaskNumToEquipmentMap.remove(equipmentId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (request.size() == 0) {
|
||||
// 没有新任务发送
|
||||
return;
|
||||
|
|
@ -369,6 +443,12 @@ public class WmsJobServiceImplements implements IWmsJobService {
|
|||
outsideVehiclesService.update(new LambdaUpdateWrapper<OutsideVehicles>()
|
||||
.set(OutsideVehicles::getOutStatus, 1)
|
||||
.in(OutsideVehicles::getVehicleId, pickVehicleIds));
|
||||
// 更新站台拣选箱数
|
||||
for (String tempStandId : outPickTaskMap.keySet()) {
|
||||
standService.update(new LambdaUpdateWrapper<Stand>()
|
||||
.set(Stand::getPickVehicleCount, outPickTaskMap.get(tempStandId))
|
||||
.eq(Stand::getStandId, tempStandId));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 判断returnData的数据
|
||||
|
|
|
|||
|
|
@ -320,10 +320,16 @@ public class WorkServiceImplements implements IWorkService {
|
|||
summary.setPickedNum(workFlow.getPickedNum());
|
||||
summary.setNeedNum(workFlow.getNeedNum());
|
||||
summary.setLackNum(workFlow.getNeedNum().subtract(workFlow.getPickedNum()));
|
||||
summary.setWorkDate(workFlow.getFinishTime());
|
||||
summary.setWorkDate(workFlow.getCreateTime().toLocalDate().atStartOfDay());
|
||||
summary.setWorkStatus(workFlow.getWorkStatus());
|
||||
summary.setLackStatus(summary.getLackNum().compareTo(BigDecimal.ZERO) > 0 ? 1 : 0);
|
||||
summary.setFinishTime(workFlow.getFinishTime());
|
||||
summary.setOpUser(workFlow.getOpUser());
|
||||
// 设置电子标签位置
|
||||
List<ELocationConfig> currentBoxELocationList = eLocationConfigList.stream().filter(e ->
|
||||
e.getWorkOrder().equals(workFlow.getWorkOrder())
|
||||
&& e.getWorkCenter().equals(workFlow.getWorkCenter())).toList();
|
||||
summary.setELocationId(currentBoxELocationList.size() > 0 ? currentBoxELocationList.get(0).getELocationId() : "");
|
||||
workSummaryList.add(summary);
|
||||
// 更新工单表
|
||||
kateOrdersService.update(new LambdaUpdateWrapper<KateOrders>()
|
||||
|
|
|
|||
|
|
@ -12,8 +12,6 @@ import lombok.RequiredArgsConstructor;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class UserServiceImplements extends ServiceImpl<UserMapper, User> implements UserService {
|
||||
|
|
@ -24,7 +22,7 @@ public class UserServiceImplements extends ServiceImpl<UserMapper, User> impleme
|
|||
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<User>()
|
||||
.eq(User::getLoginAccount, user.getLoginAccount())
|
||||
.or().eq(withAuth, User::getLoginPassword, user.getLoginPassword())
|
||||
.or().eq(StringUtils.isEmpty(user.getLoginPassword()), User::getLoginAccount, null);
|
||||
.or().eq(StringUtils.isEmpty(user.getLoginPassword()), User::getLoginPassword, null);
|
||||
return BeanUtil.copyProperties(userMapper.selectOne(queryWrapper), UserDto.class);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,74 @@
|
|||
package com.wms.utils.excel.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.format.DateTimeFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class StockUpdateRecordExcelVo {
|
||||
/**
|
||||
* 记录编号
|
||||
*/
|
||||
@ExcelProperty("记录编号")
|
||||
private String recordId;
|
||||
/**
|
||||
* 库存编号
|
||||
*/
|
||||
@ExcelProperty("库存编号")
|
||||
private String stockId;
|
||||
/**
|
||||
* 料箱编号
|
||||
*/
|
||||
@ExcelProperty("箱号")
|
||||
private String vehicleId;
|
||||
/**
|
||||
* 料号
|
||||
*/
|
||||
@ExcelProperty("料号")
|
||||
private String goodsId;
|
||||
/**
|
||||
* 物料名称
|
||||
*/
|
||||
@ExcelProperty("物料名称")
|
||||
private String goodsName;
|
||||
/**
|
||||
* 原来库位
|
||||
*/
|
||||
@ExcelProperty("原库位")
|
||||
private String locationBefore;
|
||||
/**
|
||||
* 后来库位
|
||||
*/
|
||||
@ExcelProperty("新库位")
|
||||
private String locationAfter;
|
||||
/**
|
||||
* 原来数量
|
||||
*/
|
||||
@ExcelProperty("原数量")
|
||||
private BigDecimal quantityBefore;
|
||||
/**
|
||||
* 后来数量
|
||||
*/
|
||||
@ExcelProperty("新数量")
|
||||
private BigDecimal quantityAfter;
|
||||
/**
|
||||
* 原因
|
||||
*/
|
||||
@ExcelProperty("原因")
|
||||
private String reason;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@ExcelProperty("更新时间")
|
||||
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime updateTime;
|
||||
/**
|
||||
* 更新用户
|
||||
*/
|
||||
@ExcelProperty("更新用户")
|
||||
private String updateUser;
|
||||
}
|
||||
103
src/main/java/com/wms/utils/excel/vo/WorkSummaryExcelVo.java
Normal file
103
src/main/java/com/wms/utils/excel/vo/WorkSummaryExcelVo.java
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
package com.wms.utils.excel.vo;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.format.DateTimeFormat;
|
||||
import com.wms.entity.table.WorkSummary;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 工作总结excelVo
|
||||
*/
|
||||
@Data
|
||||
public class WorkSummaryExcelVo {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@ExcelProperty("id")
|
||||
private String workFlowId;
|
||||
/**
|
||||
* 工作站台
|
||||
*/
|
||||
@ExcelProperty("工作站台")
|
||||
private String workStation;
|
||||
/**
|
||||
* 工单
|
||||
*/
|
||||
@ExcelProperty("工单")
|
||||
private String workOrder;
|
||||
/**
|
||||
* 工位
|
||||
*/
|
||||
@ExcelProperty("小工位")
|
||||
private String workCenter;
|
||||
/**
|
||||
* 物料编号
|
||||
*/
|
||||
@ExcelProperty("物料编号")
|
||||
private String goodsId;
|
||||
/**
|
||||
* 已拣货数量
|
||||
*/
|
||||
@ExcelProperty("已拣货数量")
|
||||
private BigDecimal pickedNum;
|
||||
/**
|
||||
* 需求数量
|
||||
*/
|
||||
@ExcelProperty("需求数量")
|
||||
private BigDecimal needNum;
|
||||
/**
|
||||
* 缺件数量
|
||||
*/
|
||||
@ExcelProperty("缺件数量")
|
||||
private BigDecimal lackNum;
|
||||
/**
|
||||
* 工作日期
|
||||
*/
|
||||
@ExcelProperty("工作日期")
|
||||
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime workDate;
|
||||
/**
|
||||
* 工作状态
|
||||
* 0:未开始
|
||||
* 1:正在做
|
||||
* 2:已完成
|
||||
*/
|
||||
@ExcelProperty("工作状态")
|
||||
private Integer workStatus;
|
||||
/**
|
||||
* 缺件状态
|
||||
* 0:不缺件
|
||||
* 1:缺件
|
||||
*/
|
||||
@ExcelProperty("缺件状态")
|
||||
private Integer lackStatus;
|
||||
/**
|
||||
* 完成时间
|
||||
*/
|
||||
@ExcelProperty("完成时间")
|
||||
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime finishTime;
|
||||
/**
|
||||
* 操作人员
|
||||
*/
|
||||
@ExcelProperty("操作人员")
|
||||
private String opUser;
|
||||
/**
|
||||
* 电子标签位
|
||||
*/
|
||||
@ExcelProperty("电子标签位")
|
||||
private String eLocationId;
|
||||
|
||||
/**
|
||||
* 将数据库Po转化为ExcelVo
|
||||
* @param workSummaryPo 数据库Po
|
||||
* @return ExcelVo
|
||||
*/
|
||||
public static WorkSummaryExcelVo of(WorkSummary workSummaryPo) {
|
||||
return BeanUtil.copyProperties(workSummaryPo, WorkSummaryExcelVo.class);
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user