KPI入库分析、出库分析、巷道均匀分析、货位分析
This commit is contained in:
@@ -0,0 +1,280 @@
|
||||
package com.ruoyi.kpi.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.kpi.mapper.BasCargoSpaceMapper;
|
||||
import com.ruoyi.kpi.domain.BasCargoSpace;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.ruoyi.kpi.mapper.MydoJobFinishMapper;
|
||||
import com.ruoyi.kpi.domain.MydoJobFinish;
|
||||
import com.ruoyi.kpi.service.KpiService;
|
||||
|
||||
/**
|
||||
* KPI 统计分析 服务实现类
|
||||
*
|
||||
* @author gw
|
||||
* @date 2025-05-21
|
||||
*/
|
||||
@Service
|
||||
public class KpiServiceImpl implements KpiService
|
||||
{
|
||||
@Autowired
|
||||
private MydoJobFinishMapper mydoJobFinishMapper;
|
||||
|
||||
@Autowired
|
||||
private BasCargoSpaceMapper basCargoSpaceMapper;
|
||||
/**
|
||||
* 获取入库均匀分析数据
|
||||
*
|
||||
* @param warehouseId 仓库ID
|
||||
* @param yearMonth 年月(格式:yyyy-MM)
|
||||
* @return 入库均匀分析数据
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> getInAnalysis(String warehouseId, String yearMonth)
|
||||
{
|
||||
MydoJobFinish mydoJobFinish = new MydoJobFinish();
|
||||
|
||||
List<MydoJobFinish> list = mydoJobFinishMapper.selectMydoJobFinishList(mydoJobFinish);
|
||||
|
||||
Map<String, Integer> roadwayCount = new HashMap<>();
|
||||
|
||||
for (MydoJobFinish job : list) {
|
||||
// 检查入库作业标识是否小于10
|
||||
if (job.getInOrOut() == null || Integer.parseInt(job.getInOrOut()) >= 10) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 按仓库ID筛选
|
||||
if (!warehouseId.equals(job.getWarehouseId())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 如果指定了年月,则按年月筛选
|
||||
if (yearMonth != null && !yearMonth.isEmpty()) {
|
||||
if (job.getStartTime() == null || !job.getStartTime().startsWith(yearMonth)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
String roadwayId = job.getRoadwayId();
|
||||
if (roadwayId != null) {
|
||||
roadwayCount.put(roadwayId, roadwayCount.getOrDefault(roadwayId, 0) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 将结果转换为指定格式
|
||||
List<String> tunnels = new ArrayList<>();
|
||||
List<Integer> counts = new ArrayList<>();
|
||||
|
||||
for (Map.Entry<String, Integer> entry : roadwayCount.entrySet()) {
|
||||
tunnels.add(entry.getKey() + "巷道");
|
||||
counts.add(entry.getValue());
|
||||
}
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("tunnels", tunnels);
|
||||
result.put("counts", counts);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取入库均匀分析数据
|
||||
*
|
||||
* @param warehouseId 仓库ID
|
||||
* @param yearMonth 年月(格式:yyyy-MM)
|
||||
* @return 入库均匀分析数据
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> getOutAnalysis(String warehouseId, String yearMonth)
|
||||
{
|
||||
MydoJobFinish mydoJobFinish = new MydoJobFinish();
|
||||
|
||||
List<MydoJobFinish> list = mydoJobFinishMapper.selectMydoJobFinishList(mydoJobFinish);
|
||||
|
||||
Map<String, Integer> roadwayCount = new HashMap<>();
|
||||
|
||||
for (MydoJobFinish job : list) {
|
||||
// 检查出入库作业标识是否大于10
|
||||
if (job.getInOrOut() == null || Integer.parseInt(job.getInOrOut()) < 10) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 按仓库ID筛选
|
||||
if (!warehouseId.equals(job.getWarehouseId())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 如果指定了年月,则按年月筛选
|
||||
if (yearMonth != null && !yearMonth.isEmpty()) {
|
||||
if (job.getStartTime() == null || !job.getStartTime().startsWith(yearMonth)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
String roadwayId = job.getRoadwayId();
|
||||
if (roadwayId != null) {
|
||||
roadwayCount.put(roadwayId, roadwayCount.getOrDefault(roadwayId, 0) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
// 将结果转换为指定格式
|
||||
List<String> tunnels = new ArrayList<>();
|
||||
List<Integer> counts = new ArrayList<>();
|
||||
|
||||
for (Map.Entry<String, Integer> entry : roadwayCount.entrySet()) {
|
||||
tunnels.add(entry.getKey() + "巷道");
|
||||
counts.add(entry.getValue());
|
||||
}
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("tunnels", tunnels);
|
||||
result.put("counts", counts);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取巷道均匀分析数据
|
||||
*
|
||||
* @param warehouseId 仓库ID
|
||||
* @param startTime 开始时间,格式:yyyy-MM-dd HH:mm:ss
|
||||
* @param endTime 结束时间,格式:yyyy-MM-dd HH:mm:ss
|
||||
* @return 巷道分析数据
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> getRoadwayAnalysis(String warehouseId, String startTime, String endTime)
|
||||
{
|
||||
MydoJobFinish mydoJobFinish = new MydoJobFinish();
|
||||
List<MydoJobFinish> list = mydoJobFinishMapper.selectMydoJobFinishList(mydoJobFinish);
|
||||
|
||||
// 用于存储每个巷道的入库和出库数量
|
||||
Map<String, Integer> inCounts = new HashMap<>();
|
||||
Map<String, Integer> outCounts = new HashMap<>();
|
||||
|
||||
for (MydoJobFinish job : list) {
|
||||
// 按仓库ID筛选
|
||||
if (!warehouseId.equals(job.getWarehouseId())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 按时间范围筛选
|
||||
if (startTime != null && !startTime.isEmpty()) {
|
||||
if (job.getStartTime() == null || job.getStartTime().compareTo(startTime) < 0) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (endTime != null && !endTime.isEmpty()) {
|
||||
if (job.getStartTime() == null || job.getStartTime().compareTo(endTime) > 0) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
String roadwayId = job.getRoadwayId();
|
||||
if (roadwayId != null) {
|
||||
// 区分入库和出库作业
|
||||
if (job.getInOrOut() != null) {
|
||||
int inOrOut = Integer.parseInt(job.getInOrOut());
|
||||
if (inOrOut < 10) {
|
||||
// 入库作业
|
||||
inCounts.put(roadwayId, inCounts.getOrDefault(roadwayId, 0) + 1);
|
||||
} else {
|
||||
// 出库作业
|
||||
outCounts.put(roadwayId, outCounts.getOrDefault(roadwayId, 0) + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 合并所有巷道ID
|
||||
Set<String> allRoadways = new HashSet<>();
|
||||
allRoadways.addAll(inCounts.keySet());
|
||||
allRoadways.addAll(outCounts.keySet());
|
||||
|
||||
// 将结果转换为指定格式
|
||||
List<String> tunnels = new ArrayList<>();
|
||||
List<Integer> inCountsList = new ArrayList<>();
|
||||
List<Integer> outCountsList = new ArrayList<>();
|
||||
|
||||
for (String roadwayId : allRoadways) {
|
||||
tunnels.add(roadwayId + "巷道");
|
||||
inCountsList.add(inCounts.getOrDefault(roadwayId, 0));
|
||||
outCountsList.add(outCounts.getOrDefault(roadwayId, 0));
|
||||
}
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("tunnels", tunnels);
|
||||
result.put("inCounts", inCountsList);
|
||||
result.put("outCounts", outCountsList);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取巷道均匀分析数据
|
||||
*
|
||||
* @param warehouseId 仓库ID
|
||||
* @return 货位分析
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> getSpaceAnalysis(String warehouseId)
|
||||
{
|
||||
BasCargoSpace basCargoSpace = new BasCargoSpace();
|
||||
basCargoSpace.setWarehouseId(warehouseId);
|
||||
List<BasCargoSpace> list = basCargoSpaceMapper.selectBasCargoSpaceList(basCargoSpace);
|
||||
|
||||
// 按巷道和状态分类统计
|
||||
Map<String, Map<String, Integer>> roadwayStats = new HashMap<>();
|
||||
Set<String> roadwayIds = new HashSet<>();
|
||||
|
||||
for (BasCargoSpace space : list) {
|
||||
String roadwayId = space.getRoadwayId();
|
||||
String status = space.getStatus();
|
||||
if (roadwayId != null && status != null) {
|
||||
roadwayIds.add(roadwayId);
|
||||
String statusName;
|
||||
switch (Integer.parseInt(status)) {
|
||||
case 1: statusName = "空货位"; break;
|
||||
case 2: statusName = "满货位"; break;
|
||||
case 3: statusName = "入库分配"; break;
|
||||
case 4: statusName = "出库分配"; break;
|
||||
case 5: statusName = "入库需盘点"; break;
|
||||
case 6: statusName = "出库需盘点"; break;
|
||||
default: continue;
|
||||
}
|
||||
|
||||
roadwayStats.computeIfAbsent(statusName, k -> new HashMap<>());
|
||||
Map<String, Integer> statusMap = roadwayStats.get(statusName);
|
||||
statusMap.merge(roadwayId, 1, Integer::sum);
|
||||
}
|
||||
}
|
||||
|
||||
// 构建前端所需的数据格式
|
||||
List<Map<String, Object>> result = new ArrayList<>();
|
||||
for (Map.Entry<String, Map<String, Integer>> entry : roadwayStats.entrySet()) {
|
||||
Map<String, Object> statusData = new HashMap<>();
|
||||
statusData.put("status", entry.getKey());
|
||||
|
||||
// 为每个巷道添加数量,如果没有数据则为0
|
||||
for (String roadwayId : roadwayIds) {
|
||||
statusData.put("巷道" + roadwayId, entry.getValue().getOrDefault(roadwayId, 0));
|
||||
}
|
||||
|
||||
result.add(statusData);
|
||||
}
|
||||
|
||||
Map<String, Object> response = new HashMap<>();
|
||||
response.put("data", result);
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user