diff --git a/web-app/src/main/java/com/zcloud/zcGbsServicer/service/AlarmRecordServiceImpl.java b/web-app/src/main/java/com/zcloud/zcGbsServicer/service/AlarmRecordServiceImpl.java index ba00b16..de2a2a0 100644 --- a/web-app/src/main/java/com/zcloud/zcGbsServicer/service/AlarmRecordServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/zcGbsServicer/service/AlarmRecordServiceImpl.java @@ -137,7 +137,7 @@ public class AlarmRecordServiceImpl extends FireAlarmServiceSupport implements A } fireAlarmMeetingAccountService.ensureAppMeetingAccount(appUserId, record.getAlarmUserName(), record.getAlarmPhone()); } - return SingleResponse.of(buildCO(record)); + return SingleResponse.of(buildDetailCO(record)); } @Override @@ -146,7 +146,7 @@ public class AlarmRecordServiceImpl extends FireAlarmServiceSupport implements A if (record == null) { throw new BizException("消防报警记录不存在"); } - return buildCO(record); + return buildDetailCO(record); } @Override @@ -237,6 +237,12 @@ public class AlarmRecordServiceImpl extends FireAlarmServiceSupport implements A return co; } + private AlarmRecordCO buildDetailCO(FireAlarmInfoDO record) { + AlarmRecordCO co = buildCO(record); + co.setMeeting(fireAlarmMeetingAccountService.buildAppMeetingInfo(record)); + return co; + } + private String toPhotoJson(List photos) { if (photos == null || photos.isEmpty()) { return null; diff --git a/web-app/src/main/java/com/zcloud/zcGbsServicer/service/FireAlarmMeetingAccountService.java b/web-app/src/main/java/com/zcloud/zcGbsServicer/service/FireAlarmMeetingAccountService.java index d7a36e9..694c39a 100644 --- a/web-app/src/main/java/com/zcloud/zcGbsServicer/service/FireAlarmMeetingAccountService.java +++ b/web-app/src/main/java/com/zcloud/zcGbsServicer/service/FireAlarmMeetingAccountService.java @@ -4,6 +4,8 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.cola.exception.BizException; import com.zcloud.gbscommon.zclouduser.response.ZcloudUserCo; +import com.zcloud.zcGbsServicer.dto.clientobject.AlarmRecordMeetingCO; +import com.zcloud.zcGbsServicer.persistence.dataobject.FireAlarmInfoDO; import com.zcloud.zcGbsServicer.persistence.dataobject.FireAlarmMeetingRoomDO; import com.zcloud.zcGbsServicer.persistence.dataobject.FireAlarmMeetingUserDO; import com.zcloud.zcGbsServicer.persistence.repository.FireAlarmMeetingRoomRepository; @@ -13,6 +15,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; @@ -28,6 +31,8 @@ import java.util.UUID; public class FireAlarmMeetingAccountService extends FireAlarmServiceSupport { private static final int MEETING_USER_TYPE_APP = 2; + private static final int ALARM_MODE_APP = 2; + private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private final FireAlarmMeetingUserRepository fireAlarmMeetingUserRepository; private final FireAlarmMeetingRoomRepository fireAlarmMeetingRoomRepository; @@ -35,6 +40,51 @@ public class FireAlarmMeetingAccountService extends FireAlarmServiceSupport { private final HstVideoPlatformClient hstVideoPlatformClient; private final FireAlarmUserResolver fireAlarmUserResolver; + /** + * 构建 APP 报警记录的会议入会参数,供详情页重新入会。 + */ + public AlarmRecordMeetingCO buildAppMeetingInfo(FireAlarmInfoDO record) { + if (record == null || !Integer.valueOf(ALARM_MODE_APP).equals(record.getAlarmMode())) { + return null; + } + Long localUserId = record.getAlarmUserId(); + if (localUserId == null) { + return null; + } + + FireAlarmMeetingRoomDO room = fireAlarmMeetingRoomRepository + .getByRoomCode(hstVideoPlatformProperties.getDefaultRoomCode()); + Long userTenantId = fireAlarmUserResolver.resolveUserTenantId(localUserId); + FireAlarmMeetingUserDO meetingUser = fireAlarmMeetingUserRepository.getByLocalUserId(localUserId, userTenantId); + + AlarmRecordMeetingCO co = new AlarmRecordMeetingCO(); + co.setAlarmId(record.getId()); + co.setLocalUserId(localUserId); + co.setRoomCode(hstVideoPlatformProperties.getDefaultRoomCode()); + co.setRoomId(selectText(record.getMeetingRoomId(), + room == null ? hstVideoPlatformProperties.getDefaultRoomNo() + : selectText(room.getThirdRoomId(), room.getThirdRoomNo()))); + co.setRoomNo(room == null ? hstVideoPlatformProperties.getDefaultRoomNo() : room.getThirdRoomNo()); + co.setMeetingName(selectText(record.getMeetingRoomName(), + room == null ? "消防报警固定会议室" : room.getRoomName())); + co.setPassword(room == null ? null : room.getRoomPasswordCipher()); + co.setThirdUserName(selectText(record.getMeetingApplyThirdUserName(), + meetingUser == null ? null : meetingUser.getThirdUserName())); + co.setUserPass(hstVideoPlatformProperties.getDefaultUserPassword()); + co.setGrantType("password"); + co.setCesAddr(hstVideoPlatformProperties.getWebBaseUrl()); + co.setWebUrl(hstVideoPlatformProperties.getWebBaseUrl()); + co.setLoginUrl(hstVideoPlatformProperties.getWebBaseUrl()); + co.setClientId(hstVideoPlatformProperties.getClientId()); + co.setClientSecret(hstVideoPlatformProperties.getClientSecret()); + co.setJoinStatus(record.getMeetingJoinStatus()); + co.setJoinTime(formatTime(record.getMeetingJoinTime())); + co.setLeaveTime(formatTime(record.getMeetingLeaveTime())); + co.setAuthStatus(record.getMeetingAuthStatus()); + co.setResultMsg(record.getMeetingResultMsg()); + return co; + } + @Transactional(rollbackFor = Exception.class) public void ensureAppMeetingAccount(Long localUserId, String localUserName, String localPhone) { if (localUserId == null) { @@ -188,6 +238,10 @@ public class FireAlarmMeetingAccountService extends FireAlarmServiceSupport { return StrUtil.isNotBlank(preferred) ? preferred : fallback; } + private String formatTime(LocalDateTime time) { + return time == null ? null : TIME_FORMATTER.format(time); + } + private long nextId() { return IdUtil.getSnowflake(1, 1).nextId(); } diff --git a/web-client/src/main/java/com/zcloud/zcGbsServicer/dto/clientobject/AlarmRecordCO.java b/web-client/src/main/java/com/zcloud/zcGbsServicer/dto/clientobject/AlarmRecordCO.java index ea2af27..882cd20 100644 --- a/web-client/src/main/java/com/zcloud/zcGbsServicer/dto/clientobject/AlarmRecordCO.java +++ b/web-client/src/main/java/com/zcloud/zcGbsServicer/dto/clientobject/AlarmRecordCO.java @@ -59,4 +59,7 @@ public class AlarmRecordCO extends ClientObject { private String clearReason; private List photos; + + /** APP 报警会议信息,用于重新入会;非 APP 报警或无会议账号时为 null */ + private AlarmRecordMeetingCO meeting; } diff --git a/web-client/src/main/java/com/zcloud/zcGbsServicer/dto/clientobject/AlarmRecordMeetingCO.java b/web-client/src/main/java/com/zcloud/zcGbsServicer/dto/clientobject/AlarmRecordMeetingCO.java new file mode 100644 index 0000000..0fc8778 --- /dev/null +++ b/web-client/src/main/java/com/zcloud/zcGbsServicer/dto/clientobject/AlarmRecordMeetingCO.java @@ -0,0 +1,35 @@ +package com.zcloud.zcGbsServicer.dto.clientobject; + +import com.alibaba.cola.dto.ClientObject; +import lombok.Data; + +/** + * 消防报警记录关联的会议信息,供 APP 重新入会使用。 + */ +@Data +public class AlarmRecordMeetingCO extends ClientObject { + + private Long alarmId; + private Long localUserId; + + private String roomCode; + private String roomId; + private String roomNo; + private String meetingName; + private String password; + + private String thirdUserName; + private String userPass; + private String grantType; + private String cesAddr; + private String webUrl; + private String loginUrl; + private String clientId; + private String clientSecret; + + private Integer joinStatus; + private String joinTime; + private String leaveTime; + private Integer authStatus; + private String resultMsg; +}