瀏覽代碼

接口修改

hxd 3 月之前
父節點
當前提交
f1f8f71a2e
共有 25 個文件被更改,包括 469 次插入124 次删除
  1. 6 0
      portal-service-application/src/main/java/com/hfln/portal/application/controller/wap/DeviceController.java
  2. 1 1
      portal-service-application/src/main/java/com/hfln/portal/application/controller/wap/GroupController.java
  3. 17 2
      portal-service-application/src/main/java/com/hfln/portal/application/controller/wap/ShareController.java
  4. 32 0
      portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebSystemController.java
  5. 1 27
      portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebUserController.java
  6. 1 1
      portal-service-common/src/main/java/com/hfln/portal/common/constant/mqtt/topic/TopicConstants.java
  7. 1 1
      portal-service-common/src/main/java/com/hfln/portal/common/dto/DevInfoImportDto.java
  8. 40 33
      portal-service-common/src/main/java/com/hfln/portal/common/dto/data/device/DeviceDTO.java
  9. 26 0
      portal-service-common/src/main/java/com/hfln/portal/common/dto/data/rolemenu/MenuSimpleTreeDTO.java
  10. 19 0
      portal-service-common/src/main/java/com/hfln/portal/common/dto/data/rolemenu/RoleMenuTreeDTO.java
  11. 40 18
      portal-service-common/src/main/java/com/hfln/portal/common/request/device/DeviceBandingParams.java
  12. 10 1
      portal-service-common/src/main/java/com/hfln/portal/common/request/share/ShareParam.java
  13. 26 0
      portal-service-common/src/main/java/com/hfln/portal/common/request/share/updateShareParam.java
  14. 2 0
      portal-service-domain/src/main/java/com/hfln/portal/domain/exception/ErrorEnum.java
  15. 6 2
      portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/DeviceGateway.java
  16. 3 0
      portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/WebGateway.java
  17. 108 2
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/DeviceGatewayImpl.java
  18. 44 4
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebGatewayImpl.java
  19. 12 7
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/mqtt/MqttSubHandle.java
  20. 22 16
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/po/DevInfo.java
  21. 15 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/po/DevShare.java
  22. 1 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/DevShareService.java
  23. 3 0
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/TblRoleMenuMapService.java
  24. 12 8
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/DevInfoServiceImpl.java
  25. 21 1
      portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/TblRoleMenuMapServiceImpl.java

+ 6 - 0
portal-service-application/src/main/java/com/hfln/portal/application/controller/wap/DeviceController.java

