增加数据分析记录功能

This commit is contained in:
梁州 2026-03-10 15:50:55 +08:00
parent a7d616fcb7
commit 9bcb2b103e
13 changed files with 803 additions and 35 deletions

View File

@ -74,7 +74,8 @@ public class ExcelController {
private final IWorkService workService; private final IWorkService workService;
private final List<String> uploadFileHashStringList = new ArrayList<>(); private final List<String> uploadFileHashStringList = new ArrayList<>();
private final PickTaskRecordService pickTaskRecordService; private final PickTaskRecordService pickTaskRecordService;// 拣选任务记录服务
private final AnalysisRecordService analysisRecordService;// 数据分析记录服务
/** /**
* 查询上传记录 * 查询上传记录
@ -842,6 +843,41 @@ public class ExcelController {
.doWrite(recordList.stream().map(PickTaskRecordExcelVo::fromPo).toList()); .doWrite(recordList.stream().map(PickTaskRecordExcelVo::fromPo).toList());
} }
/**
* 导出数据分析记录
*
* @param response 请求
*/
@PostMapping("/downloadAnalysisRecordsExcel")
@ResponseBody
public void downloadAnalysisRecordsExcel(@RequestBody AnalysisRecordQuery analysisRecordQuery, HttpServletResponse response) throws IOException {
logger.info("导出数据分析记录,筛选参数:{}请求ip{}", convertJsonString(analysisRecordQuery), getIpAddr(servletRequest));
//设置响应格式
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("数据分析记录", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
// 内容样式
HorizontalCellStyleStrategy horizontalCellStyleStrategy = ExcelContentStyle.getContentStyle();
// 查询条件
LambdaQueryWrapper<AnalysisRecord> lambdaQueryWrapper = new LambdaQueryWrapper<AnalysisRecord>()
.like(StringUtils.isNotEmpty(analysisRecordQuery.getWorkOrder()), AnalysisRecord::getWorkOrder, analysisRecordQuery.getWorkOrder())
.like(StringUtils.isNotEmpty(analysisRecordQuery.getSmallBox()), AnalysisRecord::getSmallBox, analysisRecordQuery.getSmallBox())
.like(StringUtils.isNotEmpty(analysisRecordQuery.getBigBox()), AnalysisRecord::getBigBox, analysisRecordQuery.getBigBox())
.like(StringUtils.isNotEmpty(analysisRecordQuery.getGoodsId()), AnalysisRecord::getGoodsId, analysisRecordQuery.getGoodsId())
.eq(analysisRecordQuery.getMachineType() != null, AnalysisRecord::getMachineType, analysisRecordQuery.getMachineType())
.eq(analysisRecordQuery.getStartDate() != null, AnalysisRecord::getStartDate, analysisRecordQuery.getStartDate())
.like(StringUtils.isNotEmpty(analysisRecordQuery.getVehicleId()), AnalysisRecord::getVehicleId, analysisRecordQuery.getVehicleId())
.like(StringUtils.isNotEmpty(analysisRecordQuery.getStandId()), AnalysisRecord::getStandId, analysisRecordQuery.getStandId());
List<AnalysisRecord> recordList = analysisRecordService.list(lambdaQueryWrapper);
EasyExcel.write(response.getOutputStream(), AnalysisRecordExcelVo.class)
.excelType(ExcelTypeEnum.XLSX)
.registerWriteHandler(horizontalCellStyleStrategy)
.sheet("数据分析记录报表")
.doWrite(recordList.stream().map(po -> BeanUtil.copyProperties(po, AnalysisRecordExcelVo.class)).toList());
}
/** /**
* 导出工单 * 导出工单
* *

View File

@ -7,17 +7,12 @@ import com.wms.annotation.MyLog;
import com.wms.constants.enums.ResponseCode; import com.wms.constants.enums.ResponseCode;
import com.wms.entity.app.ResponseEntity; import com.wms.entity.app.ResponseEntity;
import com.wms.entity.app.dto.PageDto; import com.wms.entity.app.dto.PageDto;
import com.wms.entity.app.request.AnalysisRecordQuery;
import com.wms.entity.app.request.InventoryQuery; import com.wms.entity.app.request.InventoryQuery;
import com.wms.entity.app.request.TaskRecordQuery; import com.wms.entity.app.request.TaskRecordQuery;
import com.wms.entity.app.request.WorkSummaryQuery; import com.wms.entity.app.vo.*;
import com.wms.entity.app.vo.InventoryRecordVo; import com.wms.entity.table.*;
import com.wms.entity.app.vo.InventoryVo; import com.wms.service.AnalysisRecordService;
import com.wms.entity.app.vo.TaskRecordVO;
import com.wms.entity.app.vo.WorkSummaryVo;
import com.wms.entity.table.InventoryHistory;
import com.wms.entity.table.InventoryList;
import com.wms.entity.table.TaskRecord;
import com.wms.entity.table.WorkSummary;
import com.wms.service.InventoryHistoryService; import com.wms.service.InventoryHistoryService;
import com.wms.service.InventoryListService; import com.wms.service.InventoryListService;
import com.wms.service.TaskRecordService; import com.wms.service.TaskRecordService;
@ -59,14 +54,15 @@ public class RecordController {
private final HttpServletRequest servletRequest; private final HttpServletRequest servletRequest;
private final InventoryListService inventoryService;// 盘点服务 private final InventoryListService inventoryService;// 盘点服务
private final InventoryHistoryService inventoryHistoryService;// 盘点记录服务 private final InventoryHistoryService inventoryHistoryService;// 盘点记录服务
private final AnalysisRecordService analysisRecordService;// 数据分析记录服务
/** /**
* 查找所有物料 * 查找所有任务记录
*/ */
@PostMapping("/getTaskRecordByPage") @PostMapping("/getTaskRecordByPage")
@ResponseBody @ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String getGoodsInfoByPage(@RequestBody TaskRecordQuery taskRecordQuery){ public String getTaskRecordByPage(@RequestBody TaskRecordQuery taskRecordQuery){
logger.info("接收到查询任务记录请求:{}请求ip{}", convertJsonString(taskRecordQuery), HttpUtils.getIpAddr(servletRequest)); logger.info("接收到查询任务记录请求:{}请求ip{}", convertJsonString(taskRecordQuery), HttpUtils.getIpAddr(servletRequest));
ResponseEntity response = new ResponseEntity(); ResponseEntity response = new ResponseEntity();
try { try {
@ -160,4 +156,42 @@ public class RecordController {
return convertJsonString(response); return convertJsonString(response);
} }
} }
/**
* 查找所有数据分析记录
*/
@PostMapping("/getAnalysisRecordByPage")
@ResponseBody
@Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
public String getAnalysisRecordByPage(@RequestBody AnalysisRecordQuery analysisRecordQuery){
logger.info("接收到查询数据分析记录请求:{}请求ip{}", convertJsonString(analysisRecordQuery), HttpUtils.getIpAddr(servletRequest));
ResponseEntity response = new ResponseEntity();
try {
Page<AnalysisRecord> page = analysisRecordQuery.toMpPage();
// 查询条件
LambdaQueryWrapper<AnalysisRecord> lambdaQueryWrapper = new LambdaQueryWrapper<AnalysisRecord>()
.like(StringUtils.isNotEmpty(analysisRecordQuery.getWorkOrder()), AnalysisRecord::getWorkOrder, analysisRecordQuery.getWorkOrder())
.like(StringUtils.isNotEmpty(analysisRecordQuery.getSmallBox()), AnalysisRecord::getSmallBox, analysisRecordQuery.getSmallBox())
.like(StringUtils.isNotEmpty(analysisRecordQuery.getBigBox()), AnalysisRecord::getBigBox, analysisRecordQuery.getBigBox())
.like(StringUtils.isNotEmpty(analysisRecordQuery.getGoodsId()), AnalysisRecord::getGoodsId, analysisRecordQuery.getGoodsId())
.eq(StringUtils.isNotEmpty(analysisRecordQuery.getMachineType()), AnalysisRecord::getMachineType, analysisRecordQuery.getMachineType())
.eq(analysisRecordQuery.getStartDate() != null, AnalysisRecord::getStartDate, analysisRecordQuery.getStartDate())
.like(StringUtils.isNotEmpty(analysisRecordQuery.getVehicleId()), AnalysisRecord::getVehicleId, analysisRecordQuery.getVehicleId())
.like(StringUtils.isNotEmpty(analysisRecordQuery.getStandId()), AnalysisRecord::getStandId, analysisRecordQuery.getStandId());
Page<AnalysisRecord> analysisRecordPage = analysisRecordService.page(page, lambdaQueryWrapper);
// 生成数据
PageDto<AnalysisRecordVo> pageDto = PageDto.of(analysisRecordPage, records -> BeanUtil.copyProperties(records, AnalysisRecordVo.class));
response.setCode(ResponseCode.OK.getCode());
response.setMessage("查询成功");
response.setReturnData(pageDto);
return convertJsonString(response);
} catch (Exception e) {
// 回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
logger.error("查询数据分析记录发生异常");
response.setCode(ResponseCode.ERROR.getCode());
response.setMessage("查询数据分析记录发生异常");
return convertJsonString(response);
}
}
} }

View File

@ -39,12 +39,14 @@ import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.wms.config.InitLocalConfig.configMap; import static com.wms.config.InitLocalConfig.configMap;
import static com.wms.constants.WmsConstants.MYSQL_JSON_CI; import static com.wms.constants.WmsConstants.MYSQL_JSON_CI;
import static com.wms.utils.StringUtils.convertJsonString; import static com.wms.utils.StringUtils.convertJsonString;
import static com.wms.utils.StringUtils.durationFormat;
import static com.wms.utils.WmsUtils.generateId; import static com.wms.utils.WmsUtils.generateId;
/** /**
@ -156,6 +158,7 @@ public class TaskController {
private final InventoryListService inventoryService; private final InventoryListService inventoryService;
private final WorkSummaryService workSummaryService; private final WorkSummaryService workSummaryService;
private final InventoryHistoryService inventoryHistoryService; private final InventoryHistoryService inventoryHistoryService;
private final AnalysisRecordService analysisRecordService;// 数据分析记录服务
// 定义全局锁对象 为了电子标签反馈消息互斥 // 定义全局锁对象 为了电子标签反馈消息互斥
@ -923,6 +926,13 @@ public class TaskController {
.set(Stock::getStockStatus, StockStatus.PICKING.getCode()) .set(Stock::getStockStatus, StockStatus.PICKING.getCode())
.eq(Stock::getVehicleId, boxArriveRequest.getVehicleNo()) .eq(Stock::getVehicleId, boxArriveRequest.getVehicleNo())
.ne(Stock::getStockStatus, StockStatus.PICKING.getCode())); .ne(Stock::getStockStatus, StockStatus.PICKING.getCode()));
// TODO 3.9 增加数据分析记录
AnalysisRecord analysisRecord = new AnalysisRecord();
analysisRecord.setRecordId(WmsUtils.generateId(""));
analysisRecord.setStandId(pickTask.getStandId());
analysisRecord.setVehicleId(pickTask.getVehicleId());
analysisRecord.setArriveTime(LocalDateTime.now());
analysisRecordService.save(analysisRecord);
response.setCode(ResponseCode.OK.getCode()); response.setCode(ResponseCode.OK.getCode());
response.setMessage("上报成功"); response.setMessage("上报成功");
@ -1030,6 +1040,9 @@ public class TaskController {
response.setMessage("当前站台当前物料查询不到对应的工作,请扫描其他料号或者按按钮。"); response.setMessage("当前站台当前物料查询不到对应的工作,请扫描其他料号或者按按钮。");
return convertJsonString(response); return convertJsonString(response);
} }
// TODO 3/9 数据分析记录新增
List<AnalysisRecord> analysisRecords = new ArrayList<>();
// 亮灯 // 亮灯
BigDecimal originNum = stock.getGoodsRelated().getRemainNum(); BigDecimal originNum = stock.getGoodsRelated().getRemainNum();
BigDecimal realNum = stock.getGoodsRelated().getRemainNum(); BigDecimal realNum = stock.getGoodsRelated().getRemainNum();
@ -1069,10 +1082,23 @@ public class TaskController {
.set(ETagLocation::getConfirmNum, eTaskData.getNeedNum()) .set(ETagLocation::getConfirmNum, eTaskData.getNeedNum())
.eq(ETagLocation::getELocationId, eConfig.getELocationId())); .eq(ETagLocation::getELocationId, eConfig.getELocationId()));
// 设置工作流更新信息 // 设置工作流更新信息
// tempWork.setPickedNum(tempWork.getPickedNum().add(thisPickNum));
tempWork.setLightStatus(1); tempWork.setLightStatus(1);
tempWork.setOpUser(workQuery.getUserName()); tempWork.setOpUser(workQuery.getUserName());
realNum = realNum.subtract(thisPickNum); realNum = realNum.subtract(thisPickNum);
// TODO 3/9 添加数据分析记录
AnalysisRecord analysisRecord = new AnalysisRecord();
analysisRecord.setRecordId(generateId(""));
analysisRecord.setWorkOrder(tempWork.getWorkOrder());
analysisRecord.setSmallBox(tempWork.getWorkCenter());
analysisRecord.setBigBox(tempWork.getBigBox());
analysisRecord.setGoodsId(tempWork.getGoodsId());
analysisRecord.setMachineType(tempWork.getMachineType() == 1 ? "装载机" : "平地机");
analysisRecord.setStartDate(tempWork.getPlanDate());
analysisRecord.setVehicleId(vehicleId);
analysisRecord.setStandId(standId);
analysisRecord.setLightTime(LocalDateTime.now());
analysisRecord.setRequireNum(thisPickNum);
analysisRecords.add(analysisRecord);
} }
} }
if (!eTaskDataList.isEmpty()) { if (!eTaskDataList.isEmpty()) {
@ -1117,6 +1143,15 @@ public class TaskController {
.set(Stand::getPickGoods, workQuery.getGoodsId()) .set(Stand::getPickGoods, workQuery.getGoodsId())
.set(Stand::getPickVehicle, vehicleId) .set(Stand::getPickVehicle, vehicleId)
.eq(Stand::getStandId, standId)); .eq(Stand::getStandId, standId));
// TODO 3/9 保存数据分析记录
try {
if (!analysisRecords.isEmpty()) {
analysisRecordService.saveBatch(analysisRecords);
}
} catch (Exception e) {
logger.error("保存数据分析记录错误{}", JSON.toJSONString(e));
}
// 生成前台VO // 生成前台VO
StandPickVo standPickVo = new StandPickVo(); StandPickVo standPickVo = new StandPickVo();
standPickVo.setStandId(standId); standPickVo.setStandId(standId);
@ -1433,6 +1468,25 @@ public class TaskController {
.set(ETagLocation::getNeedNum, null) .set(ETagLocation::getNeedNum, null)
.set(ETagLocation::getConfirmNum, null) .set(ETagLocation::getConfirmNum, null)
.eq(ETagLocation::getELocationId, eTaskFeedbackRequest.getLocation())); .eq(ETagLocation::getELocationId, eTaskFeedbackRequest.getLocation()));
// TODO 3/9 新增数据分析记录
try {
AnalysisRecord analysisRecord = new AnalysisRecord();
analysisRecord.setRecordId(generateId(""));
analysisRecord.setWorkOrder(workFlow.getWorkOrder());
analysisRecord.setSmallBox(workFlow.getWorkCenter());
analysisRecord.setBigBox(workFlow.getBigBox());
analysisRecord.setGoodsId(workFlow.getGoodsId());
analysisRecord.setMachineType(workFlow.getMachineType() == 1 ? "装载机" : "平地机");
analysisRecord.setStartDate(workFlow.getPlanDate());
analysisRecord.setVehicleId(eTaskFeedbackRequest.getVehicleNo());
analysisRecord.setStandId(workFlow.getWorkStation());
analysisRecord.setCloseTime(LocalDateTime.now());
analysisRecord.setConfirmNum(BigDecimal.valueOf(eTaskFeedbackRequest.getConfirmNum()));
analysisRecordService.save(analysisRecord);
} catch (Exception e) {
logger.error("添加数据分析记录失败:{}", JSON.toJSONString(e));
}
} else {// 小盒子放入大盒子 } else {// 小盒子放入大盒子
// 根据location查询到对应的配置 // 根据location查询到对应的配置
ELocationConfigLast eLocationConfigLast = eLocationConfigLastService.getOne(new LambdaQueryWrapper<ELocationConfigLast>() ELocationConfigLast eLocationConfigLast = eLocationConfigLastService.getOne(new LambdaQueryWrapper<ELocationConfigLast>()
@ -1636,6 +1690,19 @@ public class TaskController {
response.setReturnData(pickVoEntity); response.setReturnData(pickVoEntity);
} }
response.setCode(ResponseCode.OK.getCode()); response.setCode(ResponseCode.OK.getCode());
// TODO 3/9 新增数据分析记录
try {
AnalysisRecord analysisRecord = new AnalysisRecord();
analysisRecord.setRecordId(generateId(""));
analysisRecord.setVehicleId(pickTask.getVehicleId());
analysisRecord.setStandId(standId);
analysisRecord.setArriveTime(pickTask.getArriveTime());
analysisRecord.setLeaveTime(LocalDateTime.now());
analysisRecord.setLastTime(durationFormat(analysisRecord.getArriveTime().until(analysisRecord.getLeaveTime(), ChronoUnit.SECONDS)));
analysisRecordService.save(analysisRecord);
} catch (Exception e) {
logger.error("数据分析记录保存异常{}", JSON.toJSONString(e));
}
} }
} else { } else {
// 存储拣选记录 // 存储拣选记录
@ -1675,6 +1742,19 @@ public class TaskController {
response.setReturnData(pickVoEntity); response.setReturnData(pickVoEntity);
} }
response.setCode(ResponseCode.OK.getCode()); response.setCode(ResponseCode.OK.getCode());
// TODO 3/9 新增数据分析记录
try {
AnalysisRecord analysisRecord = new AnalysisRecord();
analysisRecord.setRecordId(generateId(""));
analysisRecord.setVehicleId(pickTask.getVehicleId());
analysisRecord.setStandId(standId);
analysisRecord.setArriveTime(pickTask.getArriveTime());
analysisRecord.setLeaveTime(LocalDateTime.now());
analysisRecord.setLastTime(durationFormat(analysisRecord.getArriveTime().until(analysisRecord.getLeaveTime(), ChronoUnit.SECONDS)));
analysisRecordService.save(analysisRecord);
} catch (Exception e) {
logger.error("数据分析记录保存异常{}", JSON.toJSONString(e));
}
} }
} }
return convertJsonString(response); return convertJsonString(response);
@ -1812,6 +1892,19 @@ public class TaskController {
response.setMessage("当前工作已经全部完成,请至完成界面进行后续工作。"); response.setMessage("当前工作已经全部完成,请至完成界面进行后续工作。");
} }
response.setCode(ResponseCode.OK.getCode()); response.setCode(ResponseCode.OK.getCode());
// TODO 3/9 新增数据分析记录
try {
AnalysisRecord analysisRecord = new AnalysisRecord();
analysisRecord.setRecordId(generateId(""));
analysisRecord.setVehicleId(pickTask.getVehicleId());
analysisRecord.setStandId(pickTask.getStandId());
analysisRecord.setArriveTime(pickTask.getArriveTime());
analysisRecord.setLeaveTime(LocalDateTime.now());
analysisRecord.setLastTime(durationFormat(analysisRecord.getArriveTime().until(analysisRecord.getLeaveTime(), ChronoUnit.SECONDS)));
analysisRecordService.save(analysisRecord);
} catch (Exception e) {
logger.error("数据分析记录保存异常{}", JSON.toJSONString(e));
}
} }
} else { } else {
// 存储拣选记录 // 存储拣选记录
@ -1848,6 +1941,19 @@ public class TaskController {
response.setMessage("当前工作已经全部完成,请至完成界面进行后续工作。"); response.setMessage("当前工作已经全部完成,请至完成界面进行后续工作。");
} }
response.setCode(ResponseCode.OK.getCode()); response.setCode(ResponseCode.OK.getCode());
// TODO 3/9 新增数据分析记录
try {
AnalysisRecord analysisRecord = new AnalysisRecord();
analysisRecord.setRecordId(generateId(""));
analysisRecord.setVehicleId(pickTask.getVehicleId());
analysisRecord.setStandId(pickTask.getStandId());
analysisRecord.setArriveTime(pickTask.getArriveTime());
analysisRecord.setLeaveTime(LocalDateTime.now());
analysisRecord.setLastTime(durationFormat(analysisRecord.getArriveTime().until(analysisRecord.getLeaveTime(), ChronoUnit.SECONDS)));
analysisRecordService.save(analysisRecord);
} catch (Exception e) {
logger.error("数据分析记录保存异常{}", JSON.toJSONString(e));
}
} }
} }
return convertJsonString(response); return convertJsonString(response);
@ -2586,6 +2692,8 @@ public class TaskController {
WorkStationConfig currentBigBoxConfig = stationConfigs.get(0); WorkStationConfig currentBigBoxConfig = stationConfigs.get(0);
// 当前配置的工单数/大盒子 // 当前配置的工单数/大盒子
int orderQuantity = currentBigBoxConfig.getOrderQuantity(); int orderQuantity = currentBigBoxConfig.getOrderQuantity();
// 亮灯顺序是否为正序
boolean isAsc = Objects.equals(currentBigBoxConfig.getVehicleLocation(), "1");
// 亮灯列表 // 亮灯列表
List<ETaskData> eTaskDataList = new ArrayList<>(); List<ETaskData> eTaskDataList = new ArrayList<>();
// 查询这个大盒子对应的小盒子 // 查询这个大盒子对应的小盒子
@ -2635,11 +2743,12 @@ public class TaskController {
// 利用DBS对这些工单id进行排序 // 利用DBS对这些工单id进行排序
LambdaQueryWrapper<KateDBS> dbsQueryWrapper = new LambdaQueryWrapper<KateDBS>() LambdaQueryWrapper<KateDBS> dbsQueryWrapper = new LambdaQueryWrapper<KateDBS>()
.in(KateDBS::getWorkOrder, orderIds); .in(KateDBS::getWorkOrder, orderIds);
if (Objects.equals(currentBigBoxConfig.getModel(), "MWL")) { // 根据配置判断是否是正序排序
// 装载机正序排序 if (isAsc) {
// 正序排序
dbsQueryWrapper.orderByAsc(KateDBS::getWorkSequence); dbsQueryWrapper.orderByAsc(KateDBS::getWorkSequence);
} else { } else {
// 平地机倒序排序 // 倒序排序
dbsQueryWrapper.orderByDesc(KateDBS::getWorkSequence); dbsQueryWrapper.orderByDesc(KateDBS::getWorkSequence);
} }
List<KateDBS> kateDBSList = kateDBSService.list(dbsQueryWrapper); List<KateDBS> kateDBSList = kateDBSService.list(dbsQueryWrapper);
@ -2652,11 +2761,12 @@ public class TaskController {
// 查询到这些工单的dbs // 查询到这些工单的dbs
Map<String, Integer> orderedOrdersIdsMap = kateDBSList.stream().collect(Collectors.toMap(KateDBS::getWorkOrder, KateDBS::getWorkSequence)); Map<String, Integer> orderedOrdersIdsMap = kateDBSList.stream().collect(Collectors.toMap(KateDBS::getWorkOrder, KateDBS::getWorkSequence));
List<String> orderedOrdersIds; List<String> orderedOrdersIds;
if (Objects.equals(currentBigBoxConfig.getModel(), "MWL")) { // 根据配置判断是否是正序排序
// 装载机正序排序 if (isAsc) {
// 正序排序
orderedOrdersIds = orderedOrdersIdsMap.entrySet().stream().sorted(Map.Entry.comparingByValue()).map(Map.Entry::getKey).toList(); orderedOrdersIds = orderedOrdersIdsMap.entrySet().stream().sorted(Map.Entry.comparingByValue()).map(Map.Entry::getKey).toList();
} else { } else {
// 平地机倒序排序 // 倒序排序
orderedOrdersIds = orderedOrdersIdsMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).map(Map.Entry::getKey).toList(); orderedOrdersIds = orderedOrdersIdsMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).map(Map.Entry::getKey).toList();
} }
List<String> toBeLightedOrders = orderedOrdersIds.stream().skip((long) (sortBoxRequest.getOrderOfOrders() - 1) * orderQuantity).limit(orderQuantity).toList(); List<String> toBeLightedOrders = orderedOrdersIds.stream().skip((long) (sortBoxRequest.getOrderOfOrders() - 1) * orderQuantity).limit(orderQuantity).toList();

View File

@ -0,0 +1,119 @@
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.LocalDate;
import java.time.LocalDateTime;
/**
* 数据分析记录查询参数
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AnalysisRecordQuery extends PageQuery {
/**
* 主键
*/
@JsonProperty("recordId")
private String recordId;
/**
* 工单
*/
@JsonProperty("workOrder")
private String workOrder;
/**
* 小盒子
*/
@JsonProperty("smallBox")
private String smallBox;
/**
* 大盒子
*/
@JsonProperty("bigBox")
private String bigBox;
/**
* 料号
*/
@JsonProperty("goodsId")
private String goodsId;
/**
* 机型
*/
@JsonProperty("machineType")
private String machineType;
/**
* 开工日期
*/
@JsonProperty("startDate")
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate startDate;
/**
* 载具号
*/
@JsonProperty("vehicleId")
private String vehicleId;
/**
* 库位号
*/
@JsonProperty("locationId")
private String locationId;
/**
* 本次分配数量
*/
@JsonProperty("distributeQty")
private BigDecimal distributeQty;
/**
* 站台号
*/
@JsonProperty("standId")
private String standId;
/**
* 到达时间
*/
@JsonProperty("arriveTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime arriveTime;
/**
* 离开时间
*/
@JsonProperty("leaveTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime leaveTime;
/**
* 滞留时常
*/
@JsonProperty("lastTime")
private String lastTime;
/**
* 亮灯时间
*/
@JsonProperty("lightTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime lightTime;
/**
* 拍灯时间
*/
@JsonProperty("closeTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime closeTime;
/**
* 需求数量
*/
@JsonProperty("requireNum")
private BigDecimal requireNum;
/**
* 确认数量
*/
@JsonProperty("confirmNum")
private BigDecimal confirmNum;
}

View File

@ -0,0 +1,117 @@
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.LocalDate;
import java.time.LocalDateTime;
/**
* 数据分析记录vo
*/
@Data
public class AnalysisRecordVo {
/**
* 主键
*/
@JsonProperty("recordId")
private String recordId;
/**
* 工单
*/
@JsonProperty("workOrder")
private String workOrder;
/**
* 小盒子
*/
@JsonProperty("smallBox")
private String smallBox;
/**
* 大盒子
*/
@JsonProperty("bigBox")
private String bigBox;
/**
* 料号
*/
@JsonProperty("goodsId")
private String goodsId;
/**
* 机型
*/
@JsonProperty("machineType")
private String machineType;
/**
* 开工日期
*/
@JsonProperty("startDate")
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate startDate;
/**
* 载具号
*/
@JsonProperty("vehicleId")
private String vehicleId;
/**
* 库位号
*/
@JsonProperty("locationId")
private String locationId;
/**
* 本次分配数量
*/
@JsonProperty("distributeQty")
private BigDecimal distributeQty;
/**
* 站台号
*/
@JsonProperty("standId")
private String standId;
/**
* 到达时间
*/
@JsonProperty("arriveTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime arriveTime;
/**
* 离开时间
*/
@JsonProperty("leaveTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime leaveTime;
/**
* 滞留时长
*/
@JsonProperty("lastTime")
private String lastTime;
/**
* 亮灯时间
*/
@JsonProperty("lightTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime lightTime;
/**
* 拍灯时间
*/
@JsonProperty("closeTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime closeTime;
/**
* 需求数量
*/
@JsonProperty("requireNum")
private BigDecimal requireNum;
/**
* 确认数量
*/
@JsonProperty("confirmNum")
private BigDecimal confirmNum;
}

View File

@ -0,0 +1,110 @@
package com.wms.entity.table;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 记录表
*/
@Getter
@Setter
@TableName("tbl_app_analysis_record")
public class AnalysisRecord {
/**
* 主键
*/
@TableId("record_id")
private String recordId;
/**
* 工单
*/
@TableField("work_order")
private String workOrder;
/**
* 小盒子
*/
@TableField("small_box")
private String smallBox;
/**
* 大盒子
*/
@TableField("big_box")
private String bigBox;
/**
* 料号
*/
@TableField("goods_id")
private String goodsId;
/**
* 机型
*/
@TableField("machine_type")
private String machineType;
/**
* 开工日期
*/
@TableField("start_date")
private LocalDate startDate;
/**
* 载具号
*/
@TableField("vehicle_id")
private String vehicleId;
/**
* 库位号
*/
@TableField("location_id")
private String locationId;
/**
* 本次分配数量
*/
@TableField("distribute_qty")
private BigDecimal distributeQty;
/**
* 站台号
*/
@TableField("stand_id")
private String standId;
/**
* 到达时间
*/
@TableField("arrive_time")
private LocalDateTime arriveTime;
/**
* 离开时间
*/
@TableField("leave_time")
private LocalDateTime leaveTime;
/**
* 滞留时常
*/
@TableField("last_time")
private String lastTime;
/**
* 亮灯时间
*/
@TableField("light_time")
private LocalDateTime lightTime;
/**
* 拍灯时间
*/
@TableField("close_time")
private LocalDateTime closeTime;
/**
* 需求数量
*/
@TableField("require_num")
private BigDecimal requireNum;
/**
* 确认数量
*/
@TableField("confirm_num")
private BigDecimal confirmNum;
}

View File

@ -0,0 +1,12 @@
package com.wms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wms.entity.table.AnalysisRecord;
import org.apache.ibatis.annotations.Mapper;
/**
* 分析记录mapper
*/
@Mapper
public interface AnalysisRecordMapper extends BaseMapper<AnalysisRecord> {
}

View File

@ -0,0 +1,10 @@
package com.wms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wms.entity.table.AnalysisRecord;
/**
* 分析记录 服务接口
*/
public interface AnalysisRecordService extends IService<AnalysisRecord> {
}

View File

@ -13,6 +13,7 @@ import com.wms.service.business.IWmsTaskService;
import com.wms.service.business.IWorkService; import com.wms.service.business.IWorkService;
import com.wms.utils.DbTransUtils; import com.wms.utils.DbTransUtils;
import com.wms.utils.StringUtils; import com.wms.utils.StringUtils;
import com.wms.utils.WmsUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -60,6 +61,7 @@ public class WorkServiceImplements implements IWorkService {
private final List<String> workCreatingStations = new ArrayList<>();// 当前正在创建任务的站台 private final List<String> workCreatingStations = new ArrayList<>();// 当前正在创建任务的站台
private final VehicleService vehicleService;// 料箱服务 private final VehicleService vehicleService;// 料箱服务
private final DbTransUtils dbTransUtils;// 事务事务工具类 private final DbTransUtils dbTransUtils;// 事务事务工具类
private final AnalysisRecordService analysisRecordService;// 数据分析记录服务
//获取配置文件的是否添加了需求时间 //获取配置文件的是否添加了需求时间
@ -375,6 +377,8 @@ public class WorkServiceImplements implements IWorkService {
List<String> needUpdateWorkFlowIds = new ArrayList<>();// 需要更新的工作流id List<String> needUpdateWorkFlowIds = new ArrayList<>();// 需要更新的工作流id
List<String> needUpdateOrderIds = new ArrayList<>();// 需要更新的工单id List<String> needUpdateOrderIds = new ArrayList<>();// 需要更新的工单id
List<String> thisTimeCannotOutVehicleIds = new ArrayList<>();// 本次不能出库的载具号 List<String> thisTimeCannotOutVehicleIds = new ArrayList<>();// 本次不能出库的载具号
// 本次需要添加的分析记录 TODO 新增于3/6
List<AnalysisRecord> anysisRecordList = new ArrayList<>();
// 查询出所有的库存 // 查询出所有的库存
List<Stock> allStockList = stockService.list(); List<Stock> allStockList = stockService.list();
// 第一次循环分出已经出库的物料 // 第一次循环分出已经出库的物料
@ -460,12 +464,32 @@ public class WorkServiceImplements implements IWorkService {
if (needNum.compareTo(BigDecimal.ZERO) <= 0) { if (needNum.compareTo(BigDecimal.ZERO) <= 0) {
continue; continue;
} }
if (afterNum.compareTo(needNum) >= 0) { // 生成记录数据 TODO 新增于3/6
afterNum = afterNum.subtract(needNum); AnalysisRecord analysisRecord = new AnalysisRecord();
workFlow.setDistributedNum(workFlow.getNeedNum()); analysisRecord.setRecordId(WmsUtils.generateId(""));
analysisRecord.setWorkOrder(workFlow.getWorkOrder());
analysisRecord.setSmallBox(workFlow.getWorkCenter());
analysisRecord.setBigBox(workFlow.getBigBox());
analysisRecord.setGoodsId(workFlow.getGoodsId());
if (Objects.equals(workFlow.getMachineType(), 1)) {
analysisRecord.setMachineType("装载机");
} else if (Objects.equals(workFlow.getMachineType(), 2)) {
analysisRecord.setMachineType("平地机");
} else { } else {
afterNum = BigDecimal.ZERO; analysisRecord.setMachineType("机型错误值:" + workFlow.getMachineType());
}
analysisRecord.setStartDate(workFlow.getPlanDate());
if (afterNum.compareTo(needNum) >= 0) {
// TODO 新增数据分析记录 3/6
analysisRecord.setDistributeQty(needNum);
workFlow.setDistributedNum(workFlow.getNeedNum());
afterNum = afterNum.subtract(needNum);
} else {
// TODO 新增数据分析记录 3/6
analysisRecord.setDistributeQty(afterNum);
workFlow.setDistributedNum(workFlow.getDistributedNum() == null ? afterNum : workFlow.getDistributedNum().add(afterNum)); workFlow.setDistributedNum(workFlow.getDistributedNum() == null ? afterNum : workFlow.getDistributedNum().add(afterNum));
afterNum = BigDecimal.ZERO;
} }
workFlow.setWorkStatus(1); workFlow.setWorkStatus(1);
// 添加需要更新的工作流id // 添加需要更新的工作流id
@ -476,6 +500,11 @@ public class WorkServiceImplements implements IWorkService {
if (!needUpdateOrderIds.contains(workFlow.getOrderId())) { if (!needUpdateOrderIds.contains(workFlow.getOrderId())) {
needUpdateOrderIds.add(workFlow.getOrderId()); needUpdateOrderIds.add(workFlow.getOrderId());
} }
// TODO 新增数据分析记录 3/6
analysisRecord.setVehicleId(stock.getVehicleId());
analysisRecord.setLocationId(stock.getLocationId());
analysisRecord.setStandId(standId);
anysisRecordList.add(analysisRecord);
} }
} }
if (afterNum.compareTo(originNum) != 0) { if (afterNum.compareTo(originNum) != 0) {
@ -539,12 +568,32 @@ public class WorkServiceImplements implements IWorkService {
if (needNum.compareTo(BigDecimal.ZERO) <= 0) { if (needNum.compareTo(BigDecimal.ZERO) <= 0) {
continue; continue;
} }
if (afterNum.compareTo(needNum) >= 0) { // 生成记录数据 TODO 新增于3/6
afterNum = afterNum.subtract(needNum); AnalysisRecord analysisRecord = new AnalysisRecord();
workFlow.setDistributedNum(workFlow.getNeedNum()); analysisRecord.setRecordId(WmsUtils.generateId(""));
analysisRecord.setWorkOrder(workFlow.getWorkOrder());
analysisRecord.setSmallBox(workFlow.getWorkCenter());
analysisRecord.setBigBox(workFlow.getBigBox());
analysisRecord.setGoodsId(workFlow.getGoodsId());
if (Objects.equals(workFlow.getMachineType(), 1)) {
analysisRecord.setMachineType("装载机");
} else if (Objects.equals(workFlow.getMachineType(), 2)) {
analysisRecord.setMachineType("平地机");
} else { } else {
afterNum = BigDecimal.ZERO; analysisRecord.setMachineType("机型错误值:" + workFlow.getMachineType());
}
analysisRecord.setStartDate(workFlow.getPlanDate());
if (afterNum.compareTo(needNum) >= 0) {
// TODO 新增数据分析记录 3/6
analysisRecord.setDistributeQty(needNum);
workFlow.setDistributedNum(workFlow.getNeedNum());
afterNum = afterNum.subtract(needNum);
} else {
// TODO 新增数据分析记录 3/6
analysisRecord.setDistributeQty(afterNum);
workFlow.setDistributedNum(workFlow.getDistributedNum() == null ? afterNum : workFlow.getDistributedNum().add(afterNum)); workFlow.setDistributedNum(workFlow.getDistributedNum() == null ? afterNum : workFlow.getDistributedNum().add(afterNum));
afterNum = BigDecimal.ZERO;
} }
workFlow.setWorkStatus(1); workFlow.setWorkStatus(1);
// 添加需要更新的工作流id // 添加需要更新的工作流id
@ -555,6 +604,12 @@ public class WorkServiceImplements implements IWorkService {
if (!needUpdateOrderIds.contains(workFlow.getOrderId())) { if (!needUpdateOrderIds.contains(workFlow.getOrderId())) {
needUpdateOrderIds.add(workFlow.getOrderId()); needUpdateOrderIds.add(workFlow.getOrderId());
} }
// TODO 新增数据分析记录 3/6
analysisRecord.setVehicleId(stock.getVehicleId());
analysisRecord.setLocationId(stock.getLocationId());
analysisRecord.setStandId(standId);
anysisRecordList.add(analysisRecord);
} }
} }
if (afterNum.compareTo(originNum) != 0) { if (afterNum.compareTo(originNum) != 0) {
@ -587,12 +642,32 @@ public class WorkServiceImplements implements IWorkService {
if (needNum.compareTo(BigDecimal.ZERO) <= 0) { if (needNum.compareTo(BigDecimal.ZERO) <= 0) {
continue; continue;
} }
if (afterNum.compareTo(needNum) >= 0) { // 生成记录数据 TODO 新增于3/6
afterNum = afterNum.subtract(needNum); AnalysisRecord analysisRecord = new AnalysisRecord();
workFlow.setDistributedNum(workFlow.getNeedNum()); analysisRecord.setRecordId(WmsUtils.generateId(""));
analysisRecord.setWorkOrder(workFlow.getWorkOrder());
analysisRecord.setSmallBox(workFlow.getWorkCenter());
analysisRecord.setBigBox(workFlow.getBigBox());
analysisRecord.setGoodsId(workFlow.getGoodsId());
if (Objects.equals(workFlow.getMachineType(), 1)) {
analysisRecord.setMachineType("装载机");
} else if (Objects.equals(workFlow.getMachineType(), 2)) {
analysisRecord.setMachineType("平地机");
} else { } else {
afterNum = BigDecimal.ZERO; analysisRecord.setMachineType("机型错误值:" + workFlow.getMachineType());
}
analysisRecord.setStartDate(workFlow.getPlanDate());
if (afterNum.compareTo(needNum) >= 0) {
// TODO 新增数据分析记录 3/6
analysisRecord.setDistributeQty(needNum);
workFlow.setDistributedNum(workFlow.getNeedNum());
afterNum = afterNum.subtract(needNum);
} else {
// TODO 新增数据分析记录 3/6
analysisRecord.setDistributeQty(afterNum);
workFlow.setDistributedNum(workFlow.getDistributedNum() == null ? afterNum : workFlow.getDistributedNum().add(afterNum)); workFlow.setDistributedNum(workFlow.getDistributedNum() == null ? afterNum : workFlow.getDistributedNum().add(afterNum));
afterNum = BigDecimal.ZERO;
} }
workFlow.setWorkStatus(1); workFlow.setWorkStatus(1);
// 添加需要更新的工作流id // 添加需要更新的工作流id
@ -603,6 +678,12 @@ public class WorkServiceImplements implements IWorkService {
if (!needUpdateOrderIds.contains(workFlow.getOrderId())) { if (!needUpdateOrderIds.contains(workFlow.getOrderId())) {
needUpdateOrderIds.add(workFlow.getOrderId()); needUpdateOrderIds.add(workFlow.getOrderId());
} }
// TODO 新增数据分析记录 3/6
analysisRecord.setVehicleId(stock.getVehicleId());
analysisRecord.setLocationId(stock.getLocationId());
analysisRecord.setStandId(workFlow.getWorkStation());
anysisRecordList.add(analysisRecord);
// 创建拣选任务 // 创建拣选任务
String key = stock.getVehicleId() + "_" + workFlow.getWorkStation(); String key = stock.getVehicleId() + "_" + workFlow.getWorkStation();
// 此次新建的保存过 // 此次新建的保存过
@ -653,10 +734,20 @@ public class WorkServiceImplements implements IWorkService {
.set(KateOrders::getLastUpdateReason, "执行工作") .set(KateOrders::getLastUpdateReason, "执行工作")
.in(KateOrders::getOrderId, needUpdateOrderIds)); .in(KateOrders::getOrderId, needUpdateOrderIds));
} }
} }
}); });
if (!doTransResult) { if (!doTransResult) {
logger.error("解析工作生成任务时,数据库事务执行错误。"); logger.error("解析工作生成任务时,数据库事务执行错误。");
} else {
// TODO 3/9 新增保存数据分析记录
try {
if (!anysisRecordList.isEmpty()) {
analysisRecordService.saveBatch(anysisRecordList);
}
} catch (Exception e) {
logger.error("保存数据分析记录时发生错误。{}", JSON.toJSONString(e));
}
} }
} }

View File

@ -0,0 +1,14 @@
package com.wms.service.serviceImplements;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wms.entity.table.AnalysisRecord;
import com.wms.mapper.AnalysisRecordMapper;
import com.wms.service.AnalysisRecordService;
import org.springframework.stereotype.Service;
/**
* 分析记录 服务实现类
*/
@Service
public class AnalysisRecordServiceImpl extends ServiceImpl<AnalysisRecordMapper, AnalysisRecord> implements AnalysisRecordService {
}

View File

@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.util.ListUtils; import com.alibaba.excel.util.ListUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wms.config.InitLocalConfig; import com.wms.config.InitLocalConfig;
import com.wms.entity.table.WorkStationConfig; import com.wms.entity.table.WorkStationConfig;
import com.wms.service.WorkStationConfigService; import com.wms.service.WorkStationConfigService;
@ -14,7 +13,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -45,8 +43,8 @@ public class UploadStationConfigListener implements ReadListener<StationConfigEx
@Override @Override
public void onException(Exception exception, AnalysisContext context) throws Exception { public void onException(Exception exception, AnalysisContext context) throws Exception {
int rowCount = context.readRowHolder().getRowIndex() + 1; int rowCount = context.readRowHolder().getRowIndex() + 1;
logger.error("处理工站配置数据发生异常,第{}行发生异常。", rowCount); logger.error("处理工站配置数据发生异常,第{}行发生异常。异常信息:{}。", rowCount, exception.getMessage());
throw new Exception("" + rowCount + "行数据异常。"); throw new Exception("" + rowCount + "行数据异常。异常信息:" + exception.getMessage() + "");
} }
/** /**

View File

@ -0,0 +1,111 @@
package com.wms.utils.excel.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 数据分析记录excelVo
*/
@Data
public class AnalysisRecordExcelVo {
/**
* 主键
*/
@ExcelProperty("记录id")
private String recordId;
/**
* 工单
*/
@ExcelProperty("工单")
private String workOrder;
/**
* 小盒子
*/
@ExcelProperty("小盒子")
private String smallBox;
/**
* 大盒子
*/
@ExcelProperty("大盒子")
private String bigBox;
/**
* 料号
*/
@ExcelProperty("料号")
private String goodsId;
/**
* 机型
*/
@ExcelProperty("机型")
private String machineType;
/**
* 开工日期
*/
@ExcelProperty("开工日期")
@DateTimeFormat("yyyy-MM-dd")
private LocalDate startDate;
/**
* 载具号
*/
@ExcelProperty("载具号")
private String vehicleId;
/**
* 库位号
*/
@ExcelProperty("库位号")
private String locationId;
/**
* 本次分配数量
*/
@ExcelProperty("本次分配数量")
private BigDecimal distributeQty;
/**
* 站台号
*/
@ExcelProperty("站台号")
private String standId;
/**
* 到达时间
*/
@ExcelProperty("到达时间")
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
private LocalDateTime arriveTime;
/**
* 离开时间
*/
@ExcelProperty("离开时间")
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
private LocalDateTime leaveTime;
/**
* 滞留时长
*/
@ExcelProperty("滞留时长")
private String lastTime;
/**
* 亮灯时间
*/
@ExcelProperty("亮灯时间")
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
private LocalDateTime lightTime;
/**
* 拍灯时间
*/
@ExcelProperty("拍灯时间")
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
private LocalDateTime closeTime;
/**
* 需求数量
*/
@ExcelProperty("需求数量")
private BigDecimal requireNum;
/**
* 确认数量
*/
@ExcelProperty("确认数量")
private BigDecimal confirmNum;
}

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wms.mapper.AnalysisRecordMapper">
</mapper>