diff --git a/core/pom.xml b/core/pom.xml
index 5c9a597..83b2460 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -156,6 +156,18 @@
mapstruct-processor
1.4.1.Final
+
+ javax.sip
+ jain-sip-ri
+ 1.3.0-91
+ compile
+
+
+ javax.sip
+ jain-sip-ri
+ 1.3.0-91
+ compile
+
diff --git a/core/src/main/java/com/dite/znpt/constant/Message.java b/core/src/main/java/com/dite/znpt/constant/Message.java
index 24a5037..e0ab24e 100644
--- a/core/src/main/java/com/dite/znpt/constant/Message.java
+++ b/core/src/main/java/com/dite/znpt/constant/Message.java
@@ -19,12 +19,19 @@ public class Message implements Serializable {
public static final String PROJECT_ID_IS_NOT_EXIST = "项目id不存在";
public static final String TURBINE_ID_IS_NOT_EXIST = "机组id不存在";
public static final String PART_ID_IS_NOT_EXIST = "部件id不存在";
- public static final String IMAGE_SOURCE_ID_NOT_EXIST_OR_ILLEGAL = "部件id不存在";
+ public static final String IMAGE_SOURCE_ID_NOT_EXIST_OR_ILLEGAL = "部件id不存在或者不合法";
public static final String USER_ID_NOT_EXIST = "用户id不存在";
+ public static final String USER_ID_NOT_EXIST_OR_ILLEGAL = "用户id不存在或者不合法";
public static final String ACCOUNT_EXIST = "用户账号已经存在,请重新输入";
public static final String MOBILE_EXIST = "手机号码已经存在,请重新输入";
public static final String EMAIL_EXIST = "邮箱已经存在,请重新输入";
- public static final String DEPT_PARENT_NOT_EXISTS = "父级部门不存在";
- public static final String DEPT_ID_NOT_EXISTS = "部门id不存在";
- public static final String POST_ID_NOT_EXISTS = "岗位id不存在";
+ public static final String IDENTITY_CARD_EXIST = "身份证已经存在,请重新输入";
+ public static final String DEPT_PARENT_NOT_EXIST = "父级部门不存在";
+ public static final String DEPT_ID_NOT_EXIST = "部门id不存在";
+ public static final String POST_ID_NOT_EXIST = "岗位id不存在";
+ public static final String POST_ID_NOT_EXIST_OR_ILLEGAL = "岗位id不存在或者不合法";
+ public static final String ROLE_ID_NOT_EXIST = "角色id不存在";
+ public static final String ROLE_ID_NOT_EXIST_OR_ILLEGAL = "角色id不存在或者不合法";
+ public static final String MENU_ID_NOT_EXIST = "菜单id不存在";
+ public static final String MENU_ID_NOT_EXIST_OR_ILLEGAL = "菜单id不存在或者不合法";
}
diff --git a/core/src/main/java/com/dite/znpt/converts/Converts.java b/core/src/main/java/com/dite/znpt/converts/Converts.java
index de30c63..ca16bd4 100644
--- a/core/src/main/java/com/dite/znpt/converts/Converts.java
+++ b/core/src/main/java/com/dite/znpt/converts/Converts.java
@@ -53,5 +53,15 @@ public interface Converts {
PostResp toPostResp(PostEntity entity);
+ RoleResp toRoleResp(RoleEntity entity);
+
+ List toRoleResp(List list);
+
+ RoleEntity toRoleEntity(RoleReq req);
+
+ MenuEntity toMenuEntity(MenuReq req);
+
+ MenuResp toMenuResp(MenuEntity entity);
+
}
diff --git a/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java
index 85abe4a..4758cd4 100644
--- a/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java
+++ b/core/src/main/java/com/dite/znpt/domain/entity/MenuEntity.java
@@ -63,8 +63,6 @@ public class MenuEntity extends AuditableEntity implements Serializable {
@TableField("visible")
private String visible;
-
-
@ExcelProperty("权限标识")
@ApiModelProperty("权限标识")
@TableField("perms")
diff --git a/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java
index 28ea120..fbdbe5a 100644
--- a/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java
+++ b/core/src/main/java/com/dite/znpt/domain/entity/RoleEntity.java
@@ -48,9 +48,15 @@ public class RoleEntity extends AuditableEntity implements Serializable {
@TableField("status")
private Integer status;
+
+ @ExcelProperty("备注")
+ @ApiModelProperty("备注")
+ @TableField("remark")
+ private String remark;
+
@ExcelProperty("删除标志(0代表存在 1代表删除)")
@ApiModelProperty("删除标志(0代表存在 1代表删除)")
@TableField("del_flag")
- private Integer delFlag;
+ private String delFlag;
}
diff --git a/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java
index 4681578..cabdef5 100644
--- a/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java
+++ b/core/src/main/java/com/dite/znpt/domain/entity/UserEntity.java
@@ -65,6 +65,10 @@ public class UserEntity extends AuditableEntity implements Serializable {
@TableField("name")
private String name;
+ @ApiModelProperty("所属部门")
+ @TableField("dept_id")
+ private String deptId;
+
@ExcelProperty("身份证")
@ApiModelProperty("身份证")
@TableField("identity_card")
diff --git a/core/src/main/java/com/dite/znpt/domain/entity/UserPostEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/UserPostEntity.java
new file mode 100644
index 0000000..a32e5ff
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/domain/entity/UserPostEntity.java
@@ -0,0 +1,35 @@
+package com.dite.znpt.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dite.znpt.domain.AuditableEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @Author: gaoxiong
+ * @Date: 2025/5/15 23:33
+ * @Description:
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("user_post")
+@ApiModel(value="UserPostEntity对象", description="用户和岗位信息表")
+public class UserPostEntity extends AuditableEntity implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = -4046474045225600954L;
+
+ @ApiModelProperty("用户id")
+ @TableField("user_id")
+ private String userId;
+
+ @ApiModelProperty("岗位id")
+ @TableField("post_id")
+ private String postId;
+}
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java b/core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java
new file mode 100644
index 0000000..5783322
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/domain/vo/MenuReq.java
@@ -0,0 +1,52 @@
+package com.dite.znpt.domain.vo;
+
+import com.dite.znpt.util.ValidationGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 12:31
+ * @description
+ */
+@Data
+@ApiModel("菜单信息请求实体")
+public class MenuReq implements Serializable {
+ @Serial
+ private static final long serialVersionUID = -7141367511437222477L;
+
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "菜单名称不能为空")
+ @Size(max = 10, message = "菜单名称不能超过10个字符")
+ @ApiModelProperty("菜单名称")
+ private String menuName;
+
+ @ApiModelProperty("父级菜单id")
+ private String parentId;
+
+ @ApiModelProperty("显示顺序")
+ private Integer orderNum;
+
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "请求地址不能超过100个字符")
+ @ApiModelProperty("请求地址")
+ private String url;
+
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "菜单类型不能为空")
+ @ApiModelProperty("菜单类型")
+ private String menuType;
+
+ @ApiModelProperty("显示状态")
+ private String visible;
+
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "备注不能超过50个字符")
+ @ApiModelProperty("参数")
+ private String perms;
+
+
+
+}
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java b/core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java
new file mode 100644
index 0000000..f533983
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/domain/vo/MenuResp.java
@@ -0,0 +1,45 @@
+package com.dite.znpt.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 12:31
+ * @description
+ */
+@Data
+@ApiModel("菜单信息响应实体")
+public class MenuResp implements Serializable {
+ @Serial
+ private static final long serialVersionUID = -153724438320680595L;
+
+ @ApiModelProperty("菜单id")
+ private String menuId;
+
+ @ApiModelProperty("菜单名称")
+ private String menuName;
+
+ @ApiModelProperty("父级菜单id")
+ private String parentId;
+
+ @ApiModelProperty("显示顺序")
+ private String orderNum;
+
+ @ApiModelProperty("请求地址")
+ private String url;
+
+ @ApiModelProperty("菜单类型")
+ private String menuType;
+
+ @ApiModelProperty("显示状态")
+ private String visible;
+
+ @ApiModelProperty("参数")
+ private String perms;
+
+}
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/RoleMenuReq.java b/core/src/main/java/com/dite/znpt/domain/vo/RoleMenuReq.java
new file mode 100644
index 0000000..f7b6663
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/domain/vo/RoleMenuReq.java
@@ -0,0 +1,32 @@
+package com.dite.znpt.domain.vo;
+
+import com.dite.znpt.util.ValidationGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 17:33
+ * @description
+ */
+@Data
+@ApiModel("角色菜单绑定请求实体")
+public class RoleMenuReq implements Serializable {
+ @Serial
+ private static final long serialVersionUID = -7759529835730562338L;
+
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "角色id不能为空")
+ @ApiModelProperty(value = "角色id", required = true)
+ private String roleId;
+
+ @NotEmpty(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "菜单id不能为空")
+ @ApiModelProperty(value = "菜单id", required = true)
+ private List menuIds;
+}
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/RoleReq.java b/core/src/main/java/com/dite/znpt/domain/vo/RoleReq.java
new file mode 100644
index 0000000..40134e0
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/domain/vo/RoleReq.java
@@ -0,0 +1,40 @@
+package com.dite.znpt.domain.vo;
+
+import com.dite.znpt.util.ValidationGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 12:29
+ * @description
+ */
+@Data
+@ApiModel("角色信息请求实体")
+public class RoleReq implements Serializable {
+ @Serial
+ private static final long serialVersionUID = -4581059117664119614L;
+
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "角色名称不能为空")
+ @Size(max = 30, message = "角色名称不能超过30个字符")
+ @ApiModelProperty("角色名称")
+ private String roleName;
+
+ @NotBlank(groups = {ValidationGroup.Insert.class}, message = "角色权限字符不能为空")
+ @Size(groups = {ValidationGroup.Insert.class}, max = 20, message = "角色权限字符不能超过20个字符")
+ @ApiModelProperty("角色权限字符")
+ private String roleKey;
+
+ @ApiModelProperty("状态")
+ private Integer status;
+
+ @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 200, message = "备注不能超过200个字符")
+ @ApiModelProperty("备注")
+ private String remark;
+}
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/RoleResp.java b/core/src/main/java/com/dite/znpt/domain/vo/RoleResp.java
new file mode 100644
index 0000000..a8c5390
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/domain/vo/RoleResp.java
@@ -0,0 +1,36 @@
+package com.dite.znpt.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 12:26
+ * @description
+ */
+@Data
+@ApiModel("角色信息响应实体")
+public class RoleResp implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = -144489103121775926L;
+
+ @ApiModelProperty("角色id")
+ private String roleId;
+
+ @ApiModelProperty("角色名称")
+ private String roleName;
+
+ @ApiModelProperty("角色权限字符")
+ private String roleKey;
+
+ @ApiModelProperty("状态")
+ private String status;
+
+ @ApiModelProperty("备注")
+ private String remark;
+}
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java
index 4916041..6d60091 100644
--- a/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java
+++ b/core/src/main/java/com/dite/znpt/domain/vo/UserListReq.java
@@ -23,6 +23,12 @@ public class UserListReq implements Serializable {
@ApiModelProperty("姓名")
private String name;
+ @ApiModelProperty("所属部门id")
+ private String deptId;
+
+ @ApiModelProperty("岗位id")
+ private String postId;
+
@ApiModelProperty("手机号码")
private String mobile;
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java
index 155c991..f99c724 100644
--- a/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java
+++ b/core/src/main/java/com/dite/znpt/domain/vo/UserListResp.java
@@ -1,5 +1,6 @@
package com.dite.znpt.domain.vo;
+import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -26,38 +27,34 @@ public class UserListResp implements Serializable {
@ApiModelProperty("账号")
private String account;
- @ApiModelProperty("头像地址")
- private String avatar;
-
@ApiModelProperty("1正常0禁用")
private Integer status;
@ApiModelProperty("姓名")
private String name;
+ @ApiModelProperty("所属部门名称")
+ private String deptName;
+
+ @ApiModelProperty("岗位名称")
+ private String postName;
+
@ApiModelProperty("身份证")
private String identityCard;
- @ApiModelProperty("性别")
- private String gender;
-
@ApiModelProperty("手机号码")
private String mobile;
@ApiModelProperty("邮箱")
private String email;
+ @JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("入职日期")
private LocalDate hiredate;
+ @JsonFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty("出生日期")
private LocalDate birthdate;
- @ApiModelProperty("学历")
- private String education;
-
- @ApiModelProperty("专业方向")
- private String majorField;
-
}
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java b/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java
index 1ca16c3..cee022c 100644
--- a/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java
+++ b/core/src/main/java/com/dite/znpt/domain/vo/UserReq.java
@@ -10,6 +10,7 @@ import javax.validation.constraints.*;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
+import java.util.List;
/**
* @Author: gaoxiong
@@ -38,6 +39,12 @@ public class UserReq implements Serializable {
@ApiModelProperty("姓名")
private String name;
+ @ApiModelProperty("所属部门")
+ private String deptId;
+
+ @ApiModelProperty("岗位")
+ private List postIds;
+
@Pattern(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, regexp = "^$|\\d(?:\\d{15}|\\d{17})$", message = "身份证号码格式不正确")
@ApiModelProperty("身份证")
private String identityCard;
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java b/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java
index 27d825c..fe1bf6d 100644
--- a/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java
+++ b/core/src/main/java/com/dite/znpt/domain/vo/UserResp.java
@@ -25,6 +25,12 @@ public class UserResp extends UserReq implements Serializable{
@ApiModelProperty("账号")
private String account;
+ @ApiModelProperty("所属部门")
+ private String deptName;
+
+ @ApiModelProperty("岗位,多个岗位英文逗号隔开")
+ private String postName;
+
@ApiModelProperty("学历描述")
private String educationLabel;
diff --git a/core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java b/core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java
new file mode 100644
index 0000000..4f7502d
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/domain/vo/UserRoleReq.java
@@ -0,0 +1,32 @@
+package com.dite.znpt.domain.vo;
+
+import com.dite.znpt.util.ValidationGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 17:41
+ * @description
+ */
+@Data
+@ApiModel("用户角色绑定请求实体")
+public class UserRoleReq implements Serializable {
+ @Serial
+ private static final long serialVersionUID = -1334908025320245685L;
+
+ @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "用户id不能为空")
+ @ApiModelProperty("用户id")
+ private String userId;
+
+ @NotEmpty(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "角色id不能为空")
+ @ApiModelProperty("角色id")
+ private List roleIds;
+}
diff --git a/core/src/main/java/com/dite/znpt/enums/EducationEnum.java b/core/src/main/java/com/dite/znpt/enums/EducationEnum.java
index 7e4880a..fef6b8a 100644
--- a/core/src/main/java/com/dite/znpt/enums/EducationEnum.java
+++ b/core/src/main/java/com/dite/znpt/enums/EducationEnum.java
@@ -46,7 +46,7 @@ public enum EducationEnum {
return null == e ? null : e.desc;
}
- public static List list(){
+ public static List listAll(){
List list = new ArrayList<>(EducationEnum.values().length);
for (EducationEnum e : EducationEnum.values() ) {
JSONObject jsonObject = new JSONObject();
diff --git a/core/src/main/java/com/dite/znpt/enums/GenderEnum.java b/core/src/main/java/com/dite/znpt/enums/GenderEnum.java
index 957fb95..11a57bc 100644
--- a/core/src/main/java/com/dite/znpt/enums/GenderEnum.java
+++ b/core/src/main/java/com/dite/znpt/enums/GenderEnum.java
@@ -39,7 +39,7 @@ public enum GenderEnum {
return null == e ? null : e.desc;
}
- public static List list(){
+ public static List listAll(){
List list = new ArrayList<>(GenderEnum.values().length);
for (GenderEnum e : GenderEnum.values() ) {
JSONObject jsonObject = new JSONObject();
diff --git a/core/src/main/java/com/dite/znpt/enums/MenuTypeEnum.java b/core/src/main/java/com/dite/znpt/enums/MenuTypeEnum.java
new file mode 100644
index 0000000..3cd0543
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/enums/MenuTypeEnum.java
@@ -0,0 +1,52 @@
+package com.dite.znpt.enums;
+
+import cn.hutool.json.JSONObject;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 14:44
+ * @description
+ */
+@Getter
+public enum MenuTypeEnum {
+
+ DEFECT("catalog", "目录"),
+ TYPICAL("route", "菜单"),
+ OTHER("button", "按钮");
+
+ private final String code;
+ private final String desc;
+
+ MenuTypeEnum(String code, String desc){
+ this.code = code;
+ this.desc = desc;
+ }
+
+ public static MenuTypeEnum getByCode(String code){
+ for (MenuTypeEnum e : MenuTypeEnum.values() ) {
+ if(e.code.equals(code)){
+ return e;
+ }
+ }
+ return null;
+ }
+
+ public static String getDescByCode(String code){
+ MenuTypeEnum e = getByCode(code);
+ return null == e ? null : e.desc;
+ }
+
+ public static List listAll(){
+ List list = new ArrayList<>(MenuTypeEnum.values().length);
+ for (MenuTypeEnum e : MenuTypeEnum.values() ) {
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.set(e.code, e.desc);
+ list.add(jsonObject);
+ }
+ return list;
+ }
+}
diff --git a/core/src/main/java/com/dite/znpt/mapper/MenuMapper.java b/core/src/main/java/com/dite/znpt/mapper/MenuMapper.java
new file mode 100644
index 0000000..831a489
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/mapper/MenuMapper.java
@@ -0,0 +1,33 @@
+package com.dite.znpt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dite.znpt.domain.entity.DeptEntity;
+import com.dite.znpt.domain.entity.MenuEntity;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 10:16
+ * @description
+ */
+public interface MenuMapper extends BaseMapper {
+ /**
+ * @Author Bear.G
+ * @Date 2025/5/20/周二 15:49
+ * @description 向上递归查询菜单树
+ * @param menuName
+ * @return
+ **/
+ List upwardRecursionSelect(@Param("menuName") String menuName);
+
+ /**
+ * @Author Bear.G
+ * @Date 2025/5/20/周二 15:49
+ * @description 向下递归查询菜单树
+ * @param menuId
+ * @return
+ **/
+ List downwardRecursionSelect(@Param("menuId") String menuId);
+}
diff --git a/core/src/main/java/com/dite/znpt/mapper/RoleMapper.java b/core/src/main/java/com/dite/znpt/mapper/RoleMapper.java
new file mode 100644
index 0000000..e1cfdbf
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/mapper/RoleMapper.java
@@ -0,0 +1,12 @@
+package com.dite.znpt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dite.znpt.domain.entity.RoleEntity;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 10:16
+ * @description
+ */
+public interface RoleMapper extends BaseMapper {
+}
diff --git a/core/src/main/java/com/dite/znpt/mapper/RoleMenuMapper.java b/core/src/main/java/com/dite/znpt/mapper/RoleMenuMapper.java
new file mode 100644
index 0000000..227df93
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/mapper/RoleMenuMapper.java
@@ -0,0 +1,12 @@
+package com.dite.znpt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dite.znpt.domain.entity.RoleMenuEntity;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 10:17
+ * @description
+ */
+public interface RoleMenuMapper extends BaseMapper {
+}
diff --git a/core/src/main/java/com/dite/znpt/mapper/UserMapper.java b/core/src/main/java/com/dite/znpt/mapper/UserMapper.java
index 51cd24b..ac20a77 100644
--- a/core/src/main/java/com/dite/znpt/mapper/UserMapper.java
+++ b/core/src/main/java/com/dite/znpt/mapper/UserMapper.java
@@ -3,6 +3,7 @@ package com.dite.znpt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dite.znpt.domain.entity.UserEntity;
import com.dite.znpt.domain.vo.UserListReq;
+import com.dite.znpt.domain.vo.UserListResp;
import com.dite.znpt.domain.vo.UserResp;
import java.util.List;
@@ -13,6 +14,6 @@ import java.util.List;
* @Description: 用户信息表数据库访问层
*/
public interface UserMapper extends BaseMapper {
- List queryBySelective(UserListReq req);
+ List queryBySelective(UserListReq req);
}
diff --git a/core/src/main/java/com/dite/znpt/mapper/UserPostMapper.java b/core/src/main/java/com/dite/znpt/mapper/UserPostMapper.java
new file mode 100644
index 0000000..fee40fd
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/mapper/UserPostMapper.java
@@ -0,0 +1,12 @@
+package com.dite.znpt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dite.znpt.domain.entity.UserPostEntity;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 10:15
+ * @description
+ */
+public interface UserPostMapper extends BaseMapper {
+}
diff --git a/core/src/main/java/com/dite/znpt/mapper/UserRoleMapper.java b/core/src/main/java/com/dite/znpt/mapper/UserRoleMapper.java
new file mode 100644
index 0000000..0e0065c
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/mapper/UserRoleMapper.java
@@ -0,0 +1,12 @@
+package com.dite.znpt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dite.znpt.domain.entity.UserRoleEntity;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 10:16
+ * @description
+ */
+public interface UserRoleMapper extends BaseMapper {
+}
diff --git a/core/src/main/java/com/dite/znpt/service/MenuService.java b/core/src/main/java/com/dite/znpt/service/MenuService.java
new file mode 100644
index 0000000..d57c773
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/service/MenuService.java
@@ -0,0 +1,23 @@
+package com.dite.znpt.service;
+
+import cn.hutool.core.lang.tree.Tree;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dite.znpt.domain.entity.MenuEntity;
+import com.dite.znpt.domain.vo.MenuReq;
+import com.dite.znpt.domain.vo.MenuResp;
+
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 10:24
+ * @description
+ */
+public interface MenuService extends IService {
+
+ List> tree(String menuName);
+ MenuResp detail(String menuId);
+ void save(MenuReq req);
+ void update(String menuId, MenuReq req);
+ void deleteById(String menuId);
+}
diff --git a/core/src/main/java/com/dite/znpt/service/RoleMenuService.java b/core/src/main/java/com/dite/znpt/service/RoleMenuService.java
new file mode 100644
index 0000000..f7f150b
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/service/RoleMenuService.java
@@ -0,0 +1,17 @@
+package com.dite.znpt.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dite.znpt.domain.entity.RoleMenuEntity;
+import com.dite.znpt.domain.vo.RoleMenuReq;
+
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 16:01
+ * @description
+ */
+public interface RoleMenuService extends IService {
+
+ void bindRoleMenu(RoleMenuReq req);
+}
diff --git a/core/src/main/java/com/dite/znpt/service/RoleService.java b/core/src/main/java/com/dite/znpt/service/RoleService.java
new file mode 100644
index 0000000..2cd626a
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/service/RoleService.java
@@ -0,0 +1,28 @@
+package com.dite.znpt.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dite.znpt.domain.entity.RoleEntity;
+import com.dite.znpt.domain.vo.RoleReq;
+import com.dite.znpt.domain.vo.RoleResp;
+
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 10:24
+ * @description
+ */
+public interface RoleService extends IService {
+
+ List page(String roleName);
+
+ List list(String roleName);
+
+ void save(RoleReq req);
+
+ void update(String roleId, RoleReq req);
+
+ void deleteById(String id);
+
+ RoleResp detail(String roleId);
+}
diff --git a/core/src/main/java/com/dite/znpt/service/UserPostService.java b/core/src/main/java/com/dite/znpt/service/UserPostService.java
new file mode 100644
index 0000000..4b67fd3
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/service/UserPostService.java
@@ -0,0 +1,16 @@
+package com.dite.znpt.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dite.znpt.domain.entity.UserPostEntity;
+
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 15:39
+ * @description
+ */
+public interface UserPostService extends IService {
+ void bindUserPost(String userId, List postIds);
+ void bindPostUser(String postId, List userIds);
+}
diff --git a/core/src/main/java/com/dite/znpt/service/UserRoleService.java b/core/src/main/java/com/dite/znpt/service/UserRoleService.java
new file mode 100644
index 0000000..37dcd06
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/service/UserRoleService.java
@@ -0,0 +1,19 @@
+package com.dite.znpt.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dite.znpt.domain.entity.UserRoleEntity;
+import com.dite.znpt.domain.vo.UserRoleReq;
+
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 15:33
+ * @description
+ */
+public interface UserRoleService extends IService {
+
+ void bindUserRole(UserRoleReq req);
+
+ void bindRoleUser(String roleId, List userIds);
+}
diff --git a/core/src/main/java/com/dite/znpt/service/UserService.java b/core/src/main/java/com/dite/znpt/service/UserService.java
index 85f83dc..46a1c8d 100644
--- a/core/src/main/java/com/dite/znpt/service/UserService.java
+++ b/core/src/main/java/com/dite/znpt/service/UserService.java
@@ -3,6 +3,7 @@ package com.dite.znpt.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dite.znpt.domain.entity.UserEntity;
import com.dite.znpt.domain.vo.UserListReq;
+import com.dite.znpt.domain.vo.UserListResp;
import com.dite.znpt.domain.vo.UserReq;
import com.dite.znpt.domain.vo.UserResp;
@@ -23,7 +24,7 @@ public interface UserService extends IService {
* @author huise23
* @date 2025/04/11 23:17
**/
- List page(UserListReq req);
+ List page(UserListReq req);
/**
* 功能描述:查询用户信息列表
*
@@ -32,7 +33,7 @@ public interface UserService extends IService {
* @author huise23
* @date 2025/04/11 23:17
**/
- List list(UserListReq req);
+ List list(UserListReq req);
/**
* 功能描述:查询用户信息详情
diff --git a/core/src/main/java/com/dite/znpt/service/impl/DefectServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/DefectServiceImpl.java
index b2cd108..9259bb5 100644
--- a/core/src/main/java/com/dite/znpt/service/impl/DefectServiceImpl.java
+++ b/core/src/main/java/com/dite/znpt/service/impl/DefectServiceImpl.java
@@ -107,7 +107,7 @@ public class DefectServiceImpl extends ServiceImpl i
List imageEntityList = imageService.batchSaveByImageSimpleReq(imageSimpleReqList);
Map imageMap = imageEntityList.stream().collect(Collectors.toMap(k->k.getPartId().concat(StrUtil.COLON).concat(k.getImagePath()), Function.identity()));
List defectEntityList = new ArrayList<>();
- list.stream().forEach(req -> {
+ list.forEach(req -> {
String key = req.getPartId().concat(StrUtil.COLON).concat(req.getImagePath());
if(imageMap.containsKey(key)){
DefectEntity defectEntity = Converts.INSTANCE.toDefectEntity(req);
diff --git a/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java
index 804d199..583e11e 100644
--- a/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java
+++ b/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java
@@ -57,7 +57,7 @@ public class DeptServiceImpl extends ServiceImpl impleme
public DeptResp detail(String deptId) {
DeptEntity entity = this.getById(deptId);
if (null == entity || !entity.getDelFlag().equals(Constants.DEL_FLAG_0)){
- throw new ServiceException(Message.DEPT_ID_NOT_EXISTS);
+ throw new ServiceException(Message.DEPT_ID_NOT_EXIST);
}
return Converts.INSTANCE.toDeptResp(entity);
}
@@ -73,7 +73,7 @@ public class DeptServiceImpl extends ServiceImpl impleme
public void update(String deptId, DeptReq req) {
DeptEntity originalEntity = this.getById(deptId);
if (null == originalEntity || !originalEntity.getDelFlag().equals(Constants.DEL_FLAG_0)){
- throw new ServiceException(Message.DEPT_ID_NOT_EXISTS);
+ throw new ServiceException(Message.DEPT_ID_NOT_EXIST);
}
DeptEntity entity = dealDept(req);
entity.setDeptId(deptId);
@@ -91,7 +91,7 @@ public class DeptServiceImpl extends ServiceImpl impleme
if(StrUtil.isNotBlank(req.getParentId())){
DeptEntity parent = this.getById(req.getParentId());
if(null == parent || !parent.getDelFlag().equals(Constants.DEL_FLAG_0)){
- throw new ServiceException(Message.DEPT_PARENT_NOT_EXISTS);
+ throw new ServiceException(Message.DEPT_PARENT_NOT_EXIST);
}
entity.setAncestors(parent.getAncestors() + StrUtil.COMMA + parent.getDeptId());
entity.setDeptFullName(parent.getDeptFullName() + StrUtil.SLASH + entity.getDeptName());
@@ -108,7 +108,7 @@ public class DeptServiceImpl extends ServiceImpl impleme
public void deleteById(String deptId) {
DeptEntity entity = this.getById(deptId);
if (null == entity || !entity.getDelFlag().equals(Constants.DEL_FLAG_0)){
- throw new ServiceException(Message.DEPT_ID_NOT_EXISTS);
+ throw new ServiceException(Message.DEPT_ID_NOT_EXIST);
}
entity.setDelFlag(Constants.DEL_FLAG_1);
this.updateById(entity);
diff --git a/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java
index 8c66217..cb8f22c 100644
--- a/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java
+++ b/core/src/main/java/com/dite/znpt/service/impl/ImageCollectServiceImpl.java
@@ -59,7 +59,7 @@ public class ImageCollectServiceImpl extends ServiceImpl imageList = Converts.INSTANCE.toImageEntity(req.getImageList());
String permPathPrefix = permPath.concat(ImageSourceEnum.COLLECT.getCode()).concat(FileUtil.FILE_SEPARATOR).concat(partId).concat(FileUtil.FILE_SEPARATOR).concat(dateStr).concat(FileUtil.FILE_SEPARATOR);
String temPathPrefix = tempPath.concat(ImageSourceEnum.COLLECT.getCode()).concat(FileUtil.FILE_SEPARATOR).concat(partId).concat(FileUtil.FILE_SEPARATOR);
- imageList.stream().forEach(image -> {
+ imageList.forEach(image -> {
image.setPartId(partId);
image.setCollectId(imageCollect.getCollectId());
String path = permPathPrefix + image.getImageName();
diff --git a/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java
index bc25def..886c7de 100644
--- a/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java
+++ b/core/src/main/java/com/dite/znpt/service/impl/ImageServiceImpl.java
@@ -84,7 +84,7 @@ public class ImageServiceImpl extends ServiceImpl impl
List imageList = new ArrayList<>();
List partIds = list.stream().map(ImageSimpleReq::getPartId).collect(Collectors.toList());
Map partIdMap= partService.listByIds(partIds).stream().collect(Collectors.toMap(PartEntity::getPartId, Function.identity()));
- list.stream().forEach(req -> {
+ list.forEach(req -> {
if(partIdMap.containsKey(req.getPartId())){
String path_prefix = permPath.concat(StrUtil.BACKSLASH).concat(req.getImageSource()).concat(StrUtil.BACKSLASH).concat(req.getPartId()).concat(StrUtil.BACKSLASH);
String temp_path_prefix = tempPath.concat(StrUtil.BACKSLASH).concat(req.getImageSource()).concat(StrUtil.BACKSLASH).concat(req.getPartId()).concat(StrUtil.BACKSLASH);
diff --git a/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java
new file mode 100644
index 0000000..b6c93a3
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java
@@ -0,0 +1,84 @@
+package com.dite.znpt.service.impl;
+
+import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.lang.tree.TreeNodeConfig;
+import cn.hutool.core.lang.tree.TreeUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dite.znpt.constant.Message;
+import com.dite.znpt.converts.Converts;
+import com.dite.znpt.domain.entity.DeptEntity;
+import com.dite.znpt.domain.entity.MenuEntity;
+import com.dite.znpt.domain.vo.MenuReq;
+import com.dite.znpt.domain.vo.MenuResp;
+import com.dite.znpt.exception.ServiceException;
+import com.dite.znpt.mapper.MenuMapper;
+import com.dite.znpt.service.MenuService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 10:27
+ * @description
+ */
+@Service
+public class MenuServiceImpl extends ServiceImpl implements MenuService {
+
+ @Override
+ public List> tree(String menuName) {
+ List menuList = StrUtil.isBlank(menuName) ? this.baseMapper.downwardRecursionSelect(null) : this.baseMapper.upwardRecursionSelect(menuName);
+ //配置
+ TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
+ treeNodeConfig.setIdKey("menuId");
+ treeNodeConfig.setNameKey("menuName");
+ treeNodeConfig.setParentIdKey("parentId");
+ treeNodeConfig.setWeightKey("orderNum");
+ //转换器
+ return TreeUtil.build(menuList, "0", treeNodeConfig,
+ (treeNode, tree) -> {
+ tree.setId(treeNode.getMenuId());
+ tree.setParentId(treeNode.getParentId());
+ tree.setName(treeNode.getMenuName());
+ tree.putExtra("menuType",treeNode.getMenuType());
+ tree.putExtra("visible",treeNode.getVisible());
+ tree.putExtra("orderNum",treeNode.getOrderNum());
+ });
+ }
+
+ @Override
+ public MenuResp detail(String menuId) {
+ return Converts.INSTANCE.toMenuResp(this.getById(menuId));
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void save(MenuReq req) {
+ MenuEntity entity = Converts.INSTANCE.toMenuEntity(req);
+ entity.setParentId(StrUtil.isBlank(req.getParentId()) ? "0" : req.getParentId());
+ entity.setVisible(StrUtil.isBlank(req.getVisible()) ? "0" : req.getVisible());
+ this.save(entity);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void update(String menuId, MenuReq req) {
+ if(null == this.getById(menuId)){
+ throw new ServiceException(Message.MENU_ID_NOT_EXIST);
+ }
+ MenuEntity entity = Converts.INSTANCE.toMenuEntity(req);
+ entity.setMenuId(menuId);
+ if(StrUtil.isBlank(entity.getParentId())){
+ entity.setParentId("0");
+ }
+ this.updateById(entity);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void deleteById(String menuId) {
+ this.removeById(menuId);
+ }
+}
diff --git a/core/src/main/java/com/dite/znpt/service/impl/PostServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/PostServiceImpl.java
index e952e4e..6e321df 100644
--- a/core/src/main/java/com/dite/znpt/service/impl/PostServiceImpl.java
+++ b/core/src/main/java/com/dite/znpt/service/impl/PostServiceImpl.java
@@ -1,20 +1,28 @@
package com.dite.znpt.service.impl;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dite.znpt.constant.Constants;
import com.dite.znpt.constant.Message;
import com.dite.znpt.converts.Converts;
import com.dite.znpt.domain.entity.PostEntity;
+import com.dite.znpt.domain.entity.UserEntity;
+import com.dite.znpt.domain.entity.UserPostEntity;
import com.dite.znpt.domain.vo.PostReq;
import com.dite.znpt.domain.vo.PostResp;
import com.dite.znpt.exception.ServiceException;
import com.dite.znpt.mapper.PostMapper;
+import com.dite.znpt.mapper.UserPostMapper;
import com.dite.znpt.service.PostService;
+import com.dite.znpt.service.UserService;
import com.dite.znpt.util.PageUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import javax.annotation.Resource;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -24,6 +32,10 @@ import java.util.List;
*/
@Service
public class PostServiceImpl extends ServiceImpl implements PostService {
+ @Resource
+ private UserService userService;
+ @Resource
+ private UserPostMapper userPostMapper;
@Override
public List page(String postName) {
@@ -52,7 +64,7 @@ public class PostServiceImpl extends ServiceImpl impleme
@Override
public void update(String postId, PostReq req) {
if(null == this.getById(postId)){
- throw new ServiceException(Message.POST_ID_NOT_EXISTS);
+ throw new ServiceException(Message.POST_ID_NOT_EXIST);
}
PostEntity entity = Converts.INSTANCE.toPostEntity(req);
entity.setPostId(postId);
@@ -63,7 +75,7 @@ public class PostServiceImpl extends ServiceImpl impleme
@Override
public void deleteById(String postId) {
if(null == this.getById(postId)){
- throw new ServiceException(Message.POST_ID_NOT_EXISTS);
+ throw new ServiceException(Message.POST_ID_NOT_EXIST);
}
this.removeById(postId);
}
diff --git a/core/src/main/java/com/dite/znpt/service/impl/RoleMenuServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/RoleMenuServiceImpl.java
new file mode 100644
index 0000000..aaeca56
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/service/impl/RoleMenuServiceImpl.java
@@ -0,0 +1,59 @@
+package com.dite.znpt.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dite.znpt.constant.Constants;
+import com.dite.znpt.constant.Message;
+import com.dite.znpt.converts.Converts;
+import com.dite.znpt.domain.entity.MenuEntity;
+import com.dite.znpt.domain.entity.RoleEntity;
+import com.dite.znpt.domain.entity.RoleMenuEntity;
+import com.dite.znpt.domain.vo.RoleMenuReq;
+import com.dite.znpt.exception.ServiceException;
+import com.dite.znpt.mapper.RoleMenuMapper;
+import com.dite.znpt.service.MenuService;
+import com.dite.znpt.service.RoleMenuService;
+import com.dite.znpt.service.RoleService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 16:02
+ * @description
+ */
+@Service
+public class RoleMenuServiceImpl extends ServiceImpl implements RoleMenuService {
+
+ @Resource
+ private RoleService roleService;
+ @Resource
+ private MenuService menuService;
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void bindRoleMenu(RoleMenuReq req) {
+ RoleEntity role = roleService.getById(req.getRoleId());
+ if (role == null || !Constants.DEL_FLAG_0.equals(role.getDelFlag())) {
+ throw new ServiceException(Message.ROLE_ID_NOT_EXIST_OR_ILLEGAL);
+ }
+ List menuList = menuService.listByIds(req.getMenuIds());
+ if(CollUtil.isEmpty(menuList) || menuList.size() != req.getMenuIds().size()){
+ throw new ServiceException(Message.MENU_ID_NOT_EXIST_OR_ILLEGAL);
+ }
+ this.remove(Wrappers.lambdaQuery(RoleMenuEntity.class).eq(RoleMenuEntity::getRoleId, req.getRoleId()));
+ List roleMenuList =new ArrayList<>(req.getMenuIds().size());
+ for (String menuId : req.getMenuIds()) {
+ RoleMenuEntity roleMenu = new RoleMenuEntity();
+ roleMenu.setRoleId(req.getRoleId());
+ roleMenu.setMenuId(menuId);
+ roleMenuList.add(roleMenu);
+ }
+ this.saveBatch(roleMenuList);
+ }
+}
diff --git a/core/src/main/java/com/dite/znpt/service/impl/RoleServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/RoleServiceImpl.java
new file mode 100644
index 0000000..fa1cb66
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/service/impl/RoleServiceImpl.java
@@ -0,0 +1,81 @@
+package com.dite.znpt.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dite.znpt.constant.Constants;
+import com.dite.znpt.constant.Message;
+import com.dite.znpt.converts.Converts;
+import com.dite.znpt.domain.entity.RoleEntity;
+import com.dite.znpt.domain.vo.RoleReq;
+import com.dite.znpt.domain.vo.RoleResp;
+import com.dite.znpt.exception.ServiceException;
+import com.dite.znpt.mapper.RoleMapper;
+import com.dite.znpt.service.RoleService;
+import com.dite.znpt.util.PageUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 10:25
+ * @description
+ */
+@Service
+public class RoleServiceImpl extends ServiceImpl implements RoleService {
+
+ @Override
+ public List page(String roleName) {
+ PageUtil.startPage();
+ return this.list(roleName);
+ }
+
+ @Override
+ public List list(String roleName) {
+ List list = this.list(
+ Wrappers.lambdaQuery(RoleEntity.class)
+ .eq(RoleEntity::getDelFlag, Constants.DEL_FLAG_0)
+ .like(StrUtil.isNotBlank(roleName), RoleEntity::getRoleName, roleName)
+ );
+ return Converts.INSTANCE.toRoleResp(list);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void save(RoleReq req) {
+ RoleEntity entity = Converts.INSTANCE.toRoleEntity(req);
+ this.save(entity);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void update(String roleId, RoleReq req) {
+ RoleEntity originEntity = this.getById(roleId);
+ if(null == originEntity || !Constants.DEL_FLAG_0.equals(originEntity.getDelFlag())) {
+ throw new ServiceException(Message.ROLE_ID_NOT_EXIST);
+ }
+ RoleEntity entity = Converts.INSTANCE.toRoleEntity(req);
+ entity.setRoleId(roleId);
+ entity.setRoleKey(null);
+ this.updateById(entity);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void deleteById(String roleId) {
+ RoleEntity entity = this.getById(roleId);
+ if(null == entity || !Constants.DEL_FLAG_0.equals(entity.getDelFlag())) {
+ throw new ServiceException(Message.ROLE_ID_NOT_EXIST);
+ }
+ entity.setDelFlag(Constants.DEL_FLAG_1);
+ this.updateById(entity);
+ }
+
+ @Override
+ public RoleResp detail(String roleId) {
+ return Converts.INSTANCE.toRoleResp(this.getById(roleId));
+ }
+
+}
diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java
new file mode 100644
index 0000000..8e6410e
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java
@@ -0,0 +1,79 @@
+package com.dite.znpt.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dite.znpt.constant.Constants;
+import com.dite.znpt.constant.Message;
+import com.dite.znpt.domain.entity.PostEntity;
+import com.dite.znpt.domain.entity.UserEntity;
+import com.dite.znpt.domain.entity.UserPostEntity;
+import com.dite.znpt.exception.ServiceException;
+import com.dite.znpt.mapper.UserPostMapper;
+import com.dite.znpt.service.PostService;
+import com.dite.znpt.service.UserPostService;
+import com.dite.znpt.service.UserService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 15:40
+ * @description
+ */
+@Service
+public class UserPostServiceImpl extends ServiceImpl implements UserPostService {
+
+ @Resource
+ private PostService postService;
+ @Resource
+ private UserService userService;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void bindUserPost(String userId, List postIds) {
+ List postList = postService.listByIds(postIds);
+ if(CollUtil.isEmpty(postList) || postList.size() != postIds.size()){
+ throw new ServiceException(Message.POST_ID_NOT_EXIST_OR_ILLEGAL);
+ }
+ UserEntity user = userService.getById(userId);
+ if(null == user || Constants.DEL_FLAG_1.equals(user.getDelFlag())){
+ throw new ServiceException(Message.USER_ID_NOT_EXIST);
+ }
+ this.remove(Wrappers.lambdaQuery(UserPostEntity.class).eq(UserPostEntity::getUserId, userId));
+ List userPostList = new ArrayList<>();
+ postIds.forEach(postId -> {
+ UserPostEntity userPostEntity = new UserPostEntity();
+ userPostEntity.setUserId(userId);
+ userPostEntity.setPostId(postId);
+ userPostList.add(userPostEntity);
+ });
+ this.saveBatch(userPostList);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void bindPostUser(String postId, List userIds) {
+ PostEntity post = postService.getById(postId);
+ if(null == post || !Constants.STATUS_0.equals(post.getStatus())){
+ throw new ServiceException(Message.POST_ID_NOT_EXIST_OR_ILLEGAL);
+ }
+ List userList = userService.listByIds(userIds).stream().filter(userEntity -> !Constants.DEL_FLAG_1.equals(userEntity.getDelFlag())).toList();
+ if(CollUtil.isEmpty(userList) || userIds.size() != userList.size()){
+ throw new ServiceException(Message.USER_ID_NOT_EXIST_OR_ILLEGAL);
+ }
+ this.remove(Wrappers.lambdaQuery(UserPostEntity.class).eq(UserPostEntity::getPostId, postId));
+ List userPostList = new ArrayList<>();
+ userIds.forEach(userId -> {
+ UserPostEntity userPostEntity = new UserPostEntity();
+ userPostEntity.setUserId(userId);
+ userPostEntity.setPostId(postId);
+ userPostList.add(userPostEntity);
+ });
+ this.saveBatch(userPostList);
+ }
+}
diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java
new file mode 100644
index 0000000..c08c3c0
--- /dev/null
+++ b/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java
@@ -0,0 +1,78 @@
+package com.dite.znpt.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dite.znpt.constant.Constants;
+import com.dite.znpt.constant.Message;
+import com.dite.znpt.domain.entity.RoleEntity;
+import com.dite.znpt.domain.entity.UserEntity;
+import com.dite.znpt.domain.entity.UserRoleEntity;
+import com.dite.znpt.domain.vo.UserRoleReq;
+import com.dite.znpt.exception.ServiceException;
+import com.dite.znpt.mapper.UserRoleMapper;
+import com.dite.znpt.service.RoleService;
+import com.dite.znpt.service.UserRoleService;
+import com.dite.znpt.service.UserService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Bear.G
+ * @date 2025/5/21/周三 15:33
+ * @description
+ */
+@Service
+public class UserRoleServiceImpl extends ServiceImpl implements UserRoleService {
+
+ @Resource
+ private UserService userService;
+
+ @Resource
+ private RoleService roleService;
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void bindUserRole(UserRoleReq req) {
+ UserEntity user = userService.getById(req.getUserId());
+ if(null == user || !Constants.DEL_FLAG_0.equals(user.getDelFlag())){
+ throw new ServiceException(Message.USER_ID_NOT_EXIST_OR_ILLEGAL);
+ }
+ List roleList = roleService.listByIds(req.getRoleIds()).stream().filter(role -> Constants.DEL_FLAG_0.equals(role.getDelFlag())).toList();
+ if(CollUtil.isEmpty(roleList) || req.getRoleIds().size() != roleList.size()){
+ throw new ServiceException(Message.ROLE_ID_NOT_EXIST_OR_ILLEGAL);
+ }
+ List userRoleList = new ArrayList<>();
+ req.getRoleIds().forEach(roleId -> {
+ UserRoleEntity userRole = new UserRoleEntity();
+ userRole.setUserId(req.getUserId());
+ userRole.setRoleId(roleId);
+ userRoleList.add(userRole);
+ });
+ this.saveBatch(userRoleList);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void bindRoleUser(String roleId, List userIds) {
+ RoleEntity role = roleService.getById(roleId);
+ if(role == null || !Constants.DEL_FLAG_0.equals(role.getDelFlag())){
+ throw new ServiceException(Message.ROLE_ID_NOT_EXIST_OR_ILLEGAL);
+ }
+ List userList = userService.listByIds(userIds).stream().filter(user -> Constants.DEL_FLAG_0.equals(user.getDelFlag())).toList();
+ if(CollUtil.isEmpty(userList) || userIds.size()!= userList.size()){
+ throw new ServiceException(Message.USER_ID_NOT_EXIST_OR_ILLEGAL);
+ }
+ List userRoleList = new ArrayList<>();
+ userIds.forEach(userId -> {
+ UserRoleEntity userRole = new UserRoleEntity();
+ userRole.setUserId(userId);
+ userRole.setRoleId(roleId);
+ userRoleList.add(userRole);
+ });
+ this.saveBatch(userRoleList);
+ }
+}
diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java
index e576f9b..6197865 100644
--- a/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java
+++ b/core/src/main/java/com/dite/znpt/service/impl/UserServiceImpl.java
@@ -2,31 +2,38 @@ package com.dite.znpt.service.impl;
import cn.dev33.satoken.secure.SaBase64Util;
import cn.dev33.satoken.secure.SaSecureUtil;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dite.znpt.constant.Constants;
import com.dite.znpt.constant.Message;
import com.dite.znpt.converts.Converts;
+import com.dite.znpt.domain.entity.PostEntity;
import com.dite.znpt.domain.entity.UserEntity;
+import com.dite.znpt.domain.entity.UserPostEntity;
import com.dite.znpt.domain.vo.UserListReq;
+import com.dite.znpt.domain.vo.UserListResp;
import com.dite.znpt.domain.vo.UserReq;
import com.dite.znpt.domain.vo.UserResp;
-import com.dite.znpt.enums.EducationEnum;
import com.dite.znpt.exception.ServiceException;
-import com.dite.znpt.service.UserService;
import com.dite.znpt.mapper.UserMapper;
+import com.dite.znpt.service.DeptService;
+import com.dite.znpt.service.PostService;
+import com.dite.znpt.service.UserPostService;
+import com.dite.znpt.service.UserService;
+import com.dite.znpt.util.PageUtil;
import com.dite.znpt.util.PasswordUtil;
+import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
-import lombok.RequiredArgsConstructor;
-import com.dite.znpt.util.PageUtil;
import org.springframework.transaction.annotation.Transactional;
+import javax.annotation.Resource;
import java.util.List;
+import java.util.stream.Collectors;
/**
* @author huise23
@@ -43,6 +50,15 @@ public class UserServiceImpl extends ServiceImpl impleme
@Value("${password.enable-default:true}")
private Boolean enableDefaultPassword;
+ @Resource
+ private DeptService deptService;
+
+ @Resource
+ private PostService postService;
+
+ @Resource
+ private UserPostService userPostService;
+
/**
* 功能描述:分页查询用户信息列表
*
@@ -52,7 +68,7 @@ public class UserServiceImpl extends ServiceImpl impleme
* @date 2025/04/11 23:17
**/
@Override
- public List page(UserListReq req) {
+ public List page(UserListReq req) {
PageUtil.startPage();
return this.list(req);
}
@@ -66,13 +82,8 @@ public class UserServiceImpl extends ServiceImpl impleme
* @date 2025/04/11 23:17
**/
@Override
- public List list(UserListReq req) {
- PageUtil.startPage();
- List userRespList= this.baseMapper.queryBySelective(req);
- userRespList.forEach(resp -> {
- resp.setEducationLabel(EducationEnum.getDescByCode(resp.getEducation()));
- });
- return userRespList;
+ public List list(UserListReq req) {
+ return this.baseMapper.queryBySelective(req);
}
/**
@@ -86,7 +97,18 @@ public class UserServiceImpl extends ServiceImpl impleme
@Override
public UserResp detail(String userId) {
UserEntity entity = this.getById(userId);
- return Converts.INSTANCE.toUserResp(entity);
+ UserResp userResp= Converts.INSTANCE.toUserResp(entity);
+ if(StrUtil.isNotBlank(userResp.getDeptId())){
+ userResp.setUserId(deptService.getById(userResp.getDeptId()).getDeptName());
+ }
+ List userPostList = userPostService.list(Wrappers.lambdaQuery(UserPostEntity.class).eq(UserPostEntity::getUserId, userId));
+ if(CollUtil.isNotEmpty(userPostList)){
+ String postName = postService.listByIds(
+ userPostList.stream().map(UserPostEntity::getPostId).toList()
+ ).stream().map(PostEntity::getPostName).collect(Collectors.joining(StrUtil.COMMA));
+ userResp.setPostName(postName);
+ }
+ return userResp;
}
/**
@@ -106,6 +128,9 @@ public class UserServiceImpl extends ServiceImpl impleme
String password = enableDefaultPassword ? defaultPassword : PasswordUtil.generatePassword();
entity.setPassword(SaSecureUtil.md5(req.getAccount().concat(password).concat(salt)));
this.save(entity);
+ if(CollUtil.isNotEmpty(req.getPostIds())){
+ userPostService.bindUserPost(entity.getUserId(), req.getPostIds());
+ }
return SaBase64Util.encode(password);
}
@@ -128,27 +153,39 @@ public class UserServiceImpl extends ServiceImpl impleme
entity.setUserId(userId);
entity.setAccount(null);
validate(req, originalEntity);
+ if(CollUtil.isNotEmpty(req.getPostIds())){
+ userPostService.bindUserPost(userId, req.getPostIds());
+ }
this.updateById(entity);
}
private void validate(UserReq req, UserEntity originalEntity){
+ if(StrUtil.isNotBlank(req.getDeptId()) && deptService.getById(req.getDeptId()) == null){
+ throw new ServiceException(Message.DEPT_ID_NOT_EXIST);
+ }
LambdaQueryWrapper accountWrapper = Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getAccount, req.getAccount()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0);
if(this.getOne(accountWrapper) != null && originalEntity == null){
throw new ServiceException(Message.ACCOUNT_EXIST);
}
- if(originalEntity == null || !originalEntity.getMobile().equals(req.getMobile())){
+ if(originalEntity == null || (StrUtil.isNotBlank(req.getMobile()) && !originalEntity.getMobile().equals(req.getMobile()))){
LambdaQueryWrapper mobileWrapper = Wrappers.lambdaQuery(UserEntity.class).eq(StrUtil.isNotBlank(req.getMobile()), UserEntity::getMobile, req.getMobile()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0);
if(this.getOne(mobileWrapper) != null){
throw new ServiceException(Message.MOBILE_EXIST);
}
}
- if(originalEntity == null || !originalEntity.getEmail().equals(req.getEmail())){
- LambdaQueryWrapper emailWrapper = Wrappers.lambdaQuery(UserEntity.class).eq(StrUtil.isNotBlank(req.getEmail()), UserEntity::getEmail, req.getMobile()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0);
+ if(originalEntity == null || (StrUtil.isNotBlank(req.getEmail()) && !originalEntity.getEmail().equals(req.getEmail()))){
+ LambdaQueryWrapper emailWrapper = Wrappers.lambdaQuery(UserEntity.class).eq(StrUtil.isNotBlank(req.getEmail()), UserEntity::getEmail, req.getEmail()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0);
if(this.getOne(emailWrapper) != null){
throw new ServiceException(Message.EMAIL_EXIST);
}
}
+ if(originalEntity == null || (StrUtil.isNotBlank(req.getIdentityCard()) && !originalEntity.getIdentityCard().equals(req.getIdentityCard()))){
+ LambdaQueryWrapper emailWrapper = Wrappers.lambdaQuery(UserEntity.class).eq(StrUtil.isNotBlank(req.getIdentityCard()), UserEntity::getIdentityCard, req.getIdentityCard()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0);
+ if(this.getOne(emailWrapper) != null){
+ throw new ServiceException(Message.IDENTITY_CARD_EXIST);
+ }
+ }
}
/**
diff --git a/core/src/main/resources/mapper/DeptMapper.xml b/core/src/main/resources/mapper/DeptMapper.xml
index 2830fe0..0ab4fda 100644
--- a/core/src/main/resources/mapper/DeptMapper.xml
+++ b/core/src/main/resources/mapper/DeptMapper.xml
@@ -16,8 +16,7 @@
UNION ALL
SELECT d.* FROM dept d INNER JOIN DeptPath dp ON d.dept_id = dp.parent_id WHERE d.del_flag = '0'
- )
- SELECT DISTINCT * FROM DeptPath;
+ )SELECT DISTINCT * FROM DeptPath;
diff --git a/core/src/main/resources/mapper/MenuMapper.xml b/core/src/main/resources/mapper/MenuMapper.xml
new file mode 100644
index 0000000..f2a0ca3
--- /dev/null
+++ b/core/src/main/resources/mapper/MenuMapper.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/src/main/resources/mapper/RoleMapper.xml b/core/src/main/resources/mapper/RoleMapper.xml
new file mode 100644
index 0000000..0aebfc8
--- /dev/null
+++ b/core/src/main/resources/mapper/RoleMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/src/main/resources/mapper/RoleMenuMapper.xml b/core/src/main/resources/mapper/RoleMenuMapper.xml
new file mode 100644
index 0000000..884c0f4
--- /dev/null
+++ b/core/src/main/resources/mapper/RoleMenuMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/src/main/resources/mapper/UserMapper.xml b/core/src/main/resources/mapper/UserMapper.xml
index 910b0c4..343fefb 100644
--- a/core/src/main/resources/mapper/UserMapper.xml
+++ b/core/src/main/resources/mapper/UserMapper.xml
@@ -7,27 +7,37 @@
a.password, a.status
-