From 54c423b8cbc10b3e37d5dc4208425c4d07e8b719 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Tue, 12 Aug 2025 17:51:28 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat(sis):=20-=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=AE=BF=E5=AE=A2=E7=AE=A1=E7=90=86=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=92=8C=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=20-=20?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=AE=BF=E5=AE=A2=E7=99=BB=E8=AE=B0=E5=92=8C?= =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/sis/domain/SisElevatorInfo.java | 6 ++ .../sis/domain/bo/SisElevatorInfoBo.java | 5 ++ .../sis/domain/bo/SisPersonLibImgBo.java | 12 +-- .../sis/domain/vo/SisDeviceManageVo.java | 10 --- .../sis/domain/vo/SisElevatorInfoVo.java | 5 ++ .../sis/domain/vo/SisPersonLibImgVo.java | 6 -- .../runner/HikDeviceApplicationRunner.java | 5 +- .../org/dromara/sis/sdk/e8/E8PlatformApi.java | 33 ++++++-- .../e8/domain/custom/res/CustomFindRes.java | 13 --- .../sis/sdk/e8/domain/enums/AreaTypeEnum.java | 45 ----------- .../sis/sdk/e8/domain/enums/UserTypeEnum.java | 50 ------------ .../e8/domain/visitors/req/VisitorAddReq.java | 47 +++++++++++ .../e8/domain/visitors/res/VisitorAddRes.java | 52 ++++++++++++ .../sdk/e8/service/E8PlatformApiService.java | 81 ++++++++++++++++--- .../dromara/sis/sdk/e8/utils/E8ApiUtil.java | 11 ++- .../sis/sdk/hik/calback/HikAlarmCallBack.java | 5 +- .../utils/ElevatorControlTcpUtil.java | 17 ++-- .../service/IZeroSensationPassageService.java | 2 +- .../impl/SisPersonLibImgServiceImpl.java | 12 +-- .../impl/ZeroSensationPassageServiceImpl.java | 30 ++++--- .../mapper/sis/SisAuthRecordMapper.xml | 2 +- 21 files changed, 255 insertions(+), 194 deletions(-) delete mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/enums/AreaTypeEnum.java delete mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/enums/UserTypeEnum.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/req/VisitorAddReq.java create mode 100644 ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/res/VisitorAddRes.java diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorInfo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorInfo.java index 822333f6..de33a5fb 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorInfo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/SisElevatorInfo.java @@ -135,4 +135,10 @@ public class SisElevatorInfo extends TenantEntity { */ private Long unitId; + /** + * 是否允许控制 + */ + private Boolean isControl; + + } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorInfoBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorInfoBo.java index f6d4d4d7..b7393564 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorInfoBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisElevatorInfoBo.java @@ -143,6 +143,11 @@ public class SisElevatorInfoBo extends BaseEntity { */ private Long unitId; + /** + * 是否允许控制 + */ + private Boolean isControl; + /** * 绑定的远程呼梯设备 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java index b9ba096c..3b118a91 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/bo/SisPersonLibImgBo.java @@ -29,10 +29,10 @@ public class SisPersonLibImgBo extends BaseEntity { private Long id; /** - * 人员库编码 + * 人员标签 */ - @NotEmpty(message = "人像库id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Collection libIds; + @NotNull(message = "人员标签不能为空", groups = {AddGroup.class, EditGroup.class}) + private Integer rosterType; /** * 人像名称 @@ -90,10 +90,4 @@ public class SisPersonLibImgBo extends BaseEntity { * 图片MD5 */ private String imgMd5Value; - - /** - * 人员标签 - */ - private Integer rosterType; - } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java index e5955b28..f6190037 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisDeviceManageVo.java @@ -56,16 +56,6 @@ public class SisDeviceManageVo implements Serializable { @ExcelProperty(value = "设备") private String deviceMac; - /** - * 设备账号 - */ - private String deviceAccount; - - /** - * 设备密码 - */ - private String devicePwd; - /** * 设备类型 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorInfoVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorInfoVo.java index a1b84bce..d6c3734b 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorInfoVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisElevatorInfoVo.java @@ -156,6 +156,11 @@ public class SisElevatorInfoVo implements Serializable { */ private Long unitId; + /** + * 是否允许控制 + */ + private Boolean isControl; + /** * 呼梯摄像头 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java index 991c6dd9..cfb82d28 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/vo/SisPersonLibImgVo.java @@ -85,12 +85,6 @@ public class SisPersonLibImgVo implements Serializable { @ExcelProperty(value = "远程库图像ID") private Long remoteHWId; - /** - * 人像库id - */ - @ExcelProperty(value = "人像库id") - private Collection libIds; - /** * 入驻员工id */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java index 3a4338bc..ffa69c43 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/runner/HikDeviceApplicationRunner.java @@ -9,8 +9,7 @@ import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.utils.SpringUtils; import org.dromara.property.api.RemoteFloorService; import org.dromara.property.api.domain.vo.RemoteFloorVo; -import org.dromara.sis.domain.bo.SisDeviceManageBo; -import org.dromara.sis.domain.vo.SisDeviceManageVo; +import org.dromara.sis.domain.SisDeviceManage; import org.dromara.sis.domain.vo.SisElevatorInfoVo; import org.dromara.sis.sdk.hik.HikApiService; import org.dromara.sis.sdk.hik.calback.HikAlarmCallBack; @@ -78,7 +77,7 @@ public class HikDeviceApplicationRunner implements ApplicationRunner { @Async public void hikNetCameraLogin() { - List deviceList = deviceManageService.queryList(new SisDeviceManageBo()); + List deviceList = deviceManageService.queryHikDevices(); if (CollUtil.isEmpty(deviceList)) { log.info("没有查询到摄像设备信息,不执行登录"); return; diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/E8PlatformApi.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/E8PlatformApi.java index b5bd34fd..a223dbcb 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/E8PlatformApi.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/E8PlatformApi.java @@ -1,6 +1,5 @@ package org.dromara.sis.sdk.e8; -import com.baomidou.mybatisplus.core.metadata.IPage; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.sis.sdk.e8.domain.QueryDto; import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq; @@ -20,6 +19,8 @@ import org.dromara.sis.sdk.e8.domain.door.res.DoorDeviceFindRes; import org.dromara.sis.sdk.e8.domain.lift.req.LiftAddReq; import org.dromara.sis.sdk.e8.domain.lift.req.LiftUpdateReq; import org.dromara.sis.sdk.e8.domain.lift.res.LiftFindRes; +import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq; +import org.dromara.sis.sdk.e8.domain.visitors.res.VisitorAddRes; import org.dromara.sis.sdk.e8.domain.voucher.req.ChangeCardReq; import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq; import org.dromara.sis.sdk.e8.domain.voucher.req.OperateVoucherReq; @@ -34,6 +35,7 @@ import java.util.List; public interface E8PlatformApi { //***************************************客户信息接口*******************************************/ + /** * 查询单个人员信息 * @@ -46,9 +48,9 @@ public interface E8PlatformApi { * 人员信息分页查询 * * @param dto 传参 - * @return IPage + * @return TableDataInfo */ - IPage findCustomerList(QueryDto dto); + TableDataInfo findCustomerList(QueryDto dto); /** * 新增人员信息 @@ -75,6 +77,7 @@ public interface E8PlatformApi { Boolean deleteCustomer(Long id); //***************************************门禁信息接口******************************************* + /** * 查询门禁信息 * @@ -156,13 +159,14 @@ public interface E8PlatformApi { TableDataInfo getPageCustomerAuth(QueryDto dto); //***************************************电梯信息接口******************************************* + /** * 电梯信息分页查询 * * @param dto 传参 - * @return IPage + * @return TableDataInfo */ - IPage getPageList(QueryDto dto); + TableDataInfo getPageList(QueryDto dto); /** * 查询电梯楼层 @@ -197,6 +201,7 @@ public interface E8PlatformApi { Boolean deleteLift(Integer id); //***************************************凭证信息接口******************************************* + /** * 发行凭证 * @@ -228,4 +233,22 @@ public interface E8PlatformApi { * @return imageUrl 人脸图片地址 */ String uploadFace(byte[] imageByte); + + //***************************************访客信息接口******************************************* + + /** + * 新增访客登记 + * + * @param req 入参 + * @return VisitorAddRes + */ + VisitorAddRes addVisitor(VisitorAddReq req); + + /** + * 获取访客二维码 + * + * @param ids 访客ids + * @return VisitorAddRes + */ + VisitorAddRes getVisitorQrCode(List ids); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/custom/res/CustomFindRes.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/custom/res/CustomFindRes.java index 3bf23398..d49ebb59 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/custom/res/CustomFindRes.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/custom/res/CustomFindRes.java @@ -2,9 +2,6 @@ package org.dromara.sis.sdk.e8.domain.custom.res; import lombok.Data; -import org.dromara.sis.sdk.e8.domain.enums.AreaTypeEnum; -import org.dromara.sis.sdk.e8.domain.enums.UserTypeEnum; - import java.util.List; /** @@ -467,16 +464,6 @@ public class CustomFindRes { */ private String areaName; - /** - * 用户类型 - */ - private UserTypeEnum userType; - - /** - * 区域类型 - */ - private AreaTypeEnum areaType; - /** * 区域类型描述 */ diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/enums/AreaTypeEnum.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/enums/AreaTypeEnum.java deleted file mode 100644 index 97d9ee0d..00000000 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/enums/AreaTypeEnum.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.dromara.sis.sdk.e8.domain.enums; - -/** - * @author lsm - * @apiNote AreaTypeEnum - * @since 2025/5/26 21:22 - */ -public enum AreaTypeEnum { - // 枚举值,括号中是对应的编号和描述 - REGION(0, "区域"), - BUILDING(1, "楼栋"), - HOUSE(2, "房屋"), - DOOR(3, "门"), - FLOOR(4, "楼层"); - - // 定义私有变量,用于存储编号和描述 - private final int code; - private final String description; - - // 构造方法,用于初始化每个枚举值的编号和描述 - AreaTypeEnum(int code, String description) { - this.code = code; - this.description = description; - } - - // 获取编号的方法 - public int getCode() { - return code; - } - - // 获取描述的方法 - public String getDescription() { - return description; - } - - // 根据编号获取对应的枚举值 - public static AreaTypeEnum getByCode(int code) { - for (AreaTypeEnum areaType : AreaTypeEnum.values()) { - if (areaType.getCode() == code) { - return areaType; - } - } - return null; // 如果没有找到匹配的编号,返回 null - } -} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/enums/UserTypeEnum.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/enums/UserTypeEnum.java deleted file mode 100644 index 747ebb87..00000000 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/enums/UserTypeEnum.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.dromara.sis.sdk.e8.domain.enums; - -/** - * @author zcxlsm - * @apiNote UserEnumType - * @since 2025/5/26 21:16 - */ -public enum UserTypeEnum { - // 枚举值,括号中是对应的编号和描述 - OWNER(0, "业主"), - FAMILY_MEMBER(1, "家属"), - TENANT(2, "租客"), - EMPLOYEE(3, "员工"), - BUSINESS_OWNER(4, "企业主"), - STAFF(11, "职员"), - TEMPORARY_PERSONNEL(12, "临时人员"), - HOUSEHOLD_HEAD(13, "户主"), - EXTERNAL_PERSONNEL(14, "外部人员"), - OTHER_PERSONNEL(100, "其他人员"); - - // 定义私有变量,用于存储编号和描述 - private final int code; - private final String description; - - // 构造方法,用于初始化每个枚举值的编号和描述 - UserTypeEnum(int code, String description) { - this.code = code; - this.description = description; - } - - // 获取编号的方法 - public int getCode() { - return code; - } - - // 获取描述的方法 - public String getDescription() { - return description; - } - - // 根据编号获取对应的枚举值 - public static UserTypeEnum getByCode(int code) { - for (UserTypeEnum userType : UserTypeEnum.values()) { - if (userType.getCode() == code) { - return userType; - } - } - return null; // 如果没有找到匹配的编号,返回 null - } -} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/req/VisitorAddReq.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/req/VisitorAddReq.java new file mode 100644 index 00000000..b31020f2 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/req/VisitorAddReq.java @@ -0,0 +1,47 @@ +package org.dromara.sis.sdk.e8.domain.visitors.req; + +import lombok.Data; + +/** + * @author lsm + * @apiNote VisitorAddReq + * @since 2025/8/12 + */ +@Data +public class VisitorAddReq { + + /** + * 访客名称 + */ + private String visitorName; + + /** + * 手机号码 + */ + private String mobilePhone; + + /** + * 被访人手机号 + */ + private String intervieweeMobile; + + /** + * 授权开始时间 + */ + private String visitorStartTime; + + /** + * 授权结束时间 + */ + private String vistorEndTime; + + /** + * 访客登记类型 0:登记 1:邀请 2:预约 + */ + private Integer visitorRegisterType = 1; + + /** + * 访客登记来源 0:E8平台 1:访客机 2:小程序 + */ + private Integer reservedField1 = 0; +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/res/VisitorAddRes.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/res/VisitorAddRes.java new file mode 100644 index 00000000..2373dd54 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/domain/visitors/res/VisitorAddRes.java @@ -0,0 +1,52 @@ +package org.dromara.sis.sdk.e8.domain.visitors.res; + +import lombok.Data; + +/** + * @author lsm + * @apiNote VisitorAddRes + * @since 2025/8/12 + */ +@Data +public class VisitorAddRes { + + /** + * 主键ID + */ + private Long id; + + /** + * 访客Id + */ + private Long visitorId; + + /** + * 访客编号 + */ + private String visitorNo; + + /** + * 访客姓名 + */ + private String visitorName; + + /** + * 被访人 + */ + private String intervieweeName; + + /** + * 授权门名称(多个以;分隔) 用于打印二维码显示用 + */ + private String itemNames; + + /** + * 授权门名称(多个以;分隔) 用于打印二维码显示用 + */ + private String areaNames; + + /** + * 二维码加密字符串 + */ + private String qrCodeStr; +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/service/E8PlatformApiService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/service/E8PlatformApiService.java index 2b9249e0..6a0096ee 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/service/E8PlatformApiService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/service/E8PlatformApiService.java @@ -3,8 +3,6 @@ package org.dromara.sis.sdk.e8.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.TypeReference; import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -32,6 +30,8 @@ import org.dromara.sis.sdk.e8.domain.lift.req.LiftAddReq; import org.dromara.sis.sdk.e8.domain.lift.req.LiftFindReq; import org.dromara.sis.sdk.e8.domain.lift.req.LiftUpdateReq; import org.dromara.sis.sdk.e8.domain.lift.res.LiftFindRes; +import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq; +import org.dromara.sis.sdk.e8.domain.visitors.res.VisitorAddRes; import org.dromara.sis.sdk.e8.domain.voucher.req.ChangeCardReq; import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq; import org.dromara.sis.sdk.e8.domain.voucher.req.OperateVoucherReq; @@ -94,7 +94,7 @@ public class E8PlatformApiService implements E8PlatformApi { * @return IPage */ @Override - public IPage findCustomerList(QueryDto dto) { + public TableDataInfo findCustomerList(QueryDto dto) { // 创建参数映射,用于存储HTTP请求的参数 Map params = new HashMap<>(); // 添加分页参数:当前页码和最大结果数量 @@ -117,14 +117,14 @@ public class E8PlatformApiService implements E8PlatformApi { Map result = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), new TypeReference<>() { }, false); // 创建一个分页对象,用于存储客户信息列表和分页数据 - IPage pageInfo = new Page<>(dto.getPageIndex(), dto.getMaxResultCount()); + TableDataInfo tableDataInfo = new TableDataInfo<>(); // 设置总记录数 - pageInfo.setTotal(Long.parseLong(result.get("total").toString())); + tableDataInfo.setTotal(Long.parseLong(result.get("total").toString())); // 将API响应结果中的客户信息列表转换为CustomFindRes对象列表,并设置到分页对象中 - pageInfo.setRecords(JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), CustomFindRes.class)); + tableDataInfo.setRows(JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), CustomFindRes.class)); // 返回分页对象 - return pageInfo; + return tableDataInfo; } /** @@ -494,10 +494,10 @@ public class E8PlatformApiService implements E8PlatformApi { * 电梯信息分页查询 * * @param dto 传参 - * @return IPage + * @return TableDataInfo */ @Override - public IPage getPageList(QueryDto dto) { + public TableDataInfo getPageList(QueryDto dto) { // 创建一个参数映射,用于存储API请求所需的参数 Map params = new HashMap<>(); // 将分页索引和最大结果数放入参数映射中 @@ -517,14 +517,14 @@ public class E8PlatformApiService implements E8PlatformApi { Map result = JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), new TypeReference<>() { }, false); // 创建一个分页对象,传入分页索引和最大结果数 - IPage page = new Page<>(dto.getPageIndex(), dto.getMaxResultCount()); + TableDataInfo tableDataInfo = new TableDataInfo<>(); // 设置分页对象的总记录数 - page.setTotal(Long.parseLong(result.get("total").toString())); + tableDataInfo.setTotal(Long.parseLong(result.get("total").toString())); // 将结果中的项转换为LiftFindRes列表,并设置为分页对象的记录 - page.setRecords(JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), LiftFindRes.class)); + tableDataInfo.setRows(JSONUtil.toList(JSONUtil.toJsonStr(result.get("item")), LiftFindRes.class)); // 返回填充了数据的分页对象 - return page; + return tableDataInfo; } /** @@ -694,4 +694,59 @@ public class E8PlatformApiService implements E8PlatformApi { return apiResp.getMessage(); } + + //***************************************电梯信息接口******************************************* + private static final String VISITOR_CREATE = "/api/E8Door/visitor-registration"; + private static final String VISITOR_QRCODE = "/api/E8Door/visitor-registration/get-visitor-print-content"; + + /** + * 新增访客登记 + * + * @param req 入参 + * @return VisitorAddRes + */ + @Override + public VisitorAddRes addVisitor(VisitorAddReq req) { + // 将添加请求对象转换为Map对象,以便后续API调用 + Map params = BeanUtil.beanToMap(req); + + // 执行客户创建API调用,并获取API响应对象 + ApiResp apiResp = e8ApiUtil.doPost(params, VISITOR_CREATE); + + // 检查API调用是否成功 + if (!apiResp.getSuccess()) { + log.error("E8新增访客信息失败 errorMsg:{}", apiResp); + // 如果API调用失败,返回null + return null; + } + + // 返回API调用是否成功的标志 + return JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), VisitorAddRes.class); + } + + /** + * 获取访客二维码 + * + * @param ids 访客ids + * @return String + */ + @Override + public VisitorAddRes getVisitorQrCode(List ids) { + Map params = new HashMap<>(); + params.put("ids", ids); + + // 执行客户创建API调用,并获取API响应对象 + ApiResp apiResp = e8ApiUtil.doPost(params, VISITOR_QRCODE); + + // 检查API调用是否成功 + if (!apiResp.getSuccess()) { + log.error("E8获取访客二维码失败 errorMsg:{}", apiResp); + // 如果API调用失败,返回null + return null; + } + + // 返回API调用是否成功的标志 + return JSONUtil.toList(JSONUtil.toJsonStr(apiResp.getResult()), VisitorAddRes.class).get(0); + + } } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/utils/E8ApiUtil.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/utils/E8ApiUtil.java index 73f3eda7..db9732fc 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/utils/E8ApiUtil.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/e8/utils/E8ApiUtil.java @@ -1,5 +1,6 @@ package org.dromara.sis.sdk.e8.utils; +import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; @@ -58,10 +59,8 @@ public class E8ApiUtil { jsonBody = JSONUtil.toJsonStr(params); } - // url String url = BASE_URL + api; - // 对请求体进行Base64加密,指定UTF-8编码,避免乱码 String base64Body = Base64.getEncoder().encodeToString(jsonBody.getBytes(StandardCharsets.UTF_8)); @@ -156,8 +155,14 @@ public class E8ApiUtil { */ public String getPostSign(Map params, String api, String timestamp) { String url = BASE_URL + api; + // one&two - String paramsUrl = buildUrlWithParams(url, params) + "×tamp=" + timestamp; + String paramsUrl; + if (StrUtil.equals(url, buildUrlWithParams(url, params))){ + paramsUrl = url + "timestamp=" + timestamp; + }else { + paramsUrl = buildUrlWithParams(url, params) + "×tamp=" + timestamp; + } // three String upperUrl = paramsUrl.toUpperCase(); // four diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java index d5af0418..f5996122 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/hik/calback/HikAlarmCallBack.java @@ -280,10 +280,9 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { buffers1.get(bigImg); //设备ip String sAlarmInfo = new String(pAlarmer.sDeviceIP).trim(); - log.info("海康设备告警信息上传,设备={}, 人脸图片大小={}, 背景图片大小={}", sAlarmInfo, smallImg.length, bigImg.length); - SisDeviceManage device = sisDeviceManageService.queryByDeviceIp(sAlarmInfo); if (!device.getIsComparison()) { + log.info("海康设备告警信息上传,设备={}, 人脸图片大小={}, 背景图片大小={}", sAlarmInfo, smallImg.length, bigImg.length); zeroSensationPassageService.pass(sAlarmInfo, smallImg, bigImg); } } @@ -321,7 +320,7 @@ public class HikAlarmCallBack implements HCNetSDK.FMSGCallBack_V31 { log.info("比对结果:{},相似度:{},人员:{},id:{}", compareResults, similarity, name, pid); log.info("处理前置人脸比对结果,耗时:{}", interval.interval()); - zeroSensationPassageService.handleEleOut(new String(pAlarmer.sDeviceIP).trim(), interval); + zeroSensationPassageService.handleEleOut(new String(pAlarmer.sDeviceIP).trim()); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/smartDevices/utils/ElevatorControlTcpUtil.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/smartDevices/utils/ElevatorControlTcpUtil.java index aa6d4669..fab86d84 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/smartDevices/utils/ElevatorControlTcpUtil.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/sdk/smartDevices/utils/ElevatorControlTcpUtil.java @@ -37,7 +37,7 @@ public class ElevatorControlTcpUtil { /** * -- SETTER -- - * 设置连接状态监听器 + * 设置连接状态监听器 */ // 连接状态监听器 @Setter @@ -203,7 +203,6 @@ public class ElevatorControlTcpUtil { // 设置100ms超时 clientSocket.setSoTimeout(100); - byte[] response = new byte[FRAME_LENGTH]; int bytesRead = 0; while (bytesRead < FRAME_LENGTH) { @@ -266,17 +265,25 @@ public class ElevatorControlTcpUtil { } private byte[] buildFrame(byte command, byte[] floorData) { - byte[] frame = new byte[FRAME_LENGTH]; + if (floorData.length != 7) { + throw new IllegalArgumentException("楼层数据必须为7字节"); + } + + byte[] frame = new byte[10]; // 10字节帧 + // 帧头 frame[0] = command; + // 地址 frame[1] = FIXED_ADDRESS; + // 数据部分(7字节) System.arraycopy(floorData, 0, frame, 2, 7); + // 计算校验和(从帧头到数据结束) byte checksum = 0; - for (int i = 0; i < 9; i++) { + for (int i = 0; i < 9; i++) { // 前9字节求和 checksum = (byte) (checksum + frame[i]); } + // 帧尾(校验和) frame[9] = checksum; - return frame; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IZeroSensationPassageService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IZeroSensationPassageService.java index 6804948d..d5c5e353 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IZeroSensationPassageService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IZeroSensationPassageService.java @@ -18,6 +18,6 @@ public interface IZeroSensationPassageService { * * @param deviceIp 设备ip */ - void handleEleOut(String deviceIp, TimeInterval interval); + void handleEleOut(String deviceIp); } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java index d8178ef2..def0feb6 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisPersonLibImgServiceImpl.java @@ -13,7 +13,6 @@ 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.sis.domain.SisPersonLibImg; -import org.dromara.sis.domain.bo.SisLibImgRefBo; import org.dromara.sis.domain.bo.SisPersonLibImgBo; import org.dromara.sis.domain.vo.*; import org.dromara.sis.mapper.SisPersonLibImgMapper; @@ -38,7 +37,6 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { private final SisPersonLibImgMapper baseMapper; private final HuaWeiBoxApi huaWeiBoxApi; - private final ISisLibImgRefService sisLibImgRefService; @DubboReference private RemoteFileService remoteFileService; @@ -51,15 +49,7 @@ public class SisPersonLibImgServiceImpl implements ISisPersonLibImgService { */ @Override public SisPersonLibImgVo queryById(Long id) { - SisLibImgRefBo refBo = new SisLibImgRefBo(); - refBo.setImgId(id); - List refs = sisLibImgRefService.queryList(refBo); - Collection refIds = refs.stream().map(SisLibImgRefVo::getId).toList(); - - SisPersonLibImgVo vo = new SisPersonLibImgVo(); - vo.setLibIds(refIds); - - return vo; + return baseMapper.selectVoById(id); } /** diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java index ccad1e28..35ed4b3d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.sis.service.impl; +import cn.dev33.satoken.context.mock.SaTokenContextMockUtil; import cn.hutool.core.codec.Base64Encoder; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; @@ -10,7 +11,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.property.api.RemoteFloorService; import org.dromara.property.api.domain.vo.RemoteFloorVo; -import org.dromara.sis.domain.SisElevatorFloorChannelRef; import org.dromara.sis.domain.enums.ControlTypeEnum; import org.dromara.sis.domain.enums.RosterTypeEnum; import org.dromara.sis.domain.vo.*; @@ -121,7 +121,7 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer } else if (item.getControlType().equals(ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode())) { // 电梯外面面板权限 handleEle(item.getBindId(), r.getAuthGroupId(), ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode(), item.getDeviceFloorId()); } else if (item.getControlType().equals(ControlTypeEnum.ELEVATOR_IN_CONTROL.getCode())) { // 电梯里面的面板 - handleEle(item.getBindId(), r.getAuthGroupId(), ControlTypeEnum.ELEVATOR_IN_CONTROL.getCode(), item.getDeviceFloorId()); + handleEle(item.getBindId(), r.getAuthGroupId(), ControlTypeEnum.ELEVATOR_IN_CONTROL.getCode(), 0L); } else { log.info("设备绑定了未知的控制类型[{}],不处理", item.getControlType()); } @@ -135,7 +135,8 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer * @param deviceIp 设备ip */ @Override - public void handleEleOut(String deviceIp, TimeInterval interval) { + public void handleEleOut(String deviceIp) { + TimeInterval interval = new TimeInterval(); // 获取当前设备的绑定设备信息 List bindRefList = deviceBindRefService.queryByDeviceIp(deviceIp); List outRefList = bindRefList.stream().filter(item -> Objects.equals(item.getControlType(), ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode())).toList(); @@ -193,17 +194,20 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer // 获取当前电梯信息 SisElevatorInfoVo ele = elevatorInfoService.queryById(deviceId); + // 当前电梯不允许控制 + if (!ele.getIsControl()) return; + // 获取权限组下电梯⇄楼层关联信息 List groupRef = elevatorFloorRefService.queryByAuthGroupId(groupId); - if (ObjectUtil.isEmpty(groupRef)) return; + if (CollUtil.isEmpty(groupRef)) return; // 取出当前电梯的楼层授权信息 List eleRef = groupRef.stream().filter(o -> Objects.equals(o.getElevatorId(), deviceId)).toList(); if (ObjectUtil.isEmpty(eleRef)) return; - if (Objects.equals(controlType, ControlTypeEnum.ELEVATOR_IN_CONTROL.getCode())) { - log.info("开始下发里面版梯控权限...."); + if (Objects.equals(controlType, ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode())) { + log.info("开始下发外部面板梯控权限...."); for (SisElevatorFloorRefVo ref : eleRef) { if (ref.getUpChannel() != null && Objects.equals(ref.getFloorId(), deviceFloorId)) { HikApiService.getInstance().controlGateway(ele.getControlIp(), ref.getUpChannel().intValue(), 2); @@ -213,14 +217,14 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer HikApiService.getInstance().controlGateway(ele.getControlIp(), ref.getDownChannel().intValue(), 2); } } + cleanLiftAuthRocketProducer.sendMessage(deviceId, groupId, deviceFloorId, "清除电梯" + deviceId + "梯控权限", 3); } - - // 获取当前电梯所在建筑的楼层 - List floorList = remoteFloorService.queryByBuildingId(ele.getBuildingId()); + // 模拟上下文 + List floorList = SaTokenContextMockUtil.setMockContext(() -> remoteFloorService.queryByBuildingId(ele.getBuildingId())); if (CollUtil.isEmpty(floorList)) return; - if (Objects.equals(controlType, ControlTypeEnum.ELEVATOR_OUT_CONTROL.getCode())) { + if (Objects.equals(controlType, ControlTypeEnum.ELEVATOR_IN_CONTROL.getCode())) { SisElevatorFloorRefVo vo; List num = new ArrayList<>(); for (int i = 1; i < floorList.size(); i++) { @@ -234,14 +238,8 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer } if (CollUtil.isEmpty(num)) return; - if (!ElevatorControlTcpUtil.getInstance().isClientConnected()) { - log.info("梯控模块未连接,请检查梯控模块是否启动"); - return; - } ElevatorControlTcpUtil.getInstance().sendManualCommand(num); } log.info("梯控下发权限完成"); - - cleanLiftAuthRocketProducer.sendMessage(deviceId, groupId, deviceFloorId, "清除电梯" + deviceId + "梯控权限", 3); } } diff --git a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml index d1febb83..18e1986a 100644 --- a/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml +++ b/ruoyi-modules/Sis/src/main/resources/mapper/sis/SisAuthRecordMapper.xml @@ -11,6 +11,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LEFT JOIN sis_auth_record c ON c.target_id = b.id AND c.group_id = b.auth_group_id - WHERE a.remote_img_id = #{personId}; + WHERE a.remote_hw_id = #{personId}; From e73d6abf6296bb3bb8b9913875f2044e353de55c Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Wed, 13 Aug 2025 10:21:58 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=B7=A5?= =?UTF-8?q?=E5=8D=95bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mobile/MInspectionPointController.java | 47 +++++++ .../property/domain/ServiceWorkOrders.java | 2 - .../property/domain/bo/CostItemsBo.java | 4 +- .../domain/enums/MeetAttachStatusEnum.java | 4 +- .../property/domain/enums/MeetStatusEnum.java | 2 +- .../domain/enums/WorkOrderStatusEnum.java | 33 +++++ .../impl/CostCarChargeServiceImpl.java | 2 + .../service/impl/CostItemsServiceImpl.java | 1 + .../impl/MachineMaintainPlanServiceImpl.java | 19 +-- .../property/tasks/InspectionTasks.java | 2 + .../dromara/property/tasks/MachineTasks.java | 3 + .../property/tasks/ServiceWorkOrderTasks.java | 126 +++++++++++++++++- 12 files changed, 224 insertions(+), 21 deletions(-) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionPointController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/WorkOrderStatusEnum.java diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionPointController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionPointController.java new file mode 100644 index 00000000..def57270 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/mobile/MInspectionPointController.java @@ -0,0 +1,47 @@ +package org.dromara.property.controller.mobile; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.property.domain.bo.InspectionPointBo; +import org.dromara.property.domain.vo.InspectionPointVo; +import org.dromara.property.service.IInspectionPointService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 巡检点 + * 前端访问路由地址为:/property/point + * + * @author mocheng + * @date 2025-07-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/mobile/point") +public class MInspectionPointController extends BaseController { + + private final IInspectionPointService inspectionPointService; + /** + * 扫码签到 + */ + @PostMapping() + public R edit(@Validated(EditGroup.class) @RequestBody InspectionPointBo bo) { + return toAjax(inspectionPointService.updateByBo(bo)); + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java index de379feb..99a7d889 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/ServiceWorkOrders.java @@ -1,6 +1,4 @@ package org.dromara.property.domain; - -import cn.idev.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostItemsBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostItemsBo.java index 38980488..4cde0894 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostItemsBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostItemsBo.java @@ -97,7 +97,9 @@ public class CostItemsBo extends BaseEntity { /** * 计费单价 */ - @NotBlank(message = "计费单价", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "计费单价不能为空", groups = { AddGroup.class, EditGroup.class }) + @DecimalMin(value = "0.00", inclusive = false, message = "计费单价必须大于0") + @ExcelProperty("计费单价") private BigDecimal unitPrice; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/MeetAttachStatusEnum.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/MeetAttachStatusEnum.java index 925bd048..1c4c6734 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/MeetAttachStatusEnum.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/MeetAttachStatusEnum.java @@ -7,11 +7,11 @@ package org.dromara.property.domain.enums; **/ public enum MeetAttachStatusEnum { /** - * 待确认 + * 上架 */ ENAABLE("上架", "0"), /** - * 待提货 + * 下架 */ DEACTIVATE("下架", "1"); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/MeetStatusEnum.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/MeetStatusEnum.java index 9fc74f3d..c7ddacf5 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/MeetStatusEnum.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/MeetStatusEnum.java @@ -3,7 +3,7 @@ package org.dromara.property.domain.enums; /** * @Author:yuyongle * @Date:2025/7/4 10:35 - * @Description: + * @Description:会议室状态枚举 **/ public enum MeetStatusEnum { /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/WorkOrderStatusEnum.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/WorkOrderStatusEnum.java new file mode 100644 index 00000000..40966af6 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/enums/WorkOrderStatusEnum.java @@ -0,0 +1,33 @@ +package org.dromara.property.domain.enums; + +/** + * @Author:yuyongle + * @Date:2025/8/11 10:59 + * @Description:工单状态枚举 + **/ +public enum WorkOrderStatusEnum { + + CREATE_ORDER("创建工单", "0"), + DISPATCHED("已派单", "1"), + ROB_ORDER("已抢单", "2"), + IN_HAND("处理中", "3"), + DONE("已完成", "4"), + ABANDON("已废弃", "5"); + + + private final String name; + private final String value; + + WorkOrderStatusEnum(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return this.name; + } + + public String getValue() { + return this.value; + } +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java index 5797df16..05dbd42c 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java @@ -99,9 +99,11 @@ public class CostCarChargeServiceImpl implements ICostCarChargeService { lqw.eq(bo.getFloorId() != null, CostCarCharge::getFloorId, bo.getFloorId()); lqw.eq(StringUtils.isNotBlank(bo.getLocation()), CostCarCharge::getLocation, bo.getLocation()); lqw.eq(StringUtils.isNotBlank(bo.getState()), CostCarCharge::getState, bo.getState()); + lqw.eq(StringUtils.isNotBlank(bo.getChargeStatus()), CostCarCharge::getChargeStatus, bo.getChargeStatus()); lqw.eq(bo.getCostItemsId() != null, CostCarCharge::getCostItemsId, bo.getCostItemsId()); lqw.eq(bo.getStarTime() != null, CostCarCharge::getStarTime, bo.getStarTime()); lqw.eq(bo.getEndTime() != null, CostCarCharge::getEndTime, bo.getEndTime()); + lqw.eq(StringUtils.isNotBlank(bo.getState()), CostCarCharge::getState, bo.getState()); lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), CostCarCharge::getSearchValue, bo.getSearchValue()); return lqw; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostItemsServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostItemsServiceImpl.java index 8cf98820..20a614dc 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostItemsServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostItemsServiceImpl.java @@ -78,6 +78,7 @@ public class CostItemsServiceImpl implements ICostItemsService { lqw.orderByAsc(CostItems::getId); lqw.eq(StringUtils.isNotBlank(bo.getCostType()), CostItems::getCostType, bo.getCostType()); lqw.eq(StringUtils.isNotBlank(bo.getChargeItem()), CostItems::getChargeItem, bo.getChargeItem()); + lqw.eq(StringUtils.isNotBlank(bo.getChargeNo()), CostItems::getChargeNo, bo.getChargeNo()); lqw.eq(StringUtils.isNotBlank(bo.getCostMark()), CostItems::getCostMark, bo.getCostMark()); lqw.eq(StringUtils.isNotBlank(bo.getPaymentType()), CostItems::getPaymentType, bo.getPaymentType()); lqw.eq(bo.getChargeCycle() != null, CostItems::getChargeCycle, bo.getChargeCycle()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainPlanServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainPlanServiceImpl.java index f58714aa..94bb107d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainPlanServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainPlanServiceImpl.java @@ -178,15 +178,16 @@ public class MachineMaintainPlanServiceImpl implements IMachineMaintainPlanServi */ private void validEntityBeforebo(Long id, MachineMaintainPlanBo bo) { //TODO 做一些数据校验,如唯一约束 - Assert.isTrue(CollUtil.isNotEmpty(bo.getMachineMaintainPlanStaffBoList()), "巡检人员不存在"); - QueryWrapper staffLambdaQueryWrapper = new QueryWrapper<>(); - staffLambdaQueryWrapper.eq("maintain_plan_id", id); - machineMaintainPlanStaffMapper.delete(staffLambdaQueryWrapper); - List machineMaintainPlanStaffBoList = bo.getMachineMaintainPlanStaffBoList(); - machineMaintainPlanStaffBoList.stream().forEach(s->{ - s.setMaintainPlanId(id); - }); - machineMaintainPlanStaffMapper.insertBatch(BeanUtil.copyToList(machineMaintainPlanStaffBoList, MachineMaintainPlanStaff.class)); + if(CollUtil.isNotEmpty(bo.getMachineMaintainPlanStaffBoList())){ + QueryWrapper staffLambdaQueryWrapper = new QueryWrapper<>(); + staffLambdaQueryWrapper.eq("maintain_plan_id", id); + machineMaintainPlanStaffMapper.delete(staffLambdaQueryWrapper); + List machineMaintainPlanStaffBoList = bo.getMachineMaintainPlanStaffBoList(); + machineMaintainPlanStaffBoList.stream().forEach(s->{ + s.setMaintainPlanId(id); + }); + machineMaintainPlanStaffMapper.insertBatch(BeanUtil.copyToList(machineMaintainPlanStaffBoList, MachineMaintainPlanStaff.class)); + } } /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java index ebd3d47c..a15a866d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/InspectionTasks.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil; 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.property.domain.InspectionPlanStaff; import org.dromara.property.domain.InspectionTask; import org.dromara.property.domain.bo.InspectionPlanBo; @@ -41,6 +42,7 @@ import static org.dromara.common.mybatis.core.mapper.BaseMapperPlus.log; * @Date:2025/7/11 15:28 * @Description: 巡检任务定时处理器 **/ +@Slf4j @Component @RequiredArgsConstructor //@Validated diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/MachineTasks.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/MachineTasks.java index af701d25..c3f8b73f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/MachineTasks.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/MachineTasks.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.RandomUtil; 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.property.domain.MachineMaintainPlanStaff; import org.dromara.property.domain.MachineMaintainTask; import org.dromara.property.domain.bo.MachineMaintainPlanBo; @@ -42,6 +43,7 @@ import static org.dromara.common.mybatis.core.mapper.BaseMapperPlus.log; * @Date:2025/7/17 09:25 * @Description: **/ +@Slf4j @Component @RequiredArgsConstructor //@Validated @@ -64,6 +66,7 @@ public class MachineTasks { List machineMaintainPlanVoList = machineMaintainPlanService.queryList(machineMaintainPlanBo); // 如果没有有效计划,直接返回 if (ObjectUtil.isEmpty(machineMaintainPlanVoList)) { + log.info("暂时没有有效的计划"); return; } machineMaintainPlanVoList.stream().forEach(plan->{ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/ServiceWorkOrderTasks.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/ServiceWorkOrderTasks.java index a0ad8082..20b673ef 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/ServiceWorkOrderTasks.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/tasks/ServiceWorkOrderTasks.java @@ -2,17 +2,31 @@ package org.dromara.property.tasks; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.AttendanceUserGroup; import org.dromara.property.domain.ServiceWorkOrders; +import org.dromara.property.domain.ServiceWorkOrdersRecord; +import org.dromara.property.domain.enums.WorkOrderStatusEnum; +import org.dromara.property.mapper.AttendanceUserGroupMapper; import org.dromara.property.mapper.ServiceWorkOrdersMapper; +import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.time.LocalDate; +import java.util.Date; import java.util.List; - -import org.dromara.common.log.annotation.Log; +import org.springframework.transaction.annotation.Transactional; +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; /** * @Author:yuyongle @@ -20,23 +34,123 @@ import org.dromara.common.log.annotation.Log; * @Description:自动派单 **/ @Slf4j -@Component +//@Component +//@RequiredArgsConstructor + @RequiredArgsConstructor +@RestController +@RequestMapping("/serviceWorkOrderTasks") public class ServiceWorkOrderTasks { private ServiceWorkOrdersMapper workOrdersMapper; + private ServiceWorkOrdersRecordMapper workOrdersRecordMapper; + private AttendanceUserGroupMapper attendanceUserGroupMapper; - //查询状态为创建工单的工单 + /** + * 查询状态为创建工单的工单,查询当天排班人员,为工单自动派单 + */ +// @Transactional(rollbackFor = Exception.class) +// @Scheduled(cron = "0 0 */1 * * ?") + @GetMapping("/serviceWorkOrderTaskId") private void handleServiceWorkOrder() { List serviceWorkOrderList = workOrdersMapper.selectList( new LambdaQueryWrapper() - .eq(ServiceWorkOrders::getStatus, "0")); + .eq(ServiceWorkOrders::getStatus, WorkOrderStatusEnum.CREATE_ORDER.getValue())); if(CollUtil.isNotEmpty(serviceWorkOrderList)){ serviceWorkOrderList.stream().forEach(s->{ - + //查询今天上班的人员 + LocalDate today = LocalDate.now(); + List attendanceUserGroups = attendanceUserGroupMapper.selectList( + new LambdaQueryWrapper() + .eq(AttendanceUserGroup::getStartDate, today) + ); + if(CollUtil.isNotEmpty(attendanceUserGroups)){ + attendanceUserGroups.stream().forEach(s1->{ + ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord(); + serviceWorkOrdersRecord.setOrderId(s.getId()); + serviceWorkOrdersRecord.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue()); + serviceWorkOrdersRecord.setHandler(s1.getEmployeeId()); + workOrdersRecordMapper.insert(serviceWorkOrdersRecord); + s.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue()); + s.setHandler(s1.getEmployeeId()); + workOrdersMapper.updateById(s); + log.info("派单工单号为:{}",s.getOrderNo()); + log.info("处理人为:{}",s1.getEmployeeId()); + }); + }else { + log.info("当天无排班人员"); + } }); }else { log.info("派单工单为:{}",serviceWorkOrderList.size()); } + } + /** + * 处理超过30分钟的工单 + */ +// @Transactional(rollbackFor = Exception.class) +// @Scheduled(cron = "0 0 */1 * * ?") + @GetMapping("/thirtyWorkOrderTaskId") + private void thirtyHandleServiceWorkOrder() { + // 1. 查询当前状态为“已派单”的工单 + List serviceWorkOrderList = workOrdersMapper.selectList( + new LambdaQueryWrapper() + .eq(ServiceWorkOrders::getStatus, WorkOrderStatusEnum.DISPATCHED.getValue()) + ); + LocalDate today = LocalDate.now(); + // 2. 查询今天有排班的人员 + List attendanceUserGroups = attendanceUserGroupMapper.selectList( + new LambdaQueryWrapper() + .eq(AttendanceUserGroup::getStartDate, today) + ); + if (CollUtil.isEmpty(serviceWorkOrderList) || CollUtil.isEmpty(attendanceUserGroups)) { + log.info("当前无可处理的超时工单或今日无排班人员"); + return; + } + Date now = new Date(); + // 3. 遍历超时工单 + serviceWorkOrderList.forEach(workOrder -> { + // 查询该工单的最新记录(可能有多条记录) + ServiceWorkOrdersRecord latestRecord = workOrdersRecordMapper.selectOne( + new LambdaQueryWrapper() + .eq(ServiceWorkOrdersRecord::getOrderId, workOrder.getId()) + .orderByDesc(ServiceWorkOrdersRecord::getCreateTime) + .last("LIMIT 1") // 获取最新一条记录 + ); + if (ObjectUtil.isEmpty(latestRecord) || latestRecord.getCreateTime() == null) { + return; + } + // 判断是否超过30分钟 + long minutesElapsed = DateUtil.between(latestRecord.getCreateTime(), now, DateUnit.MINUTE); + if (minutesElapsed <= 30) { + return; // 未超时,跳过 + } + // 4. 标记原记录为废弃 + latestRecord.setStatus(WorkOrderStatusEnum.ABANDON.getValue()); + workOrdersRecordMapper.updateById(latestRecord); + log.info("工单号:{} 的原记录已废弃,超时未处理", workOrder.getOrderNo()); + // 5. 重新派单给今天所有排班人员(排除原处理人?根据业务决定) + boolean hasNewDispatch = false; + for (AttendanceUserGroup group : attendanceUserGroups) { + Long employeeId = group.getEmployeeId(); + // 可选:避免重新派给原处理人 + if (employeeId.equals(latestRecord.getHandler())) { + log.debug("跳过原处理人:{}", employeeId); + continue; + } + // 创建新的派单记录 + ServiceWorkOrdersRecord newRecord = new ServiceWorkOrdersRecord(); + newRecord.setOrderId(workOrder.getId()); + newRecord.setHandler(employeeId); + newRecord.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue()); + newRecord.setCreateTime(now); + workOrdersRecordMapper.insert(newRecord); + log.info("工单号:{} 已重新派发给员工ID:{}", workOrder.getOrderNo(), employeeId); + // 6. 更新主工单状态(可选:若只保留最新记录状态,也可不更新主表) + workOrder.setStatus(WorkOrderStatusEnum.DISPATCHED.getValue()); // 仍为已派单 + workOrder.setHandler(employeeId); // 可清空,或设为最后一个人(根据业务) + workOrdersMapper.updateById(workOrder); + } + }); } } From 9dbccf93a83ce8dc4ff05fc98b39ce100727397a Mon Sep 17 00:00:00 2001 From: mocheng <3057647414@qq.com> Date: Wed, 13 Aug 2025 15:07:54 +0800 Subject: [PATCH 3/7] websocket --- .../websocket/handler/PlusWebSocketHandler.java | 1 + .../websocket/holder/WebSocketSessionHolder.java | 4 ++++ .../common/websocket/utils/WebSocketUtils.java | 1 + .../controller/TbVisitorManagementController.java | 14 +++++++++++--- .../impl/TbVisitorManagementServiceImpl.java | 1 + .../sis/controller/VideoAlarmController.java | 8 ++++++-- 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java index 557ed8eb..abb35061 100644 --- a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java +++ b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java @@ -35,6 +35,7 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler { } WebSocketSessionHolder.addSession(loginUser.getUserId(), session); log.info("[connect] sessionId: {},userId:{},userType:{}", session.getId(), loginUser.getUserId(), loginUser.getUserType()); + System.out.println(WebSocketSessionHolder.getSessions(loginUser.getUserId())); } /** diff --git a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/holder/WebSocketSessionHolder.java b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/holder/WebSocketSessionHolder.java index 9c2372b8..5d286dfa 100644 --- a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/holder/WebSocketSessionHolder.java +++ b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/holder/WebSocketSessionHolder.java @@ -26,8 +26,10 @@ public class WebSocketSessionHolder { * @param session 要添加的WebSocket会话 */ public static void addSession(Long sessionKey, WebSocketSession session) { + System.out.println(USER_SESSION_MAP); removeSession(sessionKey); USER_SESSION_MAP.put(sessionKey, session); + System.out.println(USER_SESSION_MAP); } /** @@ -36,6 +38,7 @@ public class WebSocketSessionHolder { * @param sessionKey 要移除的会话键 */ public static void removeSession(Long sessionKey) { + System.out.println(USER_SESSION_MAP); WebSocketSession session = USER_SESSION_MAP.remove(sessionKey); try { session.close(CloseStatus.BAD_DATA); @@ -50,6 +53,7 @@ public class WebSocketSessionHolder { * @return 与给定会话键对应的WebSocket会话,如果不存在则返回null */ public static WebSocketSession getSessions(Long sessionKey) { + System.out.println(USER_SESSION_MAP); return USER_SESSION_MAP.get(sessionKey); } diff --git a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java index 35320c6e..be9bfe6c 100644 --- a/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java +++ b/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java @@ -36,6 +36,7 @@ public class WebSocketUtils { */ public static void sendMessage(Long sessionKey, String message) { WebSocketSession session = WebSocketSessionHolder.getSessions(sessionKey); + sendMessage(session, message); } 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 f7edb234..42da562b 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 @@ -7,6 +7,7 @@ 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.*; @@ -14,6 +15,9 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.common.websocket.dto.WebSocketMessageDto; +import org.dromara.common.websocket.holder.WebSocketSessionHolder; +import org.dromara.common.websocket.utils.WebSocketUtils; import org.dromara.property.domain.bo.QrCodeInfo; import org.dromara.resource.api.RemoteMessageService; import org.dromara.system.api.RemoteConfigService; @@ -51,8 +55,6 @@ public class TbVisitorManagementController extends BaseController { @DubboReference private final RemoteConfigService remoteConfigService; - @DubboReference(stub = "true") - private final RemoteMessageService remoteMessageService; @@ -97,7 +99,13 @@ public class TbVisitorManagementController extends BaseController { JSONObject jsonObject = new JSONObject(); jsonObject.put("type","qrcode"); jsonObject.put("date",qrcode); - remoteMessageService.publishMessage(List.of(qrCodeInfo.getUserid()),jsonObject.toString()); + System.out.println(WebSocketSessionHolder.getSessions(1L)); + System.out.println(WebSocketSessionHolder.getSessionsAll()); + WebSocketMessageDto webSocketMessage = new WebSocketMessageDto(); + webSocketMessage.setMessage(jsonObject.toString()); + webSocketMessage.setSessionKeys(List.of(qrCodeInfo.getUserid())); + WebSocketUtils.publishMessage(webSocketMessage); +// WebSocketUtils.sendMessage(qrCodeInfo.getUserid(),jsonObject.toString()); return R.ok("二维码可用"); } 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 3accd7ed..63dd52d0 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 @@ -105,6 +105,7 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi @Override public Boolean insertByBo(TbVisitorManagementBo bo) { QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY +"Qrcode" + bo.getQrCodeId()); + RedisUtils.deleteKeys(GlobalConstants.CAPTCHA_CODE_KEY +"Qrcode" + bo.getQrCodeId()); TbVisitorManagement add = MapstructUtils.convert(bo, TbVisitorManagement.class); validEntityBeforeSave(add); add.setCreateById(info.getUserid()); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/VideoAlarmController.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/VideoAlarmController.java index 07bb40b2..54a1d276 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/VideoAlarmController.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/controller/VideoAlarmController.java @@ -2,12 +2,15 @@ package org.dromara.sis.controller; import com.alibaba.fastjson2.JSONObject; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.sis.sdk.unview.model.UvModel; import org.dromara.sis.sdk.unview.service.VideoAlarmService; import org.springframework.web.bind.annotation.*; +import java.io.IOException; + /** * 宇视告警书记上报 * @@ -32,8 +35,9 @@ public class VideoAlarmController { } @PostMapping("/huawei/callback") - public void huaweiAlarm(@RequestBody Object data) { - log.info("华为上报消息,msg={}", data); + public void huaweiAlarm(HttpServletRequest request) throws IOException { + int read = request.getInputStream().read(); + log.info("华为上报消息,msg={}", read); } From 89041e783bba444fcdb68b3bf0181db0f0cc1028 Mon Sep 17 00:00:00 2001 From: mocheng <3057647414@qq.com> Date: Wed, 13 Aug 2025 15:08:38 +0800 Subject: [PATCH 4/7] websocket --- ruoyi-modules/Property/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ruoyi-modules/Property/pom.xml b/ruoyi-modules/Property/pom.xml index 1436b359..a062fa82 100644 --- a/ruoyi-modules/Property/pom.xml +++ b/ruoyi-modules/Property/pom.xml @@ -126,6 +126,10 @@ 2.4.0 compile + + org.dromara + ruoyi-common-websocket + From 2ffeb25d82fd2053739f70df8c653307fb9d5b02 Mon Sep 17 00:00:00 2001 From: bichangxiong <3057647414@qq.com> Date: Wed, 13 Aug 2025 15:37:20 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20.gitea/workflows/dev.y?= =?UTF-8?q?ml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/dev.yml | 97 +++++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 41 deletions(-) diff --git a/.gitea/workflows/dev.yml b/.gitea/workflows/dev.yml index c0b66ecd..66f4c026 100644 --- a/.gitea/workflows/dev.yml +++ b/.gitea/workflows/dev.yml @@ -1,51 +1,66 @@ -name: Gitea Actions Demo -run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀 +name: Build and Push Microservices Images + on: push: - branches: [ master ] # 当main分支有推送时触发 + branches: + - [ master ] # 替换为要监听的分支 + jobs: - Explore-Gitea-Actions: + build-and-push: runs-on: ubuntu-latest + strategy: + matrix: + service: + - ruoyi-auth + - ruoyi-gateway + - ruoyi-modules/Property + - ruoyi-modules/ruoyi-gen + - ruoyi-modules/ruoyi-job + - ruoyi-modules/ruoyi-resource + - ruoyi-modules/ruoyi-system + - ruoyi-modules/ruoyi-workflow + - ruoyi-modules/Sis + - ruoyi-visual/ruoyi-monitor + - ruoyi-visual/ruoyi-nacos + - ruoyi-seata-server + - ruoyi-sentinel-dashboard + - ruoyi-snailjob-server steps: - - - name: Checkout code - uses: http://47.109.37.87:3000/bichangxiong/checkout@v4 # 使用 Gitea 镜像 + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Set Up JDK + uses: actions/setup-java@v3 with: - fetch-depth: 1 # 只拉取最新一次提交 - # - name: Checkout code - # uses: actions/checkout@v4 # 拉取代码到工作目录 - - name: Set up JDK 17 - uses: http://47.109.37.87:3000/bichangxiong/setup-java@v3 - with: - java-version: '17' + java-version: '11' # 按项目实际Java版本调整 distribution: 'temurin' - cache: maven - - name: Set up Maven - uses: stCarolas/setup-maven@v5 - with: - maven-version: 3.8.2 - - name: Install dependencies - run: mvn clean package -DskipTests -Dmaven.repo.local=/home/runner/maven-repo - - name: copy file via ssh password - uses: appleboy/scp-action@v0.1.7 - with: - host: 192.168.1.3 - username: root - password: by@2025! - port: 22 - source: "ruoyi-modules/Property/target/Property.jar,ruoyi-modules/Property/docker-compose.yml,ruoyi-modules/Property/Dockerfile" - target: "/project/runner/plus/" - - name: Deploy to server via SSH - uses: appleboy/ssh-action@v0.1.7 - with: - host: 192.168.1.3 - username: root - password: by@2025! - port: 22 - script: | - cd /project/runner/plus/ruoyi-modules/Property - docker-compose up -d --force-recreate + - name: Build Project with Maven + run: mvn clean package -DskipTests -f ./${{ matrix.service }}/pom.xml + - name: Set Up Docker Buildx + uses: docker/setup-buildx-action@v2 - - run: echo "🍏 This job's status is ${{ job.status }}." + - name: Login to Gitea Container Registry + uses: docker/login-action@v2 + with: + registry: ${{ secrets.REGISTRY_URL }} + username: ${{ secrets.REGISTRY_USER }} + password: ${{ secrets.REGISTRY_PASS }} + + - name: Determine Dockerfile Path + id: dockerfile-path + run: | + if [ "${{ matrix.service }}" = "ruoyi-visual/ruoyi-nacos" ]; then + echo "dockerfile_path=./ruoyi-visual/ruoyi-nacos/Dockerfile" >> $GITHUB_OUTPUT + else + echo "dockerfile_path=./${{ matrix.service }}/Dockerfile" >> $GITHUB_OUTPUT + fi + + - name: Build and Push Docker Image + uses: docker/build-push-action@v4 + with: + context: . + file: ${{ steps.dockerfile-path.outputs.dockerfile_path }} + tags: ${{ secrets.REGISTRY_URL }}/by2025/${{ matrix.service }}:${{ github.sha }} + push: true \ No newline at end of file From d005fec88c349d95ab09a324d331ef64d9da967c Mon Sep 17 00:00:00 2001 From: bichangxiong <3057647414@qq.com> Date: Wed, 13 Aug 2025 15:38:48 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20.gitea/workflows/dev.y?= =?UTF-8?q?ml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/dev.yml b/.gitea/workflows/dev.yml index 66f4c026..75df1c28 100644 --- a/.gitea/workflows/dev.yml +++ b/.gitea/workflows/dev.yml @@ -32,7 +32,7 @@ jobs: - name: Set Up JDK uses: actions/setup-java@v3 with: - java-version: '11' # 按项目实际Java版本调整 + java-version: '17' # 按项目实际Java版本调整 distribution: 'temurin' - name: Build Project with Maven From 65586d21a3eb1854b38d3d6ec335d9eedf9705db Mon Sep 17 00:00:00 2001 From: bichangxiong <3057647414@qq.com> Date: Wed, 13 Aug 2025 15:39:59 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20.gitea/workflows/dev.y?= =?UTF-8?q?ml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/dev.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/dev.yml b/.gitea/workflows/dev.yml index 75df1c28..0740af1b 100644 --- a/.gitea/workflows/dev.yml +++ b/.gitea/workflows/dev.yml @@ -3,7 +3,7 @@ name: Build and Push Microservices Images on: push: branches: - - [ master ] # 替换为要监听的分支 + - [main] # 替换为要监听的分支 jobs: build-and-push: