From 2108e2a1e29202e7fd6bd49d0e9c83c1dcb60cd9 Mon Sep 17 00:00:00 2001 From: shih <510524130@qq.com> Date: Wed, 1 Apr 2026 10:42:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=B1=BB=E5=9E=8B=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4=EF=BC=8C=E8=A1=A8=E5=8D=95=E5=BC=80=E5=8F=91=E4=B8=AD?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=BE=E5=A4=87=E7=B1=BB=E5=9E=8B=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=89=80=E9=9C=80=E7=9A=84=E6=8E=A5=E5=8F=A3=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E3=80=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/adapter/FrameWorkAdapter.java | 15 ++ .../controller/DbFormController.java | 9 + .../core/framework/params/DictLabelParam.java | 3 + .../system/constant/ErrorCodeConstants.java | 9 + .../system/controller/SblxController.java | 85 ++++++++++ .../controller/vo/sblx/SblxListReqVO.java | 13 ++ .../system/controller/vo/sblx/SblxRespVO.java | 30 ++++ .../controller/vo/sblx/SblxSaveReqVO.java | 34 ++++ .../controller/vo/sblx/SblxSimpleRespVO.java | 23 +++ .../service/system/entity/SblxDO.java | 50 ++++++ .../service/system/mapper/SblxMapper.java | 32 ++++ .../service/system/service/ISblxService.java | 54 ++++++ .../system/service/impl/SblxServiceImpl.java | 155 ++++++++++++++++++ .../yunji/adapter/IlideeYunjiAdapter.java | 2 + 14 files changed, 514 insertions(+) create mode 100644 lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/SblxController.java create mode 100644 lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxListReqVO.java create mode 100644 lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxRespVO.java create mode 100644 lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxSaveReqVO.java create mode 100644 lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxSimpleRespVO.java create mode 100644 lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/entity/SblxDO.java create mode 100644 lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/mapper/SblxMapper.java create mode 100644 lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/service/ISblxService.java create mode 100644 lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/service/impl/SblxServiceImpl.java diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/adapter/FrameWorkAdapter.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/adapter/FrameWorkAdapter.java index 0f57acb..9039e64 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/adapter/FrameWorkAdapter.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/adapter/FrameWorkAdapter.java @@ -338,6 +338,21 @@ public class FrameWorkAdapter implements IlideeYunjiAdapter { } + //回显设备类型 + @TenantIgnore + @Override + public List> getSblxViewList(List sblxIdList) { + SqlInfoQueryWrapper.Wrapper wrapper = SqlHelper.getQueryWrapper() + .select("id", "industry_name AS industryName") + .setTableName("dev_sblx") + .setWhere(where -> { + where.in("id", sblxIdList); + }) + .build(); + List> dataList = sqlService.getDataListByPlus(wrapper); + return dataList; + } + //获取用户分页列表 @Override public Object getUserPage(Integer pageNo, Integer pageSize, lideeYunJiUserParam param) { diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/DbFormController.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/DbFormController.java index 4248576..97a5425 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/DbFormController.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/controller/DbFormController.java @@ -285,6 +285,10 @@ public class DbFormController extends BaseController { String deptormatSql="(select name from system_dept where id ="+label+") as "+label; fieldList.set(ind,deptormatSql);//子查询 break; + case "sblxSelect": + String sblxormatSql="(select industry_name from dev_sblx where id ="+label+") as "+label; + fieldList.set(ind,sblxormatSql);//子查询 + break; } } } @@ -306,6 +310,7 @@ public class DbFormController extends BaseController { List dataList = labelParam.getDataList(); List userIdList = labelParam.getUserIdList();//用户id List deptIdList = labelParam.getDeptIdList();//部门id + List sblxIdList = labelParam.getSblxIdList();//设备类型id if (Func.isNotEmpty(dbformId)) { //自定义表 String mapKey = dbformId + "&" + label; @@ -341,6 +346,10 @@ public class DbFormController extends BaseController { List> deptViewList = lideeYunJiAdapter.getDeptViewList(deptIdList); resultMap.put("deptList", deptViewList); } + if (Func.isNotEmpty(sblxIdList)) {//部门表回显 + List> sblxViewList = lideeYunJiAdapter.getSblxViewList(sblxIdList); + resultMap.put("sblxList", sblxViewList); + } })).get(); } catch (InterruptedException | ExecutionException e) { throw new RuntimeException(e.getMessage()); diff --git a/lidee-core/src/main/java/com/lideeyunji/core/framework/params/DictLabelParam.java b/lidee-core/src/main/java/com/lideeyunji/core/framework/params/DictLabelParam.java index c43d7f1..4bdcc57 100644 --- a/lidee-core/src/main/java/com/lideeyunji/core/framework/params/DictLabelParam.java +++ b/lidee-core/src/main/java/com/lideeyunji/core/framework/params/DictLabelParam.java @@ -33,5 +33,8 @@ public class DictLabelParam { @Schema(description = "部门id列表") private List deptIdList; + @Schema(description = "设备类型id列表") + private List sblxIdList; + } diff --git a/lidee-service/lidee-service-system-api/src/main/java/com/lideeyunji/service/system/constant/ErrorCodeConstants.java b/lidee-service/lidee-service-system-api/src/main/java/com/lideeyunji/service/system/constant/ErrorCodeConstants.java index 5bc509d..7f513bf 100644 --- a/lidee-service/lidee-service-system-api/src/main/java/com/lideeyunji/service/system/constant/ErrorCodeConstants.java +++ b/lidee-service/lidee-service-system-api/src/main/java/com/lideeyunji/service/system/constant/ErrorCodeConstants.java @@ -198,4 +198,13 @@ public interface ErrorCodeConstants { // ========== 站内信发送 1-002-028-000 ========== ErrorCode NOTIFY_SEND_TEMPLATE_PARAM_MISS = new ErrorCode(1_002_028_000, "模板参数({})缺失"); + + // ========== 设备类型维护 1_002_029_000 ========== + ErrorCode SBLX_NAME_DUPLICATE = new ErrorCode(1_002_029_000, "已经存在该名字的设备类型"); + ErrorCode SBLX_EXITS_CHILDREN = new ErrorCode(1_002_029_001, "存在子设备类型,无法删除"); + ErrorCode SBLX_NOT_FOUND = new ErrorCode(1_002_029_002, "当前设备类型不存在"); + ErrorCode SBLX_PARENT_ERROR = new ErrorCode(1_002_029_003, "不能设置自己为父设备类型"); + ErrorCode SBLX_PARENT_NOT_EXITS = new ErrorCode(1_002_029_004,"父级设备类型不存在"); + ErrorCode SBLX_PARENT_IS_CHILD = new ErrorCode(1_002_029_005, "不能设置自己的子设备类型为父设备类型"); + } diff --git a/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/SblxController.java b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/SblxController.java new file mode 100644 index 0000000..7bf181c --- /dev/null +++ b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/SblxController.java @@ -0,0 +1,85 @@ +package com.lideeyunji.service.system.controller; + +import com.lideeyunji.service.system.controller.vo.dept.dept.DeptRespVO; +import com.lideeyunji.service.system.controller.vo.dept.dept.DeptSimpleRespVO; +import com.lideeyunji.service.system.controller.vo.sblx.SblxListReqVO; +import com.lideeyunji.service.system.controller.vo.sblx.SblxRespVO; +import com.lideeyunji.service.system.controller.vo.sblx.SblxSaveReqVO; +import com.lideeyunji.service.system.controller.vo.sblx.SblxSimpleRespVO; +import com.lideeyunji.service.system.entity.SblxDO; +import com.lideeyunji.service.system.service.ISblxService; +import com.lideeyunji.tool.framework.common.pojo.CommonResult; +import com.lideeyunji.tool.framework.common.util.object.BeanUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +import static com.lideeyunji.tool.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 设备类型") +@RestController +@RequestMapping("/system/sblx") +@Validated +public class SblxController { + + @Resource + private ISblxService sblxService; + + @PostMapping("create") + @Operation(tags = "设备类型管理",summary = "创建设备类型") + @PreAuthorize("@ss.hasPermission('system:sblx:create')") + public CommonResult createSblx(@Valid @RequestBody SblxSaveReqVO createReqVO) { + Long deptId = sblxService.createSblx(createReqVO); + return success(deptId); + } + + @PutMapping("update") + @Operation(tags = "设备类型管理",summary = "更新设备类型") + @PreAuthorize("@ss.hasPermission('system:sblx:update')") + public CommonResult updateSblx(@Valid @RequestBody SblxSaveReqVO updateReqVO) { + sblxService.updateSblx(updateReqVO); + return success(true); + } + + @DeleteMapping("delete") + @Operation(tags = "设备类型管理",summary = "删除设备类型") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:sblx:delete')") + public CommonResult deleteSblx(@RequestParam("id") Long id) { + sblxService.deleteSblx(id); + return success(true); + } + + @GetMapping("/list") + @Operation(tags = "设备类型管理",summary = "获取设备类型列表") + @PreAuthorize("@ss.hasPermission('system:sblx:query')") + public CommonResult> getSblxList(SblxListReqVO reqVO) { + List list = sblxService.getSblxList(reqVO); + return success(BeanUtils.toBean(list, SblxRespVO.class)); + } + + @GetMapping(value = {"/list-all-simple", "/simple-list"}) + @Operation(tags = "设备类型管理",summary = "获取设备类型精简信息列表", description = "主要用于前端的下拉选项") + public CommonResult> getSimpleDeptList() { + List list = sblxService.getSblxList( + new SblxListReqVO()); + return success(BeanUtils.toBean(list, SblxSimpleRespVO.class)); + } + + @GetMapping("/get") + @Operation(tags = "设备类型管理",summary = "获得设备类型信息") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:sblx:query')") + public CommonResult getDept(@RequestParam("id") Long id) { + SblxDO sblx = sblxService.getSblx(id); + return success(BeanUtils.toBean(sblx, DeptRespVO.class)); + } + +} diff --git a/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxListReqVO.java b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxListReqVO.java new file mode 100644 index 0000000..48dbfaa --- /dev/null +++ b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxListReqVO.java @@ -0,0 +1,13 @@ +package com.lideeyunji.service.system.controller.vo.sblx; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 设备类型列表 Request VO") +@Data +public class SblxListReqVO { + + @Schema(description = "设备类型名称,模糊匹配" ) + private String industryName; + +} diff --git a/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxRespVO.java b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxRespVO.java new file mode 100644 index 0000000..9aed175 --- /dev/null +++ b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxRespVO.java @@ -0,0 +1,30 @@ +package com.lideeyunji.service.system.controller.vo.sblx; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 设备类型信息 Response VO") +@Data +public class SblxRespVO { + + @Schema(description = "设备类型编号", example = "1024") + private Long id; + + @Schema(description = "设备类型名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String industryName; + + @Schema(description = "设备类型编码", requiredMode = Schema.RequiredMode.REQUIRED) + private String industryCode; + + @Schema(description = "父设备类型 ID", example = "1024") + private Long parentId; + + @Schema(description = "显示顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Integer sort; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") + private LocalDateTime createTime; + +} diff --git a/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxSaveReqVO.java b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxSaveReqVO.java new file mode 100644 index 0000000..dfcfbcc --- /dev/null +++ b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxSaveReqVO.java @@ -0,0 +1,34 @@ +package com.lideeyunji.service.system.controller.vo.sblx; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +@Schema(description = "管理后台 - 设备类型创建/修改 Request VO") +@Data +public class SblxSaveReqVO { + + @Schema(description = "设备类型id", example = "1024") + private Long id; + + @Schema(description = "设备类型名称", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "设备类型名称不能为空") + @Size(max = 30, message = "设备类型名称长度不能超过 30 个字符") + private String industryName; + + @Schema(description = "设备类型编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "设备类型编码不能为空") + @Size(max = 30, message = "设备类型编码长度不能超过 30 个字符") + private String industryCode; + + @Schema(description = "父设备类型 ID", example = "1024") + private Long parentId; + + @Schema(description = "显示顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "显示顺序不能为空") + private Integer sort; + +} diff --git a/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxSimpleRespVO.java b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxSimpleRespVO.java new file mode 100644 index 0000000..2b75f3a --- /dev/null +++ b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/controller/vo/sblx/SblxSimpleRespVO.java @@ -0,0 +1,23 @@ +package com.lideeyunji.service.system.controller.vo.sblx; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Schema(description = "管理后台 - 设备类型精简信息 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SblxSimpleRespVO { + + @Schema(description = "设备类型编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "设备类型名称", requiredMode = Schema.RequiredMode.REQUIRED) + private String industryName; + + @Schema(description = "父设备类型 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long parentId; + +} diff --git a/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/entity/SblxDO.java b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/entity/SblxDO.java new file mode 100644 index 0000000..4870e2d --- /dev/null +++ b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/entity/SblxDO.java @@ -0,0 +1,50 @@ +package com.lideeyunji.service.system.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.lideeyunji.tool.framework.common.enums.CommonStatusEnum; +import com.lideeyunji.tool.framework.mybatis.core.dataobject.BaseDO; +import com.lideeyunji.tool.framework.tenant.core.db.TenantBaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 设备类型表 + * + */ +@TableName("dev_sblx") +@Data +@EqualsAndHashCode(callSuper = true) +public class SblxDO extends BaseDO { + + public static final Long PARENT_ID_ROOT = 0L; + + /** + * 设备类型ID + */ + @TableId + private Long id; + + /** + * 设备类型名称 + */ + private String industryName; + + /** + * 设备类型编码 + */ + private String industryCode; + + /** + * 父设备类型ID + * + * 关联 {@link #id} + */ + private Long parentId; + + /** + * 显示顺序 + */ + private Integer sort; + + +} diff --git a/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/mapper/SblxMapper.java b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/mapper/SblxMapper.java new file mode 100644 index 0000000..a4aa72e --- /dev/null +++ b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/mapper/SblxMapper.java @@ -0,0 +1,32 @@ +package com.lideeyunji.service.system.mapper; + +import com.lideeyunji.service.system.controller.vo.sblx.SblxListReqVO; +import com.lideeyunji.service.system.entity.SblxDO; +import com.lideeyunji.tool.framework.mybatis.core.mapper.BaseMapperX; +import com.lideeyunji.tool.framework.mybatis.core.query.LambdaQueryWrapperX; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface SblxMapper extends BaseMapperX { + + default List selectList(SblxListReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(SblxDO::getIndustryName, reqVO.getIndustryName())); + } + + default SblxDO selectByParentIdAndName(Long parentId, String name) { + return selectOne(SblxDO::getParentId, parentId, SblxDO::getIndustryName, name); + } + + default Long selectCountByParentId(Long parentId) { + return selectCount(SblxDO::getParentId, parentId); + } + + default List selectListByParentId(Collection parentIds) { + return selectList(SblxDO::getParentId, parentIds); + } + +} diff --git a/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/service/ISblxService.java b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/service/ISblxService.java new file mode 100644 index 0000000..eb123aa --- /dev/null +++ b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/service/ISblxService.java @@ -0,0 +1,54 @@ +package com.lideeyunji.service.system.service; + +import com.lideeyunji.service.system.controller.vo.sblx.SblxListReqVO; +import com.lideeyunji.service.system.controller.vo.sblx.SblxSaveReqVO; +import com.lideeyunji.service.system.entity.SblxDO; + +import java.util.List; + +/** + * 设备类型 Service 接口 + * + */ +public interface ISblxService { + + /** + * 创建设备类型 + * + * @param createReqVO 设备类型信息 + * @return id + */ + Long createSblx(SblxSaveReqVO createReqVO); + + /** + * 更新设备类型信息 + * + * @param updateReqVO 设备类型信息 + */ + void updateSblx(SblxSaveReqVO updateReqVO); + + /** + * 删除设备类型信息 + * + * @param id + */ + void deleteSblx(Long id); + + /** + * 获得设备类型信息 + * + * @param id + * @return 设备类型信息 + */ + SblxDO getSblx(Long id); + + /** + * 筛选设备类型列表 + * + * @param reqVO 筛选条件请求 VO + * @return 设备类型信息列表 + */ + List getSblxList(SblxListReqVO reqVO); + + +} diff --git a/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/service/impl/SblxServiceImpl.java b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/service/impl/SblxServiceImpl.java new file mode 100644 index 0000000..eba6d2b --- /dev/null +++ b/lidee-service/lidee-service-system-biz/src/main/java/com/lideeyunji/service/system/service/impl/SblxServiceImpl.java @@ -0,0 +1,155 @@ +package com.lideeyunji.service.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.google.common.annotations.VisibleForTesting; +import com.lideeyunji.service.system.controller.vo.sblx.SblxListReqVO; +import com.lideeyunji.service.system.controller.vo.sblx.SblxSaveReqVO; +import com.lideeyunji.service.system.entity.SblxDO; +import com.lideeyunji.service.system.mapper.SblxMapper; +import com.lideeyunji.service.system.service.ISblxService; +import com.lideeyunji.tool.framework.common.util.object.BeanUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.Comparator; +import java.util.List; +import java.util.Objects; + +import static com.lideeyunji.service.system.constant.ErrorCodeConstants.*; +import static com.lideeyunji.tool.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 设备类型 Service 实现类 + * + */ +@Service +@Validated +@Slf4j +public class SblxServiceImpl implements ISblxService { + + @Resource + private SblxMapper sblxMapper; + + @Override + public Long createSblx(SblxSaveReqVO createReqVO) { + if (createReqVO.getParentId() == null) { + createReqVO.setParentId(SblxDO.PARENT_ID_ROOT); + } + // 校验父部门的有效性 + validateParentDept(null, createReqVO.getParentId()); + // 校验部门名的唯一性 + validateDeptNameUnique(null, createReqVO.getParentId(), createReqVO.getIndustryName()); + + // 插入 + SblxDO sblx = BeanUtils.toBean(createReqVO, SblxDO.class); + sblxMapper.insert(sblx); + return sblx.getId(); + } + + @Override + public void updateSblx(SblxSaveReqVO updateReqVO) { + if (updateReqVO.getParentId() == null) { + updateReqVO.setParentId(SblxDO.PARENT_ID_ROOT); + } + // 校验自己存在 + validateDeptExists(updateReqVO.getId()); + // 校验父部门的有效性 + validateParentDept(updateReqVO.getId(), updateReqVO.getParentId()); + // 校验部门名的唯一性 + validateDeptNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getIndustryName()); + + // 更新 + SblxDO updateObj = BeanUtils.toBean(updateReqVO, SblxDO.class); + sblxMapper.updateById(updateObj); + } + + @Override + public void deleteSblx(Long id) { + // 校验是否存在 + validateDeptExists(id); + // 校验是否有子部门 + if (sblxMapper.selectCountByParentId(id) > 0) { + throw exception(SBLX_EXITS_CHILDREN); + } + // 删除部门 + sblxMapper.deleteById(id); + } + + @VisibleForTesting + void validateDeptExists(Long id) { + if (id == null) { + return; + } + SblxDO sblx = sblxMapper.selectById(id); + if (sblx == null) { + throw exception(SBLX_NOT_FOUND); + } + } + + @VisibleForTesting + void validateParentDept(Long id, Long parentId) { + if (parentId == null || SblxDO.PARENT_ID_ROOT.equals(parentId)) { + return; + } + // 1. 不能设置自己为父部门 + if (Objects.equals(id, parentId)) { + throw exception(SBLX_PARENT_ERROR); + } + // 2. 父部门不存在 + SblxDO parentSblx = sblxMapper.selectById(parentId); + if (parentSblx == null) { + throw exception(SBLX_PARENT_NOT_EXITS); + } + // 3. 递归校验父部门,如果父部门是自己的子部门,则报错,避免形成环路 + if (id == null) { // id 为空,说明新增,不需要考虑环路 + return; + } + for (int i = 0; i < Short.MAX_VALUE; i++) { + // 3.1 校验环路 + parentId = parentSblx.getParentId(); + if (Objects.equals(id, parentId)) { + throw exception(SBLX_PARENT_IS_CHILD); + } + // 3.2 继续递归下一级父部门 + if (parentId == null || SblxDO.PARENT_ID_ROOT.equals(parentId)) { + break; + } + parentSblx = sblxMapper.selectById(parentId); + if (parentSblx == null) { + break; + } + } + } + + @VisibleForTesting + void validateDeptNameUnique(Long id, Long parentId, String name) { + SblxDO sblx = sblxMapper.selectByParentIdAndName(parentId, name); + if (sblx == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的部门 + if (id == null) { + throw exception(SBLX_NAME_DUPLICATE); + } + if (ObjectUtil.notEqual(sblx.getId(), id)) { + throw exception(SBLX_NAME_DUPLICATE); + } + } + + @Override + public SblxDO getSblx(Long id) { + return sblxMapper.selectById(id); + } + + @Override + public List getSblxList(SblxListReqVO reqVO) { + List list = sblxMapper.selectList(reqVO); + list.sort(Comparator.comparing(SblxDO::getSort)); + return list; + } + + + +} diff --git a/lidee-tool/tool-spring-boot-starter-yunji/src/main/java/com/lideeyunji/tool/framework/yunji/adapter/IlideeYunjiAdapter.java b/lidee-tool/tool-spring-boot-starter-yunji/src/main/java/com/lideeyunji/tool/framework/yunji/adapter/IlideeYunjiAdapter.java index 7545538..1fd9717 100644 --- a/lidee-tool/tool-spring-boot-starter-yunji/src/main/java/com/lideeyunji/tool/framework/yunji/adapter/IlideeYunjiAdapter.java +++ b/lidee-tool/tool-spring-boot-starter-yunji/src/main/java/com/lideeyunji/tool/framework/yunji/adapter/IlideeYunjiAdapter.java @@ -60,6 +60,8 @@ public interface IlideeYunjiAdapter { //回显部门 List> getDeptViewList(List deptIdList); + //设备类型 + List> getSblxViewList(List sblxIdList); //获取用户分页列表 Object getUserPage(Integer pageNo, Integer pageSize, lideeYunJiUserParam param);