@@ -88,6 +88,12 @@ public class DeviceController {
     public ApiResult<WcTimesQueryRes> getWcTimes(@RequestParam("devId") Long devId, @RequestParam("time") String time) {
         return ApiResult.success(deviceGateway.getWcTimes(devId, time));
     }
+
+    @PostMapping("/transfer")
+    @Operation(summary = "设备转移")
+    public ApiResult<Boolean> deviceTransfer(@RequestParam("phone") String phone, @RequestParam("devId") String devId) {
+        return ApiResult.success(deviceGateway.deviceTransfer(phone, devId));
+    }
 /*
 
     @GetMapping("/checkDevByOpenId")

+ 1 - 1
portal-service-application/src/main/java/com/hfln/portal/application/controller/wap/GroupController.java

@@ -44,7 +44,7 @@ public class GroupController {
         return ApiResult.success(groupGateway.updateGroup(params));
     }
 
-    @GetMapping("/groupLits")
+    @GetMapping("/groupList")
     @Operation(summary = "获取群组列表")
     public ApiResult<List<GroupDTO>> GroupList(@RequestParam(value = "user_id", required = true) @NotNull(message = "用户Id不能为空!") Long userId) {
         return ApiResult.success(groupGateway.queryGroupList(userId));

+ 17 - 2
portal-service-application/src/main/java/com/hfln/portal/application/controller/wap/ShareController.java

@@ -5,6 +5,7 @@ import cn.hfln.framework.dto.ApiResult;
 import com.hfln.portal.common.dto.data.share.ShareDto;
 import com.hfln.portal.common.request.share.ShareConfirmParam;
 import com.hfln.portal.common.request.share.ShareParam;
+import com.hfln.portal.common.request.share.updateShareParam;
 import com.hfln.portal.domain.gateway.DeviceGateway;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -26,12 +27,12 @@ public class ShareController {
     private DeviceGateway deviceGateway;
 
     @PostMapping("/deviceShare")
-    @Operation(summary = "个人分享设备")
+    @Operation(summary = "通过手机号分享设备")
     public ApiResult<Boolean> share(@RequestBody @Valid ShareParam param) {
         return ApiResult.success(deviceGateway.devShare(param));
     }
 
-    @PostMapping("/shareConfirm")
+    @PostMapping("/Confirm")
     @Operation(summary = "设备分享确认")
     public ApiResult<Void> confirm(@RequestBody @Valid ShareConfirmParam param) {
         deviceGateway.shareConfirm(param);
@@ -50,4 +51,18 @@ public class ShareController {
         deviceGateway.shareByUrl(shareParam);
         return ApiResult.success();
     }
+
+    @PostMapping("/cancelShare")
+    @Operation(summary = "取消设备分享")
+    public ApiResult<Void> cancelShare(@RequestParam("shareId") Long shareId){
+        deviceGateway.cancelShare(shareId);
+        return ApiResult.success();
+    }
+
+    @PostMapping("/updateDeviceShare")
+    @Operation(summary = "更新设备分享")
+    public ApiResult<Void> updateDeviceShare(@RequestBody @Valid updateShareParam param) {
+        deviceGateway.updateDeviceShare(param);
+        return ApiResult.success();
+    }
 }

+ 32 - 0
portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebSystemController.java

@@ -5,10 +5,14 @@ import cn.hfln.framework.catchlog.CatchAndLog;
 import cn.hfln.framework.dto.ApiResult;
 import com.hfln.portal.common.dto.data.menu.MenuListDTO;
 import com.hfln.portal.common.dto.data.menu.MenuTreeDTO;
+import com.hfln.portal.common.dto.data.role.RoleListDTO;
+import com.hfln.portal.common.dto.data.rolemenu.RoleMenuTreeDTO;
 import com.hfln.portal.common.request.web.AddMenuParam;
+import com.hfln.portal.common.request.web.AddRoleParam;
 import com.hfln.portal.common.request.web.UpdateMenuParam;
 import com.hfln.portal.domain.gateway.WebGateway;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,6 +30,28 @@ public class WebSystemController {
 
     @Autowired
     private WebGateway webGateway;
+    @PostMapping("/addRole")
+    @Operation(summary = "新增角色")
+    public ApiResult<Void> addRole(@RequestBody @Valid AddRoleParam params){
+
+        webGateway.addRole(params);
+        return ApiResult.success();
+    }
+
+    @PostMapping("/disable")
+    @Operation(summary = "禁用角色")
+    public ApiResult<Void> disableRole(@RequestParam @Parameter(description = "角色编码") String roleCode){
+
+        webGateway.disableRole(roleCode);
+        return ApiResult.success();
+    }
+
+    @GetMapping("/roleList")
+    @Operation(summary = "获取角色列表")
+    public ApiResult<List<RoleListDTO>> roleList(){
+        List<RoleListDTO> roleList = webGateway.roleList();
+        return ApiResult.success(roleList);
+    }
 
     @PostMapping("/addMenu")
     @Operation(summary = "添加菜单")
@@ -59,4 +85,10 @@ public class WebSystemController {
     public ApiResult<List<MenuListDTO>> queryMenuList(@RequestParam(required = false) Integer disabledFlag) {
         return ApiResult.success(webGateway.queryMenuList(disabledFlag));
     }
+
+    @GetMapping("/roleMenuTree")
+    @Operation(summary = "获取角色关联菜单权限")
+    public ApiResult<RoleMenuTreeDTO> getRoleSelectedMenu(@RequestParam Long roleId) {
+        return ApiResult.success(webGateway.getRoleSelectedMenu(roleId));
+    }
 }

+ 1 - 27
portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebUserController.java

@@ -5,24 +5,20 @@ package com.hfln.portal.application.controller.web;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hfln.framework.catchlog.CatchAndLog;
 import cn.hfln.framework.dto.ApiResult;
-import com.hfln.portal.common.dto.data.role.RoleListDTO;
-import com.hfln.portal.common.request.web.AddRoleParam;
 import com.hfln.portal.common.request.web.AddAccountParam;
-import com.hfln.portal.common.request.web.LoginParam;
 import com.hfln.portal.common.request.web.AdminResetParam;
+import com.hfln.portal.common.request.web.LoginParam;
 import com.hfln.portal.common.response.admin.AdminLoginRes;
 import com.hfln.portal.common.response.user.UserTokenInfo;
 import com.hfln.portal.domain.customer.util.CopyUtils;
 import com.hfln.portal.domain.gateway.WebGateway;
 import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.List;
 
 @RestController
 @CatchAndLog
@@ -81,26 +77,4 @@ public class WebUserController {
         return ApiResult.success();
     }
 
-    @PostMapping("/addRole")
-    @Operation(summary = "新增角色")
-    public ApiResult<Void> addRole(@RequestBody @Valid AddRoleParam params){
-
-        webGateway.addRole(params);
-        return ApiResult.success();
-    }
-
-    @PostMapping("/disable")
-    @Operation(summary = "禁用角色")
-    public ApiResult<Void> disableRole(@RequestParam @Parameter(description = "角色编码") String roleCode){
-
-        webGateway.disableRole(roleCode);
-        return ApiResult.success();
-    }
-
-    @GetMapping("/roleList")
-    @Operation(summary = "获取角色列表")
-    public ApiResult<List<RoleListDTO>> roleList(){
-        List<RoleListDTO> roleList = webGateway.roleList();
-        return ApiResult.success(roleList);
-    }
 }

+ 1 - 1
portal-service-common/src/main/java/com/hfln/portal/common/constant/mqtt/topic/TopicConstants.java

@@ -20,7 +20,7 @@ public interface TopicConstants {
 
     String TOPIC_DEV_UPDATE = "/dev/%s/set_device_param";
 
-
+    //向雷达发送设备信息
     String TOPIC_SET_DEVICE_PARAM = "/mps/set_device_param";
 
 

+ 1 - 1
portal-service-common/src/main/java/com/hfln/portal/common/dto/DevInfoImportDto.java

@@ -10,7 +10,7 @@ public class DevInfoImportDto {
     private String software;
 
     @ExcelProperty("设备ID")
-    private String devId;
+    private String clientId;
 
     @ExcelProperty("设备类型")
     private String devType;

+ 40 - 33
portal-service-common/src/main/java/com/hfln/portal/common/dto/data/device/DeviceDTO.java

@@ -89,41 +89,48 @@ public class DeviceDTO extends BaseVO {
     @Schema(description = "安装方式:Wall-墙装,Ceiling-顶装")
     private String mountPlain;
 
+
     /**
-     * 跟踪区域起始X坐标
+     * 安装位置:Toilet-卫生间,Bedroom-卧室,LivingRoom-客厅,Restaurant-餐厅
      */
-    @Schema(description = "跟踪区域起始X坐标")
-    private BigDecimal startX;
+    @Schema(description ="安装位置:Toilet-卫生间,Bedroom-卧室,LivingRoom-客厅,Restaurant-餐厅")
+    private String installPosition;
 
     /**
-     * 跟踪区域起始Y坐标
+     * 雷达监测范围X开始
      */
-    @Schema(description = "跟踪区域起始Y坐标")
-    private BigDecimal startY;
+    @Schema(description = "雷达监测范围X开始")
+    private BigDecimal xxStart;
 
     /**
-     * 跟踪区域起始Z坐标
+     * 雷达监测范围Y开始
      */
-    @Schema(description = "跟踪区域起始Z坐标")
-    private BigDecimal startZ;
+    @Schema(description = "雷达监测范围Y开始")
+    private BigDecimal yystart;
 
     /**
-     * 跟踪区域结束X坐标
+     * 雷达监测范围Z开始
      */
-    @Schema(description = "跟踪区域结束X坐标")
-    private BigDecimal stopX;
+    @Schema(description = "雷达监测范围Z开始")
+    private BigDecimal zzStart;
 
     /**
-     * 跟踪区域结束Y坐标
+     * 雷达监测范围X结束
      */
-    @Schema(description = "跟踪区域结束Y坐标")
-    private BigDecimal stopY;
+    @Schema(description = "雷达监测范围X结束")
+    private BigDecimal xxEnd;
 
     /**
-     * 跟踪区域结束Z坐标
+     * 雷达监测范围Y结束
      */
-    @Schema(description = "跟踪区域结束Z坐标")
-    private BigDecimal stopZ;
+    @Schema(description = "雷达监测范围Y结束")
+    private BigDecimal yyEnd;
+
+    /**
+     * 雷达监测范围Z结束
+     */
+    @Schema(description = "雷达监测范围Z结束")
+    private BigDecimal zzEnd;
 
     /**
      * 安装高度
@@ -132,15 +139,15 @@ public class DeviceDTO extends BaseVO {
     private BigDecimal height;
 
     /**
-     * 房间长度
+     * 雷达监测长度(X)  xxEnd-xxStart
      */
-    @Schema(description = "房间长度")
+    @Schema(description = "雷达监测长度(X) xxEnd-xxStart")
     private BigDecimal length;
 
     /**
-     * 房间宽度
+     * 雷达监测宽度(Y) yyEnd-yyStart
      */
-    @Schema(description = "房间宽度")
+    @Schema(description = "雷达监测宽度(Y) yyEnd-yyStart")
     private BigDecimal width;
 
     /**
@@ -161,17 +168,17 @@ public class DeviceDTO extends BaseVO {
     @Schema(description = "北向夹角")
     private BigDecimal northAngle;
 
-    /**
-     * 安装坐标x
-     */
-    @Schema(description = "安装坐标x")
-    private BigDecimal x;
-
-    /**
-     * 安装坐标y
-     */
-    @Schema(description = "安装坐标y")
-    private BigDecimal y;
+//    /**
+//     * 安装坐标x
+//     */
+//    @Schema(description = "安装坐标x")
+//    private BigDecimal x;
+//
+//    /**
+//     * 安装坐标y
+//     */
+//    @Schema(description = "安装坐标y")
+//    private BigDecimal y;
 
     /**
      * 指示灯开关:0-关闭,1-开启

+ 26 - 0
portal-service-common/src/main/java/com/hfln/portal/common/dto/data/rolemenu/MenuSimpleTreeDTO.java

@@ -0,0 +1,26 @@
+package com.hfln.portal.common.dto.data.rolemenu;
+
+import com.hfln.portal.common.vo.BaseVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+
+@Data
+public class MenuSimpleTreeDTO extends BaseVO {
+    @Schema(description = "菜单ID")
+    private Long menuId;
+
+    @Schema(description = "菜单名称")
+    private String menuName;
+
+    @Schema(description = "父级ID")
+    private Long parentId;
+
+    @Schema(description = "菜单类型")
+    private Long menuType;
+
+    @Schema(description = "子菜单")
+    private List<MenuSimpleTreeDTO> children;
+}

+ 19 - 0
portal-service-common/src/main/java/com/hfln/portal/common/dto/data/rolemenu/RoleMenuTreeDTO.java

@@ -0,0 +1,19 @@
+package com.hfln.portal.common.dto.data.rolemenu;
+
+import com.hfln.portal.common.vo.BaseVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class RoleMenuTreeDTO extends BaseVO {
+    @Schema(description = "角色ID")
+    private Long roleId;
+
+    @Schema(description = "已选菜单ID列表")
+    private List<Long> selectedMenuId;
+
+    @Schema(description = "菜单树")
+    private List<MenuSimpleTreeDTO> menuTreeList;
+}

+ 40 - 18
portal-service-common/src/main/java/com/hfln/portal/common/request/device/DeviceBandingParams.java

@@ -5,8 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
+import javax.validation.constraints.*;
 import java.math.BigDecimal;
 
 @EqualsAndHashCode(callSuper = true)
@@ -22,45 +21,68 @@ public class DeviceBandingParams extends BaseVO {
     @Schema(description = "用户Id", required = true)
     private Long userId;
 
-    @Schema(description = "设备名称")
+    @Schema(description = "设备名称,最多10个字符")
+    @Size(max = 10, message = "设备名称不能超过10个字符")
     private String devName;
 
-    @Schema(description = "房间长度")
+    @Schema(description = "监测X长度:xxEnd-xxStart")
     private BigDecimal length;
 
-    @Schema(description = "房间宽度")
+    @Schema(description = "监测Y宽度yyEnd-yyStart")
     private BigDecimal width;
 
-    @Schema(description = "房间高度")
+    @Schema(description = "安装高度")
+    @DecimalMax(value = "370", message = "height不能大于370")
+    @DecimalMin(value = "250", message = "height不能小于250")
     private BigDecimal height;
 
-    @Schema(description = "北向夹角")
-    private BigDecimal northAngle;
+    @Schema(description = "WIFI名称")
+    private String wifiName;
+
+    @Schema(description = "WIFI密码")
+    private String wifiPassword;
 
+    @Schema(description = "北向夹角 允许传值: 0,90,180,270")
+    private BigDecimal northAngle;
 
-    @Schema(description = "安装方式")
+    @Schema(description = "安装方式:Wall-墙装,Ceiling-顶装")
     private String mountPlain;
 
-    @Schema(description = "安装坐标x开始")
+    @Schema(description = "安装位置:Toilet-卫生间,Bedroom-卧室,LivingRoom-客厅,Restaurant-餐厅")
+    private String installPosition;
+
+    @Schema(description = "雷达监测范围x开始,范围:-200-200 cm之内")
+    @DecimalMin(value = "-200", message = "xxStart不能小于-200")
+    @DecimalMax(value = "200", message = "xxStart不能大于200")
     private BigDecimal xxStart;
-    @Schema(description = "安装坐标x结束")
+
+    @Schema(description = "雷达监测范围x结束,范围:-200-200 cm之内,且xxEnd > xxStart")
+    @DecimalMin(value = "-200", message = "xxEnd不能小于-200")
+    @DecimalMax(value = "200", message = "xxEnd不能大于200")
     private BigDecimal xxEnd;
 
 
-    @Schema(description = "安装坐标y开始")
+    @Schema(description = "雷达监测范围y开始,范围:-250-250 cm之内")
+    @DecimalMin(value = "-250", message = "yyStart不能小于-250")
+    @DecimalMax(value = "250", message = "yyStart不能大于250")
     private BigDecimal yyStart;
-    @Schema(description = "安装坐标y结束")
+
+    @Schema(description = "雷达监测范围y结束,范围:-250-250 cm之内,且yyEnd > yyStart")
+    @DecimalMin(value = "-250", message = "yyEnd不能小于-250")
+    @DecimalMax(value = "250", message = "yyEnd不能大于250")
     private BigDecimal yyEnd;
 
 
-    @Schema(description = "安装坐标z开始")
+    @Schema(description = "雷达监测范围z开始,范围 0-5 cm之内")
+    @DecimalMin(value = "0", message = "zzStart不能小于0")
+    @DecimalMax(value = "5", message = "zzStart不能大于5")
     private BigDecimal zzStart;
-    @Schema(description = "安装坐标z结束")
+    @Schema(description = "雷达监测范围z结束,范围:200-300 cm之内")
+    @DecimalMin(value = "0", message = "zzEnd不能小于0")
+    @DecimalMax(value = "5", message = "zzEnd不能大于5")
     private BigDecimal zzEnd;
 
-
-    @Schema(description = "指示灯开关")
+    @Schema(description = "指示灯开关:0-关闭,1-开启")
     private int statusLight;
 
-
 }

+ 10 - 1
portal-service-common/src/main/java/com/hfln/portal/common/request/share/ShareParam.java

@@ -15,7 +15,7 @@ public class ShareParam extends BaseVO {
     /**
      * 设备ID
      */
-    @Schema(description = "设备ID")
+    @Schema(description = "设备主键ID")
     private Long devId;
 
     /**
@@ -42,4 +42,13 @@ public class ShareParam extends BaseVO {
     @Schema(description = "被分享人手机号")
     private String sharedPhone;
 
+    @Schema(description = "是否授权是否授权短信通知: 0-授权,1-拒绝")
+    private Integer messageFlag;
+
+    @Schema(description = "是否授权服务号通知 :0-授权,1-拒绝")
+    private Integer serviceNumberFlag;
+
+    @Schema(description = "是否授权VOIP通话 :0-授权,1-拒绝")
+    private Integer voipFlag;
+
 }

+ 26 - 0
portal-service-common/src/main/java/com/hfln/portal/common/request/share/updateShareParam.java

@@ -0,0 +1,26 @@
+package com.hfln.portal.common.request.share;
+
+import com.hfln.portal.common.vo.BaseVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+
+@Data
+public class updateShareParam extends BaseVO {
+
+    @Schema(description = "分享主键ID")
+    @NotNull(message = "分享ID不能为空")
+    private Long shareId;
+
+
+    @Schema(description = "是否授权是否授权短信通知: 0-授权,1-拒绝")
+    private Integer messageFlag;
+
+    @Schema(description = "是否授权服务号通知 :0-授权,1-拒绝")
+    private Integer serviceNumberFlag;
+
+    @Schema(description = "是否授权VOIP通话 :0-授权,1-拒绝")
+    private Integer voipFlag;
+}

+ 2 - 0
portal-service-domain/src/main/java/com/hfln/portal/domain/exception/ErrorEnum.java

@@ -51,6 +51,7 @@ public enum ErrorEnum implements ErrorEnumInterface{
     DEVICE_IS_BINDING("50002", "当前设备已经被绑定!"),
     CLIENT_ID_ID_NULL("50003", "设备ID不能为空!"),
     DEVICE_IS_EXIST("50004", "设备已存在!"),
+    DEVICE_PARAM_ERROR("50005", "设备参数范围错误!"),
 
     /**
      * 设备房间相关
@@ -99,6 +100,7 @@ public enum ErrorEnum implements ErrorEnumInterface{
     EXIST_NOT_DEAL_SHARE("11003", "存在未处理的邀请,请回主页查看!"),
     SHARE_INFO_NOT_EXIST("11004", "分享邀请不存在!"),
     SHARE_INFO_ALREADY_DEAL("11005", "分享邀请已处理!"),
+    SHARE_RECORD_IS_NOT_EXIST("11006", "分享记录不存在!"),
 
 
     /**

+ 6 - 2
portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/DeviceGateway.java

@@ -8,12 +8,11 @@ import com.hfln.portal.common.dto.data.share.ShareDto;
 import com.hfln.portal.common.request.device.DeviceBandingParams;
 import com.hfln.portal.common.request.device.DeviceListParams;
 import com.hfln.portal.common.request.device.DeviceLocationParams;
-import com.hfln.portal.common.request.device.*;
 import com.hfln.portal.common.request.event.EventListParams;
 import com.hfln.portal.common.request.share.ShareConfirmParam;
 import com.hfln.portal.common.request.share.ShareParam;
+import com.hfln.portal.common.request.share.updateShareParam;
 import com.hfln.portal.common.response.device.WcTimesQueryRes;
-
 import com.hfln.portal.common.vo.PageRecord;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -65,6 +64,9 @@ public interface DeviceGateway {
 
     void shareConfirm(ShareConfirmParam shareConfirmParam);
 
+    void cancelShare(Long shareId);
+
+    void updateDeviceShare(updateShareParam param);
 
     /**
      *  mqtt 雷达
@@ -90,5 +92,7 @@ public interface DeviceGateway {
 
     WcTimesQueryRes getWcTimes(Long devId, String time);
 
+    Boolean deviceTransfer(String phone, String devId);
+
     //String checkDevByOpenId(String openId, String clientId);
 }

+ 3 - 0
portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/WebGateway.java

@@ -4,6 +4,7 @@ import com.hfln.portal.common.dto.data.device.DeviceDTO;
 import com.hfln.portal.common.dto.data.menu.MenuListDTO;
 import com.hfln.portal.common.dto.data.menu.MenuTreeDTO;
 import com.hfln.portal.common.dto.data.role.RoleListDTO;
+import com.hfln.portal.common.dto.data.rolemenu.RoleMenuTreeDTO;
 import com.hfln.portal.common.request.device.DeviceListQueryReq;
 import com.hfln.portal.common.request.web.*;
 import com.hfln.portal.common.response.admin.AdminLoginRes;
@@ -72,5 +73,7 @@ public interface WebGateway {
      * @return 菜单列表
      */
     List<MenuListDTO> queryMenuList(Integer disabledFlag);
+
+    RoleMenuTreeDTO getRoleSelectedMenu(Long roleId);
 }
 

