From 0c34fedc8dfbaeb574202681c852534a2e8df055 Mon Sep 17 00:00:00 2001 From: mocheng <3057647414@qq.com> Date: Mon, 4 Aug 2025 19:59:48 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E8=AE=BF=E5=AE=A2&&=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-api/property-api/pom.xml | 5 + .../system/api/RemoteConfigService.java | 1 + .../dromara/system/api/RemoteUserService.java | 2 + .../dromara/sis/api/RemotePrecautionary.java | 11 + .../java/org/dromara/sis/api/RemoteSos.java | 12 ++ .../sis/api/domain/RemoteAlarmRecord.java | 201 ++++++++++++++++++ .../sis/api/domain/RemotePrecautionaryVo.java | 63 ++++++ .../TbVisitorManagementController.java | 59 ++++- .../controller/cockpit/BookingController.java | 66 ++++++ .../controller/cockpit/DriverController.java | 13 ++ .../cockpit/EnergyConsumptionController.java | 15 ++ .../controller/cockpit/EventController.java | 12 ++ .../cockpit/ExpensesController.java | 49 +++++ .../controller/cockpit/FlowController.java | 12 ++ .../cockpit/PropertyPersonController.java | 25 +++ .../controller/cockpit/SosController.java | 30 +++ .../cockpit/WorkOrderController.java | 62 ++++++ .../property/domain/bo/QrCodeInfo.java | 10 + .../domain/bo/TbVisitorManagementBo.java | 6 + .../service/IServiceWorkOrdersService.java | 1 + .../service/ITbVisitorManagementService.java | 6 + .../impl/ServiceWorkOrdersServiceImpl.java | 18 +- .../impl/TbVisitorManagementServiceImpl.java | 20 +- ruoyi-modules/Sis/pom.xml | 16 +- .../sis/dubbo/RemotePrecautionaryImpl.java | 35 +++ .../org/dromara/sis/dubbo/RemoteSosImpl.java | 49 +++++ .../sis/service/AlarmRecordService.java | 2 +- .../service/impl/AlarmRecordServiceImpl.java | 82 ++++--- .../system/dubbo/RemoteConfigServiceImpl.java | 9 + .../system/dubbo/RemoteUserServiceImpl.java | 13 ++ 30 files changed, 856 insertions(+), 49 deletions(-) create mode 100644 ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemotePrecautionary.java create mode 100644 ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/RemoteSos.java create mode 100644 ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemoteAlarmRecord.java create mode 100644 ruoyi-api/sis-api/src/main/java/org/dromara/sis/api/domain/RemotePrecautionaryVo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/BookingController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/DriverController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EnergyConsumptionController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/EventController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/ExpensesController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/FlowController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/PropertyPersonController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/SosController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cockpit/WorkOrderController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/QrCodeInfo.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemotePrecautionaryImpl.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/dubbo/RemoteSosImpl.java 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; + } + + } From 6b1519a5b6cf98884586432404e87c75131a914b Mon Sep 17 00:00:00 2001 From: 15683799673 Date: Tue, 5 Aug 2025 00:44:13 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BA=BA=E8=84=B8=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=86=99=E5=85=A5=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sis/domain/SisAlarmEventAttachments.java | 2 +- .../dromara/sis/domain/SisDeviceManage.java | 3 ++ .../domain/bo/SisAlarmEventAttachmentsBo.java | 2 +- .../domain/vo/SisAlarmEventAttachmentsVo.java | 2 +- .../ISisAlarmEventAttachmentsService.java | 10 ++++ .../sis/service/ISisDeviceManageService.java | 1 + .../SisAlarmEventAttachmentsServiceImpl.java | 5 ++ .../impl/SisAlarmEventsServiceImpl.java | 52 +++++++++++++++---- .../impl/SisDeviceManageServiceImpl.java | 9 +++- 9 files changed, 73 insertions(+), 13 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEventAttachments.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEventAttachments.java index 7e34cfbd..808aacc7 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEventAttachments.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisAlarmEventAttachments.java @@ -36,7 +36,7 @@ public class SisAlarmEventAttachments extends TenantEntity { /** * 时间图片id */ - private String ossId; + private Long ossId; /** * 1:图片,2:文件;3视频 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java index 10ef03ea..e18bbf54 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisDeviceManage.java @@ -77,4 +77,7 @@ public class SisDeviceManage extends BaseEntity { * 设备组id */ private Long groupId; + + private String tenantId; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventAttachmentsBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventAttachmentsBo.java index 5fdc96fe..a66bb97c 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventAttachmentsBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisAlarmEventAttachmentsBo.java @@ -35,7 +35,7 @@ public class SisAlarmEventAttachmentsBo extends BaseEntity { /** * 时间图片id */ - private String ossId; + private Long ossId; /** * 1:图片,2:文件;3视频 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventAttachmentsVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventAttachmentsVo.java index ca0c1380..0cf84127 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventAttachmentsVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisAlarmEventAttachmentsVo.java @@ -40,7 +40,7 @@ public class SisAlarmEventAttachmentsVo implements Serializable { * 时间图片id */ @ExcelProperty(value = "时间图片id") - private String ossId; + private Long ossId; /** * 1:图片,2:文件;3视频 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventAttachmentsService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventAttachmentsService.java index 89feccd8..ec99b37d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventAttachmentsService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventAttachmentsService.java @@ -2,6 +2,7 @@ package org.dromara.sis.service; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.sis.domain.SisAlarmEventAttachments; import org.dromara.sis.domain.bo.SisAlarmEventAttachmentsBo; import org.dromara.sis.domain.vo.SisAlarmEventAttachmentsVo; @@ -65,4 +66,13 @@ public interface ISisAlarmEventAttachmentsService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 批量写入事件附件表 + * + * @param ls 附件数据 + * @return 返回写入数量 + */ + Boolean batchInsert(List ls); + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceManageService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceManageService.java index 68b45bca..4cdb47a7 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceManageService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisDeviceManageService.java @@ -76,6 +76,7 @@ public interface ISisDeviceManageService { */ SisDeviceManageVo queryVoByDeviceIp(String deviceIp); + SisDeviceManage queryByDeviceIp(String deviceId); /** * 查询设备数 * diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java index b3da1c3f..82dc8de4 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java @@ -131,4 +131,9 @@ public class SisAlarmEventAttachmentsServiceImpl implements ISisAlarmEventAttach } return baseMapper.deleteByIds(ids) > 0; } + + @Override + public Boolean batchInsert(List ls) { + return baseMapper.insertBatch(ls); + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java index 15a31d27..f0ed7bbc 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java @@ -12,19 +12,20 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.resource.api.RemoteFileService; import org.dromara.resource.api.domain.RemoteFile; +import org.dromara.sis.domain.SisAlarmEventAttachments; import org.dromara.sis.domain.SisAlarmEvents; +import org.dromara.sis.domain.SisDeviceManage; import org.dromara.sis.domain.bo.SisAlarmEventsBo; import org.dromara.sis.domain.vo.SisAlarmEventsVo; -import org.dromara.sis.domain.vo.SisDeviceManageVo; import org.dromara.sis.mapper.SisAlarmEventsMapper; +import org.dromara.sis.service.ISisAlarmEventAttachmentsService; import org.dromara.sis.service.ISisAlarmEventsService; import org.dromara.sis.service.ISisDeviceManageService; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 告警Service业务层处理 @@ -39,6 +40,7 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { private final SisAlarmEventsMapper baseMapper; private final ISisDeviceManageService deviceManageService; + private final ISisAlarmEventAttachmentsService alarmEventAttachmentsService; @DubboReference private RemoteFileService remoteFileService; @@ -148,17 +150,49 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { @Async @Override + @Transactional(rollbackFor = Exception.class) public void createAlarmRecord(String deviceIp, Integer level, Integer type, byte[] smallImg, byte[] bigImg) { // 校验设备信息 - SisDeviceManageVo sisDeviceManageVo = deviceManageService.queryVoByDeviceIp(deviceIp); - if (sisDeviceManageVo == null) { + SisDeviceManage sisDeviceManage = deviceManageService.queryByDeviceIp(deviceIp); + if (sisDeviceManage == null) { log.error("设备信息不存在,放弃此条告警记录。"); return; } + // 生成时间信息 + SisAlarmEvents alarmEvents = new SisAlarmEvents(); + alarmEvents.setType(1L); + alarmEvents.setLevel(Long.valueOf(level)); + alarmEvents.setDeviceIp(deviceIp); + alarmEvents.setDeviceName(sisDeviceManage.getDeviceName()); + alarmEvents.setDeviceGroupId(sisDeviceManage.getId()); + alarmEvents.setReportTime(new Date()); + alarmEvents.setState(1); + alarmEvents.setTenantId(sisDeviceManage.getTenantId()); + alarmEvents.setCreateDept(sisDeviceManage.getCreateDept()); + int insert = this.baseMapper.insert(alarmEvents); + log.info("写入报警事件表完成,num={}", insert); + // 写入附件表 // 上传图片 - RemoteFile small = remoteFileService.uploadImg(smallImg); - RemoteFile big = remoteFileService.uploadImg(bigImg); - + List ls = new ArrayList<>(); + if (smallImg != null && smallImg.length > 0) { + ls.add(createEventAttachments(smallImg, alarmEvents, sisDeviceManage)); + } + if (bigImg != null && bigImg.length > 0) { + ls.add(createEventAttachments(bigImg, alarmEvents, sisDeviceManage)); + } + Boolean flag = alarmEventAttachmentsService.batchInsert(ls); + log.info("写入告警事件附件表完成, reslut={}, size={}", flag, ls.size()); } + + public SisAlarmEventAttachments createEventAttachments(byte[] img, SisAlarmEvents alarmEvents, SisDeviceManage sisDeviceManage) { + RemoteFile result = remoteFileService.uploadImg(img); + SisAlarmEventAttachments attachments = new SisAlarmEventAttachments(); + attachments.setEventId(alarmEvents.getId()); + attachments.setOssId(result.getOssId()); + attachments.setType(1L); + attachments.setTenantId(sisDeviceManage.getTenantId()); + attachments.setCreateDept(sisDeviceManage.getCreateDept()); + return attachments; + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java index 6cf7f4ec..86973097 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceManageServiceImpl.java @@ -178,7 +178,14 @@ public class SisDeviceManageServiceImpl implements ISisDeviceManageService { public SisDeviceManageVo queryVoByDeviceIp(String deviceIp) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(SisDeviceManage::getDeviceIp, deviceIp); - return baseMapper.selectVoById(lqw); + return baseMapper.selectVoOne(lqw); + } + + @Override + public SisDeviceManage queryByDeviceIp(String deviceId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SisDeviceManage::getDeviceIp, deviceId); + return baseMapper.selectOne(lqw); } @Override From 59f8e0fc2f96af7d4f79185a08ad8af1fb2dbe28 Mon Sep 17 00:00:00 2001 From: 15683799673 Date: Tue, 5 Aug 2025 00:44:43 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BA=BA=E8=84=B8=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=86=99=E5=85=A5=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SisAlarmEventAttachmentsServiceImpl.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java index 82dc8de4..1440804d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventAttachmentsServiceImpl.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.sis.domain.SisAlarmEventAttachments; @@ -40,7 +39,7 @@ public class SisAlarmEventAttachmentsServiceImpl implements ISisAlarmEventAttach * @return 【请填写功能名称】 */ @Override - public SisAlarmEventAttachmentsVo queryById(Long id){ + public SisAlarmEventAttachmentsVo queryById(Long id) { return baseMapper.selectVoById(id); } @@ -75,7 +74,7 @@ public class SisAlarmEventAttachmentsServiceImpl implements ISisAlarmEventAttach LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByAsc(SisAlarmEventAttachments::getId); lqw.eq(bo.getEventId() != null, SisAlarmEventAttachments::getEventId, bo.getEventId()); - lqw.eq(StringUtils.isNotBlank(bo.getOssId()), SisAlarmEventAttachments::getOssId, bo.getOssId()); + lqw.eq(bo.getOssId() != null, SisAlarmEventAttachments::getOssId, bo.getOssId()); lqw.eq(bo.getType() != null, SisAlarmEventAttachments::getType, bo.getType()); return lqw; } @@ -113,7 +112,7 @@ public class SisAlarmEventAttachmentsServiceImpl implements ISisAlarmEventAttach /** * 保存前的数据校验 */ - private void validEntityBeforeSave(SisAlarmEventAttachments entity){ + private void validEntityBeforeSave(SisAlarmEventAttachments entity) { //TODO 做一些数据校验,如唯一约束 } @@ -126,7 +125,7 @@ public class SisAlarmEventAttachmentsServiceImpl implements ISisAlarmEventAttach */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; From 8093e1cfd74b80179b9478e753b883e496204679 Mon Sep 17 00:00:00 2001 From: mocheng <3057647414@qq.com> Date: Tue, 5 Aug 2025 09:58:20 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E8=AE=BF=E5=AE=A2&&=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AlarmRecordServiceImpl.java | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) 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 8d6c5251..b4cf0382 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,8 +26,7 @@ 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)) { @@ -83,11 +72,6 @@ public class AlarmRecordServiceImpl extends ServiceImpl Date: Tue, 5 Aug 2025 10:51:31 +0800 Subject: [PATCH 5/6] refactor(sis): 1 --- .../sis/domain/SisElevatorFloorRef.java | 10 ++ .../dromara/sis/sdk/huawei/HuaWeiBoxApi.java | 5 +- .../huawei/service/HuaWeiBoxApiService.java | 31 +++++- .../service/ISisElevatorFloorRefService.java | 8 ++ ...SisElevatorFloorChannelRefServiceImpl.java | 1 + .../impl/SisElevatorFloorRefServiceImpl.java | 21 ++++ .../impl/SisElevatorInfoServiceImpl.java | 100 +++++++----------- 7 files changed, 110 insertions(+), 66 deletions(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java index 6df2a47a..3d5d4266 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorFloorRef.java @@ -42,5 +42,15 @@ public class SisElevatorFloorRef extends TenantEntity { */ private Long authGroupId; + /** + * 内部通道号 + */ + private Long inChannel; + + /** + * 外部通道号 + */ + private Long outChannel; + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java index 397c5e7d..b20da6c0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java @@ -4,6 +4,7 @@ import org.dromara.sis.sdk.huawei.domain.AddHWPersonReq; import java.util.Collection; import java.util.List; +import java.util.Map; /** * @apiNote HuaWeiBoxApi @@ -32,7 +33,7 @@ public interface HuaWeiBoxApi { * 根据抓拍图片比对,返回人员ID * * @param base64Img 入参 - * @return Long + * @return Map */ - Long findPerson(String base64Img); + Map findPerson(String base64Img); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java index b89ce154..06aef232 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java @@ -12,7 +12,9 @@ import org.dromara.sis.sdk.huawei.utils.HuaWeiHttp; import org.springframework.stereotype.Service; import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -86,7 +88,7 @@ public class HuaWeiBoxApiService implements HuaWeiBoxApi { * @return Long */ @Override - public Long findPerson(String base64Img) { + public Map findPerson(String base64Img) { String url = "/sdk_service/rest/facerepositories/peoples"; FinaHWPersonReq req = new FinaHWPersonReq(); @@ -97,23 +99,42 @@ public class HuaWeiBoxApiService implements HuaWeiBoxApi { String jsonReq = JSONUtil.toJsonStr(req); String jsonStrRes = huaWeiHttp.doPost(url, jsonReq); JSONObject jsonRes = JSONUtil.parseObj(jsonStrRes); + Map result = new HashMap<>(); if (jsonRes.getInt("resultCode") != 0) { - log.error("调用华为盒子人脸比对接口失败,code:{},msg:{}", jsonRes.getInt("resultCode"), jsonRes.getStr("resultMsg")); - return null; + switch (jsonRes.getInt("resultCode")) { + case 912322041: + result.put("code", 912322041); + result.put("msg", "特征值提取失败"); + break; + case 912322022: + result.put("code", 912333003); + result.put("msg", "base64参数非法"); + break; + default: + result.put("code", jsonRes.getInt("resultCode")); + result.put("msg", jsonRes.getStr("resultMsg")); + break; + } + log.info("调用华为盒子人脸比对接口失败,code:{},msg:{}", jsonRes.getInt("resultCode"), jsonRes.getStr("resultMsg")); + return result; } JSONArray jsonArr = jsonRes.getJSONArray("algorithmResults"); JSONObject obj = jsonArr.getJSONObject(0); if (Integer.parseInt(obj.getStr("number")) == 0) { - log.error("无人脸比对数据"); + result.put("code", 201); + result.put("msg", "无匹配数据"); + log.info("无人脸比对数据"); return null; } JSONArray peopleList = obj.getJSONArray("peopleList"); JSONObject people = peopleList.getJSONObject(0); - return Long.parseLong(people.getStr("peopleId")); + result.put("code", 200); + result.put("msg", Long.parseLong(people.getStr("peopleId"))); + return result; } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java index d8e39b17..69b4ff9d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisElevatorFloorRefService.java @@ -1,5 +1,6 @@ package org.dromara.sis.service; +import org.dromara.sis.domain.SisElevatorFloorChannelRef; import org.dromara.sis.domain.vo.SisElevatorFloorRefVo; import org.dromara.sis.domain.bo.SisElevatorFloorRefBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -72,4 +73,11 @@ public interface ISisElevatorFloorRefService { * @param authGroupId 电梯id */ List queryByAuthGroupId(Long authGroupId); + + /** + * 批量更新电梯⇄楼层通道关联信息 + * + * @param info 通道信息 + */ + Boolean batchUpdateChannel(Collection info); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorChannelRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorChannelRefServiceImpl.java index 74c036eb..f8b96df8 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorChannelRefServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorChannelRefServiceImpl.java @@ -150,6 +150,7 @@ public class SisElevatorFloorChannelRefServiceImpl implements ISisElevatorFloorC lqw.eq(SisElevatorFloorChannelRef::getElevatorId, elevatorId); baseMapper.delete(lqw); + // 写入通道关系 boolean flag = baseMapper.insertBatch(bo); Assert.isTrue(flag, "批量增加电梯⇄楼层⇄通道关联信息失败"); return flag; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java index c7bd4bab..43e932e0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorFloorRefServiceImpl.java @@ -9,6 +9,7 @@ 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.sis.domain.SisElevatorFloorChannelRef; import org.springframework.stereotype.Service; import org.dromara.sis.domain.bo.SisElevatorFloorRefBo; import org.dromara.sis.domain.vo.SisElevatorFloorRefVo; @@ -151,4 +152,24 @@ public class SisElevatorFloorRefServiceImpl implements ISisElevatorFloorRefServi lqw.eq(SisElevatorFloorRef::getElevatorId, authGroupId); return baseMapper.selectVoList(lqw); } + + /** + * 批量更新电梯⇄楼层通道关联信息 + * + * @param info 通道信息 + */ + @Override + public Boolean batchUpdateChannel(Collection info){ + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(SisElevatorFloorRef::getFloorId, info.stream().map(SisElevatorFloorChannelRef::getFloorId).toList()); + List list = baseMapper.selectList(lqw); + + + for (SisElevatorFloorRef item : list){ + item.setInChannel(info.stream().filter(x -> x.getFloorId().equals(item.getFloorId())).findFirst().get().getInChannel()); + } + + return false; + + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java index bb48eae2..08819ef0 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisElevatorInfoServiceImpl.java @@ -24,6 +24,7 @@ import org.dromara.sis.domain.vo.SisElevatorInfoVo; import org.dromara.sis.mapper.SisElevatorInfoMapper; import org.dromara.sis.service.ISisDeviceBindRefService; import org.dromara.sis.service.ISisElevatorFloorChannelRefService; +import org.dromara.sis.service.ISisElevatorFloorRefService; import org.dromara.sis.service.ISisElevatorInfoService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -45,6 +46,7 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { private final SisElevatorInfoMapper baseMapper; private final ISisDeviceBindRefService deviceBindRefService; + private final ISisElevatorFloorRefService elevatorFloorRefService; private final ISisElevatorFloorChannelRefService elevatorFloorChannelRefService; @DubboReference @@ -71,7 +73,7 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { deviceInfo.setDeviceIp(item.getDeviceIp()); if (Objects.equals(item.getControlType(), ControlTypeEnum.REMOTE_CALL_ELEVATOR.getCode())) { remoteCallElevatorDeviceId.add(deviceInfo); - }else { + } else { sisElevatorInfoVo.setElevatorControlDeviceId(deviceInfo); } sisElevatorInfoVo.setRemoteCallElevatorDeviceId(remoteCallElevatorDeviceId); @@ -159,53 +161,13 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { if (flag) { bo.setElevatorId(add.getElevatorId()); - List ls = new ArrayList<>(); - // 梯控 - if (bo.getElevatorControlDeviceId() != null) { - SisDeviceBindRef ref = new SisDeviceBindRef(); - ref.setDeviceId(bo.getElevatorControlDeviceId().getDeviceId()); - ref.setDeviceIp(bo.getElevatorControlDeviceId().getDeviceIp()); - ref.setBindId(bo.getElevatorId()); - ref.setControlType(ControlTypeEnum.ELEVATOR_CONTROL.getCode()); - ls.add(ref); - } - // 远程呼叫 - if (bo.getRemoteCallElevatorDeviceId() != null && !bo.getRemoteCallElevatorDeviceId().isEmpty()) { - for (SisElevatorInfoBo.DeviceInfo deviceInfo : bo.getRemoteCallElevatorDeviceId()) { - SisDeviceBindRef ref = new SisDeviceBindRef(); - ref.setDeviceId(deviceInfo.getDeviceId()); - ref.setDeviceIp(deviceInfo.getDeviceIp()); - ref.setBindId(bo.getElevatorId()); - ref.setControlType(ControlTypeEnum.REMOTE_CALL_ELEVATOR.getCode()); - ls.add(ref); - } - } - // 写入绑定设备表 - if (!ls.isEmpty()) { - Boolean b = deviceBindRefService.batchInsert(ls); - Assert.isTrue(b, "设备绑定关联关系写入失败!"); - } + // 写入设备绑定关系 + this.insertSisDeviceBindRefs(bo); // 写入电梯⇄楼层⇄通道关联表 - if(!bo.getChannels().isEmpty()){ - Collection channelRefs = new ArrayList<>(); - for (SisElevatorInfoBo.ChannelInfo channelInfo : bo.getChannels()) { - SisElevatorFloorChannelRef ref = new SisElevatorFloorChannelRef(); - ref.setElevatorId(add.getElevatorId()); - ref.setFloorId(channelInfo.getFloorId()); - ref.setInChannel(channelInfo.getInChannel()); - ref.setOutChannel(channelInfo.getOutChannel()); - channelRefs.add(ref); - } - Boolean b = elevatorFloorChannelRefService.batchInsert(add.getElevatorId(), channelRefs); - Assert.isTrue(b, "电梯楼层通道关联关系写入失败!"); + if (!bo.getChannels().isEmpty()) { + this.insertSisElevatorFloorChannelRefs(bo); } - - // hik sdk 登录 -// short port = bo.getControlPort().shortValue(); -// Boolean isLogin = HikApiService.getInstance().login(bo.getControlIp(), port, bo.getControlAccount(), bo.getControlPwd()); -// Assert.isTrue(isLogin, "电梯添加失败, 发起梯控设备连接失败."); - // todo 发起电梯楼层信息同步 } return flag; } @@ -223,6 +185,19 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { // 删除设备绑定关系 deviceBindRefService.deleteByBindId(bo.getElevatorId()); // 重新写入关联关系 + this.insertSisDeviceBindRefs(bo); + + // 写入电梯⇄楼层⇄通道关联表 + if (!bo.getChannels().isEmpty()) { + this.insertSisElevatorFloorChannelRefs(bo); + } + return baseMapper.updateById(update) > 0; + } + + /** + * 抽取公共方法,写入绑定关系 + */ + private void insertSisDeviceBindRefs(SisElevatorInfoBo bo) { List ls = new ArrayList<>(); // 梯控 if (bo.getElevatorControlDeviceId() != null) { @@ -244,27 +219,34 @@ public class SisElevatorInfoServiceImpl implements ISisElevatorInfoService { ls.add(ref); } } + // 写入绑定设备表 if (!ls.isEmpty()) { Boolean b = deviceBindRefService.batchInsert(ls); Assert.isTrue(b, "设备绑定关联关系写入失败!"); } + } - // 写入电梯⇄楼层⇄通道关联表 - if(!bo.getChannels().isEmpty()){ - Collection channelRefs = new ArrayList<>(); - for (SisElevatorInfoBo.ChannelInfo channelInfo : bo.getChannels()) { - SisElevatorFloorChannelRef ref = new SisElevatorFloorChannelRef(); - ref.setElevatorId(update.getElevatorId()); - ref.setFloorId(channelInfo.getFloorId()); - ref.setInChannel(channelInfo.getInChannel()); - ref.setOutChannel(channelInfo.getOutChannel()); - channelRefs.add(ref); - } - Boolean b = elevatorFloorChannelRefService.batchInsert(update.getElevatorId(), channelRefs); - Assert.isTrue(b, "电梯楼层通道关联关系写入失败!"); + /** + * 抽取公共方法,写入电梯⇄楼层⇄通道关联 + */ + private void insertSisElevatorFloorChannelRefs(SisElevatorInfoBo bo) { + Collection channelRefs = new ArrayList<>(); + for (SisElevatorInfoBo.ChannelInfo channelInfo : bo.getChannels()) { + SisElevatorFloorChannelRef ref = new SisElevatorFloorChannelRef(); + ref.setElevatorId(bo.getElevatorId()); + ref.setFloorId(channelInfo.getFloorId()); + ref.setInChannel(channelInfo.getInChannel()); + ref.setOutChannel(channelInfo.getOutChannel()); + channelRefs.add(ref); } - return baseMapper.updateById(update) > 0; + // 写入电梯⇄楼层⇄通道关联表 + Boolean insert = elevatorFloorChannelRefService.batchInsert(bo.getElevatorId(), channelRefs); + Assert.isTrue(insert, "电梯⇄楼层⇄通道关联关系写入失败!"); + + // 冗余数据到电梯⇄楼层关联表 + Boolean update = elevatorFloorRefService.batchUpdateChannel(channelRefs); + } /** From 2a36ddf688cdd2fbe44ea38c18d17659cd66b5cb Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Tue, 5 Aug 2025 10:57:39 +0800 Subject: [PATCH 6/6] =?UTF-8?q?refactor(huawei):=20=E5=B0=81=E8=A3=85?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/sis/sdk/huawei/HuaWeiBoxApi.java | 3 +- .../sis/sdk/huawei/domain/HWResult.java | 18 ++++++++++ .../huawei/service/HuaWeiBoxApiService.java | 33 +++++-------------- 3 files changed, 29 insertions(+), 25 deletions(-) create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/domain/HWResult.java diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java index b20da6c0..8abea6e4 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/HuaWeiBoxApi.java @@ -1,6 +1,7 @@ package org.dromara.sis.sdk.huawei; import org.dromara.sis.sdk.huawei.domain.AddHWPersonReq; +import org.dromara.sis.sdk.huawei.domain.HWResult; import java.util.Collection; import java.util.List; @@ -35,5 +36,5 @@ public interface HuaWeiBoxApi { * @param base64Img 入参 * @return Map */ - Map findPerson(String base64Img); + HWResult findPerson(String base64Img); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/domain/HWResult.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/domain/HWResult.java new file mode 100644 index 00000000..f4c27163 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/domain/HWResult.java @@ -0,0 +1,18 @@ +package org.dromara.sis.sdk.huawei.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * @author lsm + * @apiNote HWResult + * @since 2025/8/5 + */ +@Data +@AllArgsConstructor +public class HWResult { + + public Integer code; + + public String message; +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java index 06aef232..2613406b 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/huawei/service/HuaWeiBoxApiService.java @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.sis.sdk.huawei.HuaWeiBoxApi; import org.dromara.sis.sdk.huawei.domain.AddHWPersonReq; import org.dromara.sis.sdk.huawei.domain.FinaHWPersonReq; +import org.dromara.sis.sdk.huawei.domain.HWResult; import org.dromara.sis.sdk.huawei.utils.HuaWeiHttp; import org.springframework.stereotype.Service; @@ -88,7 +89,7 @@ public class HuaWeiBoxApiService implements HuaWeiBoxApi { * @return Long */ @Override - public Map findPerson(String base64Img) { + public HWResult findPerson(String base64Img) { String url = "/sdk_service/rest/facerepositories/peoples"; FinaHWPersonReq req = new FinaHWPersonReq(); @@ -99,42 +100,26 @@ public class HuaWeiBoxApiService implements HuaWeiBoxApi { String jsonReq = JSONUtil.toJsonStr(req); String jsonStrRes = huaWeiHttp.doPost(url, jsonReq); JSONObject jsonRes = JSONUtil.parseObj(jsonStrRes); - Map result = new HashMap<>(); if (jsonRes.getInt("resultCode") != 0) { - switch (jsonRes.getInt("resultCode")) { - case 912322041: - result.put("code", 912322041); - result.put("msg", "特征值提取失败"); - break; - case 912322022: - result.put("code", 912333003); - result.put("msg", "base64参数非法"); - break; - default: - result.put("code", jsonRes.getInt("resultCode")); - result.put("msg", jsonRes.getStr("resultMsg")); - break; - } - log.info("调用华为盒子人脸比对接口失败,code:{},msg:{}", jsonRes.getInt("resultCode"), jsonRes.getStr("resultMsg")); - return result; + return switch (jsonRes.getInt("resultCode")) { + case 912322041 -> new HWResult(912322041, "特征值提取失败"); + case 912333003 -> new HWResult(912333003, "base64参数非法"); + default -> new HWResult(jsonRes.getInt("resultCode"), jsonRes.getStr("resultMsg")); + }; } JSONArray jsonArr = jsonRes.getJSONArray("algorithmResults"); JSONObject obj = jsonArr.getJSONObject(0); if (Integer.parseInt(obj.getStr("number")) == 0) { - result.put("code", 201); - result.put("msg", "无匹配数据"); log.info("无人脸比对数据"); - return null; + return new HWResult(201, "无匹配数据"); } JSONArray peopleList = obj.getJSONArray("peopleList"); JSONObject people = peopleList.getJSONObject(0); - result.put("code", 200); - result.put("msg", Long.parseLong(people.getStr("peopleId"))); - return result; + return new HWResult(200, people.getStr("peopleId")); } }