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 visitor() { + // 创建查询条件包装器 + QueryWrapper queryWrapper = new QueryWrapper<>(); + + // 添加时间条件,查询近七天的数据 + LocalDateTime sevenDaysAgo = LocalDateTime.now().minusDays(7); + queryWrapper.ge("create_time", sevenDaysAgo); // 假设创建时间字段为create_time + + // 执行查询 + List tbVisitorManagementVos = tbVisitorManagementService.queryListByWapper(queryWrapper); + + // 按天分组统计 + Map typeCountMap = tbVisitorManagementVos.stream() + .collect(Collectors.groupingBy( + vo -> { + // 如果 getVisitingBeginTime() 返回 Date 类型 + return vo.getVisitingBeginTime().toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDate() + .toString(); + }, + Collectors.counting() + )); + ArrayList keys = new ArrayList<>(); + ArrayList values = new ArrayList<>(); + for (String s : typeCountMap.keySet()) { + keys.add(s); + } + for (Long value : typeCountMap.values()) { + values.add(value.toString()); + } + HashMap stringListHashMap = new HashMap<>(); + stringListHashMap.put("keys",keys); + stringListHashMap.put("values",values); + return R.ok(stringListHashMap); + } + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/DriverController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/DriverController.java new file mode 100644 index 00000000..ea8bb2ce --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/DriverController.java @@ -0,0 +1,13 @@ +package org.dromara.property.controller.cockpit; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 大屏设备接口 + */ +@RestController +@RequestMapping("/cockpit") +public class DriverController { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EnergyConsumptionController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EnergyConsumptionController.java new file mode 100644 index 00000000..6ebb6c32 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EnergyConsumptionController.java @@ -0,0 +1,15 @@ +package org.dromara.property.controller.cockpit; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 大屏能耗接口 + */ +@RestController +@RequestMapping("/cockpit") +public class EnergyConsumptionController { + + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EventController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EventController.java new file mode 100644 index 00000000..be6b48cd --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EventController.java @@ -0,0 +1,12 @@ +package org.dromara.property.controller.cockpit; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 大屏事件接口 + */ +@RestController +@RequestMapping("/cockpit") +public class EventController { +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/ExpensesController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/ExpensesController.java new file mode 100644 index 00000000..6c6edd45 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/ExpensesController.java @@ -0,0 +1,49 @@ +package org.dromara.property.controller.cockpit; + + +import org.dromara.common.core.domain.R; +import org.dromara.property.domain.bo.CostPayFeeAuditBo; +import org.dromara.property.domain.vo.CostPayFeeAuditVo; +import org.dromara.property.service.ICostPayFeeAuditService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + + +/** + * 大屏费用接口 + */ +@RestController +@RequestMapping("/cockpit") +public class ExpensesController { + @Autowired + private ICostPayFeeAuditService costPayFeeAuditService; + + @RequestMapping("/expenses") + public R> expenses(){ + List costPayFeeAuditVos = costPayFeeAuditService.queryList(new CostPayFeeAuditBo()); + // 按 chargeItem 分组统计数量 + List collect = costPayFeeAuditVos.stream() + .filter(vo -> vo.getChargeItem() != null) + .map(a -> a.getChargeItem()) + .distinct() + .collect(Collectors.toList()); + HashMap stringBigDecimalHashMap = new HashMap<>(); + for (String s : collect) { + BigDecimal bigDecimal = costPayFeeAuditVos.stream() + .filter(a -> a.getReceivedAmount() == null) + .filter(a -> a.getChargeItem() .equals(s)) + .map(CostPayFeeAuditVo::getReceivedAmount) + .reduce(BigDecimal::add) + .get(); + stringBigDecimalHashMap.put(s, bigDecimal); + } + + return R.ok(stringBigDecimalHashMap); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/FlowController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/FlowController.java new file mode 100644 index 00000000..8c64eb28 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/FlowController.java @@ -0,0 +1,12 @@ +package org.dromara.property.controller.cockpit; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 大屏流量接口 + */ +@RestController +@RequestMapping("/cockpit") +public class FlowController { +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/PropertyPersonController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/PropertyPersonController.java new file mode 100644 index 00000000..f1a79c0e --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/PropertyPersonController.java @@ -0,0 +1,25 @@ +package org.dromara.property.controller.cockpit; + +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.domain.R; +import org.dromara.system.api.RemoteUserService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * 大屏物业人员接口 + */ +@RestController +@RequestMapping("/cockpit") +public class PropertyPersonController { + @DubboReference + private RemoteUserService remoteUserService; + + @RequestMapping("propertyperson") + public R> propertyPerson() { + return R.ok(remoteUserService.seelectOrgcount()); + } + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/SosController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/SosController.java new file mode 100644 index 00000000..4accab2b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/SosController.java @@ -0,0 +1,30 @@ +package org.dromara.property.controller.cockpit; + +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.domain.R; +import org.dromara.sis.api.RemoteSos; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +/** + * 大屏报警接口 + */ + +@RestController +@RequestMapping("/cockpit") +public class SosController { + @DubboReference + private RemoteSos remoteSos; + + @RequestMapping("sos") + public R> sos(){ + return R.ok(remoteSos.sosCount()); + } + @RequestMapping("soslist") + public R sosList(){ + return R.ok(remoteSos.getSoslist()); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/WorkOrderController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/WorkOrderController.java new file mode 100644 index 00000000..867d9392 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/WorkOrderController.java @@ -0,0 +1,62 @@ +package org.dromara.property.controller.cockpit; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.web.core.BaseController; +import org.dromara.property.domain.bo.ServiceWorkOrdersBo; +import org.dromara.property.domain.vo.ServiceWorkOrderAnalysisVo; +import org.dromara.property.domain.vo.ServiceWorkOrdersVo; +import org.dromara.property.service.IServiceWorkOrdersService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +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 WorkOrderController { + @Resource + private IServiceWorkOrdersService serviceWorkOrdersService; + + /** + * 获取服务工单统计信息 + * + * @return 返回服务工单分析数据的封装结果 + */ + @GetMapping("/workcount") + public R counts() { + // 调用服务层获取工单统计信息并返回成功结果 + List serviceWorkOrdersVos = serviceWorkOrdersService.queryList(new ServiceWorkOrdersBo()); + // 按type分组统计 + Map typeCountMap = serviceWorkOrdersVos.stream() + .collect(Collectors.groupingBy( + vo -> String.valueOf(vo.getTypeName()), + Collectors.counting() + )); + ArrayList keys = new ArrayList<>(); + ArrayList values = new ArrayList<>(); + for (String s : typeCountMap.keySet()) { + keys.add(s); + } + for (Long value : typeCountMap.values()) { + values.add(value.toString()); + } + HashMap stringListHashMap = new HashMap<>(); + stringListHashMap.put("keys",keys); + stringListHashMap.put("values",values); + return R.ok(stringListHashMap); + } + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QrCodeInfo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QrCodeInfo.java new file mode 100644 index 00000000..7a6ae795 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QrCodeInfo.java @@ -0,0 +1,10 @@ +package org.dromara.property.domain.bo; +import lombok.Data; + +@Data +public class QrCodeInfo { + private String deviceCode; // 对应“设备码” + private String generateTime; // 对应“生成时间” + private String qrCodeId; // 对应“二维码ID” + private Long userid; +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java index f6466cd7..4779e1c4 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java @@ -22,6 +22,12 @@ import com.fasterxml.jackson.annotation.JsonFormat; @AutoMapper(target = TbVisitorManagement.class, reverseConvertGenerate = false) public class TbVisitorManagementBo extends BaseEntity { + /** + * qr码id + */ + @NotNull(message = "qr码id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long qrCodeId; + /** * id */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java index aa992bdb..89d611d1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IServiceWorkOrdersService.java @@ -1,5 +1,6 @@ package org.dromara.property.service; +import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.property.domain.bo.ServiceWorkOrdersBo; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbVisitorManagementService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbVisitorManagementService.java index 7ed2bdc9..2547e04a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbVisitorManagementService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/ITbVisitorManagementService.java @@ -1,5 +1,7 @@ package org.dromara.property.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.dromara.property.domain.TbVisitorManagement; import org.dromara.property.domain.vo.TbVisitorManagementVo; import org.dromara.property.domain.bo.TbVisitorManagementBo; @@ -42,6 +44,10 @@ public interface ITbVisitorManagementService { */ List queryList(TbVisitorManagementBo bo); + List queryListByWapper(QueryWrapper wapper); + + + /** * 新增访客管理 * diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java index 14a58308..80b47600 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java @@ -140,7 +140,23 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { @Override public List queryList(ServiceWorkOrdersBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + List result = baseMapper.selectVoList(lqw); + if (ObjectUtil.isEmpty(result)) { + return result; + } + List typeList = result.stream().map(vo -> vo.getType()).distinct().collect(Collectors.toList()); + List serviceWorkOrdersTypeVoList = typesMapper.selectVoByIds(typeList); + if (ObjectUtil.isEmpty(serviceWorkOrdersTypeVoList)) { + return result; + } + List serviceWorkOrdersVoList = new ArrayList<>(); + result.stream().forEach(s -> { + ServiceWorkOrdersTypeVo serviceWorkOrdersTypeVo = serviceWorkOrdersTypeVoList.stream().filter(vo -> vo.getId() != null && vo.getId().equals(s.getType())).findFirst().orElse(null); + + s.setTypeName(ObjectUtil.isNotNull(serviceWorkOrdersTypeVo) ? serviceWorkOrdersTypeVo.getOrderTypeName() : null); + serviceWorkOrdersVoList.add(s); + }); + return serviceWorkOrdersVoList; } private LambdaQueryWrapper buildQueryWrapper(ServiceWorkOrdersBo bo) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java index 3f14571e..d77f73d0 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbVisitorManagementServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.property.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -9,6 +10,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.property.domain.bo.QrCodeInfo; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.TbVisitorManagementBo; import org.dromara.property.domain.vo.TbVisitorManagementVo; @@ -58,16 +61,15 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi return TableDataInfo.build(result); } - /** - * 查询符合条件的访客管理列表 - * - * @param bo 查询条件 - * @return 访客管理列表 - */ @Override public List queryList(TbVisitorManagementBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + LambdaQueryWrapper tbVisitorManagementLambdaQueryWrapper = buildQueryWrapper(bo); + return baseMapper.selectVoList(tbVisitorManagementLambdaQueryWrapper); + } + + @Override + public List queryListByWapper(QueryWrapper wapper) { + return baseMapper.selectVoList(wapper); } private LambdaQueryWrapper buildQueryWrapper(TbVisitorManagementBo bo) { @@ -98,8 +100,10 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi */ @Override public Boolean insertByBo(TbVisitorManagementBo bo) { + QrCodeInfo info = RedisUtils.getCacheObject("Qrcode" + bo.getQrCodeId()); TbVisitorManagement add = MapstructUtils.convert(bo, TbVisitorManagement.class); validEntityBeforeSave(add); + add.setCreateById(info.getUserid()); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); diff --git a/ruoyi-modules/Sis/pom.xml b/ruoyi-modules/Sis/pom.xml index 9aea97f7..0152e6d0 100644 --- a/ruoyi-modules/Sis/pom.xml +++ b/ruoyi-modules/Sis/pom.xml @@ -123,17 +123,23 @@ examples - - com.hik - jna - 4.5.2_1 - + + + + + com.ghgande j2mod 3.0.0 + + net.java.dev.jna + jna + 5.17.0 + compile + diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemotePrecautionaryImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemotePrecautionaryImpl.java new file mode 100644 index 00000000..264080a3 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemotePrecautionaryImpl.java @@ -0,0 +1,35 @@ +package org.dromara.sis.dubbo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.sis.api.RemotePrecautionary; +import org.dromara.sis.api.domain.RemotePrecautionaryVo; + +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +@Slf4j +@DubboService +@RequiredArgsConstructor +public class RemotePrecautionaryImpl implements RemotePrecautionary { + private final PrecautionaryMapper precautionaryMapper; + + @Override + public List getList() { + Page Page = new Page<>(1, 10); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.orderByAsc("time"); + return precautionaryMapper.selectVoPage(Page, wrapper); + } + + @Override + public Map count() { + List precautionaries = precautionaryMapper.selectList(); + Stream longStream = precautionaries.stream().map(Precautionary::getType); + return Map.of(); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSosImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSosImpl.java new file mode 100644 index 00000000..d181166f --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSosImpl.java @@ -0,0 +1,49 @@ +package org.dromara.sis.dubbo; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.sis.api.RemoteSos; +import org.dromara.sis.api.domain.RemoteAlarmRecord; +import org.dromara.sis.domain.AlarmRecord; +import org.dromara.sis.service.AlarmRecordService; +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +@DubboService +@RequiredArgsConstructor +public class RemoteSosImpl implements RemoteSos { + private final AlarmRecordService alarmRecordService; + + @Override + public List getSoslist() { + QueryWrapper startTime = new QueryWrapper(); + Page page = alarmRecordService.page(new Page<>(1, 10)); + List records = page.getRecords(); + List remoteAlarmRecordList = new ArrayList<>(); + records.forEach(alarmRecord -> { + RemoteAlarmRecord remoteAlarmRecord = new RemoteAlarmRecord(); + BeanUtils.copyProperties(alarmRecord, remoteAlarmRecord); + remoteAlarmRecordList.add(remoteAlarmRecord); + }); + return remoteAlarmRecordList; + }; + + @Override + public Map sosCount() { + List list = alarmRecordService.list(); + //进行中 + long inprogress = list.stream().filter(alarmRecord -> alarmRecord.getState().equals("inprogress")).count(); + //已结束 + long finished = list.stream().filter(alarmRecord -> alarmRecord.getState().equals("finished")).count(); + //未接通 + long noAnswer = list.stream().filter(alarmRecord -> alarmRecord.getState().equals("noAnswer")).count(); + return Map.of("进行中", inprogress, "已结束", finished, "未接通", noAnswer,"总计", list.size()); + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/AlarmRecordService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/AlarmRecordService.java index a9a55362..ab9631fb 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/AlarmRecordService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/AlarmRecordService.java @@ -29,5 +29,5 @@ public interface AlarmRecordService extends IService { * @param operatorMap 操作记录映射,键为报警记录ID,值为对应操作记录列表 * @return 成功保存的记录数 */ - int saveNewRecords(List records, Map>> operatorMap); +// int saveNewRecords(List records, Map>> operatorMap); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/AlarmRecordServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/AlarmRecordServiceImpl.java index 59e1a7e8..8d6c5251 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/AlarmRecordServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/AlarmRecordServiceImpl.java @@ -26,6 +26,8 @@ public class AlarmRecordServiceImpl extends ServiceImpl newRecords = new ArrayList<>(); List updateRecords = new ArrayList<>(); + List newList=new ArrayList<>(); + // 分类处理记录 for (AlarmRecord record : records) { if (existingRecordMap.containsKey(record.getId())) { + Precautionary precautionary = new Precautionary(); + precautionary.setType(1L); + precautionary.setTime(record.getCallTime()); + precautionary.setAddress(record.getDeviceName()); + precautionary.setMsg("SOS终端接警"); + precautionary.setStatus(0L); + precautionary.setTaskId(record.getId()); + newList.add(precautionary); // 如果记录已存在,检查是否需要更新 AlarmRecord existing = existingRecordMap.get(record.getId()); if (hasRecordChanges(existing, record)) { @@ -58,6 +70,7 @@ public class AlarmRecordServiceImpl extends ServiceImpl records, Map>> operatorMap) { - if (records == null || records.isEmpty()) return 0; - - // 提取待插入记录的ID列表 - List ids = records.stream().map(AlarmRecord::getId).collect(Collectors.toList()); - - // 查询数据库中已存在的记录 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(AlarmRecord::getId, ids); - List existingRecords = this.list(queryWrapper); - List existingIds = existingRecords.stream().map(AlarmRecord::getId).collect(Collectors.toList()); - - // 过滤出新增记录 - List newRecords = records.stream() - .filter(record -> !existingIds.contains(record.getId())) - .collect(Collectors.toList()); - - // 批量插入新记录 - int savedCount = 0; - if (!newRecords.isEmpty()) { - if (this.saveBatch(newRecords)) { - savedCount = newRecords.size(); - - // 保存关联的操作记录 - saveRelatedOperators(newRecords, operatorMap); - } - } - return savedCount; - } +// +// @Override +// @Transactional(rollbackFor = Exception.class) +// public int saveNewRecords(List records, Map>> operatorMap) { +// if (records == null || records.isEmpty()) return 0; +// +// // 提取待插入记录的ID列表 +// List ids = records.stream().map(AlarmRecord::getId).collect(Collectors.toList()); +// +// // 查询数据库中已存在的记录 +// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); +// queryWrapper.in(AlarmRecord::getId, ids); +// List existingRecords = this.list(queryWrapper); +// List existingIds = existingRecords.stream().map(AlarmRecord::getId).collect(Collectors.toList()); +// +// // 过滤出新增记录 +// List newRecords = records.stream() +// .filter(record -> !existingIds.contains(record.getId())) +// .collect(Collectors.toList()); +// +// // 批量插入新记录 +// int savedCount = 0; +// if (!newRecords.isEmpty()) { +// if (this.saveBatch(newRecords)) { +// savedCount = newRecords.size(); +// +// // 保存关联的操作记录 +// saveRelatedOperators(newRecords, operatorMap); +// } +// } +// return savedCount; +// } private void saveRelatedOperators(List newRecords, Map>> operatorMap) { if (operatorMap == null || operatorMap.isEmpty()) return; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java index 6a43c0b2..30328df1 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteConfigServiceImpl.java @@ -26,4 +26,13 @@ public class RemoteConfigServiceImpl implements RemoteConfigService { return configService.selectRegisterEnabled(tenantId); } + + /** + * 获取访客机二维码有效期 + */ + @Override + public String selectQrTimeOut() { + return configService.selectConfigByKey("sys.fkqr.timeout"); + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java index 29c70695..b6cfb5ef 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java @@ -25,6 +25,7 @@ import org.dromara.system.api.model.PostDTO; import org.dromara.system.api.model.RoleDTO; import org.dromara.system.api.model.XcxLoginUser; import org.dromara.system.domain.*; +import org.dromara.system.domain.bo.SysDeptBo; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.domain.vo.SysPostVo; @@ -478,4 +479,16 @@ public class RemoteUserServiceImpl implements RemoteUserService { .collect(Collectors.toMap(SysPost::getPostId, SysPost::getPostName)); } + @Override + public Map seelectOrgcount() { + List sysDeptVos = deptService.selectDeptList(new SysDeptBo()); + HashMap hashMap = new HashMap<>(); + for (SysDeptVo sysDeptVo : sysDeptVos) { + Long l = userMapper.selectCount(new LambdaQueryWrapper().eq(SysUser::getDeptId, sysDeptVo.getDeptId())); + hashMap.put(sysDeptVo.getDeptName(), l.intValue()); + } + return hashMap; + } + + }