+ 108 - 2
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/DeviceGatewayImpl.java

@@ -22,6 +22,7 @@ import com.hfln.portal.common.request.device.DeviceLocationParams;
 import com.hfln.portal.common.request.event.EventListParams;
 import com.hfln.portal.common.request.share.ShareConfirmParam;
 import com.hfln.portal.common.request.share.ShareParam;
+import com.hfln.portal.common.request.share.updateShareParam;
 import com.hfln.portal.common.response.device.WcTimesQueryRes;
 import com.hfln.portal.common.vo.PageRecord;
 import com.hfln.portal.domain.customer.OssBusiType;
@@ -203,7 +204,23 @@ public class DeviceGatewayImpl implements DeviceGateway {
 
     @Override
     public Boolean deviceBind(DeviceBandingParams request) {
-        // 1. 检查设备是否存在
+        // 1.参数范围大小校验
+        if (request.getXxEnd().compareTo(request.getXxStart()) <= 0) {
+            throw new BizException(ErrorEnum.DEVICE_PARAM_ERROR.getErrorCode(), ErrorEnum.DEVICE_PARAM_ERROR.getErrorMessage());
+        }
+        if (request.getYyEnd().compareTo(request.getYyStart()) <= 0) {
+            throw new BizException(ErrorEnum.DEVICE_PARAM_ERROR.getErrorCode(), ErrorEnum.DEVICE_PARAM_ERROR.getErrorMessage());
+        }
+        if (!Arrays.asList(
+                BigDecimal.ZERO,
+                new BigDecimal("90"),
+                new BigDecimal("180"),
+                new BigDecimal("270")
+        ).contains(request.getNorthAngle())) {
+            throw new BizException(ErrorEnum.DEVICE_PARAM_ERROR.getErrorCode(), ErrorEnum.DEVICE_PARAM_ERROR.getErrorMessage());
+        }
+
+        // 2. 检查设备是否存在
         DevInfo devInfo = devInfoService.getOne(
                 Wrappers.<DevInfo>lambdaQuery()
                         .eq(DevInfo::getClientId, request.getClientId())
@@ -216,7 +233,30 @@ public class DeviceGatewayImpl implements DeviceGateway {
         }
 
         // 3. 更新设备信息
-        return devInfoService.updateDevice(devInfo.getClientId(), request);
+        boolean updateResult = devInfoService.updateDevice(devInfo.getClientId(), request);
+
+        //4.通过MQTT把信息参数发送到设备
+        String topic = TopicConstants.TOPIC_SET_DEVICE_PARAM;
+        JSONObject msg = new JSONObject();
+        msg.put("dev_id", devInfo.getDevId());
+        msg.put("mounting_plain", request.getMountPlain());
+        msg.put("height", request.getHeight());
+
+        JSONObject area = new JSONObject();
+        area.put("start_x", request.getXxStart());
+        area.put("stop_x", request.getXxEnd());
+        area.put("start_y", request.getYyStart());
+        area.put("stop_y", request.getYyEnd());
+        area.put("start_z", request.getZzStart());
+        area.put("stop_z", request.getZzEnd());
+        msg.put("area", area);
+        try {
+            mqttClient.sendMessage(topic, msg.toJSONString());
+        } catch (Exception e) {
+            log.error("发送设备参数到MQTT失败", e);
+        }
+
+        return updateResult;
     }
 
 
@@ -435,6 +475,9 @@ public class DeviceGatewayImpl implements DeviceGateway {
         devShare.setSharerPhone(shareParam.getSharerPhone());
         devShare.setSharedPhone(shareParam.getSharedPhone());
         devShare.setSharedUserId(userInfo.getUserId());
+        devShare.setMessageFlag(shareParam.getMessageFlag());
+        devShare.setServiceNumberFlag(shareParam.getServiceNumberFlag());
+        devShare.setVoipFlag(shareParam.getVoipFlag());
         devShare.setState(0);
         devShareService.save(devShare);
         return null;
@@ -475,6 +518,9 @@ public class DeviceGatewayImpl implements DeviceGateway {
         }
 
         // 5. 设置分享状态并保存
+        devShare.setMessageFlag(shareParam.getMessageFlag());
+        devShare.setServiceNumberFlag(shareParam.getServiceNumberFlag());
+        devShare.setVoipFlag(shareParam.getVoipFlag());
         devShare.setState(0);
         devShareService.save(devShare);
         return true;
@@ -514,6 +560,33 @@ public class DeviceGatewayImpl implements DeviceGateway {
     }
 
     @Override
+    public void cancelShare(Long shareId) {
+        //1.判断分享记录是否为空
+        DevShare devShare = devShareService.getById(shareId);
+        if (devShare == null){
+            throw new BizException(ErrorEnum.SHARE_RECORD_IS_NOT_EXIST.getErrorCode(), ErrorEnum.SHARE_RECORD_IS_NOT_EXIST.getErrorMessage());
+        }
+        //2.将dev_share中这条记录置为逻辑删除
+        devShare.setIsDeleted(BasePO.DeleteFlag.DELETED);
+    }
+
+    @Override
+    @Transactional
+    public void updateDeviceShare(updateShareParam param) {
+        //1.判断分享记录是否为空
+        DevShare devShare = devShareService.getById(param.getShareId());
+        if (devShare == null) {
+            throw new BizException(ErrorEnum.SHARE_RECORD_IS_NOT_EXIST.getErrorCode(), ErrorEnum.SHARE_RECORD_IS_NOT_EXIST.getErrorMessage());
+        }
+
+        //2.更新权限
+        devShare.setMessageFlag(param.getMessageFlag());
+        devShare.setServiceNumberFlag(param.getServiceNumberFlag());
+        devShare.setVoipFlag(param.getVoipFlag());
+        devShareService.updateById(devShare);
+    }
+
+    @Override
     public void getVersion(String clientId) {
 
         String topic = String.format(TopicConstants.TOPIC_DEV_GET_VERSION, clientId);
@@ -700,6 +773,39 @@ public class DeviceGatewayImpl implements DeviceGateway {
         }
         return res;
     }
+
+    @Override
+    public Boolean deviceTransfer(String phone, String devId){
+        //1.检查手机号是非为空
+        if (StringUtils.isEmpty(phone)){
+            throw new BizException(ErrorEnum.PHONE_IS_NULL.getErrorCode(),ErrorEnum.PHONE_IS_NULL.getErrorMessage());
+        }
+
+        //2.根据手机号查询user_info看是否注册
+        UserInfo userInfo = userService.queryByPhone(phone);
+        if (userInfo == null){
+            throw new BizException(ErrorEnum.USER_IS_NOT_EXIST.getErrorCode(), ErrorEnum.USER_IS_NOT_EXIST.getErrorMessage());
+        }
+
+        //3.检查设备是否存在
+        DevInfo devInfo = devInfoService.getOne(
+                Wrappers.<DevInfo>lambdaQuery()
+                        .eq(DevInfo::getDevId, devId)
+                        .eq(DevInfo::getIsDeleted,  BasePO.DeleteFlag.NOT_DELETED)
+        );
+        if (devInfo == null) {
+            throw new BizException(ErrorEnum.DEVICE_IS_NOT_EXIST.getErrorCode(), ErrorEnum.DEVICE_IS_NOT_EXIST.getErrorMessage());
+        }
+
+        //4.更新设备拥有者
+        devInfo.setUserId(userInfo.getUserId());
+        boolean updateResult = devInfoService.updateById(devInfo);
+
+        return updateResult;
+    }
+
+
+
 /*    @Override
     public String checkDevByOpenId(String openId, String clientId) {
         // 1. 检查参数是否为空

+ 44 - 4
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebGatewayImpl.java

@@ -14,6 +14,8 @@ import com.hfln.portal.common.dto.data.device.DeviceDTO;
 import com.hfln.portal.common.dto.data.menu.MenuListDTO;
 import com.hfln.portal.common.dto.data.menu.MenuTreeDTO;
 import com.hfln.portal.common.dto.data.role.RoleListDTO;
+import com.hfln.portal.common.dto.data.rolemenu.MenuSimpleTreeDTO;
+import com.hfln.portal.common.dto.data.rolemenu.RoleMenuTreeDTO;
 import com.hfln.portal.common.request.device.DeviceListQueryReq;
 import com.hfln.portal.common.request.web.*;
 import com.hfln.portal.common.response.admin.AdminLoginRes;
@@ -76,6 +78,9 @@ public class WebGatewayImpl implements WebGateway {
     @Autowired
     private TblSystemMenuService tblSystemMenuService;
 
+    @Autowired
+    private TblRoleMenuMapService tblRoleMenuMapService;
+
     @Value("${sa-token.admin.timeout}")
     private long adminTimeout;
 
@@ -93,17 +98,18 @@ public class WebGatewayImpl implements WebGateway {
         }
 
         List<String> devIds = devInfoImportVoList.stream()
-                .map(DevInfoImportDto::getDevId)
+                .map(DevInfoImportDto::getClientId)
+                .filter(StringUtils::hasText)
                 .distinct()
                 .collect(Collectors.toList());
         List<String> existClientIds = devInfoService.queryClientIdListByClientIds(devIds);
         if (!CollectionUtils.isEmpty(existClientIds)) {
-            devInfoImportVoList = devInfoImportVoList.stream().filter(item -> !existClientIds.contains(item.getDevId())).collect(Collectors.toList());
+            devInfoImportVoList = devInfoImportVoList.stream().filter(item -> !existClientIds.contains(item.getClientId())).collect(Collectors.toList());
         }
 
-        devInfoService.saveOrUpdateBatch(devInfoImportVoList.stream().map(item -> {
+        devInfoService.saveOrUpdateBatch(devInfoImportVoList.stream().filter(item -> StringUtils.hasText(item.getClientId())).map(item -> {
             DevInfo devInfo = new DevInfo();
-            devInfo.setClientId(item.getDevId());
+            devInfo.setClientId(item.getClientId());
             devInfo.setDevType(item.getDevType());
             devInfo.setSoftware(item.getSoftware());
             devInfo.setStatusLight(1);
@@ -457,4 +463,38 @@ public class WebGatewayImpl implements WebGateway {
         
         return result;
     }
+
+    @Override
+    public RoleMenuTreeDTO getRoleSelectedMenu(Long roleId) {
+        RoleMenuTreeDTO res = new RoleMenuTreeDTO();
+        res.setRoleId(roleId);
+
+        // 查询角色已选菜单ID
+        List<Long> selectedMenuId = tblRoleMenuMapService.queryMenuIdByRoleId(roleId);
+        res.setSelectedMenuId(selectedMenuId);
+
+        // 查询所有菜单
+        List<TblSystemMenu> allMenus = tblSystemMenuService.lambdaQuery()
+                .eq(TblSystemMenu::getIsDeleted, BasePO.DeleteFlag.NOT_DELETED)
+                .list();
+
+        // 转换为DTO
+        List<MenuSimpleTreeDTO> menuVOList = CopyUtils.copyList(allMenus, MenuSimpleTreeDTO.class);
+
+        // 分组
+        Map<Long, List<MenuSimpleTreeDTO>> parentMap = menuVOList.stream()
+                .collect(Collectors.groupingBy(MenuSimpleTreeDTO::getParentId, Collectors.toList()));
+
+        // 构建树
+        List<MenuSimpleTreeDTO> menuTreeList = buildMenuTree(parentMap, 0L);
+        res.setMenuTreeList(menuTreeList);
+
+        return res;
+    }
+
+    private List<MenuSimpleTreeDTO> buildMenuTree(Map<Long, List<MenuSimpleTreeDTO>> parentMap, Long parentId) {
+        List<MenuSimpleTreeDTO> res = parentMap.getOrDefault(parentId, new ArrayList<>());
+        res.forEach(e -> e.setChildren(buildMenuTree(parentMap, e.getMenuId())));
+        return res;
+    }
 }

+ 12 - 7
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/mqtt/MqttSubHandle.java

@@ -115,7 +115,12 @@ public class MqttSubHandle {
         }
     }
 
-
+    /**
+     * 处理跌倒事件消息
+     *
+     * @param topic MQTT主题
+     * @param payload 消息负载
+     */
     public void subDasEvent(String topic, String payload) {
 
         JSONObject obj = JSONObject.parseObject(payload);
@@ -439,12 +444,12 @@ public class MqttSubHandle {
         vo.setWifiName(password);
         vo.setIp(ip);
         vo.setMountPlain(mountPlain);
-        vo.setStartX(startX);
-        vo.setStartY(startY);
-        vo.setStartZ(startZ);
-        vo.setStopX(stopX);
-        vo.setStopY(stopY);
-        vo.setStopZ(stopZ);
+        vo.setXxStart(startX);
+        vo.setYyStart(startY);
+        vo.setZzStart(startZ);
+        vo.setXxEnd(stopX);
+        vo.setYyEnd(stopY);
+        vo.setZzEnd(stopZ);
         vo.setHeight(height);
         vo.setWidth(width);
         vo.setLength(length);

+ 22 - 16
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/po/DevInfo.java

@@ -92,55 +92,61 @@ public class DevInfo extends BasePO {
     private String mountPlain;
 
     /**
-     * 跟踪区域起始X坐标
+     * 安装位置:Toilet-卫生间,Bedroom-卧室,LivingRoom-客厅,Restaurant-餐厅
+     */
+    @TableField("install_position")
+    private String installPosition;
+
+    /**
+     * 雷达监测范围X开始
      */
     @TableField("start_x")
-    private BigDecimal startX;
+    private BigDecimal xxStart;
 
     /**
-     * 跟踪区域起始Y坐标
+     * 雷达监测范围Y开始
      */
     @TableField("start_y")
-    private BigDecimal startY;
+    private BigDecimal yyStart;
 
     /**
-     * 跟踪区域起始Z坐标
+     * 雷达监测范围Z开始
      */
     @TableField("start_z")
-    private BigDecimal startZ;
+    private BigDecimal zzStart;
 
     /**
-     * 跟踪区域结束X坐标
+     * 雷达监测范围X结束
      */
     @TableField("stop_x")
-    private BigDecimal stopX;
+    private BigDecimal xxEnd;
 
     /**
-     * 跟踪区域结束Y坐标
+     * 雷达监测范围Y结束
      */
     @TableField("stop_y")
-    private BigDecimal stopY;
+    private BigDecimal yyEnd;
 
     /**
-     * 跟踪区域结束Z坐标
+     * 雷达监测范围Z结束
      */
     @TableField("stop_z")
-    private BigDecimal stopZ;
+    private BigDecimal zzEnd;
 
     /**
-     * 安装高度
+     * 安装高度 250-370cm
      */
     @TableField("height")
     private BigDecimal height;
 
     /**
-     * 房间长度
+     * 雷达监测长度(X) xxEnd-xxStart
      */
     @TableField("length")
     private BigDecimal length;
 
     /**
-     * 房间宽度
+     * 雷达监测宽度(Y) yyEnd-yyStart
      */
     @TableField("width")
     private BigDecimal width;
@@ -158,7 +164,7 @@ public class DevInfo extends BasePO {
     private LocalDateTime signalTime;
 
     /**
-     * 北向夹角
+     * 北向夹角 //判断数值 0 90 180 270
      */
     @TableField("north_angle")
     private BigDecimal northAngle;

+ 15 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/po/DevShare.java

@@ -46,6 +46,21 @@ public class DevShare extends BasePO {
     private String sharedPhone;
 
     /**
+     * 是否授权短信通知 :0-授权,1-拒绝
+     */
+    private Integer messageFlag;
+
+    /**
+     * 是否授权服务号通知 :0-授权,1-拒绝
+     */
+    private Integer serviceNumberFlag;
+
+    /**
+     * 是否授权VOIP通话 :0-授权,1-拒绝
+     */
+    private Integer voipFlag;
+
+    /**
      * 状态:0-待确认,1-已确认,2-已拒绝
      */
     private Integer state;

+ 1 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/DevShareService.java

@@ -19,4 +19,5 @@ public interface DevShareService extends IService<DevShare> {
     DevShare queryNotDeal(Long sharerUserId, Long sharedUserId, Long devId);
 
     List<DevShare> queryBySharedUserId(Long sharedUserId);
+
 }

+ 3 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/TblRoleMenuMapService.java

@@ -6,5 +6,8 @@ import com.hfln.portal.infrastructure.po.TblRoleMenuMap;
 import java.util.List;
 
 public interface TblRoleMenuMapService extends IService<TblRoleMenuMap> {
+
     List<TblRoleMenuMap> findByRoleId(Long roleId);
+
+  List<Long> queryMenuIdByRoleId(Long roleId);
 }

+ 12 - 8
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/DevInfoServiceImpl.java

@@ -93,16 +93,20 @@ public class DevInfoServiceImpl extends ServiceImpl<DevInfoMapper, DevInfo> impl
                 .setIfNotNull(DevInfo::getClientId, request.getClientId())
                 .setIfNotNull(DevInfo::getUserId, request.getUserId())
                 .setIfNotBlank(DevInfo::getDevName, request.getDevName())
-                .setIfNotNull(DevInfo::getLength, request.getLength())
-                .setIfNotNull(DevInfo::getWidth, request.getWidth())
+                .setIfNotNull(DevInfo::getLength, (request.getXxEnd().subtract(request.getXxStart())))
+                .setIfNotNull(DevInfo::getWidth, (request.getYyEnd().subtract(request.getYyStart())))
                 .setIfNotNull(DevInfo::getHeight, request.getHeight())
+                .setIfNotNull(DevInfo::getWifiName, request.getWifiName())
+                .setIfNotNull(DevInfo::getWifiPassword, request.getWifiPassword())
                 .setIfNotNull(DevInfo::getNorthAngle, request.getNorthAngle())
-                .setIfNotNull(DevInfo::getStartX, request.getXxStart())
-                .setIfNotNull(DevInfo::getStopX, request.getXxEnd())
-                .setIfNotNull(DevInfo::getStartY, request.getYyStart())
-                .setIfNotNull(DevInfo::getStopY, request.getYyEnd())
-                .setIfNotNull(DevInfo::getStartZ, request.getZzStart())
-                .setIfNotNull(DevInfo::getStopZ, request.getZzEnd())
+                .setIfNotNull(DevInfo::getMountPlain, request.getMountPlain())
+                .setIfNotNull(DevInfo::getInstallPosition, request.getInstallPosition())
+                .setIfNotNull(DevInfo::getXxStart, request.getXxStart())
+                .setIfNotNull(DevInfo::getXxEnd, request.getXxEnd())
+                .setIfNotNull(DevInfo::getYyStart, request.getYyStart())
+                .setIfNotNull(DevInfo::getYyEnd, request.getYyEnd())
+                .setIfNotNull(DevInfo::getZzStart, request.getZzStart())
+                .setIfNotNull(DevInfo::getZzEnd, request.getZzEnd())
                 // 无条件更新的字段
                 .set(DevInfo::getUpdateTime, LocalDateTime.now())
                 .set(DevInfo::getOnline, 1);

+ 21 - 1
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/service/impl/TblRoleMenuMapServiceImpl.java

@@ -7,13 +7,20 @@ import com.hfln.portal.infrastructure.po.BasePO;
 import com.hfln.portal.infrastructure.po.TblRoleMenuMap;
 import com.hfln.portal.infrastructure.service.TblRoleMenuMapService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 @Slf4j
 public class TblRoleMenuMapServiceImpl extends ServiceImpl<TblRoleMenuMapMapper, TblRoleMenuMap> implements TblRoleMenuMapService {
+
+
+    @Autowired
+    private TblRoleMenuMapMapper tblRoleMenuMapMapper;
+
     @Override
     public List<TblRoleMenuMap> findByRoleId(Long roleId) {
         LambdaQueryWrapper<TblRoleMenuMap> queryWrapper = new LambdaQueryWrapper<>();
@@ -21,4 +28,17 @@ public class TblRoleMenuMapServiceImpl extends ServiceImpl<TblRoleMenuMapMapper,
         queryWrapper.eq(TblRoleMenuMap::getIsDeleted, BasePO.DeleteFlag.NOT_DELETED);
         return this.baseMapper.selectList(queryWrapper);
     }
-}
+
+    @Override
+        public List<Long> queryMenuIdByRoleId(Long roleId) {
+            List<TblRoleMenuMap> list = tblRoleMenuMapMapper.selectList(
+                    new LambdaQueryWrapper<TblRoleMenuMap>()
+                            .eq(TblRoleMenuMap::getRoleId, roleId)
+                            .eq(TblRoleMenuMap::getIsDeleted, 0)
+            );
+            return list.stream()
+                    .map(TblRoleMenuMap::getMenuId)
+                    .collect(Collectors.toList());
+        }
+    }
+