TRX 1 سال پیش
والد
کامیت
07436df7c9

+ 19 - 75
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/model/DevicePermissOpenApiModel.java

@@ -1,7 +1,6 @@
 package com.zhongshu.card.client.openApi.model;
 
 import com.github.microservice.models.type.DeviceType;
-import com.zhongshu.card.client.model.base.SuperModel;
 import com.zhongshu.card.client.model.devices.DeviceInfoModel;
 import com.zhongshu.card.client.model.org.DepartmentModel;
 import com.zhongshu.card.client.model.org.OrganizationUserModel;
@@ -9,10 +8,11 @@ import com.zhongshu.card.client.model.org.UserCountSimpleModel;
 import com.zhongshu.card.client.model.org.role.RoleModel;
 import com.zhongshu.card.client.model.school.AreaSimpleModel;
 import com.zhongshu.card.client.model.school.DictInfoSimpleModel;
+import com.zhongshu.card.client.openApi.base.SuperAPIModel;
 import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.client.type.OnLineState;
+import com.zhongshu.card.client.type.Sex;
 import com.zhongshu.card.client.type.UserState;
-import com.zhongshu.opengateway.client.model.OpenApiModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -29,33 +29,22 @@ import java.util.List;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-public class DevicePermissOpenApiModel extends OpenApiModel {
+public class DevicePermissOpenApiModel extends SuperAPIModel {
 
-    @Schema(description = "关联的设备信息")
-    private DeviceInfoModel deviceInfo;
+    //-----------------------设备信息 start-----------------
 
-    //------------------设备冗余数据 start-------------------
-    @Schema(description = "设备ID")
+    @Schema(description = "设备ID、设备号")
     private String deviceId;
 
     @Schema(description = "设备名称")
     private String deviceName;
 
+    @Schema(description = "关联的项目code")
+    private String projectInfoCode;
+
     @Schema(description = "设备类型,如 消费机 门禁机")
     private DeviceType deviceType;
 
-    @Schema(description = "是否在线")
-    private OnLineState onLineState;
-
-    private String onLineStateStr;
-
-    public String getOnLineStateStr() {
-        if (onLineState != null) {
-            return onLineState.getRemark();
-        }
-        return "";
-    }
-
     private String deviceTypeStr;
 
     public String getDeviceTypeStr() {
@@ -65,69 +54,25 @@ public class DevicePermissOpenApiModel extends OpenApiModel {
         return "";
     }
 
-    @Schema(description = "区域信息")
-    private AreaSimpleModel area;
-
-    public AreaSimpleModel getArea() {
-        if (ObjectUtils.isNotEmpty(deviceInfo)) {
-            return deviceInfo.getArea();
-        }
-        return null;
-    }
-
-    @Schema(description = "区域所有上级ID路径,如:a1/a12/a123")
-    private String areaPaths = "";
-
-    @Schema(description = "可使用的用户信息")
-    private UserCountSimpleModel userAccount;
-
-    public UserCountSimpleModel getUserAccount() {
-        if (organizationUser != null) {
-            return organizationUser.getUser();
-        }
-        return null;
-    }
-
-    @Schema(description = "机构用户信息")
-    private OrganizationUserModel organizationUser;
+    //----------------------用户信息 start ------------------
 
-    //---------------用户冗余数据 start--------------
+    @Schema(description = "工号、编码")
+    private String code;
 
-    @Schema(description = "可使用用户userId")
+    @Schema(description = "用户ID(由鉴权中心颁发)")
     private String userId;
 
+    @Schema(description = "用户手机号")
+    private String phone;
+
     @Schema(description = "昵称")
     private String name;
 
-    @Schema(description = "编码")
-    private String code;
-
-    @Schema(description = "用户所属机构oid")
-    private String userOid;
-
-    @Schema(description = "职位")
-    private DictInfoSimpleModel position;
-
-    @Schema(description = "角色信息")
-    private List<RoleModel> roles = new ArrayList<>();
-
-    @Schema(description = "部门信息")
-    private DepartmentModel department;
+    @Schema(description = "头像")
+    private String profilePic;
 
-    @Schema(description = "用户状态")
-    private UserState state = UserState.Normal;
-
-    private String stateStr;
-
-    public String getStateStr() {
-        if (state != null) {
-            return state.getRemark();
-        }
-        return "";
-    }
-
-    @Schema(description = "权限是否下发")
-    private Boolean isUsed = Boolean.FALSE;
+    @Schema(description = "性别")
+    private Sex sex;
 
     @Schema(description = "权限是否可用")
     private DataState dataState;
@@ -140,5 +85,4 @@ public class DevicePermissOpenApiModel extends OpenApiModel {
         }
         return "";
     }
-
 }

+ 23 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/params/PermissChangeOpenApiParam.java

@@ -0,0 +1,23 @@
+package com.zhongshu.card.client.openApi.params;
+
+import com.zhongshu.card.client.openApi.base.ProjectCodeParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/11/12
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PermissChangeOpenApiParam extends ProjectCodeParam {
+
+    @Schema(description = "用户userId")
+    private String userId;
+
+    @Schema(description = "设备ID")
+    private String deviceId;
+}

+ 21 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/params/UserOpenApiParam.java

@@ -0,0 +1,21 @@
+package com.zhongshu.card.client.openApi.params;
+
+import com.zhongshu.card.client.openApi.base.ProjectCodeParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/11/12
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserOpenApiParam extends ProjectCodeParam {
+
+    @Schema(description = "用户userId")
+    private String userId;
+
+}

+ 38 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/DevicePermissOpenApiController.java

@@ -5,9 +5,8 @@ import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.openApi.model.DeviceInfoOpenApiModel;
 import com.zhongshu.card.client.openApi.model.DevicePermissOpenApiModel;
-import com.zhongshu.card.client.openApi.params.DeviceIdAndProjectCodeParam;
-import com.zhongshu.card.client.openApi.params.DeviceIdParam;
-import com.zhongshu.card.client.openApi.params.DeviceInfoOpenApiSearch;
+import com.zhongshu.card.client.openApi.params.*;
+import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.server.core.service.openAPI.DevicePermissOpenApiService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -47,10 +46,45 @@ public class DevicePermissOpenApiController {
     }
 
     @ResourceAuth(value = "user", type = AuthType.User)
-    @Operation(summary = "查询设备的权限", description = "设备详情-根据设备ID查询")
+    @Operation(summary = "查询设备的权限", description = "查询设备的权限")
     @RequestMapping(value = {"getDevicePermissByDeviceId"}, method = {RequestMethod.POST})
     public ResultContent<List<DevicePermissOpenApiModel>> getDevicePermissByDeviceId(@RequestBody DeviceIdAndProjectCodeParam param) {
         return devicePermissOpenApiService.getDevicePermissByDeviceId(param);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "查询用户的设备权限", description = "查询用户的设备权限")
+    @RequestMapping(value = {"getDevicePermissByUserId"}, method = {RequestMethod.POST})
+    public ResultContent<List<DevicePermissOpenApiModel>> getDevicePermissByUserId(@RequestBody UserOpenApiParam param) {
+        return devicePermissOpenApiService.getDevicePermissByUserId(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "启用权限", description = "启用权限")
+    @RequestMapping(value = {"enablePermiss"}, method = {RequestMethod.POST})
+    public ResultContent enablePermiss(@RequestBody PermissChangeOpenApiParam param) {
+        return devicePermissOpenApiService.changePermissState(param, DataState.Enable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "禁用权限", description = "禁用权限")
+    @RequestMapping(value = {"disablePermiss"}, method = {RequestMethod.POST})
+    public ResultContent disablePermiss(@RequestBody PermissChangeOpenApiParam param) {
+        return devicePermissOpenApiService.changePermissState(param, DataState.Disable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "移除设备权限", description = "移除设备权限")
+    @RequestMapping(value = {"deletePermiss"}, method = {RequestMethod.POST})
+    public ResultContent deletePermiss(@RequestBody PermissChangeOpenApiParam param) {
+        return devicePermissOpenApiService.deletePermiss(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "添加用户设备权限", description = "添加用户设备权限")
+    @RequestMapping(value = {"addPermiss"}, method = {RequestMethod.POST})
+    public ResultContent addPermiss(@RequestBody PermissChangeOpenApiParam param) {
+        return devicePermissOpenApiService.addPermiss(param);
+    }
+
 }

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/DevicePermissDao.java

@@ -18,11 +18,12 @@ public interface DevicePermissDao extends MongoDao<DevicePermiss>, DevicePermiss
 
     DevicePermiss findTopById(String id);
 
-
     List<DevicePermiss> findByIdIn(List<String> ids);
 
     List<DevicePermiss> findByDeviceIdAndProjectOid(String deviceId, String projectOid);
 
+    List<DevicePermiss> findByUserIdAndProjectOid(String userId, String projectOid);
+
     DevicePermiss findTopByDeviceIdAndOrganizationUser(String deviceId, OrganizationUser organizationUser);
 
     DevicePermiss findTopByUserIdAndDeviceIdAndProjectOid(String userId, String deviceId, String projectOid);

+ 157 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/DevicePermissOpenApiService.java

@@ -2,22 +2,27 @@ package com.zhongshu.card.server.core.service.openAPI;
 
 import com.github.microservice.components.data.base.util.PageEntityUtil;
 import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.base.IDsParam;
 import com.zhongshu.card.client.model.devices.DeviceInfoSearch;
+import com.zhongshu.card.client.model.devices.DevicePermissParam;
 import com.zhongshu.card.client.model.org.OrganizationMiniModel;
 import com.zhongshu.card.client.model.school.AreaSimpleModel;
 import com.zhongshu.card.client.openApi.model.DeviceInfoOpenApiModel;
 import com.zhongshu.card.client.openApi.model.DeviceInfoOpenApiSimpleModel;
 import com.zhongshu.card.client.openApi.model.DevicePermissOpenApiModel;
-import com.zhongshu.card.client.openApi.params.DeviceIdAndProjectCodeParam;
-import com.zhongshu.card.client.openApi.params.DeviceIdParam;
-import com.zhongshu.card.client.openApi.params.DeviceInfoOpenApiSearch;
+import com.zhongshu.card.client.openApi.params.*;
+import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
 import com.zhongshu.card.server.core.dao.devices.DevicePermissDao;
-import com.zhongshu.card.server.core.dao.payment.ExpenseFlowDao;
 import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 import com.zhongshu.card.server.core.domain.devices.DevicePermiss;
+import com.zhongshu.card.server.core.domain.org.OrganizationUser;
+import com.zhongshu.card.server.core.domain.org.UserAccount;
 import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.devices.DevicePermissIotService;
+import com.zhongshu.card.server.core.service.devices.DevicePermissService;
 import com.zhongshu.card.server.core.service.org.OrganizationServiceImpl;
+import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
 import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
 import com.zhongshu.card.server.core.service.school.AreaServiceImpl;
 import com.zhongshu.card.server.core.util.BeanUtils;
@@ -60,6 +65,15 @@ public class DevicePermissOpenApiService extends SuperService {
     @Autowired
     private DevicePermissDao devicePermissDao;
 
+    @Autowired
+    private DevicePermissIotService devicePermissIotService;
+
+    @Autowired
+    private DevicePermissService devicePermissService;
+
+    @Autowired
+    private OrganizationUserServiceImpl organizationUserService;
+
     /**
      * 设备列表
      *
@@ -114,6 +128,119 @@ public class DevicePermissOpenApiService extends SuperService {
         return ResultContent.buildSuccess(models);
     }
 
+    public ResultContent changePermissState(PermissChangeOpenApiParam param, DataState dataState) {
+        if (StringUtils.isEmpty(param.getProjectCode())) {
+            return ResultContent.buildFail("projectCode不能为空");
+        }
+        if (StringUtils.isEmpty(param.getUserId())) {
+            return ResultContent.buildFail("userId不能为空");
+        }
+        if (StringUtils.isEmpty(param.getDeviceId())) {
+            return ResultContent.buildFail("deviceId不能为空");
+        }
+        String projectOid = getOidByCode(param.getProjectCode());
+        if (StringUtils.isEmpty(projectOid)) {
+            return ResultContent.buildFail("projectCode不存在");
+        }
+        DevicePermiss entity = devicePermissDao.findTopByUserIdAndDeviceIdAndProjectOid(param.getUserId(), param.getDeviceId(), projectOid);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail("权限不存在");
+        }
+        if (dataState == DataState.Disable) {
+            // 移除权限
+            devicePermissIotService.changeDeviceUser(List.of(entity), 0, "");
+        } else {
+            // 启用
+            devicePermissIotService.changeDeviceUser(List.of(entity), 1, "");
+        }
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 移出权限
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent deletePermiss(PermissChangeOpenApiParam param) {
+        if (StringUtils.isEmpty(param.getProjectCode())) {
+            return ResultContent.buildFail("projectCode不能为空");
+        }
+        if (StringUtils.isEmpty(param.getUserId())) {
+            return ResultContent.buildFail("userId不能为空");
+        }
+        if (StringUtils.isEmpty(param.getDeviceId())) {
+            return ResultContent.buildFail("deviceId不能为空");
+        }
+        String projectOid = getOidByCode(param.getProjectCode());
+        if (StringUtils.isEmpty(projectOid)) {
+            return ResultContent.buildFail("projectCode不存在");
+        }
+        DevicePermiss entity = devicePermissDao.findTopByUserIdAndDeviceIdAndProjectOid(param.getUserId(), param.getDeviceId(), projectOid);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail("权限不存在");
+        }
+        IDsParam iDsParam = new IDsParam();
+        iDsParam.setIds(List.of(entity.getId()));
+        return devicePermissService.deleteByIds(iDsParam);
+    }
+
+    /**
+     * 添加权限
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent addPermiss(PermissChangeOpenApiParam param) {
+        if (StringUtils.isEmpty(param.getProjectCode())) {
+            return ResultContent.buildFail("projectCode不能为空");
+        }
+        if (StringUtils.isEmpty(param.getUserId())) {
+            return ResultContent.buildFail("userId不能为空");
+        }
+        if (StringUtils.isEmpty(param.getDeviceId())) {
+            return ResultContent.buildFail("deviceId不能为空");
+        }
+        String projectOid = getOidByCode(param.getProjectCode());
+        if (StringUtils.isEmpty(projectOid)) {
+            return ResultContent.buildFail("projectCode不存在");
+        }
+        DevicePermiss entity = devicePermissDao.findTopByUserIdAndDeviceIdAndProjectOid(param.getUserId(), param.getDeviceId(), projectOid);
+        if (ObjectUtils.isNotEmpty(entity)) {
+            return ResultContent.buildFail("权限已存在");
+        }
+        List<OrganizationUser> orgUsers = organizationUserService.getUserOrgList(param.getUserId(), projectOid);
+        if (ObjectUtils.isEmpty(orgUsers)) {
+            return ResultContent.buildFail("用户不属于项目");
+        }
+        DevicePermissParam saveParam = new DevicePermissParam();
+        saveParam.setDeviceIds(List.of(param.getDeviceId()));
+        saveParam.setProjectOid(projectOid);
+        saveParam.setIds(orgUsers.stream().map(OrganizationUser::getId).collect(Collectors.toList()));
+        return devicePermissService.saveBindInfo(saveParam);
+    }
+
+    /**
+     * 查询用户的设备权限列表
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent<List<DevicePermissOpenApiModel>> getDevicePermissByUserId(UserOpenApiParam param) {
+        if (StringUtils.isEmpty(param.getProjectCode())) {
+            return ResultContent.buildFail("projectCode不能为空");
+        }
+        List<DevicePermissOpenApiModel> models = new ArrayList<>();
+        String projectOid = getOidByCode(param.getProjectCode());
+        if (StringUtils.isNotEmpty(projectOid)) {
+            List<DevicePermiss> list = devicePermissDao.findByUserIdAndProjectOid(param.getUserId(), projectOid);
+            if (ObjectUtils.isNotEmpty(list)) {
+                models = list.stream().map(this::toDevicePermissModel).collect(Collectors.toUnmodifiableList());
+            }
+        }
+        return ResultContent.buildSuccess(models);
+    }
+
     /**
      * 设备基础信息
      *
@@ -153,11 +280,37 @@ public class DevicePermissOpenApiService extends SuperService {
         return model;
     }
 
+    /**
+     * 设备权限
+     *
+     * @param entity
+     * @return
+     */
     public DevicePermissOpenApiModel toDevicePermissModel(DevicePermiss entity) {
         DevicePermissOpenApiModel model = new DevicePermissOpenApiModel();
         if (ObjectUtils.isEmpty(entity)) {
             BeanUtils.copyProperties(entity, model);
+            DeviceInfo deviceInfo = entity.getDeviceInfo();
+            if (ObjectUtils.isNotEmpty(deviceInfo)) {
+                model.setDeviceId(deviceInfo.getDeviceId());
+                model.setDeviceName(deviceInfo.getDeviceName());
+                model.setDeviceType(deviceInfo.getDeviceType());
+                model.setProjectInfoCode(deviceInfo.getProjectInfoCode());
+            }
 
+            UserAccount user = null;
+            OrganizationUser organizationUser = entity.getOrganizationUser();
+            if (ObjectUtils.isNotEmpty(organizationUser)) {
+                user = organizationUser.getUser();
+            }
+            if (ObjectUtils.isNotEmpty(user)) {
+                model.setCode(organizationUser.getCode());
+                model.setUserId(user.getUserId());
+                model.setName(user.getName());
+                model.setPhone(user.getPhone());
+                model.setProfilePic(user.getProfilePic());
+                model.setSex(user.getSex());
+            }
         }
         return model;
     }