增加数据分析记录功能
This commit is contained in:
parent
a7d616fcb7
commit
9bcb2b103e
|
|
@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出工单
|
* 导出工单
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
117
src/main/java/com/wms/entity/app/vo/AnalysisRecordVo.java
Normal file
117
src/main/java/com/wms/entity/app/vo/AnalysisRecordVo.java
Normal 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;
|
||||||
|
}
|
||||||
110
src/main/java/com/wms/entity/table/AnalysisRecord.java
Normal file
110
src/main/java/com/wms/entity/table/AnalysisRecord.java
Normal 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;
|
||||||
|
}
|
||||||
12
src/main/java/com/wms/mapper/AnalysisRecordMapper.java
Normal file
12
src/main/java/com/wms/mapper/AnalysisRecordMapper.java
Normal 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> {
|
||||||
|
}
|
||||||
10
src/main/java/com/wms/service/AnalysisRecordService.java
Normal file
10
src/main/java/com/wms/service/AnalysisRecordService.java
Normal 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> {
|
||||||
|
}
|
||||||
|
|
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
}
|
||||||
|
|
@ -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() + "。");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
111
src/main/java/com/wms/utils/excel/vo/AnalysisRecordExcelVo.java
Normal file
111
src/main/java/com/wms/utils/excel/vo/AnalysisRecordExcelVo.java
Normal 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;
|
||||||
|
}
|
||||||
6
src/main/resources/mapper/AnalysisRecordMapper.xml
Normal file
6
src/main/resources/mapper/AnalysisRecordMapper.xml
Normal 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>
|
||||||
Loading…
Reference in New Issue
Block a user