wip在产大屏
This commit is contained in:
@@ -10,6 +10,7 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Date;
|
||||
import com.klp.domain.vo.TheoryCycleRegressionResultVo;
|
||||
import com.klp.domain.vo.WipDashboardVo;
|
||||
|
||||
/**
|
||||
* 钢卷待操作Service接口
|
||||
@@ -97,5 +98,10 @@ public interface IWmsCoilPendingActionService {
|
||||
* @param maxPoints 最大散点数(includePoints=true 时生效)
|
||||
*/
|
||||
TheoryCycleRegressionResultVo calcTheoryCycleRegression(Date startTime, Date endTime, Boolean includePoints, Integer maxPoints);
|
||||
|
||||
/**
|
||||
* WIP 在产大屏:获取各工序在产列表及今日完成统计
|
||||
*/
|
||||
WipDashboardVo getWipDashboard();
|
||||
}
|
||||
|
||||
|
||||
@@ -14,9 +14,13 @@ import com.klp.common.utils.StringUtils;
|
||||
import com.klp.domain.WmsCoilPendingAction;
|
||||
import com.klp.domain.WmsMaterialCoil;
|
||||
import com.klp.domain.bo.WmsCoilPendingActionBo;
|
||||
import com.klp.domain.vo.ProcessTodayAggVo;
|
||||
import com.klp.domain.vo.ProcessWipVo;
|
||||
import com.klp.domain.vo.TheoryCyclePointVo;
|
||||
import com.klp.domain.vo.TheoryCycleRegressionResultVo;
|
||||
import com.klp.domain.vo.TheoryCycleRegressionVo;
|
||||
import com.klp.domain.vo.WipCoilVo;
|
||||
import com.klp.domain.vo.WipDashboardVo;
|
||||
import com.klp.domain.vo.WmsCoilPendingActionVo;
|
||||
import com.klp.domain.vo.WmsCoilPendingActionIdCoilVo;
|
||||
import com.klp.domain.DrMillProductionPlan;
|
||||
@@ -64,6 +68,26 @@ public class WmsCoilPendingActionServiceImpl implements IWmsCoilPendingActionSer
|
||||
private static final int ACTION_TYPE_DR_NORMAL = 504;
|
||||
private static final int ACTION_TYPE_DR_REPAIR = 524;
|
||||
|
||||
/** actionType → 工序名称映射 */
|
||||
private static final Map<Integer, String> PROCESS_NAME_MAP = new LinkedHashMap<>();
|
||||
static {
|
||||
PROCESS_NAME_MAP.put(501, "酸连轧工序");
|
||||
PROCESS_NAME_MAP.put(502, "镀锌工序");
|
||||
PROCESS_NAME_MAP.put(503, "脱脂工序");
|
||||
// 504=拉矫平整工序 (but 504 is also DR_NORMAL, use a more specific name)
|
||||
PROCESS_NAME_MAP.put(504, "拉矫平整工序");
|
||||
PROCESS_NAME_MAP.put(505, "双机架工序");
|
||||
PROCESS_NAME_MAP.put(506, "镀铬工序");
|
||||
// 520-525 修复工序
|
||||
PROCESS_NAME_MAP.put(520, "酸轧修复工序");
|
||||
PROCESS_NAME_MAP.put(521, "镀锌修复工序");
|
||||
PROCESS_NAME_MAP.put(522, "脱脂修复工序");
|
||||
PROCESS_NAME_MAP.put(523, "拉矫修复工序");
|
||||
PROCESS_NAME_MAP.put(524, "双机架修复工序");
|
||||
PROCESS_NAME_MAP.put(525, "镀铬修复工序");
|
||||
// 纵剪分条无明确编码,暂不纳入
|
||||
}
|
||||
|
||||
private static final String REDIS_KEY_IDEAL_CYCLE = "oee:ideal-cycle-time";
|
||||
|
||||
/**
|
||||
@@ -744,6 +768,69 @@ public class WmsCoilPendingActionServiceImpl implements IWmsCoilPendingActionSer
|
||||
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
|
||||
}
|
||||
|
||||
/**
|
||||
* WIP 在产大屏:获取各工序在产列表及今日完成统计
|
||||
*/
|
||||
@Override
|
||||
public WipDashboardVo getWipDashboard() {
|
||||
// 1. 查询今日 00:00:00
|
||||
LocalDateTime todayStart = LocalDateTime.now().toLocalDate().atStartOfDay();
|
||||
Date todayStartDate = Date.from(todayStart.atZone(ZoneId.systemDefault()).toInstant());
|
||||
|
||||
// 2. 查询在产钢卷列表
|
||||
List<WipCoilVo> wipCoils = baseMapper.selectWipCoils();
|
||||
|
||||
// 3. 查询今日已完成聚合统计
|
||||
List<ProcessTodayAggVo> todayAggList = baseMapper.selectTodayCompletedAgg(todayStartDate);
|
||||
|
||||
// 4. 按 actionType 分组在产钢卷
|
||||
Map<Integer, List<WipCoilVo>> wipMap = wipCoils.stream()
|
||||
.collect(Collectors.groupingBy(WipCoilVo::getActionType));
|
||||
|
||||
// 5. 按 actionType 分组今日完成统计
|
||||
Map<Integer, ProcessTodayAggVo> aggMap = todayAggList.stream()
|
||||
.collect(Collectors.toMap(ProcessTodayAggVo::getActionType, a -> a));
|
||||
|
||||
// 6. 按固定工序顺序构建返回结果
|
||||
List<ProcessWipVo> processes = new ArrayList<>();
|
||||
int totalWipCount = 0;
|
||||
int totalTodayCompletedCount = 0;
|
||||
BigDecimal totalTodayCompletedWeight = BigDecimal.ZERO;
|
||||
|
||||
for (Map.Entry<Integer, String> entry : PROCESS_NAME_MAP.entrySet()) {
|
||||
Integer actionType = entry.getKey();
|
||||
String processName = entry.getValue();
|
||||
|
||||
List<WipCoilVo> coils = wipMap.getOrDefault(actionType, Collections.emptyList());
|
||||
ProcessTodayAggVo agg = aggMap.get(actionType);
|
||||
|
||||
ProcessWipVo p = new ProcessWipVo();
|
||||
p.setActionType(actionType);
|
||||
p.setProcessName(processName);
|
||||
p.setWipCount(coils.size());
|
||||
p.setWipCoils(coils);
|
||||
p.setTodayCompletedCount(agg != null ? agg.getCompletedCount() : 0);
|
||||
// 数据库存储为 kg,转为吨(保留 1 位小数)
|
||||
BigDecimal weightKg = agg != null ? agg.getTotalWeight() : BigDecimal.ZERO;
|
||||
BigDecimal weightTon = weightKg.divide(BigDecimal.valueOf(1000), 1, RoundingMode.HALF_UP);
|
||||
p.setTodayCompletedWeight(weightTon);
|
||||
|
||||
totalWipCount += p.getWipCount();
|
||||
totalTodayCompletedCount += p.getTodayCompletedCount();
|
||||
totalTodayCompletedWeight = totalTodayCompletedWeight.add(weightTon);
|
||||
|
||||
processes.add(p);
|
||||
}
|
||||
|
||||
// 7. 组装响应
|
||||
WipDashboardVo vo = new WipDashboardVo();
|
||||
vo.setProcesses(processes);
|
||||
vo.setTotalWipCount(totalWipCount);
|
||||
vo.setTotalTodayCompletedCount(totalTodayCompletedCount);
|
||||
vo.setTotalTodayCompletedWeight(totalTodayCompletedWeight);
|
||||
return vo;
|
||||
}
|
||||
|
||||
private static class RegressionStat {
|
||||
Double slope;
|
||||
Double intercept;
|
||||
|
||||
Reference in New Issue
Block a user