メインコンテンツまでスキップ

11. Calendar サービス

client.calendar() でアクセスします。日程(点検・休日・検査など)を資産/サイトに紐づけて運用します。

10.1 メソッド一覧​

メソッド戻り値の型HTTPエンドポイント
create(CalendarRequestV5)CalendarResponseV5 または nullPOST/api/v5/calendar
update(calendar_id, CalendarRequestV5)CalendarResponseV5 または nullPUT/api/v5/calendar/{id}
delete(calendar_id)booleanDELETE/api/v5/calendar/{id}
get(calendar_id)CalendarResponseV5 または nullGET/api/v5/calendar/{id}
list()List<CalendarResponseV5>GET/api/v5/calendar
search(from_iso, to_iso)List<CalendarResponseV5>GET/api/v5/calendar/search?from=...&to=...

10.2 日程タイプ (target_type)​

コード意味
MTN定期点検 (Maintenance)
HOLIDAY休日 / 非操業
INSPECTION定期検査
MEETING会議
TRAINING教育

10.3 CalendarRequestV5 / CalendarResponseV5​

フィールド型説明
calendar_idString日程 ID (PK)
target_typeStringタイプコード
site_idString所属サイト
asset_idString対象資産 (Equipment)
start_timestamplong開始時刻 (ミリ秒)
end_timestamplong終了時刻 (ミリ秒)
descriptionString説明
type_color / type_name / type_kindStringタイプ表示情報

10.4 使用例​

日程作成​

import plantpulse.api.v5.dto.request.CalendarRequestV5;
import plantpulse.api.v5.dto.response.CalendarResponseV5;

CalendarRequestV5 cal = new CalendarRequestV5();
cal.setCalendar_id("CALENDAR_000001");
cal.setSite_id("SITE_DJ");
cal.setAsset_id("EQUIPMENT_000001");
cal.setTarget_type("MTN");
cal.setDescription("CNC #1 정기 점검 — 베어링 교체");

long now = System.currentTimeMillis();
cal.setStart_timestamp(now + 6 * 24 * 3600_000L);
cal.setEnd_timestamp(now + 7 * 24 * 3600_000L);

CalendarResponseV5 created = client.calendar().create(cal);

単一照会​

CalendarResponseV5 c = client.calendar().get("CALENDAR_000001");
if (c != null) {
System.out.println(c.getDescription());
System.out.println("시작: " + c.getStart_timestamp());
}

ISO 日付範囲検索​

import java.util.List;

List<CalendarResponseV5> may = client.calendar().search(
"2026-05-01 00:00:00",
"2026-05-31 23:59:59");

全リスト​

List<CalendarResponseV5> all = client.calendar().list();
for (CalendarResponseV5 c : all) {
System.out.println(c.getCalendar_id() + " — " + c.getTarget_type());
}

資産別点検日程フィルタリング (クライアント側)​

import java.util.stream.Collectors;

String targetAsset = "EQUIPMENT_000001";

List<CalendarResponseV5> mtnEvents = client.calendar()
.search("2026-01-01 00:00:00", "2026-12-31 23:59:59")
.stream()
.filter(c -> targetAsset.equals(c.getAsset_id()))
.filter(c -> "MTN".equals(c.getTarget_type()))
.collect(Collectors.toList());

修正 / 削除​

// 수정 — 전체 필드를 다시 보내야 함
CalendarRequestV5 update = new CalendarRequestV5();
update.setCalendar_id("CALENDAR_000001");
update.setSite_id("SITE_DJ");
update.setAsset_id("EQUIPMENT_000001");
update.setTarget_type("MTN");
update.setDescription("점검 연기 — 5월 25일로 변경");
long now = System.currentTimeMillis();
update.setStart_timestamp(now + 11 * 24 * 3600_000L);
update.setEnd_timestamp(now + 12 * 24 * 3600_000L);
client.calendar().update("CALENDAR_000001", update);

// 삭제
client.calendar().delete("CALENDAR_000001");

10.5 活用シナリオ​

シナリオ — 今後7日間の日程通知​

import java.text.SimpleDateFormat;
import java.util.Date;

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long now = System.currentTimeMillis();
String from = fmt.format(new Date(now));
String to = fmt.format(new Date(now + 7L * 24 * 3600_000L));

List<CalendarResponseV5> upcoming = client.calendar().search(from, to);
for (CalendarResponseV5 c : upcoming) {
if ("MTN".equals(c.getTarget_type())) {
sendNotification("점검 예정: " + c.getDescription());
}
}

シナリオ — 点検日程がある資産は OEE 計算から除外​

long now = System.currentTimeMillis();
String today = fmt.format(new Date(now));

List<CalendarResponseV5> activeEvents = client.calendar()
.search(today, today)
.stream()
.filter(c -> c.getStart_timestamp() <= now
&& c.getEnd_timestamp() >= now)
.filter(c -> "MTN".equals(c.getTarget_type()))
.collect(Collectors.toList());

Set<String> excludedAssets = activeEvents.stream()
.map(CalendarResponseV5::getAsset_id)
.collect(Collectors.toSet());

// OEE 계산 시 excludedAssets 의 자산은 건너뜀

次のステップ​