diff --git a/ruoyi-api/property-api/pom.xml b/ruoyi-api/property-api/pom.xml
index 6b8bb865..ef6e48ca 100644
--- a/ruoyi-api/property-api/pom.xml
+++ b/ruoyi-api/property-api/pom.xml
@@ -23,6 +23,11 @@
ruoyi-common-core
+
+ org.dromara
+ ruoyi-common-dubbo
+
+
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java
index 4c4502ee..a1f7d668 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteConfigService.java
@@ -14,4 +14,5 @@ public interface RemoteConfigService {
*/
boolean selectRegisterEnabled(String tenantId);
+ String selectQrTimeOut();
}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java
index 305d58af..e9f8086c 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java
@@ -196,4 +196,6 @@ public interface RemoteUserService {
*/
Map selectPostNamesByIds(List postIds);
+ Map seelectOrgcount();
+
}
diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemotePrecautionary.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemotePrecautionary.java
new file mode 100644
index 00000000..cd2c5da9
--- /dev/null
+++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemotePrecautionary.java
@@ -0,0 +1,11 @@
+package org.dromara.sis.api;
+
+import org.dromara.sis.api.domain.RemotePrecautionaryVo;
+
+import java.util.List;
+import java.util.Map;
+
+public interface RemotePrecautionary {
+ List getList();
+ Map count();
+}
diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSos.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSos.java
new file mode 100644
index 00000000..37f45717
--- /dev/null
+++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSos.java
@@ -0,0 +1,12 @@
+package org.dromara.sis.api;
+
+import org.dromara.sis.api.domain.RemoteAlarmRecord;
+
+import java.util.List;
+import java.util.Map;
+
+public interface RemoteSos {
+ List getSoslist();
+
+ Map sosCount();
+}
diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteAlarmRecord.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteAlarmRecord.java
new file mode 100644
index 00000000..b89ede1d
--- /dev/null
+++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteAlarmRecord.java
@@ -0,0 +1,201 @@
+package org.dromara.sis.api.domain;
+
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 报警记录实体类,对应数据库表 alarm_record
+ * 存储系统中的报警事件信息,包括设备信息、时间信息、处理状态等
+ */
+@Data
+public class RemoteAlarmRecord implements Serializable {
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 报警记录唯一标识,对应 API 返回的 Id 字段
+ * 采用 INPUT 策略,使用 API 返回的实际 ID 值
+ */
+ private Long id;
+
+ /**
+ * 任务编码,用于标识特定的报警任务
+ */
+ private String taskCode;
+
+ /**
+ * 设备ID,关联具体的报警设备
+ */
+ private Integer deviceId;
+
+ /**
+ * 设备名称,如 "7楼办公室"
+ */
+ private String deviceName;
+
+ /**
+ * 设备许可证ID,用于唯一标识设备
+ */
+ private String deviceLicenseId;
+
+ /**
+ * 设备SIP号码,用于通信
+ */
+ private String deviceSipNum;
+
+ /**
+ * 设备所在经度
+ */
+ private Double deviceLng;
+
+ /**
+ * 设备所在纬度
+ */
+ private Double deviceLat;
+
+ /**
+ * 会议ID,关联报警处理过程中的会议
+ */
+ private Long conferenceId;
+
+ /**
+ * 会议SIP编码
+ */
+ private String confSipCode;
+
+ /**
+ * 报警状态,如 "finished"(已完成)、"noAnswer"(未接听)等
+ */
+ private String state;
+
+ /**
+ * 报警开始时间(Java Date 类型)
+ */
+ private Date startTime;
+
+ /**
+ * 报警开始时间的 Unix 时间戳(毫秒)
+ */
+ private Long startTimeUnix;
+
+ /**
+ * 报警结束时间(Java Date 类型)
+ */
+ private Date finishTime;
+
+ /**
+ * 报警结束时间的 Unix 时间戳(毫秒)
+ */
+ private Long finishTimeUnix;
+
+ /**
+ * 响铃开始时间(Java Date 类型)
+ */
+ private Date ringingTime;
+
+ /**
+ * 响铃开始时间的 Unix 时间戳(毫秒)
+ */
+ private Long ringingTimeUnix;
+
+ /**
+ * 过期时间(Java Date 类型)
+ */
+ private Date expireTime;
+
+ /**
+ * 过期时间的 Unix 时间戳(毫秒)
+ */
+ private Long expireTimeUnix;
+
+ /**
+ * 呼叫过期时间(Java Date 类型)
+ */
+ private Date callExpireTime;
+
+ /**
+ * 呼叫过期时间的 Unix 时间戳(毫秒)
+ */
+ private Long callExpireTimeUnix;
+
+ /**
+ * 呼叫开始时间(Java Date 类型)
+ */
+ private Date callTime;
+
+ /**
+ * 呼叫开始时间的 Unix 时间戳(毫秒)
+ */
+ private Long callTimeUnix;
+
+ /**
+ * 设备是否带有摄像头(0-不带,1-带)
+ */
+ private Integer deviceWithCamera;
+
+ /**
+ * 公司编码,标识所属公司
+ */
+ private String companyCode;
+
+ /**
+ * 报警类型,如 "button"(按钮报警)
+ */
+ private String alarmType;
+
+ /**
+ * 业务类型,如 "normal"(正常业务)
+ */
+ private String businessType;
+
+ /**
+ * 分组ID,用于对设备进行分组管理
+ */
+ private Integer groupId;
+
+ /**
+ * 报告通知级别
+ */
+ private Integer reportNotifyLevel;
+
+ /**
+ * 是否挂起(0-未挂起,1-挂起)
+ */
+ private Integer isHold;
+
+ /**
+ * 显示的报警类型(可能为空)
+ */
+ private String displayAlarmType;
+
+ /**
+ * 接收类型(可能为空)
+ */
+ private String acceptType;
+
+ /**
+ * 分组名称(可能为空)
+ */
+ private String groupName;
+
+ /**
+ * 设备联系人(可能为空)
+ */
+ private String deviceLinkman;
+
+ /**
+ * 设备联系电话(可能为空)
+ */
+ private String devicePhoneNum;
+
+ /**
+ * 记录创建时间,由数据库自动填充
+ * 使用 MyBatis-Plus 的自动填充功能,插入时自动设置为当前时间
+ */
+ private Date createTime;
+}
diff --git a/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePrecautionaryVo.java b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePrecautionaryVo.java
new file mode 100644
index 00000000..7d660e5f
--- /dev/null
+++ b/ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePrecautionaryVo.java
@@ -0,0 +1,63 @@
+package org.dromara.sis.api.domain;
+
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 预警视图对象 precautionary
+ *
+ * @author mocheng
+ * @date 2025-08-01
+ */
+@Data
+public class RemotePrecautionaryVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ private Long id;
+
+ /**
+ * 预警类型
+ */
+
+ private Long type;
+
+ /**
+ * 时间
+ */
+
+ private Date time;
+
+ /**
+ * 位置
+ */
+
+ private String address;
+
+ /**
+ * 预警内容
+ */
+
+ private String msg;
+
+ /**
+ * 状态
+ */
+
+ private Long status;
+
+ /**
+ * 详情id
+ */
+
+ private Long taskId;
+
+
+}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbVisitorManagementController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbVisitorManagementController.java
index 7171277b..f9e7ffbd 100644
--- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbVisitorManagementController.java
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbVisitorManagementController.java
@@ -1,11 +1,21 @@
package org.dromara.property.controller;
import java.util.List;
+import java.util.UUID;
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.api.config.ConfigService;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.property.domain.bo.QrCodeInfo;
+import org.dromara.resource.api.RemoteMessageService;
+import org.dromara.system.api.RemoteConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -36,6 +46,13 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
public class TbVisitorManagementController extends BaseController {
private final ITbVisitorManagementService tbVisitorManagementService;
+ @DubboReference
+ private final RemoteConfigService remoteConfigService;
+
+ @DubboReference(stub = "true")
+ private final RemoteMessageService remoteMessageService;
+
+
/**
* 查询访客管理列表
@@ -46,6 +63,42 @@ public class TbVisitorManagementController extends BaseController {
return tbVisitorManagementService.queryPageList(bo, pageQuery);
}
+ /**
+ * 获取二维码uuid
+ * @param qrCodeInfo
+ * @return
+ */
+ @PostMapping("/getcode")
+ public R getcode(QrCodeInfo qrCodeInfo) {
+ Long string = (Long) StpUtil.getLoginId();
+ qrCodeInfo.setUserid(string);
+ String s = remoteConfigService.selectQrTimeOut();
+ int i = Integer.parseInt(s);
+ UUID value = UUID.randomUUID();
+ RedisUtils.setCacheObject("Qrcode"+value, qrCodeInfo);
+ RedisUtils.expire("Qrcode", i);
+ return R.ok(value.toString());
+ }
+
+ /**
+ * 推送二维码被扫信息
+ * @param qrcode
+ * @return
+ */
+ @PostMapping("/useqr")
+ public R useqr(String qrcode) {
+ QrCodeInfo qrCodeInfo = RedisUtils.getCacheObject("Qrcode" + qrcode);
+ if (qrCodeInfo==null) {
+ return R.fail("二维码已过期");
+ }
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("type","qrcode");
+ jsonObject.put("date",qrcode);
+ remoteMessageService.publishMessage(List.of(qrCodeInfo.getUserid()),jsonObject.toString());
+ return R.ok("二维码可用");
+
+ }
+
/**
* 导出访客管理列表
*/
@@ -75,8 +128,12 @@ public class TbVisitorManagementController extends BaseController {
@SaCheckPermission("property:visitorManagement:add")
@Log(title = "访客管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
- @PostMapping()
+ @PostMapping("/add")
public R add(@Validated(AddGroup.class) @RequestBody TbVisitorManagementBo bo) {
+ QrCodeInfo info = RedisUtils.getCacheObject("Qrcode" + bo.getQrCodeId());
+ if (info==null){
+ return R.fail("请确认Qr码有效");
+ }
return toAjax(tbVisitorManagementService.insertByBo(bo));
}
diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/BookingController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/BookingController.java
new file mode 100644
index 00000000..e2079184
--- /dev/null
+++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/BookingController.java
@@ -0,0 +1,66 @@
+package org.dromara.property.controller.cockpit;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.dromara.common.core.domain.R;
+import org.dromara.property.domain.vo.TbVisitorManagementVo;
+import org.dromara.property.service.ITbVisitorManagementService;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 大屏预约接口
+ */
+@RestController
+@RequestMapping("/cockpit")
+public class BookingController {
+ @Resource
+ private ITbVisitorManagementService tbVisitorManagementService;
+
+ @RequestMapping("visitor")
+ public R