oee修复,提交app同步以及质保书
This commit is contained in:
@@ -39,16 +39,20 @@ public class GalvanizeOeeServiceImpl implements IGalvanizeOeeService {
|
||||
List<AcidOeeDailySummaryVo> summaries = galvanizeOeeMasterMapper.selectDailySummary(startDate, endDate, galvanizeCreateBy);
|
||||
if (summaries == null || summaries.isEmpty()) return Collections.emptyList();
|
||||
|
||||
Map<String, Long> downtimeByDate = aggregateDowntimeByDate(startDate, endDate);
|
||||
Map<String, Long> plannedDowntimeByDate = new HashMap<>();
|
||||
Map<String, Long> downtimeByDate = aggregateDowntimeByDate(startDate, endDate, plannedDowntimeByDate);
|
||||
Map<String, List<CoilInfo>> coilInfoByDate = getCoilNosByDate(startDate, endDate);
|
||||
|
||||
List<BigDecimal> dailyCycles = new ArrayList<>();
|
||||
for (AcidOeeDailySummaryVo s : summaries) {
|
||||
s.setLineId("DX1");
|
||||
s.setLineName("镀锌一线");
|
||||
Long plannedDowntime = plannedDowntimeByDate.getOrDefault(s.getStatDate(), 0L);
|
||||
Long loading = Math.max(0, 1440 - plannedDowntime);
|
||||
s.setPlannedDowntimeMin(plannedDowntime);
|
||||
s.setLoadingTimeMin(loading);
|
||||
Long downtime = downtimeByDate.getOrDefault(s.getStatDate(), 0L);
|
||||
s.setDowntimeMin(downtime);
|
||||
Long loading = s.getLoadingTimeMin() == null ? 0L : s.getLoadingTimeMin();
|
||||
Long run = Math.max(0, loading - downtime);
|
||||
s.setRunTimeMin(run);
|
||||
BigDecimal ton = s.getTotalOutputTon();
|
||||
@@ -230,15 +234,62 @@ public class GalvanizeOeeServiceImpl implements IGalvanizeOeeService {
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, Long> aggregateDowntimeByDate(String startDate, String endDate) {
|
||||
/**
|
||||
* 按日期聚合停机时间,同时将计划停机写入 plannedDowntimeOut。
|
||||
* - "计划停机" stopType 不计入 OEE 停机时间,也不计入负荷时间。
|
||||
* - 跨天事件按实际分钟数拆分到各天。
|
||||
*/
|
||||
private Map<String, Long> aggregateDowntimeByDate(String startDate, String endDate,
|
||||
Map<String, Long> plannedDowntimeOut) {
|
||||
List<Klptcm1ProStoppageVo> events = getStoppageEvents(startDate, endDate);
|
||||
Map<String, Long> map = new HashMap<>();
|
||||
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
||||
Calendar cal = Calendar.getInstance();
|
||||
|
||||
for (Klptcm1ProStoppageVo e : events) {
|
||||
if (e.getStartDate() == null || e.getDuration() == null || e.getDuration() <= 0) continue;
|
||||
long min = Math.max(1, (e.getDuration() + 59) / 60);
|
||||
map.merge(df.format(e.getStartDate()), min, Long::sum);
|
||||
|
||||
boolean isPlanned = "计划停机".equals(e.getStopType());
|
||||
Map<String, Long> targetMap = isPlanned ? plannedDowntimeOut : map;
|
||||
|
||||
Date eventStart = e.getStartDate();
|
||||
long durationSec = e.getDuration();
|
||||
long durationMin = (durationSec + 59) / 60;
|
||||
|
||||
cal.setTime(eventStart);
|
||||
cal.add(Calendar.SECOND, (int) durationSec);
|
||||
Date eventEnd = cal.getTime();
|
||||
|
||||
String startDateStr = df.format(eventStart);
|
||||
String endDateStr = df.format(eventEnd);
|
||||
|
||||
if (startDateStr.equals(endDateStr)) {
|
||||
targetMap.merge(startDateStr, durationMin, Long::sum);
|
||||
} else {
|
||||
cal.setTime(eventStart);
|
||||
cal.set(Calendar.HOUR_OF_DAY, 0);
|
||||
cal.set(Calendar.MINUTE, 0);
|
||||
cal.set(Calendar.SECOND, 0);
|
||||
cal.set(Calendar.MILLISECOND, 0);
|
||||
Date currentDayStart = cal.getTime();
|
||||
|
||||
while (currentDayStart.before(eventEnd)) {
|
||||
cal.setTime(currentDayStart);
|
||||
cal.add(Calendar.DAY_OF_MONTH, 1);
|
||||
Date nextDayStart = cal.getTime();
|
||||
|
||||
Date dayEnd = nextDayStart.before(eventEnd) ? nextDayStart : eventEnd;
|
||||
long dayMinutes = Math.max(0, (dayEnd.getTime() - Math.max(currentDayStart.getTime(), eventStart.getTime())) / (1000 * 60));
|
||||
|
||||
if (dayMinutes > 0) {
|
||||
targetMap.merge(df.format(currentDayStart), dayMinutes, Long::sum);
|
||||
}
|
||||
|
||||
currentDayStart = nextDayStart;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user