From 1e77ace11c948fd08cd19d7d59999eb5c5e41e2f Mon Sep 17 00:00:00 2001 From: wangfs <15029758498@163.com> Date: Tue, 6 Jan 2026 23:20:23 +0800 Subject: [PATCH] 用户设备关系 --- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/DeviceUserController.java | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserPageReqVO.java | 38 ++++++++++++++++++++++++++++++++++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserRespVO.java | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserSaveReqVO.java | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/deviceuser/DeviceUserDO.java | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/deviceuser/DeviceUserMapper.java | 32 ++++++++++++++++++++++++++++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/deviceuser/DeviceUserService.java | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/deviceuser/DeviceUserServiceImpl.java | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-garden/src/main/resources/mapper/deviceuser/DeviceUserMapper.xml | 12 ++++++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/dept/DeptController.java | 10 ++++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptService.java | 7 +++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptServiceImpl.java | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/Dept.java | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeEntity.java | 15 +++++++++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeTest.java | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeUtils.java | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/UserDO.java | 13 +++++++++++++ 17 files changed, 840 insertions(+), 0 deletions(-) create mode 100644 urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/DeviceUserController.java create mode 100644 urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserPageReqVO.java create mode 100644 urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserRespVO.java create mode 100644 urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserSaveReqVO.java create mode 100644 urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/deviceuser/DeviceUserDO.java create mode 100644 urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/deviceuser/DeviceUserMapper.java create mode 100644 urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/deviceuser/DeviceUserService.java create mode 100644 urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/deviceuser/DeviceUserServiceImpl.java create mode 100644 urbanops-module-garden/src/main/resources/mapper/deviceuser/DeviceUserMapper.xml create mode 100644 urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/Dept.java create mode 100644 urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeEntity.java create mode 100644 urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeTest.java create mode 100644 urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeUtils.java create mode 100644 urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/UserDO.java diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/DeviceUserController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/DeviceUserController.java new file mode 100644 index 0000000..33d5018 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/DeviceUserController.java @@ -0,0 +1,104 @@ +package com.zteits.urbanops.module.garden.controller.admin.deviceuser; + +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import jakarta.validation.constraints.*; +import jakarta.validation.*; +import jakarta.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.zteits.urbanops.framework.common.pojo.PageParam; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.CommonResult; +import com.zteits.urbanops.framework.common.util.object.BeanUtils; +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; + +import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; + +import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog; +import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*; + +import com.zteits.urbanops.module.garden.controller.admin.deviceuser.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.deviceuser.DeviceUserDO; +import com.zteits.urbanops.module.garden.service.deviceuser.DeviceUserService; + +@Tag(name = "管理后台 - 设备用户关系") +@RestController +@RequestMapping("/garden/device-user") +@Validated +public class DeviceUserController { + + @Resource + private DeviceUserService deviceUserService; + + @PostMapping("/create") + @Operation(summary = "创建设备用户关系") + @PreAuthorize("@ss.hasPermission('garden:device-user:create')") + public CommonResult createDeviceUser(@Valid @RequestBody DeviceUserSaveReqVO createReqVO) { + return success(deviceUserService.createDeviceUser(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新设备用户关系") + @PreAuthorize("@ss.hasPermission('garden:device-user:update')") + public CommonResult updateDeviceUser(@Valid @RequestBody DeviceUserSaveReqVO updateReqVO) { + deviceUserService.updateDeviceUser(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除设备用户关系") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('garden:device-user:delete')") + public CommonResult deleteDeviceUser(@RequestParam("id") Long id) { + deviceUserService.deleteDeviceUser(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除设备用户关系") + @PreAuthorize("@ss.hasPermission('garden:device-user:delete')") + public CommonResult deleteDeviceUserList(@RequestParam("ids") List ids) { + deviceUserService.deleteDeviceUserListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得设备用户关系") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('garden:device-user:query')") + public CommonResult getDeviceUser(@RequestParam("id") Long id) { + DeviceUserDO deviceUser = deviceUserService.getDeviceUser(id); + return success(BeanUtils.toBean(deviceUser, DeviceUserRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得设备用户关系分页") + @PreAuthorize("@ss.hasPermission('garden:device-user:query')") + public CommonResult> getDeviceUserPage(@Valid DeviceUserPageReqVO pageReqVO) { + PageResult pageResult = deviceUserService.getDeviceUserPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, DeviceUserRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出设备用户关系 Excel") + @PreAuthorize("@ss.hasPermission('garden:device-user:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportDeviceUserExcel(@Valid DeviceUserPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = deviceUserService.getDeviceUserPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "设备用户关系.xls", "数据", DeviceUserRespVO.class, + BeanUtils.toBean(list, DeviceUserRespVO.class)); + } + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserPageReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserPageReqVO.java new file mode 100644 index 0000000..3b4dd1c --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserPageReqVO.java @@ -0,0 +1,38 @@ +package com.zteits.urbanops.module.garden.controller.admin.deviceuser.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.zteits.urbanops.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 设备用户关系分页 Request VO") +@Data +public class DeviceUserPageReqVO extends PageParam { + + @Schema(description = "归属(一级部门id)", example = "22641") + private Long companyId; + + @Schema(description = "部门ID(道路负责部门id)", example = "15793") + private Long deptId; + + + @Schema(description = "提交人用户", example = "芋艿") + private String userName; + + @Schema(description = "产品名称", example = "张三") + private String productName; + + @Schema(description = "设备标识") + private String deviceNo; + + @Schema(description = "设备名称", example = "张三") + private String deviceName; + + @Schema(description = "设备状态") + private Integer deviceState; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserRespVO.java new file mode 100644 index 0000000..e452d75 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserRespVO.java @@ -0,0 +1,61 @@ +package com.zteits.urbanops.module.garden.controller.admin.deviceuser.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 设备用户关系 Response VO") +@Data +@ExcelIgnoreUnannotated +public class DeviceUserRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12043") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "归属(一级部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "22641") + @ExcelProperty("归属(一级部门id)") + private Long companyId; + + @Schema(description = "部门ID(道路负责部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "15793") + @ExcelProperty("部门ID(道路负责部门id)") + private Long deptId; + + @Schema(description = "提交人用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7034") + @ExcelProperty("提交人用户ID") + private Long userId; + + @Schema(description = "提交人用户", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @ExcelProperty("提交人用户") + private String userName; + + @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("产品名称") + private String productName; + + @Schema(description = "设备标识", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("设备标识") + private String deviceNo; + + @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("设备名称") + private String deviceName; + + @Schema(description = "设备状态 1:在线;2:离线;3:未知", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("设备状态 1:在线;2:离线;3:未知") + private Integer deviceState; + + @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("创建人") + private String creatorName; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + +} diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserSaveReqVO.java new file mode 100644 index 0000000..bf70fbc --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/deviceuser/vo/DeviceUserSaveReqVO.java @@ -0,0 +1,55 @@ +package com.zteits.urbanops.module.garden.controller.admin.deviceuser.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 设备用户关系新增/修改 Request VO") +@Data +public class DeviceUserSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12043") + private Long id; + + @Schema(description = "归属(一级部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "22641") + @NotNull(message = "归属(一级部门id)不能为空") + private Long companyId; + + @Schema(description = "部门ID(道路负责部门id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "15793") + @NotNull(message = "部门ID(道路负责部门id)不能为空") + private Long deptId; + + @Schema(description = "提交人用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7034") + @NotNull(message = "提交人用户ID不能为空") + private Long userId; + + @Schema(description = "提交人用户", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @NotEmpty(message = "提交人用户不能为空") + private String userName; + + @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "产品名称不能为空") + private String productName; + + @Schema(description = "设备标识", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "设备标识不能为空") + private String deviceNo; + + @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "设备名称不能为空") + private String deviceName; + + @Schema(description = "设备状态 1:在线;2:离线;3:未知", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "设备状态不能为空") + private Integer deviceState; + + @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "创建人不能为空") + private String creatorName; + + @Schema(description = "更新者", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @NotEmpty(message = "更新者不能为空") + private String updaterName; + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/deviceuser/DeviceUserDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/deviceuser/DeviceUserDO.java new file mode 100644 index 0000000..85a6466 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/deviceuser/DeviceUserDO.java @@ -0,0 +1,72 @@ +package com.zteits.urbanops.module.garden.dal.dataobject.deviceuser; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO; + +/** + * 设备用户关系 DO + * + * @author 超级管理员 + */ +@TableName("garden_device_user") +@KeySequence("garden_device_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DeviceUserDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 归属(一级部门id) + */ + private Long companyId; + /** + * 部门ID(道路负责部门id) + */ + private Long deptId; + /** + * 提交人用户ID + */ + private Long userId; + /** + * 提交人用户 + */ + private String userName; + /** + * 产品名称 + */ + private String productName; + /** + * 设备标识 + */ + private String deviceNo; + /** + * 设备名称 + */ + private String deviceName; + /** + * 设备状态 1:在线;2:离线;3:未知 + */ + private Integer deviceState; + /** + * 创建人 + */ + private String creatorName; + /** + * 更新者 + */ + private String updaterName; + + +} diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/deviceuser/DeviceUserMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/deviceuser/DeviceUserMapper.java new file mode 100644 index 0000000..71f12db --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/deviceuser/DeviceUserMapper.java @@ -0,0 +1,32 @@ +package com.zteits.urbanops.module.garden.dal.mysql.deviceuser; + +import java.util.*; + +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX; +import com.zteits.urbanops.module.garden.dal.dataobject.deviceuser.DeviceUserDO; +import org.apache.ibatis.annotations.Mapper; +import com.zteits.urbanops.module.garden.controller.admin.deviceuser.vo.*; + +/** + * 设备用户关系 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface DeviceUserMapper extends BaseMapperX { + + default PageResult selectPage(DeviceUserPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(DeviceUserDO::getCompanyId, reqVO.getCompanyId()) + .eqIfPresent(DeviceUserDO::getDeptId, reqVO.getDeptId()) + .likeIfPresent(DeviceUserDO::getUserName, reqVO.getUserName()) + .likeIfPresent(DeviceUserDO::getProductName, reqVO.getProductName()) + .eqIfPresent(DeviceUserDO::getDeviceNo, reqVO.getDeviceNo()) + .likeIfPresent(DeviceUserDO::getDeviceName, reqVO.getDeviceName()) + .eqIfPresent(DeviceUserDO::getDeviceState, reqVO.getDeviceState()) + .orderByDesc(DeviceUserDO::getId)); + } + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/deviceuser/DeviceUserService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/deviceuser/DeviceUserService.java new file mode 100644 index 0000000..241b3f9 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/deviceuser/DeviceUserService.java @@ -0,0 +1,62 @@ +package com.zteits.urbanops.module.garden.service.deviceuser; + +import java.util.*; +import jakarta.validation.*; +import com.zteits.urbanops.module.garden.controller.admin.deviceuser.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.deviceuser.DeviceUserDO; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.PageParam; + +/** + * 设备用户关系 Service 接口 + * + * @author 超级管理员 + */ +public interface DeviceUserService { + + /** + * 创建设备用户关系 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDeviceUser(@Valid DeviceUserSaveReqVO createReqVO); + + /** + * 更新设备用户关系 + * + * @param updateReqVO 更新信息 + */ + void updateDeviceUser(@Valid DeviceUserSaveReqVO updateReqVO); + + /** + * 删除设备用户关系 + * + * @param id 编号 + */ + void deleteDeviceUser(Long id); + + /** + * 批量删除设备用户关系 + * + * @param ids 编号 + */ + void deleteDeviceUserListByIds(List ids); + + /** + * 获得设备用户关系 + * + * @param id 编号 + * @return 设备用户关系 + */ + DeviceUserDO getDeviceUser(Long id); + + /** + * 获得设备用户关系分页 + * + * @param pageReqVO 分页查询 + * @return 设备用户关系分页 + */ + PageResult getDeviceUserPage(DeviceUserPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/deviceuser/DeviceUserServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/deviceuser/DeviceUserServiceImpl.java new file mode 100644 index 0000000..b019ed1 --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/deviceuser/DeviceUserServiceImpl.java @@ -0,0 +1,85 @@ +package com.zteits.urbanops.module.garden.service.deviceuser; + +import cn.hutool.core.collection.CollUtil; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.zteits.urbanops.module.garden.controller.admin.deviceuser.vo.*; +import com.zteits.urbanops.module.garden.dal.dataobject.deviceuser.DeviceUserDO; +import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.pojo.PageParam; +import com.zteits.urbanops.framework.common.util.object.BeanUtils; + +import com.zteits.urbanops.module.garden.dal.mysql.deviceuser.DeviceUserMapper; + +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList; +import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList; +import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; + +/** + * 设备用户关系 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class DeviceUserServiceImpl implements DeviceUserService { + + @Resource + private DeviceUserMapper deviceUserMapper; + + @Override + public Long createDeviceUser(DeviceUserSaveReqVO createReqVO) { + // 插入 + DeviceUserDO deviceUser = BeanUtils.toBean(createReqVO, DeviceUserDO.class); + deviceUserMapper.insert(deviceUser); + + // 返回 + return deviceUser.getId(); + } + + @Override + public void updateDeviceUser(DeviceUserSaveReqVO updateReqVO) { + // 校验存在 + validateDeviceUserExists(updateReqVO.getId()); + // 更新 + DeviceUserDO updateObj = BeanUtils.toBean(updateReqVO, DeviceUserDO.class); + deviceUserMapper.updateById(updateObj); + } + + @Override + public void deleteDeviceUser(Long id) { + // 校验存在 + validateDeviceUserExists(id); + // 删除 + deviceUserMapper.deleteById(id); + } + + @Override + public void deleteDeviceUserListByIds(List ids) { + // 删除 + deviceUserMapper.deleteByIds(ids); + } + + + private void validateDeviceUserExists(Long id) { + if (deviceUserMapper.selectById(id) == null) { + //throw exception(DEVICE_USER_NOT_EXISTS); + } + } + + @Override + public DeviceUserDO getDeviceUser(Long id) { + return deviceUserMapper.selectById(id); + } + + @Override + public PageResult getDeviceUserPage(DeviceUserPageReqVO pageReqVO) { + return deviceUserMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/urbanops-module-garden/src/main/resources/mapper/deviceuser/DeviceUserMapper.xml b/urbanops-module-garden/src/main/resources/mapper/deviceuser/DeviceUserMapper.xml new file mode 100644 index 0000000..6e30d3a --- /dev/null +++ b/urbanops-module-garden/src/main/resources/mapper/deviceuser/DeviceUserMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/dept/DeptController.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/dept/DeptController.java index 0c59a11..c6cbc83 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/dept/DeptController.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/controller/admin/dept/DeptController.java @@ -11,6 +11,7 @@ import com.zteits.urbanops.module.system.controller.admin.dept.vo.dept.DeptSaveR import com.zteits.urbanops.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; import com.zteits.urbanops.module.system.dal.dataobject.dept.DeptDO; import com.zteits.urbanops.module.system.service.dept.DeptService; +import com.zteits.urbanops.module.system.util.tree.Dept; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -115,4 +116,13 @@ public class DeptController { List list = deptService.getSubDeptList(id); return success(BeanUtils.toBean(list, DeptRespVO.class)); } + + @GetMapping("/dept-user-tree") + @Operation(summary = "获取部门用户tree") + //@PreAuthorize("@ss.hasPermission('system:dept:query')") + public CommonResult> getDeptAndUserTree() { + List list = deptService.getDeptAndUserTree(); + return success(list); + } + } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptService.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptService.java index 05418bc..0de4a35 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptService.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptService.java @@ -4,6 +4,7 @@ import com.zteits.urbanops.framework.common.util.collection.CollectionUtils; import com.zteits.urbanops.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import com.zteits.urbanops.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO; import com.zteits.urbanops.module.system.dal.dataobject.dept.DeptDO; +import com.zteits.urbanops.module.system.util.tree.Dept; import java.util.*; @@ -144,4 +145,10 @@ public interface DeptService { * @return 末级list */ List getLastDeptList(Long id); + + /** + * 获取部门树 + * @return 部门树 + */ + List getDeptAndUserTree(); } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptServiceImpl.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptServiceImpl.java index 375322e..0e02add 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptServiceImpl.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/dept/DeptServiceImpl.java @@ -1,19 +1,26 @@ package com.zteits.urbanops.module.system.service.dept; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zteits.urbanops.framework.common.enums.CommonStatusEnum; +import com.zteits.urbanops.framework.common.util.collection.CollectionUtils; import com.zteits.urbanops.framework.common.util.object.BeanUtils; import com.zteits.urbanops.framework.datapermission.core.annotation.DataPermission; import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; import com.zteits.urbanops.module.system.controller.admin.dept.vo.dept.DeptListReqVO; import com.zteits.urbanops.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO; import com.zteits.urbanops.module.system.dal.dataobject.dept.DeptDO; +import com.zteits.urbanops.module.system.dal.dataobject.user.AdminUserDO; import com.zteits.urbanops.module.system.dal.mysql.dept.DeptMapper; +import com.zteits.urbanops.module.system.dal.mysql.user.AdminUserMapper; import com.zteits.urbanops.module.system.dal.redis.RedisKeyConstants; import com.google.common.annotations.VisibleForTesting; import com.zteits.urbanops.module.system.util.DeptTreeUtil; +import com.zteits.urbanops.module.system.util.tree.Dept; +import com.zteits.urbanops.module.system.util.tree.TreeUtils; +import com.zteits.urbanops.module.system.util.tree.UserDO; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -41,6 +48,9 @@ public class DeptServiceImpl implements DeptService { @Resource private DeptMapper deptMapper; + @Resource + private AdminUserMapper userMapper; + @Override @CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST, allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存 @@ -270,4 +280,46 @@ public class DeptServiceImpl implements DeptService { List allList = getSubDeptAllList(); return DeptTreeUtil.findLeafDeptDOs(allList, id); } + + @Override + public List getDeptAndUserTree() { + QueryWrapper sql = new QueryWrapper<>(); + sql.lambda().eq(DeptDO::getDeleted, 0); + List deptList = deptMapper.selectList(sql); + List deptListT = new ArrayList<>(); + for(DeptDO deptDO : deptList){ + Dept dept = new Dept(); + dept.setId(deptDO.getId()); + dept.setName(deptDO.getName()); + dept.setParentId(deptDO.getParentId()); + deptListT.add(dept); + } + if(CollectionUtil.isEmpty(deptListT)){ + return deptListT; + } + + + /*2.查询用户*/ + QueryWrapper userSql = new QueryWrapper<>(); + userSql.lambda().eq(AdminUserDO::getDeleted, 0); + List userList = userMapper.selectList(userSql); + if(CollectionUtil.isEmpty(userList)){ + return deptListT; + } + List userDOList = new ArrayList<>(); + for(AdminUserDO adminUserDO :userList){ + UserDO userDO = new UserDO(); + userDO.setUserId(adminUserDO.getId()); + userDO.setUsername(adminUserDO.getUsername()); + userDO.setDeptId(adminUserDO.getDeptId()); + userDOList.add(userDO); + } + + + for(Dept dept : deptListT){ + List userR = userDOList.stream().filter(user -> user.getDeptId().equals(dept.getId())).collect(Collectors.toList()); + dept.userList = userR; + } + return TreeUtils.getTreeList(deptListT); + } } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/Dept.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/Dept.java new file mode 100644 index 0000000..e42e191 --- /dev/null +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/Dept.java @@ -0,0 +1,64 @@ +package com.zteits.urbanops.module.system.util.tree; + +import com.zteits.urbanops.module.system.dal.dataobject.user.AdminUserDO; + +import java.util.List; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: Menu.java + * @Description: + * @version: v1.0.0 + * @author: wangfs + * @date: 2019-05-23 12:39 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2019-05-23 wangfs v1.0.0 创建 + */ + +public class Dept implements TreeEntity { + public Long id; + public String name; + public Long parentId; + public List childList; + + public List userList; + + @Override + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public Long getParentId() { + return parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + public List getChildList() { + return childList; + } + + @Override + public void setChildren(List childList) { + this.childList = childList; + } +} + diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeEntity.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeEntity.java new file mode 100644 index 0000000..b404eab --- /dev/null +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeEntity.java @@ -0,0 +1,15 @@ +package com.zteits.urbanops.module.system.util.tree; + +import java.util.List; + +/** + * 通用tree构建工具类 + * @param + */ +public interface TreeEntity { + public Long getId(); + + public Long getParentId(); + + public void setChildren(List children); +} diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeTest.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeTest.java new file mode 100644 index 0000000..5782ef3 --- /dev/null +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeTest.java @@ -0,0 +1,68 @@ +package com.zteits.urbanops.module.system.util.tree; +import com.alibaba.fastjson.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: TreeTest.java + * @Description: + * @version: v1.0.0 + * @author: wangfs + * @date: 2019-05-23 12:41 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2019-05-23 wangfs v1.0.0 创建 + */ + + +public class TreeTest { + public static void main(String[] args) { + List list = new ArrayList<>(); +// Menu menu1 = new Menu(); +// menu1.setId(1L); +// menu1.setParentId(0L); +// menu1.setName("菜单1"); +// list.add(menu1); +// +// Menu menu2 = new Menu(); +// menu2.setId(2L); +// menu2.setParentId(0L); +// menu2.setName("菜单2"); +// list.add(menu2); +// +// Menu menu3 = new Menu(); +// menu3.setId(3L); +// menu3.setParentId(1L); +// menu3.setName("菜单11"); +// list.add(menu3); +// +// Menu menu4 = new Menu(); +// menu4.setId(4L); +// menu4.setParentId(3L); +// menu4.setName("菜单111"); +// list.add(menu4);menu4 + Dept menu1 = new Dept(); + menu1.setId(1L); + menu1.setParentId(-1L); + menu1.setName("首页"); + list.add(menu1); + Dept menu2 = new Dept(); + menu2.setId(2L); + menu2.setParentId(-1L); + menu2.setName("系统管理"); + list.add(menu2); + Dept menu3 = new Dept(); + menu3.setId(-1L); + menu3.setParentId(0L); + menu3.setName("根节点"); + list.add(menu3); + List menus = TreeUtils.getTreeList(list); + System.out.println(JSONObject.toJSON(menus)); + } +} + + diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeUtils.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeUtils.java new file mode 100644 index 0000000..9113bb5 --- /dev/null +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/TreeUtils.java @@ -0,0 +1,90 @@ +package com.zteits.urbanops.module.system.util.tree; + +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +/** + * Copyright: Copyright (c) 2017 zteits + * + * @ClassName: TreeUtils.java + * @Description: + * @version: v1.0.0 + * @author: wangfs + * @date: 2019-05-23 12:40 + * Modification History: + * Date Author Version Description + * ---------------------------------------------------------* + * 2019-05-23 wangfs v1.0.0 创建 + */ + + +/** + * *解析树形数据工具类 + */ +public class TreeUtils { + /** + * * 解析树形数据 + * + * @param entityList + * @return + */ + public static > List getTreeList(List entityList) { + List resultList = new ArrayList<>(); + //没有根节点全部加入 + if(CollectionUtils.isEmpty(resultList)){ + for (E entity : entityList) { + resultList.add(entity); + } + } + + // 获取每个顶层元素的子数据集合 + List childListAll = new ArrayList<>(); + for (E entity : resultList) { + List childList = getSubList(entity.getId(), entityList); + if(!CollectionUtils.isEmpty(childList)){ + entity.setChildren(childList); + childListAll.addAll(childList); + } + + } + /** + * 因为childListAll中的对象都是从resultList添加的,删除掉 + */ + if(!CollectionUtils.isEmpty(childListAll)){ + resultList.removeAll(childListAll); + } + + return resultList; + } + + /** + * * 获取子数据集合 + * + * @param id + * @param entityList + * @return + */ + private static > List getSubList(Long id, List entityList) { + List childList = new ArrayList<>(); + Long parentId; + //子集的直接子对象 + for (E entity : entityList) { + parentId = entity.getParentId(); + if (id.equals(parentId)) { + childList.add(entity); + } + } + // 子集的间接子对象 + for (E entity : childList) { + entity.setChildren(getSubList(entity.getId(), entityList)); + } + // 递归退出条件 + if (childList.size() == 0) { + return null; + } + return childList; + } +} + + diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/UserDO.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/UserDO.java new file mode 100644 index 0000000..6c4de34 --- /dev/null +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/util/tree/UserDO.java @@ -0,0 +1,13 @@ +package com.zteits.urbanops.module.system.util.tree; + +import lombok.Data; + +@Data +public class UserDO { + + private Long userId; + + private String username; + + private Long deptId; +} -- libgit2 0.21.4