diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/CommonAPI.java b/physical-base-core/src/main/java/org/jeecg/common/api/CommonAPI.java index e087a61..3008a52 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/CommonAPI.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/CommonAPI.java @@ -8,19 +8,22 @@ import java.util.Set; /** * 通用api + * * @author: jeecg-boot */ public interface CommonAPI { /** * 1查询用户角色信息 + * * @param username * @return */ Set queryUserRoles(String username); - + /** * 1查询用户角色信息 + * * @param userId * @return */ @@ -29,6 +32,7 @@ public interface CommonAPI { /** * 2查询用户权限信息 + * * @param userId * @return */ @@ -52,13 +56,15 @@ public interface CommonAPI { /** * 5根据用户账号查询用户信息 + * * @param username * @return */ public LoginUser getUserByName(String username); - + /** * 5根据用户账号查询用户Id + * * @param username * @return */ @@ -67,6 +73,7 @@ public interface CommonAPI { /** * 6字典表的 翻译 + * * @param table * @param text * @param code @@ -77,6 +84,7 @@ public interface CommonAPI { /** * 7普通字典的翻译 + * * @param code * @param key * @return @@ -85,8 +93,9 @@ public interface CommonAPI { /** * 8查询数据权限 - * @param component 组件 - * @param username 用户名 + * + * @param component 组件 + * @param username 用户名 * @param requestPath 前段请求地址 * @return */ @@ -95,6 +104,7 @@ public interface CommonAPI { /** * 9查询用户信息 + * * @param username * @return */ @@ -102,6 +112,7 @@ public interface CommonAPI { /** * 10获取数据字典 + * * @param code * @return */ @@ -109,6 +120,7 @@ public interface CommonAPI { /** * 获取有效的数据字典项 + * * @param code * @return */ @@ -116,6 +128,7 @@ public interface CommonAPI { /** * 13获取表数据字典 + * * @param tableFilterSql * @param text * @param code @@ -125,19 +138,22 @@ public interface CommonAPI { /** * 14 普通字典的翻译,根据多个dictCode和多条数据,多个以逗号分割 + * * @param dictCodes 例如:user_status,sex - * @param keys 例如:1,2,0 + * @param keys 例如:1,2,0 * @return */ Map> translateManyDict(String dictCodes, String keys); //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + /** * 15 字典表的 翻译,可批量 + * * @param table * @param text * @param code - * @param keys 多个用逗号分割 + * @param keys 多个用逗号分割 * @param dataSource 数据源 * @return */ diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/dto/DataLogDTO.java b/physical-base-core/src/main/java/org/jeecg/common/api/dto/DataLogDTO.java index b8cec7c..a711b94 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/dto/DataLogDTO.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/dto/DataLogDTO.java @@ -19,7 +19,7 @@ public class DataLogDTO { private String createName; - public DataLogDTO(){ + public DataLogDTO() { } diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/dto/FileDownDTO.java b/physical-base-core/src/main/java/org/jeecg/common/api/dto/FileDownDTO.java index c2f744f..72d3433 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/dto/FileDownDTO.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/dto/FileDownDTO.java @@ -1,13 +1,14 @@ package org.jeecg.common.api.dto; +import jakarta.servlet.http.HttpServletResponse; import lombok.Data; -import jakarta.servlet.http.HttpServletResponse; import java.io.Serializable; /** * 文件下载 * cloud api 用到的接口传输对象 + * * @author: jeecg-boot */ @Data @@ -20,9 +21,10 @@ public class FileDownDTO implements Serializable { private String uploadType; private HttpServletResponse response; - public FileDownDTO(){} + public FileDownDTO() { + } - public FileDownDTO(String filePath, String uploadpath, String uploadType,HttpServletResponse response){ + public FileDownDTO(String filePath, String uploadpath, String uploadType, HttpServletResponse response) { this.filePath = filePath; this.uploadpath = uploadpath; this.uploadType = uploadType; diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/dto/FileUploadDTO.java b/physical-base-core/src/main/java/org/jeecg/common/api/dto/FileUploadDTO.java index 8862d35..c52caf8 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/dto/FileUploadDTO.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/dto/FileUploadDTO.java @@ -8,6 +8,7 @@ import java.io.Serializable; /** * 文件上传 * cloud api 用到的接口传输对象 + * * @author: jeecg-boot */ @Data @@ -23,17 +24,18 @@ public class FileUploadDTO implements Serializable { private String customBucket; - public FileUploadDTO(){ + public FileUploadDTO() { } /** * 简单上传 构造器1 + * * @param file * @param bizPath * @param uploadType */ - public FileUploadDTO(MultipartFile file,String bizPath,String uploadType){ + public FileUploadDTO(MultipartFile file, String bizPath, String uploadType) { this.file = file; this.bizPath = bizPath; this.uploadType = uploadType; @@ -41,12 +43,13 @@ public class FileUploadDTO implements Serializable { /** * 申明桶 文件上传 构造器2 + * * @param file * @param bizPath * @param uploadType * @param customBucket */ - public FileUploadDTO(MultipartFile file,String bizPath,String uploadType,String customBucket){ + public FileUploadDTO(MultipartFile file, String bizPath, String uploadType, String customBucket) { this.file = file; this.bizPath = bizPath; this.uploadType = uploadType; diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/dto/LogDTO.java b/physical-base-core/src/main/java/org/jeecg/common/api/dto/LogDTO.java index 74dde4f..d2029ba 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/dto/LogDTO.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/dto/LogDTO.java @@ -1,13 +1,15 @@ package org.jeecg.common.api.dto; + import lombok.Data; -import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.common.system.vo.LoginUser; + import java.io.Serializable; import java.util.Date; /** * 日志对象 * cloud api 用到的接口传输对象 + * * @author: jeecg-boot */ @Data @@ -15,16 +17,24 @@ public class LogDTO implements Serializable { private static final long serialVersionUID = 8482720462943906924L; - /**内容*/ + /** + * 内容 + */ private String logContent; - /**日志类型(0:操作日志;1:登录日志;2:定时任务) */ + /** + * 日志类型(0:操作日志;1:登录日志;2:定时任务) + */ private Integer logType; - /**操作类型(1:添加;2:修改;3:删除;) */ + /** + * 操作类型(1:添加;2:修改;3:删除;) + */ private Integer operateType; - /**登录用户 */ + /** + * 登录用户 + */ private LoginUser loginUser; private String id; @@ -33,22 +43,34 @@ public class LogDTO implements Serializable { private Long costTime; private String ip; - /**请求参数 */ + /** + * 请求参数 + */ private String requestParam; - /**请求类型*/ + /** + * 请求类型 + */ private String requestType; - /**请求路径*/ + /** + * 请求路径 + */ private String requestUrl; - /**请求方法 */ + /** + * 请求方法 + */ private String method; - /**操作人用户名称*/ + /** + * 操作人用户名称 + */ private String username; - /**操作人用户账户*/ + /** + * 操作人用户账户 + */ private String userid; /** @@ -60,18 +82,18 @@ public class LogDTO implements Serializable { * 客户终端类型 pc:电脑端 app:手机端 h5:移动网页端 */ private String clientType; - - public LogDTO(){ + + public LogDTO() { } - public LogDTO(String logContent, Integer logType, Integer operatetype){ + public LogDTO(String logContent, Integer logType, Integer operatetype) { this.logContent = logContent; this.logType = logType; this.operateType = operatetype; } - public LogDTO(String logContent, Integer logType, Integer operatetype, LoginUser loginUser){ + public LogDTO(String logContent, Integer logType, Integer operatetype, LoginUser loginUser) { this.logContent = logContent; this.logType = logType; this.operateType = operatetype; diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/dto/OnlineAuthDTO.java b/physical-base-core/src/main/java/org/jeecg/common/api/dto/OnlineAuthDTO.java index 3381792..215b23d 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/dto/OnlineAuthDTO.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/dto/OnlineAuthDTO.java @@ -8,6 +8,7 @@ import java.util.List; /** * online 拦截器权限判断 * cloud api 用到的接口传输对象 + * * @author: jeecg-boot */ @Data @@ -37,11 +38,11 @@ public class OnlineAuthDTO implements Serializable { private String onlineWorkOrderUrl; //update-end---author:chenrui ---date:20240123 for:[QQYUN-7992]【online】工单申请下的online表单,未配置online表单开发菜单,操作报错无权限------------ - public OnlineAuthDTO(){ + public OnlineAuthDTO() { } - public OnlineAuthDTO(String username, List possibleUrl, String onlineFormUrl){ + public OnlineAuthDTO(String username, List possibleUrl, String onlineFormUrl) { this.username = username; this.possibleUrl = possibleUrl; this.onlineFormUrl = onlineFormUrl; diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/BusMessageDTO.java b/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/BusMessageDTO.java index 84e58a9..8e9002d 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/BusMessageDTO.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/BusMessageDTO.java @@ -6,10 +6,10 @@ import java.io.Serializable; /** * 带业务参数的消息 -* -* @author: taoyan -* @date: 2022/8/17 -*/ + * + * @author: taoyan + * @date: 2022/8/17 + */ @Data public class BusMessageDTO extends MessageDTO implements Serializable { @@ -24,12 +24,13 @@ public class BusMessageDTO extends MessageDTO implements Serializable { */ private String busId; - public BusMessageDTO(){ + public BusMessageDTO() { } /** * 构造 带业务参数的消息 + * * @param fromUser * @param toUser * @param title @@ -38,7 +39,7 @@ public class BusMessageDTO extends MessageDTO implements Serializable { * @param busType * @param busId */ - public BusMessageDTO(String fromUser, String toUser, String title, String msgContent, String msgCategory, String busType, String busId){ + public BusMessageDTO(String fromUser, String toUser, String title, String msgContent, String msgCategory, String busType, String busId) { super(fromUser, toUser, title, msgContent, msgCategory); this.busId = busId; this.busType = busType; diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/BusTemplateMessageDTO.java b/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/BusTemplateMessageDTO.java index bcc3476..4c6818c 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/BusTemplateMessageDTO.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/BusTemplateMessageDTO.java @@ -7,6 +7,7 @@ import java.util.Map; /** * 带业务参数的模板消息 + * * @author: jeecg-boot */ @Data @@ -24,12 +25,13 @@ public class BusTemplateMessageDTO extends TemplateMessageDTO implements Seriali */ private String busId; - public BusTemplateMessageDTO(){ + public BusTemplateMessageDTO() { } /** * 构造 带业务参数的模板消息 + * * @param fromUser * @param toUser * @param title @@ -38,7 +40,7 @@ public class BusTemplateMessageDTO extends TemplateMessageDTO implements Seriali * @param busType * @param busId */ - public BusTemplateMessageDTO(String fromUser, String toUser, String title, Map templateParam, String templateCode, String busType, String busId){ + public BusTemplateMessageDTO(String fromUser, String toUser, String title, Map templateParam, String templateCode, String busType, String busId) { super(fromUser, toUser, title, templateParam, templateCode); this.busId = busId; this.busType = busType; diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/MessageDTO.java b/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/MessageDTO.java index 816033a..bfec54c 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/MessageDTO.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/MessageDTO.java @@ -4,16 +4,18 @@ import lombok.Data; import org.jeecg.common.constant.CommonConstant; import java.io.Serializable; -import java.util.*; +import java.util.Map; +import java.util.Set; /** * 普通消息 + * * @author: jeecg-boot */ @Data public class MessageDTO implements Serializable { private static final long serialVersionUID = -5690444483968058442L; - + /** * 发送人(用户登录账户) */ @@ -43,16 +45,16 @@ public class MessageDTO implements Serializable { * 消息类型 1:消息 2:系统消息 */ protected String category; - + /** * 消息类型:org.jeecg.common.constant.enums.MessageTypeEnum - * XT("system", "系统消息") - * YJ("email", "邮件消息") - * DD("dingtalk", "钉钉消息") - * QYWX("wechat_enterprise", "企业微信") + * XT("system", "系统消息") + * YJ("email", "邮件消息") + * DD("dingtalk", "钉钉消息") + * QYWX("wechat_enterprise", "企业微信") */ protected String type; - + //---【推送模板相关参数】------------------------------------------------------------- /** @@ -85,14 +87,14 @@ public class MessageDTO implements Serializable { */ protected Set ccEmailList; //---【邮件相关参数】------------------------------------------------------------- - - public MessageDTO(){ + + public MessageDTO() { } /** * 构造器1 系统消息 */ - public MessageDTO(String fromUser,String toUser,String title, String content){ + public MessageDTO(String fromUser, String toUser, String title, String content) { this.fromUser = fromUser; this.toUser = toUser; this.title = title; @@ -104,7 +106,7 @@ public class MessageDTO implements Serializable { /** * 构造器2 支持设置category 1:消息 2:系统消息 */ - public MessageDTO(String fromUser,String toUser,String title, String content, String category){ + public MessageDTO(String fromUser, String toUser, String title, String content, String category) { this.fromUser = fromUser; this.toUser = toUser; this.title = title; diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/TemplateDTO.java b/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/TemplateDTO.java index 39e8f9b..a6143dd 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/TemplateDTO.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/TemplateDTO.java @@ -7,6 +7,7 @@ import java.util.Map; /** * 消息模板dto + * * @author: jeecg-boot */ @Data @@ -27,12 +28,12 @@ public class TemplateDTO implements Serializable { /** * 构造器 通过设置模板参数和模板编码 作为参数获取消息内容 */ - public TemplateDTO(String templateCode, Map templateParam){ + public TemplateDTO(String templateCode, Map templateParam) { this.templateCode = templateCode; this.templateParam = templateParam; } - public TemplateDTO(){ + public TemplateDTO() { } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/TemplateMessageDTO.java b/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/TemplateMessageDTO.java index 4942717..2a8b7e8 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/TemplateMessageDTO.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/dto/message/TemplateMessageDTO.java @@ -1,11 +1,13 @@ package org.jeecg.common.api.dto.message; import lombok.Data; + import java.io.Serializable; import java.util.Map; /** * 模板消息 + * * @author: jeecg-boot */ @Data @@ -30,14 +32,14 @@ public class TemplateMessageDTO extends TemplateDTO implements Serializable { protected String title; - public TemplateMessageDTO(){ + public TemplateMessageDTO() { } /** * 构造器1 发模板消息用 */ - public TemplateMessageDTO(String fromUser, String toUser,String title, Map templateParam, String templateCode){ + public TemplateMessageDTO(String fromUser, String toUser, String title, Map templateParam, String templateCode) { super(templateCode, templateParam); this.fromUser = fromUser; this.toUser = toUser; @@ -45,5 +47,4 @@ public class TemplateMessageDTO extends TemplateDTO implements Serializable { } - } diff --git a/physical-base-core/src/main/java/org/jeecg/common/api/vo/Result.java b/physical-base-core/src/main/java/org/jeecg/common/api/vo/Result.java index 2db1edc..d3a93d8 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/api/vo/Result.java +++ b/physical-base-core/src/main/java/org/jeecg/common/api/vo/Result.java @@ -8,169 +8,171 @@ import org.jeecg.common.constant.CommonConstant; import java.io.Serializable; /** - * 接口返回数据格式 + * 接口返回数据格式 + * * @author scott * @email jeecgos@163.com - * @date 2019年1月19日 + * @date 2019年1月19日 */ @Data -@Schema(description="接口返回对象") +@Schema(description = "接口返回对象") public class Result implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * 成功标志 - */ - @Schema(description = "成功标志") - private boolean success = true; + /** + * 成功标志 + */ + @Schema(description = "成功标志") + private boolean success = true; - /** - * 返回处理消息 - */ - @Schema(description = "返回处理消息") - private String message = ""; + /** + * 返回处理消息 + */ + @Schema(description = "返回处理消息") + private String message = ""; - /** - * 返回代码 - */ - @Schema(description = "返回代码") - private Integer code = 0; - - /** - * 返回数据对象 data - */ - @Schema(description = "返回数据对象") - private T result; - - /** - * 时间戳 - */ - @Schema(description = "时间戳") - private long timestamp = System.currentTimeMillis(); + /** + * 返回代码 + */ + @Schema(description = "返回代码") + private Integer code = 0; - public Result() { - } + /** + * 返回数据对象 data + */ + @Schema(description = "返回数据对象") + private T result; + + /** + * 时间戳 + */ + @Schema(description = "时间戳") + private long timestamp = System.currentTimeMillis(); + + public Result() { + } /** * 兼容VUE3版token失效不跳转登录页面 + * * @param code * @param message */ - public Result(Integer code, String message) { - this.code = code; - this.message = message; - } - - public Result success(String message) { - this.message = message; - this.code = CommonConstant.SC_OK_200; - this.success = true; - return this; - } + public Result(Integer code, String message) { + this.code = code; + this.message = message; + } - public static Result ok() { - Result r = new Result(); - r.setSuccess(true); - r.setCode(CommonConstant.SC_OK_200); - return r; - } + public Result success(String message) { + this.message = message; + this.code = CommonConstant.SC_OK_200; + this.success = true; + return this; + } - public static Result ok(String msg) { - Result r = new Result(); - r.setSuccess(true); - r.setCode(CommonConstant.SC_OK_200); - //Result OK(String msg)方法会造成兼容性问题 issues/I4IP3D - r.setResult((T) msg); - r.setMessage(msg); - return r; - } + public static Result ok() { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + return r; + } - public static Result ok(T data) { - Result r = new Result(); - r.setSuccess(true); - r.setCode(CommonConstant.SC_OK_200); - r.setResult(data); - return r; - } + public static Result ok(String msg) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + //Result OK(String msg)方法会造成兼容性问题 issues/I4IP3D + r.setResult((T) msg); + r.setMessage(msg); + return r; + } - public static Result OK() { - Result r = new Result(); - r.setSuccess(true); - r.setCode(CommonConstant.SC_OK_200); - return r; - } + public static Result ok(T data) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setResult(data); + return r; + } - /** - * 此方法是为了兼容升级所创建 - * - * @param msg - * @param - * @return - */ - public static Result OK(String msg) { - Result r = new Result(); - r.setSuccess(true); - r.setCode(CommonConstant.SC_OK_200); - r.setMessage(msg); - //Result OK(String msg)方法会造成兼容性问题 issues/I4IP3D - r.setResult((T) msg); - return r; - } + public static Result OK() { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + return r; + } - public static Result OK(T data) { - Result r = new Result(); - r.setSuccess(true); - r.setCode(CommonConstant.SC_OK_200); - r.setResult(data); - return r; - } + /** + * 此方法是为了兼容升级所创建 + * + * @param msg + * @param + * @return + */ + public static Result OK(String msg) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setMessage(msg); + //Result OK(String msg)方法会造成兼容性问题 issues/I4IP3D + r.setResult((T) msg); + return r; + } - public static Result OK(String msg, T data) { - Result r = new Result(); - r.setSuccess(true); - r.setCode(CommonConstant.SC_OK_200); - r.setMessage(msg); - r.setResult(data); - return r; - } + public static Result OK(T data) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setResult(data); + return r; + } - public static Result error(String msg, T data) { - Result r = new Result(); - r.setSuccess(false); - r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500); - r.setMessage(msg); - r.setResult(data); - return r; - } + public static Result OK(String msg, T data) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setMessage(msg); + r.setResult(data); + return r; + } - public static Result error(String msg) { - return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg); - } - - public static Result error(int code, String msg) { - Result r = new Result(); - r.setCode(code); - r.setMessage(msg); - r.setSuccess(false); - return r; - } + public static Result error(String msg, T data) { + Result r = new Result(); + r.setSuccess(false); + r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500); + r.setMessage(msg); + r.setResult(data); + return r; + } - public Result error500(String message) { - this.message = message; - this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500; - this.success = false; - return this; - } + public static Result error(String msg) { + return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg); + } - /** - * 无权限访问返回结果 - */ - public static Result noauth(String msg) { - return error(CommonConstant.SC_JEECG_NO_AUTHZ, msg); - } + public static Result error(int code, String msg) { + Result r = new Result(); + r.setCode(code); + r.setMessage(msg); + r.setSuccess(false); + return r; + } - @JsonIgnore - private String onlTable; + public Result error500(String message) { + this.message = message; + this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500; + this.success = false; + return this; + } + + /** + * 无权限访问返回结果 + */ + public static Result noauth(String msg) { + return error(CommonConstant.SC_JEECG_NO_AUTHZ, msg); + } + + @JsonIgnore + private String onlTable; } \ No newline at end of file diff --git a/physical-base-core/src/main/java/org/jeecg/common/aspect/AutoLogAspect.java b/physical-base-core/src/main/java/org/jeecg/common/aspect/AutoLogAspect.java index c9c4c90..2cf781c 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/aspect/AutoLogAspect.java +++ b/physical-base-core/src/main/java/org/jeecg/common/aspect/AutoLogAspect.java @@ -2,6 +2,10 @@ package org.jeecg.common.aspect; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.PropertyFilter; +import jakarta.annotation.Resource; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; import org.apache.shiro.SecurityUtils; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; @@ -15,20 +19,16 @@ import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.enums.ModuleType; import org.jeecg.common.constant.enums.OperateTypeEnum; -import org.jeecg.modules.base.service.BaseCommonService; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.IpUtils; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.oConvertUtils; -import org.springframework.core.LocalVariableTableParameterNameDiscoverer; +import org.jeecg.modules.base.service.BaseCommonService; import org.springframework.core.StandardReflectionParameterNameDiscoverer; import org.springframework.stereotype.Component; import org.springframework.validation.BindingResult; import org.springframework.web.multipart.MultipartFile; -import jakarta.annotation.Resource; -import jakarta.servlet.ServletRequest; -import jakarta.servlet.ServletResponse; -import jakarta.servlet.http.HttpServletRequest; + import java.lang.reflect.Method; import java.util.Date; @@ -72,10 +72,10 @@ public class AutoLogAspect { LogDTO dto = new LogDTO(); AutoLog syslog = method.getAnnotation(AutoLog.class); - if(syslog != null){ + if (syslog != null) { //update-begin-author:taoyan date: String content = syslog.value(); - if(syslog.module()== ModuleType.ONLINE){ + if (syslog.module() == ModuleType.ONLINE) { content = getOnlineLogContent(obj, content); } //注解上的描述,操作日志内容 @@ -97,12 +97,12 @@ public class AutoLogAspect { //获取request HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); //请求的参数 - dto.setRequestParam(getReqestParams(request,joinPoint)); + dto.setRequestParam(getReqestParams(request, joinPoint)); //设置IP地址 dto.setIp(IpUtils.getIpAddr(request)); //获取登录用户信息 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - if(sysUser!=null){ + if (sysUser != null) { dto.setUserid(sysUser.getUsername()); dto.setUsername(sysUser.getRealname()); @@ -118,7 +118,7 @@ public class AutoLogAspect { /** * 获取操作类型 */ - private int getOperateType(String methodName,int operateType) { + private int getOperateType(String methodName, int operateType) { if (operateType > 0) { return operateType; } @@ -128,11 +128,11 @@ public class AutoLogAspect { } /** + * @param request: request + * @param joinPoint: joinPoint * @Description: 获取请求参数 * @author: scott * @date: 2020/4/16 0:10 - * @param request: request - * @param joinPoint: joinPoint * @Return: java.lang.String */ private String getReqestParams(HttpServletRequest request, JoinPoint joinPoint) { @@ -142,7 +142,7 @@ public class AutoLogAspect { Object[] paramsArray = joinPoint.getArgs(); // java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) // https://my.oschina.net/mengzhang6/blog/2395893 - Object[] arguments = new Object[paramsArray.length]; + Object[] arguments = new Object[paramsArray.length]; for (int i = 0; i < paramsArray.length; i++) { if (paramsArray[i] instanceof BindingResult || paramsArray[i] instanceof ServletRequest || paramsArray[i] instanceof ServletResponse || paramsArray[i] instanceof MultipartFile) { //ServletRequest不能序列化,从入参里排除,否则报异常:java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) @@ -156,10 +156,10 @@ public class AutoLogAspect { @Override public boolean apply(Object o, String name, Object value) { int length = 500; - if(value!=null && value.toString().length()>length){ + if (value != null && value.toString().length() > length) { return false; } - if(value instanceof MultipartFile){ + if (value instanceof MultipartFile) { return false; } return true; @@ -173,7 +173,7 @@ public class AutoLogAspect { // 请求的方法参数值 Object[] args = joinPoint.getArgs(); // 请求的方法参数名称 - StandardReflectionParameterNameDiscoverer u=new StandardReflectionParameterNameDiscoverer(); + StandardReflectionParameterNameDiscoverer u = new StandardReflectionParameterNameDiscoverer(); String[] paramNames = u.getParameterNames(method); if (args != null && paramNames != null) { for (int i = 0; i < args.length; i++) { @@ -186,22 +186,23 @@ public class AutoLogAspect { /** * online日志内容拼接 + * * @param obj * @param content * @return */ - private String getOnlineLogContent(Object obj, String content){ - if (Result.class.isInstance(obj)){ - Result res = (Result)obj; + private String getOnlineLogContent(Object obj, String content) { + if (Result.class.isInstance(obj)) { + Result res = (Result) obj; String msg = res.getMessage(); String tableName = res.getOnlTable(); - if(oConvertUtils.isNotEmpty(tableName)){ - content+=",表名:"+tableName; + if (oConvertUtils.isNotEmpty(tableName)) { + content += ",表名:" + tableName; } - if(res.isSuccess()){ - content+= ","+(oConvertUtils.isEmpty(msg)?"操作成功":msg); - }else{ - content+= ","+(oConvertUtils.isEmpty(msg)?"操作失败":msg); + if (res.isSuccess()) { + content += "," + (oConvertUtils.isEmpty(msg) ? "操作成功" : msg); + } else { + content += "," + (oConvertUtils.isEmpty(msg) ? "操作失败" : msg); } } return content; diff --git a/physical-base-core/src/main/java/org/jeecg/common/aspect/DictAspect.java b/physical-base-core/src/main/java/org/jeecg/common/aspect/DictAspect.java index 2796711..c18da24 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/aspect/DictAspect.java +++ b/physical-base-core/src/main/java/org/jeecg/common/aspect/DictAspect.java @@ -60,14 +60,14 @@ public class DictAspect { @Around("excudeService()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { - long time1=System.currentTimeMillis(); + long time1 = System.currentTimeMillis(); Object result = pjp.proceed(); - long time2=System.currentTimeMillis(); - log.debug("获取JSON数据 耗时:"+(time2-time1)+"ms"); - long start=System.currentTimeMillis(); - result=this.parseDictText(result); - long end=System.currentTimeMillis(); - log.debug("注入字典到JSON数据 耗时"+(end-start)+"ms"); + long time2 = System.currentTimeMillis(); + log.debug("获取JSON数据 耗时:" + (time2 - time1) + "ms"); + long start = System.currentTimeMillis(); + result = this.parseDictText(result); + long end = System.currentTimeMillis(); + log.debug("注入字典到JSON数据 耗时" + (end - start) + "ms"); return result; } @@ -77,20 +77,21 @@ public class DictAspect { * 示例为SysUser 字段为sex 添加了注解@Dict(dicCode = "sex") 会在字典服务立马查出来对应的text 然后在请求list的时候将这个字典text,已字段名称加_dictText形式返回到前端 * 例输入当前返回值的就会多出一个sex_dictText字段 * { - * sex:1, - * sex_dictText:"男" + * sex:1, + * sex_dictText:"男" * } * 前端直接取值sext_dictText在table里面无需再进行前端的字典转换了 - * customRender:function (text) { - * if(text==1){ - * return "男"; - * }else if(text==2){ - * return "女"; - * }else{ - * return text; - * } - * } - * 目前vue是这么进行字典渲染到table上的多了就很麻烦了 这个直接在服务端渲染完成前端可以直接用 + * customRender:function (text) { + * if(text==1){ + * return "男"; + * }else if(text==2){ + * return "女"; + * }else{ + * return text; + * } + * } + * 目前vue是这么进行字典渲染到table上的多了就很麻烦了 这个直接在服务端渲染完成前端可以直接用 + * * @param result */ private Object parseDictText(Object result) { @@ -104,24 +105,24 @@ public class DictAspect { // 字典数据列表, key = 字典code,value=数据列表 Map> dataListMap = new HashMap<>(5); //取出结果集 - List records=((IPage) ((Result) result).getResult()).getRecords(); + List records = ((IPage) ((Result) result).getResult()).getRecords(); //update-begin--Author:zyf -- Date:20220606 ----for:【VUEN-1230】 判断是否含有字典注解,没有注解返回----- - Boolean hasDict= checkHasDict(records); - if(!hasDict){ + Boolean hasDict = checkHasDict(records); + if (!hasDict) { return result; } - log.debug(" __ 进入字典翻译切面 DictAspect —— " ); + log.debug(" __ 进入字典翻译切面 DictAspect —— "); //update-end--Author:zyf -- Date:20220606 ----for:【VUEN-1230】 判断是否含有字典注解,没有注解返回----- for (Object record : records) { - String json="{}"; + String json = "{}"; try { //update-begin--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错----- //解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat - json = objectMapper.writeValueAsString(record); + json = objectMapper.writeValueAsString(record); //update-end--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错----- } catch (JsonProcessingException e) { - log.error("json解析失败"+e.getMessage(),e); + log.error("json解析失败" + e.getMessage(), e); } //update-begin--Author:scott -- Date:20211223 ----for:【issues/3303】restcontroller返回json数据后key顺序错乱 ----- JSONObject item = JSONObject.parseObject(json, Feature.OrderedField); @@ -135,7 +136,7 @@ public class DictAspect { if (oConvertUtils.isEmpty(value)) { continue; } - //update-end--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ + //update-end--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ if (field.getAnnotation(Dict.class) != null) { if (!dictFieldList.contains(field)) { dictFieldList.add(field); @@ -159,8 +160,8 @@ public class DictAspect { //date类型默认转换string格式化日期 //update-begin--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错----- //if (JAVA_UTIL_DATE.equals(field.getType().getName())&&field.getAnnotation(JsonFormat.class)==null&&item.get(field.getName())!=null){ - //SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - // item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName())))); + //SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName())))); //} //update-end--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错----- } @@ -190,7 +191,7 @@ public class DictAspect { String value = record.getString(field.getName()); if (oConvertUtils.isNotEmpty(value)) { List dictModels = translText.get(fieldDictCode); - if(dictModels==null || dictModels.size()==0){ + if (dictModels == null || dictModels.size() == 0) { continue; } @@ -229,6 +230,7 @@ public class DictAspect { * 一次性把所有的字典都翻译了 * 1. 所有的普通数据字典的所有数据只执行一次SQL * 2. 表字典相同的所有数据只执行一次SQL + * * @param dataListMap * @return */ @@ -296,13 +298,13 @@ public class DictAspect { log.debug("translateDictFromTableByKeys.dictCode:" + dictCode); log.debug("translateDictFromTableByKeys.values:" + values); //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ - + //update-begin---author:wangshuai---date:2024-01-09---for:微服务下为空报错没有参数需要传递空字符串--- - if(null == dataSource){ + if (null == dataSource) { dataSource = ""; } //update-end---author:wangshuai---date:2024-01-09---for:微服务下为空报错没有参数需要传递空字符串--- - + List texts = commonApi.translateDictFromTableByKeys(table, text, code, values, dataSource); //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ log.debug("translateDictFromTableByKeys.result:" + texts); @@ -380,7 +382,8 @@ public class DictAspect { } /** - * 翻译字典文本 + * 翻译字典文本 + * * @param code * @param text * @param table @@ -389,39 +392,39 @@ public class DictAspect { */ @Deprecated private String translateDictValue(String code, String text, String table, String key) { - if(oConvertUtils.isEmpty(key)) { - return null; - } - StringBuffer textValue=new StringBuffer(); + if (oConvertUtils.isEmpty(key)) { + return null; + } + StringBuffer textValue = new StringBuffer(); String[] keys = key.split(","); for (String k : keys) { String tmpValue = null; - log.debug(" 字典 key : "+ k); + log.debug(" 字典 key : " + k); if (k.trim().length() == 0) { continue; //跳过循环 } //update-begin--Author:scott -- Date:20210531 ----for: !56 优化微服务应用下存在表字段需要字典翻译时加载缓慢问题----- - if (!StringUtils.isEmpty(table)){ - log.debug("--DictAspect------dicTable="+ table+" ,dicText= "+text+" ,dicCode="+code); - String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s,%s,%s]",table,text,code,k.trim()); - if (redisTemplate.hasKey(keyString)){ + if (!StringUtils.isEmpty(table)) { + log.debug("--DictAspect------dicTable=" + table + " ,dicText= " + text + " ,dicCode=" + code); + String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s,%s,%s]", table, text, code, k.trim()); + if (redisTemplate.hasKey(keyString)) { try { tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); } catch (Exception e) { log.warn(e.getMessage()); } - }else { - tmpValue= commonApi.translateDictFromTable(table,text,code,k.trim()); + } else { + tmpValue = commonApi.translateDictFromTable(table, text, code, k.trim()); } - }else { - String keyString = String.format("sys:cache:dict::%s:%s",code,k.trim()); - if (redisTemplate.hasKey(keyString)){ + } else { + String keyString = String.format("sys:cache:dict::%s:%s", code, k.trim()); + if (redisTemplate.hasKey(keyString)) { try { tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); } catch (Exception e) { - log.warn(e.getMessage()); + log.warn(e.getMessage()); } - }else { + } else { tmpValue = commonApi.translateDict(code, k.trim()); } } @@ -440,11 +443,12 @@ public class DictAspect { /** * 检测返回结果集中是否包含Dict注解 + * * @param records * @return */ - private Boolean checkHasDict(List records){ - if(oConvertUtils.isNotEmpty(records) && records.size()>0){ + private Boolean checkHasDict(List records) { + if (oConvertUtils.isNotEmpty(records) && records.size() > 0) { for (Field field : oConvertUtils.getAllFields(records.get(0))) { if (oConvertUtils.isNotEmpty(field.getAnnotation(Dict.class))) { return true; diff --git a/physical-base-core/src/main/java/org/jeecg/common/aspect/PermissionDataAspect.java b/physical-base-core/src/main/java/org/jeecg/common/aspect/PermissionDataAspect.java index d4eeab4..47dd5c1 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/aspect/PermissionDataAspect.java +++ b/physical-base-core/src/main/java/org/jeecg/common/aspect/PermissionDataAspect.java @@ -1,5 +1,6 @@ package org.jeecg.common.aspect; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; @@ -21,13 +22,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; -import jakarta.servlet.http.HttpServletRequest; import java.lang.reflect.Method; import java.util.List; /** * 数据权限切面处理类 - * 当被请求的方法有注解PermissionData时,会在往当前request中写入数据权限信息 + * 当被请求的方法有注解PermissionData时,会在往当前request中写入数据权限信息 + * * @Date 2019年4月10日 * @Version: 1.0 * @author: jeecg-boot @@ -48,7 +49,7 @@ public class PermissionDataAspect { } @Around("pointCut()") - public Object arround(ProceedingJoinPoint point) throws Throwable{ + public Object arround(ProceedingJoinPoint point) throws Throwable { HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); MethodSignature signature = (MethodSignature) point.getSignature(); Method method = signature.getMethod(); @@ -59,11 +60,11 @@ public class PermissionDataAspect { requestPath = filterUrl(requestPath); //update-begin-author:taoyan date:20211027 for:JTC-132【online报表权限】online报表带参数的菜单配置数据权限无效 //先判断是否online报表请求 - if(requestPath.indexOf(UrlMatchEnum.CGREPORT_DATA.getMatchUrl())>=0 || requestPath.indexOf(UrlMatchEnum.CGREPORT_ONLY_DATA.getMatchUrl())>=0){ + if (requestPath.indexOf(UrlMatchEnum.CGREPORT_DATA.getMatchUrl()) >= 0 || requestPath.indexOf(UrlMatchEnum.CGREPORT_ONLY_DATA.getMatchUrl()) >= 0) { // 获取地址栏参数 String urlParamString = request.getParameter(CommonConstant.ONL_REP_URL_PARAM_STR); - if(oConvertUtils.isNotEmpty(urlParamString)){ - requestPath+="?"+urlParamString; + if (oConvertUtils.isNotEmpty(urlParamString)) { + requestPath += "?" + urlParamString; } } //update-end-author:taoyan date:20211027 for:JTC-132【online报表权限】online报表带参数的菜单配置数据权限无效 @@ -72,22 +73,22 @@ public class PermissionDataAspect { //查询数据权限信息 //TODO 微服务情况下也得支持缓存机制 List dataRules = commonApi.queryPermissionDataRule(component, requestPath, username); - if(dataRules!=null && dataRules.size()>0) { + if (dataRules != null && dataRules.size() > 0) { //临时存储 JeecgDataAutorUtils.installDataSearchConditon(request, dataRules); //TODO 微服务情况下也得支持缓存机制 SysUserCacheInfo userinfo = commonApi.getCacheUser(username); JeecgDataAutorUtils.installUserInfo(request, userinfo); } - return point.proceed(); + return point.proceed(); } - private String filterUrl(String requestPath){ + private String filterUrl(String requestPath) { String url = ""; - if(oConvertUtils.isNotEmpty(requestPath)){ + if (oConvertUtils.isNotEmpty(requestPath)) { url = requestPath.replace("\\", "/"); url = url.replace("//", "/"); - if(url.indexOf(SymbolConstant.DOUBLE_SLASH)>=0){ + if (url.indexOf(SymbolConstant.DOUBLE_SLASH) >= 0) { url = filterUrl(url); } /*if(url.startsWith("/")){ @@ -99,6 +100,7 @@ public class PermissionDataAspect { /** * 获取请求地址 + * * @param request * @return */ @@ -106,18 +108,18 @@ public class PermissionDataAspect { private String getJgAuthRequsetPath(HttpServletRequest request) { String queryString = request.getQueryString(); String requestPath = request.getRequestURI(); - if(oConvertUtils.isNotEmpty(queryString)){ + if (oConvertUtils.isNotEmpty(queryString)) { requestPath += "?" + queryString; } // 去掉其他参数(保留一个参数) 例如:loginController.do?login if (requestPath.indexOf(SymbolConstant.AND) > -1) { requestPath = requestPath.substring(0, requestPath.indexOf("&")); } - if(requestPath.indexOf(QueryRuleEnum.EQ.getValue())!=-1){ - if(requestPath.indexOf(SPOT_DO)!=-1){ - requestPath = requestPath.substring(0,requestPath.indexOf(".do")+3); - }else{ - requestPath = requestPath.substring(0,requestPath.indexOf("?")); + if (requestPath.indexOf(QueryRuleEnum.EQ.getValue()) != -1) { + if (requestPath.indexOf(SPOT_DO) != -1) { + requestPath = requestPath.substring(0, requestPath.indexOf(".do") + 3); + } else { + requestPath = requestPath.substring(0, requestPath.indexOf("?")); } } // 去掉项目路径 @@ -126,9 +128,9 @@ public class PermissionDataAspect { } @Deprecated - private boolean moHuContain(List list,String key){ - for(String str : list){ - if(key.contains(str)){ + private boolean moHuContain(List list, String key) { + for (String str : list) { + if (key.contains(str)) { return true; } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/aspect/UrlMatchEnum.java b/physical-base-core/src/main/java/org/jeecg/common/aspect/UrlMatchEnum.java index f7a0863..5ac22a6 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/aspect/UrlMatchEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/aspect/UrlMatchEnum.java @@ -6,19 +6,33 @@ package org.jeecg.common.aspect; * @Description: 请求URL与菜单路由URL转换规则(方便于采用菜单路由URL来配置数据权限规则) */ public enum UrlMatchEnum { - /**求URL与菜单路由URL转换规则 /online/cgform/api/getData/ */ + /** + * 求URL与菜单路由URL转换规则 /online/cgform/api/getData/ + */ CGFORM_DATA("/online/cgform/api/getData/", "/online/cgformList/"), - /**求URL与菜单路由URL转换规则 /online/cgform/api/exportXls/ */ + /** + * 求URL与菜单路由URL转换规则 /online/cgform/api/exportXls/ + */ CGFORM_EXCEL_DATA("/online/cgform/api/exportXls/", "/online/cgformList/"), - /**求URL与菜单路由URL转换规则 /online/cgform/api/getTreeData/ */ + /** + * 求URL与菜单路由URL转换规则 /online/cgform/api/getTreeData/ + */ CGFORM_TREE_DATA("/online/cgform/api/getTreeData/", "/online/cgformList/"), - /**求URL与菜单路由URL转换规则 /online/cgreport/api/getColumnsAndData/ */ + /** + * 求URL与菜单路由URL转换规则 /online/cgreport/api/getColumnsAndData/ + */ CGREPORT_DATA("/online/cgreport/api/getColumnsAndData/", "/online/cgreport/"), - /** 求URL与菜单路由URL转换规则/online/cgreport/api/getData/ 【vue3报表数据请求地址】 */ + /** + * 求URL与菜单路由URL转换规则/online/cgreport/api/getData/ 【vue3报表数据请求地址】 + */ CGREPORT_ONLY_DATA("/online/cgreport/api/getData/", "/online/cgreport/"), - /**求URL与菜单路由URL转换规则 /online/cgreport/api/exportXls/ */ + /** + * 求URL与菜单路由URL转换规则 /online/cgreport/api/exportXls/ + */ CGREPORT_EXCEL_DATA("/online/cgreport/api/exportXls/", "/online/cgreport/"), - /**求URL与菜单路由URL转换规则 /online/cgreport/api/exportManySheetXls/ */ + /** + * 求URL与菜单路由URL转换规则 /online/cgreport/api/exportManySheetXls/ + */ CGREPORT_EXCEL_DATA2("/online/cgreport/api/exportManySheetXls/", "/online/cgreport/"); UrlMatchEnum(String url, String matchUrl) { diff --git a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/AutoDict.java b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/AutoDict.java index a6537cb..a3e1343 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/AutoDict.java +++ b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/AutoDict.java @@ -4,7 +4,7 @@ import java.lang.annotation.*; /** * 通过此注解声明的接口,自动实现字典翻译 - * + * * @Author scott * @email jeecgos@163.com * @Date 2022年01月05日 @@ -14,10 +14,11 @@ import java.lang.annotation.*; @Documented public @interface AutoDict { - /** - * 暂时无用 - * @return - */ - String value() default ""; + /** + * 暂时无用 + * + * @return + */ + String value() default ""; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/AutoLog.java b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/AutoLog.java index 5206f60..8c6d25f 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/AutoLog.java +++ b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/AutoLog.java @@ -7,7 +7,7 @@ import java.lang.annotation.*; /** * 系统日志注解 - * + * * @Author scott * @email jeecgos@163.com * @Date 2019年1月14日 @@ -17,30 +17,31 @@ import java.lang.annotation.*; @Documented public @interface AutoLog { - /** - * 日志内容 - * - * @return - */ - String value() default ""; + /** + * 日志内容 + * + * @return + */ + String value() default ""; - /** - * 日志类型 - * - * @return 0:操作日志;1:登录日志;2:定时任务; - */ - int logType() default CommonConstant.LOG_TYPE_2; - - /** - * 操作日志类型 - * - * @return (1查询,2添加,3修改,4删除) - */ - int operateType() default 0; + /** + * 日志类型 + * + * @return 0:操作日志;1:登录日志;2:定时任务; + */ + int logType() default CommonConstant.LOG_TYPE_2; - /** - * 模块类型 默认为common - * @return - */ - ModuleType module() default ModuleType.COMMON; + /** + * 操作日志类型 + * + * @return (1查询,2添加,3修改,4删除) + */ + int operateType() default 0; + + /** + * 模块类型 默认为common + * + * @return + */ + ModuleType module() default ModuleType.COMMON; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/Dict.java b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/Dict.java index 2fdb582..1dfec37 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/Dict.java +++ b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/Dict.java @@ -7,6 +7,7 @@ import java.lang.annotation.Target; /** * 字典注解 + * * @author: dangzhenghui * @date: 2019年03月17日-下午9:37:16 */ @@ -42,6 +43,7 @@ public @interface Dict { //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + /** * 方法描述: 数据字典表所在数据源名称 * 作 者: chenrui diff --git a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/DynamicTable.java b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/DynamicTable.java index e377c8f..0095205 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/DynamicTable.java +++ b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/DynamicTable.java @@ -14,6 +14,7 @@ import java.lang.annotation.*; public @interface DynamicTable { /** * 需要动态解析的表名 + * * @return */ String value(); diff --git a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/OnlineAuth.java b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/OnlineAuth.java index 0100d07..8e81f16 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/OnlineAuth.java +++ b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/OnlineAuth.java @@ -4,15 +4,17 @@ import java.lang.annotation.*; /** * online请求拦截专用注解 + * * @author: jeecg-boot */ @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE,ElementType.METHOD}) +@Target({ElementType.TYPE, ElementType.METHOD}) @Documented public @interface OnlineAuth { /** * 请求关键字,在xxx/code之前的字符串 + * * @return */ String value(); diff --git a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/PermissionData.java b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/PermissionData.java index 1d8f399..e0f1ef8 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/PermissionData.java +++ b/physical-base-core/src/main/java/org/jeecg/common/aspect/annotation/PermissionData.java @@ -1,29 +1,27 @@ package org.jeecg.common.aspect.annotation; -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; +import java.lang.annotation.*; /** - * 数据权限注解 + * 数据权限注解 + * * @Author taoyan * @Date 2019年4月11日 */ @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE,ElementType.METHOD}) +@Target({ElementType.TYPE, ElementType.METHOD}) @Documented public @interface PermissionData { - /** - * 暂时没用 - * @return - */ - String value() default ""; - - - /** - * 配置菜单的组件路径,用于数据权限 - */ - String pageComponent() default ""; + /** + * 暂时没用 + * + * @return + */ + String value() default ""; + + + /** + * 配置菜单的组件路径,用于数据权限 + */ + String pageComponent() default ""; } \ No newline at end of file diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java b/physical-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java index 1cfdb6f..e82cd40 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java @@ -6,35 +6,35 @@ package org.jeecg.common.constant; */ public interface CommonConstant { - /** - * 正常状态 - */ - Integer STATUS_NORMAL = 0; + /** + * 正常状态 + */ + Integer STATUS_NORMAL = 0; - /** - * 禁用状态 - */ - Integer STATUS_DISABLE = -1; + /** + * 禁用状态 + */ + Integer STATUS_DISABLE = -1; - /** - * 删除标志 - */ - Integer DEL_FLAG_1 = 1; + /** + * 删除标志 + */ + Integer DEL_FLAG_1 = 1; - /** - * 未删除 - */ - Integer DEL_FLAG_0 = 0; + /** + * 未删除 + */ + Integer DEL_FLAG_0 = 0; - /** - * 系统日志类型: 登录 - */ - int LOG_TYPE_1 = 1; - - /** - * 系统日志类型: 操作 - */ - int LOG_TYPE_2 = 2; + /** + * 系统日志类型: 登录 + */ + int LOG_TYPE_1 = 1; + + /** + * 系统日志类型: 操作 + */ + int LOG_TYPE_2 = 2; /** * 系统日志类型: 租户操作日志 @@ -46,105 +46,129 @@ public interface CommonConstant { */ int LOG_TYPE_4 = 4; - /** - * 操作日志类型: 查询 - */ - int OPERATE_TYPE_1 = 1; - - /** - * 操作日志类型: 添加 - */ - int OPERATE_TYPE_2 = 2; - - /** - * 操作日志类型: 更新 - */ - int OPERATE_TYPE_3 = 3; - - /** - * 操作日志类型: 删除 - */ - int OPERATE_TYPE_4 = 4; - - /** - * 操作日志类型: 倒入 - */ - int OPERATE_TYPE_5 = 5; - - /** - * 操作日志类型: 导出 - */ - int OPERATE_TYPE_6 = 6; - - - /** {@code 500 Server Error} (HTTP/1.0 - RFC 1945) */ - Integer SC_INTERNAL_SERVER_ERROR_500 = 500; - /** {@code 404 Not Found} (HTTP/1.0 - RFC 1945) */ - Integer SC_INTERNAL_NOT_FOUND_404 = 404; - /** {@code 200 OK} (HTTP/1.0 - RFC 1945) */ - Integer SC_OK_200 = 200; - - /**访问权限认证未通过 510*/ - Integer SC_JEECG_NO_AUTHZ=510; + /** + * 操作日志类型: 查询 + */ + int OPERATE_TYPE_1 = 1; - /** 登录用户Shiro权限缓存KEY前缀 */ - public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:org.jeecg.config.shiro.ShiroRealm.authorizationCache:"; - /** 登录用户Token令牌缓存KEY前缀 */ - String PREFIX_USER_TOKEN = "prefix_user_token:"; + /** + * 操作日志类型: 添加 + */ + int OPERATE_TYPE_2 = 2; + + /** + * 操作日志类型: 更新 + */ + int OPERATE_TYPE_3 = 3; + + /** + * 操作日志类型: 删除 + */ + int OPERATE_TYPE_4 = 4; + + /** + * 操作日志类型: 倒入 + */ + int OPERATE_TYPE_5 = 5; + + /** + * 操作日志类型: 导出 + */ + int OPERATE_TYPE_6 = 6; + + + /** + * {@code 500 Server Error} (HTTP/1.0 - RFC 1945) + */ + Integer SC_INTERNAL_SERVER_ERROR_500 = 500; + /** + * {@code 404 Not Found} (HTTP/1.0 - RFC 1945) + */ + Integer SC_INTERNAL_NOT_FOUND_404 = 404; + /** + * {@code 200 OK} (HTTP/1.0 - RFC 1945) + */ + Integer SC_OK_200 = 200; + + /** + * 访问权限认证未通过 510 + */ + Integer SC_JEECG_NO_AUTHZ = 510; + + /** + * 登录用户Shiro权限缓存KEY前缀 + */ + public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:org.jeecg.config.shiro.ShiroRealm.authorizationCache:"; + /** + * 登录用户Token令牌缓存KEY前缀 + */ + String PREFIX_USER_TOKEN = "prefix_user_token:"; // /** Token缓存时间:3600秒即一小时 */ // int TOKEN_EXPIRE_TIME = 3600; - /** 登录二维码 */ - String LOGIN_QRCODE_PRE = "QRCODELOGIN:"; - String LOGIN_QRCODE = "LQ:"; - /** 登录二维码token */ - String LOGIN_QRCODE_TOKEN = "LQT:"; + /** + * 登录二维码 + */ + String LOGIN_QRCODE_PRE = "QRCODELOGIN:"; + String LOGIN_QRCODE = "LQ:"; + /** + * 登录二维码token + */ + String LOGIN_QRCODE_TOKEN = "LQT:"; /** - * 0:一级菜单 + * 0:一级菜单 */ - Integer MENU_TYPE_0 = 0; - /** - * 1:子菜单 - */ - Integer MENU_TYPE_1 = 1; + Integer MENU_TYPE_0 = 0; /** - * 2:按钮权限 + * 1:子菜单 */ - Integer MENU_TYPE_2 = 2; + Integer MENU_TYPE_1 = 1; + /** + * 2:按钮权限 + */ + Integer MENU_TYPE_2 = 2; + + /** + * 通告对象类型(USER:指定用户,ALL:全体用户) + */ + String MSG_TYPE_UESR = "USER"; + String MSG_TYPE_ALL = "ALL"; + + /** + * 发布状态(0未发布,1已发布,2已撤销) + */ + String NO_SEND = "0"; + String HAS_SEND = "1"; + String HAS_CANCLE = "2"; + + /** + * 阅读状态(0未读,1已读) + */ + Integer HAS_READ_FLAG = 1; + Integer NO_READ_FLAG = 0; + + /** + * 优先级(L低,M中,H高) + */ + String PRIORITY_L = "L"; + String PRIORITY_M = "M"; + String PRIORITY_H = "H"; - /**通告对象类型(USER:指定用户,ALL:全体用户)*/ - String MSG_TYPE_UESR = "USER"; - String MSG_TYPE_ALL = "ALL"; - - /**发布状态(0未发布,1已发布,2已撤销)*/ - String NO_SEND = "0"; - String HAS_SEND = "1"; - String HAS_CANCLE = "2"; - - /**阅读状态(0未读,1已读)*/ - Integer HAS_READ_FLAG = 1; - Integer NO_READ_FLAG = 0; - - /**优先级(L低,M中,H高)*/ - String PRIORITY_L = "L"; - String PRIORITY_M = "M"; - String PRIORITY_H = "H"; - /** * 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板 */ - String SMS_TPL_TYPE_0 = "0"; - String SMS_TPL_TYPE_1 = "1"; - String SMS_TPL_TYPE_2 = "2"; - + String SMS_TPL_TYPE_0 = "0"; + String SMS_TPL_TYPE_1 = "1"; + String SMS_TPL_TYPE_2 = "2"; + /** * 状态(0无效1有效) */ String STATUS_0 = "0"; String STATUS_1 = "1"; - + /** * 同步工作流引擎1同步0不同步 */ @@ -156,7 +180,7 @@ public interface CommonConstant { */ String MSG_CATEGORY_1 = "1"; String MSG_CATEGORY_2 = "2"; - + /** * 是否配置菜单的数据权限 1是0否 */ @@ -169,10 +193,14 @@ public interface CommonConstant { Integer USER_UNFREEZE = 1; Integer USER_FREEZE = 2; Integer USER_QUIT = 3; - - /**字典翻译文本后缀*/ + + /** + * 字典翻译文本后缀 + */ String DICT_TEXT_SUFFIX = "_dictText"; - /**字典翻译颜色后缀*/ + /** + * 字典翻译颜色后缀 + */ String DICT_COLOR_SUFFIX = "_dictColor"; /** @@ -248,26 +276,46 @@ public interface CommonConstant { Integer USER_IDENTITY_1 = 1; Integer USER_IDENTITY_2 = 2; - /** sys_user 表 username 唯一键索引 */ + /** + * sys_user 表 username 唯一键索引 + */ String SQL_INDEX_UNIQ_SYS_USER_USERNAME = "uniq_sys_user_username"; - /** sys_user 表 work_no 唯一键索引 */ + /** + * sys_user 表 work_no 唯一键索引 + */ String SQL_INDEX_UNIQ_SYS_USER_WORK_NO = "uniq_sys_user_work_no"; - /** sys_user 表 phone 唯一键索引 */ + /** + * sys_user 表 phone 唯一键索引 + */ String SQL_INDEX_UNIQ_SYS_USER_PHONE = "uniq_sys_user_phone"; - /** 达梦数据库升提示。违反表[SYS_USER]唯一性约束 */ + /** + * 达梦数据库升提示。违反表[SYS_USER]唯一性约束 + */ String SQL_INDEX_UNIQ_SYS_USER = "唯一性约束"; - /** sys_user 表 email 唯一键索引 */ + /** + * sys_user 表 email 唯一键索引 + */ String SQL_INDEX_UNIQ_SYS_USER_EMAIL = "uniq_sys_user_email"; - /** sys_quartz_job 表 job_class_name 唯一键索引 */ + /** + * sys_quartz_job 表 job_class_name 唯一键索引 + */ String SQL_INDEX_UNIQ_JOB_CLASS_NAME = "uniq_job_class_name"; - /** sys_position 表 code 唯一键索引 */ + /** + * sys_position 表 code 唯一键索引 + */ String SQL_INDEX_UNIQ_CODE = "uniq_code"; - /** sys_role 表 code 唯一键索引 */ + /** + * sys_role 表 code 唯一键索引 + */ String SQL_INDEX_UNIQ_SYS_ROLE_CODE = "uniq_sys_role_role_code"; - /** sys_depart 表 code 唯一键索引 */ + /** + * sys_depart 表 code 唯一键索引 + */ String SQL_INDEX_UNIQ_DEPART_ORG_CODE = "uniq_depart_org_code"; - /** sys_category 表 code 唯一键索引 */ + /** + * sys_category 表 code 唯一键索引 + */ String SQL_INDEX_UNIQ_CATEGORY_CODE = "idx_sc_code"; /** * 在线聊天 是否为默认分组 @@ -311,7 +359,7 @@ public interface CommonConstant { * 公文文档上传自定义路径 */ String UPLOAD_CUSTOM_PATH_OFFICIAL = "officialdoc"; - /** + /** * 公文文档下载自定义路径 */ String DOWNLOAD_CUSTOM_PATH_OFFICIAL = "officaldown"; @@ -319,8 +367,8 @@ public interface CommonConstant { /** * WPS存储值类别(1 code文号 2 text(WPS模板还是公文发文模板)) */ - String WPS_TYPE_1="1"; - String WPS_TYPE_2="2"; + String WPS_TYPE_1 = "1"; + String WPS_TYPE_2 = "2"; /**===============================================================================================*/ @@ -331,11 +379,17 @@ public interface CommonConstant { String X_ACCESS_TOKEN = "X-Access-Token"; String X_SIGN = "X-Sign"; String X_TIMESTAMP = "X-TIMESTAMP"; - /** 租户请求头 更名为:X-Tenant-Id */ + /** + * 租户请求头 更名为:X-Tenant-Id + */ String TENANT_ID = "X-Tenant-Id"; - /** 简流接口请求头,用于排除不支持的控件字段 */ + /** + * 简流接口请求头,用于排除不支持的控件字段 + */ String X_MiniFlowExclusionFieldMode = "X-Miniflowexclusionfieldmode"; - /**===============================================================================================*/ + /** + * =============================================================================================== + */ String TOKEN_IS_INVALID_MSG = "Token失效,请重新登录!"; String X_FORWARDED_SCHEME = "X-Forwarded-Scheme"; @@ -360,41 +414,65 @@ public interface CommonConstant { */ String THIRD_SYNC_TO_LOCAL = "SYNC_TO_LOCAL"; - /** 系统通告消息状态:0=未发布 */ + /** + * 系统通告消息状态:0=未发布 + */ String ANNOUNCEMENT_SEND_STATUS_0 = "0"; - /** 系统通告消息状态:1=已发布 */ + /** + * 系统通告消息状态:1=已发布 + */ String ANNOUNCEMENT_SEND_STATUS_1 = "1"; - /** 系统通告消息状态:2=已撤销 */ + /** + * 系统通告消息状态:2=已撤销 + */ String ANNOUNCEMENT_SEND_STATUS_2 = "2"; - /**ONLINE 报表权限用 从request中获取地址栏后的参数*/ - String ONL_REP_URL_PARAM_STR="onlRepUrlParamStr"; + /** + * ONLINE 报表权限用 从request中获取地址栏后的参数 + */ + String ONL_REP_URL_PARAM_STR = "onlRepUrlParamStr"; - /**POST请求*/ + /** + * POST请求 + */ String HTTP_POST = "POST"; - /**PUT请求*/ + /** + * PUT请求 + */ String HTTP_PUT = "PUT"; - /**PATCH请求*/ + /** + * PATCH请求 + */ String HTTP_PATCH = "PATCH"; - /**未知的*/ + /** + * 未知的 + */ String UNKNOWN = "unknown"; - /**字符串http*/ + /** + * 字符串http + */ String STR_HTTP = "http"; - /**String 类型的空值*/ + /** + * String 类型的空值 + */ String STRING_NULL = "null"; - /**前端vue3版本Header参数名*/ - String VERSION="X-Version"; + /** + * 前端vue3版本Header参数名 + */ + String VERSION = "X-Version"; String VERSION_V3 = "v3"; - /**存储在线程变量里的动态表名*/ - String DYNAMIC_TABLE_NAME="DYNAMIC_TABLE_NAME"; + /** + * 存储在线程变量里的动态表名 + */ + String DYNAMIC_TABLE_NAME = "DYNAMIC_TABLE_NAME"; /** * http:// http协议 */ @@ -404,10 +482,14 @@ public interface CommonConstant { * https:// https协议 */ String HTTPS_PROTOCOL = "https://"; - - /** 部门表唯一key,id */ + + /** + * 部门表唯一key,id + */ String DEPART_KEY_ID = "id"; - /** 部门表唯一key,orgCode */ + /** + * 部门表唯一key,orgCode + */ String DEPART_KEY_ORG_CODE = "orgCode"; /**======【消息推送相关】==============================================================================*/ @@ -421,10 +503,10 @@ public interface CommonConstant { */ String NOTICE_MSG_BUS_ID = "NOTICE_MSG_BUS_ID"; - /** - * 发消息 消息业务类型 - */ - String NOTICE_MSG_BUS_TYPE = "NOTICE_MSG_BUS_TYPE"; + /** + * 发消息 消息业务类型 + */ + String NOTICE_MSG_BUS_TYPE = "NOTICE_MSG_BUS_TYPE"; /** * 邮箱消息中地址登录时地址后携带的token,需要替换成真实的token值 @@ -446,7 +528,9 @@ public interface CommonConstant { */ String DATA_LOG_TYPE_JSON = "json"; - /** 消息模板:markdown */ + /** + * 消息模板:markdown + */ String MSG_TEMPLATE_TYPE_MD = "5"; /**========【消息推送相关】==========================================================================*/ @@ -485,84 +569,86 @@ public interface CommonConstant { */ Integer BPM_USER_EVENT_ADD = 1; - /** - * 离职事件 - */ + /** + * 离职事件 + */ Integer BPM_USER_EVENT_LEVEL = 2; - /** - * 用户租户状态(正常/已通过审核的) - */ - String USER_TENANT_NORMAL = "1"; + /** + * 用户租户状态(正常/已通过审核的) + */ + String USER_TENANT_NORMAL = "1"; - /** - * 用户租户状态(离职) - */ - String USER_TENANT_QUIT = "2"; + /** + * 用户租户状态(离职) + */ + String USER_TENANT_QUIT = "2"; - /** - * 用户租户状态(审核中) - */ - String USER_TENANT_UNDER_REVIEW = "3"; - - /** - * 用户租户状态(拒绝) - */ - String USER_TENANT_REFUSE = "4"; + /** + * 用户租户状态(审核中) + */ + String USER_TENANT_UNDER_REVIEW = "3"; - /** - * 用户租户状态(邀请) - */ - String USER_TENANT_INVITE = "5"; - - /** - * 不是叶子节点 - */ - Integer NOT_LEAF = 0; + /** + * 用户租户状态(拒绝) + */ + String USER_TENANT_REFUSE = "4"; - /** - * 是叶子节点 - */ - Integer IS_LEAF = 1; + /** + * 用户租户状态(邀请) + */ + String USER_TENANT_INVITE = "5"; - /** - * 钉钉 - */ - String DINGTALK = "DINGTALK"; + /** + * 不是叶子节点 + */ + Integer NOT_LEAF = 0; - /** - * 企业微信 - */ - String WECHAT_ENTERPRISE = "WECHAT_ENTERPRISE"; + /** + * 是叶子节点 + */ + Integer IS_LEAF = 1; - /** - * 系统默认租户id 0 - */ - Integer TENANT_ID_DEFAULT_VALUE = 0; + /** + * 钉钉 + */ + String DINGTALK = "DINGTALK"; - /** - * 【low-app用】 应用级别的复制 - */ - String COPY_LEVEL_APP = "app"; + /** + * 企业微信 + */ + String WECHAT_ENTERPRISE = "WECHAT_ENTERPRISE"; - /** - * 【low-app用】 菜单级别的复制 - */ - String COPY_LEVEL_MENU = "menu"; + /** + * 系统默认租户id 0 + */ + Integer TENANT_ID_DEFAULT_VALUE = 0; + + /** + * 【low-app用】 应用级别的复制 + */ + String COPY_LEVEL_APP = "app"; + + /** + * 【low-app用】 菜单级别的复制 + */ + String COPY_LEVEL_MENU = "menu"; - /** - * 【low-app用】 应用备份 - */ - String COPY_LEVEL_BAK = "backup"; + /** + * 【low-app用】 应用备份 + */ + String COPY_LEVEL_BAK = "backup"; - /** - * 【low-app用】 从备份还原 - */ - String COPY_LEVEL_COVER = "cover"; + /** + * 【low-app用】 从备份还原 + */ + String COPY_LEVEL_COVER = "cover"; - /** 【QQYUN-6034】关联字段变更历史值,缓存半个小时 */ - String CACHE_REL_FIELD_OLD_VAL = "sys:cache:desform:relFieldOldVal:"; + /** + * 【QQYUN-6034】关联字段变更历史值,缓存半个小时 + */ + String CACHE_REL_FIELD_OLD_VAL = "sys:cache:desform:relFieldOldVal:"; /** * 排序类型:升序 @@ -574,47 +660,47 @@ public interface CommonConstant { String ORDER_TYPE_DESC = "DESC"; - //update-begin---author:scott ---date:2023-09-10 for:积木报表常量---- - /** - * 报表允许设计开发的角色 - */ - public static String[] allowDevRoles = new String[]{"lowdeveloper", "admin"}; - /** - * 【对应积木报表的常量】 - * 数据隔离模式: 按照创建人隔离 - */ - public static final String SAAS_MODE_CREATED = "created"; - /** - * 【对应积木报表的常量】 - * 数据隔离模式: 按照租户隔离 - */ - public static final String SAAS_MODE_TENANT = "tenant"; - //update-end---author:scott ---date::2023-09-10 for:积木报表常量---- - - //update-begin---author:wangshuai---date:2024-04-07---for:修改手机号常量--- - /** - * 修改手机号短信验证码redis-key的前缀 - */ - String CHANGE_PHONE_REDIS_KEY_PRE = "sys:cache:phone:change_phone_msg:"; + //update-begin---author:scott ---date:2023-09-10 for:积木报表常量---- + /** + * 报表允许设计开发的角色 + */ + public static String[] allowDevRoles = new String[]{"lowdeveloper", "admin"}; + /** + * 【对应积木报表的常量】 + * 数据隔离模式: 按照创建人隔离 + */ + public static final String SAAS_MODE_CREATED = "created"; + /** + * 【对应积木报表的常量】 + * 数据隔离模式: 按照租户隔离 + */ + public static final String SAAS_MODE_TENANT = "tenant"; + //update-end---author:scott ---date::2023-09-10 for:积木报表常量---- + + //update-begin---author:wangshuai---date:2024-04-07---for:修改手机号常量--- + /** + * 修改手机号短信验证码redis-key的前缀 + */ + String CHANGE_PHONE_REDIS_KEY_PRE = "sys:cache:phone:change_phone_msg:"; /** * 缓存用户最后一次收到消息通知的时间 KEY */ - String CACHE_KEY_USER_LAST_ANNOUNT_TIME_1HOUR = "sys:cache:userinfo:user_last_annount_time::%s"; - - /** - * 验证原手机号 - */ - String VERIFY_ORIGINAL_PHONE = "verifyOriginalPhone"; + String CACHE_KEY_USER_LAST_ANNOUNT_TIME_1HOUR = "sys:cache:userinfo:user_last_annount_time::%s"; - /** - * 修改手机号 - */ - String UPDATE_PHONE = "updatePhone"; - //update-end---author:wangshuai---date:2024-04-07---for:修改手机号常量--- - - /** - * 修改手机号验证码请求次数超出 - */ - Integer PHONE_SMS_FAIL_CODE = 40002; + /** + * 验证原手机号 + */ + String VERIFY_ORIGINAL_PHONE = "verifyOriginalPhone"; + + /** + * 修改手机号 + */ + String UPDATE_PHONE = "updatePhone"; + //update-end---author:wangshuai---date:2024-04-07---for:修改手机号常量--- + + /** + * 修改手机号验证码请求次数超出 + */ + Integer PHONE_SMS_FAIL_CODE = 40002; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/CommonSendStatus.java b/physical-base-core/src/main/java/org/jeecg/common/constant/CommonSendStatus.java index 0706b4a..45f2545 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/CommonSendStatus.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/CommonSendStatus.java @@ -1,9 +1,9 @@ package org.jeecg.common.constant; /** - * 系统通告 - 发布状态 - * @Author LeeShaoQing + * 系统通告 - 发布状态 * + * @Author LeeShaoQing */ public interface CommonSendStatus { @@ -15,34 +15,44 @@ public interface CommonSendStatus { /** * 已发布 */ - public static final String PUBLISHED_STATUS_1 = "1"; + public static final String PUBLISHED_STATUS_1 = "1"; /** * 撤销 */ - public static final String REVOKE_STATUS_2 = "2"; + public static final String REVOKE_STATUS_2 = "2"; /** * app端推送会话标识后缀 */ - public static final String APP_SESSION_SUFFIX = "_app"; + public static final String APP_SESSION_SUFFIX = "_app"; - /**-----【流程相关通知模板code】------------------------------------------------------------*/ - /**流程催办——系统通知消息模板*/ - public static final String TZMB_BPM_CUIBAN = "bpm_cuiban"; - /**流程抄送——系统通知消息模板*/ - public static final String TZMB_BPM_CC = "bpm_cc"; - /**流程催办——邮件通知消息模板*/ - public static final String TZMB_BPM_CUIBAN_EMAIL = "bpm_cuiban_email"; - /**标准模板—系统消息通知*/ - public static final String TZMB_SYS_TS_NOTE = "sys_ts_note"; - /**流程超时提醒——系统通知消息模板*/ - public static final String TZMB_BPM_CHAOSHI_TIP = "bpm_chaoshi_tip"; - /**-----【流程相关通知模板code】-----------------------------------------------------------*/ + /**-----【流程相关通知模板code】------------------------------------------------------------*/ + /** + * 流程催办——系统通知消息模板 + */ + public static final String TZMB_BPM_CUIBAN = "bpm_cuiban"; + /** + * 流程抄送——系统通知消息模板 + */ + public static final String TZMB_BPM_CC = "bpm_cc"; + /** + * 流程催办——邮件通知消息模板 + */ + public static final String TZMB_BPM_CUIBAN_EMAIL = "bpm_cuiban_email"; + /** + * 标准模板—系统消息通知 + */ + public static final String TZMB_SYS_TS_NOTE = "sys_ts_note"; + /** + * 流程超时提醒——系统通知消息模板 + */ + public static final String TZMB_BPM_CHAOSHI_TIP = "bpm_chaoshi_tip"; + /**-----【流程相关通知模板code】-----------------------------------------------------------*/ - /** - * 系统通知拓展参数(比如:用于流程抄送和催办通知,这里额外传递流程跳转页面所需要的路由参数) - */ - public static final String MSG_ABSTRACT_JSON = "msg_abstract"; + /** + * 系统通知拓展参数(比如:用于流程抄送和催办通知,这里额外传递流程跳转页面所需要的路由参数) + */ + public static final String MSG_ABSTRACT_JSON = "msg_abstract"; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/DataBaseConstant.java b/physical-base-core/src/main/java/org/jeecg/common/constant/DataBaseConstant.java index b6d2be1..dc78fad 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/DataBaseConstant.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/DataBaseConstant.java @@ -1,37 +1,57 @@ package org.jeecg.common.constant; + /** * 数据库上下文常量 + * * @author: jeecg-boot */ public interface DataBaseConstant { - //*********数据库类型**************************************** + //*********数据库类型**************************************** - /**MYSQL数据库*/ - public static final String DB_TYPE_MYSQL = "MYSQL"; + /** + * MYSQL数据库 + */ + public static final String DB_TYPE_MYSQL = "MYSQL"; - /** ORACLE*/ - public static final String DB_TYPE_ORACLE = "ORACLE"; + /** + * ORACLE + */ + public static final String DB_TYPE_ORACLE = "ORACLE"; - /**达梦数据库*/ - public static final String DB_TYPE_DM = "DM"; + /** + * 达梦数据库 + */ + public static final String DB_TYPE_DM = "DM"; - /**postgreSQL达梦数据库*/ - public static final String DB_TYPE_POSTGRESQL = "POSTGRESQL"; - - /**人大金仓数据库*/ - public static final String DB_TYPE_KINGBASEES = "KINGBASEES"; + /** + * postgreSQL达梦数据库 + */ + public static final String DB_TYPE_POSTGRESQL = "POSTGRESQL"; - /**sqlserver数据库*/ - public static final String DB_TYPE_SQLSERVER = "SQLSERVER"; + /** + * 人大金仓数据库 + */ + public static final String DB_TYPE_KINGBASEES = "KINGBASEES"; - /**mariadb 数据库*/ - public static final String DB_TYPE_MARIADB = "MARIADB"; + /** + * sqlserver数据库 + */ + public static final String DB_TYPE_SQLSERVER = "SQLSERVER"; - /**DB2 数据库*/ - public static final String DB_TYPE_DB2 = "DB2"; + /** + * mariadb 数据库 + */ + public static final String DB_TYPE_MARIADB = "MARIADB"; - /**HSQL 数据库*/ - public static final String DB_TYPE_HSQL = "HSQL"; + /** + * DB2 数据库 + */ + public static final String DB_TYPE_DB2 = "DB2"; + + /** + * HSQL 数据库 + */ + public static final String DB_TYPE_HSQL = "HSQL"; // // 数据库类型,对应 database_type 字典 // public static final String DB_TYPE_MYSQL_NUM = "1"; @@ -41,129 +61,129 @@ public interface DataBaseConstant { // public static final String DB_TYPE_POSTGRESQL_NUM = "4"; // public static final String DB_TYPE_MARIADB_NUM = "5"; - //*********系统上下文变量**************************************** - /** - * 数据-所属机构编码 - */ - public static final String SYS_ORG_CODE = "sysOrgCode"; - /** - * 数据-所属机构编码 - */ - public static final String SYS_ORG_CODE_TABLE = "sys_org_code"; - /** - * 数据-所属机构编码 - */ - public static final String SYS_MULTI_ORG_CODE = "sysMultiOrgCode"; - /** - * 数据-所属机构编码 - */ - public static final String SYS_MULTI_ORG_CODE_TABLE = "sys_multi_org_code"; - /** - * 数据-所属机构ID - */ - public static final String SYS_ORG_ID = "sysOrgId"; - /** - * 数据-所属机构ID - */ - public static final String SYS_ORG_ID_TABLE = "sys_org_id"; - /** - * 数据-所属角色code(多个逗号分割) - */ - public static final String SYS_ROLE_CODE = "sysRoleCode"; - /** - * 数据-所属角色code(多个逗号分割) - */ - public static final String SYS_ROLE_CODE_TABLE = "sys_role_code"; - /** - * 数据-系统用户编码(对应登录用户账号) - */ - public static final String SYS_USER_CODE = "sysUserCode"; - /** - * 数据-系统用户编码(对应登录用户账号) - */ - public static final String SYS_USER_CODE_TABLE = "sys_user_code"; - /** - * 登录用户ID - */ - public static final String SYS_USER_ID = "sysUserId"; - /** - * 登录用户ID - */ - public static final String SYS_USER_ID_TABLE = "sys_user_id"; - /** - * 登录用户真实姓名 - */ - public static final String SYS_USER_NAME = "sysUserName"; - /** - * 登录用户真实姓名 - */ - public static final String SYS_USER_NAME_TABLE = "sys_user_name"; - /** - * 系统日期"yyyy-MM-dd" - */ - public static final String SYS_DATE = "sysDate"; - /** - * 系统日期"yyyy-MM-dd" - */ - public static final String SYS_DATE_TABLE = "sys_date"; - /** - * 系统时间"yyyy-MM-dd HH:mm" - */ - public static final String SYS_TIME = "sysTime"; - /** - * 系统时间"yyyy-MM-dd HH:mm" - */ - public static final String SYS_TIME_TABLE = "sys_time"; - /** - * 数据-所属机构编码 - */ - public static final String SYS_BASE_PATH = "sys_base_path"; - //*********系统上下文变量**************************************** - - - //*********系统建表标准字段**************************************** - /** - * 创建者登录名称 - */ - public static final String CREATE_BY_TABLE = "create_by"; - /** - * 创建者登录名称 - */ - public static final String CREATE_BY = "createBy"; - /** - * 创建日期时间 - */ - public static final String CREATE_TIME_TABLE = "create_time"; - /** - * 创建日期时间 - */ - public static final String CREATE_TIME = "createTime"; - /** - * 更新用户登录名称 - */ - public static final String UPDATE_BY_TABLE = "update_by"; - /** - * 更新用户登录名称 - */ - public static final String UPDATE_BY = "updateBy"; - /** - * 更新日期时间 - */ - public static final String UPDATE_TIME = "updateTime"; - /** - * 更新日期时间 - */ - public static final String UPDATE_TIME_TABLE = "update_time"; - - /** - * 业务流程状态 - */ - public static final String BPM_STATUS = "bpmStatus"; - /** - * 业务流程状态 - */ - public static final String BPM_STATUS_TABLE = "bpm_status"; - //*********系统建表标准字段**************************************** + //*********系统上下文变量**************************************** + /** + * 数据-所属机构编码 + */ + public static final String SYS_ORG_CODE = "sysOrgCode"; + /** + * 数据-所属机构编码 + */ + public static final String SYS_ORG_CODE_TABLE = "sys_org_code"; + /** + * 数据-所属机构编码 + */ + public static final String SYS_MULTI_ORG_CODE = "sysMultiOrgCode"; + /** + * 数据-所属机构编码 + */ + public static final String SYS_MULTI_ORG_CODE_TABLE = "sys_multi_org_code"; + /** + * 数据-所属机构ID + */ + public static final String SYS_ORG_ID = "sysOrgId"; + /** + * 数据-所属机构ID + */ + public static final String SYS_ORG_ID_TABLE = "sys_org_id"; + /** + * 数据-所属角色code(多个逗号分割) + */ + public static final String SYS_ROLE_CODE = "sysRoleCode"; + /** + * 数据-所属角色code(多个逗号分割) + */ + public static final String SYS_ROLE_CODE_TABLE = "sys_role_code"; + /** + * 数据-系统用户编码(对应登录用户账号) + */ + public static final String SYS_USER_CODE = "sysUserCode"; + /** + * 数据-系统用户编码(对应登录用户账号) + */ + public static final String SYS_USER_CODE_TABLE = "sys_user_code"; + /** + * 登录用户ID + */ + public static final String SYS_USER_ID = "sysUserId"; + /** + * 登录用户ID + */ + public static final String SYS_USER_ID_TABLE = "sys_user_id"; + /** + * 登录用户真实姓名 + */ + public static final String SYS_USER_NAME = "sysUserName"; + /** + * 登录用户真实姓名 + */ + public static final String SYS_USER_NAME_TABLE = "sys_user_name"; + /** + * 系统日期"yyyy-MM-dd" + */ + public static final String SYS_DATE = "sysDate"; + /** + * 系统日期"yyyy-MM-dd" + */ + public static final String SYS_DATE_TABLE = "sys_date"; + /** + * 系统时间"yyyy-MM-dd HH:mm" + */ + public static final String SYS_TIME = "sysTime"; + /** + * 系统时间"yyyy-MM-dd HH:mm" + */ + public static final String SYS_TIME_TABLE = "sys_time"; + /** + * 数据-所属机构编码 + */ + public static final String SYS_BASE_PATH = "sys_base_path"; + //*********系统上下文变量**************************************** + + + //*********系统建表标准字段**************************************** + /** + * 创建者登录名称 + */ + public static final String CREATE_BY_TABLE = "create_by"; + /** + * 创建者登录名称 + */ + public static final String CREATE_BY = "createBy"; + /** + * 创建日期时间 + */ + public static final String CREATE_TIME_TABLE = "create_time"; + /** + * 创建日期时间 + */ + public static final String CREATE_TIME = "createTime"; + /** + * 更新用户登录名称 + */ + public static final String UPDATE_BY_TABLE = "update_by"; + /** + * 更新用户登录名称 + */ + public static final String UPDATE_BY = "updateBy"; + /** + * 更新日期时间 + */ + public static final String UPDATE_TIME = "updateTime"; + /** + * 更新日期时间 + */ + public static final String UPDATE_TIME_TABLE = "update_time"; + + /** + * 业务流程状态 + */ + public static final String BPM_STATUS = "bpmStatus"; + /** + * 业务流程状态 + */ + public static final String BPM_STATUS_TABLE = "bpm_status"; + //*********系统建表标准字段**************************************** /** * sql语句 where diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/FillRuleConstant.java b/physical-base-core/src/main/java/org/jeecg/common/constant/FillRuleConstant.java index d2b07d7..25a11f0 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/FillRuleConstant.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/FillRuleConstant.java @@ -2,6 +2,7 @@ package org.jeecg.common.constant; /** * 规则值生成 编码常量类 + * * @author: taoyan * @date: 2020年04月02日 */ diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/ProvinceCityArea.java b/physical-base-core/src/main/java/org/jeecg/common/constant/ProvinceCityArea.java index 6c2f170..0699449 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/ProvinceCityArea.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/ProvinceCityArea.java @@ -2,16 +2,12 @@ package org.jeecg.common.constant; import com.alibaba.fastjson.JSONObject; import org.jeecg.common.util.oConvertUtils; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; import java.io.File; -import java.io.IOException; import java.util.ArrayList; -import java.util.Scanner; -import java.util.Set; import java.util.List; +import java.util.Scanner; /** * @Description: 省市区 @@ -21,24 +17,24 @@ import java.util.List; public class ProvinceCityArea { List areaList; - public String getText(String code){ + public String getText(String code) { this.initAreaList(); - if(this.areaList!=null || this.areaList.size()>0){ + if (this.areaList != null || this.areaList.size() > 0) { List ls = new ArrayList(); - getAreaByCode(code,ls); - return String.join("/",ls); + getAreaByCode(code, ls); + return String.join("/", ls); } return ""; } - public String getCode(String text){ + public String getCode(String text) { this.initAreaList(); - if(areaList!=null && areaList.size()>0){ - for(int i=areaList.size()-1;i>=0;i--){ + if (areaList != null && areaList.size() > 0) { + for (int i = areaList.size() - 1; i >= 0; i--) { //update-begin-author:taoyan date:2022-5-24 for:VUEN-1088 online 导入 省市区导入后 导入数据错乱 北京市/市辖区/西城区-->山西省/晋城市/城区 String areaText = areaList.get(i).getText(); String cityText = areaList.get(i).getAheadText(); - if(text.indexOf(areaText)>=0 && (cityText!=null && text.indexOf(cityText)>=0)){ + if (text.indexOf(areaText) >= 0 && (cityText != null && text.indexOf(cityText) >= 0)) { return areaList.get(i).getId(); } //update-end-author:taoyan date:2022-5-24 for:VUEN-1088 online 导入 省市区导入后 导入数据错乱 北京市/市辖区/西城区-->山西省/晋城市/城区 @@ -48,8 +44,10 @@ public class ProvinceCityArea { } // update-begin-author:sunjianlei date:20220121 for:【JTC-704】数据导入错误 省市区组件,文件中为北京市,导入后,导为了山西省 + /** * 获取省市区code,精准匹配 + * * @param texts 文本数组,省,市,区 * @return 返回 省市区的code */ @@ -83,6 +81,7 @@ public class ProvinceCityArea { /** * 根据text获取area + * * @param text * @return */ @@ -97,6 +96,7 @@ public class ProvinceCityArea { /** * 通过pid获取 area 对象 + * * @param pCode 父级编码 * @param text * @return @@ -114,41 +114,41 @@ public class ProvinceCityArea { } // update-end-author:sunjianlei date:20220121 for:【JTC-704】数据导入错误 省市区组件,文件中为北京市,导入后,导为了山西省 - public void getAreaByCode(String code,List ls){ - for(Area area: areaList){ - if(area.getId().equals(code)){ + public void getAreaByCode(String code, List ls) { + for (Area area : areaList) { + if (area.getId().equals(code)) { String pid = area.getPid(); - ls.add(0,area.getText()); - getAreaByCode(pid,ls); + ls.add(0, area.getText()); + getAreaByCode(pid, ls); } } } - private void initAreaList(){ + private void initAreaList() { //System.out.println("====================="); - if(this.areaList==null || this.areaList.size()==0){ + if (this.areaList == null || this.areaList.size() == 0) { this.areaList = new ArrayList(); try { String jsonData = oConvertUtils.readStatic("classpath:static/pca.json"); JSONObject baseJson = JSONObject.parseObject(jsonData); //第一层 省 JSONObject provinceJson = baseJson.getJSONObject("86"); - for(String provinceKey: provinceJson.keySet()){ + for (String provinceKey : provinceJson.keySet()) { //System.out.println("===="+provinceKey); - Area province = new Area(provinceKey,provinceJson.getString(provinceKey),"86"); + Area province = new Area(provinceKey, provinceJson.getString(provinceKey), "86"); this.areaList.add(province); //第二层 市 JSONObject cityJson = baseJson.getJSONObject(provinceKey); - for(String cityKey:cityJson.keySet()){ + for (String cityKey : cityJson.keySet()) { //System.out.println("-----"+cityKey); - Area city = new Area(cityKey,cityJson.getString(cityKey),provinceKey); + Area city = new Area(cityKey, cityJson.getString(cityKey), provinceKey); this.areaList.add(city); //第三层 区 - JSONObject areaJson = baseJson.getJSONObject(cityKey); - if(areaJson!=null){ - for(String areaKey:areaJson.keySet()){ + JSONObject areaJson = baseJson.getJSONObject(cityKey); + if (areaJson != null) { + for (String areaKey : areaJson.keySet()) { //System.out.println("········"+areaKey); - Area area = new Area(areaKey,areaJson.getString(areaKey),cityKey); + Area area = new Area(areaKey, areaJson.getString(areaKey), cityKey); //update-begin-author:taoyan date:2022-5-24 for:VUEN-1088 online 导入 省市区导入后 导入数据错乱 北京市/市辖区/西城区-->山西省/晋城市/城区 area.setAheadText(cityJson.getString(cityKey)); //update-end-author:taoyan date:2022-5-24 for:VUEN-1088 online 导入 省市区导入后 导入数据错乱 北京市/市辖区/西城区-->山西省/晋城市/城区 @@ -165,7 +165,7 @@ public class ProvinceCityArea { } - private String jsonRead(File file){ + private String jsonRead(File file) { Scanner scanner = null; StringBuilder buffer = new StringBuilder(); try { @@ -183,14 +183,14 @@ public class ProvinceCityArea { return buffer.toString(); } - class Area{ + class Area { String id; String text; String pid; // 用于存储上级文本数据,区的上级文本 是市的数据 String aheadText; - public Area(String id,String text,String pid){ + public Area(String id, String text, String pid) { this.id = id; this.text = text; this.pid = pid; @@ -211,6 +211,7 @@ public class ProvinceCityArea { public String getAheadText() { return aheadText; } + public void setAheadText(String aheadText) { this.aheadText = aheadText; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/ServiceNameConstants.java b/physical-base-core/src/main/java/org/jeecg/common/constant/ServiceNameConstants.java index e4a1e8c..efee798 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/ServiceNameConstants.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/ServiceNameConstants.java @@ -25,19 +25,19 @@ package org.jeecg.common.constant; */ public interface ServiceNameConstants { - /** - * 微服务名:系统管理模块 - */ - String SERVICE_SYSTEM = "jeecg-system"; - /** - * 微服务名: demo模块 - */ - String SERVICE_DEMO = "jeecg-demo"; - /** - * 微服务名:joa模块 - */ - String SERVICE_JOA = "jeecg-joa"; - + /** + * 微服务名:系统管理模块 + */ + String SERVICE_SYSTEM = "jeecg-system"; + /** + * 微服务名: demo模块 + */ + String SERVICE_DEMO = "jeecg-demo"; + /** + * 微服务名:joa模块 + */ + String SERVICE_JOA = "jeecg-joa"; + // /** // * 微服务名:online在线模块 // */ @@ -51,9 +51,9 @@ public interface ServiceNameConstants { // */ // String SERVICE_FORM = "jeecg-desform"; - /** - * gateway通过header传递根路径 basePath - */ - String X_GATEWAY_BASE_PATH = "X_GATEWAY_BASE_PATH"; + /** + * gateway通过header传递根路径 basePath + */ + String X_GATEWAY_BASE_PATH = "X_GATEWAY_BASE_PATH"; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/VxeSocketConst.java b/physical-base-core/src/main/java/org/jeecg/common/constant/VxeSocketConst.java index 7559463..07f3db9 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/VxeSocketConst.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/VxeSocketConst.java @@ -2,6 +2,7 @@ package org.jeecg.common.constant; /** * VXESocket 常量 + * * @author: jeecg-boot */ public class VxeSocketConst { diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/CgformEnum.java b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/CgformEnum.java index cbd5436..f2352ab 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/CgformEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/CgformEnum.java @@ -7,6 +7,7 @@ import java.util.Map; /** * online表单枚举 代码生成器用到 + * * @author: jeecg-boot */ public enum CgformEnum { @@ -14,33 +15,33 @@ public enum CgformEnum { /** * 单表 */ - ONE(1, "one", "/jeecg/code-template-online", "default.one", "经典风格", new String[]{"vue3","vue","vue3Native"}), + ONE(1, "one", "/jeecg/code-template-online", "default.one", "经典风格", new String[]{"vue3", "vue", "vue3Native"}), /** * 多表 */ - MANY(2, "many", "/jeecg/code-template-online", "default.onetomany", "经典风格" ,new String[]{"vue"}), + MANY(2, "many", "/jeecg/code-template-online", "default.onetomany", "经典风格", new String[]{"vue"}), /** * 多表(jvxe风格) - * */ - JVXE_TABLE(2, "jvxe", "/jeecg/code-template-online", "jvxe.onetomany", "默认风格" ,new String[]{"vue3","vue","vue3Native"}), + */ + JVXE_TABLE(2, "jvxe", "/jeecg/code-template-online", "jvxe.onetomany", "默认风格", new String[]{"vue3", "vue", "vue3Native"}), /** * 多表 (erp风格) */ - ERP(2, "erp", "/jeecg/code-template-online", "erp.onetomany", "ERP风格" ,new String[]{"vue3","vue","vue3Native"}), + ERP(2, "erp", "/jeecg/code-template-online", "erp.onetomany", "ERP风格", new String[]{"vue3", "vue", "vue3Native"}), /** * 多表(内嵌子表风格) */ - INNER_TABLE(2, "innerTable", "/jeecg/code-template-online", "inner-table.onetomany", "内嵌子表风格" ,new String[]{"vue3","vue"}), + INNER_TABLE(2, "innerTable", "/jeecg/code-template-online", "inner-table.onetomany", "内嵌子表风格", new String[]{"vue3", "vue"}), /** * 多表(tab风格) - * */ - TAB(2, "tab", "/jeecg/code-template-online", "tab.onetomany", "Tab风格" ,new String[]{"vue3","vue"}), + */ + TAB(2, "tab", "/jeecg/code-template-online", "tab.onetomany", "Tab风格", new String[]{"vue3", "vue"}), /** * 树形列表 */ - TREE(3, "tree", "/jeecg/code-template-online", "default.tree", "树形列表" ,new String[]{"vue3","vue","vue3Native"}); + TREE(3, "tree", "/jeecg/code-template-online", "default.tree", "树形列表", new String[]{"vue3", "vue", "vue3Native"}); /** * 类型 1/单表 2/一对多 3/树 @@ -70,12 +71,12 @@ public enum CgformEnum { /** * 构造器 * - * @param type 类型 1/单表 2/一对多 3/树 - * @param code 模板编码 - * @param templatePath 模板路径 - * @param stylePath 模板子路径 + * @param type 类型 1/单表 2/一对多 3/树 + * @param code 模板编码 + * @param templatePath 模板路径 + * @param stylePath 模板子路径 * @param note - * @param vueStyle 支持代码风格 + * @param vueStyle 支持代码风格 */ CgformEnum(int type, String code, String templatePath, String stylePath, String note, String[] vueStyle) { this.type = type; diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/DySmsEnum.java b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/DySmsEnum.java index 8034f0f..73339a0 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/DySmsEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/DySmsEnum.java @@ -8,76 +8,92 @@ import org.apache.commons.lang3.StringUtils; */ public enum DySmsEnum { - /**登录短信模板编码*/ - LOGIN_TEMPLATE_CODE("SMS_175435174","敲敲云","code"), - /**忘记密码短信模板编码*/ - FORGET_PASSWORD_TEMPLATE_CODE("SMS_175435174","敲敲云","code"), - /**修改密码短信模板编码*/ - CHANGE_PASSWORD_TEMPLATE_CODE("SMS_465391221","敲敲云","code"), - /**注册账号短信模板编码*/ - REGISTER_TEMPLATE_CODE("SMS_175430166","敲敲云","code"), - /**会议通知*/ - MEET_NOTICE_TEMPLATE_CODE("SMS_201480469","JEECG","username,title,minute,time"), - /**我的计划通知*/ - PLAN_NOTICE_TEMPLATE_CODE("SMS_201470515","JEECG","username,title,time"), - /**支付成功短信通知*/ - PAY_SUCCESS_NOTICE_CODE("SMS_461735163","敲敲云","realname,money,endTime"), - /**会员到期通知提醒*/ - VIP_EXPIRE_NOTICE_CODE("SMS_461885023","敲敲云","realname,endTime"); + /** + * 登录短信模板编码 + */ + LOGIN_TEMPLATE_CODE("SMS_175435174", "敲敲云", "code"), + /** + * 忘记密码短信模板编码 + */ + FORGET_PASSWORD_TEMPLATE_CODE("SMS_175435174", "敲敲云", "code"), + /** + * 修改密码短信模板编码 + */ + CHANGE_PASSWORD_TEMPLATE_CODE("SMS_465391221", "敲敲云", "code"), + /** + * 注册账号短信模板编码 + */ + REGISTER_TEMPLATE_CODE("SMS_175430166", "敲敲云", "code"), + /** + * 会议通知 + */ + MEET_NOTICE_TEMPLATE_CODE("SMS_201480469", "JEECG", "username,title,minute,time"), + /** + * 我的计划通知 + */ + PLAN_NOTICE_TEMPLATE_CODE("SMS_201470515", "JEECG", "username,title,time"), + /** + * 支付成功短信通知 + */ + PAY_SUCCESS_NOTICE_CODE("SMS_461735163", "敲敲云", "realname,money,endTime"), + /** + * 会员到期通知提醒 + */ + VIP_EXPIRE_NOTICE_CODE("SMS_461885023", "敲敲云", "realname,endTime"); - /** - * 短信模板编码 - */ - private String templateCode; - /** - * 签名 - */ - private String signName; - /** - * 短信模板必需的数据名称,多个key以逗号分隔,此处配置作为校验 - */ - private String keys; - - private DySmsEnum(String templateCode,String signName,String keys) { - this.templateCode = templateCode; - this.signName = signName; - this.keys = keys; - } - - public String getTemplateCode() { - return templateCode; - } - - public void setTemplateCode(String templateCode) { - this.templateCode = templateCode; - } - - public String getSignName() { - return signName; - } - - public void setSignName(String signName) { - this.signName = signName; - } - - public String getKeys() { - return keys; - } + /** + * 短信模板编码 + */ + private String templateCode; + /** + * 签名 + */ + private String signName; + /** + * 短信模板必需的数据名称,多个key以逗号分隔,此处配置作为校验 + */ + private String keys; - public void setKeys(String keys) { - this.keys = keys; - } + private DySmsEnum(String templateCode, String signName, String keys) { + this.templateCode = templateCode; + this.signName = signName; + this.keys = keys; + } - public static DySmsEnum toEnum(String templateCode) { - if(StringUtils.isEmpty(templateCode)){ - return null; - } - for(DySmsEnum item : DySmsEnum.values()) { - if(item.getTemplateCode().equals(templateCode)) { - return item; - } - } - return null; - } + public String getTemplateCode() { + return templateCode; + } + + public void setTemplateCode(String templateCode) { + this.templateCode = templateCode; + } + + public String getSignName() { + return signName; + } + + public void setSignName(String signName) { + this.signName = signName; + } + + public String getKeys() { + return keys; + } + + public void setKeys(String keys) { + this.keys = keys; + } + + public static DySmsEnum toEnum(String templateCode) { + if (StringUtils.isEmpty(templateCode)) { + return null; + } + for (DySmsEnum item : DySmsEnum.values()) { + if (item.getTemplateCode().equals(templateCode)) { + return item; + } + } + return null; + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/FileTypeEnum.java b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/FileTypeEnum.java index 626a47e..7dbdf02 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/FileTypeEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/FileTypeEnum.java @@ -8,35 +8,37 @@ import org.jeecg.common.util.oConvertUtils; public enum FileTypeEnum { // 文档类型(folder:文件夹 excel:excel doc:word pp:ppt image:图片 archive:其他文档 video:视频 voice:语音) // FOLDER - xls(".xls","excel","excel"), - xlsx(".xlsx","excel","excel"), - doc(".doc","doc","word"), - docx(".docx","doc","word"), - ppt(".ppt","pp","ppt"), - pptx(".pptx","pp","ppt"), - gif(".gif","image","图片"), - jpg(".jpg","image","图片"), - jpeg(".jpeg","image","图片"), - png(".png","image","图片"), - txt(".txt","text","文本"), - avi(".avi","video","视频"), - mov(".mov","video","视频"), - rmvb(".rmvb","video","视频"), - rm(".rm","video","视频"), - flv(".flv","video","视频"), - mp4(".mp4","video","视频"), - zip(".zip","zip","压缩包"), - pdf(".pdf","pdf","pdf"), - mp3(".mp3","mp3","语音"); + xls(".xls", "excel", "excel"), + xlsx(".xlsx", "excel", "excel"), + doc(".doc", "doc", "word"), + docx(".docx", "doc", "word"), + ppt(".ppt", "pp", "ppt"), + pptx(".pptx", "pp", "ppt"), + gif(".gif", "image", "图片"), + jpg(".jpg", "image", "图片"), + jpeg(".jpeg", "image", "图片"), + png(".png", "image", "图片"), + txt(".txt", "text", "文本"), + avi(".avi", "video", "视频"), + mov(".mov", "video", "视频"), + rmvb(".rmvb", "video", "视频"), + rm(".rm", "video", "视频"), + flv(".flv", "video", "视频"), + mp4(".mp4", "video", "视频"), + zip(".zip", "zip", "压缩包"), + pdf(".pdf", "pdf", "pdf"), + mp3(".mp3", "mp3", "语音"); private String type; private String value; private String text; - private FileTypeEnum(String type,String value,String text){ + + private FileTypeEnum(String type, String value, String text) { this.type = type; this.value = value; this.text = text; } + public String getType() { return type; } @@ -61,7 +63,7 @@ public enum FileTypeEnum { this.text = text; } - public static FileTypeEnum getByType(String type){ + public static FileTypeEnum getByType(String type) { if (oConvertUtils.isEmpty(type)) { return null; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/MessageTypeEnum.java b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/MessageTypeEnum.java index c53d382..83690fb 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/MessageTypeEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/MessageTypeEnum.java @@ -8,21 +8,30 @@ import java.util.List; /** * 消息类型 + * * @author: jeecg-boot */ @EnumDict("messageType") public enum MessageTypeEnum { - /** 系统消息 */ - XT("system", "系统消息"), - /** 邮件消息 */ - YJ("email", "邮件消息"), - /** 钉钉消息 */ + /** + * 系统消息 + */ + XT("system", "系统消息"), + /** + * 邮件消息 + */ + YJ("email", "邮件消息"), + /** + * 钉钉消息 + */ DD("dingtalk", "钉钉消息"), - /** 企业微信 */ + /** + * 企业微信 + */ QYWX("wechat_enterprise", "企业微信"); - MessageTypeEnum(String type, String note){ + MessageTypeEnum(String type, String note) { this.type = type; this.note = note; } @@ -56,12 +65,13 @@ public enum MessageTypeEnum { /** * 获取字典数据 + * * @return */ - public static List getDictList(){ + public static List getDictList() { List list = new ArrayList<>(); DictModel dictModel = null; - for(MessageTypeEnum e: MessageTypeEnum.values()){ + for (MessageTypeEnum e : MessageTypeEnum.values()) { dictModel = new DictModel(); dictModel.setValue(e.getType()); dictModel.setText(e.getNote()); diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/ModuleType.java b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/ModuleType.java index 5d3aa1e..31d312e 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/ModuleType.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/ModuleType.java @@ -2,6 +2,7 @@ package org.jeecg.common.constant.enums; /** * 日志按模块分类 + * * @author: jeecg-boot */ public enum ModuleType { diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/RoleIndexConfigEnum.java b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/RoleIndexConfigEnum.java index eaf2c39..45cda27 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/RoleIndexConfigEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/RoleIndexConfigEnum.java @@ -8,6 +8,7 @@ import java.util.List; * 首页自定义 * 通过角色编码与首页组件路径配置 * 枚举的顺序有权限高低权重作用(也就是配置多个角色,在前面的角色首页,会优先生效) + * * @author: jeecg-boot */ public enum RoleIndexConfigEnum { @@ -15,9 +16,11 @@ public enum RoleIndexConfigEnum { /**首页自定义 admin*/ // ADMIN("admin", "dashboard/Analysis"), //TEST("test", "dashboard/IndexChart"), - /**首页自定义 hr*/ + /** + * 首页自定义 hr + */ // HR("hr", "dashboard/IndexBdc"); - + //DM("dm", "dashboard/IndexTask"), // 注:此值仅为防止报错,无任何实际意义 @@ -35,15 +38,17 @@ public enum RoleIndexConfigEnum { /** * 构造器 * - * @param roleCode 角色编码 + * @param roleCode 角色编码 * @param componentUrl 首页组件路径(规则跟菜单配置一样) */ RoleIndexConfigEnum(String roleCode, String componentUrl) { this.roleCode = roleCode; this.componentUrl = componentUrl; } + /** * 根据code找枚举 + * * @param roleCode 角色编码 * @return */ @@ -55,8 +60,10 @@ public enum RoleIndexConfigEnum { } return null; } + /** * 根据code找index + * * @param roleCode 角色编码 * @return */ @@ -72,7 +79,7 @@ public enum RoleIndexConfigEnum { public static String getIndexByRoles(List roles) { String[] rolesArray = roles.toArray(new String[roles.size()]); for (RoleIndexConfigEnum e : RoleIndexConfigEnum.values()) { - if (oConvertUtils.isIn(e.roleCode,rolesArray)){ + if (oConvertUtils.isIn(e.roleCode, rolesArray)) { return e.componentUrl; } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/SysAnnmentTypeEnum.java b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/SysAnnmentTypeEnum.java index e923f14..e0585d7 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/SysAnnmentTypeEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/SysAnnmentTypeEnum.java @@ -4,6 +4,7 @@ import org.jeecg.common.util.oConvertUtils; /** * 系统公告自定义跳转方式 + * * @author: jeecg-boot */ public enum SysAnnmentTypeEnum { @@ -15,7 +16,7 @@ public enum SysAnnmentTypeEnum { * 流程跳转到我的任务 */ BPM("bpm", "url", "/bpm/task/MyTaskList"), - + /** * 流程抄送任务 */ diff --git a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/Vue3MessageHrefEnum.java b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/Vue3MessageHrefEnum.java index c989e4f..12d62a0 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/constant/enums/Vue3MessageHrefEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/constant/enums/Vue3MessageHrefEnum.java @@ -8,6 +8,7 @@ import java.util.List; /** * 消息跳转【vue3】 + * * @Author taoYan * @Date 2022/8/19 20:41 **/ @@ -18,12 +19,12 @@ public enum Vue3MessageHrefEnum { * 流程催办 */ BPM("bpm", "/task/myHandleTaskInfo"), - + /** * 系统消息通知 */ BPM_SYSTEM_MSG("bpm_msg_node", ""), - + /** * 流程抄送任务 */ @@ -38,9 +39,9 @@ public enum Vue3MessageHrefEnum { * 邮件消息 */ EMAIL("email", "/eoa/email"); - + String busType; - + String path; Vue3MessageHrefEnum(String busType, String path) { @@ -58,12 +59,13 @@ public enum Vue3MessageHrefEnum { /** * 获取字典数据 + * * @return */ - public static List getDictList(){ + public static List getDictList() { List list = new ArrayList<>(); DictModel dictModel = null; - for(Vue3MessageHrefEnum e: Vue3MessageHrefEnum.values()){ + for (Vue3MessageHrefEnum e : Vue3MessageHrefEnum.values()) { dictModel = new DictModel(); dictModel.setValue(e.getBusType()); dictModel.setText(e.getPath()); @@ -71,5 +73,5 @@ public enum Vue3MessageHrefEnum { } return list; } - + } diff --git a/physical-base-core/src/main/java/org/jeecg/common/desensitization/SensitiveSerialize.java b/physical-base-core/src/main/java/org/jeecg/common/desensitization/SensitiveSerialize.java index f5deb5e..cea387c 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/desensitization/SensitiveSerialize.java +++ b/physical-base-core/src/main/java/org/jeecg/common/desensitization/SensitiveSerialize.java @@ -30,7 +30,7 @@ public class SensitiveSerialize extends JsonSerializer implements Contex @Override public void serialize(String data, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { - switch (type){ + switch (type) { case ENCODE: try { jsonGenerator.writeString(AesEncryptUtil.encrypt(data)); diff --git a/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/Sensitive.java b/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/Sensitive.java index a7e7d16..4fe01f0 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/Sensitive.java +++ b/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/Sensitive.java @@ -20,6 +20,7 @@ public @interface Sensitive { /** * 不同类型处理不同 + * * @return */ SensitiveEnum type() default SensitiveEnum.ENCODE; diff --git a/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveDecode.java b/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveDecode.java index 698ecba..d0cf2ef 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveDecode.java +++ b/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveDecode.java @@ -4,7 +4,7 @@ import java.lang.annotation.*; /** * 解密注解 - * + *

* 在方法上定义 将方法返回对象中的敏感字段 解密,需要注意的是,如果没有加密过,解密会出问题,返回原字符串 */ @Documented @@ -14,6 +14,7 @@ public @interface SensitiveDecode { /** * 指明需要脱敏的实体类class + * * @return */ Class entity() default Object.class; diff --git a/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveEncode.java b/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveEncode.java index eb89d75..73cd86a 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveEncode.java +++ b/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveEncode.java @@ -4,7 +4,7 @@ import java.lang.annotation.*; /** * 加密注解 - * + *

* 在方法上声明 将方法返回对象中的敏感字段 加密/格式化 */ @Documented @@ -14,6 +14,7 @@ public @interface SensitiveEncode { /** * 指明需要脱敏的实体类class + * * @return */ Class entity() default Object.class; diff --git a/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveField.java b/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveField.java index a887e5a..39e3d46 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveField.java +++ b/physical-base-core/src/main/java/org/jeecg/common/desensitization/annotation/SensitiveField.java @@ -15,6 +15,7 @@ public @interface SensitiveField { /** * 不同类型处理不同 + * * @return */ SensitiveEnum type() default SensitiveEnum.ENCODE; diff --git a/physical-base-core/src/main/java/org/jeecg/common/desensitization/aspect/SensitiveDataAspect.java b/physical-base-core/src/main/java/org/jeecg/common/desensitization/aspect/SensitiveDataAspect.java index da69702..0188723 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/desensitization/aspect/SensitiveDataAspect.java +++ b/physical-base-core/src/main/java/org/jeecg/common/desensitization/aspect/SensitiveDataAspect.java @@ -16,6 +16,7 @@ import java.util.List; /** * 敏感数据切面处理类 + * * @Author taoYan * @Date 2022/4/20 17:45 **/ @@ -35,13 +36,13 @@ public class SensitiveDataAspect { public Object around(ProceedingJoinPoint point) throws Throwable { // 处理结果 Object result = point.proceed(); - if(result == null){ + if (result == null) { return result; } Class resultClass = result.getClass(); - log.debug(" resultClass = {}" , resultClass); + log.debug(" resultClass = {}", resultClass); - if(resultClass.isPrimitive()){ + if (resultClass.isPrimitive()) { //是基本类型 直接返回 不需要处理 return result; } @@ -51,28 +52,28 @@ public class SensitiveDataAspect { MethodSignature methodSignature = (MethodSignature) point.getSignature(); Method method = methodSignature.getMethod(); SensitiveEncode encode = method.getAnnotation(SensitiveEncode.class); - if(encode==null){ + if (encode == null) { SensitiveDecode decode = method.getAnnotation(SensitiveDecode.class); - if(decode!=null){ + if (decode != null) { entity = decode.entity(); isEncode = false; } - }else{ + } else { entity = encode.entity(); } - long startTime=System.currentTimeMillis(); - if(resultClass.equals(entity) || entity.equals(Object.class)){ + long startTime = System.currentTimeMillis(); + if (resultClass.equals(entity) || entity.equals(Object.class)) { // 方法返回实体和注解的entity一样,如果注解没有申明entity属性则认为是(方法返回实体和注解的entity一样) SensitiveInfoUtil.handlerObject(result, isEncode); - } else if(result instanceof List){ + } else if (result instanceof List) { // 方法返回List<实体> SensitiveInfoUtil.handleList(result, entity, isEncode); - }else{ + } else { // 方法返回一个对象 SensitiveInfoUtil.handleNestedObject(result, entity, isEncode); } - long endTime=System.currentTimeMillis(); + long endTime = System.currentTimeMillis(); log.info((isEncode ? "加密操作," : "解密操作,") + "Aspect程序耗时:" + (endTime - startTime) + "ms"); return result; diff --git a/physical-base-core/src/main/java/org/jeecg/common/desensitization/util/SensitiveInfoUtil.java b/physical-base-core/src/main/java/org/jeecg/common/desensitization/util/SensitiveInfoUtil.java index 820047e..c4034a9 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/desensitization/util/SensitiveInfoUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/desensitization/util/SensitiveInfoUtil.java @@ -13,6 +13,7 @@ import java.util.List; /** * 敏感信息处理工具类 + * * @author taoYan * @date 2022/4/20 18:01 **/ @@ -21,29 +22,30 @@ public class SensitiveInfoUtil { /** * 处理嵌套对象 - * @param obj 方法返回值 - * @param entity 实体class + * + * @param obj 方法返回值 + * @param entity 实体class * @param isEncode 是否加密(true: 加密操作 / false:解密操作) * @throws IllegalAccessException */ public static void handleNestedObject(Object obj, Class entity, boolean isEncode) throws IllegalAccessException { Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { - if(field.getType().isPrimitive()){ + if (field.getType().isPrimitive()) { continue; } - if(field.getType().equals(entity)){ + if (field.getType().equals(entity)) { // 对象里面是实体 field.setAccessible(true); Object nestedObject = field.get(obj); handlerObject(nestedObject, isEncode); break; - }else{ + } else { // 对象里面是List<实体> - if(field.getGenericType() instanceof ParameterizedType){ - ParameterizedType pt = (ParameterizedType)field.getGenericType(); - if(pt.getRawType().equals(List.class)){ - if(pt.getActualTypeArguments()[0].equals(entity)){ + if (field.getGenericType() instanceof ParameterizedType) { + ParameterizedType pt = (ParameterizedType) field.getGenericType(); + if (pt.getRawType().equals(List.class)) { + if (pt.getActualTypeArguments()[0].equals(entity)) { field.setAccessible(true); Object nestedObject = field.get(obj); handleList(nestedObject, entity, isEncode); @@ -57,7 +59,8 @@ public class SensitiveInfoUtil { /** * 处理Object - * @param obj 方法返回值 + * + * @param obj 方法返回值 * @param isEncode 是否加密(true: 加密操作 / false:解密操作) * @return * @throws IllegalAccessException @@ -66,30 +69,30 @@ public class SensitiveInfoUtil { if (oConvertUtils.isEmpty(obj)) { return obj; } - long startTime=System.currentTimeMillis(); - log.debug(" obj --> "+ obj.toString()); - + long startTime = System.currentTimeMillis(); + log.debug(" obj --> " + obj.toString()); + // 判断是不是一个对象 Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { boolean isSensitiveField = field.isAnnotationPresent(SensitiveField.class); - if(isSensitiveField){ + if (isSensitiveField) { // 必须有SensitiveField注解 才作处理 - if(field.getType().isAssignableFrom(String.class)){ + if (field.getType().isAssignableFrom(String.class)) { //必须是字符串类型 才作处理 field.setAccessible(true); String realValue = (String) field.get(obj); - if(realValue==null || "".equals(realValue)){ + if (realValue == null || "".equals(realValue)) { continue; } SensitiveField sf = field.getAnnotation(SensitiveField.class); - if(isEncode==true){ + if (isEncode == true) { //加密 - String value = SensitiveInfoUtil.getEncodeData(realValue, sf.type()); + String value = SensitiveInfoUtil.getEncodeData(realValue, sf.type()); field.set(obj, value); - }else{ + } else { //解密只处理 encode类型的 - if(sf.type().equals(SensitiveEnum.ENCODE)){ + if (sf.type().equals(SensitiveEnum.ENCODE)) { String value = SensitiveInfoUtil.getDecodeData(realValue); field.set(obj, value); } @@ -104,16 +107,17 @@ public class SensitiveInfoUtil { /** * 处理 List<实体> + * * @param obj * @param entity * @param isEncode(true: 加密操作 / false:解密操作) */ - public static void handleList(Object obj, Class entity, boolean isEncode){ - List list = (List)obj; - if(list.size()>0){ + public static void handleList(Object obj, Class entity, boolean isEncode) { + List list = (List) obj; + if (list.size() > 0) { Object first = list.get(0); - if(first.getClass().equals(entity)){ - for(int i=0; i */ @@ -207,8 +214,9 @@ public class SensitiveInfoUtil { /** * [中文姓名] 只显示第一个汉字,其他隐藏为2个星号 + * * @param familyName 姓 - * @param firstName 名 + * @param firstName 名 * @return <例子:李**> */ public static String chineseName(String familyName, String firstName) { @@ -220,6 +228,7 @@ public class SensitiveInfoUtil { /** * [身份证号] 显示最后四位,其他隐藏。共计18位或者15位。 + * * @param id 身份证号 * @return <例子:*************5762> */ @@ -233,6 +242,7 @@ public class SensitiveInfoUtil { /** * [固定电话] 后四位,其他隐藏 + * * @param num 固定电话 * @return <例子:****1234> */ @@ -245,6 +255,7 @@ public class SensitiveInfoUtil { /** * [手机号码] 前三位,后四位,其他隐藏 + * * @param num 手机号码 * @return <例子:138******1234> */ @@ -253,7 +264,7 @@ public class SensitiveInfoUtil { return ""; } int len = num.length(); - if(len<11){ + if (len < 11) { return num; } return formatBetween(num, 3, 4); @@ -261,7 +272,8 @@ public class SensitiveInfoUtil { /** * [地址] 只显示到地区,不显示详细地址;我们要对个人信息增强保护 - * @param address 地址 + * + * @param address 地址 * @param sensitiveSize 敏感信息长度 * @return <例子:北京市海淀区****> */ @@ -270,7 +282,7 @@ public class SensitiveInfoUtil { return ""; } int len = address.length(); - if(len */ @@ -286,7 +299,7 @@ public class SensitiveInfoUtil { return ""; } int index = email.indexOf("@"); - if (index <= 1){ + if (index <= 1) { return email; } String begin = email.substring(0, 1); @@ -297,6 +310,7 @@ public class SensitiveInfoUtil { /** * [银行卡号] 前六位,后四位,其他用星号隐藏每位1个星号 + * * @param cardNum 银行卡号 * @return <例子:6222600**********1234> */ @@ -309,6 +323,7 @@ public class SensitiveInfoUtil { /** * [公司开户银行联号] 公司开户银行联行号,显示前两位,其他用星号隐藏,每位1个星号 + * * @param code 公司开户银行联号 * @return <例子:12********> */ @@ -322,41 +337,44 @@ public class SensitiveInfoUtil { /** * 将右边的格式化成* - * @param str 字符串 + * + * @param str 字符串 * @param reservedLength 保留长度 * @return 格式化后的字符串 */ - public static String formatRight(String str, int reservedLength){ + public static String formatRight(String str, int reservedLength) { String name = str.substring(0, reservedLength); - String stars = String.join("", Collections.nCopies(str.length()-reservedLength, "*")); + String stars = String.join("", Collections.nCopies(str.length() - reservedLength, "*")); return name + stars; } /** * 将左边的格式化成* - * @param str 字符串 + * + * @param str 字符串 * @param reservedLength 保留长度 * @return 格式化后的字符串 */ - public static String formatLeft(String str, int reservedLength){ + public static String formatLeft(String str, int reservedLength) { int len = str.length(); - String show = str.substring(len-reservedLength); - String stars = String.join("", Collections.nCopies(len-reservedLength, "*")); + String show = str.substring(len - reservedLength); + String stars = String.join("", Collections.nCopies(len - reservedLength, "*")); return stars + show; } /** * 将中间的格式化成* - * @param str 字符串 + * + * @param str 字符串 * @param beginLen 开始保留长度 - * @param endLen 结尾保留长度 + * @param endLen 结尾保留长度 * @return 格式化后的字符串 */ - public static String formatBetween(String str, int beginLen, int endLen){ + public static String formatBetween(String str, int beginLen, int endLen) { int len = str.length(); String begin = str.substring(0, beginLen); - String end = str.substring(len-endLen); - String stars = String.join("", Collections.nCopies(len-beginLen-endLen, "*")); + String end = str.substring(len - endLen); + String stars = String.join("", Collections.nCopies(len - beginLen - endLen, "*")); return begin + stars + end; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/es/JeecgElasticsearchTemplate.java b/physical-base-core/src/main/java/org/jeecg/common/es/JeecgElasticsearchTemplate.java index 525d461..a3397b5 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/es/JeecgElasticsearchTemplate.java +++ b/physical-base-core/src/main/java/org/jeecg/common/es/JeecgElasticsearchTemplate.java @@ -25,19 +25,29 @@ import java.util.*; @Component @ConditionalOnProperty(prefix = "jeecg.elasticsearch", name = "cluster-nodes") public class JeecgElasticsearchTemplate { - /** es服务地址 */ + /** + * es服务地址 + */ private String baseUrl; private final String FORMAT_JSON = "format=json"; - /** Elasticsearch 的版本号 */ + /** + * Elasticsearch 的版本号 + */ private String version = null; - /**ElasticSearch 最大可返回条目数*/ + /** + * ElasticSearch 最大可返回条目数 + */ public static final int ES_MAX_SIZE = 10000; - /**es7*/ + /** + * es7 + */ public static final String IE_SEVEN = "7"; - /**url not found 404*/ + /** + * url not found 404 + */ public static final String URL_NOT_FOUND = "404 Not Found"; public JeecgElasticsearchTemplate(@Value("${jeecg.elasticsearch.cluster-nodes}") String baseUrl, @Value("${jeecg.elasticsearch.check-enabled}") boolean checkEnabled) { @@ -339,9 +349,9 @@ public class JeecgElasticsearchTemplate { emptyKeys.add(key); } //2、剔除上传控件值(会导致ES同步失败,报异常failed to parse field [ge_pic] of type [text] ) - if (oConvertUtils.isNotEmpty(value) && value.indexOf("[{")!=-1) { + if (oConvertUtils.isNotEmpty(value) && value.indexOf("[{") != -1) { emptyKeys.add(key); - log.info("-------剔除上传控件字段------------key: "+ key); + log.info("-------剔除上传控件字段------------key: " + key); } } for (String key : emptyKeys) { @@ -447,8 +457,8 @@ public class JeecgElasticsearchTemplate { /** * @param source (源滤波器)指定返回的字段,传null返回所有字段 * @param query - * @param from 从第几条数据开始 - * @param size 返回条目数 + * @param from 从第几条数据开始 + * @param size 返回条目数 * @return { "query": query } */ public JSONObject buildQuery(List source, JSONObject query, int from, int size) { diff --git a/physical-base-core/src/main/java/org/jeecg/common/es/QueryStringBuilder.java b/physical-base-core/src/main/java/org/jeecg/common/es/QueryStringBuilder.java index 794a2cc..2b99019 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/es/QueryStringBuilder.java +++ b/physical-base-core/src/main/java/org/jeecg/common/es/QueryStringBuilder.java @@ -66,14 +66,15 @@ public class QueryStringBuilder { } /** - * 添加双引号(模糊查询,不能加双引号) - */ + * 添加双引号(模糊查询,不能加双引号) + */ private QueryStringBuilder addQuot(String str, boolean addQuot) { return this.addQuotEffect(this.builder, str, addQuot); } /** * 是否在两边加上双引号 + * * @param builder * @param str * @param addQuot diff --git a/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBoot401Exception.java b/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBoot401Exception.java index 6f7205b..4c6ce02 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBoot401Exception.java +++ b/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBoot401Exception.java @@ -5,19 +5,17 @@ package org.jeecg.common.exception; * @author: jeecg-boot */ public class JeecgBoot401Exception extends RuntimeException { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - public JeecgBoot401Exception(String message){ - super(message); - } + public JeecgBoot401Exception(String message) { + super(message); + } - public JeecgBoot401Exception(Throwable cause) - { - super(cause); - } + public JeecgBoot401Exception(Throwable cause) { + super(cause); + } - public JeecgBoot401Exception(String message, Throwable cause) - { - super(message,cause); - } + public JeecgBoot401Exception(String message, Throwable cause) { + super(message, cause); + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootBizTipException.java b/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootBizTipException.java index 7278709..b87d1da 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootBizTipException.java +++ b/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootBizTipException.java @@ -8,33 +8,31 @@ import org.jeecg.common.constant.CommonConstant; * @author: scott */ public class JeecgBootBizTipException extends RuntimeException { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * 返回给前端的错误code - */ - private int errCode = CommonConstant.SC_INTERNAL_SERVER_ERROR_500; + /** + * 返回给前端的错误code + */ + private int errCode = CommonConstant.SC_INTERNAL_SERVER_ERROR_500; - public JeecgBootBizTipException(String message){ - super(message); - } + public JeecgBootBizTipException(String message) { + super(message); + } - public JeecgBootBizTipException(String message, int errCode){ - super(message); - this.errCode = errCode; - } + public JeecgBootBizTipException(String message, int errCode) { + super(message); + this.errCode = errCode; + } - public int getErrCode() { - return errCode; - } + public int getErrCode() { + return errCode; + } - public JeecgBootBizTipException(Throwable cause) - { - super(cause); - } - - public JeecgBootBizTipException(String message, Throwable cause) - { - super(message,cause); - } + public JeecgBootBizTipException(Throwable cause) { + super(cause); + } + + public JeecgBootBizTipException(String message, Throwable cause) { + super(message, cause); + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootException.java b/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootException.java index 4b57f43..361da78 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootException.java +++ b/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootException.java @@ -7,33 +7,31 @@ import org.jeecg.common.constant.CommonConstant; * @author: jeecg-boot */ public class JeecgBootException extends RuntimeException { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * 返回给前端的错误code - */ - private int errCode = CommonConstant.SC_INTERNAL_SERVER_ERROR_500; + /** + * 返回给前端的错误code + */ + private int errCode = CommonConstant.SC_INTERNAL_SERVER_ERROR_500; - public JeecgBootException(String message){ - super(message); - } + public JeecgBootException(String message) { + super(message); + } - public JeecgBootException(String message, int errCode){ - super(message); - this.errCode = errCode; - } + public JeecgBootException(String message, int errCode) { + super(message); + this.errCode = errCode; + } - public int getErrCode() { - return errCode; - } + public int getErrCode() { + return errCode; + } - public JeecgBootException(Throwable cause) - { - super(cause); - } - - public JeecgBootException(String message,Throwable cause) - { - super(message,cause); - } + public JeecgBootException(Throwable cause) { + super(cause); + } + + public JeecgBootException(String message, Throwable cause) { + super(message, cause); + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootExceptionHandler.java b/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootExceptionHandler.java index d0c6527..2409aac 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootExceptionHandler.java +++ b/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgBootExceptionHandler.java @@ -36,7 +36,7 @@ import java.util.Map; /** * 异常处理器 - * + * * @Author scott * @Date 2019 */ @@ -44,166 +44,168 @@ import java.util.Map; @Slf4j public class JeecgBootExceptionHandler { - @Resource - BaseCommonService baseCommonService; + @Resource + BaseCommonService baseCommonService; - /** - * 处理自定义异常 - */ - @ExceptionHandler(JeecgBootException.class) - public Result handleJeecgBootException(JeecgBootException e){ - log.error(e.getMessage(), e); - addSysLog(e); - return Result.error(e.getErrCode(), e.getMessage()); - } - - /** - * 处理自定义异常 - */ - @ExceptionHandler(JeecgBootBizTipException.class) - public Result handleJeecgBootBizTipException(JeecgBootBizTipException e){ - log.error(e.getMessage()); - return Result.error(e.getErrCode(), e.getMessage()); - } + /** + * 处理自定义异常 + */ + @ExceptionHandler(JeecgBootException.class) + public Result handleJeecgBootException(JeecgBootException e) { + log.error(e.getMessage(), e); + addSysLog(e); + return Result.error(e.getErrCode(), e.getMessage()); + } - /** - * 处理自定义微服务异常 - */ - @ExceptionHandler(JeecgCloudException.class) - public Result handleJeecgCloudException(JeecgCloudException e){ - log.error(e.getMessage(), e); - addSysLog(e); - return Result.error(e.getMessage()); - } + /** + * 处理自定义异常 + */ + @ExceptionHandler(JeecgBootBizTipException.class) + public Result handleJeecgBootBizTipException(JeecgBootBizTipException e) { + log.error(e.getMessage()); + return Result.error(e.getErrCode(), e.getMessage()); + } - /** - * 处理自定义异常 - */ - @ExceptionHandler(JeecgBoot401Exception.class) - @ResponseStatus(HttpStatus.UNAUTHORIZED) - public Result handleJeecgBoot401Exception(JeecgBoot401Exception e){ - log.error(e.getMessage(), e); - addSysLog(e); - return new Result(401,e.getMessage()); - } + /** + * 处理自定义微服务异常 + */ + @ExceptionHandler(JeecgCloudException.class) + public Result handleJeecgCloudException(JeecgCloudException e) { + log.error(e.getMessage(), e); + addSysLog(e); + return Result.error(e.getMessage()); + } - @ExceptionHandler(NoHandlerFoundException.class) - public Result handlerNoFoundException(Exception e) { - log.error(e.getMessage(), e); - addSysLog(e); - return Result.error(404, "路径不存在,请检查路径是否正确"); - } + /** + * 处理自定义异常 + */ + @ExceptionHandler(JeecgBoot401Exception.class) + @ResponseStatus(HttpStatus.UNAUTHORIZED) + public Result handleJeecgBoot401Exception(JeecgBoot401Exception e) { + log.error(e.getMessage(), e); + addSysLog(e); + return new Result(401, e.getMessage()); + } - @ExceptionHandler(DuplicateKeyException.class) - public Result handleDuplicateKeyException(DuplicateKeyException e){ - log.error(e.getMessage(), e); - addSysLog(e); - return Result.error("数据库中已存在该记录"); - } + @ExceptionHandler(NoHandlerFoundException.class) + public Result handlerNoFoundException(Exception e) { + log.error(e.getMessage(), e); + addSysLog(e); + return Result.error(404, "路径不存在,请检查路径是否正确"); + } - @ExceptionHandler({UnauthorizedException.class, AuthorizationException.class}) - public Result handleAuthorizationException(AuthorizationException e){ - log.error(e.getMessage(), e); - return Result.noauth("没有权限,请联系管理员授权,后刷新缓存!"); - } + @ExceptionHandler(DuplicateKeyException.class) + public Result handleDuplicateKeyException(DuplicateKeyException e) { + log.error(e.getMessage(), e); + addSysLog(e); + return Result.error("数据库中已存在该记录"); + } - @ExceptionHandler(Exception.class) - public Result handleException(Exception e){ - log.error(e.getMessage(), e); - //update-begin---author:zyf ---date:20220411 for:处理Sentinel限流自定义异常 - Throwable throwable = e.getCause(); - SentinelErrorInfoEnum errorInfoEnum = SentinelErrorInfoEnum.getErrorByException(throwable); - if (ObjectUtil.isNotEmpty(errorInfoEnum)) { - return Result.error(errorInfoEnum.getError()); - } - //update-end---author:zyf ---date:20220411 for:处理Sentinel限流自定义异常 - addSysLog(e); - return Result.error("操作失败,"+e.getMessage()); - } - - /** - * @Author 政辉 - * @param e - * @return - */ - @ExceptionHandler(HttpRequestMethodNotSupportedException.class) - public Result httpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e){ - StringBuffer sb = new StringBuffer(); - sb.append("不支持"); - sb.append(e.getMethod()); - sb.append("请求方法,"); - sb.append("支持以下"); - String [] methods = e.getSupportedMethods(); - if(methods!=null){ - for(String str:methods){ - sb.append(str); - sb.append("、"); - } - } - log.error(sb.toString(), e); - //return Result.error("没有权限,请联系管理员授权"); - addSysLog(e); - return Result.error(405,sb.toString()); - } - - /** - * spring默认上传大小100MB 超出大小捕获异常MaxUploadSizeExceededException - */ + @ExceptionHandler({UnauthorizedException.class, AuthorizationException.class}) + public Result handleAuthorizationException(AuthorizationException e) { + log.error(e.getMessage(), e); + return Result.noauth("没有权限,请联系管理员授权,后刷新缓存!"); + } + + @ExceptionHandler(Exception.class) + public Result handleException(Exception e) { + log.error(e.getMessage(), e); + //update-begin---author:zyf ---date:20220411 for:处理Sentinel限流自定义异常 + Throwable throwable = e.getCause(); + SentinelErrorInfoEnum errorInfoEnum = SentinelErrorInfoEnum.getErrorByException(throwable); + if (ObjectUtil.isNotEmpty(errorInfoEnum)) { + return Result.error(errorInfoEnum.getError()); + } + //update-end---author:zyf ---date:20220411 for:处理Sentinel限流自定义异常 + addSysLog(e); + return Result.error("操作失败," + e.getMessage()); + } + + /** + * @param e + * @return + * @Author 政辉 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public Result httpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) { + StringBuffer sb = new StringBuffer(); + sb.append("不支持"); + sb.append(e.getMethod()); + sb.append("请求方法,"); + sb.append("支持以下"); + String[] methods = e.getSupportedMethods(); + if (methods != null) { + for (String str : methods) { + sb.append(str); + sb.append("、"); + } + } + log.error(sb.toString(), e); + //return Result.error("没有权限,请联系管理员授权"); + addSysLog(e); + return Result.error(405, sb.toString()); + } + + /** + * spring默认上传大小100MB 超出大小捕获异常MaxUploadSizeExceededException + */ @ExceptionHandler(MaxUploadSizeExceededException.class) public Result handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) { - log.error(e.getMessage(), e); - addSysLog(e); + log.error(e.getMessage(), e); + addSysLog(e); return Result.error("文件大小超出10MB限制, 请压缩或降低文件质量! "); } @ExceptionHandler(DataIntegrityViolationException.class) public Result handleDataIntegrityViolationException(DataIntegrityViolationException e) { - log.error(e.getMessage(), e); - addSysLog(e); - //【issues/3624】数据库执行异常handleDataIntegrityViolationException提示有误 #3624 + log.error(e.getMessage(), e); + addSysLog(e); + //【issues/3624】数据库执行异常handleDataIntegrityViolationException提示有误 #3624 return Result.error("执行数据库异常,违反了完整性例如:违反惟一约束、违反非空限制、字段内容超出长度等"); } @ExceptionHandler(PoolException.class) public Result handlePoolException(PoolException e) { - log.error(e.getMessage(), e); - addSysLog(e); + log.error(e.getMessage(), e); + addSysLog(e); return Result.error("Redis 连接异常!"); } - /** - * SQL注入风险,全局异常处理 - * - * @param exception - * @return - */ - @ExceptionHandler(JeecgSqlInjectionException.class) - public Result handleSQLException(Exception exception) { - String msg = exception.getMessage().toLowerCase(); - final String extractvalue = "extractvalue"; - final String updatexml = "updatexml"; - boolean hasSensitiveInformation = msg.indexOf(extractvalue) >= 0 || msg.indexOf(updatexml) >= 0; - if (msg != null && hasSensitiveInformation) { - log.error("校验失败,存在SQL注入风险!{}", msg); - return Result.error("校验失败,存在SQL注入风险!"); - } - addSysLog(exception); - return Result.error("校验失败,存在SQL注入风险!" + msg); - } + /** + * SQL注入风险,全局异常处理 + * + * @param exception + * @return + */ + @ExceptionHandler(JeecgSqlInjectionException.class) + public Result handleSQLException(Exception exception) { + String msg = exception.getMessage().toLowerCase(); + final String extractvalue = "extractvalue"; + final String updatexml = "updatexml"; + boolean hasSensitiveInformation = msg.indexOf(extractvalue) >= 0 || msg.indexOf(updatexml) >= 0; + if (msg != null && hasSensitiveInformation) { + log.error("校验失败,存在SQL注入风险!{}", msg); + return Result.error("校验失败,存在SQL注入风险!"); + } + addSysLog(exception); + return Result.error("校验失败,存在SQL注入风险!" + msg); + } - //update-begin---author:chenrui ---date:20240423 for:[QQYUN-8732]把错误的日志都抓取了 方便后续处理,单独弄个日志类型------------ - /** - * 添加异常新系统日志 - * @param e 异常 - * @author chenrui - * @date 2024/4/22 17:16 - */ + //update-begin---author:chenrui ---date:20240423 for:[QQYUN-8732]把错误的日志都抓取了 方便后续处理,单独弄个日志类型------------ + + /** + * 添加异常新系统日志 + * + * @param e 异常 + * @author chenrui + * @date 2024/4/22 17:16 + */ private void addSysLog(Throwable e) { LogDTO log = new LogDTO(); log.setLogType(CommonConstant.LOG_TYPE_4); - log.setLogContent(e.getClass().getName()+":"+e.getMessage()); - log.setRequestParam(ExceptionUtils.getStackTrace(e)); + log.setLogContent(e.getClass().getName() + ":" + e.getMessage()); + log.setRequestParam(ExceptionUtils.getStackTrace(e)); //获取request HttpServletRequest request = null; try { @@ -211,34 +213,34 @@ public class JeecgBootExceptionHandler { } catch (NullPointerException | BeansException ignored) { } if (null != request) { - //请求的参数 - Map parameterMap = request.getParameterMap(); - if(!CollectionUtils.isEmpty(parameterMap)){ - log.setMethod(oConvertUtils.mapToString(request.getParameterMap())); - } + //请求的参数 + Map parameterMap = request.getParameterMap(); + if (!CollectionUtils.isEmpty(parameterMap)) { + log.setMethod(oConvertUtils.mapToString(request.getParameterMap())); + } // 请求地址 log.setRequestUrl(request.getRequestURI()); //设置IP地址 log.setIp(IpUtils.getIpAddr(request)); //设置客户端 - if(BrowserUtils.isDesktop(request)){ - log.setClientType(ClientTerminalTypeEnum.PC.getKey()); - }else{ - log.setClientType(ClientTerminalTypeEnum.APP.getKey()); - } + if (BrowserUtils.isDesktop(request)) { + log.setClientType(ClientTerminalTypeEnum.PC.getKey()); + } else { + log.setClientType(ClientTerminalTypeEnum.APP.getKey()); + } } - - //获取登录用户信息 - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - if(sysUser!=null){ - log.setUserid(sysUser.getUsername()); - log.setUsername(sysUser.getRealname()); - } + //获取登录用户信息 + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (sysUser != null) { + log.setUserid(sysUser.getUsername()); + log.setUsername(sysUser.getRealname()); + + } baseCommonService.addLog(log); } - //update-end---author:chenrui ---date:20240423 for:[QQYUN-8732]把错误的日志都抓取了 方便后续处理,单独弄个日志类型------------ + //update-end---author:chenrui ---date:20240423 for:[QQYUN-8732]把错误的日志都抓取了 方便后续处理,单独弄个日志类型------------ } diff --git a/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgSqlInjectionException.java b/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgSqlInjectionException.java index db9a287..23f9556 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgSqlInjectionException.java +++ b/physical-base-core/src/main/java/org/jeecg/common/exception/JeecgSqlInjectionException.java @@ -5,19 +5,17 @@ package org.jeecg.common.exception; * @author: jeecg-boot */ public class JeecgSqlInjectionException extends RuntimeException { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - public JeecgSqlInjectionException(String message){ - super(message); - } - - public JeecgSqlInjectionException(Throwable cause) - { - super(cause); - } - - public JeecgSqlInjectionException(String message, Throwable cause) - { - super(message,cause); - } + public JeecgSqlInjectionException(String message) { + super(message); + } + + public JeecgSqlInjectionException(Throwable cause) { + super(cause); + } + + public JeecgSqlInjectionException(String message, Throwable cause) { + super(message, cause); + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/handler/IFillRuleHandler.java b/physical-base-core/src/main/java/org/jeecg/common/handler/IFillRuleHandler.java index 7c6478b..f22e434 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/handler/IFillRuleHandler.java +++ b/physical-base-core/src/main/java/org/jeecg/common/handler/IFillRuleHandler.java @@ -12,8 +12,9 @@ public interface IFillRuleHandler { /** * 填值规则 - * @param params 页面配置固定参数 - * @param formData 动态表单参数 + * + * @param params 页面配置固定参数 + * @param formData 动态表单参数 * @return */ public Object execute(JSONObject params, JSONObject formData); diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/annotation/EnumDict.java b/physical-base-core/src/main/java/org/jeecg/common/system/annotation/EnumDict.java index 1ffb760..36c0c96 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/annotation/EnumDict.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/annotation/EnumDict.java @@ -4,6 +4,7 @@ import java.lang.annotation.*; /** * 将枚举类转化成字典数据 + * * @Author taoYan * @Date 2022/7/8 10:34 **/ diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java b/physical-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java index b4505d7..d359101 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.PropertyUtils; import org.apache.shiro.SecurityUtils; @@ -23,9 +26,6 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; @@ -37,12 +37,14 @@ import java.util.*; */ @Slf4j public class JeecgController> { - /**issues/2933 JeecgController注入service时改用protected修饰,能避免重复引用service*/ + /** + * issues/2933 JeecgController注入service时改用protected修饰,能避免重复引用service + */ @Autowired protected S service; @Resource private JeecgBaseConfig jeecgBaseConfig; - + /** * 导出excel * @@ -57,7 +59,7 @@ public class JeecgController> { String selections = request.getParameter("selections"); if (oConvertUtils.isNotEmpty(selections)) { List selectionList = Arrays.asList(selections.split(",")); - queryWrapper.in("id",selectionList); + queryWrapper.in("id", selectionList); } // Step.2 获取导出数据 List exportList = service.list(queryWrapper); @@ -68,53 +70,54 @@ public class JeecgController> { mv.addObject(NormalExcelConstants.FILE_NAME, title); mv.addObject(NormalExcelConstants.CLASS, clazz); //update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置-------------------- - ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); + ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload()); //update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置---------------------- - mv.addObject(NormalExcelConstants.PARAMS,exportParams); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); mv.addObject(NormalExcelConstants.DATA_LIST, exportList); return mv; } + /** * 根据每页sheet数量导出多sheet * * @param request - * @param object 实体类 - * @param clazz 实体类class - * @param title 标题 + * @param object 实体类 + * @param clazz 实体类class + * @param title 标题 * @param exportFields 导出字段自定义 - * @param pageNum 每个sheet的数据条数 + * @param pageNum 每个sheet的数据条数 * @param request */ - protected ModelAndView exportXlsSheet(HttpServletRequest request, T object, Class clazz, String title,String exportFields,Integer pageNum) { + protected ModelAndView exportXlsSheet(HttpServletRequest request, T object, Class clazz, String title, String exportFields, Integer pageNum) { // Step.1 组装查询条件 QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap()); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // Step.2 计算分页sheet数据 double total = service.count(); - int count = (int)Math.ceil(total/pageNum); + int count = (int) Math.ceil(total / pageNum); //update-begin-author:liusq---date:20220629--for: 多sheet导出根据选择导出写法调整 --- // Step.3 过滤选中数据 String selections = request.getParameter("selections"); if (oConvertUtils.isNotEmpty(selections)) { List selectionList = Arrays.asList(selections.split(",")); - queryWrapper.in("id",selectionList); + queryWrapper.in("id", selectionList); } //update-end-author:liusq---date:20220629--for: 多sheet导出根据选择导出写法调整 --- // Step.4 多sheet处理 List> listMap = new ArrayList>(); - for (int i = 1; i <=count ; i++) { + for (int i = 1; i <= count; i++) { Page page = new Page(i, pageNum); IPage pageList = service.page(page, queryWrapper); List exportList = pageList.getRecords(); Map map = new HashMap<>(5); - ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title+i,jeecgBaseConfig.getPath().getUpload()); + ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title + i, jeecgBaseConfig.getPath().getUpload()); exportParams.setType(ExcelType.XSSF); //map.put("title",exportParams); //表格Title - map.put(NormalExcelConstants.PARAMS,exportParams); + map.put(NormalExcelConstants.PARAMS, exportParams); //表格对应实体 - map.put(NormalExcelConstants.CLASS,clazz); + map.put(NormalExcelConstants.CLASS, clazz); //数据集合 map.put(NormalExcelConstants.DATA_LIST, exportList); listMap.add(map); @@ -133,9 +136,9 @@ public class JeecgController> { * * @param request */ - protected ModelAndView exportXls(HttpServletRequest request, T object, Class clazz, String title,String exportFields) { - ModelAndView mv = this.exportXls(request,object,clazz,title); - mv.addObject(NormalExcelConstants.EXPORT_FIELDS,exportFields); + protected ModelAndView exportXls(HttpServletRequest request, T object, Class clazz, String title, String exportFields) { + ModelAndView mv = this.exportXls(request, object, clazz, title); + mv.addObject(NormalExcelConstants.EXPORT_FIELDS, exportFields); return mv; } @@ -184,9 +187,9 @@ public class JeecgController> { //update-begin-author:taoyan date:20211124 for: 导入数据重复增加提示 String msg = e.getMessage(); log.error(msg, e); - if(msg!=null && msg.indexOf("Duplicate entry")>=0){ + if (msg != null && msg.indexOf("Duplicate entry") >= 0) { return Result.error("文件导入失败:有重复数据!"); - }else{ + } else { return Result.error("文件导入失败:" + e.getMessage()); } //update-end-author:taoyan date:20211124 for: 导入数据重复增加提示 diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/base/entity/JeecgEntity.java b/physical-base-core/src/main/java/org/jeecg/common/system/base/entity/JeecgEntity.java index f1f39b7..0215304 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/base/entity/JeecgEntity.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/base/entity/JeecgEntity.java @@ -1,18 +1,16 @@ package org.jeecg.common.system.base.entity; -import java.io.Serializable; - -import org.jeecgframework.poi.excel.annotation.Excel; -import org.springframework.format.annotation.DateTimeFormat; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; - +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import io.swagger.v3.oas.annotations.media.Schema; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; /** * @Description: Entity基类 diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/base/service/impl/JeecgServiceImpl.java b/physical-base-core/src/main/java/org/jeecg/common/system/base/service/impl/JeecgServiceImpl.java index f19ba84..09344bf 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/base/service/impl/JeecgServiceImpl.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/base/service/impl/JeecgServiceImpl.java @@ -1,11 +1,10 @@ package org.jeecg.common.system.base.service.impl; -import org.jeecg.common.system.base.entity.JeecgEntity; -import org.jeecg.common.system.base.service.JeecgService; - import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.system.base.entity.JeecgEntity; +import org.jeecg.common.system.base.service.JeecgService; /** * @Description: ServiceImpl基类 diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/enhance/UserFilterEnhance.java b/physical-base-core/src/main/java/org/jeecg/common/system/enhance/UserFilterEnhance.java index 9f5c3a1..fbc776f 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/enhance/UserFilterEnhance.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/enhance/UserFilterEnhance.java @@ -6,11 +6,11 @@ import java.util.List; * 用户增强 */ public interface UserFilterEnhance { - + /** * 获取用户id + * * @param loginUserId 当前登录的用户id - * * @return List 返回多个用户id */ default List getUserIds(String loginUserId) { diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/query/MatchTypeEnum.java b/physical-base-core/src/main/java/org/jeecg/common/system/query/MatchTypeEnum.java index d19342d..f0b9779 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/query/MatchTypeEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/query/MatchTypeEnum.java @@ -9,9 +9,13 @@ import org.jeecg.common.util.oConvertUtils; */ public enum MatchTypeEnum { - /**查询链接规则 AND*/ + /** + * 查询链接规则 AND + */ AND("AND"), - /**查询链接规则 OR*/ + /** + * 查询链接规则 OR + */ OR("OR"); private String value; diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryCondition.java b/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryCondition.java index a6bc5ba..e5f028f 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryCondition.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryCondition.java @@ -8,74 +8,76 @@ import java.io.Serializable; */ public class QueryCondition implements Serializable { - private static final long serialVersionUID = 4740166316629191651L; - - private String field; - /** 组件的类型(例如:input、select、radio) */ - private String type; - /** - * 对应的数据库字段的类型 - * 支持:int、bigDecimal、short、long、float、double、boolean - */ - private String dbType; - private String rule; - private String val; + private static final long serialVersionUID = 4740166316629191651L; - public QueryCondition(String field, String type, String dbType, String rule, String val) { - this.field = field; - this.type = type; - this.dbType = dbType; - this.rule = rule; - this.val = val; - } - - public String getField() { - return field; - } + private String field; + /** + * 组件的类型(例如:input、select、radio) + */ + private String type; + /** + * 对应的数据库字段的类型 + * 支持:int、bigDecimal、short、long、float、double、boolean + */ + private String dbType; + private String rule; + private String val; - public void setField(String field) { - this.field = field; - } + public QueryCondition(String field, String type, String dbType, String rule, String val) { + this.field = field; + this.type = type; + this.dbType = dbType; + this.rule = rule; + this.val = val; + } - public String getType() { - return type; - } + public String getField() { + return field; + } - public void setType(String type) { - this.type = type; - } + public void setField(String field) { + this.field = field; + } - public String getDbType() { - return dbType; - } + public String getType() { + return type; + } - public void setDbType(String dbType) { - this.dbType = dbType; - } + public void setType(String type) { + this.type = type; + } - public String getRule() { - return rule; - } + public String getDbType() { + return dbType; + } - public void setRule(String rule) { - this.rule = rule; - } + public void setDbType(String dbType) { + this.dbType = dbType; + } - public String getVal() { - return val; - } + public String getRule() { + return rule; + } - public void setVal(String val) { - this.val = val; - } + public void setRule(String rule) { + this.rule = rule; + } - @Override - public String toString(){ - StringBuffer sb =new StringBuffer(); - if(field == null || "".equals(field)){ - return ""; - } - sb.append(this.field).append(" ").append(this.rule).append(" ").append(this.type).append(" ").append(this.dbType).append(" ").append(this.val); - return sb.toString(); - } + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + if (field == null || "".equals(field)) { + return ""; + } + sb.append(this.field).append(" ").append(this.rule).append(" ").append(this.type).append(" ").append(this.dbType).append(" ").append(this.val); + return sb.toString(); + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryGenerator.java b/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryGenerator.java index ca0f5b6..5ff4d54 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryGenerator.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryGenerator.java @@ -1,5 +1,19 @@ package org.jeecg.common.system.query; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.PropertyUtils; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.constant.DataBaseConstant; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.system.util.JeecgDataAutorUtils; +import org.jeecg.common.system.util.JwtUtil; +import org.jeecg.common.system.util.SqlConcatUtil; +import org.jeecg.common.system.vo.SysPermissionDataRuleModel; +import org.jeecg.common.util.*; +import org.springframework.util.NumberUtils; + import java.beans.PropertyDescriptor; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; @@ -11,337 +25,349 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; -import org.apache.commons.beanutils.PropertyUtils; -import org.jeecg.common.constant.CommonConstant; -import org.jeecg.common.constant.DataBaseConstant; -import org.jeecg.common.exception.JeecgBootException; -import org.jeecg.common.system.util.JeecgDataAutorUtils; -import org.jeecg.common.system.util.JwtUtil; -import org.jeecg.common.system.util.SqlConcatUtil; -import org.jeecg.common.system.vo.SysPermissionDataRuleModel; -import org.jeecg.common.util.*; -import org.springframework.util.NumberUtils; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; - -import lombok.extern.slf4j.Slf4j; - /** * @Description: 查询生成器 * @author: jeecg-boot */ @Slf4j public class QueryGenerator { - public static final String SQL_RULES_COLUMN = "SQL_RULES_COLUMN"; + public static final String SQL_RULES_COLUMN = "SQL_RULES_COLUMN"; - private static final String BEGIN = "_begin"; - private static final String END = "_end"; - /** - * 数字类型字段,拼接此后缀 接受多值参数 - */ - private static final String MULTI = "_MultiString"; - private static final String STAR = "*"; - private static final String COMMA = ","; - /** - * 查询 逗号转义符 相当于一个逗号【作废】 - */ - public static final String QUERY_COMMA_ESCAPE = "++"; - private static final String NOT_EQUAL = "!"; - /**页面带有规则值查询,空格作为分隔符*/ - private static final String QUERY_SEPARATE_KEYWORD = " "; - /**高级查询前端传来的参数名*/ - private static final String SUPER_QUERY_PARAMS = "superQueryParams"; - /** 高级查询前端传来的拼接方式参数名 */ - private static final String SUPER_QUERY_MATCH_TYPE = "superQueryMatchType"; - /** 单引号 */ - public static final String SQL_SQ = "'"; - /**排序列*/ - private static final String ORDER_COLUMN = "column"; - /**排序方式*/ - private static final String ORDER_TYPE = "order"; - private static final String ORDER_TYPE_ASC = "ASC"; + private static final String BEGIN = "_begin"; + private static final String END = "_end"; + /** + * 数字类型字段,拼接此后缀 接受多值参数 + */ + private static final String MULTI = "_MultiString"; + private static final String STAR = "*"; + private static final String COMMA = ","; + /** + * 查询 逗号转义符 相当于一个逗号【作废】 + */ + public static final String QUERY_COMMA_ESCAPE = "++"; + private static final String NOT_EQUAL = "!"; + /** + * 页面带有规则值查询,空格作为分隔符 + */ + private static final String QUERY_SEPARATE_KEYWORD = " "; + /** + * 高级查询前端传来的参数名 + */ + private static final String SUPER_QUERY_PARAMS = "superQueryParams"; + /** + * 高级查询前端传来的拼接方式参数名 + */ + private static final String SUPER_QUERY_MATCH_TYPE = "superQueryMatchType"; + /** + * 单引号 + */ + public static final String SQL_SQ = "'"; + /** + * 排序列 + */ + private static final String ORDER_COLUMN = "column"; + /** + * 排序方式 + */ + private static final String ORDER_TYPE = "order"; + private static final String ORDER_TYPE_ASC = "ASC"; - /**mysql 模糊查询之特殊字符下划线 (_、\)*/ - public static final String LIKE_MYSQL_SPECIAL_STRS = "_,%"; + /** + * mysql 模糊查询之特殊字符下划线 (_、\) + */ + public static final String LIKE_MYSQL_SPECIAL_STRS = "_,%"; - /**日期格式化yyyy-MM-dd*/ - public static final String YYYY_MM_DD = "yyyy-MM-dd"; + /** + * 日期格式化yyyy-MM-dd + */ + public static final String YYYY_MM_DD = "yyyy-MM-dd"; - /**to_date*/ - public static final String TO_DATE = "to_date"; + /** + * to_date + */ + public static final String TO_DATE = "to_date"; - /**时间格式化 */ - private static final ThreadLocal LOCAL = new ThreadLocal(); - private static SimpleDateFormat getTime(){ - SimpleDateFormat time = LOCAL.get(); - if(time == null){ - time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + /** + * 时间格式化 + */ + private static final ThreadLocal LOCAL = new ThreadLocal(); + + private static SimpleDateFormat getTime() { + SimpleDateFormat time = LOCAL.get(); + if (time == null) { + time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); LOCAL.set(time); - } - return time; - } - - /** - * 获取查询条件构造器QueryWrapper实例 通用查询条件已被封装完成 - * @param searchObj 查询实体 - * @param parameterMap request.getParameterMap() - * @return QueryWrapper实例 - */ - public static QueryWrapper initQueryWrapper(T searchObj,Map parameterMap){ - long start = System.currentTimeMillis(); - QueryWrapper queryWrapper = new QueryWrapper(); - installMplus(queryWrapper, searchObj, parameterMap, null); - log.debug("---查询条件构造器初始化完成,耗时:"+(System.currentTimeMillis()-start)+"毫秒----"); - return queryWrapper; - } - - //update-begin---author:chenrui ---date:20240527 for:[TV360X-378]增加自定义字段查询规则功能------------ - /** - * 获取查询条件构造器QueryWrapper实例 通用查询条件已被封装完成 - * @param searchObj 查询实体 - * @param parameterMap request.getParameterMap() - * @param customRuleMap 自定义字段查询规则 {field:QueryRuleEnum} - * @return QueryWrapper实例 - */ - public static QueryWrapper initQueryWrapper(T searchObj,Map parameterMap, Map customRuleMap){ - long start = System.currentTimeMillis(); - QueryWrapper queryWrapper = new QueryWrapper(); - installMplus(queryWrapper, searchObj, parameterMap, customRuleMap); - log.debug("---查询条件构造器初始化完成,耗时:"+(System.currentTimeMillis()-start)+"毫秒----"); - return queryWrapper; - } - //update-end---author:chenrui ---date:20240527 for:[TV360X-378]增加自定义字段查询规则功能------------ + } + return time; + } - /** - * 组装Mybatis Plus 查询条件 - *

使用此方法 需要有如下几点注意: - *
1.使用QueryWrapper 而非LambdaQueryWrapper; - *
2.实例化QueryWrapper时不可将实体传入参数 - *
错误示例:如QueryWrapper queryWrapper = new QueryWrapper(jeecgDemo); - *
正确示例:QueryWrapper queryWrapper = new QueryWrapper(); - *
3.也可以不使用这个方法直接调用 {@link #initQueryWrapper}直接获取实例 - */ - private static void installMplus(QueryWrapper queryWrapper, Object searchObj, Map parameterMap, Map customRuleMap) { + /** + * 获取查询条件构造器QueryWrapper实例 通用查询条件已被封装完成 + * + * @param searchObj 查询实体 + * @param parameterMap request.getParameterMap() + * @return QueryWrapper实例 + */ + public static QueryWrapper initQueryWrapper(T searchObj, Map parameterMap) { + long start = System.currentTimeMillis(); + QueryWrapper queryWrapper = new QueryWrapper(); + installMplus(queryWrapper, searchObj, parameterMap, null); + log.debug("---查询条件构造器初始化完成,耗时:" + (System.currentTimeMillis() - start) + "毫秒----"); + return queryWrapper; + } + + //update-begin---author:chenrui ---date:20240527 for:[TV360X-378]增加自定义字段查询规则功能------------ + + /** + * 获取查询条件构造器QueryWrapper实例 通用查询条件已被封装完成 + * + * @param searchObj 查询实体 + * @param parameterMap request.getParameterMap() + * @param customRuleMap 自定义字段查询规则 {field:QueryRuleEnum} + * @return QueryWrapper实例 + */ + public static QueryWrapper initQueryWrapper(T searchObj, Map parameterMap, Map customRuleMap) { + long start = System.currentTimeMillis(); + QueryWrapper queryWrapper = new QueryWrapper(); + installMplus(queryWrapper, searchObj, parameterMap, customRuleMap); + log.debug("---查询条件构造器初始化完成,耗时:" + (System.currentTimeMillis() - start) + "毫秒----"); + return queryWrapper; + } + //update-end---author:chenrui ---date:20240527 for:[TV360X-378]增加自定义字段查询规则功能------------ + + /** + * 组装Mybatis Plus 查询条件 + *

使用此方法 需要有如下几点注意: + *
1.使用QueryWrapper 而非LambdaQueryWrapper; + *
2.实例化QueryWrapper时不可将实体传入参数 + *
错误示例:如QueryWrapper queryWrapper = new QueryWrapper(jeecgDemo); + *
正确示例:QueryWrapper queryWrapper = new QueryWrapper(); + *
3.也可以不使用这个方法直接调用 {@link #initQueryWrapper}直接获取实例 + */ + private static void installMplus(QueryWrapper queryWrapper, Object searchObj, Map parameterMap, Map customRuleMap) { /* * 注意:权限查询由前端配置数据规则 当一个人有多个所属部门时候 可以在规则配置包含条件 orgCode 包含 #{sys_org_code} 但是不支持在自定义SQL中写orgCode in #{sys_org_code} 当一个人只有一个部门 就直接配置等于条件: orgCode 等于 #{sys_org_code} 或者配置自定义SQL: orgCode = '#{sys_org_code}' */ - - //区间条件组装 模糊查询 高级查询组装 简单排序 权限查询 - PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(searchObj); - Map ruleMap = getRuleMap(); - - //权限规则自定义SQL表达式 - for (String c : ruleMap.keySet()) { - if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ - queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue()))); - } - } - - String name, type, column; - // update-begin--Author:taoyan Date:20200923 for:issues/1671 如果字段加注解了@TableField(exist = false),不走DB查询------- - //定义实体字段和数据库字段名称的映射 高级查询中 只能获取实体字段 如果设置TableField注解 那么查询条件会出问题 - Map fieldColumnMap = new HashMap<>(5); - for (int i = 0; i < origDescriptors.length; i++) { - //aliasName = origDescriptors[i].getName(); mybatis 不存在实体属性 不用处理别名的情况 - name = origDescriptors[i].getName(); - type = origDescriptors[i].getPropertyType().toString(); - try { - if (judgedIsUselessField(name)|| !PropertyUtils.isReadable(searchObj, name)) { - continue; - } - Object value = PropertyUtils.getSimpleProperty(searchObj, name); - column = ReflectHelper.getTableFieldName(searchObj.getClass(), name); - if(column==null){ - //column为null只有一种情况 那就是 添加了注解@TableField(exist = false) 后续都不用处理了 - continue; - } - fieldColumnMap.put(name,column); - //数据权限查询 - if(ruleMap.containsKey(name)) { - addRuleToQueryWrapper(ruleMap.get(name), column, origDescriptors[i].getPropertyType(), queryWrapper); - } - //区间查询 - doIntervalQuery(queryWrapper, parameterMap, type, name, column); - //判断单值 参数带不同标识字符串 走不同的查询 - //TODO 这种前后带逗号的支持分割后模糊查询(多选字段查询生效) 示例:,1,3, - if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) { - String multiLikeval = value.toString().replace(",,", COMMA); - String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA); - final String field = oConvertUtils.camelToUnderline(column); - if(vals.length>1) { - queryWrapper.and(j -> { + //区间条件组装 模糊查询 高级查询组装 简单排序 权限查询 + PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(searchObj); + Map ruleMap = getRuleMap(); + + //权限规则自定义SQL表达式 + for (String c : ruleMap.keySet()) { + if (oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)) { + queryWrapper.and(i -> i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue()))); + } + } + + String name, type, column; + // update-begin--Author:taoyan Date:20200923 for:issues/1671 如果字段加注解了@TableField(exist = false),不走DB查询------- + //定义实体字段和数据库字段名称的映射 高级查询中 只能获取实体字段 如果设置TableField注解 那么查询条件会出问题 + Map fieldColumnMap = new HashMap<>(5); + for (int i = 0; i < origDescriptors.length; i++) { + //aliasName = origDescriptors[i].getName(); mybatis 不存在实体属性 不用处理别名的情况 + name = origDescriptors[i].getName(); + type = origDescriptors[i].getPropertyType().toString(); + try { + if (judgedIsUselessField(name) || !PropertyUtils.isReadable(searchObj, name)) { + continue; + } + + Object value = PropertyUtils.getSimpleProperty(searchObj, name); + column = ReflectHelper.getTableFieldName(searchObj.getClass(), name); + if (column == null) { + //column为null只有一种情况 那就是 添加了注解@TableField(exist = false) 后续都不用处理了 + continue; + } + fieldColumnMap.put(name, column); + //数据权限查询 + if (ruleMap.containsKey(name)) { + addRuleToQueryWrapper(ruleMap.get(name), column, origDescriptors[i].getPropertyType(), queryWrapper); + } + //区间查询 + doIntervalQuery(queryWrapper, parameterMap, type, name, column); + //判断单值 参数带不同标识字符串 走不同的查询 + //TODO 这种前后带逗号的支持分割后模糊查询(多选字段查询生效) 示例:,1,3, + if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) { + String multiLikeval = value.toString().replace(",,", COMMA); + String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA); + final String field = oConvertUtils.camelToUnderline(column); + if (vals.length > 1) { + queryWrapper.and(j -> { log.info("---查询过滤器,Query规则---field:{}, rule:{}, value:{}", field, "like", vals[0]); - j = j.like(field,vals[0]); - for (int k=1;k j.like(field,vals[0])); - } - }else { - //update-begin---author:chenrui ---date:20240527 for:[TV360X-378]增加自定义字段查询规则功能------------ - QueryRuleEnum rule; - if(null != customRuleMap && customRuleMap.containsKey(name)) { - // 有自定义规则,使用自定义规则. - rule = customRuleMap.get(name); - }else { - //根据参数值带什么关键字符串判断走什么类型的查询 - rule = convert2Rule(value); - } - //update-end---author:chenrui ---date:20240527 for:[TV360X-378]增加自定义字段查询规则功能------------ - value = replaceValue(rule,value); - // add -begin 添加判断为字符串时设为全模糊查询 - //if( (rule==null || QueryRuleEnum.EQ.equals(rule)) && "class java.lang.String".equals(type)) { - // 可以设置左右模糊或全模糊,因人而异 - //rule = QueryRuleEnum.LIKE; - //} - // add -end 添加判断为字符串时设为全模糊查询 - addEasyQuery(queryWrapper, column, rule, value); - } - - } catch (Exception e) { - log.error(e.getMessage(), e); - } - } - // 排序逻辑 处理 - doMultiFieldsOrder(queryWrapper, parameterMap, fieldColumnMap); - - //高级查询 - doSuperQuery(queryWrapper, parameterMap, fieldColumnMap); - // update-end--Author:taoyan Date:20200923 for:issues/1671 如果字段加注解了@TableField(exist = false),不走DB查询------- - - } + j = j.like(field, vals[0]); + for (int k = 1; k < vals.length; k++) { + j = j.or().like(field, vals[k]); + log.info("---查询过滤器,Query规则 .or()---field:{}, rule:{}, value:{}", field, "like", vals[k]); + } + //return j; + }); + } else { + log.info("---查询过滤器,Query规则---field:{}, rule:{}, value:{}", field, "like", vals[0]); + queryWrapper.and(j -> j.like(field, vals[0])); + } + } else { + //update-begin---author:chenrui ---date:20240527 for:[TV360X-378]增加自定义字段查询规则功能------------ + QueryRuleEnum rule; + if (null != customRuleMap && customRuleMap.containsKey(name)) { + // 有自定义规则,使用自定义规则. + rule = customRuleMap.get(name); + } else { + //根据参数值带什么关键字符串判断走什么类型的查询 + rule = convert2Rule(value); + } + //update-end---author:chenrui ---date:20240527 for:[TV360X-378]增加自定义字段查询规则功能------------ + value = replaceValue(rule, value); + // add -begin 添加判断为字符串时设为全模糊查询 + //if( (rule==null || QueryRuleEnum.EQ.equals(rule)) && "class java.lang.String".equals(type)) { + // 可以设置左右模糊或全模糊,因人而异 + //rule = QueryRuleEnum.LIKE; + //} + // add -end 添加判断为字符串时设为全模糊查询 + addEasyQuery(queryWrapper, column, rule, value); + } + + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + // 排序逻辑 处理 + doMultiFieldsOrder(queryWrapper, parameterMap, fieldColumnMap); + + //高级查询 + doSuperQuery(queryWrapper, parameterMap, fieldColumnMap); + // update-end--Author:taoyan Date:20200923 for:issues/1671 如果字段加注解了@TableField(exist = false),不走DB查询------- + + } - /** - * 区间查询 - * @param queryWrapper query对象 - * @param parameterMap 参数map - * @param type 字段类型 - * @param filedName 字段名称 - * @param columnName 列名称 - */ - private static void doIntervalQuery(QueryWrapper queryWrapper, Map parameterMap, String type, String filedName, String columnName) throws ParseException { - // 添加 判断是否有区间值 - String endValue = null,beginValue = null; - if (parameterMap != null && parameterMap.containsKey(filedName + BEGIN)) { - beginValue = parameterMap.get(filedName + BEGIN)[0].trim(); - addQueryByRule(queryWrapper, columnName, type, beginValue, QueryRuleEnum.GE); + /** + * 区间查询 + * + * @param queryWrapper query对象 + * @param parameterMap 参数map + * @param type 字段类型 + * @param filedName 字段名称 + * @param columnName 列名称 + */ + private static void doIntervalQuery(QueryWrapper queryWrapper, Map parameterMap, String type, String filedName, String columnName) throws ParseException { + // 添加 判断是否有区间值 + String endValue = null, beginValue = null; + if (parameterMap != null && parameterMap.containsKey(filedName + BEGIN)) { + beginValue = parameterMap.get(filedName + BEGIN)[0].trim(); + addQueryByRule(queryWrapper, columnName, type, beginValue, QueryRuleEnum.GE); - } - if (parameterMap != null && parameterMap.containsKey(filedName + END)) { - endValue = parameterMap.get(filedName + END)[0].trim(); - addQueryByRule(queryWrapper, columnName, type, endValue, QueryRuleEnum.LE); - } - //多值查询 - if (parameterMap != null && parameterMap.containsKey(filedName + MULTI)) { - endValue = parameterMap.get(filedName + MULTI)[0].trim(); - addQueryByRule(queryWrapper, columnName.replace(MULTI,""), type, endValue, QueryRuleEnum.IN); - } - } - - private static void doMultiFieldsOrder(QueryWrapper queryWrapper,Map parameterMap, Map fieldColumnMap) { - Set allFields = fieldColumnMap.keySet(); - String column=null,order=null; - if(parameterMap!=null&& parameterMap.containsKey(ORDER_COLUMN)) { - column = parameterMap.get(ORDER_COLUMN)[0]; - } - if(parameterMap!=null&& parameterMap.containsKey(ORDER_TYPE)) { - order = parameterMap.get(ORDER_TYPE)[0]; - } + } + if (parameterMap != null && parameterMap.containsKey(filedName + END)) { + endValue = parameterMap.get(filedName + END)[0].trim(); + addQueryByRule(queryWrapper, columnName, type, endValue, QueryRuleEnum.LE); + } + //多值查询 + if (parameterMap != null && parameterMap.containsKey(filedName + MULTI)) { + endValue = parameterMap.get(filedName + MULTI)[0].trim(); + addQueryByRule(queryWrapper, columnName.replace(MULTI, ""), type, endValue, QueryRuleEnum.IN); + } + } + + private static void doMultiFieldsOrder(QueryWrapper queryWrapper, Map parameterMap, Map fieldColumnMap) { + Set allFields = fieldColumnMap.keySet(); + String column = null, order = null; + if (parameterMap != null && parameterMap.containsKey(ORDER_COLUMN)) { + column = parameterMap.get(ORDER_COLUMN)[0]; + } + if (parameterMap != null && parameterMap.containsKey(ORDER_TYPE)) { + order = parameterMap.get(ORDER_TYPE)[0]; + } log.debug("排序规则>>列:" + column + ",排序方式:" + order); - //update-begin-author:scott date:2022-11-07 for:避免用户自定义表无默认字段{创建时间},导致排序报错 - //TODO 避免用户自定义表无默认字段创建时间,导致排序报错 - if(DataBaseConstant.CREATE_TIME.equals(column) && !fieldColumnMap.containsKey(DataBaseConstant.CREATE_TIME)){ - column = "id"; - log.warn("检测到实体里没有字段createTime,改成采用ID排序!"); - } - //update-end-author:scott date:2022-11-07 for:避免用户自定义表无默认字段{创建时间},导致排序报错 - - if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { - //字典字段,去掉字典翻译文本后缀 - if(column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { - column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX)); - } + //update-begin-author:scott date:2022-11-07 for:避免用户自定义表无默认字段{创建时间},导致排序报错 + //TODO 避免用户自定义表无默认字段创建时间,导致排序报错 + if (DataBaseConstant.CREATE_TIME.equals(column) && !fieldColumnMap.containsKey(DataBaseConstant.CREATE_TIME)) { + column = "id"; + log.warn("检测到实体里没有字段createTime,改成采用ID排序!"); + } + //update-end-author:scott date:2022-11-07 for:避免用户自定义表无默认字段{创建时间},导致排序报错 - //update-begin-author:taoyan date:2022-5-16 for: issues/3676 获取系统用户列表时,使用SQL注入生效 - //判断column是不是当前实体的 - log.debug("当前字段有:"+ allFields); - if (!allColumnExist(column, allFields)) { - throw new JeecgBootException("请注意,将要排序的列字段不存在:" + column); - } - //update-end-author:taoyan date:2022-5-16 for: issues/3676 获取系统用户列表时,使用SQL注入生效 + if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + //字典字段,去掉字典翻译文本后缀 + if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { + column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX)); + } - //update-begin-author:scott date:2022-10-10 for:【jeecg-boot/issues/I5FJU6】doMultiFieldsOrder() 多字段排序方法存在问题 - //多字段排序方法没有读取 MybatisPlus 注解 @TableField 里 value 的值 - if (column.contains(",")) { - List columnList = Arrays.asList(column.split(",")); - String columnStrNew = columnList.stream().map(c -> fieldColumnMap.get(c)).collect(Collectors.joining(",")); - if (oConvertUtils.isNotEmpty(columnStrNew)) { - column = columnStrNew; - } - }else{ - column = fieldColumnMap.get(column); - } - //update-end-author:scott date:2022-10-10 for:【jeecg-boot/issues/I5FJU6】doMultiFieldsOrder() 多字段排序方法存在问题 + //update-begin-author:taoyan date:2022-5-16 for: issues/3676 获取系统用户列表时,使用SQL注入生效 + //判断column是不是当前实体的 + log.debug("当前字段有:" + allFields); + if (!allColumnExist(column, allFields)) { + throw new JeecgBootException("请注意,将要排序的列字段不存在:" + column); + } + //update-end-author:taoyan date:2022-5-16 for: issues/3676 获取系统用户列表时,使用SQL注入生效 - //SQL注入check - SqlInjectionUtil.filterContentMulti(column); + //update-begin-author:scott date:2022-10-10 for:【jeecg-boot/issues/I5FJU6】doMultiFieldsOrder() 多字段排序方法存在问题 + //多字段排序方法没有读取 MybatisPlus 注解 @TableField 里 value 的值 + if (column.contains(",")) { + List columnList = Arrays.asList(column.split(",")); + String columnStrNew = columnList.stream().map(c -> fieldColumnMap.get(c)).collect(Collectors.joining(",")); + if (oConvertUtils.isNotEmpty(columnStrNew)) { + column = columnStrNew; + } + } else { + column = fieldColumnMap.get(column); + } + //update-end-author:scott date:2022-10-10 for:【jeecg-boot/issues/I5FJU6】doMultiFieldsOrder() 多字段排序方法存在问题 - //update-begin--Author:scott Date:20210531 for:36 多条件排序无效问题修正------- - // 排序规则修改 - // 将现有排序 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1,column2 desc" - // 修改为 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1 desc,column2 desc" - if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) { - queryWrapper.orderByAsc(SqlInjectionUtil.getSqlInjectSortFields(column.split(","))); - } else { - queryWrapper.orderByDesc(SqlInjectionUtil.getSqlInjectSortFields(column.split(","))); - } - //update-end--Author:scott Date:20210531 for:36 多条件排序无效问题修正------- - } - } + //SQL注入check + SqlInjectionUtil.filterContentMulti(column); - //update-begin-author:taoyan date:2022-5-23 for: issues/3676 获取系统用户列表时,使用SQL注入生效 - /** - * 多字段排序 判断所传字段是否存在 - * @return - */ - private static boolean allColumnExist(String columnStr, Set allFields){ - boolean exist = true; - if(columnStr.indexOf(COMMA)>=0){ - String[] arr = columnStr.split(COMMA); - for(String column: arr){ - if(!allFields.contains(column)){ - exist = false; - break; - } - } - }else{ - exist = allFields.contains(columnStr); - } - return exist; - } - //update-end-author:taoyan date:2022-5-23 for: issues/3676 获取系统用户列表时,使用SQL注入生效 - - /** - * 高级查询 - * @param queryWrapper 查询对象 - * @param parameterMap 参数对象 - * @param fieldColumnMap 实体字段和数据库列对应的map - */ - private static void doSuperQuery(QueryWrapper queryWrapper,Map parameterMap, Map fieldColumnMap) { - if(parameterMap!=null&& parameterMap.containsKey(SUPER_QUERY_PARAMS)){ - String superQueryParams = parameterMap.get(SUPER_QUERY_PARAMS)[0]; - String superQueryMatchType = parameterMap.get(SUPER_QUERY_MATCH_TYPE) != null ? parameterMap.get(SUPER_QUERY_MATCH_TYPE)[0] : MatchTypeEnum.AND.getValue(); + //update-begin--Author:scott Date:20210531 for:36 多条件排序无效问题修正------- + // 排序规则修改 + // 将现有排序 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1,column2 desc" + // 修改为 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1 desc,column2 desc" + if (order.toUpperCase().indexOf(ORDER_TYPE_ASC) >= 0) { + queryWrapper.orderByAsc(SqlInjectionUtil.getSqlInjectSortFields(column.split(","))); + } else { + queryWrapper.orderByDesc(SqlInjectionUtil.getSqlInjectSortFields(column.split(","))); + } + //update-end--Author:scott Date:20210531 for:36 多条件排序无效问题修正------- + } + } + + //update-begin-author:taoyan date:2022-5-23 for: issues/3676 获取系统用户列表时,使用SQL注入生效 + + /** + * 多字段排序 判断所传字段是否存在 + * + * @return + */ + private static boolean allColumnExist(String columnStr, Set allFields) { + boolean exist = true; + if (columnStr.indexOf(COMMA) >= 0) { + String[] arr = columnStr.split(COMMA); + for (String column : arr) { + if (!allFields.contains(column)) { + exist = false; + break; + } + } + } else { + exist = allFields.contains(columnStr); + } + return exist; + } + //update-end-author:taoyan date:2022-5-23 for: issues/3676 获取系统用户列表时,使用SQL注入生效 + + /** + * 高级查询 + * + * @param queryWrapper 查询对象 + * @param parameterMap 参数对象 + * @param fieldColumnMap 实体字段和数据库列对应的map + */ + private static void doSuperQuery(QueryWrapper queryWrapper, Map parameterMap, Map fieldColumnMap) { + if (parameterMap != null && parameterMap.containsKey(SUPER_QUERY_PARAMS)) { + String superQueryParams = parameterMap.get(SUPER_QUERY_PARAMS)[0]; + String superQueryMatchType = parameterMap.get(SUPER_QUERY_MATCH_TYPE) != null ? parameterMap.get(SUPER_QUERY_MATCH_TYPE)[0] : MatchTypeEnum.AND.getValue(); MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); // update-begin--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 ------- try { @@ -350,16 +376,16 @@ public class QueryGenerator { if (conditions == null || conditions.size() == 0) { return; } - // update-begin-author:sunjianlei date:20220119 for: 【JTC-573】 过滤空条件查询,防止 sql 拼接多余的 and - List filterConditions = conditions.stream().filter( - rule -> oConvertUtils.isNotEmpty(rule.getField()) - && oConvertUtils.isNotEmpty(rule.getRule()) - && oConvertUtils.isNotEmpty(rule.getVal()) - ).collect(Collectors.toList()); - if (filterConditions.size() == 0) { - return; - } - // update-end-author:sunjianlei date:20220119 for: 【JTC-573】 过滤空条件查询,防止 sql 拼接多余的 and + // update-begin-author:sunjianlei date:20220119 for: 【JTC-573】 过滤空条件查询,防止 sql 拼接多余的 and + List filterConditions = conditions.stream().filter( + rule -> oConvertUtils.isNotEmpty(rule.getField()) + && oConvertUtils.isNotEmpty(rule.getRule()) + && oConvertUtils.isNotEmpty(rule.getVal()) + ).collect(Collectors.toList()); + if (filterConditions.size() == 0) { + return; + } + // update-end-author:sunjianlei date:20220119 for: 【JTC-573】 过滤空条件查询,防止 sql 拼接多余的 and log.debug("---高级查询参数-->" + filterConditions); queryWrapper.and(andWrapper -> { @@ -372,48 +398,48 @@ public class QueryGenerator { log.debug("SuperQuery ==> " + rule.toString()); //update-begin-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错 - Object queryValue = rule.getVal(); - if("date".equals(rule.getType())){ - queryValue = DateUtils.str2Date(rule.getVal(),DateUtils.date_sdf.get()); - }else if("datetime".equals(rule.getType())){ - queryValue = DateUtils.str2Date(rule.getVal(), DateUtils.datetimeFormat.get()); - } - // update-begin--author:sunjianlei date:20210702 for:【/issues/I3VR8E】高级查询没有类型转换,查询参数都是字符串类型 ---- - String dbType = rule.getDbType(); - if (oConvertUtils.isNotEmpty(dbType)) { - try { - String valueStr = String.valueOf(queryValue); - switch (dbType.toLowerCase().trim()) { - case "int": - queryValue = Integer.parseInt(valueStr); - break; - case "bigdecimal": - queryValue = new BigDecimal(valueStr); - break; - case "short": - queryValue = Short.parseShort(valueStr); - break; - case "long": - queryValue = Long.parseLong(valueStr); - break; - case "float": - queryValue = Float.parseFloat(valueStr); - break; - case "double": - queryValue = Double.parseDouble(valueStr); - break; - case "boolean": - queryValue = Boolean.parseBoolean(valueStr); - break; + Object queryValue = rule.getVal(); + if ("date".equals(rule.getType())) { + queryValue = DateUtils.str2Date(rule.getVal(), DateUtils.date_sdf.get()); + } else if ("datetime".equals(rule.getType())) { + queryValue = DateUtils.str2Date(rule.getVal(), DateUtils.datetimeFormat.get()); + } + // update-begin--author:sunjianlei date:20210702 for:【/issues/I3VR8E】高级查询没有类型转换,查询参数都是字符串类型 ---- + String dbType = rule.getDbType(); + if (oConvertUtils.isNotEmpty(dbType)) { + try { + String valueStr = String.valueOf(queryValue); + switch (dbType.toLowerCase().trim()) { + case "int": + queryValue = Integer.parseInt(valueStr); + break; + case "bigdecimal": + queryValue = new BigDecimal(valueStr); + break; + case "short": + queryValue = Short.parseShort(valueStr); + break; + case "long": + queryValue = Long.parseLong(valueStr); + break; + case "float": + queryValue = Float.parseFloat(valueStr); + break; + case "double": + queryValue = Double.parseDouble(valueStr); + break; + case "boolean": + queryValue = Boolean.parseBoolean(valueStr); + break; default: - } - } catch (Exception e) { - log.error("高级查询值转换失败:", e); - } - } - // update-begin--author:sunjianlei date:20210702 for:【/issues/I3VR8E】高级查询没有类型转换,查询参数都是字符串类型 ---- + } + } catch (Exception e) { + log.error("高级查询值转换失败:", e); + } + } + // update-begin--author:sunjianlei date:20210702 for:【/issues/I3VR8E】高级查询没有类型转换,查询参数都是字符串类型 ---- addEasyQuery(andWrapper, fieldColumnMap.get(rule.getField()), QueryRuleEnum.getByValue(rule.getRule()), queryValue); - //update-end-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错 + //update-end-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错 // 如果拼接方式是OR,就拼接OR if (MatchTypeEnum.OR == matchType && i < (filterConditions.size() - 1)) { @@ -430,561 +456,570 @@ public class QueryGenerator { e.printStackTrace(); } // update-end--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 ------- - } - //log.info(" superQuery getCustomSqlSegment: "+ queryWrapper.getCustomSqlSegment()); - } - /** - * 根据所传的值 转化成对应的比较方式 - * 支持><= like in ! - * @param value - * @return - */ - public static QueryRuleEnum convert2Rule(Object value) { - // 避免空数据 - // update-begin-author:taoyan date:20210629 for: 查询条件输入空格导致return null后续判断导致抛出null异常 - if (value == null) { - return QueryRuleEnum.EQ; - } - String val = (value + "").toString().trim(); - if (val.length() == 0) { - return QueryRuleEnum.EQ; - } - // update-end-author:taoyan date:20210629 for: 查询条件输入空格导致return null后续判断导致抛出null异常 - QueryRuleEnum rule =null; + } + //log.info(" superQuery getCustomSqlSegment: "+ queryWrapper.getCustomSqlSegment()); + } - //update-begin--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- - //TODO 此处规则,只适用于 le lt ge gt - // step 2 .>= =< + /** + * 根据所传的值 转化成对应的比较方式 + * 支持><= like in ! + * + * @param value + * @return + */ + public static QueryRuleEnum convert2Rule(Object value) { + // 避免空数据 + // update-begin-author:taoyan date:20210629 for: 查询条件输入空格导致return null后续判断导致抛出null异常 + if (value == null) { + return QueryRuleEnum.EQ; + } + String val = (value + "").toString().trim(); + if (val.length() == 0) { + return QueryRuleEnum.EQ; + } + // update-end-author:taoyan date:20210629 for: 查询条件输入空格导致return null后续判断导致抛出null异常 + QueryRuleEnum rule = null; + + //update-begin--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- + //TODO 此处规则,只适用于 le lt ge gt + // step 2 .>= =< int length2 = 2; int length3 = 3; - if (rule == null && val.length() >= length3) { - if(QUERY_SEPARATE_KEYWORD.equals(val.substring(length2, length3))){ - rule = QueryRuleEnum.getByValue(val.substring(0, 2)); - } - } - // step 1 .> < - if (rule == null && val.length() >= length2) { - if(QUERY_SEPARATE_KEYWORD.equals(val.substring(1, length2))){ - rule = QueryRuleEnum.getByValue(val.substring(0, 1)); - } - } - //update-end--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284--------------------- + if (rule == null && val.length() >= length3) { + if (QUERY_SEPARATE_KEYWORD.equals(val.substring(length2, length3))) { + rule = QueryRuleEnum.getByValue(val.substring(0, 2)); + } + } + // step 1 .> < + if (rule == null && val.length() >= length2) { + if (QUERY_SEPARATE_KEYWORD.equals(val.substring(1, length2))) { + rule = QueryRuleEnum.getByValue(val.substring(0, 1)); + } + } + //update-end--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284--------------------- - // step 3 like - //update-begin-author:taoyan for: /issues/3382 默认带*就走模糊,但是如果只有一个*,那么走等于查询 - if(rule == null && val.equals(STAR)){ - rule = QueryRuleEnum.EQ; - } - //update-end-author:taoyan for: /issues/3382 默认带*就走模糊,但是如果只有一个*,那么走等于查询 - if (rule == null && val.contains(STAR)) { - if (val.startsWith(STAR) && val.endsWith(STAR)) { - rule = QueryRuleEnum.LIKE; - } else if (val.startsWith(STAR)) { - rule = QueryRuleEnum.LEFT_LIKE; - } else if(val.endsWith(STAR)){ - rule = QueryRuleEnum.RIGHT_LIKE; - } - } + // step 3 like + //update-begin-author:taoyan for: /issues/3382 默认带*就走模糊,但是如果只有一个*,那么走等于查询 + if (rule == null && val.equals(STAR)) { + rule = QueryRuleEnum.EQ; + } + //update-end-author:taoyan for: /issues/3382 默认带*就走模糊,但是如果只有一个*,那么走等于查询 + if (rule == null && val.contains(STAR)) { + if (val.startsWith(STAR) && val.endsWith(STAR)) { + rule = QueryRuleEnum.LIKE; + } else if (val.startsWith(STAR)) { + rule = QueryRuleEnum.LEFT_LIKE; + } else if (val.endsWith(STAR)) { + rule = QueryRuleEnum.RIGHT_LIKE; + } + } - // step 4 in - if (rule == null && val.contains(COMMA)) { - //TODO in 查询这里应该有个bug 如果一字段本身就是多选 此时用in查询 未必能查询出来 - rule = QueryRuleEnum.IN; - } - // step 5 != - if(rule == null && val.startsWith(NOT_EQUAL)){ - rule = QueryRuleEnum.NE; - } - // step 6 xx+xx+xx 这种情况适用于如果想要用逗号作精确查询 但是系统默认逗号走in 所以可以用++替换【此逻辑作废】 - if(rule == null && val.indexOf(QUERY_COMMA_ESCAPE)>0){ - rule = QueryRuleEnum.EQ_WITH_ADD; - } + // step 4 in + if (rule == null && val.contains(COMMA)) { + //TODO in 查询这里应该有个bug 如果一字段本身就是多选 此时用in查询 未必能查询出来 + rule = QueryRuleEnum.IN; + } + // step 5 != + if (rule == null && val.startsWith(NOT_EQUAL)) { + rule = QueryRuleEnum.NE; + } + // step 6 xx+xx+xx 这种情况适用于如果想要用逗号作精确查询 但是系统默认逗号走in 所以可以用++替换【此逻辑作废】 + if (rule == null && val.indexOf(QUERY_COMMA_ESCAPE) > 0) { + rule = QueryRuleEnum.EQ_WITH_ADD; + } - //update-begin--Author:taoyan Date:20201229 for:initQueryWrapper组装sql查询条件错误 #284--------------------- - //特殊处理:Oracle的表达式to_date('xxx','yyyy-MM-dd')含有逗号,会被识别为in查询,转为等于查询 - if(rule == QueryRuleEnum.IN && val.indexOf(YYYY_MM_DD)>=0 && val.indexOf(TO_DATE)>=0){ - rule = QueryRuleEnum.EQ; - } - //update-end--Author:taoyan Date:20201229 for:initQueryWrapper组装sql查询条件错误 #284--------------------- + //update-begin--Author:taoyan Date:20201229 for:initQueryWrapper组装sql查询条件错误 #284--------------------- + //特殊处理:Oracle的表达式to_date('xxx','yyyy-MM-dd')含有逗号,会被识别为in查询,转为等于查询 + if (rule == QueryRuleEnum.IN && val.indexOf(YYYY_MM_DD) >= 0 && val.indexOf(TO_DATE) >= 0) { + rule = QueryRuleEnum.EQ; + } + //update-end--Author:taoyan Date:20201229 for:initQueryWrapper组装sql查询条件错误 #284--------------------- - return rule != null ? rule : QueryRuleEnum.EQ; - } - - /** - * 替换掉关键字字符 - * - * @param rule - * @param value - * @return - */ - private static Object replaceValue(QueryRuleEnum rule, Object value) { - if (rule == null) { - return null; - } - if (! (value instanceof String)){ - return value; - } - String val = (value + "").toString().trim(); - //update-begin-author:taoyan date:20220302 for: 查询条件的值为等号(=)bug #3443 - if(QueryRuleEnum.EQ.getValue().equals(val)){ - return val; - } - //update-end-author:taoyan date:20220302 for: 查询条件的值为等号(=)bug #3443 - if (rule == QueryRuleEnum.LIKE) { - value = val.substring(1, val.length() - 1); - //mysql 模糊查询之特殊字符下划线 (_、\) - value = specialStrConvert(value.toString()); - } else if (rule == QueryRuleEnum.LEFT_LIKE || rule == QueryRuleEnum.NE) { - value = val.substring(1); - //mysql 模糊查询之特殊字符下划线 (_、\) - value = specialStrConvert(value.toString()); - } else if (rule == QueryRuleEnum.RIGHT_LIKE) { - value = val.substring(0, val.length() - 1); - //mysql 模糊查询之特殊字符下划线 (_、\) - value = specialStrConvert(value.toString()); - } else if (rule == QueryRuleEnum.IN) { - value = val.split(","); - } else if (rule == QueryRuleEnum.EQ_WITH_ADD) { - value = val.replaceAll("\\+\\+", COMMA); - }else { - //update-begin--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- - if(val.startsWith(rule.getValue())){ - //TODO 此处逻辑应该注释掉-> 如果查询内容中带有查询匹配规则符号,就会被截取的(比如:>=您好) - value = val.replaceFirst(rule.getValue(),""); - }else if(val.startsWith(rule.getCondition()+QUERY_SEPARATE_KEYWORD)){ - value = val.replaceFirst(rule.getCondition()+QUERY_SEPARATE_KEYWORD,"").trim(); - } - //update-end--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- - } - return value; - } - - private static void addQueryByRule(QueryWrapper queryWrapper,String name,String type,String value,QueryRuleEnum rule) throws ParseException { - if(oConvertUtils.isNotEmpty(value)) { - //update-begin--Author:sunjianlei Date:20220104 for:【JTC-409】修复逗号分割情况下没有转换类型,导致类型严格的数据库查询报错 ------------------- - // 针对数字类型字段,多值查询 - if(value.contains(COMMA)){ - Object[] temp = Arrays.stream(value.split(COMMA)).map(v -> { - try { - return QueryGenerator.parseByType(v, type, rule); - } catch (ParseException e) { - e.printStackTrace(); - return v; - } - }).toArray(); - addEasyQuery(queryWrapper, name, rule, temp); - return; - } - Object temp = QueryGenerator.parseByType(value, type, rule); - addEasyQuery(queryWrapper, name, rule, temp); - //update-end--Author:sunjianlei Date:20220104 for:【JTC-409】修复逗号分割情况下没有转换类型,导致类型严格的数据库查询报错 ------------------- - } - } + return rule != null ? rule : QueryRuleEnum.EQ; + } - /** - * 根据类型转换给定的值 - * @param value - * @param type - * @param rule - * @return - * @throws ParseException - */ - private static Object parseByType(String value, String type, QueryRuleEnum rule) throws ParseException { - Object temp; - switch (type) { - case "class java.lang.Integer": - temp = Integer.parseInt(value); - break; - case "class java.math.BigDecimal": - temp = new BigDecimal(value); - break; - case "class java.lang.Short": - temp = Short.parseShort(value); - break; - case "class java.lang.Long": - temp = Long.parseLong(value); - break; - case "class java.lang.Float": - temp = Float.parseFloat(value); - break; - case "class java.lang.Double": - temp = Double.parseDouble(value); - break; - case "class java.util.Date": - temp = getDateQueryByRule(value, rule); - break; - default: - temp = value; - break; - } - return temp; - } - - /** - * 获取日期类型的值 - * @param value - * @param rule - * @return - * @throws ParseException - */ - private static Date getDateQueryByRule(String value,QueryRuleEnum rule) throws ParseException { - Date date = null; - int length = 10; - if(value.length()==length) { - if(rule==QueryRuleEnum.GE) { - //比较大于 - date = getTime().parse(value + " 00:00:00"); - }else if(rule==QueryRuleEnum.LE) { - //比较小于 - date = getTime().parse(value + " 23:59:59"); - } - //TODO 日期类型比较特殊 可能oracle下不一定好使 - } - if(date==null) { - date = getTime().parse(value); - } - return date; - } - - /** - * 根据规则走不同的查询 - * @param queryWrapper QueryWrapper - * @param name 字段名字 - * @param rule 查询规则 - * @param value 查询条件值 - */ - public static void addEasyQuery(QueryWrapper queryWrapper, String name, QueryRuleEnum rule, Object value) { - if (name==null || value == null || rule == null || oConvertUtils.isEmpty(value)) { - return; - } - name = oConvertUtils.camelToUnderline(name); - log.debug("---高级查询 Query规则---field:{} , rule:{} , value:{}",name,rule.getValue(),value); - switch (rule) { - case GT: - queryWrapper.gt(name, value); - break; - case GE: - queryWrapper.ge(name, value); - break; - case LT: - queryWrapper.lt(name, value); - break; - case LE: - queryWrapper.le(name, value); - break; - case EQ: - case EQ_WITH_ADD: - queryWrapper.eq(name, value); - break; - case NE: - queryWrapper.ne(name, value); - break; - case IN: - if(value instanceof String) { - queryWrapper.in(name, (Object[])value.toString().split(COMMA)); - }else if(value instanceof String[]) { - queryWrapper.in(name, (Object[]) value); - } - //update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 - else if(value.getClass().isArray()) { - queryWrapper.in(name, (Object[])value); - }else { - queryWrapper.in(name, value); - } - //update-end-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 - break; - case LIKE: - queryWrapper.like(name, value); - break; - case LEFT_LIKE: - queryWrapper.likeLeft(name, value); - break; - case NOT_LEFT_LIKE: - queryWrapper.notLikeLeft(name, value); - break; - case RIGHT_LIKE: - queryWrapper.likeRight(name, value); - break; - case NOT_RIGHT_LIKE: - queryWrapper.notLikeRight(name, value); - break; - //update-begin---author:chenrui ---date:20240527 for:[TV360X-378]下拉多框根据条件查询不出来:增加自定义字段查询规则功能------------ - case LIKE_WITH_OR: - final String nameFinal = name; - Object[] vals; - if (value instanceof String) { - vals = value.toString().split(COMMA); - } else if (value instanceof String[]) { - vals = (Object[]) value; - } - //update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 - else if (value.getClass().isArray()) { - vals = (Object[]) value; - } else { - vals = new Object[]{value}; - } - queryWrapper.and(j -> { - log.info("---查询过滤器,Query规则---field:{}, rule:{}, value:{}", nameFinal, "like", vals[0]); - j = j.like(nameFinal, vals[0]); - for (int k = 1; k < vals.length; k++) { - j = j.or().like(nameFinal, vals[k]); - log.info("---查询过滤器,Query规则 .or()---field:{}, rule:{}, value:{}", nameFinal, "like", vals[k]); - } - }); - break; - //update-end---author:chenrui ---date:20240527 for:[TV360X-378]下拉多框根据条件查询不出来:增加自定义字段查询规则功能------------ - default: - log.info("--查询规则未匹配到---"); - break; - } - } - /** - * - * @param name - * @return - */ - private static boolean judgedIsUselessField(String name) { - return "class".equals(name) || "ids".equals(name) - || "page".equals(name) || "rows".equals(name) - || "sort".equals(name) || "order".equals(name); - } + /** + * 替换掉关键字字符 + * + * @param rule + * @param value + * @return + */ + private static Object replaceValue(QueryRuleEnum rule, Object value) { + if (rule == null) { + return null; + } + if (!(value instanceof String)) { + return value; + } + String val = (value + "").toString().trim(); + //update-begin-author:taoyan date:20220302 for: 查询条件的值为等号(=)bug #3443 + if (QueryRuleEnum.EQ.getValue().equals(val)) { + return val; + } + //update-end-author:taoyan date:20220302 for: 查询条件的值为等号(=)bug #3443 + if (rule == QueryRuleEnum.LIKE) { + value = val.substring(1, val.length() - 1); + //mysql 模糊查询之特殊字符下划线 (_、\) + value = specialStrConvert(value.toString()); + } else if (rule == QueryRuleEnum.LEFT_LIKE || rule == QueryRuleEnum.NE) { + value = val.substring(1); + //mysql 模糊查询之特殊字符下划线 (_、\) + value = specialStrConvert(value.toString()); + } else if (rule == QueryRuleEnum.RIGHT_LIKE) { + value = val.substring(0, val.length() - 1); + //mysql 模糊查询之特殊字符下划线 (_、\) + value = specialStrConvert(value.toString()); + } else if (rule == QueryRuleEnum.IN) { + value = val.split(","); + } else if (rule == QueryRuleEnum.EQ_WITH_ADD) { + value = val.replaceAll("\\+\\+", COMMA); + } else { + //update-begin--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- + if (val.startsWith(rule.getValue())) { + //TODO 此处逻辑应该注释掉-> 如果查询内容中带有查询匹配规则符号,就会被截取的(比如:>=您好) + value = val.replaceFirst(rule.getValue(), ""); + } else if (val.startsWith(rule.getCondition() + QUERY_SEPARATE_KEYWORD)) { + value = val.replaceFirst(rule.getCondition() + QUERY_SEPARATE_KEYWORD, "").trim(); + } + //update-end--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- + } + return value; + } - + private static void addQueryByRule(QueryWrapper queryWrapper, String name, String type, String value, QueryRuleEnum rule) throws ParseException { + if (oConvertUtils.isNotEmpty(value)) { + //update-begin--Author:sunjianlei Date:20220104 for:【JTC-409】修复逗号分割情况下没有转换类型,导致类型严格的数据库查询报错 ------------------- + // 针对数字类型字段,多值查询 + if (value.contains(COMMA)) { + Object[] temp = Arrays.stream(value.split(COMMA)).map(v -> { + try { + return QueryGenerator.parseByType(v, type, rule); + } catch (ParseException e) { + e.printStackTrace(); + return v; + } + }).toArray(); + addEasyQuery(queryWrapper, name, rule, temp); + return; + } + Object temp = QueryGenerator.parseByType(value, type, rule); + addEasyQuery(queryWrapper, name, rule, temp); + //update-end--Author:sunjianlei Date:20220104 for:【JTC-409】修复逗号分割情况下没有转换类型,导致类型严格的数据库查询报错 ------------------- + } + } - /** - * 获取请求对应的数据权限规则 TODO 相同列权限多个 有问题 - * @return - */ - public static Map getRuleMap() { - Map ruleMap = new HashMap<>(5); - List list = null; - //update-begin-author:taoyan date:2023-6-1 for:QQYUN-5441 【简流】获取多个用户/部门/角色 设置部门查询 报错 - try { - list = JeecgDataAutorUtils.loadDataSearchConditon(); - }catch (Exception e){ - log.error("根据request对象获取权限数据失败,可能是定时任务中执行的。", e); - } - //update-end-author:taoyan date:2023-6-1 for:QQYUN-5441 【简流】获取多个用户/部门/角色 设置部门查询 报错 - if(list != null&&list.size()>0){ - if(list.get(0)==null){ - return ruleMap; - } - for (SysPermissionDataRuleModel rule : list) { - String column = rule.getRuleColumn(); - if(QueryRuleEnum.SQL_RULES.getValue().equals(rule.getRuleConditions())) { - column = SQL_RULES_COLUMN+rule.getId(); - } - ruleMap.put(column, rule); - } - } - return ruleMap; - } - - private static void addRuleToQueryWrapper(SysPermissionDataRuleModel dataRule, String name, Class propertyType, QueryWrapper queryWrapper) { - QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); - if(rule.equals(QueryRuleEnum.IN) && ! propertyType.equals(String.class)) { - String[] values = dataRule.getRuleValue().split(","); - Object[] objs = new Object[values.length]; - for (int i = 0; i < values.length; i++) { - objs[i] = NumberUtils.parseNumber(values[i], propertyType); - } - addEasyQuery(queryWrapper, name, rule, objs); - }else { - if (propertyType.equals(String.class)) { - addEasyQuery(queryWrapper, name, rule, converRuleValue(dataRule.getRuleValue())); - }else if (propertyType.equals(Date.class)) { - String dateStr =converRuleValue(dataRule.getRuleValue()); + /** + * 根据类型转换给定的值 + * + * @param value + * @param type + * @param rule + * @return + * @throws ParseException + */ + private static Object parseByType(String value, String type, QueryRuleEnum rule) throws ParseException { + Object temp; + switch (type) { + case "class java.lang.Integer": + temp = Integer.parseInt(value); + break; + case "class java.math.BigDecimal": + temp = new BigDecimal(value); + break; + case "class java.lang.Short": + temp = Short.parseShort(value); + break; + case "class java.lang.Long": + temp = Long.parseLong(value); + break; + case "class java.lang.Float": + temp = Float.parseFloat(value); + break; + case "class java.lang.Double": + temp = Double.parseDouble(value); + break; + case "class java.util.Date": + temp = getDateQueryByRule(value, rule); + break; + default: + temp = value; + break; + } + return temp; + } + + /** + * 获取日期类型的值 + * + * @param value + * @param rule + * @return + * @throws ParseException + */ + private static Date getDateQueryByRule(String value, QueryRuleEnum rule) throws ParseException { + Date date = null; + int length = 10; + if (value.length() == length) { + if (rule == QueryRuleEnum.GE) { + //比较大于 + date = getTime().parse(value + " 00:00:00"); + } else if (rule == QueryRuleEnum.LE) { + //比较小于 + date = getTime().parse(value + " 23:59:59"); + } + //TODO 日期类型比较特殊 可能oracle下不一定好使 + } + if (date == null) { + date = getTime().parse(value); + } + return date; + } + + /** + * 根据规则走不同的查询 + * + * @param queryWrapper QueryWrapper + * @param name 字段名字 + * @param rule 查询规则 + * @param value 查询条件值 + */ + public static void addEasyQuery(QueryWrapper queryWrapper, String name, QueryRuleEnum rule, Object value) { + if (name == null || value == null || rule == null || oConvertUtils.isEmpty(value)) { + return; + } + name = oConvertUtils.camelToUnderline(name); + log.debug("---高级查询 Query规则---field:{} , rule:{} , value:{}", name, rule.getValue(), value); + switch (rule) { + case GT: + queryWrapper.gt(name, value); + break; + case GE: + queryWrapper.ge(name, value); + break; + case LT: + queryWrapper.lt(name, value); + break; + case LE: + queryWrapper.le(name, value); + break; + case EQ: + case EQ_WITH_ADD: + queryWrapper.eq(name, value); + break; + case NE: + queryWrapper.ne(name, value); + break; + case IN: + if (value instanceof String) { + queryWrapper.in(name, (Object[]) value.toString().split(COMMA)); + } else if (value instanceof String[]) { + queryWrapper.in(name, (Object[]) value); + } + //update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 + else if (value.getClass().isArray()) { + queryWrapper.in(name, (Object[]) value); + } else { + queryWrapper.in(name, value); + } + //update-end-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 + break; + case LIKE: + queryWrapper.like(name, value); + break; + case LEFT_LIKE: + queryWrapper.likeLeft(name, value); + break; + case NOT_LEFT_LIKE: + queryWrapper.notLikeLeft(name, value); + break; + case RIGHT_LIKE: + queryWrapper.likeRight(name, value); + break; + case NOT_RIGHT_LIKE: + queryWrapper.notLikeRight(name, value); + break; + //update-begin---author:chenrui ---date:20240527 for:[TV360X-378]下拉多框根据条件查询不出来:增加自定义字段查询规则功能------------ + case LIKE_WITH_OR: + final String nameFinal = name; + Object[] vals; + if (value instanceof String) { + vals = value.toString().split(COMMA); + } else if (value instanceof String[]) { + vals = (Object[]) value; + } + //update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 + else if (value.getClass().isArray()) { + vals = (Object[]) value; + } else { + vals = new Object[]{value}; + } + queryWrapper.and(j -> { + log.info("---查询过滤器,Query规则---field:{}, rule:{}, value:{}", nameFinal, "like", vals[0]); + j = j.like(nameFinal, vals[0]); + for (int k = 1; k < vals.length; k++) { + j = j.or().like(nameFinal, vals[k]); + log.info("---查询过滤器,Query规则 .or()---field:{}, rule:{}, value:{}", nameFinal, "like", vals[k]); + } + }); + break; + //update-end---author:chenrui ---date:20240527 for:[TV360X-378]下拉多框根据条件查询不出来:增加自定义字段查询规则功能------------ + default: + log.info("--查询规则未匹配到---"); + break; + } + } + + /** + * @param name + * @return + */ + private static boolean judgedIsUselessField(String name) { + return "class".equals(name) || "ids".equals(name) + || "page".equals(name) || "rows".equals(name) + || "sort".equals(name) || "order".equals(name); + } + + + /** + * 获取请求对应的数据权限规则 TODO 相同列权限多个 有问题 + * + * @return + */ + public static Map getRuleMap() { + Map ruleMap = new HashMap<>(5); + List list = null; + //update-begin-author:taoyan date:2023-6-1 for:QQYUN-5441 【简流】获取多个用户/部门/角色 设置部门查询 报错 + try { + list = JeecgDataAutorUtils.loadDataSearchConditon(); + } catch (Exception e) { + log.error("根据request对象获取权限数据失败,可能是定时任务中执行的。", e); + } + //update-end-author:taoyan date:2023-6-1 for:QQYUN-5441 【简流】获取多个用户/部门/角色 设置部门查询 报错 + if (list != null && list.size() > 0) { + if (list.get(0) == null) { + return ruleMap; + } + for (SysPermissionDataRuleModel rule : list) { + String column = rule.getRuleColumn(); + if (QueryRuleEnum.SQL_RULES.getValue().equals(rule.getRuleConditions())) { + column = SQL_RULES_COLUMN + rule.getId(); + } + ruleMap.put(column, rule); + } + } + return ruleMap; + } + + private static void addRuleToQueryWrapper(SysPermissionDataRuleModel dataRule, String name, Class propertyType, QueryWrapper queryWrapper) { + QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); + if (rule.equals(QueryRuleEnum.IN) && !propertyType.equals(String.class)) { + String[] values = dataRule.getRuleValue().split(","); + Object[] objs = new Object[values.length]; + for (int i = 0; i < values.length; i++) { + objs[i] = NumberUtils.parseNumber(values[i], propertyType); + } + addEasyQuery(queryWrapper, name, rule, objs); + } else { + if (propertyType.equals(String.class)) { + addEasyQuery(queryWrapper, name, rule, converRuleValue(dataRule.getRuleValue())); + } else if (propertyType.equals(Date.class)) { + String dateStr = converRuleValue(dataRule.getRuleValue()); int length = 10; - if(dateStr.length()==length){ - addEasyQuery(queryWrapper, name, rule, DateUtils.str2Date(dateStr,DateUtils.date_sdf.get())); - }else{ - addEasyQuery(queryWrapper, name, rule, DateUtils.str2Date(dateStr,DateUtils.datetimeFormat.get())); - } - }else { - addEasyQuery(queryWrapper, name, rule, NumberUtils.parseNumber(dataRule.getRuleValue(), propertyType)); - } - } - } - - public static String converRuleValue(String ruleValue) { - String value = JwtUtil.getUserSystemData(ruleValue,null); - return value!= null ? value : ruleValue; - } + if (dateStr.length() == length) { + addEasyQuery(queryWrapper, name, rule, DateUtils.str2Date(dateStr, DateUtils.date_sdf.get())); + } else { + addEasyQuery(queryWrapper, name, rule, DateUtils.str2Date(dateStr, DateUtils.datetimeFormat.get())); + } + } else { + addEasyQuery(queryWrapper, name, rule, NumberUtils.parseNumber(dataRule.getRuleValue(), propertyType)); + } + } + } - /** - * @author: scott - * @Description: 去掉值前后单引号 - * @date: 2020/3/19 21:26 - * @param ruleValue: - * @Return: java.lang.String - */ - public static String trimSingleQuote(String ruleValue) { - if (oConvertUtils.isEmpty(ruleValue)) { - return ""; - } - if (ruleValue.startsWith(QueryGenerator.SQL_SQ)) { - ruleValue = ruleValue.substring(1); - } - if (ruleValue.endsWith(QueryGenerator.SQL_SQ)) { - ruleValue = ruleValue.substring(0, ruleValue.length() - 1); - } - return ruleValue; - } - - public static String getSqlRuleValue(String sqlRule){ - try { - Set varParams = getSqlRuleParams(sqlRule); - for(String var:varParams){ - String tempValue = converRuleValue(var); - sqlRule = sqlRule.replace("#{"+var+"}",tempValue); - } - } catch (Exception e) { - log.error(e.getMessage(), e); - } - return sqlRule; - } - - /** - * 获取sql中的#{key} 这个key组成的set - */ - public static Set getSqlRuleParams(String sql) { - if(oConvertUtils.isEmpty(sql)){ - return null; - } - Set varParams = new HashSet(); - String regex = "\\#\\{\\w+\\}"; - - Pattern p = Pattern.compile(regex); - Matcher m = p.matcher(sql); - while(m.find()){ - String var = m.group(); - varParams.add(var.substring(var.indexOf("{")+1,var.indexOf("}"))); - } - return varParams; - } - - /** - * 获取查询条件 - * @param field - * @param alias - * @param value - * @param isString - * @return - */ - public static String getSingleQueryConditionSql(String field,String alias,Object value,boolean isString) { - return SqlConcatUtil.getSingleQueryConditionSql(field, alias, value, isString,null); - } - - /** - * 根据权限相关配置生成相关的SQL 语句 - * @param clazz - * @return - */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - public static String installAuthJdbc(Class clazz) { - StringBuffer sb = new StringBuffer(); - //权限查询 - Map ruleMap = getRuleMap(); - PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(clazz); - String sqlAnd = " and "; - for (String c : ruleMap.keySet()) { - if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ - sb.append(sqlAnd+getSqlRuleValue(ruleMap.get(c).getRuleValue())); - } - } - String name, column; - for (int i = 0; i < origDescriptors.length; i++) { - name = origDescriptors[i].getName(); - if (judgedIsUselessField(name)) { - continue; - } - if(ruleMap.containsKey(name)) { - column = ReflectHelper.getTableFieldName(clazz, name); - if(column==null){ - continue; - } - SysPermissionDataRuleModel dataRule = ruleMap.get(name); - QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); - Class propType = origDescriptors[i].getPropertyType(); - boolean isString = propType.equals(String.class); - Object value; - //update-begin---author:chenrui ---date:20240527 for:[TV360X-539]数据权限,配置日期等于条件时后端报转换错误------------ - if(isString || Date.class.equals(propType)) { - //update-end---author:chenrui ---date:20240527 for:[TV360X-539]数据权限,配置日期等于条件时后端报转换错误------------ - value = converRuleValue(dataRule.getRuleValue()); - }else { - value = NumberUtils.parseNumber(dataRule.getRuleValue(),propType); - } - String filedSql = SqlConcatUtil.getSingleSqlByRule(rule, oConvertUtils.camelToUnderline(column), value,isString); - sb.append(sqlAnd+filedSql); - } - } - log.info("query auth sql is:"+sb.toString()); - return sb.toString(); - } - - /** - * 根据权限相关配置 组装mp需要的权限 - * @param queryWrapper - * @param clazz - * @return - */ - public static void installAuthMplus(QueryWrapper queryWrapper,Class clazz) { - //权限查询 - Map ruleMap = getRuleMap(); - PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(clazz); - for (String c : ruleMap.keySet()) { - if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ - queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue()))); - } - } - String name, column; - for (int i = 0; i < origDescriptors.length; i++) { - name = origDescriptors[i].getName(); - if (judgedIsUselessField(name)) { - continue; - } - column = ReflectHelper.getTableFieldName(clazz, name); - if(column==null){ - continue; - } - if(ruleMap.containsKey(name)) { - addRuleToQueryWrapper(ruleMap.get(name), column, origDescriptors[i].getPropertyType(), queryWrapper); - } - } - } + public static String converRuleValue(String ruleValue) { + String value = JwtUtil.getUserSystemData(ruleValue, null); + return value != null ? value : ruleValue; + } - /** - * 转换sql中的系统变量 - * @param sql - * @return - */ - public static String convertSystemVariables(String sql){ - return getSqlRuleValue(sql); - } + /** + * @param ruleValue: + * @author: scott + * @Description: 去掉值前后单引号 + * @date: 2020/3/19 21:26 + * @Return: java.lang.String + */ + public static String trimSingleQuote(String ruleValue) { + if (oConvertUtils.isEmpty(ruleValue)) { + return ""; + } + if (ruleValue.startsWith(QueryGenerator.SQL_SQ)) { + ruleValue = ruleValue.substring(1); + } + if (ruleValue.endsWith(QueryGenerator.SQL_SQ)) { + ruleValue = ruleValue.substring(0, ruleValue.length() - 1); + } + return ruleValue; + } - /** - * 获取系统数据库类型 - */ - private static String getDbType(){ - return CommonUtils.getDatabaseType(); - } + public static String getSqlRuleValue(String sqlRule) { + try { + Set varParams = getSqlRuleParams(sqlRule); + for (String var : varParams) { + String tempValue = converRuleValue(var); + sqlRule = sqlRule.replace("#{" + var + "}", tempValue); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return sqlRule; + } - /** - * mysql 模糊查询之特殊字符下划线 (_、\) - * - * @param value: - * @Return: java.lang.String - */ - private static String specialStrConvert(String value) { - if (DataBaseConstant.DB_TYPE_MYSQL.equals(getDbType()) || DataBaseConstant.DB_TYPE_MARIADB.equals(getDbType())) { - String[] specialStr = QueryGenerator.LIKE_MYSQL_SPECIAL_STRS.split(","); - for (String str : specialStr) { - if (value.indexOf(str) !=-1) { - value = value.replace(str, "\\" + str); - } - } - } - return value; - } + /** + * 获取sql中的#{key} 这个key组成的set + */ + public static Set getSqlRuleParams(String sql) { + if (oConvertUtils.isEmpty(sql)) { + return null; + } + Set varParams = new HashSet(); + String regex = "\\#\\{\\w+\\}"; + + Pattern p = Pattern.compile(regex); + Matcher m = p.matcher(sql); + while (m.find()) { + String var = m.group(); + varParams.add(var.substring(var.indexOf("{") + 1, var.indexOf("}"))); + } + return varParams; + } + + /** + * 获取查询条件 + * + * @param field + * @param alias + * @param value + * @param isString + * @return + */ + public static String getSingleQueryConditionSql(String field, String alias, Object value, boolean isString) { + return SqlConcatUtil.getSingleQueryConditionSql(field, alias, value, isString, null); + } + + /** + * 根据权限相关配置生成相关的SQL 语句 + * + * @param clazz + * @return + */ + @SuppressWarnings({"unchecked", "rawtypes"}) + public static String installAuthJdbc(Class clazz) { + StringBuffer sb = new StringBuffer(); + //权限查询 + Map ruleMap = getRuleMap(); + PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(clazz); + String sqlAnd = " and "; + for (String c : ruleMap.keySet()) { + if (oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)) { + sb.append(sqlAnd + getSqlRuleValue(ruleMap.get(c).getRuleValue())); + } + } + String name, column; + for (int i = 0; i < origDescriptors.length; i++) { + name = origDescriptors[i].getName(); + if (judgedIsUselessField(name)) { + continue; + } + if (ruleMap.containsKey(name)) { + column = ReflectHelper.getTableFieldName(clazz, name); + if (column == null) { + continue; + } + SysPermissionDataRuleModel dataRule = ruleMap.get(name); + QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); + Class propType = origDescriptors[i].getPropertyType(); + boolean isString = propType.equals(String.class); + Object value; + //update-begin---author:chenrui ---date:20240527 for:[TV360X-539]数据权限,配置日期等于条件时后端报转换错误------------ + if (isString || Date.class.equals(propType)) { + //update-end---author:chenrui ---date:20240527 for:[TV360X-539]数据权限,配置日期等于条件时后端报转换错误------------ + value = converRuleValue(dataRule.getRuleValue()); + } else { + value = NumberUtils.parseNumber(dataRule.getRuleValue(), propType); + } + String filedSql = SqlConcatUtil.getSingleSqlByRule(rule, oConvertUtils.camelToUnderline(column), value, isString); + sb.append(sqlAnd + filedSql); + } + } + log.info("query auth sql is:" + sb.toString()); + return sb.toString(); + } + + /** + * 根据权限相关配置 组装mp需要的权限 + * + * @param queryWrapper + * @param clazz + * @return + */ + public static void installAuthMplus(QueryWrapper queryWrapper, Class clazz) { + //权限查询 + Map ruleMap = getRuleMap(); + PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(clazz); + for (String c : ruleMap.keySet()) { + if (oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)) { + queryWrapper.and(i -> i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue()))); + } + } + String name, column; + for (int i = 0; i < origDescriptors.length; i++) { + name = origDescriptors[i].getName(); + if (judgedIsUselessField(name)) { + continue; + } + column = ReflectHelper.getTableFieldName(clazz, name); + if (column == null) { + continue; + } + if (ruleMap.containsKey(name)) { + addRuleToQueryWrapper(ruleMap.get(name), column, origDescriptors[i].getPropertyType(), queryWrapper); + } + } + } + + /** + * 转换sql中的系统变量 + * + * @param sql + * @return + */ + public static String convertSystemVariables(String sql) { + return getSqlRuleValue(sql); + } + + /** + * 获取系统数据库类型 + */ + private static String getDbType() { + return CommonUtils.getDatabaseType(); + } + + /** + * mysql 模糊查询之特殊字符下划线 (_、\) + * + * @param value: + * @Return: java.lang.String + */ + private static String specialStrConvert(String value) { + if (DataBaseConstant.DB_TYPE_MYSQL.equals(getDbType()) || DataBaseConstant.DB_TYPE_MARIADB.equals(getDbType())) { + String[] specialStr = QueryGenerator.LIKE_MYSQL_SPECIAL_STRS.split(","); + for (String str : specialStr) { + if (value.indexOf(str) != -1) { + value = value.replace(str, "\\" + str); + } + } + } + return value; + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryRuleEnum.java b/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryRuleEnum.java index c89de71..abf2829 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryRuleEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryRuleEnum.java @@ -4,73 +4,124 @@ import org.jeecg.common.util.oConvertUtils; /** * Query 规则 常量 + * * @Author Scott * @Date 2019年02月14日 */ public enum QueryRuleEnum { - /**查询规则 大于*/ - GT(">","gt","大于"), - /**查询规则 大于等于*/ - GE(">=","ge","大于等于"), - /**查询规则 小于*/ - LT("<","lt","小于"), - /**查询规则 小于等于*/ - LE("<=","le","小于等于"), - /**查询规则 等于*/ - EQ("=","eq","等于"), - /**查询规则 不等于*/ - NE("!=","ne","不等于"), - /**查询规则 包含*/ - IN("IN","in","包含"), - /**查询规则 全模糊*/ - LIKE("LIKE","like","全模糊"), - /**查询规则 不模糊包含*/ - NOT_LIKE("NOT_LIKE","not_like","不模糊包含"), - /**查询规则 左模糊*/ - LEFT_LIKE("LEFT_LIKE","left_like","左模糊"), - /**查询规则 右模糊*/ - RIGHT_LIKE("RIGHT_LIKE","right_like","右模糊"), - /**查询规则 带加号等于*/ - EQ_WITH_ADD("EQWITHADD","eq_with_add","带加号等于"), - /**查询规则 多词模糊匹配(and)*/ - LIKE_WITH_AND("LIKEWITHAND","like_with_and","多词模糊匹配————暂时未用上"), - /**查询规则 多词模糊匹配(or)*/ - LIKE_WITH_OR("LIKEWITHOR","like_with_or","多词模糊匹配(or)"), - /**查询规则 自定义SQL片段*/ - SQL_RULES("USE_SQL_RULES","ext","自定义SQL片段"), + /** + * 查询规则 大于 + */ + GT(">", "gt", "大于"), + /** + * 查询规则 大于等于 + */ + GE(">=", "ge", "大于等于"), + /** + * 查询规则 小于 + */ + LT("<", "lt", "小于"), + /** + * 查询规则 小于等于 + */ + LE("<=", "le", "小于等于"), + /** + * 查询规则 等于 + */ + EQ("=", "eq", "等于"), + /** + * 查询规则 不等于 + */ + NE("!=", "ne", "不等于"), + /** + * 查询规则 包含 + */ + IN("IN", "in", "包含"), + /** + * 查询规则 全模糊 + */ + LIKE("LIKE", "like", "全模糊"), + /** + * 查询规则 不模糊包含 + */ + NOT_LIKE("NOT_LIKE", "not_like", "不模糊包含"), + /** + * 查询规则 左模糊 + */ + LEFT_LIKE("LEFT_LIKE", "left_like", "左模糊"), + /** + * 查询规则 右模糊 + */ + RIGHT_LIKE("RIGHT_LIKE", "right_like", "右模糊"), + /** + * 查询规则 带加号等于 + */ + EQ_WITH_ADD("EQWITHADD", "eq_with_add", "带加号等于"), + /** + * 查询规则 多词模糊匹配(and) + */ + LIKE_WITH_AND("LIKEWITHAND", "like_with_and", "多词模糊匹配————暂时未用上"), + /** + * 查询规则 多词模糊匹配(or) + */ + LIKE_WITH_OR("LIKEWITHOR", "like_with_or", "多词模糊匹配(or)"), + /** + * 查询规则 自定义SQL片段 + */ + SQL_RULES("USE_SQL_RULES", "ext", "自定义SQL片段"), - /** 查询工作表 */ - LINKAGE("LINKAGE","linkage","查询工作表"), + /** + * 查询工作表 + */ + LINKAGE("LINKAGE", "linkage", "查询工作表"), // ------- 当前表单设计器内专用 ------- - /**查询规则 不以…结尾*/ - NOT_LEFT_LIKE("NOT_LEFT_LIKE","not_left_like","不以…结尾"), - /**查询规则 不以…开头*/ - NOT_RIGHT_LIKE("NOT_RIGHT_LIKE","not_right_like","不以…开头"), - /** 值为空 */ - EMPTY("EMPTY","empty","值为空"), - /** 值不为空 */ - NOT_EMPTY("NOT_EMPTY","not_empty","值不为空"), - /**查询规则 不包含*/ - NOT_IN("NOT_IN","not_in","不包含"), - /**查询规则 多词匹配*/ - ELE_MATCH("ELE_MATCH","elemMatch","多词匹配"), - /**查询规则 范围查询*/ - RANGE("RANGE","range","范围查询"), - /**查询规则 不在范围内查询*/ - NOT_RANGE("NOT_RANGE","not_range","不在范围查询"), - /** 自定义mongodb查询语句 */ - CUSTOM_MONGODB("CUSTOM_MONGODB","custom_mongodb","自定义mongodb查询语句"); + /** + * 查询规则 不以…结尾 + */ + NOT_LEFT_LIKE("NOT_LEFT_LIKE", "not_left_like", "不以…结尾"), + /** + * 查询规则 不以…开头 + */ + NOT_RIGHT_LIKE("NOT_RIGHT_LIKE", "not_right_like", "不以…开头"), + /** + * 值为空 + */ + EMPTY("EMPTY", "empty", "值为空"), + /** + * 值不为空 + */ + NOT_EMPTY("NOT_EMPTY", "not_empty", "值不为空"), + /** + * 查询规则 不包含 + */ + NOT_IN("NOT_IN", "not_in", "不包含"), + /** + * 查询规则 多词匹配 + */ + ELE_MATCH("ELE_MATCH", "elemMatch", "多词匹配"), + /** + * 查询规则 范围查询 + */ + RANGE("RANGE", "range", "范围查询"), + /** + * 查询规则 不在范围内查询 + */ + NOT_RANGE("NOT_RANGE", "not_range", "不在范围查询"), + /** + * 自定义mongodb查询语句 + */ + CUSTOM_MONGODB("CUSTOM_MONGODB", "custom_mongodb", "自定义mongodb查询语句"); // ------- 当前表单设计器内专用 ------- private String value; - - private String condition; + + private String condition; private String msg; - QueryRuleEnum(String value, String condition, String msg){ + QueryRuleEnum(String value, String condition, String msg) { this.value = value; this.condition = condition; this.msg = msg; @@ -93,22 +144,22 @@ public enum QueryRuleEnum { } public String getCondition() { - return condition; - } + return condition; + } - public void setCondition(String condition) { - this.condition = condition; - } + public void setCondition(String condition) { + this.condition = condition; + } - public static QueryRuleEnum getByValue(String value){ - if(oConvertUtils.isEmpty(value)) { - return null; - } - for(QueryRuleEnum val :values()){ - if (val.getValue().equals(value) || val.getCondition().equalsIgnoreCase(value)){ + public static QueryRuleEnum getByValue(String value) { + if (oConvertUtils.isEmpty(value)) { + return null; + } + for (QueryRuleEnum val : values()) { + if (val.getValue().equals(value) || val.getCondition().equalsIgnoreCase(value)) { return val; } } - return null; + return null; } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/util/JeecgDataAutorUtils.java b/physical-base-core/src/main/java/org/jeecg/common/system/util/JeecgDataAutorUtils.java index 66e48cc..30e02e8 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/util/JeecgDataAutorUtils.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/util/JeecgDataAutorUtils.java @@ -1,11 +1,11 @@ package org.jeecg.common.system.util; +import jakarta.servlet.http.HttpServletRequest; import org.jeecg.common.system.vo.SysPermissionDataRuleModel; import org.jeecg.common.system.vo.SysUserCacheInfo; import org.jeecg.common.util.SpringContextUtils; import org.springframework.util.StringUtils; -import jakarta.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; @@ -14,93 +14,95 @@ import java.util.List; * @Description: 数据权限查询规则容器工具类 * @Author: 张代浩 * @Date: 2012-12-15 下午11:27:39 - * */ public class JeecgDataAutorUtils { - - public static final String MENU_DATA_AUTHOR_RULES = "MENU_DATA_AUTHOR_RULES"; - - public static final String MENU_DATA_AUTHOR_RULE_SQL = "MENU_DATA_AUTHOR_RULE_SQL"; - - public static final String SYS_USER_INFO = "SYS_USER_INFO"; - /** - * 往链接请求里面,传入数据查询条件 - * - * @param request - * @param dataRules - */ - public static synchronized void installDataSearchConditon(HttpServletRequest request, List dataRules) { - @SuppressWarnings("unchecked") + public static final String MENU_DATA_AUTHOR_RULES = "MENU_DATA_AUTHOR_RULES"; + + public static final String MENU_DATA_AUTHOR_RULE_SQL = "MENU_DATA_AUTHOR_RULE_SQL"; + + public static final String SYS_USER_INFO = "SYS_USER_INFO"; + + /** + * 往链接请求里面,传入数据查询条件 + * + * @param request + * @param dataRules + */ + public static synchronized void installDataSearchConditon(HttpServletRequest request, List dataRules) { + @SuppressWarnings("unchecked") // 1.先从request获取MENU_DATA_AUTHOR_RULES,如果存则获取到LIST - List list = (List)loadDataSearchConditon(); - if (list==null) { - // 2.如果不存在,则new一个list - list = new ArrayList(); - } - for (SysPermissionDataRuleModel tsDataRule : dataRules) { - list.add(tsDataRule); - } + List list = (List) loadDataSearchConditon(); + if (list == null) { + // 2.如果不存在,则new一个list + list = new ArrayList(); + } + for (SysPermissionDataRuleModel tsDataRule : dataRules) { + list.add(tsDataRule); + } // 3.往list里面增量存指 - request.setAttribute(MENU_DATA_AUTHOR_RULES, list); - } + request.setAttribute(MENU_DATA_AUTHOR_RULES, list); + } - /** - * 获取请求对应的数据权限规则 - * - * @return - */ - @SuppressWarnings("unchecked") - public static synchronized List loadDataSearchConditon() { - return (List) SpringContextUtils.getHttpServletRequest().getAttribute(MENU_DATA_AUTHOR_RULES); - - } + /** + * 获取请求对应的数据权限规则 + * + * @return + */ + @SuppressWarnings("unchecked") + public static synchronized List loadDataSearchConditon() { + return (List) SpringContextUtils.getHttpServletRequest().getAttribute(MENU_DATA_AUTHOR_RULES); - /** - * 获取请求对应的数据权限SQL - * - * @return - */ - public static synchronized String loadDataSearchConditonSqlString() { - return (String) SpringContextUtils.getHttpServletRequest().getAttribute(MENU_DATA_AUTHOR_RULE_SQL); - } + } - /** - * 往链接请求里面,传入数据查询条件 - * - * @param request - * @param sql - */ - public static synchronized void installDataSearchConditon(HttpServletRequest request, String sql) { - String ruleSql = (String) loadDataSearchConditonSqlString(); - if (!StringUtils.hasText(ruleSql)) { - request.setAttribute(MENU_DATA_AUTHOR_RULE_SQL,sql); - } - } + /** + * 获取请求对应的数据权限SQL + * + * @return + */ + public static synchronized String loadDataSearchConditonSqlString() { + return (String) SpringContextUtils.getHttpServletRequest().getAttribute(MENU_DATA_AUTHOR_RULE_SQL); + } - /** - * 将用户信息存到request - * @param request - * @param userinfo - */ - public static synchronized void installUserInfo(HttpServletRequest request, SysUserCacheInfo userinfo) { - request.setAttribute(SYS_USER_INFO, userinfo); - } + /** + * 往链接请求里面,传入数据查询条件 + * + * @param request + * @param sql + */ + public static synchronized void installDataSearchConditon(HttpServletRequest request, String sql) { + String ruleSql = (String) loadDataSearchConditonSqlString(); + if (!StringUtils.hasText(ruleSql)) { + request.setAttribute(MENU_DATA_AUTHOR_RULE_SQL, sql); + } + } - /** - * 将用户信息存到request - * @param userinfo - */ - public static synchronized void installUserInfo(SysUserCacheInfo userinfo) { - SpringContextUtils.getHttpServletRequest().setAttribute(SYS_USER_INFO, userinfo); - } + /** + * 将用户信息存到request + * + * @param request + * @param userinfo + */ + public static synchronized void installUserInfo(HttpServletRequest request, SysUserCacheInfo userinfo) { + request.setAttribute(SYS_USER_INFO, userinfo); + } - /** - * 从request获取用户信息 - * @return - */ - public static synchronized SysUserCacheInfo loadUserInfo() { - return (SysUserCacheInfo) SpringContextUtils.getHttpServletRequest().getAttribute(SYS_USER_INFO); - - } + /** + * 将用户信息存到request + * + * @param userinfo + */ + public static synchronized void installUserInfo(SysUserCacheInfo userinfo) { + SpringContextUtils.getHttpServletRequest().setAttribute(SYS_USER_INFO, userinfo); + } + + /** + * 从request获取用户信息 + * + * @return + */ + public static synchronized SysUserCacheInfo loadUserInfo() { + return (SysUserCacheInfo) SpringContextUtils.getHttpServletRequest().getAttribute(SYS_USER_INFO); + + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/util/JwtUtil.java b/physical-base-core/src/main/java/org/jeecg/common/system/util/JwtUtil.java index 3c28cab..9197565 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/util/JwtUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/util/JwtUtil.java @@ -7,15 +7,10 @@ import com.auth0.jwt.exceptions.JWTDecodeException; import com.auth0.jwt.interfaces.DecodedJWT; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Joiner; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.Date; import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; - import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; @@ -30,6 +25,10 @@ import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.oConvertUtils; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Date; + /** * @Author Scott * @Date 2018-07-12 14:23 @@ -38,27 +37,28 @@ import org.jeecg.common.util.oConvertUtils; @Slf4j public class JwtUtil { - /**Token有效期为7天(Token在reids中缓存时间为两倍)*/ - public static final long EXPIRE_TIME = (7 * 12) * 60 * 60 * 1000; - static final String WELL_NUMBER = SymbolConstant.WELL_NUMBER + SymbolConstant.LEFT_CURLY_BRACKET; + /** + * Token有效期为7天(Token在reids中缓存时间为两倍) + */ + public static final long EXPIRE_TIME = (7 * 12) * 60 * 60 * 1000; + static final String WELL_NUMBER = SymbolConstant.WELL_NUMBER + SymbolConstant.LEFT_CURLY_BRACKET; /** - * * @param response * @param code * @param errorMsg */ public static void responseError(ServletResponse response, Integer code, String errorMsg) { - HttpServletResponse httpServletResponse = (HttpServletResponse) response; - // issues/I4YH95浏览器显示乱码问题 - httpServletResponse.setHeader("Content-type", "text/html;charset=UTF-8"); + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + // issues/I4YH95浏览器显示乱码问题 + httpServletResponse.setHeader("Content-type", "text/html;charset=UTF-8"); Result jsonResult = new Result(code, errorMsg); - jsonResult.setSuccess(false); + jsonResult.setSuccess(false); OutputStream os = null; try { os = httpServletResponse.getOutputStream(); - httpServletResponse.setCharacterEncoding("UTF-8"); - httpServletResponse.setStatus(code); + httpServletResponse.setCharacterEncoding("UTF-8"); + httpServletResponse.setStatus(code); os.write(new ObjectMapper().writeValueAsString(jsonResult).getBytes("UTF-8")); os.flush(); os.close(); @@ -67,233 +67,239 @@ public class JwtUtil { } } - /** - * 校验token是否正确 - * - * @param token 密钥 - * @param secret 用户的密码 - * @return 是否正确 - */ - public static boolean verify(String token, String username, String secret) { - try { - // 根据密码生成JWT效验器 - Algorithm algorithm = Algorithm.HMAC256(secret); - JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build(); - // 效验TOKEN - DecodedJWT jwt = verifier.verify(token); - return true; - } catch (Exception exception) { - return false; - } - } + /** + * 校验token是否正确 + * + * @param token 密钥 + * @param secret 用户的密码 + * @return 是否正确 + */ + public static boolean verify(String token, String username, String secret) { + try { + // 根据密码生成JWT效验器 + Algorithm algorithm = Algorithm.HMAC256(secret); + JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build(); + // 效验TOKEN + DecodedJWT jwt = verifier.verify(token); + return true; + } catch (Exception exception) { + return false; + } + } - /** - * 获得token中的信息无需secret解密也能获得 - * - * @return token中包含的用户名 - */ - public static String getUsername(String token) { - try { - DecodedJWT jwt = JWT.decode(token); - return jwt.getClaim("username").asString(); - } catch (JWTDecodeException e) { - return null; - } - } + /** + * 获得token中的信息无需secret解密也能获得 + * + * @return token中包含的用户名 + */ + public static String getUsername(String token) { + try { + DecodedJWT jwt = JWT.decode(token); + return jwt.getClaim("username").asString(); + } catch (JWTDecodeException e) { + return null; + } + } - /** - * 生成签名,5min后过期 - * - * @param username 用户名 - * @param secret 用户的密码 - * @return 加密的token - */ - public static String sign(String username, String secret) { - Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); - Algorithm algorithm = Algorithm.HMAC256(secret); - // 附带username信息 - return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm); + /** + * 生成签名,5min后过期 + * + * @param username 用户名 + * @param secret 用户的密码 + * @return 加密的token + */ + public static String sign(String username, String secret) { + Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); + Algorithm algorithm = Algorithm.HMAC256(secret); + // 附带username信息 + return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm); - } + } - /** - * 根据request中的token获取用户账号 - * - * @param request - * @return - * @throws JeecgBootException - */ - public static String getUserNameByToken(HttpServletRequest request) throws JeecgBootException { - String accessToken = request.getHeader("X-Access-Token"); - String username = getUsername(accessToken); - if (oConvertUtils.isEmpty(username)) { - throw new JeecgBootException("未获取到用户"); - } - return username; - } - - /** - * 从session中获取变量 - * @param key - * @return - */ - public static String getSessionData(String key) { - //${myVar}% - //得到${} 后面的值 - String moshi = ""; - String wellNumber = WELL_NUMBER; + /** + * 根据request中的token获取用户账号 + * + * @param request + * @return + * @throws JeecgBootException + */ + public static String getUserNameByToken(HttpServletRequest request) throws JeecgBootException { + String accessToken = request.getHeader("X-Access-Token"); + String username = getUsername(accessToken); + if (oConvertUtils.isEmpty(username)) { + throw new JeecgBootException("未获取到用户"); + } + return username; + } - if(key.indexOf(SymbolConstant.RIGHT_CURLY_BRACKET)!=-1){ - moshi = key.substring(key.indexOf("}")+1); - } - String returnValue = null; - if (key.contains(wellNumber)) { - key = key.substring(2,key.indexOf("}")); - } - if (oConvertUtils.isNotEmpty(key)) { - HttpSession session = SpringContextUtils.getHttpServletRequest().getSession(); - returnValue = (String) session.getAttribute(key); - } - //结果加上${} 后面的值 - if(returnValue!=null){returnValue = returnValue + moshi;} - return returnValue; - } - - /** - * 从当前用户中获取变量 - * @param key - * @param user - * @return - */ - public static String getUserSystemData(String key, SysUserCacheInfo user) { - //1.优先获取 SysUserCacheInfo - if(user==null) { - try { - user = JeecgDataAutorUtils.loadUserInfo(); - } catch (Exception e) { - log.warn("获取用户信息异常:" + e.getMessage()); - } - } - //2.通过shiro获取登录用户信息 - LoginUser sysUser = null; - try { - sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - } catch (Exception e) { - log.warn("SecurityUtils.getSubject() 获取用户信息异常:" + e.getMessage()); - } - - //#{sys_user_code}% - String moshi = ""; + /** + * 从session中获取变量 + * + * @param key + * @return + */ + public static String getSessionData(String key) { + //${myVar}% + //得到${} 后面的值 + String moshi = ""; String wellNumber = WELL_NUMBER; - if(key.indexOf(SymbolConstant.RIGHT_CURLY_BRACKET)!=-1){ - moshi = key.substring(key.indexOf("}")+1); - } - String returnValue = null; - //针对特殊标示处理#{sysOrgCode},判断替换 - if (key.contains(wellNumber)) { - key = key.substring(2,key.indexOf("}")); - } else { - key = key; - } - //替换为当前系统时间(年月日) - if (key.equals(DataBaseConstant.SYS_DATE)|| key.toLowerCase().equals(DataBaseConstant.SYS_DATE_TABLE)) { - returnValue = DateUtils.formatDate(); - } - //替换为当前系统时间(年月日时分秒) - else if (key.equals(DataBaseConstant.SYS_TIME)|| key.toLowerCase().equals(DataBaseConstant.SYS_TIME_TABLE)) { - returnValue = DateUtils.now(); - } - //流程状态默认值(默认未发起) - else if (key.equals(DataBaseConstant.BPM_STATUS)|| key.toLowerCase().equals(DataBaseConstant.BPM_STATUS_TABLE)) { - returnValue = "1"; - } - //后台任务获取用户信息异常,导致程序中断 - if(sysUser==null && user==null){ - return null; - } - - //替换为系统登录用户帐号 - if (key.equals(DataBaseConstant.SYS_USER_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_USER_CODE_TABLE)) { - if(user==null) { - returnValue = sysUser.getUsername(); - }else { - returnValue = user.getSysUserCode(); - } - } + if (key.indexOf(SymbolConstant.RIGHT_CURLY_BRACKET) != -1) { + moshi = key.substring(key.indexOf("}") + 1); + } + String returnValue = null; + if (key.contains(wellNumber)) { + key = key.substring(2, key.indexOf("}")); + } + if (oConvertUtils.isNotEmpty(key)) { + HttpSession session = SpringContextUtils.getHttpServletRequest().getSession(); + returnValue = (String) session.getAttribute(key); + } + //结果加上${} 后面的值 + if (returnValue != null) { + returnValue = returnValue + moshi; + } + return returnValue; + } - // 替换为系统登录用户ID - else if (key.equals(DataBaseConstant.SYS_USER_ID) || key.equalsIgnoreCase(DataBaseConstant.SYS_USER_ID_TABLE)) { - if(user==null) { - returnValue = sysUser.getId(); - }else { - returnValue = user.getSysUserId(); - } - } + /** + * 从当前用户中获取变量 + * + * @param key + * @param user + * @return + */ + public static String getUserSystemData(String key, SysUserCacheInfo user) { + //1.优先获取 SysUserCacheInfo + if (user == null) { + try { + user = JeecgDataAutorUtils.loadUserInfo(); + } catch (Exception e) { + log.warn("获取用户信息异常:" + e.getMessage()); + } + } + //2.通过shiro获取登录用户信息 + LoginUser sysUser = null; + try { + sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + } catch (Exception e) { + log.warn("SecurityUtils.getSubject() 获取用户信息异常:" + e.getMessage()); + } - //替换为系统登录用户真实名字 - else if (key.equals(DataBaseConstant.SYS_USER_NAME)|| key.toLowerCase().equals(DataBaseConstant.SYS_USER_NAME_TABLE)) { - if(user==null) { - returnValue = sysUser.getRealname(); - }else { - returnValue = user.getSysUserName(); - } - } - - //替换为系统用户登录所使用的机构编码 - else if (key.equals(DataBaseConstant.SYS_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_ORG_CODE_TABLE)) { - if(user==null) { - returnValue = sysUser.getOrgCode(); - }else { - returnValue = user.getSysOrgCode(); - } - } + //#{sys_user_code}% + String moshi = ""; + String wellNumber = WELL_NUMBER; + if (key.indexOf(SymbolConstant.RIGHT_CURLY_BRACKET) != -1) { + moshi = key.substring(key.indexOf("}") + 1); + } + String returnValue = null; + //针对特殊标示处理#{sysOrgCode},判断替换 + if (key.contains(wellNumber)) { + key = key.substring(2, key.indexOf("}")); + } else { + key = key; + } + //替换为当前系统时间(年月日) + if (key.equals(DataBaseConstant.SYS_DATE) || key.toLowerCase().equals(DataBaseConstant.SYS_DATE_TABLE)) { + returnValue = DateUtils.formatDate(); + } + //替换为当前系统时间(年月日时分秒) + else if (key.equals(DataBaseConstant.SYS_TIME) || key.toLowerCase().equals(DataBaseConstant.SYS_TIME_TABLE)) { + returnValue = DateUtils.now(); + } + //流程状态默认值(默认未发起) + else if (key.equals(DataBaseConstant.BPM_STATUS) || key.toLowerCase().equals(DataBaseConstant.BPM_STATUS_TABLE)) { + returnValue = "1"; + } - // 替换为系统用户登录所使用的机构ID - else if (key.equals(DataBaseConstant.SYS_ORG_ID) || key.equalsIgnoreCase(DataBaseConstant.SYS_ORG_ID_TABLE)) { - if (user == null) { - returnValue = sysUser.getOrgId(); - } else { - returnValue = user.getSysOrgId(); - } - } + //后台任务获取用户信息异常,导致程序中断 + if (sysUser == null && user == null) { + return null; + } - //替换为系统用户所拥有的所有机构编码 - else if (key.equals(DataBaseConstant.SYS_MULTI_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_MULTI_ORG_CODE_TABLE)) { - if(user==null){ - //TODO 暂时使用用户登录部门,存在逻辑缺陷,不是用户所拥有的部门 - returnValue = sysUser.getOrgCode(); - }else{ - if(user.isOneDepart()) { - returnValue = user.getSysMultiOrgCode().get(0); - }else { - returnValue = Joiner.on(",").join(user.getSysMultiOrgCode()); - } - } - } + //替换为系统登录用户帐号 + if (key.equals(DataBaseConstant.SYS_USER_CODE) || key.toLowerCase().equals(DataBaseConstant.SYS_USER_CODE_TABLE)) { + if (user == null) { + returnValue = sysUser.getUsername(); + } else { + returnValue = user.getSysUserCode(); + } + } - // 替换为当前登录用户的角色code(多个逗号分割) - else if (key.equals(DataBaseConstant.SYS_ROLE_CODE) || key.equalsIgnoreCase(DataBaseConstant.SYS_ROLE_CODE_TABLE)) { - if (user == null) { - returnValue = sysUser.getRoleCode(); - } else { - returnValue = user.getSysRoleCode(); - } - } + // 替换为系统登录用户ID + else if (key.equals(DataBaseConstant.SYS_USER_ID) || key.equalsIgnoreCase(DataBaseConstant.SYS_USER_ID_TABLE)) { + if (user == null) { + returnValue = sysUser.getId(); + } else { + returnValue = user.getSysUserId(); + } + } + + //替换为系统登录用户真实名字 + else if (key.equals(DataBaseConstant.SYS_USER_NAME) || key.toLowerCase().equals(DataBaseConstant.SYS_USER_NAME_TABLE)) { + if (user == null) { + returnValue = sysUser.getRealname(); + } else { + returnValue = user.getSysUserName(); + } + } + + //替换为系统用户登录所使用的机构编码 + else if (key.equals(DataBaseConstant.SYS_ORG_CODE) || key.toLowerCase().equals(DataBaseConstant.SYS_ORG_CODE_TABLE)) { + if (user == null) { + returnValue = sysUser.getOrgCode(); + } else { + returnValue = user.getSysOrgCode(); + } + } + + // 替换为系统用户登录所使用的机构ID + else if (key.equals(DataBaseConstant.SYS_ORG_ID) || key.equalsIgnoreCase(DataBaseConstant.SYS_ORG_ID_TABLE)) { + if (user == null) { + returnValue = sysUser.getOrgId(); + } else { + returnValue = user.getSysOrgId(); + } + } + + //替换为系统用户所拥有的所有机构编码 + else if (key.equals(DataBaseConstant.SYS_MULTI_ORG_CODE) || key.toLowerCase().equals(DataBaseConstant.SYS_MULTI_ORG_CODE_TABLE)) { + if (user == null) { + //TODO 暂时使用用户登录部门,存在逻辑缺陷,不是用户所拥有的部门 + returnValue = sysUser.getOrgCode(); + } else { + if (user.isOneDepart()) { + returnValue = user.getSysMultiOrgCode().get(0); + } else { + returnValue = Joiner.on(",").join(user.getSysMultiOrgCode()); + } + } + } + + // 替换为当前登录用户的角色code(多个逗号分割) + else if (key.equals(DataBaseConstant.SYS_ROLE_CODE) || key.equalsIgnoreCase(DataBaseConstant.SYS_ROLE_CODE_TABLE)) { + if (user == null) { + returnValue = sysUser.getRoleCode(); + } else { + returnValue = user.getSysRoleCode(); + } + } + + //update-begin-author:taoyan date:20210330 for:多租户ID作为系统变量 + else if (key.equals(TenantConstant.TENANT_ID) || key.toLowerCase().equals(TenantConstant.TENANT_ID_TABLE)) { + try { + returnValue = SpringContextUtils.getHttpServletRequest().getHeader(CommonConstant.TENANT_ID); + } catch (Exception e) { + log.warn("获取系统租户异常:" + e.getMessage()); + } + } + //update-end-author:taoyan date:20210330 for:多租户ID作为系统变量 + if (returnValue != null) { + returnValue = returnValue + moshi; + } + return returnValue; + } - //update-begin-author:taoyan date:20210330 for:多租户ID作为系统变量 - else if (key.equals(TenantConstant.TENANT_ID) || key.toLowerCase().equals(TenantConstant.TENANT_ID_TABLE)){ - try { - returnValue = SpringContextUtils.getHttpServletRequest().getHeader(CommonConstant.TENANT_ID); - } catch (Exception e) { - log.warn("获取系统租户异常:" + e.getMessage()); - } - } - //update-end-author:taoyan date:20210330 for:多租户ID作为系统变量 - if(returnValue!=null){returnValue = returnValue + moshi;} - return returnValue; - } - // public static void main(String[] args) { // String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjUzMzY1MTMsInVzZXJuYW1lIjoiYWRtaW4ifQ.xjhud_tWCNYBOg_aRlMgOdlZoWFFKB_givNElHNw3X0"; // System.out.println(JwtUtil.getUsername(token)); diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/util/ResourceUtil.java b/physical-base-core/src/main/java/org/jeecg/common/system/util/ResourceUtil.java index b2805df..3271fe8 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/util/ResourceUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/util/ResourceUtil.java @@ -21,6 +21,7 @@ import java.util.Map; /** * 资源加载工具类 + * * @Author taoYan * @Date 2022/7/8 10:40 **/ @@ -36,13 +37,13 @@ public class ResourceUtil { /** * 所有java类 */ - private final static String CLASS_PATTERN="/**/*.class"; + private final static String CLASS_PATTERN = "/**/*.class"; /** * 所有枚举java类 */ - private final static String CLASS_ENUM_PATTERN="/**/*Enum.class"; + private final static String CLASS_ENUM_PATTERN = "/**/*Enum.class"; /** * 包路径 org.jeecg @@ -56,10 +57,11 @@ public class ResourceUtil { /** * 获取枚举类对应的字典数据 SysDictServiceImpl#queryAllDictItems() + * * @return */ - public static Map> getEnumDictData(){ - if(enumDictData.keySet().size()>0){ + public static Map> getEnumDictData() { + if (enumDictData.keySet().size() > 0) { return enumDictData; } ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); @@ -75,13 +77,13 @@ public class ResourceUtil { if (enumDict != null) { EnumDict annotation = clazz.getAnnotation(EnumDict.class); String key = annotation.value(); - if(oConvertUtils.isNotEmpty(key)){ + if (oConvertUtils.isNotEmpty(key)) { List list = (List) clazz.getDeclaredMethod(METHOD_NAME).invoke(null); enumDictData.put(key, list); } } } - }catch (Exception e){ + } catch (Exception e) { log.error("获取枚举类字典数据异常", e.getMessage()); // e.printStackTrace(); } @@ -90,24 +92,25 @@ public class ResourceUtil { /** * 用于后端字典翻译 SysDictServiceImpl#queryManyDictByKeys(java.util.List, java.util.List) + * * @param dictCodeList * @param keys * @return */ - public static Map> queryManyDictByKeys(List dictCodeList, List keys){ - if(enumDictData.keySet().size()==0){ + public static Map> queryManyDictByKeys(List dictCodeList, List keys) { + if (enumDictData.keySet().size() == 0) { getEnumDictData(); } Map> map = new HashMap<>(); for (String code : enumDictData.keySet()) { - if(dictCodeList.indexOf(code)>=0){ + if (dictCodeList.indexOf(code) >= 0) { List dictItemList = enumDictData.get(code); - for(DictModel dm: dictItemList){ + for (DictModel dm : dictItemList) { String value = dm.getValue(); - if(keys.indexOf(value)>=0){ + if (keys.indexOf(value) >= 0) { List list = new ArrayList<>(); list.add(new DictModel(value, dm.getText())); - map.put(code,list); + map.put(code, list); break; } } @@ -118,18 +121,18 @@ public class ResourceUtil { /** * 获取实现类 - * - * @param classPath + * + * @param classPath */ - public static Object getImplementationClass(String classPath){ + public static Object getImplementationClass(String classPath) { try { Class aClass = Class.forName(classPath); return SpringContextUtils.getBean(aClass); } catch (ClassNotFoundException e) { - log.error("类没有找到",e); + log.error("类没有找到", e); return null; - } catch (NoSuchBeanDefinitionException e){ - log.error(classPath + "没有实现",e); + } catch (NoSuchBeanDefinitionException e) { + log.error(classPath + "没有实现", e); return null; } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/util/SqlConcatUtil.java b/physical-base-core/src/main/java/org/jeecg/common/system/util/SqlConcatUtil.java index 9178144..8aef463 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/util/SqlConcatUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/util/SqlConcatUtil.java @@ -7,6 +7,7 @@ import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryRuleEnum; import org.jeecg.common.util.CommonUtils; import org.jeecg.common.util.oConvertUtils; + import java.util.ArrayList; import java.util.List; @@ -20,18 +21,20 @@ public class SqlConcatUtil { /** * 获取单个查询条件的值 + * * @param rule * @param field * @param value * @param isString * @return */ - public static String getSingleSqlByRule(QueryRuleEnum rule,String field,Object value,boolean isString) { + public static String getSingleSqlByRule(QueryRuleEnum rule, String field, Object value, boolean isString) { return getSingleSqlByRule(rule, field, value, isString, null); } - + /** * 报表获取查询条件 支持多数据源 + * * @param field * @param alias * @param value @@ -39,17 +42,18 @@ public class SqlConcatUtil { * @param dataBaseType * @return */ - public static String getSingleQueryConditionSql(String field,String alias,Object value,boolean isString, String dataBaseType) { + public static String getSingleQueryConditionSql(String field, String alias, Object value, boolean isString, String dataBaseType) { if (value == null) { return ""; } - field = alias+oConvertUtils.camelToUnderline(field); + field = alias + oConvertUtils.camelToUnderline(field); QueryRuleEnum rule = QueryGenerator.convert2Rule(value); return getSingleSqlByRule(rule, field, value, isString, dataBaseType); } /** * 获取单个查询条件的值 + * * @param rule * @param field * @param value @@ -57,44 +61,44 @@ public class SqlConcatUtil { * @param dataBaseType * @return */ - private static String getSingleSqlByRule(QueryRuleEnum rule,String field,Object value,boolean isString, String dataBaseType) { + private static String getSingleSqlByRule(QueryRuleEnum rule, String field, Object value, boolean isString, String dataBaseType) { String res = ""; switch (rule) { case GT: - res =field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + res = field + rule.getValue() + getFieldConditionValue(value, isString, dataBaseType); break; case GE: - res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + res = field + rule.getValue() + getFieldConditionValue(value, isString, dataBaseType); break; case LT: - res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + res = field + rule.getValue() + getFieldConditionValue(value, isString, dataBaseType); break; case LE: - res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + res = field + rule.getValue() + getFieldConditionValue(value, isString, dataBaseType); break; case EQ: - res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + res = field + rule.getValue() + getFieldConditionValue(value, isString, dataBaseType); break; case EQ_WITH_ADD: - res = field+" = "+getFieldConditionValue(value, isString, dataBaseType); + res = field + " = " + getFieldConditionValue(value, isString, dataBaseType); break; case NE: - res = field+" <> "+getFieldConditionValue(value, isString, dataBaseType); + res = field + " <> " + getFieldConditionValue(value, isString, dataBaseType); break; case IN: - res = field + " in "+getInConditionValue(value, isString); + res = field + " in " + getInConditionValue(value, isString); break; case LIKE: - res = field + " like "+getLikeConditionValue(value, QueryRuleEnum.LIKE); + res = field + " like " + getLikeConditionValue(value, QueryRuleEnum.LIKE); break; case LEFT_LIKE: - res = field + " like "+getLikeConditionValue(value, QueryRuleEnum.LEFT_LIKE); + res = field + " like " + getLikeConditionValue(value, QueryRuleEnum.LEFT_LIKE); break; case RIGHT_LIKE: - res = field + " like "+getLikeConditionValue(value, QueryRuleEnum.RIGHT_LIKE); + res = field + " like " + getLikeConditionValue(value, QueryRuleEnum.RIGHT_LIKE); break; default: - res = field+" = "+getFieldConditionValue(value, isString, dataBaseType); + res = field + " = " + getFieldConditionValue(value, isString, dataBaseType); break; } return res; @@ -102,62 +106,63 @@ public class SqlConcatUtil { /** * 获取查询条件的值 + * * @param value * @param isString * @param dataBaseType * @return */ - private static String getFieldConditionValue(Object value,boolean isString, String dataBaseType) { + private static String getFieldConditionValue(Object value, boolean isString, String dataBaseType) { String str = value.toString().trim(); - if(str.startsWith(SymbolConstant.EXCLAMATORY_MARK)) { + if (str.startsWith(SymbolConstant.EXCLAMATORY_MARK)) { str = str.substring(1); - }else if(str.startsWith(QueryRuleEnum.GE.getValue())) { + } else if (str.startsWith(QueryRuleEnum.GE.getValue())) { str = str.substring(2); - }else if(str.startsWith(QueryRuleEnum.LE.getValue())) { + } else if (str.startsWith(QueryRuleEnum.LE.getValue())) { str = str.substring(2); - }else if(str.startsWith(QueryRuleEnum.GT.getValue())) { + } else if (str.startsWith(QueryRuleEnum.GT.getValue())) { str = str.substring(1); - }else if(str.startsWith(QueryRuleEnum.LT.getValue())) { + } else if (str.startsWith(QueryRuleEnum.LT.getValue())) { str = str.substring(1); - }else if(str.indexOf(QueryGenerator.QUERY_COMMA_ESCAPE)>0) { + } else if (str.indexOf(QueryGenerator.QUERY_COMMA_ESCAPE) > 0) { str = str.replaceAll("\\+\\+", SymbolConstant.COMMA); } - if(dataBaseType==null){ + if (dataBaseType == null) { dataBaseType = getDbType(); } - if(isString) { - if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(dataBaseType)){ - return " N'"+str+"' "; - }else{ - return " '"+str+"' "; + if (isString) { + if (DataBaseConstant.DB_TYPE_SQLSERVER.equals(dataBaseType)) { + return " N'" + str + "' "; + } else { + return " '" + str + "' "; } - }else { + } else { // 如果不是字符串 有一种特殊情况 popup调用都走这个逻辑 参数传递的可能是“‘admin’”这种格式的 - if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(dataBaseType) && str.endsWith(SymbolConstant.SINGLE_QUOTATION_MARK) && str.startsWith(SymbolConstant.SINGLE_QUOTATION_MARK)){ - return " N"+str; + if (DataBaseConstant.DB_TYPE_SQLSERVER.equals(dataBaseType) && str.endsWith(SymbolConstant.SINGLE_QUOTATION_MARK) && str.startsWith(SymbolConstant.SINGLE_QUOTATION_MARK)) { + return " N" + str; } return value.toString(); } } - private static String getInConditionValue(Object value,boolean isString) { + private static String getInConditionValue(Object value, boolean isString) { //update-begin-author:taoyan date:20210628 for: 查询条件如果输入,导致sql报错 String[] temp = value.toString().split(","); - if(temp.length==0){ + if (temp.length == 0) { return "('')"; } - if(isString) { + if (isString) { List res = new ArrayList<>(); for (String string : temp) { - if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ - res.add("N'"+string+"'"); - }else{ - res.add("'"+string+"'"); + if (DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())) { + res.add("N'" + string + "'"); + } else { + res.add("'" + string + "'"); } } - return "("+String.join("," ,res)+")"; - }else { - return "("+value.toString()+")"; + return "(" + String.join(",", res) + ")"; + } else { + return "(" + value.toString() + ")"; } //update-end-author:taoyan date:20210628 for: 查询条件如果输入,导致sql报错 } @@ -165,46 +170,47 @@ public class SqlConcatUtil { /** * 先根据值判断 走左模糊还是右模糊 * 最后如果值不带任何标识(*或者%),则再根据ruleEnum判断 + * * @param value * @param ruleEnum * @return */ private static String getLikeConditionValue(Object value, QueryRuleEnum ruleEnum) { String str = value.toString().trim(); - if(str.startsWith(SymbolConstant.ASTERISK) && str.endsWith(SymbolConstant.ASTERISK)) { - if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ - return "N'%"+str.substring(1,str.length()-1)+"%'"; - }else{ - return "'%"+str.substring(1,str.length()-1)+"%'"; + if (str.startsWith(SymbolConstant.ASTERISK) && str.endsWith(SymbolConstant.ASTERISK)) { + if (DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())) { + return "N'%" + str.substring(1, str.length() - 1) + "%'"; + } else { + return "'%" + str.substring(1, str.length() - 1) + "%'"; } - }else if(str.startsWith(SymbolConstant.ASTERISK)) { - if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ - return "N'%"+str.substring(1)+"'"; - }else{ - return "'%"+str.substring(1)+"'"; + } else if (str.startsWith(SymbolConstant.ASTERISK)) { + if (DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())) { + return "N'%" + str.substring(1) + "'"; + } else { + return "'%" + str.substring(1) + "'"; } - }else if(str.endsWith(SymbolConstant.ASTERISK)) { - if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ - return "N'"+str.substring(0,str.length()-1)+"%'"; - }else{ - return "'"+str.substring(0,str.length()-1)+"%'"; + } else if (str.endsWith(SymbolConstant.ASTERISK)) { + if (DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())) { + return "N'" + str.substring(0, str.length() - 1) + "%'"; + } else { + return "'" + str.substring(0, str.length() - 1) + "%'"; } - }else { - if(str.indexOf(SymbolConstant.PERCENT_SIGN)>=0) { - if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ - if(str.startsWith(SymbolConstant.SINGLE_QUOTATION_MARK) && str.endsWith(SymbolConstant.SINGLE_QUOTATION_MARK)){ - return "N"+str; - }else{ - return "N"+"'"+str+"'"; + } else { + if (str.indexOf(SymbolConstant.PERCENT_SIGN) >= 0) { + if (DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())) { + if (str.startsWith(SymbolConstant.SINGLE_QUOTATION_MARK) && str.endsWith(SymbolConstant.SINGLE_QUOTATION_MARK)) { + return "N" + str; + } else { + return "N" + "'" + str + "'"; } - }else{ - if(str.startsWith(SymbolConstant.SINGLE_QUOTATION_MARK) && str.endsWith(SymbolConstant.SINGLE_QUOTATION_MARK)){ + } else { + if (str.startsWith(SymbolConstant.SINGLE_QUOTATION_MARK) && str.endsWith(SymbolConstant.SINGLE_QUOTATION_MARK)) { return str; - }else{ - return "'"+str+"'"; + } else { + return "'" + str + "'"; } } - }else { + } else { //update-begin-author:taoyan date:2022-6-30 for: issues/3810 数据权限规则问题 // 走到这里说明 value不带有任何模糊查询的标识(*或者%) @@ -239,5 +245,5 @@ public class SqlConcatUtil { private static String getDbType() { return CommonUtils.getDatabaseType(); } - + } diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/ComboModel.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/ComboModel.java index 663cdb9..1ddfd67 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/ComboModel.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/ComboModel.java @@ -18,23 +18,35 @@ import java.io.Serializable; public class ComboModel implements Serializable { private String id; private String title; - /**文档管理 表单table默认选中*/ + /** + * 文档管理 表单table默认选中 + */ private boolean checked; - /**文档管理 表单table 用户账号*/ + /** + * 文档管理 表单table 用户账号 + */ private String username; - /**文档管理 表单table 用户邮箱*/ + /** + * 文档管理 表单table 用户邮箱 + */ private String email; - /**文档管理 表单table 角色编码*/ + /** + * 文档管理 表单table 角色编码 + */ private String roleCode; - public ComboModel(){ + public ComboModel() { - }; + } - public ComboModel(String id,String title,boolean checked,String username){ + ; + + public ComboModel(String id, String title, boolean checked, String username) { this.id = id; this.title = title; this.checked = false; this.username = username; - }; + } + + ; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictModel.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictModel.java index d31fc09..ca8b493 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictModel.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictModel.java @@ -1,14 +1,13 @@ package org.jeecg.common.system.vo; -import java.io.Serializable; - import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.io.Serializable; + /** * @Description: 字典类 * @author: jeecg-boot @@ -17,55 +16,57 @@ import lombok.experimental.Accessors; @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @JsonIgnoreProperties(ignoreUnknown = true) -public class DictModel implements Serializable{ - private static final long serialVersionUID = 1L; +public class DictModel implements Serializable { + private static final long serialVersionUID = 1L; - public DictModel() { - } - - public DictModel(String value, String text) { - this.value = value; - this.text = text; - } + public DictModel() { + } - public DictModel(String value, String text, String color) { - this.value = value; - this.text = text; - this.color = color; - } + public DictModel(String value, String text) { + this.value = value; + this.text = text; + } - /** - * 字典value - */ - private String value; - /** - * 字典文本 - */ - private String text; - /** - * 字典颜色 - */ - private String color; + public DictModel(String value, String text, String color) { + this.value = value; + this.text = text; + this.color = color; + } - /** - * 特殊用途: JgEditableTable - * @return - */ - public String getTitle() { - return this.text; - } - /** - * 特殊用途: vue3 Select组件 - */ - public String getLabel() { - return this.text; - } + /** + * 字典value + */ + private String value; + /** + * 字典文本 + */ + private String text; + /** + * 字典颜色 + */ + private String color; + + /** + * 特殊用途: JgEditableTable + * + * @return + */ + public String getTitle() { + return this.text; + } + + /** + * 特殊用途: vue3 Select组件 + */ + public String getLabel() { + return this.text; + } - /** - * 用于表单设计器 关联记录表数据存储 - * QQYUN-5595【表单设计器】他表字段 导入没有翻译 - */ - private JSONObject jsonObject; + /** + * 用于表单设计器 关联记录表数据存储 + * QQYUN-5595【表单设计器】他表字段 导入没有翻译 + */ + private JSONObject jsonObject; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictModelMany.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictModelMany.java index cc6a34f..ff4789c 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictModelMany.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictModelMany.java @@ -5,6 +5,7 @@ import lombok.EqualsAndHashCode; /** * 查询多个字典时用到 + * * @author: jeecg-boot */ @Data diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictQuery.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictQuery.java index b24ede8..5f4f975 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictQuery.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/DictQuery.java @@ -4,6 +4,7 @@ import lombok.Data; /** * 字典查询参数实体 + * * @author: jeecg-boot */ @Data diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/LoginUser.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/LoginUser.java index 32d4b49..f95d31a 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/LoginUser.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/LoginUser.java @@ -22,120 +22,124 @@ import java.util.Date; @Accessors(chain = true) public class LoginUser { - /** - * 登录人id - */ - @SensitiveField - private String id; + /** + * 登录人id + */ + @SensitiveField + private String id; - /** - * 登录人账号 - */ - @SensitiveField - private String username; + /** + * 登录人账号 + */ + @SensitiveField + private String username; - /** - * 登录人名字 - */ - @SensitiveField - private String realname; + /** + * 登录人名字 + */ + @SensitiveField + private String realname; - /** - * 登录人密码 - */ - @SensitiveField - private String password; + /** + * 登录人密码 + */ + @SensitiveField + private String password; - /** - * 当前登录部门code - */ - @SensitiveField + /** + * 当前登录部门code + */ + @SensitiveField private String orgCode; - /** - * 当前登录部门id - */ - @SensitiveField - private String orgId; - /** - * 当前登录角色code(多个逗号分割) - */ - @SensitiveField - private String roleCode; + /** + * 当前登录部门id + */ + @SensitiveField + private String orgId; + /** + * 当前登录角色code(多个逗号分割) + */ + @SensitiveField + private String roleCode; - /** - * 头像 - */ - @SensitiveField - private String avatar; + /** + * 头像 + */ + @SensitiveField + private String avatar; - /** - * 生日 - */ - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern = "yyyy-MM-dd") - private Date birthday; + /** + * 生日 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date birthday; - /** - * 性别(1:男 2:女) - */ - private Integer sex; + /** + * 性别(1:男 2:女) + */ + private Integer sex; - /** - * 电子邮件 - */ - @SensitiveField - private String email; + /** + * 电子邮件 + */ + @SensitiveField + private String email; - /** - * 电话 - */ - @SensitiveField - private String phone; + /** + * 电话 + */ + @SensitiveField + private String phone; - /** - * 状态(1:正常 2:冻结 ) - */ - private Integer status; - - private Integer delFlag; - /** + /** + * 状态(1:正常 2:冻结 ) + */ + private Integer status; + + private Integer delFlag; + /** * 同步工作流引擎1同步0不同步 */ private Integer activitiSync; - /** - * 创建时间 - */ - private Date createTime; + /** + * 创建时间 + */ + private Date createTime; - /** - * 身份(1 普通员工 2 上级) - */ - private Integer userIdentity; + /** + * 身份(1 普通员工 2 上级) + */ + private Integer userIdentity; - /** - * 管理部门ids - */ - @SensitiveField - private String departIds; + /** + * 管理部门ids + */ + @SensitiveField + private String departIds; - /** - * 职务,关联职务表 - */ - @SensitiveField - private String post; + /** + * 职务,关联职务表 + */ + @SensitiveField + private String post; - /** - * 座机号 - */ - @SensitiveField - private String telephone; + /** + * 座机号 + */ + @SensitiveField + private String telephone; - /** 多租户ids临时用,不持久化数据库(数据库字段不存在) */ - @SensitiveField - private String relTenantIds; + /** + * 多租户ids临时用,不持久化数据库(数据库字段不存在) + */ + @SensitiveField + private String relTenantIds; - /**设备id uniapp推送用*/ - private String clientId; + /** + * 设备id uniapp推送用 + */ + private String clientId; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysCategoryModel.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysCategoryModel.java index 5499bef..7c29921 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysCategoryModel.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysCategoryModel.java @@ -1,7 +1,5 @@ package org.jeecg.common.system.vo; -import org.jeecgframework.poi.excel.annotation.Excel; - /** * @Author qinfeng * @Date 2020/2/19 12:01 @@ -9,13 +7,21 @@ import org.jeecgframework.poi.excel.annotation.Excel; * @Version 1.0 */ public class SysCategoryModel { - /**主键*/ + /** + * 主键 + */ private java.lang.String id; - /**父级节点*/ + /** + * 父级节点 + */ private java.lang.String pid; - /**类型名称*/ + /** + * 类型名称 + */ private java.lang.String name; - /**类型编码*/ + /** + * 类型编码 + */ private java.lang.String code; public String getId() { diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysDepartModel.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysDepartModel.java index 41dca9d..354fb89 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysDepartModel.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysDepartModel.java @@ -2,36 +2,65 @@ package org.jeecg.common.system.vo; /** * 部门机构model + * * @author: lvdandan */ public class SysDepartModel { - /**ID*/ + /** + * ID + */ private String id; - /**父机构ID*/ + /** + * 父机构ID + */ private String parentId; - /**机构/部门名称*/ + /** + * 机构/部门名称 + */ private String departName; - /**英文名*/ + /** + * 英文名 + */ private String departNameEn; - /**缩写*/ + /** + * 缩写 + */ private String departNameAbbr; - /**排序*/ + /** + * 排序 + */ private Integer departOrder; - /**描述*/ + /** + * 描述 + */ private String description; - /**机构类别 1组织机构,2岗位*/ + /** + * 机构类别 1组织机构,2岗位 + */ private String orgCategory; - /**机构类型*/ + /** + * 机构类型 + */ private String orgType; - /**机构编码*/ + /** + * 机构编码 + */ private String orgCode; - /**手机号*/ + /** + * 手机号 + */ private String mobile; - /**传真*/ + /** + * 传真 + */ private String fax; - /**地址*/ + /** + * 地址 + */ private String address; - /**备注*/ + /** + * 备注 + */ private String memo; public String getId() { diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysFilesModel.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysFilesModel.java index e26a19e..f152767 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysFilesModel.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysFilesModel.java @@ -7,19 +7,33 @@ package org.jeecg.common.system.vo; * @date: 2022年08月11日 9:48 */ public class SysFilesModel { - /**主键id*/ + /** + * 主键id + */ private String id; - /**文件名称*/ + /** + * 文件名称 + */ private String fileName; - /**文件地址*/ + /** + * 文件地址 + */ private String url; - /**文档类型(folder:文件夹 excel:excel doc:word pp:ppt image:图片 archive:其他文档 video:视频)*/ + /** + * 文档类型(folder:文件夹 excel:excel doc:word pp:ppt image:图片 archive:其他文档 video:视频) + */ private String fileType; - /**文件上传类型(temp/本地上传(临时文件) manage/知识库)*/ + /** + * 文件上传类型(temp/本地上传(临时文件) manage/知识库) + */ private String storeType; - /**文件大小(kb)*/ + /** + * 文件大小(kb) + */ private Double fileSize; - /**租户id*/ + /** + * 租户id + */ private String tenantId; public String getId() { diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysPermissionDataRuleModel.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysPermissionDataRuleModel.java index f9204d6..a399755 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysPermissionDataRuleModel.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysPermissionDataRuleModel.java @@ -1,12 +1,5 @@ package org.jeecg.common.system.vo; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; import java.util.Date; /** diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysUserCacheInfo.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysUserCacheInfo.java index fd9796d..c5e2c79 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysUserCacheInfo.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/SysUserCacheInfo.java @@ -1,106 +1,106 @@ package org.jeecg.common.system.vo; -import java.util.List; - import org.jeecg.common.util.DateUtils; +import java.util.List; + /** * @Description: 用户缓存信息 * @author: jeecg-boot */ public class SysUserCacheInfo { - private String sysUserId; + private String sysUserId; - private String sysUserCode; - - private String sysUserName; - - private String sysOrgCode; + private String sysUserCode; - /** - * 当前用户部门ID - */ - private String sysOrgId; + private String sysUserName; - private List sysMultiOrgCode; - - private boolean oneDepart; + private String sysOrgCode; - /** - * 当前用户角色code(多个逗号分割) - */ - private String sysRoleCode; + /** + * 当前用户部门ID + */ + private String sysOrgId; - public boolean isOneDepart() { - return oneDepart; - } + private List sysMultiOrgCode; - public void setOneDepart(boolean oneDepart) { - this.oneDepart = oneDepart; - } + private boolean oneDepart; - public String getSysDate() { - return DateUtils.formatDate(); - } + /** + * 当前用户角色code(多个逗号分割) + */ + private String sysRoleCode; - public String getSysTime() { - return DateUtils.now(); - } + public boolean isOneDepart() { + return oneDepart; + } - public String getSysUserCode() { - return sysUserCode; - } + public void setOneDepart(boolean oneDepart) { + this.oneDepart = oneDepart; + } - public void setSysUserCode(String sysUserCode) { - this.sysUserCode = sysUserCode; - } + public String getSysDate() { + return DateUtils.formatDate(); + } - public String getSysUserName() { - return sysUserName; - } + public String getSysTime() { + return DateUtils.now(); + } - public void setSysUserName(String sysUserName) { - this.sysUserName = sysUserName; - } + public String getSysUserCode() { + return sysUserCode; + } - public String getSysOrgCode() { - return sysOrgCode; - } + public void setSysUserCode(String sysUserCode) { + this.sysUserCode = sysUserCode; + } - public void setSysOrgCode(String sysOrgCode) { - this.sysOrgCode = sysOrgCode; - } + public String getSysUserName() { + return sysUserName; + } - public List getSysMultiOrgCode() { - return sysMultiOrgCode; - } + public void setSysUserName(String sysUserName) { + this.sysUserName = sysUserName; + } - public void setSysMultiOrgCode(List sysMultiOrgCode) { - this.sysMultiOrgCode = sysMultiOrgCode; - } + public String getSysOrgCode() { + return sysOrgCode; + } - public String getSysUserId() { - return sysUserId; - } + public void setSysOrgCode(String sysOrgCode) { + this.sysOrgCode = sysOrgCode; + } - public void setSysUserId(String sysUserId) { - this.sysUserId = sysUserId; - } + public List getSysMultiOrgCode() { + return sysMultiOrgCode; + } - public String getSysOrgId() { - return sysOrgId; - } + public void setSysMultiOrgCode(List sysMultiOrgCode) { + this.sysMultiOrgCode = sysMultiOrgCode; + } - public void setSysOrgId(String sysOrgId) { - this.sysOrgId = sysOrgId; - } + public String getSysUserId() { + return sysUserId; + } - public String getSysRoleCode() { - return sysRoleCode; - } + public void setSysUserId(String sysUserId) { + this.sysUserId = sysUserId; + } - public void setSysRoleCode(String sysRoleCode) { - this.sysRoleCode = sysRoleCode; - } + public String getSysOrgId() { + return sysOrgId; + } + + public void setSysOrgId(String sysOrgId) { + this.sysOrgId = sysOrgId; + } + + public String getSysRoleCode() { + return sysRoleCode; + } + + public void setSysRoleCode(String sysRoleCode) { + this.sysRoleCode = sysRoleCode; + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/vo/UserAccountInfo.java b/physical-base-core/src/main/java/org/jeecg/common/system/vo/UserAccountInfo.java index 3d44c41..9a4b7f9 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/vo/UserAccountInfo.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/vo/UserAccountInfo.java @@ -1,13 +1,9 @@ package org.jeecg.common.system.vo; -import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.desensitization.annotation.SensitiveField; -import org.springframework.format.annotation.DateTimeFormat; - -import java.util.Date; /** *

diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/BrowserType.java b/physical-base-core/src/main/java/org/jeecg/common/util/BrowserType.java index c080c61..85eae19 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/BrowserType.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/BrowserType.java @@ -1,13 +1,11 @@ package org.jeecg.common.util; /** - * - * @Author 张代浩 - * + * @Author 张代浩 */ public enum BrowserType { /** * 浏览类型 IE11,IE10,IE9,IE8,IE7,IE6,Firefox,Safari,Chrome,Opera,Camino,Gecko */ - IE11,IE10,IE9,IE8,IE7,IE6,Firefox,Safari,Chrome,Opera,Camino,Gecko + IE11, IE10, IE9, IE8, IE7, IE6, Firefox, Safari, Chrome, Opera, Camino, Gecko } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/BrowserUtils.java b/physical-base-core/src/main/java/org/jeecg/common/util/BrowserUtils.java index 479a917..34c2d75 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/BrowserUtils.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/BrowserUtils.java @@ -1,207 +1,208 @@ package org.jeecg.common.util; +import jakarta.servlet.http.HttpServletRequest; + import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; -import jakarta.servlet.http.HttpServletRequest; - /** - * * @Author 张代浩 - * */ public class BrowserUtils { /** * 判断是否是IE + * * @param request * @return */ - public static boolean isIe(HttpServletRequest request) { - return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request - .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true - : false; - } + public static boolean isIe(HttpServletRequest request) { + return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request + .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true + : false; + } - /** - * 获取IE版本 - * - * @param request - * @return - */ - public static Double getIeVersion(HttpServletRequest request) { - Double version = 0.0; - if (getBrowserType(request, IE11)) { - version = 11.0; - } else if (getBrowserType(request, IE10)) { - version = 10.0; - } else if (getBrowserType(request, IE9)) { - version = 9.0; - } else if (getBrowserType(request, IE8)) { - version = 8.0; - } else if (getBrowserType(request, IE7)) { - version = 7.0; - } else if (getBrowserType(request, IE6)) { - version = 6.0; - } - return version; - } + /** + * 获取IE版本 + * + * @param request + * @return + */ + public static Double getIeVersion(HttpServletRequest request) { + Double version = 0.0; + if (getBrowserType(request, IE11)) { + version = 11.0; + } else if (getBrowserType(request, IE10)) { + version = 10.0; + } else if (getBrowserType(request, IE9)) { + version = 9.0; + } else if (getBrowserType(request, IE8)) { + version = 8.0; + } else if (getBrowserType(request, IE7)) { + version = 7.0; + } else if (getBrowserType(request, IE6)) { + version = 6.0; + } + return version; + } - /** - * 获取浏览器类型 - * - * @param request - * @return - */ - public static BrowserType getBrowserType(HttpServletRequest request) { - BrowserType browserType = null; - if (getBrowserType(request, IE11)) { - browserType = BrowserType.IE11; - } - if (getBrowserType(request, IE10)) { - browserType = BrowserType.IE10; - } - if (getBrowserType(request, IE9)) { - browserType = BrowserType.IE9; - } - if (getBrowserType(request, IE8)) { - browserType = BrowserType.IE8; - } - if (getBrowserType(request, IE7)) { - browserType = BrowserType.IE7; - } - if (getBrowserType(request, IE6)) { - browserType = BrowserType.IE6; - } - if (getBrowserType(request, FIREFOX)) { - browserType = BrowserType.Firefox; - } - if (getBrowserType(request, SAFARI)) { - browserType = BrowserType.Safari; - } - if (getBrowserType(request, CHROME)) { - browserType = BrowserType.Chrome; - } - if (getBrowserType(request, OPERA)) { - browserType = BrowserType.Opera; - } - if (getBrowserType(request, CAMINO)) { - browserType = BrowserType.Camino; - } - return browserType; - } + /** + * 获取浏览器类型 + * + * @param request + * @return + */ + public static BrowserType getBrowserType(HttpServletRequest request) { + BrowserType browserType = null; + if (getBrowserType(request, IE11)) { + browserType = BrowserType.IE11; + } + if (getBrowserType(request, IE10)) { + browserType = BrowserType.IE10; + } + if (getBrowserType(request, IE9)) { + browserType = BrowserType.IE9; + } + if (getBrowserType(request, IE8)) { + browserType = BrowserType.IE8; + } + if (getBrowserType(request, IE7)) { + browserType = BrowserType.IE7; + } + if (getBrowserType(request, IE6)) { + browserType = BrowserType.IE6; + } + if (getBrowserType(request, FIREFOX)) { + browserType = BrowserType.Firefox; + } + if (getBrowserType(request, SAFARI)) { + browserType = BrowserType.Safari; + } + if (getBrowserType(request, CHROME)) { + browserType = BrowserType.Chrome; + } + if (getBrowserType(request, OPERA)) { + browserType = BrowserType.Opera; + } + if (getBrowserType(request, CAMINO)) { + browserType = BrowserType.Camino; + } + return browserType; + } - private static boolean getBrowserType(HttpServletRequest request, - String brosertype) { - return request.getHeader("USER-AGENT").toLowerCase() - .indexOf(brosertype) > 0 ? true : false; - } + private static boolean getBrowserType(HttpServletRequest request, + String brosertype) { + return request.getHeader("USER-AGENT").toLowerCase() + .indexOf(brosertype) > 0 ? true : false; + } - private final static String IE11 = "rv:11.0"; - private final static String IE10 = "MSIE 10.0"; - private final static String IE9 = "MSIE 9.0"; - private final static String IE8 = "MSIE 8.0"; - private final static String IE7 = "MSIE 7.0"; - private final static String IE6 = "MSIE 6.0"; - private final static String MAXTHON = "Maxthon"; - private final static String QQ = "QQBrowser"; - private final static String GREEN = "GreenBrowser"; - private final static String SE360 = "360SE"; - private final static String FIREFOX = "Firefox"; - private final static String OPERA = "Opera"; - private final static String CHROME = "Chrome"; - private final static String SAFARI = "Safari"; - private final static String OTHER = "其它"; - private final static String CAMINO = "Camino"; + private final static String IE11 = "rv:11.0"; + private final static String IE10 = "MSIE 10.0"; + private final static String IE9 = "MSIE 9.0"; + private final static String IE8 = "MSIE 8.0"; + private final static String IE7 = "MSIE 7.0"; + private final static String IE6 = "MSIE 6.0"; + private final static String MAXTHON = "Maxthon"; + private final static String QQ = "QQBrowser"; + private final static String GREEN = "GreenBrowser"; + private final static String SE360 = "360SE"; + private final static String FIREFOX = "Firefox"; + private final static String OPERA = "Opera"; + private final static String CHROME = "Chrome"; + private final static String SAFARI = "Safari"; + private final static String OTHER = "其它"; + private final static String CAMINO = "Camino"; - public static String checkBrowse(HttpServletRequest request) { - String userAgent = request.getHeader("USER-AGENT"); - if (regex(OPERA, userAgent)) { - return OPERA; - } - if (regex(CHROME, userAgent)) { - return CHROME; - } - if (regex(FIREFOX, userAgent)) { - return FIREFOX; - } - if (regex(SAFARI, userAgent)) { - return SAFARI; - } - if (regex(SE360, userAgent)) { - return SE360; - } - if (regex(GREEN, userAgent)) { - return GREEN; - } - if (regex(QQ, userAgent)) { - return QQ; - } - if (regex(MAXTHON, userAgent)) { - return MAXTHON; - } - if (regex(IE11, userAgent)) { - return IE11; - } - if (regex(IE10, userAgent)) { - return IE10; - } - if (regex(IE9, userAgent)) { - return IE9; - } - if (regex(IE8, userAgent)) { - return IE8; - } - if (regex(IE7, userAgent)) { - return IE7; - } - if (regex(IE6, userAgent)) { - return IE6; - } - return OTHER; - } + public static String checkBrowse(HttpServletRequest request) { + String userAgent = request.getHeader("USER-AGENT"); + if (regex(OPERA, userAgent)) { + return OPERA; + } + if (regex(CHROME, userAgent)) { + return CHROME; + } + if (regex(FIREFOX, userAgent)) { + return FIREFOX; + } + if (regex(SAFARI, userAgent)) { + return SAFARI; + } + if (regex(SE360, userAgent)) { + return SE360; + } + if (regex(GREEN, userAgent)) { + return GREEN; + } + if (regex(QQ, userAgent)) { + return QQ; + } + if (regex(MAXTHON, userAgent)) { + return MAXTHON; + } + if (regex(IE11, userAgent)) { + return IE11; + } + if (regex(IE10, userAgent)) { + return IE10; + } + if (regex(IE9, userAgent)) { + return IE9; + } + if (regex(IE8, userAgent)) { + return IE8; + } + if (regex(IE7, userAgent)) { + return IE7; + } + if (regex(IE6, userAgent)) { + return IE6; + } + return OTHER; + } - public static boolean regex(String regex, String str) { - Pattern p = Pattern.compile(regex, Pattern.MULTILINE); - Matcher m = p.matcher(str); - return m.find(); - } + public static boolean regex(String regex, String str) { + Pattern p = Pattern.compile(regex, Pattern.MULTILINE); + Matcher m = p.matcher(str); + return m.find(); + } - - private static Map langMap = new HashMap(); - private final static String ZH = "zh"; - private final static String ZH_CN = "zh-cn"; - - private final static String EN = "en"; - private final static String EN_US = "en"; - - - static - { - langMap.put(ZH, ZH_CN); - langMap.put(EN, EN_US); - } - - public static String getBrowserLanguage(HttpServletRequest request) { - - String browserLang = request.getLocale().getLanguage(); - String browserLangCode = (String)langMap.get(browserLang); - - if(browserLangCode == null) - { - browserLangCode = EN_US; - } - return browserLangCode; - } - /** 判断请求是否来自电脑端 */ + private static Map langMap = new HashMap(); + private final static String ZH = "zh"; + private final static String ZH_CN = "zh-cn"; + + private final static String EN = "en"; + private final static String EN_US = "en"; + + + static { + langMap.put(ZH, ZH_CN); + langMap.put(EN, EN_US); + } + + public static String getBrowserLanguage(HttpServletRequest request) { + + String browserLang = request.getLocale().getLanguage(); + String browserLangCode = (String) langMap.get(browserLang); + + if (browserLangCode == null) { + browserLangCode = EN_US; + } + return browserLangCode; + } + + /** + * 判断请求是否来自电脑端 + */ public static boolean isDesktop(HttpServletRequest request) { return !isMobile(request); } - /** 判断请求是否来自移动端 */ + /** + * 判断请求是否来自移动端 + */ public static boolean isMobile(HttpServletRequest request) { String ua = request.getHeader("User-Agent").toLowerCase(); String type = "(phone|pad|pod|iphone|ipod|ios|ipad|android|mobile|blackberry|iemobile|mqqbrowser|juc|fennec|wosbrowser|browserng|webos|symbian|windows phone)"; diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/CommonUtils.java b/physical-base-core/src/main/java/org/jeecg/common/util/CommonUtils.java index b7e790f..c297b34 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/CommonUtils.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/CommonUtils.java @@ -5,6 +5,7 @@ import com.baomidou.dynamic.datasource.creator.DataSourceProperty; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.jeecg.common.constant.CommonConstant; @@ -19,7 +20,6 @@ import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.util.FileCopyUtils; import org.springframework.web.multipart.MultipartFile; -import jakarta.servlet.http.HttpServletRequest; import javax.sql.DataSource; import java.io.ByteArrayInputStream; import java.io.File; @@ -52,13 +52,13 @@ public class CommonUtils { */ private static String FILE_NAME_REGEX = "[^A-Za-z\\.\\(\\)\\-()\\_0-9\\u4e00-\\u9fa5]"; - public static String uploadOnlineImage(byte[] data,String basePath,String bizPath,String uploadType){ + public static String uploadOnlineImage(byte[] data, String basePath, String bizPath, String uploadType) { String dbPath = null; String fileName = "image" + Math.round(Math.random() * 100000000000L); fileName += "." + PoiPublicUtil.getFileExtendName(data); try { - if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)){ - File file = new File(basePath + File.separator + bizPath + File.separator ); + if (CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)) { + File file = new File(basePath + File.separator + bizPath + File.separator); if (!file.exists()) { file.mkdirs();// 创建文件根目录 } @@ -66,13 +66,13 @@ public class CommonUtils { File savefile = new File(savePath); FileCopyUtils.copy(data, savefile); dbPath = bizPath + File.separator + fileName; - }else { + } else { InputStream in = new ByteArrayInputStream(data); - String relativePath = bizPath+"/"+fileName; - if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ - dbPath = MinioUtil.upload(in,relativePath); - }else if(CommonConstant.UPLOAD_TYPE_OSS.equals(uploadType)){ - dbPath = OssBootUtil.upload(in,relativePath); + String relativePath = bizPath + "/" + fileName; + if (CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)) { + dbPath = MinioUtil.upload(in, relativePath); + } else if (CommonConstant.UPLOAD_TYPE_OSS.equals(uploadType)) { + dbPath = OssBootUtil.upload(in, relativePath); } } } catch (Exception e) { @@ -83,10 +83,11 @@ public class CommonUtils { /** * 判断文件名是否带盘符,重新处理 + * * @param fileName * @return */ - public static String getFileName(String fileName){ + public static String getFileName(String fileName) { //判断是否带有盘符信息 // Check for Unix-style path int unixSep = fileName.lastIndexOf('/'); @@ -94,15 +95,15 @@ public class CommonUtils { int winSep = fileName.lastIndexOf('\\'); // Cut off at latest possible point int pos = (winSep > unixSep ? winSep : unixSep); - if (pos != -1) { + if (pos != -1) { // Any sort of path separator found... fileName = fileName.substring(pos + 1); } //替换上传文件名字的特殊字符 - fileName = fileName.replace("=","").replace(",","").replace("&","") + fileName = fileName.replace("=", "").replace(",", "").replace("&", "") .replace("#", "").replace("“", "").replace("”", ""); //替换上传文件名字中的空格 - fileName=fileName.replaceAll("\\s",""); + fileName = fileName.replaceAll("\\s", ""); //update-beign-author:taoyan date:20220302 for: /issues/3381 online 在线表单 使用文件组件时,上传文件名中含%,下载异常 fileName = fileName.replaceAll(FILE_NAME_REGEX, ""); //update-end-author:taoyan date:20220302 for: /issues/3381 online 在线表单 使用文件组件时,上传文件名中含%,下载异常 @@ -111,13 +112,14 @@ public class CommonUtils { /** * java 判断字符串里是否包含中文字符 + * * @param str * @return */ public static boolean ifContainChinese(String str) { - if(str.getBytes().length == str.length()){ + if (str.getBytes().length == str.length()) { return false; - }else{ + } else { Matcher m = ZHONGWEN_PATTERN.matcher(str); if (m.find()) { return true; @@ -128,6 +130,7 @@ public class CommonUtils { /** * 统一全局上传 + * * @Return: java.lang.String */ public static String upload(MultipartFile file, String bizPath, String uploadType) { @@ -144,19 +147,21 @@ public class CommonUtils { } return url; } + /** * 本地文件上传 - * @param mf 文件 - * @param bizPath 自定义路径 + * + * @param mf 文件 + * @param bizPath 自定义路径 * @return */ - public static String uploadLocal(MultipartFile mf,String bizPath,String uploadpath){ + public static String uploadLocal(MultipartFile mf, String bizPath, String uploadpath) { try { //update-begin-author:liusq date:20210809 for: 过滤上传文件类型 SsrfFileTypeFilter.checkUploadFileType(mf); //update-end-author:liusq date:20210809 for: 过滤上传文件类型 String fileName = null; - File file = new File(uploadpath + File.separator + bizPath + File.separator ); + File file = new File(uploadpath + File.separator + bizPath + File.separator); if (!file.exists()) { // 创建文件根目录 file.mkdirs(); @@ -164,18 +169,18 @@ public class CommonUtils { // 获取文件名 String orgName = mf.getOriginalFilename(); orgName = CommonUtils.getFileName(orgName); - if(orgName.indexOf(SymbolConstant.SPOT)!=-1){ + if (orgName.indexOf(SymbolConstant.SPOT) != -1) { fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")); - }else{ - fileName = orgName+ "_" + System.currentTimeMillis(); + } else { + fileName = orgName + "_" + System.currentTimeMillis(); } String savePath = file.getPath() + File.separator + fileName; File savefile = new File(savePath); FileCopyUtils.copy(mf.getBytes(), savefile); String dbpath = null; - if(oConvertUtils.isNotEmpty(bizPath)){ + if (oConvertUtils.isNotEmpty(bizPath)) { dbpath = bizPath + File.separator + fileName; - }else{ + } else { dbpath = fileName; } if (dbpath.contains(SymbolConstant.DOUBLE_BACKSLASH)) { @@ -184,7 +189,7 @@ public class CommonUtils { return dbpath; } catch (IOException e) { log.error(e.getMessage(), e); - }catch (Exception e) { + } catch (Exception e) { log.error(e.getMessage(), e); } return ""; @@ -192,6 +197,7 @@ public class CommonUtils { /** * 统一全局上传 带桶 + * * @Return: java.lang.String */ public static String upload(MultipartFile file, String bizPath, String uploadType, String customBucket) { @@ -203,22 +209,25 @@ public class CommonUtils { url = OssBootUtil.upload(file, bizPath, customBucket); } } catch (Exception e) { - log.error(e.getMessage(),e); + log.error(e.getMessage(), e); } return url; } - /** 当前系统数据库类型 */ + /** + * 当前系统数据库类型 + */ private static String DB_TYPE = ""; private static DbType dbTypeEnum = null; /** * 全局获取平台数据库类型(作废了) + * * @return */ @Deprecated public static String getDatabaseType() { - if(oConvertUtils.isNotEmpty(DB_TYPE)){ + if (oConvertUtils.isNotEmpty(DB_TYPE)) { return DB_TYPE; } DataSource dataSource = SpringContextUtils.getApplicationContext().getBean(DataSource.class); @@ -226,13 +235,14 @@ public class CommonUtils { return getDatabaseTypeByDataSource(dataSource); } catch (SQLException e) { //e.printStackTrace(); - log.warn(e.getMessage(),e); + log.warn(e.getMessage(), e); return ""; } } /** * 全局获取平台数据库类型(对应mybaisPlus枚举) + * * @return */ public static DbType getDatabaseTypeEnum() { @@ -251,18 +261,20 @@ public class CommonUtils { /** * 根据数据源key获取DataSourceProperty + * * @param sourceKey * @return */ - public static DataSourceProperty getDataSourceProperty(String sourceKey){ + public static DataSourceProperty getDataSourceProperty(String sourceKey) { DynamicDataSourceProperties prop = SpringContextUtils.getApplicationContext().getBean(DynamicDataSourceProperties.class); Map map = prop.getDatasource(); - DataSourceProperty db = (DataSourceProperty)map.get(sourceKey); + DataSourceProperty db = (DataSourceProperty) map.get(sourceKey); return db; } /** * 根据sourceKey 获取数据源连接 + * * @param sourceKey * @return * @throws SQLException @@ -273,11 +285,11 @@ public class CommonUtils { } DynamicDataSourceProperties prop = SpringContextUtils.getApplicationContext().getBean(DynamicDataSourceProperties.class); Map map = prop.getDatasource(); - DataSourceProperty db = (DataSourceProperty)map.get(sourceKey); - if(db==null){ + DataSourceProperty db = (DataSourceProperty) map.get(sourceKey); + if (db == null) { return null; } - DriverManagerDataSource ds = new DriverManagerDataSource (); + DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setDriverClassName(db.getDriverClassName()); ds.setUrl(db.getUrl()); ds.setUsername(db.getUsername()); @@ -287,40 +299,42 @@ public class CommonUtils { /** * 获取数据库类型 + * * @param dataSource * @return * @throws SQLException */ - private static String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException{ - if("".equals(DB_TYPE)) { + private static String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException { + if ("".equals(DB_TYPE)) { Connection connection = dataSource.getConnection(); try { DatabaseMetaData md = connection.getMetaData(); String dbType = md.getDatabaseProductName().toUpperCase(); - String sqlserver= "SQL SERVER"; - if(dbType.indexOf(DataBaseConstant.DB_TYPE_MYSQL)>=0) { + String sqlserver = "SQL SERVER"; + if (dbType.indexOf(DataBaseConstant.DB_TYPE_MYSQL) >= 0) { DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL; - }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_ORACLE)>=0 ||dbType.indexOf(DataBaseConstant.DB_TYPE_DM)>=0) { + } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_ORACLE) >= 0 || dbType.indexOf(DataBaseConstant.DB_TYPE_DM) >= 0) { DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE; - }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_SQLSERVER)>=0||dbType.indexOf(sqlserver)>=0) { + } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_SQLSERVER) >= 0 || dbType.indexOf(sqlserver) >= 0) { DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER; - }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_POSTGRESQL)>=0 || dbType.indexOf(DataBaseConstant.DB_TYPE_KINGBASEES)>=0) { + } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_POSTGRESQL) >= 0 || dbType.indexOf(DataBaseConstant.DB_TYPE_KINGBASEES) >= 0) { DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL; - }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_MARIADB)>=0) { + } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_MARIADB) >= 0) { DB_TYPE = DataBaseConstant.DB_TYPE_MARIADB; - }else { + } else { log.error("数据库类型:[" + dbType + "]不识别!"); //throw new JeecgBootException("数据库类型:["+dbType+"]不识别!"); } } catch (Exception e) { log.error(e.getMessage(), e); - }finally { + } finally { connection.close(); } } return DB_TYPE; } + /** * 获取服务器地址 * @@ -330,14 +344,14 @@ public class CommonUtils { public static String getBaseUrl(HttpServletRequest request) { //1.【兼容】兼容微服务下的 base path------- String xGatewayBasePath = request.getHeader(ServiceNameConstants.X_GATEWAY_BASE_PATH); - if(oConvertUtils.isNotEmpty(xGatewayBasePath)){ - log.info("x_gateway_base_path = "+ xGatewayBasePath); - return xGatewayBasePath; + if (oConvertUtils.isNotEmpty(xGatewayBasePath)) { + log.info("x_gateway_base_path = " + xGatewayBasePath); + return xGatewayBasePath; } //2.【兼容】SSL认证之后,request.getScheme()获取不到https的问题 // https://blog.csdn.net/weixin_34376986/article/details/89767950 String scheme = request.getHeader(CommonConstant.X_FORWARDED_SCHEME); - if(oConvertUtils.isEmpty(scheme)){ + if (oConvertUtils.isEmpty(scheme)) { scheme = request.getScheme(); } @@ -351,11 +365,11 @@ public class CommonUtils { //update-begin---author:wangshuai---date:2024-03-15---for:【QQYUN-8561】企业微信登陆请求接口设置上下文不一致,导致接口404--- int httpPort = 80; int httpsPort = 443; - if(httpPort == serverPort || httpsPort == serverPort){ - //update-end---author:wangshuai---date:2024-03-15---for:【QQYUN-8561】企业微信登陆请求接口设置上下文不一致,导致接口404---~ - baseDomainPath = scheme + "://" + serverName + contextPath ; - }else{ - baseDomainPath = scheme + "://" + serverName + ":" + serverPort + contextPath ; + if (httpPort == serverPort || httpsPort == serverPort) { + //update-end---author:wangshuai---date:2024-03-15---for:【QQYUN-8561】企业微信登陆请求接口设置上下文不一致,导致接口404---~ + baseDomainPath = scheme + "://" + serverName + contextPath; + } else { + baseDomainPath = scheme + "://" + serverName + ":" + serverPort + contextPath; } log.debug("-----Common getBaseUrl----- : " + baseDomainPath); return baseDomainPath; @@ -402,6 +416,7 @@ public class CommonUtils { /** * 将list集合以分割符的方式进行分割 + * * @param list String类型的集合文本 * @param separator 分隔符 * @return @@ -412,7 +427,7 @@ public class CommonUtils { } return ""; } - + /** * 通过table的条件SQL * @@ -420,10 +435,10 @@ public class CommonUtils { * @return name = '1212' */ public static String getFilterSqlByTableSql(String tableSql) { - if(oConvertUtils.isEmpty(tableSql)){ + if (oConvertUtils.isEmpty(tableSql)) { return null; } - + if (tableSql.toLowerCase().indexOf(DataBaseConstant.SQL_WHERE) > 0) { String[] arr = tableSql.split(" (?i)where "); if (arr != null && oConvertUtils.isNotEmpty(arr[1])) { @@ -440,10 +455,10 @@ public class CommonUtils { * @return sys_user */ public static String getTableNameByTableSql(String tableSql) { - if(oConvertUtils.isEmpty(tableSql)){ + if (oConvertUtils.isEmpty(tableSql)) { return null; } - + if (tableSql.toLowerCase().indexOf(DataBaseConstant.SQL_WHERE) > 0) { String[] arr = tableSql.split(" (?i)where "); return arr[0].trim(); @@ -454,6 +469,7 @@ public class CommonUtils { /** * 判断两个数组是否存在交集 + * * @param set1 * @param arr2 * @return @@ -462,8 +478,8 @@ public class CommonUtils { if (set1 == null) { return false; } - - if(set1.size()>0){ + + if (set1.size() > 0) { for (String str : arr2) { if (set1.contains(str)) { return true; diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/DateUtils.java b/physical-base-core/src/main/java/org/jeecg/common/util/DateUtils.java index 4e929a1..ba57e2a 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/DateUtils.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/DateUtils.java @@ -79,6 +79,7 @@ public class DateUtils extends PropertyEditorSupport { /** * 指定模式的时间格式 + * * @param pattern * @return */ @@ -121,8 +122,8 @@ public class DateUtils extends PropertyEditorSupport { public static Date getDate() { return new Date(); } - - + + /** * 当前日期 * @@ -227,7 +228,7 @@ public class DateUtils extends PropertyEditorSupport { /** * 日期转换为字符串 * - * @param date 日期 + * @param date 日期 * @param dateSdf 日期格式 * @return 字符串 */ @@ -689,13 +690,14 @@ public class DateUtils extends PropertyEditorSupport { /** * 将字符串转成时间 + * * @param str * @return */ - public static Date parseDatetime(String str){ + public static Date parseDatetime(String str) { try { return datetimeFormat.get().parse(str); - }catch (Exception e){ + } catch (Exception e) { } return null; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/DySmsHelper.java b/physical-base-core/src/main/java/org/jeecg/common/util/DySmsHelper.java index 25beb2d..74583f9 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/DySmsHelper.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/DySmsHelper.java @@ -20,23 +20,30 @@ import org.slf4j.LoggerFactory; * 工程依赖了2个jar包(存放在工程的libs目录下) * 1:aliyun-java-sdk-core.jar * 2:aliyun-java-sdk-dysmsapi.jar - * + *

* 备注:Demo工程编码采用UTF-8 * 国际短信发送请勿参照此DEMO + * * @author: jeecg-boot */ public class DySmsHelper { - - private final static Logger logger=LoggerFactory.getLogger(DySmsHelper.class); - /**产品名称:云通信短信API产品,开发者无需替换*/ + private final static Logger logger = LoggerFactory.getLogger(DySmsHelper.class); + + /** + * 产品名称:云通信短信API产品,开发者无需替换 + */ static final String PRODUCT = "Dysmsapi"; - /**产品域名,开发者无需替换*/ + /** + * 产品域名,开发者无需替换 + */ static final String DOMAIN = "dysmsapi.aliyuncs.com"; - /**TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)*/ - static String accessKeyId; - static String accessKeySecret; + /** + * TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找) + */ + static String accessKeyId; + static String accessKeySecret; public static void setAccessKeyId(String accessKeyId) { DySmsHelper.accessKeyId = accessKeyId; @@ -53,10 +60,10 @@ public class DySmsHelper { public static String getAccessKeySecret() { return accessKeySecret; } - - + + public static boolean sendSms(String phone, JSONObject templateParamJson, DySmsEnum dySmsEnum) throws ClientException { - //可自助调整超时时间 + //可自助调整超时时间 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); @@ -67,15 +74,15 @@ public class DySmsHelper { setAccessKeyId(staticConfig.getAccessKeyId()); setAccessKeySecret(staticConfig.getAccessKeySecret()); //update-end-author:taoyan date:20200811 for:配置类数据获取 - + //初始化acsClient,暂不支持region化 IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN); IAcsClient acsClient = new DefaultAcsClient(profile); - + //验证json参数 - validateParam(templateParamJson,dySmsEnum); - + validateParam(templateParamJson, dySmsEnum); + //组装请求对象-具体描述见控制台-文档部分内容 SendSmsRequest request = new SendSmsRequest(); //必填:待发送手机号 @@ -86,7 +93,7 @@ public class DySmsHelper { request.setTemplateCode(dySmsEnum.getTemplateCode()); //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 request.setTemplateParam(templateParamJson.toJSONString()); - + //选填-上行短信扩展码(无特殊需求用户请忽略此字段) //request.setSmsUpExtendCode("90997"); @@ -98,25 +105,25 @@ public class DySmsHelper { //hint 此处可能会抛出异常,注意catch SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); logger.info("短信接口返回的数据----------------"); - logger.info("{Code:" + sendSmsResponse.getCode()+",Message:" + sendSmsResponse.getMessage()+",RequestId:"+ sendSmsResponse.getRequestId()+",BizId:"+sendSmsResponse.getBizId()+"}"); + logger.info("{Code:" + sendSmsResponse.getCode() + ",Message:" + sendSmsResponse.getMessage() + ",RequestId:" + sendSmsResponse.getRequestId() + ",BizId:" + sendSmsResponse.getBizId() + "}"); String ok = "OK"; if (ok.equals(sendSmsResponse.getCode())) { result = true; } return result; - + } - - private static void validateParam(JSONObject templateParamJson,DySmsEnum dySmsEnum) { - String keys = dySmsEnum.getKeys(); - String [] keyArr = keys.split(","); - for(String item :keyArr) { - if(!templateParamJson.containsKey(item)) { - throw new RuntimeException("模板缺少参数:"+item); - } - } + + private static void validateParam(JSONObject templateParamJson, DySmsEnum dySmsEnum) { + String keys = dySmsEnum.getKeys(); + String[] keyArr = keys.split(","); + for (String item : keyArr) { + if (!templateParamJson.containsKey(item)) { + throw new RuntimeException("模板缺少参数:" + item); + } + } } - + // public static void main(String[] args) throws ClientException, InterruptedException { // JSONObject obj = new JSONObject(); diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/DySmsLimit.java b/physical-base-core/src/main/java/org/jeecg/common/util/DySmsLimit.java index b7a24c8..6235ef1 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/DySmsLimit.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/DySmsLimit.java @@ -6,15 +6,15 @@ import java.util.concurrent.ConcurrentHashMap; /** * 防止刷短信接口(只针对绑定手机号模板:SMS_175430166) - * + *

* 1、同一IP,1分钟内发短信不允许超过5次(每一分钟重置每个IP请求次数) * 2、同一IP,1分钟内发短信超过20次,进入黑名单,不让使用短信接口 - * + *

* 3、短信接口加签和时间戳 - * 涉及接口: - * /sys/sms - * /desform/api/sendVerifyCode - * /sys/sendChangePwdSms + * 涉及接口: + * /sys/sms + * /desform/api/sendVerifyCode + * /sys/sendChangePwdSms */ @Slf4j public class DySmsLimit { @@ -70,7 +70,7 @@ public class DySmsLimit { /** * 图片二维码验证成功之后清空数量 - * + * * @param ip IP地址 */ public static void clearSendSmsCount(String ip) { @@ -78,7 +78,7 @@ public class DySmsLimit { ipRequestCount.put(ip, 0); ipLastRequestTime.put(ip, currentTime); } - + // public static void main(String[] args) { // String ip = "192.168.1.1"; // for (int i = 1; i < 50; i++) { diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/HTMLUtils.java b/physical-base-core/src/main/java/org/jeecg/common/util/HTMLUtils.java index e80b918..1f3d91c 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/HTMLUtils.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/HTMLUtils.java @@ -6,6 +6,7 @@ import org.springframework.web.util.HtmlUtils; /** * HTML 工具类 + * * @author: jeecg-boot * @date: 2022/3/30 14:43 */ @@ -32,6 +33,7 @@ public class HTMLUtils { /** * 将Markdown解析成Html + * * @param markdownContent * @return */ diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/ImportExcelUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/ImportExcelUtil.java index ead7ee6..1cb1bb8 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/ImportExcelUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/ImportExcelUtil.java @@ -12,12 +12,13 @@ import java.util.List; /** * 导出返回信息 + * * @author: jeecg-boot */ @Slf4j public class ImportExcelUtil { - public static Result imporReturnRes(int errorLines,int successLines,List errorMessage) throws IOException { + public static Result imporReturnRes(int errorLines, int successLines, List errorMessage) throws IOException { if (errorLines == 0) { return Result.ok("共" + successLines + "行数据全部导入成功!"); } else { @@ -39,12 +40,12 @@ public class ImportExcelUtil { } } - public static List importDateSave(List list, Class serviceClass, List errorMessage, String errorFlag) { - IService bean =(IService) SpringContextUtils.getBean(serviceClass); + public static List importDateSave(List list, Class serviceClass, List errorMessage, String errorFlag) { + IService bean = (IService) SpringContextUtils.getBean(serviceClass); for (int i = 0; i < list.size(); i++) { try { boolean save = bean.save(list.get(i)); - if(!save){ + if (!save) { throw new Exception(errorFlag); } } catch (Exception e) { @@ -55,11 +56,11 @@ public class ImportExcelUtil { errorMessage.add("第 " + lineNumber + " 行:角色编码已经存在,忽略导入。"); } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_JOB_CLASS_NAME)) { errorMessage.add("第 " + lineNumber + " 行:任务类名已经存在,忽略导入。"); - }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CODE)) { + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CODE)) { errorMessage.add("第 " + lineNumber + " 行:职务编码已经存在,忽略导入。"); - }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE)) { + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE)) { errorMessage.add("第 " + lineNumber + " 行:部门编码已经存在,忽略导入。"); - }else { + } else { errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); log.error(e.getMessage(), e); } @@ -68,11 +69,11 @@ public class ImportExcelUtil { return errorMessage; } - public static List importDateSaveOne(Object obj, Class serviceClass,List errorMessage,int i,String errorFlag) { - IService bean =(IService) SpringContextUtils.getBean(serviceClass); + public static List importDateSaveOne(Object obj, Class serviceClass, List errorMessage, int i, String errorFlag) { + IService bean = (IService) SpringContextUtils.getBean(serviceClass); try { boolean save = bean.save(obj); - if(!save){ + if (!save) { throw new Exception(errorFlag); } } catch (Exception e) { @@ -83,11 +84,11 @@ public class ImportExcelUtil { errorMessage.add("第 " + lineNumber + " 行:角色编码已经存在,忽略导入。"); } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_JOB_CLASS_NAME)) { errorMessage.add("第 " + lineNumber + " 行:任务类名已经存在,忽略导入。"); - }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CODE)) { + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CODE)) { errorMessage.add("第 " + lineNumber + " 行:职务编码已经存在,忽略导入。"); - }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE)) { + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE)) { errorMessage.add("第 " + lineNumber + " 行:部门编码已经存在,忽略导入。"); - }else { + } else { errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); log.error(e.getMessage(), e); } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/IpUtils.java b/physical-base-core/src/main/java/org/jeecg/common/util/IpUtils.java index 7add5d2..e275e57 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/IpUtils.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/IpUtils.java @@ -1,7 +1,6 @@ package org.jeecg.common.util; import jakarta.servlet.http.HttpServletRequest; - import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.CommonConstant; import org.slf4j.Logger; @@ -14,28 +13,28 @@ import java.util.regex.Pattern; /** * IP地址 - * + * * @Author scott * @email jeecgos@163.com * @Date 2019年01月14日 */ public class IpUtils { - private static Logger logger = LoggerFactory.getLogger(IpUtils.class); + private static Logger logger = LoggerFactory.getLogger(IpUtils.class); - /** - * 获取IP地址 - * - * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 - * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 - */ - public static String getIpAddr(HttpServletRequest request) { - String ip = null; + /** + * 获取IP地址 + *

+ * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 + * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 + */ + public static String getIpAddr(HttpServletRequest request) { + String ip = null; try { ip = request.getHeader("x-forwarded-for"); if (StringUtils.isEmpty(ip) || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } - if (StringUtils.isEmpty(ip) || ip.length() == 0 ||CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { + if (StringUtils.isEmpty(ip) || ip.length() == 0 || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (StringUtils.isEmpty(ip) || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { @@ -48,7 +47,7 @@ public class IpUtils { ip = request.getRemoteAddr(); } } catch (Exception e) { - logger.error("IPUtils ERROR ", e); + logger.error("IPUtils ERROR ", e); } //logger.info("获取客户端 ip:{} ", ip); @@ -65,13 +64,14 @@ public class IpUtils { } } } - + return ip; } /** * 判断是否是IP格式 + * * @param ipAddress * @return */ @@ -81,12 +81,13 @@ public class IpUtils { Matcher matcher = pattern.matcher(ipAddress); return matcher.matches(); } - + /** * 获取服务器上的ip + * * @return */ - public static String getServerIp(){ + public static String getServerIp() { InetAddress inetAddress = null; try { inetAddress = InetAddress.getLocalHost(); diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/Md5Util.java b/physical-base-core/src/main/java/org/jeecg/common/util/Md5Util.java index d79f3a5..a08d8ee 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/Md5Util.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/Md5Util.java @@ -8,40 +8,40 @@ import java.security.MessageDigest; */ public class Md5Util { - private static final String[] HEXDIGITS = { "0", "1", "2", "3", "4", "5", - "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; + private static final String[] HEXDIGITS = {"0", "1", "2", "3", "4", "5", + "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; - public static String byteArrayToHexString(byte[] b) { - StringBuffer resultSb = new StringBuffer(); - for (int i = 0; i < b.length; i++){ - resultSb.append(byteToHexString(b[i])); - } - return resultSb.toString(); - } + public static String byteArrayToHexString(byte[] b) { + StringBuffer resultSb = new StringBuffer(); + for (int i = 0; i < b.length; i++) { + resultSb.append(byteToHexString(b[i])); + } + return resultSb.toString(); + } - private static String byteToHexString(byte b) { - int n = b; - if (n < 0) { - n += 256; - } - int d1 = n / 16; - int d2 = n % 16; - return HEXDIGITS[d1] + HEXDIGITS[d2]; - } + private static String byteToHexString(byte b) { + int n = b; + if (n < 0) { + n += 256; + } + int d1 = n / 16; + int d2 = n % 16; + return HEXDIGITS[d1] + HEXDIGITS[d2]; + } - public static String md5Encode(String origin, String charsetname) { - String resultString = null; - try { - resultString = new String(origin); - MessageDigest md = MessageDigest.getInstance("MD5"); - if (charsetname == null || "".equals(charsetname)) { - resultString = byteArrayToHexString(md.digest(resultString.getBytes())); - } else { - resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); - } - } catch (Exception exception) { - } - return resultString; - } + public static String md5Encode(String origin, String charsetname) { + String resultString = null; + try { + resultString = new String(origin); + MessageDigest md = MessageDigest.getInstance("MD5"); + if (charsetname == null || "".equals(charsetname)) { + resultString = byteArrayToHexString(md.digest(resultString.getBytes())); + } else { + resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); + } + } catch (Exception exception) { + } + return resultString; + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/MyClassLoader.java b/physical-base-core/src/main/java/org/jeecg/common/util/MyClassLoader.java index 20289b6..960dea3 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/MyClassLoader.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/MyClassLoader.java @@ -3,103 +3,104 @@ package org.jeecg.common.util; import org.jeecg.common.constant.SymbolConstant; /** - * @Author 张代浩 + * @Author 张代浩 */ public class MyClassLoader extends ClassLoader { - public static Class getClassByScn(String className) { - Class myclass = null; - try { - myclass = Class.forName(className); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - throw new RuntimeException(className+" not found!"); - } - return myclass; - } + public static Class getClassByScn(String className) { + Class myclass = null; + try { + myclass = Class.forName(className); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new RuntimeException(className + " not found!"); + } + return myclass; + } /** * 获得类的全名,包括包名 + * * @param object * @return */ - public static String getPackPath(Object object) { - // 检查用户传入的参数是否为空 - if (object == null) { - throw new java.lang.IllegalArgumentException("参数不能为空!"); - } - // 获得类的全名,包括包名 - String clsName = object.getClass().getName(); - return clsName; - } + public static String getPackPath(Object object) { + // 检查用户传入的参数是否为空 + if (object == null) { + throw new java.lang.IllegalArgumentException("参数不能为空!"); + } + // 获得类的全名,包括包名 + String clsName = object.getClass().getName(); + return clsName; + } - public static String getAppPath(Class cls) { - // 检查用户传入的参数是否为空 - if (cls == null) { - throw new java.lang.IllegalArgumentException("参数不能为空!"); - } - ClassLoader loader = cls.getClassLoader(); - // 获得类的全名,包括包名 - String clsName = cls.getName() + ".class"; - // 获得传入参数所在的包 - Package pack = cls.getPackage(); - String path = ""; - // 如果不是匿名包,将包名转化为路径 - if (pack != null) { - String packName = pack.getName(); - String javaSpot="java."; - String javaxSpot="javax."; - // 此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库 - if (packName.startsWith(javaSpot) || packName.startsWith(javaxSpot)) { - throw new java.lang.IllegalArgumentException("不要传送系统类!"); - } - // 在类的名称中,去掉包名的部分,获得类的文件名 - clsName = clsName.substring(packName.length() + 1); - // 判定包名是否是简单包名,如果是,则直接将包名转换为路径, - if (packName.indexOf(SymbolConstant.SPOT) < 0) { - path = packName + "/"; - } else { + public static String getAppPath(Class cls) { + // 检查用户传入的参数是否为空 + if (cls == null) { + throw new java.lang.IllegalArgumentException("参数不能为空!"); + } + ClassLoader loader = cls.getClassLoader(); + // 获得类的全名,包括包名 + String clsName = cls.getName() + ".class"; + // 获得传入参数所在的包 + Package pack = cls.getPackage(); + String path = ""; + // 如果不是匿名包,将包名转化为路径 + if (pack != null) { + String packName = pack.getName(); + String javaSpot = "java."; + String javaxSpot = "javax."; + // 此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库 + if (packName.startsWith(javaSpot) || packName.startsWith(javaxSpot)) { + throw new java.lang.IllegalArgumentException("不要传送系统类!"); + } + // 在类的名称中,去掉包名的部分,获得类的文件名 + clsName = clsName.substring(packName.length() + 1); + // 判定包名是否是简单包名,如果是,则直接将包名转换为路径, + if (packName.indexOf(SymbolConstant.SPOT) < 0) { + path = packName + "/"; + } else { // 否则按照包名的组成部分,将包名转换为路径 - int start = 0, end = 0; - end = packName.indexOf("."); - StringBuilder pathBuilder = new StringBuilder(); - while (end != -1) { + int start = 0, end = 0; + end = packName.indexOf("."); + StringBuilder pathBuilder = new StringBuilder(); + while (end != -1) { pathBuilder.append(packName, start, end).append("/"); - start = end + 1; - end = packName.indexOf(".", start); - } - if(oConvertUtils.isNotEmpty(pathBuilder.toString())){ + start = end + 1; + end = packName.indexOf(".", start); + } + if (oConvertUtils.isNotEmpty(pathBuilder.toString())) { path = pathBuilder.toString(); } - path = path + packName.substring(start) + "/"; - } - } - // 调用ClassLoader的getResource方法,传入包含路径信息的类文件名 - java.net.URL url = loader.getResource(path + clsName); - // 从URL对象中获取路径信息 - String realPath = url.getPath(); - // 去掉路径信息中的协议名"file:" - int pos = realPath.indexOf("file:"); - if (pos > -1) { - realPath = realPath.substring(pos + 5); - } - // 去掉路径信息最后包含类文件信息的部分,得到类所在的路径 - pos = realPath.indexOf(path + clsName); - realPath = realPath.substring(0, pos - 1); - // 如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名 - if (realPath.endsWith(SymbolConstant.EXCLAMATORY_MARK)) { - realPath = realPath.substring(0, realPath.lastIndexOf("/")); - } + path = path + packName.substring(start) + "/"; + } + } + // 调用ClassLoader的getResource方法,传入包含路径信息的类文件名 + java.net.URL url = loader.getResource(path + clsName); + // 从URL对象中获取路径信息 + String realPath = url.getPath(); + // 去掉路径信息中的协议名"file:" + int pos = realPath.indexOf("file:"); + if (pos > -1) { + realPath = realPath.substring(pos + 5); + } + // 去掉路径信息最后包含类文件信息的部分,得到类所在的路径 + pos = realPath.indexOf(path + clsName); + realPath = realPath.substring(0, pos - 1); + // 如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名 + if (realPath.endsWith(SymbolConstant.EXCLAMATORY_MARK)) { + realPath = realPath.substring(0, realPath.lastIndexOf("/")); + } /*------------------------------------------------------------ ClassLoader的getResource方法使用了utf-8对路径信息进行了编码,当路径 中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要 的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的 中文及空格路径 -------------------------------------------------------------*/ - try { - realPath = java.net.URLDecoder.decode(realPath, "utf-8"); - } catch (Exception e) { - throw new RuntimeException(e); - } - return realPath; - }// getAppPath定义结束 + try { + realPath = java.net.URLDecoder.decode(realPath, "utf-8"); + } catch (Exception e) { + throw new RuntimeException(e); + } + return realPath; + }// getAppPath定义结束 } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/PasswordUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/PasswordUtil.java index aaae509..83d83d4 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/PasswordUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/PasswordUtil.java @@ -1,12 +1,12 @@ package org.jeecg.common.util; -import java.security.Key; -import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; +import java.security.Key; +import java.security.SecureRandom; /** * @Description: 密码工具类 @@ -14,178 +14,167 @@ import javax.crypto.spec.PBEParameterSpec; */ public class PasswordUtil { - /** - * JAVA6支持以下任意一种算法 PBEWITHMD5ANDDES PBEWITHMD5ANDTRIPLEDES - * PBEWITHSHAANDDESEDE PBEWITHSHA1ANDRC2_40 PBKDF2WITHHMACSHA1 - * */ + /** + * JAVA6支持以下任意一种算法 PBEWITHMD5ANDDES PBEWITHMD5ANDTRIPLEDES + * PBEWITHSHAANDDESEDE PBEWITHSHA1ANDRC2_40 PBKDF2WITHHMACSHA1 + * */ /** * 定义使用的算法为:PBEWITHMD5andDES算法 * 加密算法 */ - public static final String ALGORITHM = "PBEWithMD5AndDES"; + public static final String ALGORITHM = "PBEWithMD5AndDES"; /** * 定义使用的算法为:PBEWITHMD5andDES算法 * 密钥 */ - public static final String SALT = "63293188"; + public static final String SALT = "63293188"; - /** - * 定义迭代次数为1000次 - */ - private static final int ITERATIONCOUNT = 1000; + /** + * 定义迭代次数为1000次 + */ + private static final int ITERATIONCOUNT = 1000; - /** - * 获取加密算法中使用的盐值,解密中使用的盐值必须与加密中使用的相同才能完成操作. 盐长度必须为8字节 - * - * @return byte[] 盐值 - * */ - public static byte[] getSalt() throws Exception { - // 实例化安全随机数 - SecureRandom random = new SecureRandom(); - // 产出盐 - return random.generateSeed(8); - } + /** + * 获取加密算法中使用的盐值,解密中使用的盐值必须与加密中使用的相同才能完成操作. 盐长度必须为8字节 + * + * @return byte[] 盐值 + */ + public static byte[] getSalt() throws Exception { + // 实例化安全随机数 + SecureRandom random = new SecureRandom(); + // 产出盐 + return random.generateSeed(8); + } - public static byte[] getStaticSalt() { - // 产出盐 - return SALT.getBytes(); - } + public static byte[] getStaticSalt() { + // 产出盐 + return SALT.getBytes(); + } - /** - * 根据PBE密码生成一把密钥 - * - * @param password - * 生成密钥时所使用的密码 - * @return Key PBE算法密钥 - * */ - private static Key getPbeKey(String password) { - // 实例化使用的算法 - SecretKeyFactory keyFactory; - SecretKey secretKey = null; - try { - keyFactory = SecretKeyFactory.getInstance(ALGORITHM); - // 设置PBE密钥参数 - PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray()); - // 生成密钥 - secretKey = keyFactory.generateSecret(keySpec); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + /** + * 根据PBE密码生成一把密钥 + * + * @param password 生成密钥时所使用的密码 + * @return Key PBE算法密钥 + */ + private static Key getPbeKey(String password) { + // 实例化使用的算法 + SecretKeyFactory keyFactory; + SecretKey secretKey = null; + try { + keyFactory = SecretKeyFactory.getInstance(ALGORITHM); + // 设置PBE密钥参数 + PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray()); + // 生成密钥 + secretKey = keyFactory.generateSecret(keySpec); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } - return secretKey; - } + return secretKey; + } - /** - * 加密明文字符串 - * - * @param plaintext - * 待加密的明文字符串 - * @param password - * 生成密钥时所使用的密码 - * @param salt - * 盐值 - * @return 加密后的密文字符串 - * @throws Exception - */ - public static String encrypt(String plaintext, String password, String salt) { + /** + * 加密明文字符串 + * + * @param plaintext 待加密的明文字符串 + * @param password 生成密钥时所使用的密码 + * @param salt 盐值 + * @return 加密后的密文字符串 + * @throws Exception + */ + public static String encrypt(String plaintext, String password, String salt) { - Key key = getPbeKey(password); - byte[] encipheredData = null; - PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT); - try { - Cipher cipher = Cipher.getInstance(ALGORITHM); + Key key = getPbeKey(password); + byte[] encipheredData = null; + PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT); + try { + Cipher cipher = Cipher.getInstance(ALGORITHM); - cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec); - //update-begin-author:sccott date:20180815 for:中文作为用户名时,加密的密码windows和linux会得到不同的结果 gitee/issues/IZUD7 - encipheredData = cipher.doFinal(plaintext.getBytes("utf-8")); - //update-end-author:sccott date:20180815 for:中文作为用户名时,加密的密码windows和linux会得到不同的结果 gitee/issues/IZUD7 - } catch (Exception e) { - } - return bytesToHexString(encipheredData); - } + cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec); + //update-begin-author:sccott date:20180815 for:中文作为用户名时,加密的密码windows和linux会得到不同的结果 gitee/issues/IZUD7 + encipheredData = cipher.doFinal(plaintext.getBytes("utf-8")); + //update-end-author:sccott date:20180815 for:中文作为用户名时,加密的密码windows和linux会得到不同的结果 gitee/issues/IZUD7 + } catch (Exception e) { + } + return bytesToHexString(encipheredData); + } - /** - * 解密密文字符串 - * - * @param ciphertext - * 待解密的密文字符串 - * @param password - * 生成密钥时所使用的密码(如需解密,该参数需要与加密时使用的一致) - * @param salt - * 盐值(如需解密,该参数需要与加密时使用的一致) - * @return 解密后的明文字符串 - * @throws Exception - */ - public static String decrypt(String ciphertext, String password, String salt) { + /** + * 解密密文字符串 + * + * @param ciphertext 待解密的密文字符串 + * @param password 生成密钥时所使用的密码(如需解密,该参数需要与加密时使用的一致) + * @param salt 盐值(如需解密,该参数需要与加密时使用的一致) + * @return 解密后的明文字符串 + * @throws Exception + */ + public static String decrypt(String ciphertext, String password, String salt) { - Key key = getPbeKey(password); - byte[] passDec = null; - PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT); - try { - Cipher cipher = Cipher.getInstance(ALGORITHM); + Key key = getPbeKey(password); + byte[] passDec = null; + PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT); + try { + Cipher cipher = Cipher.getInstance(ALGORITHM); - cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec); + cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec); - passDec = cipher.doFinal(hexStringToBytes(ciphertext)); - } + passDec = cipher.doFinal(hexStringToBytes(ciphertext)); + } catch (Exception e) { + // TODO: handle exception + } + return new String(passDec); + } - catch (Exception e) { - // TODO: handle exception - } - return new String(passDec); - } + /** + * 将字节数组转换为十六进制字符串 + * + * @param src 字节数组 + * @return + */ + public static String bytesToHexString(byte[] src) { + StringBuilder stringBuilder = new StringBuilder(""); + if (src == null || src.length <= 0) { + return null; + } + for (int i = 0; i < src.length; i++) { + int v = src[i] & 0xFF; + String hv = Integer.toHexString(v); + if (hv.length() < 2) { + stringBuilder.append(0); + } + stringBuilder.append(hv); + } + return stringBuilder.toString(); + } - /** - * 将字节数组转换为十六进制字符串 - * - * @param src - * 字节数组 - * @return - */ - public static String bytesToHexString(byte[] src) { - StringBuilder stringBuilder = new StringBuilder(""); - if (src == null || src.length <= 0) { - return null; - } - for (int i = 0; i < src.length; i++) { - int v = src[i] & 0xFF; - String hv = Integer.toHexString(v); - if (hv.length() < 2) { - stringBuilder.append(0); - } - stringBuilder.append(hv); - } - return stringBuilder.toString(); - } + /** + * 将十六进制字符串转换为字节数组 + * + * @param hexString 十六进制字符串 + * @return + */ + public static byte[] hexStringToBytes(String hexString) { + if (hexString == null || "".equals(hexString)) { + return null; + } + hexString = hexString.toUpperCase(); + int length = hexString.length() / 2; + char[] hexChars = hexString.toCharArray(); + byte[] d = new byte[length]; + for (int i = 0; i < length; i++) { + int pos = i * 2; + d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); + } + return d; + } - /** - * 将十六进制字符串转换为字节数组 - * - * @param hexString - * 十六进制字符串 - * @return - */ - public static byte[] hexStringToBytes(String hexString) { - if (hexString == null || "".equals(hexString)) { - return null; - } - hexString = hexString.toUpperCase(); - int length = hexString.length() / 2; - char[] hexChars = hexString.toCharArray(); - byte[] d = new byte[length]; - for (int i = 0; i < length; i++) { - int pos = i * 2; - d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); - } - return d; - } - - private static byte charToByte(char c) { - return (byte) "0123456789ABCDEF".indexOf(c); - } + private static byte charToByte(char c) { + return (byte) "0123456789ABCDEF".indexOf(c); + } } \ No newline at end of file diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/ReflectHelper.java b/physical-base-core/src/main/java/org/jeecg/common/util/ReflectHelper.java index 832f6b9..d9a801b 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/ReflectHelper.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/ReflectHelper.java @@ -256,16 +256,17 @@ public class ReflectHelper { /** * 判断给定的字段是不是类中的属性 + * * @param field 字段名 * @param clazz 类对象 * @return */ - public static boolean isClassField(String field, Class clazz){ + public static boolean isClassField(String field, Class clazz) { Field[] fields = clazz.getDeclaredFields(); - for(int i=0;i getClassFields(Class clazz) { List list = new ArrayList(); Field[] fields; - do{ + do { fields = clazz.getDeclaredFields(); - for(int i = 0;i allFields = getClassFields(clazz); List searchFields = allFields.stream().filter(a -> a.getName().equals(name)).collect(Collectors.toList()); - if(searchFields!=null && searchFields.size()>0){ + if (searchFields != null && searchFields.size() > 0) { field = searchFields.get(0); } } if (field != null) { TableField tableField = field.getAnnotation(TableField.class); - if (tableField != null){ - if(tableField.exist() == false){ + if (tableField != null) { + if (tableField.exist() == false) { //如果设置了TableField false 这个字段不需要处理 return null; - }else{ + } else { String column = tableField.value(); //如果设置了TableField value 这个字段是实体字段 - if(!"".equals(column)){ + if (!"".equals(column)) { return column; } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/RestUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/RestUtil.java index ef0d10f..7bcac49 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/RestUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/RestUtil.java @@ -22,14 +22,14 @@ public class RestUtil { private static String domain = null; private static String path = null; - + private static String getDomain() { if (domain == null) { domain = SpringContextUtils.getDomain(); // issues/2959 // 微服务版集成企业微信单点登录 // 因为微服务版没有端口号,导致 SpringContextUtils.getDomain() 方法获取的域名的端口号变成了:-1所以出问题了,只需要把这个-1给去掉就可以了。 - String port=":-1"; + String port = ":-1"; if (domain.endsWith(port)) { domain = domain.substring(0, domain.length() - 3); } @@ -192,7 +192,7 @@ public class RestUtil { * @return ResponseEntity */ public static ResponseEntity request(String url, HttpMethod method, HttpHeaders headers, JSONObject variables, Object params, Class responseType) { - log.info(" RestUtil --- request --- url = "+ url); + log.info(" RestUtil --- request --- url = " + url); if (StringUtils.isEmpty(url)) { throw new RuntimeException("url 不能为空"); } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/SpringContextUtils.java b/physical-base-core/src/main/java/org/jeecg/common/util/SpringContextUtils.java index 8a6a4aa..eee0a98 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/SpringContextUtils.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/SpringContextUtils.java @@ -2,7 +2,6 @@ package org.jeecg.common.util; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.ServiceNameConstants; import org.springframework.beans.BeansException; @@ -19,95 +18,96 @@ import org.springframework.web.context.request.ServletRequestAttributes; @Component public class SpringContextUtils implements ApplicationContextAware { - /** - * 上下文对象实例 - */ - private static ApplicationContext applicationContext; + /** + * 上下文对象实例 + */ + private static ApplicationContext applicationContext; - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - SpringContextUtils.applicationContext = applicationContext; - } + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtils.applicationContext = applicationContext; + } - /** - * 获取applicationContext - * - * @return - */ - public static ApplicationContext getApplicationContext() { - return applicationContext; - } + /** + * 获取applicationContext + * + * @return + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } - /** - * 获取HttpServletRequest - */ - public static HttpServletRequest getHttpServletRequest() { - return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); - } - /** - * 获取HttpServletResponse - */ - public static HttpServletResponse getHttpServletResponse() { - return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); - } + /** + * 获取HttpServletRequest + */ + public static HttpServletRequest getHttpServletRequest() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } - /** - * 获取项目根路径 basePath - */ - public static String getDomain(){ - HttpServletRequest request = getHttpServletRequest(); - StringBuffer url = request.getRequestURL(); - //1.微服务情况下,获取gateway的basePath - String basePath = request.getHeader(ServiceNameConstants.X_GATEWAY_BASE_PATH); - if(oConvertUtils.isNotEmpty(basePath)){ - return basePath; - }else{ - String domain = url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); - //2.【兼容】SSL认证之后,request.getScheme()获取不到https的问题 - // https://blog.csdn.net/weixin_34376986/article/details/89767950 - String scheme = request.getHeader(CommonConstant.X_FORWARDED_SCHEME); - if(scheme!=null && !request.getScheme().equals(scheme)){ - domain = domain.replace(request.getScheme(),scheme); - } - return domain; - } - } + /** + * 获取HttpServletResponse + */ + public static HttpServletResponse getHttpServletResponse() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); + } - public static String getOrigin(){ - HttpServletRequest request = getHttpServletRequest(); - return request.getHeader("Origin"); - } - - /** - * 通过name获取 Bean. - * - * @param name - * @return - */ - public static Object getBean(String name) { - return getApplicationContext().getBean(name); - } + /** + * 获取项目根路径 basePath + */ + public static String getDomain() { + HttpServletRequest request = getHttpServletRequest(); + StringBuffer url = request.getRequestURL(); + //1.微服务情况下,获取gateway的basePath + String basePath = request.getHeader(ServiceNameConstants.X_GATEWAY_BASE_PATH); + if (oConvertUtils.isNotEmpty(basePath)) { + return basePath; + } else { + String domain = url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); + //2.【兼容】SSL认证之后,request.getScheme()获取不到https的问题 + // https://blog.csdn.net/weixin_34376986/article/details/89767950 + String scheme = request.getHeader(CommonConstant.X_FORWARDED_SCHEME); + if (scheme != null && !request.getScheme().equals(scheme)) { + domain = domain.replace(request.getScheme(), scheme); + } + return domain; + } + } - /** - * 通过class获取Bean. - * - * @param clazz - * @param - * @return - */ - public static T getBean(Class clazz) { - return getApplicationContext().getBean(clazz); - } + public static String getOrigin() { + HttpServletRequest request = getHttpServletRequest(); + return request.getHeader("Origin"); + } - /** - * 通过name,以及Clazz返回指定的Bean - * - * @param name - * @param clazz - * @param - * @return - */ - public static T getBean(String name, Class clazz) { - return getApplicationContext().getBean(name, clazz); - } + /** + * 通过name获取 Bean. + * + * @param name + * @return + */ + public static Object getBean(String name) { + return getApplicationContext().getBean(name); + } + + /** + * 通过class获取Bean. + * + * @param clazz + * @param + * @return + */ + public static T getBean(Class clazz) { + return getApplicationContext().getBean(clazz); + } + + /** + * 通过name,以及Clazz返回指定的Bean + * + * @param name + * @param clazz + * @param + * @return + */ + public static T getBean(String name, Class clazz) { + return getApplicationContext().getBean(name, clazz); + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/SqlInjectionUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/SqlInjectionUtil.java index c11c62e..d8e4352 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/SqlInjectionUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/SqlInjectionUtil.java @@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.exception.JeecgSqlInjectionException; + import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; @@ -12,417 +13,425 @@ import java.util.regex.Pattern; /** * sql注入处理工具类 - * + * * @author zhoujf */ @Slf4j -public class SqlInjectionUtil { - /** - * 默认—sql注入关键词 - */ - private final static String XSS_STR = "and |exec |peformance_schema|information_schema|extractvalue|updatexml|geohash|gtid_subset|gtid_subtract|insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|or |+|--"; - /** - * online报表专用—sql注入关键词 - */ - private static String specialReportXssStr = "exec |peformance_schema|information_schema|extractvalue|updatexml|geohash|gtid_subset|gtid_subtract|insert |alter |delete |grant |update |drop |master |truncate |declare |--"; - /** - * 字典专用—sql注入关键词 - */ - private static String specialDictSqlXssStr = "exec |peformance_schema|information_schema|extractvalue|updatexml|geohash|gtid_subset|gtid_subtract|insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|+|--"; - /** - * 完整匹配的key,不需要考虑前空格 - */ - private static List FULL_MATCHING_KEYWRODS = new ArrayList<>(); - static { - FULL_MATCHING_KEYWRODS.add(";"); - FULL_MATCHING_KEYWRODS.add("+"); - FULL_MATCHING_KEYWRODS.add("--"); - } - - - /** - * sql注入风险的 正则关键字 - * - * 函数匹配,需要用正则模式 - */ - private final static String[] XSS_REGULAR_STR_ARRAY = new String[]{ - "chr\\s*\\(", - "mid\\s*\\(", - " char\\s*\\(", - "sleep\\s*\\(", - "user\\s*\\(", - "show\\s+tables", - "user[\\s]*\\([\\s]*\\)", - "show\\s+databases", - "sleep\\(\\d*\\)", - "sleep\\(.*\\)", - }; - /** - * sql注释的正则 - */ - private final static Pattern SQL_ANNOTATION = Pattern.compile("/\\*[\\s\\S]*\\*/"); - private final static String SQL_ANNOTATION2 = "--"; - - /** - * sql注入提示语 - */ - private final static String SQL_INJECTION_KEYWORD_TIP = "请注意,存在SQL注入关键词---> {}"; - private final static String SQL_INJECTION_TIP = "请注意,值可能存在SQL注入风险!--->"; - private final static String SQL_INJECTION_TIP_VARIABLE = "请注意,值可能存在SQL注入风险!---> {}"; - +public class SqlInjectionUtil { + /** + * 默认—sql注入关键词 + */ + private final static String XSS_STR = "and |exec |peformance_schema|information_schema|extractvalue|updatexml|geohash|gtid_subset|gtid_subtract|insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|or |+|--"; + /** + * online报表专用—sql注入关键词 + */ + private static String specialReportXssStr = "exec |peformance_schema|information_schema|extractvalue|updatexml|geohash|gtid_subset|gtid_subtract|insert |alter |delete |grant |update |drop |master |truncate |declare |--"; + /** + * 字典专用—sql注入关键词 + */ + private static String specialDictSqlXssStr = "exec |peformance_schema|information_schema|extractvalue|updatexml|geohash|gtid_subset|gtid_subtract|insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|+|--"; + /** + * 完整匹配的key,不需要考虑前空格 + */ + private static List FULL_MATCHING_KEYWRODS = new ArrayList<>(); - /** - * sql注入过滤处理,遇到注入关键字抛异常 - * @param values - */ - public static void filterContentMulti(String... values) { - filterContent(values, null); - } + static { + FULL_MATCHING_KEYWRODS.add(";"); + FULL_MATCHING_KEYWRODS.add("+"); + FULL_MATCHING_KEYWRODS.add("--"); + } - /** - * 校验比较严格 - * - * sql注入过滤处理,遇到注入关键字抛异常 - * - * @param value - * @return - */ - public static void filterContent(String value, String customXssString) { - if (value == null || "".equals(value)) { - return; - } - // 一、校验sql注释 不允许有sql注释 - checkSqlAnnotation(value); - // 转为小写进行后续比较 - value = value.toLowerCase().trim(); - - // 二、SQL注入检测存在绕过风险 (普通文本校验) - //https://gitee.com/jeecg/jeecg-boot/issues/I4NZGE - String[] xssArr = XSS_STR.split("\\|"); - for (int i = 0; i < xssArr.length; i++) { - if (value.indexOf(xssArr[i]) > -1) { - log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, xssArr[i]); - log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); - throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); - } - } - // 三、SQL注入检测存在绕过风险 (自定义传入普通文本校验) - if (customXssString != null) { - String[] xssArr2 = customXssString.split("\\|"); - for (int i = 0; i < xssArr2.length; i++) { - if (value.indexOf(xssArr2[i]) > -1) { - log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, xssArr2[i]); - log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); - throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); - } - } - } - - // 四、SQL注入检测存在绕过风险 (正则校验) - for (String regularOriginal : XSS_REGULAR_STR_ARRAY) { - String regular = ".*" + regularOriginal + ".*"; - if (Pattern.matches(regular, value)) { - log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, regularOriginal); - log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); - throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); - } - } - return; - } - - /** - * 判断是否存在SQL注入关键词字符串 - * - * @param keyword - * @return - */ - @SuppressWarnings("AlibabaUndefineMagicConstant") - private static boolean isExistSqlInjectKeyword(String sql, String keyword) { - if (sql.startsWith(keyword.trim())) { - return true; - } else if (sql.contains(keyword)) { - // 需要匹配的,sql注入关键词 - String matchingText = " " + keyword; - if(FULL_MATCHING_KEYWRODS.contains(keyword)){ - matchingText = keyword; - } - - if (sql.contains(matchingText)) { - return true; - } else { - String regularStr = "\\s+\\S+" + keyword; - List resultFindAll = ReUtil.findAll(regularStr, sql, 0, new ArrayList()); - for (String res : resultFindAll) { - log.info("isExistSqlInjectKeyword —- 匹配到的SQL注入关键词:{}", res); - /** - * SQL注入中可以替换空格的字符(%09 %0A %0D +都可以替代空格) - * http://blog.chinaunix.net/uid-12501104-id-2932639.html - * https://www.cnblogs.com/Vinson404/p/7253255.html - * */ - if (res.contains("%") || res.contains("+") || res.contains("#") || res.contains("/") || res.contains(")")) { - return true; - } - } - } - } - return false; - } - - /** - * sql注入过滤处理,遇到注入关键字抛异常 - * - * @param values - * @return - */ - public static void filterContent(String[] values, String customXssString) { - for (String val : values) { - if (oConvertUtils.isEmpty(val)) { - return; - } - filterContent(val, customXssString); - } - return; - } - - /** - * 【提醒:不通用】 - * 仅用于字典条件SQL参数,注入过滤 - * - * @param value - * @return - */ - public static void specialFilterContentForDictSql(String value) { - String[] xssArr = specialDictSqlXssStr.split("\\|"); - if (value == null || "".equals(value)) { - return; - } - // 一、校验sql注释 不允许有sql注释 - checkSqlAnnotation(value); - value = value.toLowerCase().trim(); - - // 二、SQL注入检测存在绕过风险 (普通文本校验) - for (int i = 0; i < xssArr.length; i++) { - if (isExistSqlInjectKeyword(value, xssArr[i])) { - log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, xssArr[i]); - log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); - throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); - } - } - - // 三、SQL注入检测存在绕过风险 (正则校验) - for (String regularOriginal : XSS_REGULAR_STR_ARRAY) { - String regular = ".*" + regularOriginal + ".*"; - if (Pattern.matches(regular, value)) { - log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, regularOriginal); - log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); - throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); - } - } - return; - } /** - * 【提醒:不通用】 - * 仅用于Online报表SQL解析,注入过滤 + * sql注入风险的 正则关键字 + *

+ * 函数匹配,需要用正则模式 + */ + private final static String[] XSS_REGULAR_STR_ARRAY = new String[]{ + "chr\\s*\\(", + "mid\\s*\\(", + " char\\s*\\(", + "sleep\\s*\\(", + "user\\s*\\(", + "show\\s+tables", + "user[\\s]*\\([\\s]*\\)", + "show\\s+databases", + "sleep\\(\\d*\\)", + "sleep\\(.*\\)", + }; + /** + * sql注释的正则 + */ + private final static Pattern SQL_ANNOTATION = Pattern.compile("/\\*[\\s\\S]*\\*/"); + private final static String SQL_ANNOTATION2 = "--"; + + /** + * sql注入提示语 + */ + private final static String SQL_INJECTION_KEYWORD_TIP = "请注意,存在SQL注入关键词---> {}"; + private final static String SQL_INJECTION_TIP = "请注意,值可能存在SQL注入风险!--->"; + private final static String SQL_INJECTION_TIP_VARIABLE = "请注意,值可能存在SQL注入风险!---> {}"; + + + /** + * sql注入过滤处理,遇到注入关键字抛异常 + * + * @param values + */ + public static void filterContentMulti(String... values) { + filterContent(values, null); + } + + /** + * 校验比较严格 + *

+ * sql注入过滤处理,遇到注入关键字抛异常 + * * @param value * @return */ - public static void specialFilterContentForOnlineReport(String value) { - String[] xssArr = specialReportXssStr.split("\\|"); - if (value == null || "".equals(value)) { - return; - } - // 一、校验sql注释 不允许有sql注释 - checkSqlAnnotation(value); - value = value.toLowerCase().trim(); - - // 二、SQL注入检测存在绕过风险 (普通文本校验) - for (int i = 0; i < xssArr.length; i++) { - if (isExistSqlInjectKeyword(value, xssArr[i])) { - log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, xssArr[i]); - log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); - throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); - } - } + public static void filterContent(String value, String customXssString) { + if (value == null || "".equals(value)) { + return; + } + // 一、校验sql注释 不允许有sql注释 + checkSqlAnnotation(value); + // 转为小写进行后续比较 + value = value.toLowerCase().trim(); - // 三、SQL注入检测存在绕过风险 (正则校验) - for (String regularOriginal : XSS_REGULAR_STR_ARRAY) { - String regular = ".*" + regularOriginal + ".*"; - if (Pattern.matches(regular, value)) { - log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, regularOriginal); - log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); - throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); - } - } - return; - } + // 二、SQL注入检测存在绕过风险 (普通文本校验) + //https://gitee.com/jeecg/jeecg-boot/issues/I4NZGE + String[] xssArr = XSS_STR.split("\\|"); + for (int i = 0; i < xssArr.length; i++) { + if (value.indexOf(xssArr[i]) > -1) { + log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, xssArr[i]); + log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); + throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); + } + } + // 三、SQL注入检测存在绕过风险 (自定义传入普通文本校验) + if (customXssString != null) { + String[] xssArr2 = customXssString.split("\\|"); + for (int i = 0; i < xssArr2.length; i++) { + if (value.indexOf(xssArr2[i]) > -1) { + log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, xssArr2[i]); + log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); + throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); + } + } + } + + // 四、SQL注入检测存在绕过风险 (正则校验) + for (String regularOriginal : XSS_REGULAR_STR_ARRAY) { + String regular = ".*" + regularOriginal + ".*"; + if (Pattern.matches(regular, value)) { + log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, regularOriginal); + log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); + throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); + } + } + return; + } + + /** + * 判断是否存在SQL注入关键词字符串 + * + * @param keyword + * @return + */ + @SuppressWarnings("AlibabaUndefineMagicConstant") + private static boolean isExistSqlInjectKeyword(String sql, String keyword) { + if (sql.startsWith(keyword.trim())) { + return true; + } else if (sql.contains(keyword)) { + // 需要匹配的,sql注入关键词 + String matchingText = " " + keyword; + if (FULL_MATCHING_KEYWRODS.contains(keyword)) { + matchingText = keyword; + } + + if (sql.contains(matchingText)) { + return true; + } else { + String regularStr = "\\s+\\S+" + keyword; + List resultFindAll = ReUtil.findAll(regularStr, sql, 0, new ArrayList()); + for (String res : resultFindAll) { + log.info("isExistSqlInjectKeyword —- 匹配到的SQL注入关键词:{}", res); + /** + * SQL注入中可以替换空格的字符(%09 %0A %0D +都可以替代空格) + * http://blog.chinaunix.net/uid-12501104-id-2932639.html + * https://www.cnblogs.com/Vinson404/p/7253255.html + * */ + if (res.contains("%") || res.contains("+") || res.contains("#") || res.contains("/") || res.contains(")")) { + return true; + } + } + } + } + return false; + } + + /** + * sql注入过滤处理,遇到注入关键字抛异常 + * + * @param values + * @return + */ + public static void filterContent(String[] values, String customXssString) { + for (String val : values) { + if (oConvertUtils.isEmpty(val)) { + return; + } + filterContent(val, customXssString); + } + return; + } + + /** + * 【提醒:不通用】 + * 仅用于字典条件SQL参数,注入过滤 + * + * @param value + * @return + */ + public static void specialFilterContentForDictSql(String value) { + String[] xssArr = specialDictSqlXssStr.split("\\|"); + if (value == null || "".equals(value)) { + return; + } + // 一、校验sql注释 不允许有sql注释 + checkSqlAnnotation(value); + value = value.toLowerCase().trim(); + + // 二、SQL注入检测存在绕过风险 (普通文本校验) + for (int i = 0; i < xssArr.length; i++) { + if (isExistSqlInjectKeyword(value, xssArr[i])) { + log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, xssArr[i]); + log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); + throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); + } + } + + // 三、SQL注入检测存在绕过风险 (正则校验) + for (String regularOriginal : XSS_REGULAR_STR_ARRAY) { + String regular = ".*" + regularOriginal + ".*"; + if (Pattern.matches(regular, value)) { + log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, regularOriginal); + log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); + throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); + } + } + return; + } + + /** + * 【提醒:不通用】 + * 仅用于Online报表SQL解析,注入过滤 + * + * @param value + * @return + */ + public static void specialFilterContentForOnlineReport(String value) { + String[] xssArr = specialReportXssStr.split("\\|"); + if (value == null || "".equals(value)) { + return; + } + // 一、校验sql注释 不允许有sql注释 + checkSqlAnnotation(value); + value = value.toLowerCase().trim(); + + // 二、SQL注入检测存在绕过风险 (普通文本校验) + for (int i = 0; i < xssArr.length; i++) { + if (isExistSqlInjectKeyword(value, xssArr[i])) { + log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, xssArr[i]); + log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); + throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); + } + } + + // 三、SQL注入检测存在绕过风险 (正则校验) + for (String regularOriginal : XSS_REGULAR_STR_ARRAY) { + String regular = ".*" + regularOriginal + ".*"; + if (Pattern.matches(regular, value)) { + log.error(SqlInjectionUtil.SQL_INJECTION_KEYWORD_TIP, regularOriginal); + log.error(SqlInjectionUtil.SQL_INJECTION_TIP_VARIABLE, value); + throw new JeecgSqlInjectionException(SqlInjectionUtil.SQL_INJECTION_TIP + value); + } + } + return; + } - /** - * 校验是否有sql注释 - * @return - */ - public static void checkSqlAnnotation(String str){ - if(str.contains(SQL_ANNOTATION2)){ - String error = "请注意,SQL中不允许含注释,有安全风险!"; - log.error(error); - throw new RuntimeException(error); - } - - - Matcher matcher = SQL_ANNOTATION.matcher(str); - if(matcher.find()){ - String error = "请注意,值可能存在SQL注入风险---> \\*.*\\"; - log.error(error); - throw new JeecgSqlInjectionException(error); - } - } + /** + * 校验是否有sql注释 + * + * @return + */ + public static void checkSqlAnnotation(String str) { + if (str.contains(SQL_ANNOTATION2)) { + String error = "请注意,SQL中不允许含注释,有安全风险!"; + log.error(error); + throw new RuntimeException(error); + } - /** - * 返回查询表名 - *

- * sql注入过滤处理,遇到注入关键字抛异常 - * - * @param table - */ - private static Pattern tableNamePattern = Pattern.compile("^[a-zA-Z][a-zA-Z0-9_\\$]{0,63}$"); - public static String getSqlInjectTableName(String table) { - if(oConvertUtils.isEmpty(table)){ - return table; - } - - //update-begin---author:scott ---date:2024-05-28 for:表单设计器列表翻译存在表名带条件,导致翻译出问题---- - int index = table.toLowerCase().indexOf(" where "); - if (index != -1) { - table = table.substring(0, index); - log.info("截掉where之后的新表名:" + table); - } - //update-end---author:scott ---date::2024-05-28 for:表单设计器列表翻译存在表名带条件,导致翻译出问题---- - - table = table.trim(); - /** - * 检验表名是否合法 - * - * 表名只能由字母、数字和下划线组成。 - * 表名必须以字母开头。 - * 表名长度通常有限制,例如最多为 64 个字符。 - */ - boolean isValidTableName = tableNamePattern.matcher(table).matches(); - if (!isValidTableName) { - String errorMsg = "表名不合法,存在SQL注入风险!--->" + table; - log.error(errorMsg); - throw new JeecgSqlInjectionException(errorMsg); - } - - //进一步验证是否存在SQL注入风险 - filterContentMulti(table); - return table; - } + Matcher matcher = SQL_ANNOTATION.matcher(str); + if (matcher.find()) { + String error = "请注意,值可能存在SQL注入风险---> \\*.*\\"; + log.error(error); + throw new JeecgSqlInjectionException(error); + } + } - /** - * 返回查询字段 - *

- * sql注入过滤处理,遇到注入关键字抛异常 - * - * @param field - */ - static final Pattern fieldPattern = Pattern.compile("^[a-zA-Z0-9_]+$"); - public static String getSqlInjectField(String field) { - if(oConvertUtils.isEmpty(field)){ - return field; - } - - field = field.trim(); + /** + * 返回查询表名 + *

+ * sql注入过滤处理,遇到注入关键字抛异常 + * + * @param table + */ + private static Pattern tableNamePattern = Pattern.compile("^[a-zA-Z][a-zA-Z0-9_\\$]{0,63}$"); - if (field.contains(SymbolConstant.COMMA)) { - return getSqlInjectField(field.split(SymbolConstant.COMMA)); - } + public static String getSqlInjectTableName(String table) { + if (oConvertUtils.isEmpty(table)) { + return table; + } - /** - * 校验表字段是否有效 - * - * 字段定义只能是是字母 数字 下划线的组合(不允许有空格、转义字符串等) - */ - boolean isValidField = fieldPattern.matcher(field).matches(); - if (!isValidField) { - String errorMsg = "字段不合法,存在SQL注入风险!--->" + field; - log.error(errorMsg); - throw new JeecgSqlInjectionException(errorMsg); - } + //update-begin---author:scott ---date:2024-05-28 for:表单设计器列表翻译存在表名带条件,导致翻译出问题---- + int index = table.toLowerCase().indexOf(" where "); + if (index != -1) { + table = table.substring(0, index); + log.info("截掉where之后的新表名:" + table); + } + //update-end---author:scott ---date::2024-05-28 for:表单设计器列表翻译存在表名带条件,导致翻译出问题---- - //进一步验证是否存在SQL注入风险 - filterContentMulti(field); - return field; - } + table = table.trim(); + /** + * 检验表名是否合法 + * + * 表名只能由字母、数字和下划线组成。 + * 表名必须以字母开头。 + * 表名长度通常有限制,例如最多为 64 个字符。 + */ + boolean isValidTableName = tableNamePattern.matcher(table).matches(); + if (!isValidTableName) { + String errorMsg = "表名不合法,存在SQL注入风险!--->" + table; + log.error(errorMsg); + throw new JeecgSqlInjectionException(errorMsg); + } - /** - * 获取多个字段 - * 返回: 逗号拼接 - * - * @param fields - * @return - */ - public static String getSqlInjectField(String... fields) { - for (String s : fields) { - getSqlInjectField(s); - } - return String.join(SymbolConstant.COMMA, fields); - } + //进一步验证是否存在SQL注入风险 + filterContentMulti(table); + return table; + } - /** - * 获取排序字段 - * 返回:字符串 - * - * 1.将驼峰命名转化成下划线 - * 2.限制sql注入 - * @param sortField 排序字段 - * @return - */ - public static String getSqlInjectSortField(String sortField) { - String field = SqlInjectionUtil.getSqlInjectField(oConvertUtils.camelToUnderline(sortField)); - return field; - } + /** + * 返回查询字段 + *

+ * sql注入过滤处理,遇到注入关键字抛异常 + * + * @param field + */ + static final Pattern fieldPattern = Pattern.compile("^[a-zA-Z0-9_]+$"); - /** - * 获取多个排序字段 - * 返回:数组 - * - * 1.将驼峰命名转化成下划线 - * 2.限制sql注入 - * @param sortFields 多个排序字段 - * @return - */ - public static List getSqlInjectSortFields(String... sortFields) { - List list = new ArrayList(); - for (String sortField : sortFields) { - list.add(getSqlInjectSortField(sortField)); - } - return list; - } + public static String getSqlInjectField(String field) { + if (oConvertUtils.isEmpty(field)) { + return field; + } - /** - * 获取 orderBy type - * 返回:字符串 - *

- * 1.检测是否为 asc 或 desc 其中的一个 - * 2.限制sql注入 - * - * @param orderType - * @return - */ - public static String getSqlInjectOrderType(String orderType) { - if (orderType == null) { - return null; - } - orderType = orderType.trim(); - if (CommonConstant.ORDER_TYPE_ASC.equalsIgnoreCase(orderType)) { - return CommonConstant.ORDER_TYPE_ASC; - } else { - return CommonConstant.ORDER_TYPE_DESC; - } - } + field = field.trim(); + + if (field.contains(SymbolConstant.COMMA)) { + return getSqlInjectField(field.split(SymbolConstant.COMMA)); + } + + /** + * 校验表字段是否有效 + * + * 字段定义只能是是字母 数字 下划线的组合(不允许有空格、转义字符串等) + */ + boolean isValidField = fieldPattern.matcher(field).matches(); + if (!isValidField) { + String errorMsg = "字段不合法,存在SQL注入风险!--->" + field; + log.error(errorMsg); + throw new JeecgSqlInjectionException(errorMsg); + } + + //进一步验证是否存在SQL注入风险 + filterContentMulti(field); + return field; + } + + /** + * 获取多个字段 + * 返回: 逗号拼接 + * + * @param fields + * @return + */ + public static String getSqlInjectField(String... fields) { + for (String s : fields) { + getSqlInjectField(s); + } + return String.join(SymbolConstant.COMMA, fields); + } + + + /** + * 获取排序字段 + * 返回:字符串 + *

+ * 1.将驼峰命名转化成下划线 + * 2.限制sql注入 + * + * @param sortField 排序字段 + * @return + */ + public static String getSqlInjectSortField(String sortField) { + String field = SqlInjectionUtil.getSqlInjectField(oConvertUtils.camelToUnderline(sortField)); + return field; + } + + /** + * 获取多个排序字段 + * 返回:数组 + *

+ * 1.将驼峰命名转化成下划线 + * 2.限制sql注入 + * + * @param sortFields 多个排序字段 + * @return + */ + public static List getSqlInjectSortFields(String... sortFields) { + List list = new ArrayList(); + for (String sortField : sortFields) { + list.add(getSqlInjectSortField(sortField)); + } + return list; + } + + /** + * 获取 orderBy type + * 返回:字符串 + *

+ * 1.检测是否为 asc 或 desc 其中的一个 + * 2.限制sql注入 + * + * @param orderType + * @return + */ + public static String getSqlInjectOrderType(String orderType) { + if (orderType == null) { + return null; + } + orderType = orderType.trim(); + if (CommonConstant.ORDER_TYPE_ASC.equalsIgnoreCase(orderType)) { + return CommonConstant.ORDER_TYPE_ASC; + } else { + return CommonConstant.ORDER_TYPE_DESC; + } + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/TokenUtils.java b/physical-base-core/src/main/java/org/jeecg/common/util/TokenUtils.java index 290e61f..614f1d5 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/TokenUtils.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/TokenUtils.java @@ -1,5 +1,6 @@ package org.jeecg.common.util; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.CommonAPI; @@ -11,8 +12,6 @@ import org.jeecg.common.exception.JeecgBoot401Exception; import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.system.vo.LoginUser; -import jakarta.servlet.http.HttpServletRequest; - /** * @Author scott * @Date 2019/9/23 14:12 @@ -31,16 +30,17 @@ public class TokenUtils { if (request == null) { return null; } - + String token = request.getParameter("token"); if (token == null) { token = request.getHeader("X-Access-Token"); } return token; } - + /** * 获取 request 里传递的 token + * * @return */ public static String getTokenByRequest() { @@ -124,6 +124,7 @@ public class TokenUtils { /** * 刷新token(保证用户在线操作不掉线) + * * @param token * @param userName * @param passWord diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/UUIDGenerator.java b/physical-base-core/src/main/java/org/jeecg/common/util/UUIDGenerator.java index 9893f25..265d81d 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/UUIDGenerator.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/UUIDGenerator.java @@ -4,93 +4,92 @@ package org.jeecg.common.util; import java.net.InetAddress; /** - * - * @Author 张代浩 - * + * @Author 张代浩 */ public class UUIDGenerator { - - /** - * 产生一个32位的UUID - * - * @return - */ - public static String generate() { - return new StringBuilder(32).append(format(getIp())).append( - format(getJvm())).append(format(getHiTime())).append( - format(getLoTime())).append(format(getCount())).toString(); - - } + /** + * 产生一个32位的UUID + * + * @return + */ - private static final int IP; - static { - int ipadd; - try { - ipadd = toInt(InetAddress.getLocalHost().getAddress()); - } catch (Exception e) { - ipadd = 0; - } - IP = ipadd; - } + public static String generate() { + return new StringBuilder(32).append(format(getIp())).append( + format(getJvm())).append(format(getHiTime())).append( + format(getLoTime())).append(format(getCount())).toString(); - private static short counter = (short) 0; + } - private static final int JVM = (int) (System.currentTimeMillis() >>> 8); + private static final int IP; - private final static String format(int intval) { - String formatted = Integer.toHexString(intval); - StringBuilder buf = new StringBuilder("00000000"); - buf.replace(8 - formatted.length(), 8, formatted); - return buf.toString(); - } + static { + int ipadd; + try { + ipadd = toInt(InetAddress.getLocalHost().getAddress()); + } catch (Exception e) { + ipadd = 0; + } + IP = ipadd; + } - private final static String format(short shortval) { - String formatted = Integer.toHexString(shortval); - StringBuilder buf = new StringBuilder("0000"); - buf.replace(4 - formatted.length(), 4, formatted); - return buf.toString(); - } + private static short counter = (short) 0; - private final static int getJvm() { - return JVM; - } + private static final int JVM = (int) (System.currentTimeMillis() >>> 8); - private final static short getCount() { - synchronized (UUIDGenerator.class) { - if (counter < 0) { - counter = 0; - } - return counter++; - } - } + private final static String format(int intval) { + String formatted = Integer.toHexString(intval); + StringBuilder buf = new StringBuilder("00000000"); + buf.replace(8 - formatted.length(), 8, formatted); + return buf.toString(); + } - /** - * Unique in a local network - */ - private final static int getIp() { - return IP; - } + private final static String format(short shortval) { + String formatted = Integer.toHexString(shortval); + StringBuilder buf = new StringBuilder("0000"); + buf.replace(4 - formatted.length(), 4, formatted); + return buf.toString(); + } - /** - * Unique down to millisecond - */ - private final static short getHiTime() { - return (short) (System.currentTimeMillis() >>> 32); - } + private final static int getJvm() { + return JVM; + } - private final static int getLoTime() { - return (int) System.currentTimeMillis(); - } + private final static short getCount() { + synchronized (UUIDGenerator.class) { + if (counter < 0) { + counter = 0; + } + return counter++; + } + } - private final static int toInt(byte[] bytes) { - int result = 0; - int length = 4; - for (int i = 0; i < length; i++) { - result = (result << 8) - Byte.MIN_VALUE + (int) bytes[i]; - } - return result; - } + /** + * Unique in a local network + */ + private final static int getIp() { + return IP; + } + + /** + * Unique down to millisecond + */ + private final static short getHiTime() { + return (short) (System.currentTimeMillis() >>> 32); + } + + private final static int getLoTime() { + return (int) System.currentTimeMillis(); + } + + private final static int toInt(byte[] bytes) { + int result = 0; + int length = 4; + for (int i = 0; i < length; i++) { + result = (result << 8) - Byte.MIN_VALUE + (int) bytes[i]; + } + return result; + } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/YouBianCodeUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/YouBianCodeUtil.java index 3b939f5..049dd28 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/YouBianCodeUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/YouBianCodeUtil.java @@ -6,168 +6,171 @@ import io.netty.util.internal.StringUtil; * 流水号生成规则(按默认规则递增,数字从1-99开始递增,数字到99,递增字母;位数不够增加位数) * A001 * A001A002 - * @Author zhangdaihao * + * @Author zhangdaihao */ public class YouBianCodeUtil { - // 数字位数(默认生成3位的数字) + // 数字位数(默认生成3位的数字) - /**代表数字位数*/ - private static final int NUM_LENGTH = 2; + /** + * 代表数字位数 + */ + private static final int NUM_LENGTH = 2; - public static final int ZHANWEI_LENGTH = 1+ NUM_LENGTH; + public static final int ZHANWEI_LENGTH = 1 + NUM_LENGTH; - public static final char LETTER= 'Z'; + public static final char LETTER = 'Z'; - /** - * 根据前一个code,获取同级下一个code - * 例如:当前最大code为D01A04,下一个code为:D01A05 - * - * @param code - * @return - */ - public static synchronized String getNextYouBianCode(String code) { - String newcode = ""; - if (oConvertUtils.isEmpty(code)) { - String zimu = "A"; - String num = getStrNum(1); - newcode = zimu + num; - } else { - String beforeCode = code.substring(0, code.length() - 1- NUM_LENGTH); - String afterCode = code.substring(code.length() - 1 - NUM_LENGTH,code.length()); - char afterCodeZimu = afterCode.substring(0, 1).charAt(0); - Integer afterCodeNum = Integer.parseInt(afterCode.substring(1)); + /** + * 根据前一个code,获取同级下一个code + * 例如:当前最大code为D01A04,下一个code为:D01A05 + * + * @param code + * @return + */ + public static synchronized String getNextYouBianCode(String code) { + String newcode = ""; + if (oConvertUtils.isEmpty(code)) { + String zimu = "A"; + String num = getStrNum(1); + newcode = zimu + num; + } else { + String beforeCode = code.substring(0, code.length() - 1 - NUM_LENGTH); + String afterCode = code.substring(code.length() - 1 - NUM_LENGTH, code.length()); + char afterCodeZimu = afterCode.substring(0, 1).charAt(0); + Integer afterCodeNum = Integer.parseInt(afterCode.substring(1)); // org.jeecgframework.core.util.LogUtil.info(after_code); // org.jeecgframework.core.util.LogUtil.info(after_code_zimu); // org.jeecgframework.core.util.LogUtil.info(after_code_num); - String nextNum = ""; - char nextZimu = 'A'; - // 先判断数字等于999*,则计数从1重新开始,递增 - if (afterCodeNum == getMaxNumByLength(NUM_LENGTH)) { - nextNum = getNextStrNum(0); - } else { - nextNum = getNextStrNum(afterCodeNum); - } - // 先判断数字等于999*,则字母从A重新开始,递增 - if(afterCodeNum == getMaxNumByLength(NUM_LENGTH)) { - nextZimu = getNextZiMu(afterCodeZimu); - }else{ - nextZimu = afterCodeZimu; - } + String nextNum = ""; + char nextZimu = 'A'; + // 先判断数字等于999*,则计数从1重新开始,递增 + if (afterCodeNum == getMaxNumByLength(NUM_LENGTH)) { + nextNum = getNextStrNum(0); + } else { + nextNum = getNextStrNum(afterCodeNum); + } + // 先判断数字等于999*,则字母从A重新开始,递增 + if (afterCodeNum == getMaxNumByLength(NUM_LENGTH)) { + nextZimu = getNextZiMu(afterCodeZimu); + } else { + nextZimu = afterCodeZimu; + } - // 例如Z99,下一个code就是Z99A01 - if (LETTER == afterCodeZimu && getMaxNumByLength(NUM_LENGTH) == afterCodeNum) { - newcode = code + (nextZimu + nextNum); - } else { - newcode = beforeCode + (nextZimu + nextNum); - } - } - return newcode; + // 例如Z99,下一个code就是Z99A01 + if (LETTER == afterCodeZimu && getMaxNumByLength(NUM_LENGTH) == afterCodeNum) { + newcode = code + (nextZimu + nextNum); + } else { + newcode = beforeCode + (nextZimu + nextNum); + } + } + return newcode; - } + } - /** - * 根据父亲code,获取下级的下一个code - * - * 例如:父亲CODE:A01 - * 当前CODE:A01B03 - * 获取的code:A01B04 - * - * @param parentCode 上级code - * @param localCode 同级code - * @return - */ - public static synchronized String getSubYouBianCode(String parentCode,String localCode) { - if(localCode!=null && localCode!=""){ + /** + * 根据父亲code,获取下级的下一个code + *

+ * 例如:父亲CODE:A01 + * 当前CODE:A01B03 + * 获取的code:A01B04 + * + * @param parentCode 上级code + * @param localCode 同级code + * @return + */ + public static synchronized String getSubYouBianCode(String parentCode, String localCode) { + if (localCode != null && localCode != "") { // return parentCode + getNextYouBianCode(localCode); - return getNextYouBianCode(localCode); + return getNextYouBianCode(localCode); - }else{ - parentCode = parentCode + "A"+ getNextStrNum(0); - } - return parentCode; - } + } else { + parentCode = parentCode + "A" + getNextStrNum(0); + } + return parentCode; + } - - /** - * 将数字前面位数补零 - * - * @param num - * @return - */ - private static String getNextStrNum(int num) { - return getStrNum(getNextNum(num)); - } + /** + * 将数字前面位数补零 + * + * @param num + * @return + */ + private static String getNextStrNum(int num) { + return getStrNum(getNextNum(num)); + } - /** - * 将数字前面位数补零 - * - * @param num - * @return - */ - private static String getStrNum(int num) { - String s = String.format("%0" + NUM_LENGTH + "d", num); - return s; - } + /** + * 将数字前面位数补零 + * + * @param num + * @return + */ + private static String getStrNum(int num) { + String s = String.format("%0" + NUM_LENGTH + "d", num); + return s; + } - /** - * 递增获取下个数字 - * - * @param num - * @return - */ - private static int getNextNum(int num) { - num++; - return num; - } + /** + * 递增获取下个数字 + * + * @param num + * @return + */ + private static int getNextNum(int num) { + num++; + return num; + } - /** - * 递增获取下个字母 - * - * @param num - * @return - */ - private static char getNextZiMu(char zimu) { - if (zimu == LETTER) { - return 'A'; - } - zimu++; - return zimu; - } - - /** - * 根据数字位数获取最大值 - * @param length - * @return - */ - private static int getMaxNumByLength(int length){ - if(length==0){ - return 0; - } + /** + * 递增获取下个字母 + * + * @param num + * @return + */ + private static char getNextZiMu(char zimu) { + if (zimu == LETTER) { + return 'A'; + } + zimu++; + return zimu; + } + + /** + * 根据数字位数获取最大值 + * + * @param length + * @return + */ + private static int getMaxNumByLength(int length) { + if (length == 0) { + return 0; + } StringBuilder maxNum = new StringBuilder(); - for (int i=0;i dbSources = new HashMap<>(); private static RedisTemplate redisTemplate; @@ -64,10 +68,10 @@ public class DataSourceCachePool { */ public static void cleanAllCache() { //关闭数据源连接 - for(Map.Entry entry : dbSources.entrySet()){ + for (Map.Entry entry : dbSources.entrySet()) { String dbkey = entry.getKey(); DruidDataSource druidDataSource = entry.getValue(); - if(druidDataSource!=null && druidDataSource.isEnable()){ + if (druidDataSource != null && druidDataSource.isEnable()) { druidDataSource.close(); } //清空redis缓存 @@ -80,7 +84,7 @@ public class DataSourceCachePool { public static void removeCache(String dbKey) { //关闭数据源连接 DruidDataSource druidDataSource = dbSources.get(dbKey); - if(druidDataSource!=null && druidDataSource.isEnable()){ + if (druidDataSource != null && druidDataSource.isEnable()) { druidDataSource.close(); } //清空redis缓存 diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/DbTypeUtils.java b/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/DbTypeUtils.java index 96a0a08..3b12a67 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/DbTypeUtils.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/DbTypeUtils.java @@ -9,12 +9,14 @@ import java.util.Map; /** * 数据库类型判断 * 【有些数据库引擎是一样的,以达到复用目的】 + * * @author: jeecg-boot */ public class DbTypeUtils { public static Map dialectMap = new HashMap(); - static{ + + static { dialectMap.put("mysql", "org.hibernate.dialect.MySQL5InnoDBDialect"); // mariadb数据库 1 -- dialectMap.put("mariadb", "org.hibernate.dialect.MariaDBDialect"); @@ -77,33 +79,34 @@ public class DbTypeUtils { } - /** - * 根据枚举类 获取数据库类型的字符串 + * 根据枚举类 获取数据库类型的字符串 + * * @param dbType * @return */ - public static String getDbTypeString(DbType dbType){ - if(DbType.DB2.equals(dbType)){ + public static String getDbTypeString(DbType dbType) { + if (DbType.DB2.equals(dbType)) { return DataBaseConstant.DB_TYPE_DB2; - }else if(DbType.HSQL.equals(dbType)){ + } else if (DbType.HSQL.equals(dbType)) { return DataBaseConstant.DB_TYPE_HSQL; - }else if(dbTypeIsOracle(dbType)){ + } else if (dbTypeIsOracle(dbType)) { return DataBaseConstant.DB_TYPE_ORACLE; - }else if(dbTypeIsSqlServer(dbType)){ + } else if (dbTypeIsSqlServer(dbType)) { return DataBaseConstant.DB_TYPE_SQLSERVER; - }else if(dbTypeIsPostgre(dbType)){ + } else if (dbTypeIsPostgre(dbType)) { return DataBaseConstant.DB_TYPE_POSTGRESQL; } return DataBaseConstant.DB_TYPE_MYSQL; } /** - * 根据枚举类 获取数据库方言字符串 + * 根据枚举类 获取数据库方言字符串 + * * @param dbType * @return */ - public static String getDbDialect(DbType dbType){ + public static String getDbDialect(DbType dbType) { return dialectMap.get(dbType.getDb()); } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/DynamicDBUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/DynamicDBUtil.java index ffcc553..a7dadc4 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/DynamicDBUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/DynamicDBUtil.java @@ -4,14 +4,12 @@ import com.alibaba.druid.pool.DruidDataSource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ArrayUtils; import org.jeecg.common.exception.JeecgBootException; -import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.DynamicDataSourceModel; import org.jeecg.common.util.ReflectHelper; import org.jeecg.common.util.oConvertUtils; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; -import javax.sql.DataSource; import java.sql.SQLException; import java.util.HashMap; import java.util.List; @@ -42,7 +40,7 @@ public class DynamicDBUtil { if (oConvertUtils.isEmpty(url) || !url.toLowerCase().startsWith("jdbc:")) { throw new JeecgBootException("数据源URL配置格式不正确!"); } - + String dbUser = dbSource.getDbUsername(); String dbPassword = dbSource.getDbPassword(); dataSource.setDriverClassName(driverClassName); @@ -61,7 +59,7 @@ public class DynamicDBUtil { log.info("******************************************"); log.info("* *"); - log.info("*====【"+dbSource.getCode()+"】=====Druid连接池已启用 ====*"); + log.info("*====【" + dbSource.getCode() + "】=====Druid连接池已启用 ====*"); log.info("* *"); log.info("******************************************"); return dataSource; @@ -83,10 +81,10 @@ public class DynamicDBUtil { return cacheDbSource; } else { DruidDataSource dataSource = getJdbcDataSource(dbSource); - if(dataSource!=null && dataSource.isEnable()){ + if (dataSource != null && dataSource.isEnable()) { DataSourceCachePool.putCacheBasicDataSource(dbKey, dataSource); - }else{ - throw new JeecgBootException("动态数据源连接失败,dbKey:"+dbKey); + } else { + throw new JeecgBootException("动态数据源连接失败,dbKey:" + dbKey); } log.info("--------getDbSourceBydbKey------------------创建DB数据库连接-------------------"); return dataSource; @@ -120,6 +118,7 @@ public class DynamicDBUtil { /** * 根据数据源获取NamedParameterJdbcTemplate + * * @param dbKey * @return */ @@ -240,18 +239,20 @@ public class DynamicDBUtil { /** * 查询数量 + * * @param dbKey * @param sql * @param param * @return */ - public static Map queryCount(String dbKey, String sql, Map param){ + public static Map queryCount(String dbKey, String sql, Map param) { NamedParameterJdbcTemplate npJdbcTemplate = getNamedParameterJdbcTemplate(dbKey); return npJdbcTemplate.queryForMap(sql, param); } /** * 查询列表数据 + * * @param dbKey * @param sql * @param param @@ -283,8 +284,9 @@ public class DynamicDBUtil { /** * 此方法只能返回单列,不能返回实体类 + * * @param dbKey 数据源的key - * @param sql sal + * @param sql sal * @param clazz 类 * @param param 参数 * @param diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/FreemarkerParseFactory.java b/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/FreemarkerParseFactory.java index 8f49769..50ac8a6 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/FreemarkerParseFactory.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/dynamic/db/FreemarkerParseFactory.java @@ -42,7 +42,9 @@ public class FreemarkerParseFactory { private static StringTemplateLoader stringTemplateLoader = new StringTemplateLoader(); - /**使用内嵌的(?ms)打开单行和多行模式*/ + /** + * 使用内嵌的(?ms)打开单行和多行模式 + */ private final static Pattern NOTES_PATTERN = Pattern .compile("(?ms)/\\*.*?\\*/|^\\s*//.*?$"); @@ -121,12 +123,13 @@ public class FreemarkerParseFactory { * @param paras 参数 * @return String 模板解析后内容 */ - public static String parseTemplateContent(String tplContent,Map paras) { + public static String parseTemplateContent(String tplContent, Map paras) { return parseTemplateContent(tplContent, paras, false); } + public static String parseTemplateContent(String tplContent, Map paras, boolean keepSpace) { try { - String sqlUnderline="sql_"; + String sqlUnderline = "sql_"; StringWriter swriter = new StringWriter(); if (stringTemplateLoader.findTemplateSource(sqlUnderline + tplContent.hashCode()) == null) { stringTemplateLoader.putTemplate(sqlUnderline + tplContent.hashCode(), tplContent); @@ -165,11 +168,11 @@ public class FreemarkerParseFactory { } // 去掉 最后是 where这样的问题 //where空格 "where " - String whereSpace = DataBaseConstant.SQL_WHERE+" "; + String whereSpace = DataBaseConstant.SQL_WHERE + " "; //"where and" - String whereAnd = DataBaseConstant.SQL_WHERE+" and"; + String whereAnd = DataBaseConstant.SQL_WHERE + " and"; //", where" - String commaWhere = SymbolConstant.COMMA+" "+DataBaseConstant.SQL_WHERE; + String commaWhere = SymbolConstant.COMMA + " " + DataBaseConstant.SQL_WHERE; //", " String commaSpace = SymbolConstant.COMMA + " "; if (sql.endsWith(DataBaseConstant.SQL_WHERE) || sql.endsWith(whereSpace)) { diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/encryption/AesEncryptUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/encryption/AesEncryptUtil.java index 670f3eb..0f164fb 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/encryption/AesEncryptUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/encryption/AesEncryptUtil.java @@ -21,9 +21,10 @@ public class AesEncryptUtil { /** * 加密方法 - * @param data 要加密的数据 - * @param key 加密key - * @param iv 加密iv + * + * @param data 要加密的数据 + * @param key 加密key + * @param iv 加密iv * @return 加密的结果 * @throws Exception */ @@ -59,9 +60,10 @@ public class AesEncryptUtil { /** * 解密方法 + * * @param data 要解密的数据 * @param key 解密key - * @param iv 解密iv + * @param iv 解密iv * @return 解密的结果 * @throws Exception */ @@ -84,6 +86,7 @@ public class AesEncryptUtil { /** * 使用默认的key和iv加密 + * * @param data * @return * @throws Exception @@ -94,6 +97,7 @@ public class AesEncryptUtil { /** * 使用默认的key和iv解密 + * * @param data * @return * @throws Exception @@ -103,7 +107,6 @@ public class AesEncryptUtil { } - // /** // * 测试 // */ diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/encryption/EncryptedString.java b/physical-base-core/src/main/java/org/jeecg/common/util/encryption/EncryptedString.java index adb7a8e..40f18a3 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/encryption/EncryptedString.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/encryption/EncryptedString.java @@ -8,15 +8,15 @@ import lombok.Data; * @author: jeecg-boot */ @Data -public class EncryptedString { +public class EncryptedString { /** * 长度为16个字符 */ - public static String key = "1234567890adbcde"; + public static String key = "1234567890adbcde"; /** * 长度为16个字符 */ - public static String iv = "1234567890hjlkew"; + public static String iv = "1234567890hjlkew"; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/filter/SsrfFileTypeFilter.java b/physical-base-core/src/main/java/org/jeecg/common/util/filter/SsrfFileTypeFilter.java index 1a78fc5..ce22199 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/filter/SsrfFileTypeFilter.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/filter/SsrfFileTypeFilter.java @@ -23,8 +23,11 @@ public class SsrfFileTypeFilter { * 允许操作文件类型白名单 */ private final static List FILE_TYPE_WHITE_LIST = new ArrayList<>(); - /**初始化文件头类型,不够的自行补充*/ + /** + * 初始化文件头类型,不够的自行补充 + */ final static HashMap FILE_TYPE_MAP = new HashMap<>(); + static { //图片文件 FILE_TYPE_WHITE_LIST.add("jpg"); @@ -197,7 +200,7 @@ public class SsrfFileTypeFilter { break; } } - log.info("-----获取到的指定文件类型------"+fileExtendName); + log.info("-----获取到的指定文件类型------" + fileExtendName); // 如果不是上述类型,则判断扩展名 if (StringUtils.isBlank(fileExtendName)) { String fileName = file.getOriginalFilename(); @@ -208,13 +211,13 @@ public class SsrfFileTypeFilter { // 如果有扩展名,则返回扩展名 return getFileTypeBySuffix(fileName); } - log.info("-----最終的文件类型------"+fileExtendName); + log.info("-----最終的文件类型------" + fileExtendName); is.close(); return fileExtendName; } catch (Exception e) { log.error(e.getMessage(), e); return ""; - }finally { + } finally { if (is != null) { is.close(); } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/filter/StrAttackFilter.java b/physical-base-core/src/main/java/org/jeecg/common/util/filter/StrAttackFilter.java index 0f522c2..fe2763e 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/filter/StrAttackFilter.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/filter/StrAttackFilter.java @@ -6,6 +6,7 @@ import java.util.regex.PatternSyntaxException; /** * 文件上传字符串过滤特殊字符 + * * @author: jeecg-boot */ public class StrAttackFilter { diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/oConvertUtils.java b/physical-base-core/src/main/java/org/jeecg/common/util/oConvertUtils.java index 3d43bc9..51032d7 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/oConvertUtils.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/oConvertUtils.java @@ -1,6 +1,7 @@ package org.jeecg.common.util; import com.alibaba.fastjson.JSONArray; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; @@ -9,7 +10,6 @@ import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.SymbolConstant; import org.springframework.beans.BeanUtils; -import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; @@ -23,151 +23,149 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * - * @Author 张代浩 - * + * @Author 张代浩 */ @Slf4j public class oConvertUtils { - public static boolean isEmpty(Object object) { - if (object == null) { - return (true); - } - if ("".equals(object)) { - return (true); - } - if (CommonConstant.STRING_NULL.equals(object)) { - return (true); - } - return (false); - } - - public static boolean isNotEmpty(Object object) { - if (object != null && !"".equals(object) && !object.equals(CommonConstant.STRING_NULL)) { - return (true); - } - return (false); - } + public static boolean isEmpty(Object object) { + if (object == null) { + return (true); + } + if ("".equals(object)) { + return (true); + } + if (CommonConstant.STRING_NULL.equals(object)) { + return (true); + } + return (false); + } - - /** - * 返回decode解密字符串 - * - * @param inStr - * @return - */ - public static String decodeString(String inStr) { - if (oConvertUtils.isEmpty(inStr)) { - return null; - } + public static boolean isNotEmpty(Object object) { + if (object != null && !"".equals(object) && !object.equals(CommonConstant.STRING_NULL)) { + return (true); + } + return (false); + } - try { - inStr = URLDecoder.decode(inStr, "UTF-8"); - } catch (Exception e) { - // 解决:URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "自动" - //e.printStackTrace(); - } - return inStr; - } - public static String decode(String strIn, String sourceCode, String targetCode) { - String temp = code2code(strIn, sourceCode, targetCode); - return temp; - } + /** + * 返回decode解密字符串 + * + * @param inStr + * @return + */ + public static String decodeString(String inStr) { + if (oConvertUtils.isEmpty(inStr)) { + return null; + } - @SuppressWarnings("AlibabaLowerCamelCaseVariableNaming") + try { + inStr = URLDecoder.decode(inStr, "UTF-8"); + } catch (Exception e) { + // 解决:URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "自动" + //e.printStackTrace(); + } + return inStr; + } + + public static String decode(String strIn, String sourceCode, String targetCode) { + String temp = code2code(strIn, sourceCode, targetCode); + return temp; + } + + @SuppressWarnings("AlibabaLowerCamelCaseVariableNaming") public static String StrToUTF(String strIn, String sourceCode, String targetCode) { - strIn = ""; - try { - strIn = new String(strIn.getBytes("ISO-8859-1"), "GBK"); - } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return strIn; + strIn = ""; + try { + strIn = new String(strIn.getBytes("ISO-8859-1"), "GBK"); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return strIn; - } + } - private static String code2code(String strIn, String sourceCode, String targetCode) { - String strOut = null; - if (strIn == null || "".equals(strIn.trim())) { - return strIn; - } - try { - byte[] b = strIn.getBytes(sourceCode); - for (int i = 0; i < b.length; i++) { - System.out.print(b[i] + " "); - } - strOut = new String(b, targetCode); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - return strOut; - } + private static String code2code(String strIn, String sourceCode, String targetCode) { + String strOut = null; + if (strIn == null || "".equals(strIn.trim())) { + return strIn; + } + try { + byte[] b = strIn.getBytes(sourceCode); + for (int i = 0; i < b.length; i++) { + System.out.print(b[i] + " "); + } + strOut = new String(b, targetCode); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return strOut; + } - public static int getInt(String s, int defval) { - if (s == null || "".equals(s)) { - return (defval); - } - try { - return (Integer.parseInt(s)); - } catch (NumberFormatException e) { - return (defval); - } - } + public static int getInt(String s, int defval) { + if (s == null || "".equals(s)) { + return (defval); + } + try { + return (Integer.parseInt(s)); + } catch (NumberFormatException e) { + return (defval); + } + } - public static int getInt(String s) { - if (s == null || "".equals(s)) { - return 0; - } - try { - return (Integer.parseInt(s)); - } catch (NumberFormatException e) { - return 0; - } - } + public static int getInt(String s) { + if (s == null || "".equals(s)) { + return 0; + } + try { + return (Integer.parseInt(s)); + } catch (NumberFormatException e) { + return 0; + } + } - public static int getInt(String s, Integer df) { - if (s == null || "".equals(s)) { - return df; - } - try { - return (Integer.parseInt(s)); - } catch (NumberFormatException e) { - return 0; - } - } + public static int getInt(String s, Integer df) { + if (s == null || "".equals(s)) { + return df; + } + try { + return (Integer.parseInt(s)); + } catch (NumberFormatException e) { + return 0; + } + } - public static Integer[] getInts(String[] s) { - if (s == null) { - return null; - } - Integer[] integer = new Integer[s.length]; - for (int i = 0; i < s.length; i++) { - integer[i] = Integer.parseInt(s[i]); - } - return integer; + public static Integer[] getInts(String[] s) { + if (s == null) { + return null; + } + Integer[] integer = new Integer[s.length]; + for (int i = 0; i < s.length; i++) { + integer[i] = Integer.parseInt(s[i]); + } + return integer; - } + } - public static double getDouble(String s, double defval) { - if (s == null || "".equals(s)) { - return (defval); - } - try { - return (Double.parseDouble(s)); - } catch (NumberFormatException e) { - return (defval); - } - } + public static double getDouble(String s, double defval) { + if (s == null || "".equals(s)) { + return (defval); + } + try { + return (Double.parseDouble(s)); + } catch (NumberFormatException e) { + return (defval); + } + } - public static double getDou(Double s, double defval) { - if (s == null) { - return (defval); - } - return s; - } + public static double getDou(Double s, double defval) { + if (s == null) { + return (defval); + } + return s; + } /*public static Short getShort(String s) { if (StringUtil.isNotEmpty(s)) { @@ -177,713 +175,714 @@ public class oConvertUtils { } }*/ - public static int getInt(Object object, int defval) { - if (isEmpty(object)) { - return (defval); - } - try { - return (Integer.parseInt(object.toString())); - } catch (NumberFormatException e) { - return (defval); - } - } - - public static Integer getInteger(Object object, Integer defval) { - if (isEmpty(object)) { - return (defval); - } - try { - return (Integer.parseInt(object.toString())); - } catch (NumberFormatException e) { - return (defval); - } - } - - public static Integer getInt(Object object) { - if (isEmpty(object)) { - return null; - } - try { - return (Integer.parseInt(object.toString())); - } catch (NumberFormatException e) { - return null; - } - } + public static int getInt(Object object, int defval) { + if (isEmpty(object)) { + return (defval); + } + try { + return (Integer.parseInt(object.toString())); + } catch (NumberFormatException e) { + return (defval); + } + } - public static int getInt(BigDecimal s, int defval) { - if (s == null) { - return (defval); - } - return s.intValue(); - } + public static Integer getInteger(Object object, Integer defval) { + if (isEmpty(object)) { + return (defval); + } + try { + return (Integer.parseInt(object.toString())); + } catch (NumberFormatException e) { + return (defval); + } + } - public static Integer[] getIntegerArry(String[] object) { - int len = object.length; - Integer[] result = new Integer[len]; - try { - for (int i = 0; i < len; i++) { - result[i] = new Integer(object[i].trim()); - } - return result; - } catch (NumberFormatException e) { - return null; - } - } + public static Integer getInt(Object object) { + if (isEmpty(object)) { + return null; + } + try { + return (Integer.parseInt(object.toString())); + } catch (NumberFormatException e) { + return null; + } + } - public static String getString(String s) { - return (getString(s, "")); - } + public static int getInt(BigDecimal s, int defval) { + if (s == null) { + return (defval); + } + return s.intValue(); + } - /** - * 转义成Unicode编码 - * @param s - * @return - */ + public static Integer[] getIntegerArry(String[] object) { + int len = object.length; + Integer[] result = new Integer[len]; + try { + for (int i = 0; i < len; i++) { + result[i] = new Integer(object[i].trim()); + } + return result; + } catch (NumberFormatException e) { + return null; + } + } + + public static String getString(String s) { + return (getString(s, "")); + } + + /** + * 转义成Unicode编码 + * + * @param s + * @return + */ /*public static String escapeJava(Object s) { return StringEscapeUtils.escapeJava(getString(s)); }*/ - - public static String getString(Object object) { - if (isEmpty(object)) { - return ""; - } - return (object.toString().trim()); - } - - public static String getString(int i) { - return (String.valueOf(i)); - } - - public static String getString(float i) { - return (String.valueOf(i)); - } - - /** - * 返回常规字符串(只保留字符串中的数字、字母、中文) - * - * @param input - * @return - */ - public static String getNormalString(String input) { - if (oConvertUtils.isEmpty(input)) { - return null; - } - String result = input.replaceAll("[^0-9a-zA-Z\\u4e00-\\u9fa5]", ""); - return result; - } - - public static String getString(String s, String defval) { - if (isEmpty(s)) { - return (defval); - } - return (s.trim()); - } - - public static String getString(Object s, String defval) { - if (isEmpty(s)) { - return (defval); - } - return (s.toString().trim()); - } - - public static long stringToLong(String str) { - Long test = new Long(0); - try { - test = Long.valueOf(str); - } catch (Exception e) { - } - return test.longValue(); - } - - /** - * 获取本机IP - */ - public static String getIp() { - String ip = null; - try { - InetAddress address = InetAddress.getLocalHost(); - ip = address.getHostAddress(); - - } catch (UnknownHostException e) { - e.printStackTrace(); - } - return ip; - } - - /** - * 判断一个类是否为基本数据类型。 - * - * @param clazz - * 要判断的类。 - * @return true 表示为基本数据类型。 - */ - private static boolean isBaseDataType(Class clazz) throws Exception { - return (clazz.equals(String.class) || clazz.equals(Integer.class) || clazz.equals(Byte.class) || clazz.equals(Long.class) || clazz.equals(Double.class) || clazz.equals(Float.class) || clazz.equals(Character.class) || clazz.equals(Short.class) || clazz.equals(BigDecimal.class) || clazz.equals(BigInteger.class) || clazz.equals(Boolean.class) || clazz.equals(Date.class) || clazz.isPrimitive()); - } - - /** - * 解码base64 - * - * @param base64Str base64字符串 - * @return 被加密后的字符串 - */ - public static String decodeBase64Str(String base64Str) { - byte[] byteContent = Base64.decodeBase64(base64Str); - if (byteContent == null) { - return null; - } - String decodedString = new String(byteContent); - return decodedString; - } - - - /** - * @param request - * IP - * @return IP Address - */ - public static String getIpAddrByRequest(HttpServletRequest request) { - String ip = request.getHeader("x-forwarded-for"); - if (ip == null || ip.length() == 0 || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { - ip = request.getHeader("Proxy-Client-IP"); - } - if (ip == null || ip.length() == 0 || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { - ip = request.getHeader("WL-Proxy-Client-IP"); - } - if (ip == null || ip.length() == 0 || CommonConstant.UNKNOWN.equalsIgnoreCase(ip)) { - ip = request.getRemoteAddr(); - } - return ip; - } - - /** - * @return 本机IP - * @throws SocketException - */ - public static String getRealIp() throws SocketException { - // 本地IP,如果没有配置外网IP则返回它 - String localip = null; - // 外网IP - String netip = null; - - Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces(); - InetAddress ip = null; - // 是否找到外网IP - boolean finded = false; - while (netInterfaces.hasMoreElements() && !finded) { - NetworkInterface ni = netInterfaces.nextElement(); - Enumeration address = ni.getInetAddresses(); - while (address.hasMoreElements()) { - ip = address.nextElement(); - // 外网IP - if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) { - netip = ip.getHostAddress(); - finded = true; - break; - } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) { - // 内网IP - localip = ip.getHostAddress(); - } - } - } - - if (netip != null && !"".equals(netip)) { - return netip; - } else { - return localip; - } - } - - /** - * java去除字符串中的空格、回车、换行符、制表符 - * - * @param str - * @return - */ - public static String replaceBlank(String str) { - String dest = ""; - if (str != null) { - String reg = "\\s*|\t|\r|\n"; - Pattern p = Pattern.compile(reg); - Matcher m = p.matcher(str); - dest = m.replaceAll(""); - } - return dest; - - } - - /** - * 判断元素是否在数组内 - * - * @param child - * @param all - * @return - */ - public static boolean isIn(String child, String[] all) { - if (all == null || all.length == 0) { - return false; - } - for (int i = 0; i < all.length; i++) { - String aSource = all[i]; - if (aSource.equals(child)) { - return true; - } - } - return false; - } - - /** - * 判断元素是否在数组内 - * - * @param childArray - * @param all - * @return - */ - public static boolean isArrayIn(String[] childArray, String[] all) { - if (all == null || all.length == 0) { - return false; - } - for (String v : childArray) { - if (!isIn(v, all)) { - return false; - } - } - return true; - } - - /** - * 判断元素是否在数组内 - * - * @param childArray - * @param all - * @return - */ - public static boolean isJsonArrayIn(JSONArray childArray, String[] all) { - if (all == null || all.length == 0) { - return false; - } - - String[] childs = (String[]) childArray.toArray(); - for (String v : childs) { - if (!isIn(v, all)) { - return false; - } - } - return true; - } - - /** - * 获取Map对象 - */ - public static Map getHashMap() { - return new HashMap<>(5); - } - - /** - * SET转换MAP - * - * @param str - * @return - */ - public static Map setToMap(Set setobj) { - Map map = getHashMap(); - for (Iterator iterator = setobj.iterator(); iterator.hasNext();) { - Map.Entry entry = (Map.Entry) iterator.next(); - map.put(entry.getKey().toString(), entry.getValue() == null ? "" : entry.getValue().toString().trim()); - } - return map; - - } - - public static boolean isInnerIp(String ipAddress) { - boolean isInnerIp = false; - long ipNum = getIpNum(ipAddress); - /** - * 私有IP:A类 10.0.0.0-10.255.255.255 B类 172.16.0.0-172.31.255.255 C类 192.168.0.0-192.168.255.255 当然,还有127这个网段是环回地址 - **/ - long aBegin = getIpNum("10.0.0.0"); - long aEnd = getIpNum("10.255.255.255"); - long bBegin = getIpNum("172.16.0.0"); - long bEnd = getIpNum("172.31.255.255"); - long cBegin = getIpNum("192.168.0.0"); - long cEnd = getIpNum("192.168.255.255"); - String localIp = "127.0.0.1"; - isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd) || localIp.equals(ipAddress); - return isInnerIp; - } - - private static long getIpNum(String ipAddress) { - String[] ip = ipAddress.split("\\."); - long a = Integer.parseInt(ip[0]); - long b = Integer.parseInt(ip[1]); - long c = Integer.parseInt(ip[2]); - long d = Integer.parseInt(ip[3]); - - long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d; - return ipNum; - } - - private static boolean isInner(long userIp, long begin, long end) { - return (userIp >= begin) && (userIp <= end); - } - - /** - * 将下划线大写方式命名的字符串转换为驼峰式。 - * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
- * 例如:hello_world->helloWorld - * - * @param name - * 转换前的下划线大写方式命名的字符串 - * @return 转换后的驼峰式命名的字符串 - */ - public static String camelName(String name) { - StringBuilder result = new StringBuilder(); - // 快速检查 - if (name == null || name.isEmpty()) { - // 没必要转换 - return ""; - } else if (!name.contains(SymbolConstant.UNDERLINE)) { - // 不含下划线,仅将首字母小写 - //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 - //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 - return name.substring(0, 1).toLowerCase() + name.substring(1).toLowerCase(); - //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 - } - // 用下划线将原始字符串分割 - String[] camels = name.split("_"); - for (String camel : camels) { - // 跳过原始字符串中开头、结尾的下换线或双重下划线 - if (camel.isEmpty()) { - continue; - } - // 处理真正的驼峰片段 - if (result.length() == 0) { - // 第一个驼峰片段,全部字母都小写 - result.append(camel.toLowerCase()); - } else { - // 其他的驼峰片段,首字母大写 - result.append(camel.substring(0, 1).toUpperCase()); - result.append(camel.substring(1).toLowerCase()); - } - } - return result.toString(); - } - - /** - * 将下划线大写方式命名的字符串转换为驼峰式。 - * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
- * 例如:hello_world,test_id->helloWorld,testId - * - * @param name - * 转换前的下划线大写方式命名的字符串 - * @return 转换后的驼峰式命名的字符串 - */ - public static String camelNames(String names) { - if(names==null||"".equals(names)){ - return null; - } - StringBuffer sf = new StringBuffer(); - String[] fs = names.split(","); - for (String field : fs) { - field = camelName(field); - sf.append(field + ","); - } - String result = sf.toString(); - return result.substring(0, result.length() - 1); - } - - //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 - /** - * 将下划线大写方式命名的字符串转换为驼峰式。(首字母写) - * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
- * 例如:hello_world->HelloWorld - * - * @param name - * 转换前的下划线大写方式命名的字符串 - * @return 转换后的驼峰式命名的字符串 - */ - public static String camelNameCapFirst(String name) { - StringBuilder result = new StringBuilder(); - // 快速检查 - if (name == null || name.isEmpty()) { - // 没必要转换 - return ""; - } else if (!name.contains(SymbolConstant.UNDERLINE)) { - // 不含下划线,仅将首字母小写 - return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); - } - // 用下划线将原始字符串分割 - String[] camels = name.split("_"); - for (String camel : camels) { - // 跳过原始字符串中开头、结尾的下换线或双重下划线 - if (camel.isEmpty()) { - continue; - } - // 其他的驼峰片段,首字母大写 - result.append(camel.substring(0, 1).toUpperCase()); - result.append(camel.substring(1).toLowerCase()); - } - return result.toString(); - } - //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 - - /** - * 将驼峰命名转化成下划线 - * @param para - * @return - */ - public static String camelToUnderline(String para){ - int length = 3; - if(para.length() netInterfaces = NetworkInterface.getNetworkInterfaces(); + InetAddress ip = null; + // 是否找到外网IP + boolean finded = false; + while (netInterfaces.hasMoreElements() && !finded) { + NetworkInterface ni = netInterfaces.nextElement(); + Enumeration address = ni.getInetAddresses(); + while (address.hasMoreElements()) { + ip = address.nextElement(); + // 外网IP + if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) { + netip = ip.getHostAddress(); + finded = true; + break; + } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) { + // 内网IP + localip = ip.getHostAddress(); + } } } - return sb.toString().toLowerCase(); - } - /** - * 随机数 - * @param place 定义随机数的位数 - */ - public static String randomGen(int place) { - String base = "qwertyuioplkjhgfdsazxcvbnmQAZWSXEDCRFVTGBYHNUJMIKLOP0123456789"; - StringBuffer sb = new StringBuffer(); - Random rd = new Random(); - for(int i=0;i clazz = object.getClass(); - List fieldList = new ArrayList<>(); - while (clazz != null) { - fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()))); - clazz = clazz.getSuperclass(); - } - Field[] fields = new Field[fieldList.size()]; - fieldList.toArray(fields); - return fields; - } - - /** - * 将map的key全部转成小写 - * @param list - * @return - */ - public static List> toLowerCasePageList(List> list){ - List> select = new ArrayList<>(); - for (Map row : list) { - Map resultMap = new HashMap<>(5); - Set keySet = row.keySet(); - for (String key : keySet) { - String newKey = key.toLowerCase(); - resultMap.put(newKey, row.get(key)); - } - select.add(resultMap); - } - return select; - } + if (netip != null && !"".equals(netip)) { + return netip; + } else { + return localip; + } + } - /** - * 将entityList转换成modelList - * @param fromList - * @param tClass - * @param - * @param - * @return - */ - public static List entityListToModelList(List fromList, Class tClass){ - if(fromList == null || fromList.isEmpty()){ - return null; - } - List tList = new ArrayList<>(); - for(F f : fromList){ - T t = entityToModel(f, tClass); - tList.add(t); - } - return tList; - } + /** + * java去除字符串中的空格、回车、换行符、制表符 + * + * @param str + * @return + */ + public static String replaceBlank(String str) { + String dest = ""; + if (str != null) { + String reg = "\\s*|\t|\r|\n"; + Pattern p = Pattern.compile(reg); + Matcher m = p.matcher(str); + dest = m.replaceAll(""); + } + return dest; - public static T entityToModel(F entity, Class modelClass) { - log.debug("entityToModel : Entity属性的值赋值到Model"); - Object model = null; - if (entity == null || modelClass ==null) { - return null; - } + } - try { - model = modelClass.newInstance(); - } catch (InstantiationException e) { - log.error("entityToModel : 实例化异常", e); - } catch (IllegalAccessException e) { - log.error("entityToModel : 安全权限异常", e); - } - BeanUtils.copyProperties(entity, model); - return (T)model; - } + /** + * 判断元素是否在数组内 + * + * @param child + * @param all + * @return + */ + public static boolean isIn(String child, String[] all) { + if (all == null || all.length == 0) { + return false; + } + for (int i = 0; i < all.length; i++) { + String aSource = all[i]; + if (aSource.equals(child)) { + return true; + } + } + return false; + } - /** - * 判断 list 是否为空 - * - * @param list - * @return true or false - * list == null : true - * list.size() == 0 : true - */ - public static boolean listIsEmpty(Collection list) { - return (list == null || list.size() == 0); - } + /** + * 判断元素是否在数组内 + * + * @param childArray + * @param all + * @return + */ + public static boolean isArrayIn(String[] childArray, String[] all) { + if (all == null || all.length == 0) { + return false; + } + for (String v : childArray) { + if (!isIn(v, all)) { + return false; + } + } + return true; + } - /** - * 判断旧值与新值 是否相等 - * - * @param oldVal - * @param newVal - * @return - */ - public static boolean isEqual(Object oldVal, Object newVal) { - if (oldVal != null && newVal != null) { - if (isArray(oldVal)) { - return equalityOfArrays((Object[]) oldVal, (Object[]) newVal); - }else if(oldVal instanceof JSONArray){ - if(newVal instanceof JSONArray){ - return equalityOfJSONArray((JSONArray) oldVal, (JSONArray) newVal); - }else{ - if (isEmpty(newVal) && (oldVal == null || ((JSONArray) oldVal).size() == 0)) { - return true; - } - List arrayStr = Arrays.asList(newVal.toString().split(",")); - JSONArray newValArray = new JSONArray(arrayStr); - return equalityOfJSONArray((JSONArray) oldVal, newValArray); - } - }else{ - return oldVal.equals(newVal); - } - - } else { - if (oldVal == null && newVal == null) { - return true; - } else { - return false; - } - } - } + /** + * 判断元素是否在数组内 + * + * @param childArray + * @param all + * @return + */ + public static boolean isJsonArrayIn(JSONArray childArray, String[] all) { + if (all == null || all.length == 0) { + return false; + } - /** - * 方法描述 判断一个对象是否是一个数组 - * - * @param obj - * @return - * @author yaomy - * @date 2018年2月5日 下午5:03:00 - */ - public static boolean isArray(Object obj) { - if (obj == null) { - return false; - } - return obj.getClass().isArray(); - } + String[] childs = (String[]) childArray.toArray(); + for (String v : childs) { + if (!isIn(v, all)) { + return false; + } + } + return true; + } - /** - * 获取集合的大小 - * - * @param collection - * @return - */ - public static int getCollectionSize(Collection collection) { - return collection != null ? collection.size() : 0; - } - - /** - * 判断两个数组是否相等(数组元素不分顺序) - * - * @param oldVal - * @param newVal - * @return - */ - public static boolean equalityOfJSONArray(JSONArray oldVal, JSONArray newVal) { - if (oldVal != null && newVal != null) { - Object[] oldValArray = oldVal.toArray(); - Object[] newValArray = newVal.toArray(); - return equalityOfArrays(oldValArray,newValArray); - } else { - if ((oldVal == null || oldVal.size() == 0) && (newVal == null || newVal.size() == 0)) { - return true; - } else { - return false; - } - } - } + /** + * 获取Map对象 + */ + public static Map getHashMap() { + return new HashMap<>(5); + } - /** - * 比较带逗号的字符串 - * QQYUN-5212【简流】按日期触发 多选 人员组件 选择顺序不一致时 不触发,应该是统一问题 包括多选部门组件 - * @param oldVal - * @param newVal - * @return - */ - public static boolean equalityOfStringArrays(String oldVal, String newVal) { - if(oldVal.equals(newVal)){ - return true; - } - if(oldVal.indexOf(",")>=0 && newVal.indexOf(",")>=0){ - String[] arr1 = oldVal.split(","); - String[] arr2 = newVal.split(","); - if(arr1.length == arr2.length){ - boolean flag = true; - Map map = new HashMap<>(); - for(String s1: arr1){ - map.put(s1, 1); - } - for(String s2: arr2){ - if(map.get(s2) == null){ - flag = false; - break; - } - } - return flag; - } - } - return false; - } - - /** - * 判断两个数组是否相等(数组元素不分顺序) - * - * @param oldVal - * @param newVal - * @return - */ - public static boolean equalityOfArrays(Object[] oldVal, Object newVal[]) { - if (oldVal != null && newVal != null) { - Arrays.sort(oldVal); - Arrays.sort(newVal); - return Arrays.equals(oldVal, newVal); - } else { - if ((oldVal == null || oldVal.length == 0) && (newVal == null || newVal.length == 0)) { - return true; - } else { - return false; - } - } - } + /** + * SET转换MAP + * + * @param str + * @return + */ + public static Map setToMap(Set setobj) { + Map map = getHashMap(); + for (Iterator iterator = setobj.iterator(); iterator.hasNext(); ) { + Map.Entry entry = (Map.Entry) iterator.next(); + map.put(entry.getKey().toString(), entry.getValue() == null ? "" : entry.getValue().toString().trim()); + } + return map; + + } + + public static boolean isInnerIp(String ipAddress) { + boolean isInnerIp = false; + long ipNum = getIpNum(ipAddress); + /** + * 私有IP:A类 10.0.0.0-10.255.255.255 B类 172.16.0.0-172.31.255.255 C类 192.168.0.0-192.168.255.255 当然,还有127这个网段是环回地址 + **/ + long aBegin = getIpNum("10.0.0.0"); + long aEnd = getIpNum("10.255.255.255"); + long bBegin = getIpNum("172.16.0.0"); + long bEnd = getIpNum("172.31.255.255"); + long cBegin = getIpNum("192.168.0.0"); + long cEnd = getIpNum("192.168.255.255"); + String localIp = "127.0.0.1"; + isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd) || localIp.equals(ipAddress); + return isInnerIp; + } + + private static long getIpNum(String ipAddress) { + String[] ip = ipAddress.split("\\."); + long a = Integer.parseInt(ip[0]); + long b = Integer.parseInt(ip[1]); + long c = Integer.parseInt(ip[2]); + long d = Integer.parseInt(ip[3]); + + long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d; + return ipNum; + } + + private static boolean isInner(long userIp, long begin, long end) { + return (userIp >= begin) && (userIp <= end); + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。 + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
+ * 例如:hello_world->helloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelName(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains(SymbolConstant.UNDERLINE)) { + // 不含下划线,仅将首字母小写 + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + return name.substring(0, 1).toLowerCase() + name.substring(1).toLowerCase(); + //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + } + // 用下划线将原始字符串分割 + String[] camels = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 处理真正的驼峰片段 + if (result.length() == 0) { + // 第一个驼峰片段,全部字母都小写 + result.append(camel.toLowerCase()); + } else { + // 其他的驼峰片段,首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + } + return result.toString(); + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。 + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
+ * 例如:hello_world,test_id->helloWorld,testId + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelNames(String names) { + if (names == null || "".equals(names)) { + return null; + } + StringBuffer sf = new StringBuffer(); + String[] fs = names.split(","); + for (String field : fs) { + field = camelName(field); + sf.append(field + ","); + } + String result = sf.toString(); + return result.substring(0, result.length() - 1); + } + + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。(首字母写) + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
+ * 例如:hello_world->HelloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelNameCapFirst(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains(SymbolConstant.UNDERLINE)) { + // 不含下划线,仅将首字母小写 + return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); + } + // 用下划线将原始字符串分割 + String[] camels = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 其他的驼峰片段,首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + + /** + * 将驼峰命名转化成下划线 + * + * @param para + * @return + */ + public static String camelToUnderline(String para) { + int length = 3; + if (para.length() < length) { + return para.toLowerCase(); + } + StringBuilder sb = new StringBuilder(para); + //定位 + int temp = 0; + //从第三个字符开始 避免命名不规范 + for (int i = 2; i < para.length(); i++) { + if (Character.isUpperCase(para.charAt(i))) { + sb.insert(i + temp, "_"); + temp += 1; + } + } + return sb.toString().toLowerCase(); + } + + /** + * 随机数 + * + * @param place 定义随机数的位数 + */ + public static String randomGen(int place) { + String base = "qwertyuioplkjhgfdsazxcvbnmQAZWSXEDCRFVTGBYHNUJMIKLOP0123456789"; + StringBuffer sb = new StringBuffer(); + Random rd = new Random(); + for (int i = 0; i < place; i++) { + sb.append(base.charAt(rd.nextInt(base.length()))); + } + return sb.toString(); + } + + /** + * 获取类的所有属性,包括父类 + * + * @param object + * @return + */ + public static Field[] getAllFields(Object object) { + Class clazz = object.getClass(); + List fieldList = new ArrayList<>(); + while (clazz != null) { + fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()))); + clazz = clazz.getSuperclass(); + } + Field[] fields = new Field[fieldList.size()]; + fieldList.toArray(fields); + return fields; + } + + /** + * 将map的key全部转成小写 + * + * @param list + * @return + */ + public static List> toLowerCasePageList(List> list) { + List> select = new ArrayList<>(); + for (Map row : list) { + Map resultMap = new HashMap<>(5); + Set keySet = row.keySet(); + for (String key : keySet) { + String newKey = key.toLowerCase(); + resultMap.put(newKey, row.get(key)); + } + select.add(resultMap); + } + return select; + } + + /** + * 将entityList转换成modelList + * + * @param fromList + * @param tClass + * @param + * @param + * @return + */ + public static List entityListToModelList(List fromList, Class tClass) { + if (fromList == null || fromList.isEmpty()) { + return null; + } + List tList = new ArrayList<>(); + for (F f : fromList) { + T t = entityToModel(f, tClass); + tList.add(t); + } + return tList; + } + + public static T entityToModel(F entity, Class modelClass) { + log.debug("entityToModel : Entity属性的值赋值到Model"); + Object model = null; + if (entity == null || modelClass == null) { + return null; + } + + try { + model = modelClass.newInstance(); + } catch (InstantiationException e) { + log.error("entityToModel : 实例化异常", e); + } catch (IllegalAccessException e) { + log.error("entityToModel : 安全权限异常", e); + } + BeanUtils.copyProperties(entity, model); + return (T) model; + } + + /** + * 判断 list 是否为空 + * + * @param list + * @return true or false + * list == null : true + * list.size() == 0 : true + */ + public static boolean listIsEmpty(Collection list) { + return (list == null || list.size() == 0); + } + + /** + * 判断旧值与新值 是否相等 + * + * @param oldVal + * @param newVal + * @return + */ + public static boolean isEqual(Object oldVal, Object newVal) { + if (oldVal != null && newVal != null) { + if (isArray(oldVal)) { + return equalityOfArrays((Object[]) oldVal, (Object[]) newVal); + } else if (oldVal instanceof JSONArray) { + if (newVal instanceof JSONArray) { + return equalityOfJSONArray((JSONArray) oldVal, (JSONArray) newVal); + } else { + if (isEmpty(newVal) && (oldVal == null || ((JSONArray) oldVal).size() == 0)) { + return true; + } + List arrayStr = Arrays.asList(newVal.toString().split(",")); + JSONArray newValArray = new JSONArray(arrayStr); + return equalityOfJSONArray((JSONArray) oldVal, newValArray); + } + } else { + return oldVal.equals(newVal); + } + + } else { + if (oldVal == null && newVal == null) { + return true; + } else { + return false; + } + } + } + + /** + * 方法描述 判断一个对象是否是一个数组 + * + * @param obj + * @return + * @author yaomy + * @date 2018年2月5日 下午5:03:00 + */ + public static boolean isArray(Object obj) { + if (obj == null) { + return false; + } + return obj.getClass().isArray(); + } + + /** + * 获取集合的大小 + * + * @param collection + * @return + */ + public static int getCollectionSize(Collection collection) { + return collection != null ? collection.size() : 0; + } + + /** + * 判断两个数组是否相等(数组元素不分顺序) + * + * @param oldVal + * @param newVal + * @return + */ + public static boolean equalityOfJSONArray(JSONArray oldVal, JSONArray newVal) { + if (oldVal != null && newVal != null) { + Object[] oldValArray = oldVal.toArray(); + Object[] newValArray = newVal.toArray(); + return equalityOfArrays(oldValArray, newValArray); + } else { + if ((oldVal == null || oldVal.size() == 0) && (newVal == null || newVal.size() == 0)) { + return true; + } else { + return false; + } + } + } + + /** + * 比较带逗号的字符串 + * QQYUN-5212【简流】按日期触发 多选 人员组件 选择顺序不一致时 不触发,应该是统一问题 包括多选部门组件 + * + * @param oldVal + * @param newVal + * @return + */ + public static boolean equalityOfStringArrays(String oldVal, String newVal) { + if (oldVal.equals(newVal)) { + return true; + } + if (oldVal.indexOf(",") >= 0 && newVal.indexOf(",") >= 0) { + String[] arr1 = oldVal.split(","); + String[] arr2 = newVal.split(","); + if (arr1.length == arr2.length) { + boolean flag = true; + Map map = new HashMap<>(); + for (String s1 : arr1) { + map.put(s1, 1); + } + for (String s2 : arr2) { + if (map.get(s2) == null) { + flag = false; + break; + } + } + return flag; + } + } + return false; + } + + /** + * 判断两个数组是否相等(数组元素不分顺序) + * + * @param oldVal + * @param newVal + * @return + */ + public static boolean equalityOfArrays(Object[] oldVal, Object newVal[]) { + if (oldVal != null && newVal != null) { + Arrays.sort(oldVal); + Arrays.sort(newVal); + return Arrays.equals(oldVal, newVal); + } else { + if ((oldVal == null || oldVal.length == 0) && (newVal == null || newVal.length == 0)) { + return true; + } else { + return false; + } + } + } // public static void main(String[] args) { //// String[] a = new String[]{"1", "2"}; @@ -892,141 +891,146 @@ public class oConvertUtils { // Integer b = 1; // System.out.println(oConvertUtils.isEqual(a, b)); // } - - /** - * 判断 list 是否不为空 - * - * @param list - * @return true or false - * list == null : false - * list.size() == 0 : false - */ - public static boolean listIsNotEmpty(Collection list) { - return !listIsEmpty(list); - } - /** - * 读取静态文本内容 - * @param url - * @return - */ - public static String readStatic(String url) { - String json = ""; - try { - //换个写法,解决springboot读取jar包中文件的问题 - InputStream stream = oConvertUtils.class.getClassLoader().getResourceAsStream(url.replace("classpath:", "")); - json = IOUtils.toString(stream,"UTF-8"); - } catch (IOException e) { - log.error(e.getMessage(),e); - } - return json; - } + /** + * 判断 list 是否不为空 + * + * @param list + * @return true or false + * list == null : false + * list.size() == 0 : false + */ + public static boolean listIsNotEmpty(Collection list) { + return !listIsEmpty(list); + } - /** - * 将List 转成 JSONArray - * @return - */ - public static JSONArray list2JSONArray(List list){ - if(list==null || list.size()==0){ - return null; - } - JSONArray array = new JSONArray(); - for(String str: list){ - array.add(str); - } - return array; - } + /** + * 读取静态文本内容 + * + * @param url + * @return + */ + public static String readStatic(String url) { + String json = ""; + try { + //换个写法,解决springboot读取jar包中文件的问题 + InputStream stream = oConvertUtils.class.getClassLoader().getResourceAsStream(url.replace("classpath:", "")); + json = IOUtils.toString(stream, "UTF-8"); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + return json; + } - /** - * 判断两个list中的元素是否完全一致 - * QQYUN-5326【简流】获取组织人员 单/多 筛选条件 没有部门筛选 - * @return - */ - public static boolean isEqList(List list1, List list2){ - if(list1.size() != list2.size()){ - return false; - } - for(String str1: list1){ - boolean flag = false; - for(String str2: list2){ - if(str1.equals(str2)){ - flag = true; - break; - } - } - if(!flag){ - return false; - } - } - return true; - } + /** + * 将List 转成 JSONArray + * + * @return + */ + public static JSONArray list2JSONArray(List list) { + if (list == null || list.size() == 0) { + return null; + } + JSONArray array = new JSONArray(); + for (String str : list) { + array.add(str); + } + return array; + } + + /** + * 判断两个list中的元素是否完全一致 + * QQYUN-5326【简流】获取组织人员 单/多 筛选条件 没有部门筛选 + * + * @return + */ + public static boolean isEqList(List list1, List list2) { + if (list1.size() != list2.size()) { + return false; + } + for (String str1 : list1) { + boolean flag = false; + for (String str2 : list2) { + if (str1.equals(str2)) { + flag = true; + break; + } + } + if (!flag) { + return false; + } + } + return true; + } - /** - * 判断 list1中的元素是否在list2中出现 - * QQYUN-5326【简流】获取组织人员 单/多 筛选条件 没有部门筛选 - * @param list1 - * @param list2 - * @return - */ - public static boolean isInList(List list1, List list2){ - for(String str1: list1){ - boolean flag = false; - for(String str2: list2){ - if(str1.equals(str2)){ - flag = true; - break; - } - } - if(flag){ - return true; - } - } - return false; - } + /** + * 判断 list1中的元素是否在list2中出现 + * QQYUN-5326【简流】获取组织人员 单/多 筛选条件 没有部门筛选 + * + * @param list1 + * @param list2 + * @return + */ + public static boolean isInList(List list1, List list2) { + for (String str1 : list1) { + boolean flag = false; + for (String str2 : list2) { + if (str1.equals(str2)) { + flag = true; + break; + } + } + if (flag) { + return true; + } + } + return false; + } - /** - * 计算文件大小转成MB - * @param uploadCount - * @return - */ - public static Double calculateFileSizeToMb(Long uploadCount){ - double count = 0.0; - if(uploadCount>0) { - BigDecimal bigDecimal = new BigDecimal(uploadCount); - //换算成MB - BigDecimal divide = bigDecimal.divide(new BigDecimal(1048576)); - count = divide.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - return count; - } - return count; - } + /** + * 计算文件大小转成MB + * + * @param uploadCount + * @return + */ + public static Double calculateFileSizeToMb(Long uploadCount) { + double count = 0.0; + if (uploadCount > 0) { + BigDecimal bigDecimal = new BigDecimal(uploadCount); + //换算成MB + BigDecimal divide = bigDecimal.divide(new BigDecimal(1048576)); + count = divide.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + return count; + } + return count; + } - /** - * map转str - * - * @param map - * @return - */ - public static String mapToString(Map map) { - if (map == null || map.size() == 0) { - return null; - } + /** + * map转str + * + * @param map + * @return + */ + public static String mapToString(Map map) { + if (map == null || map.size() == 0) { + return null; + } - StringBuilder sb = new StringBuilder(); - for (Map.Entry entry : map.entrySet()) { - String key = entry.getKey(); - String[] values = entry.getValue(); - sb.append(key).append("="); - sb.append(values != null ? StringUtils.join(values, ",") : ""); - sb.append("&"); - } + StringBuilder sb = new StringBuilder(); + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + String[] values = entry.getValue(); + sb.append(key).append("="); + sb.append(values != null ? StringUtils.join(values, ",") : ""); + sb.append("&"); + } + + String result = sb.toString(); + if (result.endsWith("&")) { + result = result.substring(0, sb.length() - 1); + } + return result; + } - String result = sb.toString(); - if (result.endsWith("&")) { - result = result.substring(0, sb.length() - 1); - } - return result; - } - } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/oss/OssBootUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/oss/OssBootUtil.java index bafc035..ae8645d 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/oss/OssBootUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/oss/OssBootUtil.java @@ -20,7 +20,6 @@ import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; -import java.net.URLDecoder; import java.util.Date; import java.util.UUID; @@ -96,7 +95,7 @@ public class OssBootUtil { * @param fileDir 文件保存目录 * @return oss 中的相对文件路径 */ - public static String upload(MultipartFile file, String fileDir,String customBucket) throws Exception { + public static String upload(MultipartFile file, String fileDir, String customBucket) throws Exception { //update-begin-author:liusq date:20210809 for: 过滤上传文件类型 SsrfFileTypeFilter.checkUploadFileType(file); //update-end-author:liusq date:20210809 for: 过滤上传文件类型 @@ -105,28 +104,28 @@ public class OssBootUtil { initOss(endPoint, accessKeyId, accessKeySecret); StringBuilder fileUrl = new StringBuilder(); String newBucket = bucketName; - if(oConvertUtils.isNotEmpty(customBucket)){ + if (oConvertUtils.isNotEmpty(customBucket)) { newBucket = customBucket; } try { //判断桶是否存在,不存在则创建桶 - if(!ossClient.doesBucketExist(newBucket)){ + if (!ossClient.doesBucketExist(newBucket)) { ossClient.createBucket(newBucket); } // 获取文件名 String orgName = file.getOriginalFilename(); - if("" == orgName){ - orgName=file.getName(); + if ("" == orgName) { + orgName = file.getName(); } orgName = CommonUtils.getFileName(orgName); - String fileName = orgName.indexOf(".")==-1 - ?orgName + "_" + System.currentTimeMillis() - :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")); + String fileName = orgName.indexOf(".") == -1 + ? orgName + "_" + System.currentTimeMillis() + : orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")); if (!fileDir.endsWith(SymbolConstant.SINGLE_SLASH)) { fileDir = fileDir.concat(SymbolConstant.SINGLE_SLASH); } //update-begin-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击 - fileDir=StrAttackFilter.filter(fileDir); + fileDir = StrAttackFilter.filter(fileDir); //update-end-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击 fileUrl = fileUrl.append(fileDir + fileName); @@ -142,10 +141,10 @@ public class OssBootUtil { log.info("------OSS文件上传成功------" + fileUrl); } } catch (IOException e) { - log.error(e.getMessage(),e); + log.error(e.getMessage(), e); return null; - }catch (Exception e) { - log.error(e.getMessage(),e); + } catch (Exception e) { + log.error(e.getMessage(), e); return null; } return filePath; @@ -153,25 +152,27 @@ public class OssBootUtil { /** * 获取原始URL - * @param url: 原始URL - * @Return: java.lang.String - */ + * + * @param url: 原始URL + * @Return: java.lang.String + */ public static String getOriginalUrl(String url) { String originalDomain = "https://" + bucketName + "." + endPoint; - if(oConvertUtils.isNotEmpty(staticDomain) && url.indexOf(staticDomain)!=-1){ - url = url.replace(staticDomain,originalDomain); + if (oConvertUtils.isNotEmpty(staticDomain) && url.indexOf(staticDomain) != -1) { + url = url.replace(staticDomain, originalDomain); } return url; } /** * 文件上传 + * * @param file * @param fileDir * @return */ public static String upload(MultipartFile file, String fileDir) throws Exception { - return upload(file, fileDir,null); + return upload(file, fileDir, null); } /** @@ -215,35 +216,38 @@ public class OssBootUtil { /** * 删除文件 + * * @param url */ public static void deleteUrl(String url) { - deleteUrl(url,null); + deleteUrl(url, null); } /** * 删除文件 + * * @param url */ - public static void deleteUrl(String url,String bucket) { + public static void deleteUrl(String url, String bucket) { String newBucket = bucketName; - if(oConvertUtils.isNotEmpty(bucket)){ + if (oConvertUtils.isNotEmpty(bucket)) { newBucket = bucket; } String bucketUrl = ""; if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith(CommonConstant.STR_HTTP)) { - bucketUrl = staticDomain + SymbolConstant.SINGLE_SLASH ; + bucketUrl = staticDomain + SymbolConstant.SINGLE_SLASH; } else { bucketUrl = "https://" + newBucket + "." + endPoint + SymbolConstant.SINGLE_SLASH; } //TODO 暂时不允许删除云存储的文件 //initOss(endPoint, accessKeyId, accessKeySecret); - url = url.replace(bucketUrl,""); + url = url.replace(bucketUrl, ""); ossClient.deleteObject(newBucket, url); } /** * 删除文件 + * * @param fileName */ public static void delete(String fileName) { @@ -252,24 +256,25 @@ public class OssBootUtil { /** * 获取文件流 + * * @param objectName * @param bucket * @return */ - public static InputStream getOssFile(String objectName,String bucket){ + public static InputStream getOssFile(String objectName, String bucket) { InputStream inputStream = null; - try{ + try { String newBucket = bucketName; - if(oConvertUtils.isNotEmpty(bucket)){ + if (oConvertUtils.isNotEmpty(bucket)) { newBucket = bucket; } initOss(endPoint, accessKeyId, accessKeySecret); //update-begin---author:liusq Date:20220120 for:替换objectName前缀,防止key不一致导致获取不到文件---- - objectName = OssBootUtil.replacePrefix(objectName,bucket); + objectName = OssBootUtil.replacePrefix(objectName, bucket); //update-end---author:liusq Date:20220120 for:替换objectName前缀,防止key不一致导致获取不到文件---- - OSSObject ossObject = ossClient.getObject(newBucket,objectName); + OSSObject ossObject = ossClient.getObject(newBucket, objectName); inputStream = new BufferedInputStream(ossObject.getObjectContent()); - }catch (Exception e){ + } catch (Exception e) { log.info("文件获取失败" + e.getMessage()); } return inputStream; @@ -286,6 +291,7 @@ public class OssBootUtil { /** * 获取文件外链 + * * @param bucketName * @param objectName * @param expires @@ -293,19 +299,19 @@ public class OssBootUtil { */ public static String getObjectUrl(String bucketName, String objectName, Date expires) { initOss(endPoint, accessKeyId, accessKeySecret); - try{ + try { //update-begin---author:liusq Date:20220120 for:替换objectName前缀,防止key不一致导致获取不到文件---- - objectName = OssBootUtil.replacePrefix(objectName,bucketName); + objectName = OssBootUtil.replacePrefix(objectName, bucketName); //update-end---author:liusq Date:20220120 for:替换objectName前缀,防止key不一致导致获取不到文件---- - if(ossClient.doesObjectExist(bucketName,objectName)){ - URL url = ossClient.generatePresignedUrl(bucketName,objectName,expires); + if (ossClient.doesObjectExist(bucketName, objectName)) { + URL url = ossClient.generatePresignedUrl(bucketName, objectName, expires); //log.info("原始url : {}", url.toString()); //log.info("decode url : {}", URLDecoder.decode(url.toString(), "UTF-8")); //【issues/4023】问题 oss外链经过转编码后,部分无效,大概在三分一;无需转编码直接返回即可 #4023 return url.toString(); } - }catch (Exception e){ - log.info("文件路径获取失败" + e.getMessage()); + } catch (Exception e) { + log.info("文件路径获取失败" + e.getMessage()); } return null; } @@ -327,6 +333,7 @@ public class OssBootUtil { /** * 上传文件到oss + * * @param stream * @param relativePath * @return @@ -340,7 +347,7 @@ public class OssBootUtil { } else { filePath = "https://" + bucketName + "." + endPoint + SymbolConstant.SINGLE_SLASH + fileUrl; } - PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(),stream); + PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(), stream); // 设置权限(公开读) ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); if (result != null) { @@ -351,25 +358,26 @@ public class OssBootUtil { /** * 替换前缀,防止key不一致导致获取不到文件 - * @param objectName 文件上传路径 key + * + * @param objectName 文件上传路径 key * @param customBucket 自定义桶 + * @return * @date 2022-01-20 * @author lsq - * @return */ - private static String replacePrefix(String objectName,String customBucket){ - log.info("------replacePrefix---替换前---objectName:{}",objectName); - if(oConvertUtils.isNotEmpty(staticDomain)){ - objectName= objectName.replace(staticDomain+SymbolConstant.SINGLE_SLASH,""); - }else{ + private static String replacePrefix(String objectName, String customBucket) { + log.info("------replacePrefix---替换前---objectName:{}", objectName); + if (oConvertUtils.isNotEmpty(staticDomain)) { + objectName = objectName.replace(staticDomain + SymbolConstant.SINGLE_SLASH, ""); + } else { String newBucket = bucketName; - if(oConvertUtils.isNotEmpty(customBucket)){ + if (oConvertUtils.isNotEmpty(customBucket)) { newBucket = customBucket; } - String path ="https://" + newBucket + "." + endPoint + SymbolConstant.SINGLE_SLASH; - objectName = objectName.replace(path,""); + String path = "https://" + newBucket + "." + endPoint + SymbolConstant.SINGLE_SLASH; + objectName = objectName.replace(path, ""); } - log.info("------replacePrefix---替换后---objectName:{}",objectName); + log.info("------replacePrefix---替换后---objectName:{}", objectName); return objectName; } } \ No newline at end of file diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/security/AbstractQueryBlackListHandler.java b/physical-base-core/src/main/java/org/jeecg/common/util/security/AbstractQueryBlackListHandler.java index 8b7e5e2..14a1334 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/security/AbstractQueryBlackListHandler.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/security/AbstractQueryBlackListHandler.java @@ -10,6 +10,7 @@ import java.util.regex.Pattern; /** * 查询表/字段 黑名单处理 + * * @Author taoYan * @Date 2022/3/17 11:21 **/ @@ -38,6 +39,7 @@ public abstract class AbstractQueryBlackListHandler { /** * 根据 sql语句 获取表和字段信息,需要到具体的实现类重写此方法- * 不同的场景 处理可能不太一样 需要自定义,但是返回值确定 + * * @param sql * @return */ @@ -46,6 +48,7 @@ public abstract class AbstractQueryBlackListHandler { /** * 校验sql语句 成功返回true + * * @param sql * @return */ @@ -55,15 +58,15 @@ public abstract class AbstractQueryBlackListHandler { try { list = this.getQueryTableInfo(sql.toLowerCase()); } catch (Exception e) { - log.warn("校验sql语句,解析报错:{}",e.getMessage()); + log.warn("校验sql语句,解析报错:{}", e.getMessage()); } - - if(list==null){ + + if (list == null) { return true; } log.info(" 获取sql信息 :{} ", list.toString()); boolean flag = checkTableAndFieldsName(list); - if(flag == false){ + if (flag == false) { return false; } for (QueryTable table : list) { @@ -73,7 +76,7 @@ public abstract class AbstractQueryBlackListHandler { if (fieldRule != null) { if ("*".equals(fieldRule) || table.isAll()) { flag = false; - log.warn("sql黑名单校验,表【"+name+"】禁止查询"); + log.warn("sql黑名单校验,表【" + name + "】禁止查询"); break; } else if (table.existSameField(fieldRule)) { flag = false; @@ -84,7 +87,7 @@ public abstract class AbstractQueryBlackListHandler { } // 返回黑名单校验结果(不合法直接抛出异常) - if(!flag){ + if (!flag) { log.error(this.getError()); throw new JeecgSqlInjectionException(this.getError()); } @@ -94,24 +97,25 @@ public abstract class AbstractQueryBlackListHandler { /** * 校验表名和字段名是否有效,或是是否会带些特殊的字符串进行sql注入 * issues/4983 SQL Injection in 3.5.1 #4983 + * * @return */ - private boolean checkTableAndFieldsName(List list){ + private boolean checkTableAndFieldsName(List list) { boolean flag = true; - for(QueryTable queryTable: list){ + for (QueryTable queryTable : list) { String tableName = queryTable.getName(); - if(hasSpecialString(tableName)){ + if (hasSpecialString(tableName)) { flag = false; - log.warn("sql黑名单校验,表名【"+tableName+"】包含特殊字符"); + log.warn("sql黑名单校验,表名【" + tableName + "】包含特殊字符"); break; } Set fields = queryTable.getFields(); - for(String name: fields){ - if(hasSpecialString(name)){ + for (String name : fields) { + if (hasSpecialString(name)) { flag = false; - log.warn("sql黑名单校验,字段名【"+name+"】包含特殊字符"); + log.warn("sql黑名单校验,字段名【" + name + "】包含特殊字符"); break; - } + } } } return flag; @@ -119,17 +123,18 @@ public abstract class AbstractQueryBlackListHandler { /** * 是否包含特殊的字符串 + * * @param name * @return */ - private boolean hasSpecialString(String name){ + private boolean hasSpecialString(String name) { Matcher m = ILLEGAL_NAME_REG.matcher(name); if (m.find()) { return true; } return false; } - + /** * 查询的表的信息 @@ -202,7 +207,7 @@ public abstract class AbstractQueryBlackListHandler { for (String controlField : controlFields) { if (sqlField.equals(controlField)) { // 非常明确的列直接比较 - log.warn("sql黑名单校验,表【"+name+"】中字段【"+controlField+"】禁止查询"); + log.warn("sql黑名单校验,表【" + name + "】中字段【" + controlField + "】禁止查询"); return true; } else { // 使用表达式的列 只能判读字符串包含了 @@ -211,7 +216,7 @@ public abstract class AbstractQueryBlackListHandler { aliasColumn = alias + "." + controlField; } if (sqlField.indexOf(aliasColumn) != -1) { - log.warn("sql黑名单校验,表【"+name+"】中字段【"+controlField+"】禁止查询"); + log.warn("sql黑名单校验,表【" + name + "】中字段【" + controlField + "】禁止查询"); return true; } } @@ -231,7 +236,7 @@ public abstract class AbstractQueryBlackListHandler { } } - public String getError(){ + public String getError() { // TODO return "系统设置了安全规则,敏感表和敏感字段禁止查询,联系管理员授权!"; } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/security/JdbcSecurityUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/security/JdbcSecurityUtil.java index ab948f7..5cfde8f 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/security/JdbcSecurityUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/security/JdbcSecurityUtil.java @@ -5,6 +5,7 @@ import org.jeecg.common.util.oConvertUtils; /** * jdbc连接校验 + * * @Author taoYan * @Date 2022/8/10 18:15 **/ @@ -14,33 +15,33 @@ public class JdbcSecurityUtil { * 连接驱动漏洞 最新版本修复后,可删除相应的key * postgre:authenticationPluginClassName, sslhostnameverifier, socketFactory, sslfactory, sslpasswordcallback * https://github.com/pgjdbc/pgjdbc/security/advisories/GHSA-v7wg-cpwc-24m4 - * */ public static final String[] notAllowedProps = new String[]{"authenticationPluginClassName", "sslhostnameverifier", "socketFactory", "sslfactory", "sslpasswordcallback"}; /** * 校验sql是否有特定的key + * * @param jdbcUrl * @return */ - public static void validate(String jdbcUrl){ - if(oConvertUtils.isEmpty(jdbcUrl)){ + public static void validate(String jdbcUrl) { + if (oConvertUtils.isEmpty(jdbcUrl)) { return; } String urlConcatChar = "?"; - if(jdbcUrl.indexOf(urlConcatChar)<0){ + if (jdbcUrl.indexOf(urlConcatChar) < 0) { return; } - String argString = jdbcUrl.substring(jdbcUrl.indexOf(urlConcatChar)+1); + String argString = jdbcUrl.substring(jdbcUrl.indexOf(urlConcatChar) + 1); String[] keyAndValues = argString.split("&"); - for(String temp: keyAndValues){ + for (String temp : keyAndValues) { String key = temp.split("=")[0]; - for(String prop: notAllowedProps){ - if(prop.equalsIgnoreCase(key)){ - throw new JeecgBootException("连接地址有安全风险,【"+key+"】"); + for (String prop : notAllowedProps) { + if (prop.equalsIgnoreCase(key)) { + throw new JeecgBootException("连接地址有安全风险,【" + key + "】"); } } } } - + } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/security/SecurityTools.java b/physical-base-core/src/main/java/org/jeecg/common/util/security/SecurityTools.java index 9adc8bf..c3023fd 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/security/SecurityTools.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/security/SecurityTools.java @@ -8,8 +8,9 @@ import cn.hutool.crypto.asymmetric.RSA; import cn.hutool.crypto.asymmetric.Sign; import cn.hutool.crypto.asymmetric.SignAlgorithm; import cn.hutool.crypto.symmetric.AES; -import org.jeecg.common.util.security.entity.*; import com.alibaba.fastjson.JSONObject; +import org.jeecg.common.util.security.entity.*; + import javax.crypto.SecretKey; import java.security.KeyPair; @@ -21,21 +22,20 @@ public class SecurityTools { public static final String ALGORITHM = "AES/ECB/PKCS5Padding"; public static SecurityResp valid(SecurityReq req) { - SecurityResp resp=new SecurityResp(); - String pubKey=req.getPubKey(); - String aesKey=req.getAesKey(); - String data=req.getData(); - String signData=req.getSignData(); - RSA rsa=new RSA(null, Base64Decoder.decode(pubKey)); - Sign sign= new Sign(SignAlgorithm.SHA1withRSA,null,pubKey); - + SecurityResp resp = new SecurityResp(); + String pubKey = req.getPubKey(); + String aesKey = req.getAesKey(); + String data = req.getData(); + String signData = req.getSignData(); + RSA rsa = new RSA(null, Base64Decoder.decode(pubKey)); + Sign sign = new Sign(SignAlgorithm.SHA1withRSA, null, pubKey); byte[] decryptAes = rsa.decrypt(aesKey, KeyType.PublicKey); //log.info("rsa解密后的秘钥"+ Base64Encoder.encode(decryptAes)); AES aes = SecureUtil.aes(decryptAes); - String dencrptValue =aes.decryptStr(data); + String dencrptValue = aes.decryptStr(data); //log.info("解密后报文"+dencrptValue); resp.setData(JSONObject.parseObject(dencrptValue)); @@ -46,33 +46,34 @@ public class SecurityTools { public static SecuritySignResp sign(SecuritySignReq req) { SecretKey secretKey = SecureUtil.generateKey(ALGORITHM); - byte[] key= secretKey.getEncoded(); - String prikey=req.getPrikey(); - String data=req.getData(); + byte[] key = secretKey.getEncoded(); + String prikey = req.getPrikey(); + String data = req.getData(); AES aes = SecureUtil.aes(key); aes.getSecretKey().getEncoded(); - String encrptData =aes.encryptBase64(data); - RSA rsa=new RSA(prikey,null); + String encrptData = aes.encryptBase64(data); + RSA rsa = new RSA(prikey, null); byte[] encryptAesKey = rsa.encrypt(secretKey.getEncoded(), KeyType.PrivateKey); //log.info(("rsa加密过的秘钥=="+Base64Encoder.encode(encryptAesKey)); - Sign sign= new Sign(SignAlgorithm.SHA1withRSA,prikey,null); + Sign sign = new Sign(SignAlgorithm.SHA1withRSA, prikey, null); byte[] signed = sign.sign(data.getBytes()); //log.info(("签名数据===》》"+Base64Encoder.encode(signed)); - SecuritySignResp resp=new SecuritySignResp(); + SecuritySignResp resp = new SecuritySignResp(); resp.setAesKey(Base64Encoder.encode(encryptAesKey)); resp.setData(encrptData); resp.setSignData(Base64Encoder.encode(signed)); return resp; } - public static MyKeyPair generateKeyPair(){ - KeyPair keyPair= SecureUtil.generateKeyPair(SignAlgorithm.SHA1withRSA.getValue(),2048); - String priKey= Base64Encoder.encode(keyPair.getPrivate().getEncoded()); - String pubkey= Base64Encoder.encode(keyPair.getPublic().getEncoded()); - MyKeyPair resp=new MyKeyPair(); + + public static MyKeyPair generateKeyPair() { + KeyPair keyPair = SecureUtil.generateKeyPair(SignAlgorithm.SHA1withRSA.getValue(), 2048); + String priKey = Base64Encoder.encode(keyPair.getPrivate().getEncoded()); + String pubkey = Base64Encoder.encode(keyPair.getPublic().getEncoded()); + MyKeyPair resp = new MyKeyPair(); resp.setPriKey(priKey); resp.setPubKey(pubkey); return resp; diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/InjectionSyntaxObjectAnalyzer.java b/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/InjectionSyntaxObjectAnalyzer.java index b31f7c3..6c07980 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/InjectionSyntaxObjectAnalyzer.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/InjectionSyntaxObjectAnalyzer.java @@ -8,12 +8,7 @@ import net.sf.jsqlparser.expression.operators.conditional.AndExpression; import net.sf.jsqlparser.expression.operators.conditional.OrExpression; import net.sf.jsqlparser.expression.operators.relational.ComparisonOperator; import net.sf.jsqlparser.schema.Column; -import net.sf.jsqlparser.statement.select.Join; -import net.sf.jsqlparser.statement.select.OrderByElement; -import net.sf.jsqlparser.statement.select.PlainSelect; -import net.sf.jsqlparser.statement.select.SelectItem; -import net.sf.jsqlparser.statement.select.SubSelect; -import net.sf.jsqlparser.statement.select.WithItem; +import net.sf.jsqlparser.statement.select.*; import net.sf.jsqlparser.util.TablesNamesFinder; import org.jeecg.common.exception.JeecgSqlInjectionException; import org.jeecg.common.util.sqlInjection.parse.ConstAnalyzer; diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/SqlInjectionAnalyzer.java b/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/SqlInjectionAnalyzer.java index 61f06a7..0c58e39 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/SqlInjectionAnalyzer.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/SqlInjectionAnalyzer.java @@ -2,6 +2,7 @@ package org.jeecg.common.util.sqlInjection; import org.jeecg.common.exception.JeecgSqlInjectionException; import org.jeecg.common.util.sqlInjection.parse.ParserSupport; + ; /** @@ -54,10 +55,10 @@ public class SqlInjectionAnalyzer { /** * sql校验 */ - public static void checkSql(String sql,boolean check){ + public static void checkSql(String sql, boolean check) { SqlInjectionAnalyzer sqlInjectionAnalyzer = new SqlInjectionAnalyzer(); sqlInjectionAnalyzer.injectCheckEnable(check); - ParserSupport.SqlParserInfo sqlParserInfo = ParserSupport.parse0(sql, null,null); + ParserSupport.SqlParserInfo sqlParserInfo = ParserSupport.parse0(sql, null, null); sqlInjectionAnalyzer.injectAnalyse(sqlParserInfo); } } diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ConstAnalyzer.java b/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ConstAnalyzer.java index 9b7345c..8076c26 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ConstAnalyzer.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ConstAnalyzer.java @@ -1,45 +1,11 @@ package org.jeecg.common.util.sqlInjection.parse; import net.sf.jsqlparser.expression.*; -import net.sf.jsqlparser.expression.operators.arithmetic.Addition; -import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd; -import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseLeftShift; -import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseOr; -import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseRightShift; -import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseXor; -import net.sf.jsqlparser.expression.operators.arithmetic.Concat; -import net.sf.jsqlparser.expression.operators.arithmetic.Division; -import net.sf.jsqlparser.expression.operators.arithmetic.IntegerDivision; -import net.sf.jsqlparser.expression.operators.arithmetic.Modulo; -import net.sf.jsqlparser.expression.operators.arithmetic.Multiplication; -import net.sf.jsqlparser.expression.operators.arithmetic.Subtraction; +import net.sf.jsqlparser.expression.operators.arithmetic.*; import net.sf.jsqlparser.expression.operators.conditional.AndExpression; import net.sf.jsqlparser.expression.operators.conditional.OrExpression; import net.sf.jsqlparser.expression.operators.conditional.XorExpression; -import net.sf.jsqlparser.expression.operators.relational.Between; -import net.sf.jsqlparser.expression.operators.relational.EqualsTo; -import net.sf.jsqlparser.expression.operators.relational.ExistsExpression; -import net.sf.jsqlparser.expression.operators.relational.ExpressionList; -import net.sf.jsqlparser.expression.operators.relational.FullTextSearch; -import net.sf.jsqlparser.expression.operators.relational.GeometryDistance; -import net.sf.jsqlparser.expression.operators.relational.GreaterThan; -import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals; -import net.sf.jsqlparser.expression.operators.relational.InExpression; -import net.sf.jsqlparser.expression.operators.relational.IsBooleanExpression; -import net.sf.jsqlparser.expression.operators.relational.IsDistinctExpression; -import net.sf.jsqlparser.expression.operators.relational.IsNullExpression; -import net.sf.jsqlparser.expression.operators.relational.ItemsListVisitor; -import net.sf.jsqlparser.expression.operators.relational.JsonOperator; -import net.sf.jsqlparser.expression.operators.relational.LikeExpression; -import net.sf.jsqlparser.expression.operators.relational.Matches; -import net.sf.jsqlparser.expression.operators.relational.MinorThan; -import net.sf.jsqlparser.expression.operators.relational.MinorThanEquals; -import net.sf.jsqlparser.expression.operators.relational.MultiExpressionList; -import net.sf.jsqlparser.expression.operators.relational.NamedExpressionList; -import net.sf.jsqlparser.expression.operators.relational.NotEqualsTo; -import net.sf.jsqlparser.expression.operators.relational.RegExpMatchOperator; -import net.sf.jsqlparser.expression.operators.relational.RegExpMySQLOperator; -import net.sf.jsqlparser.expression.operators.relational.SimilarToExpression; +import net.sf.jsqlparser.expression.operators.relational.*; import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.statement.select.AllColumns; import net.sf.jsqlparser.statement.select.AllTableColumns; @@ -168,14 +134,17 @@ public class ConstAnalyzer implements ExpressionVisitor, ItemsListVisitor { /** * 用于处理 OverlapsCondition 类型的表达式 + * * @param overlapsCondition */ @Override public void visit(OverlapsCondition overlapsCondition) { constFlag.set(false); } + /** * 用于处理 SafeCastExpression 类型的表达式。 + * * @param safeCastExpression */ @Override diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ParserSupport.java b/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ParserSupport.java index 8808726..8be7b87 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ParserSupport.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/ParserSupport.java @@ -1,5 +1,6 @@ package org.jeecg.common.util.sqlInjection.parse; +import com.google.common.base.Throwables; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.parser.*; @@ -8,17 +9,15 @@ import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.Select; import net.sf.jsqlparser.statement.select.SelectBody; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.exception.JeecgSqlInjectionException; import java.lang.reflect.InvocationTargetException; import java.util.regex.Matcher; import java.util.regex.Pattern; -import com.google.common.base.Throwables; -import org.jeecg.common.exception.JeecgBootException; -import org.jeecg.common.exception.JeecgSqlInjectionException; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; /** * 解析sql支持 @@ -88,13 +87,13 @@ public class ParserSupport { public static SqlParserInfo parse0(String sql, CCJSqlParserVisitor visitor, SqlSyntaxNormalizer sqlSyntaxAnalyzer) throws JeecgSqlInjectionException { //检查是否非select开头,暂不支持 - if(!sql.toLowerCase().trim().startsWith("select ")) { + if (!sql.toLowerCase().trim().startsWith("select ")) { log.warn("传入sql 非select开头,不支持非select开头的语句解析!"); return null; } //检查是否存储过程,暂不支持 - if(sql.toLowerCase().trim().startsWith("call ")){ + if (sql.toLowerCase().trim().startsWith("call ")) { log.warn("传入call 开头存储过程,不支持存储过程解析!"); return null; } @@ -116,7 +115,7 @@ public class ParserSupport { stmt = parser.Statement(); } catch (Exception ex) { log.error("请注意,SQL语法可能存在问题---> {}", ex.getMessage()); - throw new JeecgSqlInjectionException("请注意,SQL语法可能存在问题:"+sql); + throw new JeecgSqlInjectionException("请注意,SQL语法可能存在问题:" + sql); } if (null != visitor) { parser.getASTRoot().jjtAccept(visitor, null); diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/SqlSyntaxNormalizer.java b/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/SqlSyntaxNormalizer.java index 8444781..c066a79 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/SqlSyntaxNormalizer.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/sqlInjection/parse/SqlSyntaxNormalizer.java @@ -3,7 +3,7 @@ package org.jeecg.common.util.sqlInjection.parse; import net.sf.jsqlparser.util.TablesNamesFinder; /** - * SQL语句分析转换器基类
+ * SQL语句分析转换器基类
* 基于SQL语法对象实现对SQL的修改 * (暂时用不到) * diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/ObjectParseUtil.java b/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/ObjectParseUtil.java index 5091e9c..99b5060 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/ObjectParseUtil.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/ObjectParseUtil.java @@ -2,7 +2,7 @@ // //import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; // -///** +/// ** // * 判断类型,追加查询规则 // * // * @Author Scott diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/QueryRuleEnum.java b/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/QueryRuleEnum.java index 0bfb9d8..88fdc4b 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/QueryRuleEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/QueryRuleEnum.java @@ -2,7 +2,7 @@ // //import org.jeecg.common.util.oConvertUtils; // -///** +/// ** // * Query 规则 常量 // * @Author Scott // * @Date 2019年02月14日 diff --git a/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/QueryRuleVo.java b/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/QueryRuleVo.java index 94d3408..207edeb 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/QueryRuleVo.java +++ b/physical-base-core/src/main/java/org/jeecg/common/util/superSearch/QueryRuleVo.java @@ -2,7 +2,7 @@ // //import lombok.Data; // -///** +/// ** // * @Description: QueryRuleVo // * @author: jeecg-boot // */ diff --git a/physical-base-core/src/main/java/org/jeecg/config/AutoPoiConfig.java b/physical-base-core/src/main/java/org/jeecg/config/AutoPoiConfig.java index 26a7dd3..1b48ba9 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/AutoPoiConfig.java +++ b/physical-base-core/src/main/java/org/jeecg/config/AutoPoiConfig.java @@ -18,6 +18,7 @@ public class AutoPoiConfig { * 举例: @Excel(name = "性别", width = 15, dicCode = "sex") * 1、导出的时候会根据字典配置,把值1,2翻译成:男、女; * 2、导入的时候,会把男、女翻译成1,2存进数据库; + * * @return */ @Bean diff --git a/physical-base-core/src/main/java/org/jeecg/config/AutoPoiDictConfig.java b/physical-base-core/src/main/java/org/jeecg/config/AutoPoiDictConfig.java index a21ab35..28f9fd4 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/AutoPoiDictConfig.java +++ b/physical-base-core/src/main/java/org/jeecg/config/AutoPoiDictConfig.java @@ -1,10 +1,7 @@ package org.jeecg.config; -import java.util.ArrayList; -import java.util.List; - import jakarta.annotation.Resource; - +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.CommonAPI; import org.jeecg.common.system.vo.DictModel; import org.jeecg.common.util.oConvertUtils; @@ -12,70 +9,71 @@ import org.jeecgframework.dict.service.AutoPoiDictServiceI; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; -import lombok.extern.slf4j.Slf4j; +import java.util.ArrayList; +import java.util.List; /** * 描述:AutoPoi Excel注解支持字典参数设置 - * 举例: @Excel(name = "性别", width = 15, dicCode = "sex") + * 举例: @Excel(name = "性别", width = 15, dicCode = "sex") * 1、导出的时候会根据字典配置,把值1,2翻译成:男、女; * 2、导入的时候,会把男、女翻译成1,2存进数据库; - * - * @Author:scott - * @since:2019-04-09 + * + * @Author:scott + * @since:2019-04-09 * @Version:1.0 */ @Slf4j @Service public class AutoPoiDictConfig implements AutoPoiDictServiceI { - final static String EXCEL_SPLIT_TAG = "_"; - final static String TEMP_EXCEL_SPLIT_TAG = "---"; + final static String EXCEL_SPLIT_TAG = "_"; + final static String TEMP_EXCEL_SPLIT_TAG = "---"; - @Lazy - @Resource - private CommonAPI commonApi; + @Lazy + @Resource + private CommonAPI commonApi; - /** - * 通过字典查询easypoi,所需字典文本 - * - * @Author:scott - * @since:2019-04-09 - * @return - */ - @Override - public String[] queryDict(String dicTable, String dicCode, String dicText) { - List dictReplaces = new ArrayList(); - List dictList = null; - // step.1 如果没有字典表则使用系统字典表 - if (oConvertUtils.isEmpty(dicTable)) { - dictList = commonApi.queryDictItemsByCode(dicCode); - } else { - try { - dicText = oConvertUtils.getString(dicText, dicCode); - dictList = commonApi.queryTableDictItemsByCode(dicTable, dicText, dicCode); - } catch (Exception e) { - log.error(e.getMessage(),e); - } - } + /** + * 通过字典查询easypoi,所需字典文本 + * + * @return + * @Author:scott + * @since:2019-04-09 + */ + @Override + public String[] queryDict(String dicTable, String dicCode, String dicText) { + List dictReplaces = new ArrayList(); + List dictList = null; + // step.1 如果没有字典表则使用系统字典表 + if (oConvertUtils.isEmpty(dicTable)) { + dictList = commonApi.queryDictItemsByCode(dicCode); + } else { + try { + dicText = oConvertUtils.getString(dicText, dicCode); + dictList = commonApi.queryTableDictItemsByCode(dicTable, dicText, dicCode); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } - for (DictModel t : dictList) { - //update-begin---author:liusq Date:20230517 for:[issues/4917]excel 导出异常--- - if(t!=null && t.getText()!=null && t.getValue()!=null){ - //update-end---author:liusq Date:20230517 for:[issues/4917]excel 导出异常--- - //update-begin---author:scott Date:20211220 for:[issues/I4MBB3]@Excel dicText字段的值有下划线时,导入功能不能正确解析--- - if(t.getValue().contains(EXCEL_SPLIT_TAG)){ - String val = t.getValue().replace(EXCEL_SPLIT_TAG,TEMP_EXCEL_SPLIT_TAG); - dictReplaces.add(t.getText() + EXCEL_SPLIT_TAG + val); - }else{ - dictReplaces.add(t.getText() + EXCEL_SPLIT_TAG + t.getValue()); - } - //update-end---author:20211220 Date:20211220 for:[issues/I4MBB3]@Excel dicText字段的值有下划线时,导入功能不能正确解析--- - } - } - if (dictReplaces != null && dictReplaces.size() != 0) { - log.info("---AutoPoi--Get_DB_Dict------"+ dictReplaces.toString()); - return dictReplaces.toArray(new String[dictReplaces.size()]); - } - return null; - } + for (DictModel t : dictList) { + //update-begin---author:liusq Date:20230517 for:[issues/4917]excel 导出异常--- + if (t != null && t.getText() != null && t.getValue() != null) { + //update-end---author:liusq Date:20230517 for:[issues/4917]excel 导出异常--- + //update-begin---author:scott Date:20211220 for:[issues/I4MBB3]@Excel dicText字段的值有下划线时,导入功能不能正确解析--- + if (t.getValue().contains(EXCEL_SPLIT_TAG)) { + String val = t.getValue().replace(EXCEL_SPLIT_TAG, TEMP_EXCEL_SPLIT_TAG); + dictReplaces.add(t.getText() + EXCEL_SPLIT_TAG + val); + } else { + dictReplaces.add(t.getText() + EXCEL_SPLIT_TAG + t.getValue()); + } + //update-end---author:20211220 Date:20211220 for:[issues/I4MBB3]@Excel dicText字段的值有下划线时,导入功能不能正确解析--- + } + } + if (dictReplaces != null && dictReplaces.size() != 0) { + log.info("---AutoPoi--Get_DB_Dict------" + dictReplaces.toString()); + return dictReplaces.toArray(new String[dictReplaces.size()]); + } + return null; + } } diff --git a/physical-base-core/src/main/java/org/jeecg/config/CorsFilterCondition.java b/physical-base-core/src/main/java/org/jeecg/config/CorsFilterCondition.java index b43cc8e..67bf31b 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/CorsFilterCondition.java +++ b/physical-base-core/src/main/java/org/jeecg/config/CorsFilterCondition.java @@ -7,6 +7,7 @@ import org.springframework.core.type.AnnotatedTypeMetadata; /** * 跨域配置加载条件 + * * @author: jeecg-boot */ public class CorsFilterCondition implements Condition { @@ -15,7 +16,7 @@ public class CorsFilterCondition implements Condition { public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { Object object = context.getEnvironment().getProperty(CommonConstant.CLOUD_SERVER_KEY); //如果没有服务注册发现的配置 说明是单体应用 则加载跨域配置 返回true - if(object==null){ + if (object == null) { return true; } return false; diff --git a/physical-base-core/src/main/java/org/jeecg/config/DruidConfig.java b/physical-base-core/src/main/java/org/jeecg/config/DruidConfig.java index 84b33f5..96b504c 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/DruidConfig.java +++ b/physical-base-core/src/main/java/org/jeecg/config/DruidConfig.java @@ -1,11 +1,9 @@ package org.jeecg.config; -import java.io.IOException; - import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure; import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties; +import com.alibaba.druid.util.Utils; import jakarta.servlet.*; - import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; @@ -13,7 +11,7 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.alibaba.druid.util.Utils; +import java.io.IOException; /** * @Description: DruidConfig配置类 diff --git a/physical-base-core/src/main/java/org/jeecg/config/DruidWallConfigRegister.java b/physical-base-core/src/main/java/org/jeecg/config/DruidWallConfigRegister.java index 5dd2d9d..cf199d4 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/DruidWallConfigRegister.java +++ b/physical-base-core/src/main/java/org/jeecg/config/DruidWallConfigRegister.java @@ -27,6 +27,7 @@ public class DruidWallConfigRegister implements SpringApplicationRunListener { /** * 必备,否则启动报错 + * * @param application * @param args */ diff --git a/physical-base-core/src/main/java/org/jeecg/config/JeecgBaseConfig.java b/physical-base-core/src/main/java/org/jeecg/config/JeecgBaseConfig.java index 4597d21..d58a261 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/JeecgBaseConfig.java +++ b/physical-base-core/src/main/java/org/jeecg/config/JeecgBaseConfig.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Component; /** * 加载项目配置 + * * @author: jeecg-boot */ @Component("jeecgBaseConfig") @@ -14,7 +15,8 @@ import org.springframework.stereotype.Component; public class JeecgBaseConfig { /** * 签名密钥串(字典等敏感接口) - * @TODO 降低使用成本加的默认值,实际以 yml配置 为准 + * + * @TODO 降低使用成本加的默认值, 实际以 yml配置 为准 */ private String signatureSecret = "dd05f1c54d63749eda95f9fa6d49v442a"; /** @@ -22,16 +24,16 @@ public class JeecgBaseConfig { */ private String signUrls; /** - * 上传模式 + * 上传模式 * 本地:local\Minio:minio\阿里云:alioss */ private String uploadType; - + /** * 平台安全模式配置 */ private Firewall firewall; - + /** * shiro拦截排除 */ @@ -52,18 +54,19 @@ public class JeecgBaseConfig { * 文件预览 */ private String fileViewDomain; - /** + /** * ES配置 */ private Elasticsearch elasticsearch; /** * 微信支付 + * * @return */ private WeiXinPay weiXinPay; - - + + public Elasticsearch getElasticsearch() { return elasticsearch; } @@ -111,6 +114,7 @@ public class JeecgBaseConfig { public void setDomainUrl(DomainUrl domainUrl) { this.domainUrl = domainUrl; } + public String getSignUrls() { return signUrls; } @@ -143,5 +147,5 @@ public class JeecgBaseConfig { public void setWeiXinPay(WeiXinPay weiXinPay) { this.weiXinPay = weiXinPay; } - + } diff --git a/physical-base-core/src/main/java/org/jeecg/config/JeecgCloudCondition.java b/physical-base-core/src/main/java/org/jeecg/config/JeecgCloudCondition.java index 34b8e9a..dc0c4f3 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/JeecgCloudCondition.java +++ b/physical-base-core/src/main/java/org/jeecg/config/JeecgCloudCondition.java @@ -7,6 +7,7 @@ import org.springframework.core.type.AnnotatedTypeMetadata; /** * 微服务环境加载条件 + * * @author: jeecg-boot */ public class JeecgCloudCondition implements Condition { @@ -15,7 +16,7 @@ public class JeecgCloudCondition implements Condition { public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { Object object = context.getEnvironment().getProperty(CommonConstant.CLOUD_SERVER_KEY); //如果没有服务注册发现的配置 说明是单体应用 - if(object==null){ + if (object == null) { return false; } return true; diff --git a/physical-base-core/src/main/java/org/jeecg/config/RestTemplateConfig.java b/physical-base-core/src/main/java/org/jeecg/config/RestTemplateConfig.java index 860889a..f5f35d3 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/RestTemplateConfig.java +++ b/physical-base-core/src/main/java/org/jeecg/config/RestTemplateConfig.java @@ -7,10 +7,11 @@ import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; /** -* 优雅的http请求方式RestTemplate -* @author: jeecg-boot -* @Return: -*/ + * 优雅的http请求方式RestTemplate + * + * @author: jeecg-boot + * @Return: + */ @Configuration public class RestTemplateConfig { diff --git a/physical-base-core/src/main/java/org/jeecg/config/StaticConfig.java b/physical-base-core/src/main/java/org/jeecg/config/StaticConfig.java index 6b2090c..50f7114 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/StaticConfig.java +++ b/physical-base-core/src/main/java/org/jeecg/config/StaticConfig.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Component; /** * 设置静态参数初始化 + * * @author: jeecg-boot */ @Component diff --git a/physical-base-core/src/main/java/org/jeecg/config/Swagger2Config.java b/physical-base-core/src/main/java/org/jeecg/config/Swagger2Config.java index 3c88fa4..0bd146a 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/Swagger2Config.java +++ b/physical-base-core/src/main/java/org/jeecg/config/Swagger2Config.java @@ -35,7 +35,7 @@ //import java.util.List; //import java.util.stream.Collectors; // -///** +/// ** // * @Author scott // */ //@Configuration diff --git a/physical-base-core/src/main/java/org/jeecg/config/Swagger3Config.java b/physical-base-core/src/main/java/org/jeecg/config/Swagger3Config.java index 64a9d7b..18b8c11 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/Swagger3Config.java +++ b/physical-base-core/src/main/java/org/jeecg/config/Swagger3Config.java @@ -1,15 +1,10 @@ package org.jeecg.config; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.Paths; import io.swagger.v3.oas.models.info.Contact; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.info.License; -import io.swagger.v3.oas.models.security.SecurityRequirement; -import io.swagger.v3.oas.models.security.SecurityScheme; -import org.jeecg.common.constant.CommonConstant; import org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -18,8 +13,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class Swagger3Config implements WebMvcConfigurer { - /** - * + /** * 显示swagger-ui.html文档展示页,还必须注入swagger资源: * * @param registry @@ -50,7 +44,7 @@ public class Swagger3Config implements WebMvcConfigurer { .title("JeecgBoot 后台服务API接口文档") .version("1.0") .contact(new Contact().name("北京国炬信息技术有限公司").url("www.jeccg.com").email("jeecgos@163.com")) - .description( "后台API接口") + .description("后台API接口") .termsOfService("NO terms of service") .license(new License().name("Apache 2.0").url("http://www.apache.org/licenses/LICENSE-2.0.html")) ); diff --git a/physical-base-core/src/main/java/org/jeecg/config/WebMvcConfiguration.java b/physical-base-core/src/main/java/org/jeecg/config/WebMvcConfiguration.java index 88ed87a..c993a58 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/WebMvcConfiguration.java +++ b/physical-base-core/src/main/java/org/jeecg/config/WebMvcConfiguration.java @@ -17,7 +17,6 @@ import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.boot.actuate.web.exchanges.InMemoryHttpExchangeRepository; import org.springframework.boot.autoconfigure.jackson.JacksonProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; @@ -46,7 +45,6 @@ import java.util.Objects; * Spring Boot 2.0 解决跨域问题 * * @Author qinfeng - * */ @Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @@ -103,6 +101,7 @@ public class WebMvcConfiguration implements WebMvcConfigurer { urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); return new CorsFilter(urlBasedCorsConfigurationSource); } + @Override public void configureMessageConverters(List> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(objectMapper()); diff --git a/physical-base-core/src/main/java/org/jeecg/config/WebSocketConfig.java b/physical-base-core/src/main/java/org/jeecg/config/WebSocketConfig.java index 66dbf2e..3f2bda9 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/WebSocketConfig.java +++ b/physical-base-core/src/main/java/org/jeecg/config/WebSocketConfig.java @@ -13,8 +13,8 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter; @Configuration public class WebSocketConfig { /** - * 注入ServerEndpointExporter, - * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint + * 注入ServerEndpointExporter, + * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint */ @Bean public ServerEndpointExporter serverEndpointExporter() { @@ -22,16 +22,16 @@ public class WebSocketConfig { } @Bean - public WebsocketFilter websocketFilter(){ + public WebsocketFilter websocketFilter() { return new WebsocketFilter(); } @Bean - public FilterRegistrationBean getFilterRegistrationBean(){ + public FilterRegistrationBean getFilterRegistrationBean() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(websocketFilter()); //TODO 临时注释掉,测试下线上socket总断的问题 - bean.addUrlPatterns("/taskCountSocket/*", "/websocket/*","/eoaSocket/*","/eoaNewChatSocket/*", "/newsWebsocket/*", "/vxeSocket/*"); + bean.addUrlPatterns("/taskCountSocket/*", "/websocket/*", "/eoaSocket/*", "/eoaNewChatSocket/*", "/newsWebsocket/*", "/vxeSocket/*"); return bean; } diff --git a/physical-base-core/src/main/java/org/jeecg/config/filter/RequestBodyReserveFilter.java b/physical-base-core/src/main/java/org/jeecg/config/filter/RequestBodyReserveFilter.java index 050c174..a1d16f7 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/filter/RequestBodyReserveFilter.java +++ b/physical-base-core/src/main/java/org/jeecg/config/filter/RequestBodyReserveFilter.java @@ -1,14 +1,15 @@ package org.jeecg.config.filter; -import org.jeecg.common.constant.CommonConstant; -import org.jeecg.config.sign.util.BodyReaderHttpServletRequestWrapper; - import jakarta.servlet.*; import jakarta.servlet.http.HttpServletRequest; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.config.sign.util.BodyReaderHttpServletRequestWrapper; + import java.io.IOException; /** * 针对post请求,将HttpServletRequest包一层 保留body里的参数 + * * @Author taoYan * @Date 2022/4/25 19:19 **/ @@ -18,15 +19,15 @@ public class RequestBodyReserveFilter implements Filter { public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { ServletRequest requestWrapper = null; - if(servletRequest instanceof HttpServletRequest) { + if (servletRequest instanceof HttpServletRequest) { HttpServletRequest req = (HttpServletRequest) servletRequest; // POST请求类型,才获取POST请求体 - if(CommonConstant.HTTP_POST.equals(req.getMethod())){ + if (CommonConstant.HTTP_POST.equals(req.getMethod())) { requestWrapper = new BodyReaderHttpServletRequestWrapper(req); } } - if(requestWrapper == null) { + if (requestWrapper == null) { filterChain.doFilter(servletRequest, servletResponse); } else { filterChain.doFilter(requestWrapper, servletResponse); diff --git a/physical-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java b/physical-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java index b9a788e..9e373f7 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java +++ b/physical-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java @@ -1,5 +1,8 @@ package org.jeecg.config.filter; +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.CommonAPI; import org.jeecg.common.util.RedisUtil; @@ -7,13 +10,11 @@ import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.TokenUtils; import org.jeecg.common.util.oConvertUtils; -import jakarta.servlet.*; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /** * websocket 前端将token放到子协议里传入 与后端建立连接时需要用到http协议,此处用于校验token的有效性 + * * @Author taoYan * @Date 2022/4/21 17:01 **/ @@ -34,7 +35,7 @@ public class WebsocketFilter implements Filter { if (redisUtil == null) { redisUtil = SpringContextUtils.getBean(RedisUtil.class); } - HttpServletRequest request = (HttpServletRequest)servletRequest; + HttpServletRequest request = (HttpServletRequest) servletRequest; String token = request.getHeader(TOKEN_KEY); log.debug("Websocket连接 Token安全校验,Path = {},token:{}", request.getRequestURI(), token); @@ -46,7 +47,7 @@ public class WebsocketFilter implements Filter { log.debug("Websocket连接 Token安全校验失败,IP:{}, Token:{}, Path = {},异常:{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); return; } - HttpServletResponse response = (HttpServletResponse)servletResponse; + HttpServletResponse response = (HttpServletResponse) servletResponse; response.setHeader(TOKEN_KEY, token); filterChain.doFilter(servletRequest, servletResponse); } diff --git a/physical-base-core/src/main/java/org/jeecg/config/firewall/SqlInjection/SysDictTableWhite.java b/physical-base-core/src/main/java/org/jeecg/config/firewall/SqlInjection/SysDictTableWhite.java index 71849ae..c3469c5 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/firewall/SqlInjection/SysDictTableWhite.java +++ b/physical-base-core/src/main/java/org/jeecg/config/firewall/SqlInjection/SysDictTableWhite.java @@ -2,6 +2,7 @@ package org.jeecg.config.firewall.SqlInjection; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.util.oConvertUtils; + import java.util.HashSet; import java.util.Set; @@ -20,7 +21,7 @@ public class SysDictTableWhite { private boolean all; public SysDictTableWhite() { - + } public SysDictTableWhite(String name, String alias) { @@ -88,7 +89,7 @@ public class SysDictTableWhite { return true; } - + @Override public String toString() { diff --git a/physical-base-core/src/main/java/org/jeecg/config/firewall/interceptor/LowCodeModeInterceptor.java b/physical-base-core/src/main/java/org/jeecg/config/firewall/interceptor/LowCodeModeInterceptor.java index 911599b..0f2e994 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/firewall/interceptor/LowCodeModeInterceptor.java +++ b/physical-base-core/src/main/java/org/jeecg/config/firewall/interceptor/LowCodeModeInterceptor.java @@ -1,25 +1,22 @@ package org.jeecg.config.firewall.interceptor; import com.alibaba.fastjson.JSON; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.CommonAPI; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; -import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.CommonUtils; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.config.JeecgBaseConfig; -import org.jeecg.config.firewall.interceptor.enums.LowCodeUrlsEnum; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.AntPathMatcher; import org.springframework.web.servlet.HandlerInterceptor; -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Set; @@ -33,7 +30,7 @@ import java.util.Set; * 3.online图表的所有配置功能,和sql解析 * 4.仪表盘的在线配置功能,和sql解析 * 5.大屏的在线配置功能,和sql解析 - * + *

* 积木的逻辑单独处理 * 1.积木报表的在线配置功能,和sql解析 * @@ -63,7 +60,7 @@ public class LowCodeModeInterceptor implements HandlerInterceptor { jeecgBaseConfig = SpringContextUtils.getBean(JeecgBaseConfig.class); } - if (jeecgBaseConfig.getFirewall()!=null && LowCodeModeInterceptor.LOW_CODE_MODE_PROD.equals(jeecgBaseConfig.getFirewall().getLowCodeMode())) { + if (jeecgBaseConfig.getFirewall() != null && LowCodeModeInterceptor.LOW_CODE_MODE_PROD.equals(jeecgBaseConfig.getFirewall().getLowCodeMode())) { String requestURI = request.getRequestURI().substring(request.getContextPath().length()); log.info("低代码模式,拦截请求路径:" + requestURI); LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); @@ -73,17 +70,17 @@ public class LowCodeModeInterceptor implements HandlerInterceptor { //当前登录人拥有的角色 hasRoles = commonAPI.queryUserRolesById(loginUser.getId()); } - + log.info("get loginUser info: {}", loginUser); log.info("get loginRoles info: {}", hasRoles != null ? hasRoles.toArray() : "空"); - + //拥有的角色 和 允许开发角色存在交集 boolean hasIntersection = CommonUtils.hasIntersection(hasRoles, CommonConstant.allowDevRoles); //如果是超级管理员 或者 允许开发的角色,则不做限制 - if (loginUser!=null && ("admin".equals(loginUser.getUsername()) || hasIntersection)) { + if (loginUser != null && ("admin".equals(loginUser.getUsername()) || hasIntersection)) { return true; } - + this.returnErrorMessage(response); return false; } diff --git a/physical-base-core/src/main/java/org/jeecg/config/firewall/interceptor/enums/LowCodeUrlsEnum.java b/physical-base-core/src/main/java/org/jeecg/config/firewall/interceptor/enums/LowCodeUrlsEnum.java index 9952445..0ada976 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/firewall/interceptor/enums/LowCodeUrlsEnum.java +++ b/physical-base-core/src/main/java/org/jeecg/config/firewall/interceptor/enums/LowCodeUrlsEnum.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.stream.Collectors; /** - * * @author: qinfeng * @date: 2023/09/04 11:44 */ diff --git a/physical-base-core/src/main/java/org/jeecg/config/mybatis/JeecgTenantParser.java b/physical-base-core/src/main/java/org/jeecg/config/mybatis/JeecgTenantParser.java index 5233fdb..b9d10f9 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/mybatis/JeecgTenantParser.java +++ b/physical-base-core/src/main/java/org/jeecg/config/mybatis/JeecgTenantParser.java @@ -13,7 +13,7 @@ // //import java.util.List; // -///** +/// ** // * 复写租户条件 // */ //public class JeecgTenantParser extends TenantSqlParser { diff --git a/physical-base-core/src/main/java/org/jeecg/config/mybatis/MybatisInterceptor.java b/physical-base-core/src/main/java/org/jeecg/config/mybatis/MybatisInterceptor.java index aef2266..1a6ffcf 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/mybatis/MybatisInterceptor.java +++ b/physical-base-core/src/main/java/org/jeecg/config/mybatis/MybatisInterceptor.java @@ -21,184 +21,186 @@ import java.util.Properties; /** * mybatis拦截器,自动注入创建人、创建时间、修改人、修改时间 - * @Author scott - * @Date 2019-01-19 * + * @Author scott + * @Date 2019-01-19 */ @Slf4j @Component -@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) }) +@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})}) public class MybatisInterceptor implements Interceptor { - @Override - public Object intercept(Invocation invocation) throws Throwable { - MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; - String sqlId = mappedStatement.getId(); - log.debug("------sqlId------" + sqlId); - SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); - Object parameter = invocation.getArgs()[1]; - log.debug("------sqlCommandType------" + sqlCommandType); + @Override + public Object intercept(Invocation invocation) throws Throwable { + MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; + String sqlId = mappedStatement.getId(); + log.debug("------sqlId------" + sqlId); + SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); + Object parameter = invocation.getArgs()[1]; + log.debug("------sqlCommandType------" + sqlCommandType); - if (parameter == null) { - return invocation.proceed(); - } - if (SqlCommandType.INSERT == sqlCommandType) { - LoginUser sysUser = this.getLoginUser(); - Field[] fields = oConvertUtils.getAllFields(parameter); - for (Field field : fields) { - log.debug("------field.name------" + field.getName()); - try { - if ("createBy".equals(field.getName())) { - field.setAccessible(true); - Object localCreateBy = field.get(parameter); - field.setAccessible(false); - if (localCreateBy == null || "".equals(localCreateBy)) { - if (sysUser != null) { - // 登录人账号 - field.setAccessible(true); - field.set(parameter, sysUser.getUsername()); - field.setAccessible(false); - } - } - } - // 注入创建时间 - if ("createTime".equals(field.getName())) { - field.setAccessible(true); - Object localCreateDate = field.get(parameter); - field.setAccessible(false); - if (localCreateDate == null || "".equals(localCreateDate)) { - field.setAccessible(true); - field.set(parameter, new Date()); - field.setAccessible(false); - } - } - //注入部门编码 - if ("sysOrgCode".equals(field.getName())) { - field.setAccessible(true); - Object localSysOrgCode = field.get(parameter); - field.setAccessible(false); - if (localSysOrgCode == null || "".equals(localSysOrgCode)) { - // 获取登录用户信息 - if (sysUser != null) { - field.setAccessible(true); - field.set(parameter, sysUser.getOrgCode()); - field.setAccessible(false); - } - } - } + if (parameter == null) { + return invocation.proceed(); + } + if (SqlCommandType.INSERT == sqlCommandType) { + LoginUser sysUser = this.getLoginUser(); + Field[] fields = oConvertUtils.getAllFields(parameter); + for (Field field : fields) { + log.debug("------field.name------" + field.getName()); + try { + if ("createBy".equals(field.getName())) { + field.setAccessible(true); + Object localCreateBy = field.get(parameter); + field.setAccessible(false); + if (localCreateBy == null || "".equals(localCreateBy)) { + if (sysUser != null) { + // 登录人账号 + field.setAccessible(true); + field.set(parameter, sysUser.getUsername()); + field.setAccessible(false); + } + } + } + // 注入创建时间 + if ("createTime".equals(field.getName())) { + field.setAccessible(true); + Object localCreateDate = field.get(parameter); + field.setAccessible(false); + if (localCreateDate == null || "".equals(localCreateDate)) { + field.setAccessible(true); + field.set(parameter, new Date()); + field.setAccessible(false); + } + } + //注入部门编码 + if ("sysOrgCode".equals(field.getName())) { + field.setAccessible(true); + Object localSysOrgCode = field.get(parameter); + field.setAccessible(false); + if (localSysOrgCode == null || "".equals(localSysOrgCode)) { + // 获取登录用户信息 + if (sysUser != null) { + field.setAccessible(true); + field.set(parameter, sysUser.getOrgCode()); + field.setAccessible(false); + } + } + } - //------------------------------------------------------------------------------------------------ - //注入租户ID(是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】) - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - if (TenantConstant.TENANT_ID.equals(field.getName())) { - field.setAccessible(true); - Object localTenantId = field.get(parameter); - field.setAccessible(false); - if (localTenantId == null) { - field.setAccessible(true); + //------------------------------------------------------------------------------------------------ + //注入租户ID(是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】) + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + if (TenantConstant.TENANT_ID.equals(field.getName())) { + field.setAccessible(true); + Object localTenantId = field.get(parameter); + field.setAccessible(false); + if (localTenantId == null) { + field.setAccessible(true); - String tenantId = TenantContext.getTenant(); - //如果通过线程获取租户ID为空,则通过当前请求的request获取租户(shiro排除拦截器的请求会获取不到租户ID) - if(oConvertUtils.isEmpty(tenantId) && MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - try { - tenantId = TokenUtils.getTenantIdByRequest(SpringContextUtils.getHttpServletRequest()); - } catch (Exception e) { - //e.printStackTrace(); - } - } + String tenantId = TenantContext.getTenant(); + //如果通过线程获取租户ID为空,则通过当前请求的request获取租户(shiro排除拦截器的请求会获取不到租户ID) + if (oConvertUtils.isEmpty(tenantId) && MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + try { + tenantId = TokenUtils.getTenantIdByRequest(SpringContextUtils.getHttpServletRequest()); + } catch (Exception e) { + //e.printStackTrace(); + } + } - if (field.getType().equals(String.class)) { - // 字段类型为String - field.set(parameter, tenantId); - } else { - // 字段类型不是String - field.set(parameter, oConvertUtils.getInt(tenantId, 0)); - } - field.setAccessible(false); - } - } - } - //------------------------------------------------------------------------------------------------ - - } catch (Exception e) { - } - } - } - if (SqlCommandType.UPDATE == sqlCommandType) { - LoginUser sysUser = this.getLoginUser(); - Field[] fields = null; - if (parameter instanceof ParamMap) { - ParamMap p = (ParamMap) parameter; - //update-begin-author:scott date:20190729 for:批量更新报错issues/IZA3Q-- + if (field.getType().equals(String.class)) { + // 字段类型为String + field.set(parameter, tenantId); + } else { + // 字段类型不是String + field.set(parameter, oConvertUtils.getInt(tenantId, 0)); + } + field.setAccessible(false); + } + } + } + //------------------------------------------------------------------------------------------------ + + } catch (Exception e) { + } + } + } + if (SqlCommandType.UPDATE == sqlCommandType) { + LoginUser sysUser = this.getLoginUser(); + Field[] fields = null; + if (parameter instanceof ParamMap) { + ParamMap p = (ParamMap) parameter; + //update-begin-author:scott date:20190729 for:批量更新报错issues/IZA3Q-- String et = "et"; - if (p.containsKey(et)) { - parameter = p.get(et); - } else { - parameter = p.get("param1"); - } - //update-end-author:scott date:20190729 for:批量更新报错issues/IZA3Q- + if (p.containsKey(et)) { + parameter = p.get(et); + } else { + parameter = p.get("param1"); + } + //update-end-author:scott date:20190729 for:批量更新报错issues/IZA3Q- - //update-begin-author:scott date:20190729 for:更新指定字段时报错 issues/#516- - if (parameter == null) { - return invocation.proceed(); - } - //update-end-author:scott date:20190729 for:更新指定字段时报错 issues/#516- + //update-begin-author:scott date:20190729 for:更新指定字段时报错 issues/#516- + if (parameter == null) { + return invocation.proceed(); + } + //update-end-author:scott date:20190729 for:更新指定字段时报错 issues/#516- - fields = oConvertUtils.getAllFields(parameter); - } else { - fields = oConvertUtils.getAllFields(parameter); - } + fields = oConvertUtils.getAllFields(parameter); + } else { + fields = oConvertUtils.getAllFields(parameter); + } - for (Field field : fields) { - log.debug("------field.name------" + field.getName()); - try { - if ("updateBy".equals(field.getName())) { - //获取登录用户信息 - if (sysUser != null) { - // 登录账号 - field.setAccessible(true); - field.set(parameter, sysUser.getUsername()); - field.setAccessible(false); - } - } - if ("updateTime".equals(field.getName())) { - field.setAccessible(true); - field.set(parameter, new Date()); - field.setAccessible(false); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - return invocation.proceed(); - } + for (Field field : fields) { + log.debug("------field.name------" + field.getName()); + try { + if ("updateBy".equals(field.getName())) { + //获取登录用户信息 + if (sysUser != null) { + // 登录账号 + field.setAccessible(true); + field.set(parameter, sysUser.getUsername()); + field.setAccessible(false); + } + } + if ("updateTime".equals(field.getName())) { + field.setAccessible(true); + field.set(parameter, new Date()); + field.setAccessible(false); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return invocation.proceed(); + } - @Override - public Object plugin(Object target) { - return Plugin.wrap(target, this); - } + @Override + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } - @Override - public void setProperties(Properties properties) { - // TODO Auto-generated method stub - } + @Override + public void setProperties(Properties properties) { + // TODO Auto-generated method stub + } + + //update-begin--Author:scott Date:20191213 for:关于使用Quzrtz 开启线程任务, #465 - //update-begin--Author:scott Date:20191213 for:关于使用Quzrtz 开启线程任务, #465 /** * 获取登录用户 + * * @return */ - private LoginUser getLoginUser() { - LoginUser sysUser = null; - try { - sysUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser) SecurityUtils.getSubject().getPrincipal() : null; - } catch (Exception e) { - //e.printStackTrace(); - sysUser = null; - } - return sysUser; - } - //update-end--Author:scott Date:20191213 for:关于使用Quzrtz 开启线程任务, #465 + private LoginUser getLoginUser() { + LoginUser sysUser = null; + try { + sysUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser) SecurityUtils.getSubject().getPrincipal() : null; + } catch (Exception e) { + //e.printStackTrace(); + sysUser = null; + } + return sysUser; + } + //update-end--Author:scott Date:20191213 for:关于使用Quzrtz 开启线程任务, #465 } diff --git a/physical-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java b/physical-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java index b170fe0..97e6527 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java +++ b/physical-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java @@ -1,11 +1,14 @@ package org.jeecg.config.mybatis; -import java.util.ArrayList; -import java.util.List; - import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; import org.jeecg.common.config.TenantContext; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.TenantConstant; @@ -16,35 +19,30 @@ import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; -import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; -import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; -import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; - -import net.sf.jsqlparser.expression.Expression; -import net.sf.jsqlparser.expression.LongValue; +import java.util.ArrayList; +import java.util.List; /** * 单数据源配置(jeecg.datasource.open = false时生效) - * @Author zhoujf * + * @Author zhoujf */ @Configuration -@MapperScan(value={"org.jeecg.**.mapper*"}) +@MapperScan(value = {"org.jeecg.**.mapper*"}) public class MybatisPlusSaasConfig { /** * 是否开启系统模块的租户隔离 - * 控制范围:用户、角色、部门、我的部门、字典、分类字典、多数据源、职务、通知公告 - * - * 实现功能 - * 1.用户表通过硬编码实现租户ID隔离 - * 2.角色、部门、我的部门、字典、分类字典、多数据源、职务、通知公告除了硬编码还加入的 TENANT_TABLE 配置中,实现租户隔离更安全 - * 3.菜单表、租户表不做租户隔离 - * 4.通过拦截器MybatisInterceptor实现,增删改查数据 自动注入租户ID + * 控制范围:用户、角色、部门、我的部门、字典、分类字典、多数据源、职务、通知公告 + *

+ * 实现功能 + * 1.用户表通过硬编码实现租户ID隔离 + * 2.角色、部门、我的部门、字典、分类字典、多数据源、职务、通知公告除了硬编码还加入的 TENANT_TABLE 配置中,实现租户隔离更安全 + * 3.菜单表、租户表不做租户隔离 + * 4.通过拦截器MybatisInterceptor实现,增删改查数据 自动注入租户ID */ public static final Boolean OPEN_SYSTEM_TENANT_CONTROL = false; - + /** * 哪些表需要做多租户 表需要添加一个字段 tenant_id */ @@ -79,29 +77,29 @@ public class MybatisPlusSaasConfig { public Expression getTenantId() { String tenantId = TenantContext.getTenant(); //如果通过线程获取租户ID为空,则通过当前请求的request获取租户(shiro排除拦截器的请求会获取不到租户ID) - if(oConvertUtils.isEmpty(tenantId)){ + if (oConvertUtils.isEmpty(tenantId)) { try { tenantId = TokenUtils.getTenantIdByRequest(SpringContextUtils.getHttpServletRequest()); } catch (Exception e) { //e.printStackTrace(); } } - if(oConvertUtils.isEmpty(tenantId)){ + if (oConvertUtils.isEmpty(tenantId)) { tenantId = "0"; } return new LongValue(tenantId); } @Override - public String getTenantIdColumn(){ + public String getTenantIdColumn() { return TenantConstant.TENANT_ID_TABLE; } // 返回 true 表示不走租户逻辑 @Override public boolean ignoreTable(String tableName) { - for(String temp: TENANT_TABLE){ - if(temp.equalsIgnoreCase(tableName)){ + for (String temp : TENANT_TABLE) { + if (temp.equalsIgnoreCase(tableName)) { return false; } } @@ -119,6 +117,7 @@ public class MybatisPlusSaasConfig { /** * 动态表名切换拦截器,用于适配vue2和vue3同一个表有多个的情况,如sys_role_index在vue3情况下表名为sys_role_index_v3 + * * @return */ private DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor() { diff --git a/physical-base-core/src/main/java/org/jeecg/config/mybatis/TenantContext.java b/physical-base-core/src/main/java/org/jeecg/config/mybatis/TenantContext.java index 9546ba6..32a2d3a 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/mybatis/TenantContext.java +++ b/physical-base-core/src/main/java/org/jeecg/config/mybatis/TenantContext.java @@ -2,7 +2,7 @@ // //import lombok.extern.slf4j.Slf4j; // -///** +/// ** // * 多租户 tenant_id存储器 // * @author: jeecg-boot // */ diff --git a/physical-base-core/src/main/java/org/jeecg/config/mybatis/ThreadLocalDataHelper.java b/physical-base-core/src/main/java/org/jeecg/config/mybatis/ThreadLocalDataHelper.java index 0b60721..0caacba 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/mybatis/ThreadLocalDataHelper.java +++ b/physical-base-core/src/main/java/org/jeecg/config/mybatis/ThreadLocalDataHelper.java @@ -2,6 +2,7 @@ package org.jeecg.config.mybatis; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; + import java.util.concurrent.ConcurrentHashMap; @@ -24,11 +25,11 @@ public class ThreadLocalDataHelper { /** * 设置请求参数 * - * @param key 参数key + * @param key 参数key * @param value 参数值 */ public static void put(String key, Object value) { - if(ObjectUtil.isNotEmpty(value)) { + if (ObjectUtil.isNotEmpty(value)) { DATA_MAP.put(key, value); REQUEST_DATA.set(DATA_MAP); } diff --git a/physical-base-core/src/main/java/org/jeecg/config/mybatis/aspect/DynamicTableAspect.java b/physical-base-core/src/main/java/org/jeecg/config/mybatis/aspect/DynamicTableAspect.java index df4dc30..374b730 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/mybatis/aspect/DynamicTableAspect.java +++ b/physical-base-core/src/main/java/org/jeecg/config/mybatis/aspect/DynamicTableAspect.java @@ -1,5 +1,6 @@ package org.jeecg.config.mybatis.aspect; +import jakarta.servlet.http.HttpServletRequest; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; @@ -11,7 +12,6 @@ import org.jeecg.common.util.SpringContextUtils; import org.jeecg.config.mybatis.ThreadLocalDataHelper; import org.springframework.stereotype.Component; -import jakarta.servlet.http.HttpServletRequest; import java.lang.reflect.Method; /** diff --git a/physical-base-core/src/main/java/org/jeecg/config/mybatis/interceptor/DynamicDatasourceInterceptor.java b/physical-base-core/src/main/java/org/jeecg/config/mybatis/interceptor/DynamicDatasourceInterceptor.java index 9dfe334..9cd760d 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/mybatis/interceptor/DynamicDatasourceInterceptor.java +++ b/physical-base-core/src/main/java/org/jeecg/config/mybatis/interceptor/DynamicDatasourceInterceptor.java @@ -1,19 +1,19 @@ package org.jeecg.config.mybatis.interceptor; import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - /** * 动态数据源切换拦截器 - * + *

* 测试:拦截参数,自动切换数据源 * 未来规划:后面通过此机制,实现多租户切换数据源功能 + * * @author zyf */ @Slf4j diff --git a/physical-base-core/src/main/java/org/jeecg/config/oss/OssConfiguration.java b/physical-base-core/src/main/java/org/jeecg/config/oss/OssConfiguration.java index 0734b95..b8f228e 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/oss/OssConfiguration.java +++ b/physical-base-core/src/main/java/org/jeecg/config/oss/OssConfiguration.java @@ -8,6 +8,7 @@ import org.springframework.context.annotation.Configuration; /** * 云存储 配置 + * * @author: jeecg-boot */ @Configuration diff --git a/physical-base-core/src/main/java/org/jeecg/config/shiro/IgnoreAuth.java b/physical-base-core/src/main/java/org/jeecg/config/shiro/IgnoreAuth.java index 5306273..9f21f11 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/shiro/IgnoreAuth.java +++ b/physical-base-core/src/main/java/org/jeecg/config/shiro/IgnoreAuth.java @@ -7,8 +7,9 @@ import java.lang.annotation.Target; /** * 免Token认证注解 - * + *

* 认证系统结合spring MVC的@RequestMapping获取请求路径进行免登录配置 + * * @author eightmonth * @date 2024/2/28 9:58 */ diff --git a/physical-base-core/src/main/java/org/jeecg/config/shiro/JwtToken.java b/physical-base-core/src/main/java/org/jeecg/config/shiro/JwtToken.java index 0507c54..b2b34f7 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/shiro/JwtToken.java +++ b/physical-base-core/src/main/java/org/jeecg/config/shiro/JwtToken.java @@ -1,5 +1,5 @@ package org.jeecg.config.shiro; - + import org.apache.shiro.authc.AuthenticationToken; /** @@ -8,19 +8,19 @@ import org.apache.shiro.authc.AuthenticationToken; * @desc **/ public class JwtToken implements AuthenticationToken { - - private static final long serialVersionUID = 1L; - private String token; - + + private static final long serialVersionUID = 1L; + private String token; + public JwtToken(String token) { this.token = token; } - + @Override public Object getPrincipal() { return token; } - + @Override public Object getCredentials() { return token; diff --git a/physical-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/physical-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java index 1beb140..0330f84 100644 --- a/physical-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java +++ b/physical-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java @@ -1,6 +1,8 @@ package org.jeecg.config.shiro; -import lombok.SneakyThrows; +import jakarta.annotation.Resource; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.Filter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; @@ -18,25 +20,19 @@ import org.jeecg.config.shiro.filters.CustomShiroFilterFactoryBean; import org.jeecg.config.shiro.filters.JwtFilter; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.*; -import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.core.env.Environment; -import org.springframework.core.type.filter.AnnotationTypeFilter; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.core.env.Environment; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.*; import org.springframework.web.filter.DelegatingFilterProxy; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; -import jakarta.annotation.Resource; -import jakarta.servlet.Filter; -import jakarta.servlet.DispatcherType; -import java.lang.reflect.Method; import java.util.*; /** @@ -57,10 +53,10 @@ public class ShiroConfig { private JeecgBaseConfig jeecgBaseConfig; @Autowired(required = false) private RedisProperties redisProperties; - + /** * Filter Chain定义说明 - * + *

* 1、一个URL可以配置多个Filter,使用逗号分隔 * 2、当设置多个过滤器时,全部验证通过,才视为通过 * 3、部分过滤器可指定参数,如perms,roles @@ -73,12 +69,12 @@ public class ShiroConfig { Map filterChainDefinitionMap = new LinkedHashMap(); //支持yml方式,配置拦截排除 - if(jeecgBaseConfig!=null && jeecgBaseConfig.getShiro()!=null){ + if (jeecgBaseConfig != null && jeecgBaseConfig.getShiro() != null) { String shiroExcludeUrls = jeecgBaseConfig.getShiro().getExcludeUrls(); - if(oConvertUtils.isNotEmpty(shiroExcludeUrls)){ + if (oConvertUtils.isNotEmpty(shiroExcludeUrls)) { String[] permissionUrl = shiroExcludeUrls.split(","); - for(String url : permissionUrl){ - filterChainDefinitionMap.put(url,"anon"); + for (String url : permissionUrl) { + filterChainDefinitionMap.put(url, "anon"); } } } @@ -144,7 +140,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/jmreport/**", "anon"); filterChainDefinitionMap.put("/**/*.js.map", "anon"); filterChainDefinitionMap.put("/**/*.css.map", "anon"); - + //拖拽仪表盘设计器排除 filterChainDefinitionMap.put("/drag/view", "anon"); filterChainDefinitionMap.put("/drag/page/queryById", "anon"); @@ -178,7 +174,7 @@ public class ShiroConfig { Map filterMap = new HashMap(1); //如果cloudServer为空 则说明是单体 需要加载跨域配置【微服务跨域切换】 Object cloudServer = env.getProperty(CommonConstant.CLOUD_SERVER_KEY); - filterMap.put("jwt", new JwtFilter(cloudServer==null)); + filterMap.put("jwt", new JwtFilter(cloudServer == null)); shiroFilterFactoryBean.setFilters(filterMap); // value,departName -->text + * * @return */ public List queryAllDepartBackDictModel(); /** * 15根据业务类型及业务id修改消息已读 + * * @param busType * @param busId */ @@ -152,6 +174,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 16查询表字典 支持过滤数据 + * * @param table * @param text * @param code @@ -162,6 +185,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 17查询指定table的 text code 获取字典,包含text和value + * * @param table * @param text * @param code @@ -173,14 +197,16 @@ public interface ISysBaseAPI extends CommonAPI { /** * 18查询所有用户 返回ComboModel + * * @return */ public List queryAllUserBackCombo(); /** * 19分页查询用户 返回JSONObject - * @param userIds 多个用户id - * @param pageNo 当前页数 + * + * @param userIds 多个用户id + * @param pageNo 当前页数 * @param pageSize 每页显示条数 * @return */ @@ -188,19 +214,22 @@ public interface ISysBaseAPI extends CommonAPI { /** * 20获取所有角色 + * * @return */ public List queryAllRole(); /** * 21获取所有角色 带参 + * * @param roleIds 默认选中角色 * @return */ - public List queryAllRole(String[] roleIds ); + public List queryAllRole(String[] roleIds); /** * 22通过用户账号查询角色Id集合 + * * @param username * @return */ @@ -208,6 +237,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 23通过部门编号查询部门id + * * @param orgCode * @return */ @@ -215,12 +245,14 @@ public interface ISysBaseAPI extends CommonAPI { /** * 24查询所有部门 + * * @return */ public List getAllSysDepart(); /** * 25查找父级部门 + * * @param departId * @return */ @@ -228,6 +260,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 26根据部门Id获取部门负责人 + * * @param deptId * @return */ @@ -235,6 +268,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 27给指定用户发消息 + * * @param userIds * @param cmd */ @@ -242,6 +276,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 28根据id获取所有参与用户 + * * @param userIds 多个用户id * @return */ @@ -250,13 +285,15 @@ public interface ISysBaseAPI extends CommonAPI { /** * 29将会议签到信息推动到预览 * userIds - * @return + * * @param userId + * @return */ void meetingSignWebsocket(String userId); /** * 30根据name获取所有参与用户 + * * @param userNames 多个用户账户 * @return */ @@ -265,15 +302,17 @@ public interface ISysBaseAPI extends CommonAPI { /** * 根据高级查询条件查询用户 + * * @param superQuery * @param matchType * @return */ - List queryUserBySuperQuery(String superQuery,String matchType); + List queryUserBySuperQuery(String superQuery, String matchType); /** * 根据ID查询用户 + * * @param id * @return */ @@ -282,45 +321,51 @@ public interface ISysBaseAPI extends CommonAPI { /** * 根据高级查询条件查询部门 + * * @param superQuery * @param matchType * @return */ - List queryDeptBySuperQuery(String superQuery,String matchType); + List queryDeptBySuperQuery(String superQuery, String matchType); /** * 根据高级查询条件查询角色 + * * @param superQuery * @param matchType * @return */ - List queryRoleBySuperQuery(String superQuery,String matchType); + List queryRoleBySuperQuery(String superQuery, String matchType); /** * 根据租户ID查询用户ID + * * @param tenantId 租户ID * @return List */ List selectUserIdByTenantId(String tenantId); - /** * 31获取用户的角色集合 + * * @param username * @return */ Set getUserRoleSet(String username); + /** * 31获取用户的角色集合 + * * @param useId * @return */ Set getUserRoleSetById(String useId); - + /** * 32获取用户的权限集合 + * * @param userId * @return */ @@ -328,6 +373,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 33判断是否有online访问的权限 + * * @param onlineAuthDTO * @return */ @@ -335,6 +381,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 34通过部门id获取部门全部信息 + * * @param id 部门id * @return SysDepartModel对象 */ @@ -342,6 +389,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 35根据用户id查询用户所属公司下所有用户ids + * * @param userId * @return */ @@ -349,6 +397,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 36根据多个用户账号(逗号分隔),查询返回多个用户信息 + * * @param usernames * @return */ @@ -356,6 +405,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 37根据多个用户ID(逗号分隔),查询返回多个用户信息 + * * @param ids * @return */ @@ -363,6 +413,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 38根据多个部门编码(逗号分隔),查询返回多个部门信息 + * * @param orgCodes * @return */ @@ -370,6 +421,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 39根据多个部门id(逗号分隔),查询返回多个部门信息 + * * @param ids * @return */ @@ -377,11 +429,12 @@ public interface ISysBaseAPI extends CommonAPI { /** * 40发送邮件消息 + * * @param email * @param title * @param content */ - void sendEmailMsg(String email,String title,String content); + void sendEmailMsg(String email, String title, String content); /** * 40发送模版邮件消息 @@ -392,8 +445,10 @@ public interface ISysBaseAPI extends CommonAPI { * @param params 模版参数 */ void sendHtmlTemplateEmail(String email, String title, EmailTemplateEnum emailTemplateEnum, JSONObject params); + /** * 41 获取公司下级部门和公司下所有用户信息 + * * @param orgCode * @return List */ @@ -401,6 +456,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 查询分类字典翻译 + * * @param ids 多个分类字典id * @return List */ @@ -424,11 +480,11 @@ public interface ISysBaseAPI extends CommonAPI { /** * 复制应用下的所有字典配置到新的租户下 - * - * @param originalAppId 原始低代码应用ID - * @param appId 新的低代码应用ID - * @param tenantId 新的租户ID - * @return Map Map<原字典编码, 新字典编码> + * + * @param originalAppId 原始低代码应用ID + * @param appId 新的低代码应用ID + * @param tenantId 新的租户ID + * @return Map Map<原字典编码, 新字典编码> */ Map copyLowAppDict(String originalAppId, String appId, String tenantId); @@ -442,7 +498,8 @@ public interface ISysBaseAPI extends CommonAPI { List getDictItems(String dictCode); /** - * 根据多个字典code查询多个字典项 + * 根据多个字典code查询多个字典项 + * * @param dictCodeList * @return key = dictCode ; value=对应的字典项 */ @@ -453,7 +510,7 @@ public interface ISysBaseAPI extends CommonAPI { * 大数据量的字典表 走异步加载 即前端输入内容过滤数据 * * @param dictCode 字典code格式:table,text,code - * @param keyword 过滤关键字 + * @param keyword 过滤关键字 * @param pageSize 分页条数 * @return */ @@ -461,23 +518,28 @@ public interface ISysBaseAPI extends CommonAPI { /** * 新增数据日志 + * * @param dataLogDto */ void saveDataLog(DataLogDTO dataLogDto); + /** * 更新头像 + * * @param loginUser */ void updateAvatar(LoginUser loginUser); /** * 向app端 websocket推送聊天刷新消息 + * * @param userId */ void sendAppChatSocket(String userId); /** * 根据角色id查询角色code + * * @param id * @return */ @@ -493,13 +555,15 @@ public interface ISysBaseAPI extends CommonAPI { /** * 根据部门ID查询用户ID + * * @param deptIds * @return */ List queryUserIdsByDeptIds(List deptIds); - + /** * 根据部门ID查询用户账号 + * * @param deptIds * @return */ @@ -507,6 +571,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 根据角色编码 查询用户ID + * * @param roleCodes * @return */ @@ -514,6 +579,7 @@ public interface ISysBaseAPI extends CommonAPI { /** * 根据职务ID查询用户ID + * * @param positionIds * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/firewall/SqlInjection/impl/DictTableWhiteListHandlerImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/firewall/SqlInjection/impl/DictTableWhiteListHandlerImpl.java index 81f74fd..6765434 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/firewall/SqlInjection/impl/DictTableWhiteListHandlerImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/firewall/SqlInjection/impl/DictTableWhiteListHandlerImpl.java @@ -44,7 +44,7 @@ public class DictTableWhiteListHandlerImpl implements IDictTableWhiteListHandler @Autowired private JeecgBaseConfig jeecgBaseConfig; - + /** * 初始化 whiteTablesRuleMap 方法 */ @@ -172,7 +172,7 @@ public class DictTableWhiteListHandlerImpl implements IDictTableWhiteListHandler // 需要合并的字段 Set waitMergerFields = new HashSet<>(); for (String field : queryFields) { - if(oConvertUtils.isEmpty(field)){ + if (oConvertUtils.isEmpty(field)) { continue; } // 统一转成小写 @@ -235,7 +235,7 @@ public class DictTableWhiteListHandlerImpl implements IDictTableWhiteListHandler return true; } - + /** * 取where前面的为:table name * diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/CodeGenerateDbConfig.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/CodeGenerateDbConfig.java index 8a0d170..5d9e138 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/CodeGenerateDbConfig.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/CodeGenerateDbConfig.java @@ -9,16 +9,16 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** - * @Description: 代码生成器,自定义DB配置 + * @Description: 代码生成器, 自定义DB配置 * 【加了此类,则online模式DB连接,使用平台的配置,jeecg_database.properties配置无效; - * 但是使用GUI模式代码生成,还是走jeecg_database.properties配置】 - * 提醒: 达梦数据库需要修改下面的参数${spring.datasource.dynamic.datasource.master.url:}配置 + * 但是使用GUI模式代码生成,还是走jeecg_database.properties配置】 + * 提醒: 达梦数据库需要修改下面的参数${spring.datasource.dynamic.datasource.master.url:}配置 * @author: scott * @date: 2021年02月18日 16:30 - * + *

* 重要说明:此类改路径或者名称,需要同步修改 - * org/jeecg/interceptor/OnlineRepairCodeGenerateDbConfig.java里面的注解 - * @ConditionalOnMissingClass("org.jeecg.config.init.CodeGenerateDbConfig") + * org/jeecg/interceptor/OnlineRepairCodeGenerateDbConfig.java里面的注解 + * @ConditionalOnMissingClass("org.jeecg.config.init.CodeGenerateDbConfig") */ @Slf4j @Configuration @@ -37,8 +37,8 @@ public class CodeGenerateDbConfig { @Bean public CodeGenerateDbConfig initCodeGenerateDbConfig() { - if(StringUtils.isNotBlank(url)){ - if(StringUtils.isNotBlank(publicKey)){ + if (StringUtils.isNotBlank(url)) { + if (StringUtils.isNotBlank(publicKey)) { try { password = ConfigTools.decrypt(publicKey, password); } catch (Exception e) { @@ -46,7 +46,7 @@ public class CodeGenerateDbConfig { log.error(" 代码生成器数据库连接,数据库密码解密失败!"); } } - CodegenDatasourceConfig.initDbConfig(driverClassName,url, username, password); + CodegenDatasourceConfig.initDbConfig(driverClassName, url, username, password); log.info(" Init CodeGenerate Config [ Get Db Config From application.yml ] "); } return null; diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/CodeTemplateInitListener.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/CodeTemplateInitListener.java index b540418..d476da0 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/CodeTemplateInitListener.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/CodeTemplateInitListener.java @@ -17,6 +17,7 @@ import java.nio.charset.StandardCharsets; * 自动初始化代码生成器模板 *

* 解决JAR发布需要手工配置代码生成器模板问题 + * * @author zhang */ @Slf4j diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/TomcatFactoryConfig.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/TomcatFactoryConfig.java index 4406122..297e43f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/TomcatFactoryConfig.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/init/TomcatFactoryConfig.java @@ -6,7 +6,7 @@ //import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Configuration; // -///** +/// ** // * @Description: TomcatFactoryConfig // * @author: scott // * @date: 2021年01月25日 11:40 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/jimureport/JimuDragExternalServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/jimureport/JimuDragExternalServiceImpl.java index 33223b4..18f51a4 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/jimureport/JimuDragExternalServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/jimureport/JimuDragExternalServiceImpl.java @@ -36,40 +36,41 @@ public class JimuDragExternalServiceImpl implements IOnlDragExternalService { @Autowired @Lazy private ISysBaseAPI sysBaseApi; + /** - * 根据多个字典code查询多个字典项 + * 根据多个字典code查询多个字典项 + * * @param codeList * @return key = dictCode ; value=对应的字典项 */ @Override public Map> getManyDictItems(List codeList) { - Map> manyDragDictItems = new HashMap<>(); + Map> manyDragDictItems = new HashMap<>(); Map> dictItemsMap = sysBaseApi.getManyDictItems(codeList); - dictItemsMap.forEach((k,v)->{ - List dictItems = new ArrayList<>(); - v.forEach(dictItem->{ + dictItemsMap.forEach((k, v) -> { + List dictItems = new ArrayList<>(); + v.forEach(dictItem -> { DragDictModel dictModel = new DragDictModel(); - BeanUtils.copyProperties(dictItem,dictModel); + BeanUtils.copyProperties(dictItem, dictModel); dictItems.add(dictModel); }); - manyDragDictItems.put(k,dictItems); + manyDragDictItems.put(k, dictItems); }); return manyDragDictItems; } /** - * * @param dictCode * @return */ @Override public List getDictItems(String dictCode) { - List dictItems = new ArrayList<>(); - if(oConvertUtils.isNotEmpty(dictCode)){ + List dictItems = new ArrayList<>(); + if (oConvertUtils.isNotEmpty(dictCode)) { List dictItemsList = sysBaseApi.getDictItems(dictCode); - dictItemsList.forEach(dictItem->{ + dictItemsList.forEach(dictItem -> { DragDictModel dictModel = new DragDictModel(); - BeanUtils.copyProperties(dictItem,dictModel); + BeanUtils.copyProperties(dictItem, dictModel); dictItems.add(dictModel); }); } @@ -78,25 +79,27 @@ public class JimuDragExternalServiceImpl implements IOnlDragExternalService { /** * 添加日志 + * * @param dragLogDTO */ @Override public void addLog(DragLogDTO dragLogDTO) { - if(oConvertUtils.isNotEmpty(dragLogDTO)){ + if (oConvertUtils.isNotEmpty(dragLogDTO)) { LogDTO dto = new LogDTO(); - BeanUtils.copyProperties(dragLogDTO,dto); + BeanUtils.copyProperties(dragLogDTO, dto); baseCommonService.addLog(dto); } } /** * 保存日志 + * * @param logMsg * @param logType * @param operateType */ @Override public void addLog(String logMsg, int logType, int operateType) { - baseCommonService.addLog(logMsg,logType,operateType); + baseCommonService.addLog(logMsg, logType, operateType); } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java index 81950d6..29482d8 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/config/jimureport/JimuReportTokenService.java @@ -1,5 +1,6 @@ package org.jeecg.config.jimureport; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.system.vo.SysUserCacheInfo; @@ -12,15 +13,15 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; -import jakarta.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * 自定义积木报表鉴权(如果不进行自定义,则所有请求不做权限控制) - * * 1.自定义获取登录token - * * 2.自定义获取登录用户 + * * 1.自定义获取登录token + * * 2.自定义获取登录用户 + * * @author: jeecg-boot */ @@ -48,7 +49,7 @@ public class JimuReportTokenService implements JmReportTokenServiceI { public String[] getRoles(String token) { String username = JwtUtil.getUsername(token); Set roles = sysBaseApi.getUserRoleSet(username); - if(CollectionUtils.isEmpty(roles)){ + if (CollectionUtils.isEmpty(roles)) { return null; } return (String[]) roles.toArray(new String[roles.size()]); @@ -68,7 +69,7 @@ public class JimuReportTokenService implements JmReportTokenServiceI { try { userInfo = sysBaseApi.getCacheUser(username); } catch (Exception e) { - log.error("获取用户信息异常:"+ e.getMessage()); + log.error("获取用户信息异常:" + e.getMessage()); return map; } //设置账号名 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/aop/TenantLog.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/aop/TenantLog.java index a19f5c4..beec949 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/aop/TenantLog.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/aop/TenantLog.java @@ -1,13 +1,10 @@ package org.jeecg.modules.aop; -import org.jeecg.common.constant.CommonConstant; -import org.jeecg.common.constant.enums.ModuleType; - import java.lang.annotation.*; /** * 系统日志注解 - * + * * @Author scott * @email jeecgos@163.com * @Date 2019年1月14日 @@ -17,11 +14,11 @@ import java.lang.annotation.*; @Documented public @interface TenantLog { - /** - * 操作日志类型(1查询,2添加,3修改,4删除) - * - * @return - */ - int value() default 0; + /** + * 操作日志类型(1查询,2添加,3修改,4删除) + * + * @return + */ + int value() default 0; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/aop/TenantPackUserLogAspect.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/aop/TenantPackUserLogAspect.java index 9b7db15..0bd584c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/aop/TenantPackUserLogAspect.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/aop/TenantPackUserLogAspect.java @@ -1,5 +1,6 @@ package org.jeecg.modules.aop; +import jakarta.annotation.Resource; import org.apache.shiro.SecurityUtils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.AfterThrowing; @@ -15,7 +16,6 @@ import org.jeecg.modules.system.entity.SysTenantPack; import org.jeecg.modules.system.entity.SysTenantPackUser; import org.springframework.stereotype.Component; -import jakarta.annotation.Resource; import java.lang.reflect.Method; import java.util.Date; @@ -36,43 +36,43 @@ public class TenantPackUserLogAspect { } @Around("tenantLogPointCut()") - public Object aroundMethod(ProceedingJoinPoint joinPoint)throws Throwable { + public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable { //System.out.println("环绕通知>>>>>>>>>"); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); TenantLog log = method.getAnnotation(TenantLog.class); - if(log != null){ + if (log != null) { int opType = log.value(); Integer logType = null; String content = null; Integer tenantId = null; //获取参数 Object[] args = joinPoint.getArgs(); - if(args.length>0){ - for(Object obj: args){ - if(obj instanceof SysTenantPack){ + if (args.length > 0) { + for (Object obj : args) { + if (obj instanceof SysTenantPack) { // logType=3 租户操作日志 logType = CommonConstant.LOG_TYPE_3; - SysTenantPack pack = (SysTenantPack)obj; - if(opType==2){ - content = "创建了角色权限 "+ pack.getPackName(); + SysTenantPack pack = (SysTenantPack) obj; + if (opType == 2) { + content = "创建了角色权限 " + pack.getPackName(); } tenantId = pack.getTenantId(); break; - }else if(obj instanceof SysTenantPackUser){ + } else if (obj instanceof SysTenantPackUser) { logType = CommonConstant.LOG_TYPE_3; - SysTenantPackUser packUser = (SysTenantPackUser)obj; - if(opType==2){ - content = "将 "+packUser.getRealname()+" 添加到角色 "+ packUser.getPackName(); - }else if(opType==4){ - content = "移除了 "+packUser.getPackName()+" 成员 "+ packUser.getRealname(); + SysTenantPackUser packUser = (SysTenantPackUser) obj; + if (opType == 2) { + content = "将 " + packUser.getRealname() + " 添加到角色 " + packUser.getPackName(); + } else if (opType == 4) { + content = "移除了 " + packUser.getPackName() + " 成员 " + packUser.getRealname(); } tenantId = packUser.getTenantId(); } - } + } } - if(logType!=null){ + if (logType != null) { LogDTO dto = new LogDTO(); dto.setLogType(logType); dto.setLogContent(content); @@ -80,7 +80,7 @@ public class TenantPackUserLogAspect { dto.setTenantId(tenantId); //获取登录用户信息 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - if(sysUser!=null){ + if (sysUser != null) { dto.setUserid(sysUser.getUsername()); dto.setUsername(sysUser.getRealname()); @@ -94,7 +94,7 @@ public class TenantPackUserLogAspect { } @AfterThrowing("tenantLogPointCut()") - public void afterThrowing()throws Throwable{ + public void afterThrowing() throws Throwable { System.out.println("异常通知"); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java index a8e346f..6d5a4e2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/api/controller/SystemApiController.java @@ -20,6 +20,7 @@ import java.util.Set; /** * 服务化 system模块 对外接口请求类 + * * @author: jeecg-boot */ @Slf4j @@ -34,47 +35,52 @@ public class SystemApiController { /** * 发送系统消息 + * * @param message 使用构造器赋值参数 如果不设置category(消息类型)则默认为2 发送系统消息 */ @PostMapping("/sendSysAnnouncement") - public void sendSysAnnouncement(@RequestBody MessageDTO message){ + public void sendSysAnnouncement(@RequestBody MessageDTO message) { sysBaseApi.sendSysAnnouncement(message); } /** * 发送消息 附带业务参数 + * * @param message 使用构造器赋值参数 */ @PostMapping("/sendBusAnnouncement") - public void sendBusAnnouncement(@RequestBody BusMessageDTO message){ + public void sendBusAnnouncement(@RequestBody BusMessageDTO message) { sysBaseApi.sendBusAnnouncement(message); } /** * 通过模板发送消息 + * * @param message 使用构造器赋值参数 */ @PostMapping("/sendTemplateAnnouncement") - public void sendTemplateAnnouncement(@RequestBody TemplateMessageDTO message){ + public void sendTemplateAnnouncement(@RequestBody TemplateMessageDTO message) { sysBaseApi.sendTemplateAnnouncement(message); } /** * 通过模板发送消息 附带业务参数 + * * @param message 使用构造器赋值参数 */ @PostMapping("/sendBusTemplateAnnouncement") - public void sendBusTemplateAnnouncement(@RequestBody BusTemplateMessageDTO message){ + public void sendBusTemplateAnnouncement(@RequestBody BusTemplateMessageDTO message) { sysBaseApi.sendBusTemplateAnnouncement(message); } /** * 通过消息中心模板,生成推送内容 + * * @param templateDTO 使用构造器赋值参数 * @return */ @PostMapping("/parseTemplateByCode") - public String parseTemplateByCode(@RequestBody TemplateDTO templateDTO){ + public String parseTemplateByCode(@RequestBody TemplateDTO templateDTO) { return sysBaseApi.parseTemplateByCode(templateDTO); } @@ -82,17 +88,18 @@ public class SystemApiController { * 根据业务类型busType及业务busId修改消息已读 */ @GetMapping("/updateSysAnnounReadFlag") - public void updateSysAnnounReadFlag(@RequestParam("busType") String busType, @RequestParam("busId")String busId){ + public void updateSysAnnounReadFlag(@RequestParam("busType") String busType, @RequestParam("busId") String busId) { sysBaseApi.updateSysAnnounReadFlag(busType, busId); } /** * 根据用户账号查询用户信息 + * * @param username * @return */ @GetMapping("/getUserByName") - public LoginUser getUserByName(@RequestParam("username") String username){ + public LoginUser getUserByName(@RequestParam("username") String username) { LoginUser loginUser = sysBaseApi.getUserByName(username); //用户信息加密 try { @@ -102,25 +109,27 @@ public class SystemApiController { } return loginUser; } - + /** * 根据用户账号查询用户ID + * * @param username * @return */ @GetMapping("/getUserIdByName") - public String getUserIdByName(@RequestParam("username") String username){ + public String getUserIdByName(@RequestParam("username") String username) { String userId = sysBaseApi.getUserIdByName(username); return userId; } /** * 根据用户id查询用户信息 + * * @param id * @return */ @GetMapping("/getUserById") - LoginUser getUserById(@RequestParam("id") String id){ + LoginUser getUserById(@RequestParam("id") String id) { LoginUser loginUser = sysBaseApi.getUserById(id); //用户信息加密 try { @@ -133,99 +142,110 @@ public class SystemApiController { /** * 通过用户账号查询角色集合 + * * @param username * @return */ @GetMapping("/getRolesByUsername") - List getRolesByUsername(@RequestParam("username") String username){ + List getRolesByUsername(@RequestParam("username") String username) { return sysBaseApi.getRolesByUsername(username); } - + /** * 通过用户账号查询角色集合 + * * @param userId * @return */ @GetMapping("/getRolesByUserId") - List getRolesByUserId(@RequestParam("userId") String userId){ + List getRolesByUserId(@RequestParam("userId") String userId) { return sysBaseApi.getRolesByUserId(userId); } /** * 通过用户账号查询部门集合 + * * @param username * @return 部门 id */ @GetMapping("/getDepartIdsByUsername") - List getDepartIdsByUsername(@RequestParam("username") String username){ + List getDepartIdsByUsername(@RequestParam("username") String username) { return sysBaseApi.getDepartIdsByUsername(username); } - + /** * 通过用户账号查询部门集合 + * * @param userId * @return 部门 id */ @GetMapping("/getDepartIdsByUserId") - List getDepartIdsByUserId(@RequestParam("userId") String userId){ + List getDepartIdsByUserId(@RequestParam("userId") String userId) { return sysBaseApi.getDepartIdsByUserId(userId); } /** * 通过用户账号查询部门父ID集合 + * * @param username * @return 部门 id */ @GetMapping("/getDepartParentIdsByUsername") - Set getDepartParentIdsByUsername(@RequestParam("username") String username){ + Set getDepartParentIdsByUsername(@RequestParam("username") String username) { return sysBaseApi.getDepartParentIdsByUsername(username); } /** * 查询部门父ID集合 + * * @param depIds * @return 部门 id */ @GetMapping("/getDepartParentIdsByDepIds") - Set getDepartParentIdsByDepIds(@RequestParam("depIds") Set depIds){ + Set getDepartParentIdsByDepIds(@RequestParam("depIds") Set depIds) { return sysBaseApi.getDepartParentIdsByDepIds(depIds); } /** * 通过用户账号查询部门 name + * * @param username * @return 部门 name */ @GetMapping("/getDepartNamesByUsername") - List getDepartNamesByUsername(@RequestParam("username") String username){ + List getDepartNamesByUsername(@RequestParam("username") String username) { return sysBaseApi.getDepartNamesByUsername(username); } /** * 获取数据字典 + * * @param code * @return */ @GetMapping("/queryDictItemsByCode") - List queryDictItemsByCode(@RequestParam("code") String code){ + List queryDictItemsByCode(@RequestParam("code") String code) { return sysBaseApi.queryDictItemsByCode(code); } /** * 获取有效的数据字典 + * * @param code * @return */ @GetMapping("/queryEnableDictItemsByCode") - List queryEnableDictItemsByCode(@RequestParam("code") String code){ + List queryEnableDictItemsByCode(@RequestParam("code") String code) { return sysBaseApi.queryEnableDictItemsByCode(code); } - /** 查询所有的父级字典,按照create_time排序 */ + /** + * 查询所有的父级字典,按照create_time排序 + */ @GetMapping("/queryAllDict") - List queryAllDict(){ + List queryAllDict() { // try{ // //睡10秒,gateway网关5秒超时,会触发熔断降级操作 // Thread.sleep(10000); @@ -239,63 +259,69 @@ public class SystemApiController { /** * 查询所有分类字典 + * * @return */ @GetMapping("/queryAllSysCategory") - List queryAllSysCategory(){ + List queryAllSysCategory() { return sysBaseApi.queryAllSysCategory(); } /** * 查询所有部门 作为字典信息 id -->value,departName -->text + * * @return */ @GetMapping("/queryAllDepartBackDictModel") - List queryAllDepartBackDictModel(){ + List queryAllDepartBackDictModel() { return sysBaseApi.queryAllDepartBackDictModel(); } /** * 获取所有角色 带参 * roleIds 默认选中角色 + * * @return */ @GetMapping("/queryAllRole") - public List queryAllRole(@RequestParam(name = "roleIds",required = false)String[] roleIds){ - if(roleIds==null || roleIds.length==0){ + public List queryAllRole(@RequestParam(name = "roleIds", required = false) String[] roleIds) { + if (roleIds == null || roleIds.length == 0) { return sysBaseApi.queryAllRole(); - }else{ + } else { return sysBaseApi.queryAllRole(roleIds); } } /** * 通过用户账号查询角色Id集合 + * * @param username * @return */ @GetMapping("/getRoleIdsByUsername") - public List getRoleIdsByUsername(@RequestParam("username")String username){ + public List getRoleIdsByUsername(@RequestParam("username") String username) { return sysBaseApi.getRoleIdsByUsername(username); } /** * 通过部门编号查询部门id + * * @param orgCode * @return */ @GetMapping("/getDepartIdsByOrgCode") - public String getDepartIdsByOrgCode(@RequestParam("orgCode")String orgCode){ + public String getDepartIdsByOrgCode(@RequestParam("orgCode") String orgCode) { return sysBaseApi.getDepartIdsByOrgCode(orgCode); } /** * 查询所有部门 + * * @return */ @GetMapping("/getAllSysDepart") - public List getAllSysDepart(){ + public List getAllSysDepart() { return sysBaseApi.getAllSysDepart(); } @@ -306,29 +332,30 @@ public class SystemApiController { * @return */ @GetMapping("/getDynamicDbSourceById") - DynamicDataSourceModel getDynamicDbSourceById(@RequestParam("dbSourceId")String dbSourceId){ + DynamicDataSourceModel getDynamicDbSourceById(@RequestParam("dbSourceId") String dbSourceId) { return sysBaseApi.getDynamicDbSourceById(dbSourceId); } - /** * 根据部门Id获取部门负责人 + * * @param deptId * @return */ @GetMapping("/getDeptHeadByDepId") - public List getDeptHeadByDepId(@RequestParam("deptId") String deptId){ + public List getDeptHeadByDepId(@RequestParam("deptId") String deptId) { return sysBaseApi.getDeptHeadByDepId(deptId); } /** * 查找父级部门 + * * @param departId * @return */ @GetMapping("/getParentDepartId") - public DictModel getParentDepartId(@RequestParam("departId")String departId){ + public DictModel getParentDepartId(@RequestParam("departId") String departId) { return sysBaseApi.getParentDepartId(departId); } @@ -339,17 +366,18 @@ public class SystemApiController { * @return */ @GetMapping("/getDynamicDbSourceByCode") - public DynamicDataSourceModel getDynamicDbSourceByCode(@RequestParam("dbSourceCode") String dbSourceCode){ + public DynamicDataSourceModel getDynamicDbSourceByCode(@RequestParam("dbSourceCode") String dbSourceCode) { return sysBaseApi.getDynamicDbSourceByCode(dbSourceCode); } /** * 给指定用户发消息 + * * @param userIds * @param cmd */ @GetMapping("/sendWebSocketMsg") - public void sendWebSocketMsg(String[] userIds, String cmd){ + public void sendWebSocketMsg(String[] userIds, String cmd) { sysBaseApi.sendWebSocketMsg(userIds, cmd); } @@ -357,81 +385,88 @@ public class SystemApiController { /** * 根据id获取所有参与用户 * userIds + * * @return */ @GetMapping("/queryAllUserByIds") - public List queryAllUserByIds(@RequestParam("userIds") String[] userIds){ + public List queryAllUserByIds(@RequestParam("userIds") String[] userIds) { return sysBaseApi.queryAllUserByIds(userIds); } /** * 查询所有用户 返回ComboModel + * * @return */ @GetMapping("/queryAllUserBackCombo") - public List queryAllUserBackCombo(){ + public List queryAllUserBackCombo() { return sysBaseApi.queryAllUserBackCombo(); } /** * 分页查询用户 返回JSONObject + * * @return */ @GetMapping("/queryAllUser") - public JSONObject queryAllUser(@RequestParam(name="userIds",required=false)String userIds, @RequestParam(name="pageNo",required=false) Integer pageNo,@RequestParam(name="pageSize",required=false) Integer pageSize){ + public JSONObject queryAllUser(@RequestParam(name = "userIds", required = false) String userIds, @RequestParam(name = "pageNo", required = false) Integer pageNo, @RequestParam(name = "pageSize", required = false) Integer pageSize) { return sysBaseApi.queryAllUser(userIds, pageNo, pageSize); } - /** * 将会议签到信息推动到预览 * userIds - * @return + * * @param userId + * @return */ @GetMapping("/meetingSignWebsocket") - public void meetingSignWebsocket(@RequestParam("userId")String userId){ + public void meetingSignWebsocket(@RequestParam("userId") String userId) { sysBaseApi.meetingSignWebsocket(userId); } /** * 根据name获取所有参与用户 * userNames + * * @return */ @GetMapping("/queryUserByNames") - public List queryUserByNames(@RequestParam("userNames")String[] userNames){ + public List queryUserByNames(@RequestParam("userNames") String[] userNames) { return sysBaseApi.queryUserByNames(userNames); } /** * 获取用户的角色集合 + * * @param username * @return */ @GetMapping("/getUserRoleSet") - public Set getUserRoleSet(@RequestParam("username")String username){ + public Set getUserRoleSet(@RequestParam("username") String username) { return sysBaseApi.getUserRoleSet(username); } - + /** * 获取用户的角色集合 + * * @param userId * @return */ @GetMapping("/getUserRoleSetById") - public Set getUserRoleSetById(@RequestParam("userId")String userId){ + public Set getUserRoleSetById(@RequestParam("userId") String userId) { return sysBaseApi.getUserRoleSetById(userId); } /** * 获取用户的权限集合 + * * @param userId 用户表ID * @return */ @GetMapping("/getUserPermissionSet") - public Set getUserPermissionSet(@RequestParam("userId") String userId){ + public Set getUserPermissionSet(@RequestParam("userId") String userId) { return sysBaseApi.getUserPermissionSet(userId); } @@ -439,42 +474,46 @@ public class SystemApiController { /** * 判断是否有online访问的权限 + * * @param onlineAuthDTO * @return */ @PostMapping("/hasOnlineAuth") - public boolean hasOnlineAuth(@RequestBody OnlineAuthDTO onlineAuthDTO){ + public boolean hasOnlineAuth(@RequestBody OnlineAuthDTO onlineAuthDTO) { return sysBaseApi.hasOnlineAuth(onlineAuthDTO); } /** * 查询用户角色信息 + * * @param username * @return */ @GetMapping("/queryUserRoles") - public Set queryUserRoles(@RequestParam("username") String username){ + public Set queryUserRoles(@RequestParam("username") String username) { return sysUserService.getUserRolesSet(username); } - + /** * 查询用户角色信息 + * * @param userId * @return */ @GetMapping("/queryUserRolesById") - public Set queryUserRolesById(@RequestParam("userId") String userId){ + public Set queryUserRolesById(@RequestParam("userId") String userId) { return sysUserService.getUserRoleSetById(userId); } /** * 查询用户权限信息 + * * @param userId * @return */ @GetMapping("/queryUserAuths") - public Set queryUserAuths(@RequestParam("userId") String userId){ + public Set queryUserAuths(@RequestParam("userId") String userId) { return sysUserService.getUserPermissionsSet(userId); } @@ -482,109 +521,122 @@ public class SystemApiController { * 通过部门id获取部门全部信息 */ @GetMapping("/selectAllById") - public SysDepartModel selectAllById(@RequestParam("id") String id){ + public SysDepartModel selectAllById(@RequestParam("id") String id) { return sysBaseApi.selectAllById(id); } /** * 根据用户id查询用户所属公司下所有用户ids + * * @param userId * @return */ @GetMapping("/queryDeptUsersByUserId") - public List queryDeptUsersByUserId(@RequestParam("userId") String userId){ + public List queryDeptUsersByUserId(@RequestParam("userId") String userId) { return sysBaseApi.queryDeptUsersByUserId(userId); } /** * 查询数据权限 + * * @return */ @GetMapping("/queryPermissionDataRule") - public List queryPermissionDataRule(@RequestParam("component") String component, @RequestParam("requestPath")String requestPath, @RequestParam("username") String username){ + public List queryPermissionDataRule(@RequestParam("component") String component, @RequestParam("requestPath") String requestPath, @RequestParam("username") String username) { return sysBaseApi.queryPermissionDataRule(component, requestPath, username); } /** * 查询用户信息 + * * @param username * @return */ @GetMapping("/getCacheUser") - public SysUserCacheInfo getCacheUser(@RequestParam("username") String username){ + public SysUserCacheInfo getCacheUser(@RequestParam("username") String username) { return sysBaseApi.getCacheUser(username); } /** * 普通字典的翻译 + * * @param code * @param key * @return */ @GetMapping("/translateDict") - public String translateDict(@RequestParam("code") String code, @RequestParam("key") String key){ + public String translateDict(@RequestParam("code") String code, @RequestParam("key") String key) { return sysBaseApi.translateDict(code, key); } /** * 36根据多个用户账号(逗号分隔),查询返回多个用户信息 + * * @param usernames * @return */ @RequestMapping("/queryUsersByUsernames") - List queryUsersByUsernames(@RequestParam("usernames") String usernames){ + List queryUsersByUsernames(@RequestParam("usernames") String usernames) { return this.sysBaseApi.queryUsersByUsernames(usernames); } /** * 37根据多个用户id(逗号分隔),查询返回多个用户信息 + * * @param ids * @return */ @RequestMapping("/queryUsersByIds") - List queryUsersByIds(@RequestParam("ids") String ids){ + List queryUsersByIds(@RequestParam("ids") String ids) { return this.sysBaseApi.queryUsersByIds(ids); } /** * 38根据多个部门编码(逗号分隔),查询返回多个部门信息 + * * @param orgCodes * @return */ @GetMapping("/queryDepartsByOrgcodes") - List queryDepartsByOrgcodes(@RequestParam("orgCodes") String orgCodes){ + List queryDepartsByOrgcodes(@RequestParam("orgCodes") String orgCodes) { return this.sysBaseApi.queryDepartsByOrgcodes(orgCodes); } /** * 39根据多个部门ID(逗号分隔),查询返回多个部门信息 + * * @param ids * @return */ @GetMapping("/queryDepartsByIds") - List queryDepartsByIds(@RequestParam("ids") String ids){ + List queryDepartsByIds(@RequestParam("ids") String ids) { return this.sysBaseApi.queryDepartsByIds(ids); } /** * 40发送邮件消息 + * * @param email * @param title * @param content */ @GetMapping("/sendEmailMsg") - public void sendEmailMsg(@RequestParam("email")String email,@RequestParam("title")String title,@RequestParam("content")String content){ - this.sysBaseApi.sendEmailMsg(email,title,content); - }; + public void sendEmailMsg(@RequestParam("email") String email, @RequestParam("title") String title, @RequestParam("content") String content) { + this.sysBaseApi.sendEmailMsg(email, title, content); + } + + ; + /** * 41 获取公司下级部门和公司下所有用户信息 + * * @param orgCode */ @GetMapping("/getDeptUserByOrgCode") - List getDeptUserByOrgCode(@RequestParam("orgCode")String orgCode){ - return this.sysBaseApi.getDeptUserByOrgCode(orgCode); + List getDeptUserByOrgCode(@RequestParam("orgCode") String orgCode) { + return this.sysBaseApi.getDeptUserByOrgCode(orgCode); } /** @@ -633,7 +685,7 @@ public class SystemApiController { Map copyLowAppDict(@RequestParam("originalAppId") String originalAppId, @RequestParam("appId") String appId, @RequestParam("tenantId") String tenantId) { return sysBaseApi.copyLowAppDict(originalAppId, appId, tenantId); } - + /** * 根据字典code查询字典项 * @@ -672,30 +724,33 @@ public class SystemApiController { /** * 48 普通字典的翻译,根据多个dictCode和多条数据,多个以逗号分割 + * * @param dictCodes * @param keys * @return */ @GetMapping("/translateManyDict") - public Map> translateManyDict(@RequestParam("dictCodes") String dictCodes, @RequestParam("keys") String keys){ + public Map> translateManyDict(@RequestParam("dictCodes") String dictCodes, @RequestParam("keys") String keys) { return this.sysBaseApi.translateManyDict(dictCodes, keys); } /** * 获取表数据字典 【接口签名验证】 + * * @param tableFilterSql 表名可以带where条件 * @param text * @param code * @return */ @GetMapping("/queryTableDictItemsByCode") - List queryTableDictItemsByCode(@RequestParam("tableFilterSql") String tableFilterSql, @RequestParam("text") String text, @RequestParam("code") String code){ + List queryTableDictItemsByCode(@RequestParam("tableFilterSql") String tableFilterSql, @RequestParam("text") String text, @RequestParam("code") String code) { return sysBaseApi.queryTableDictItemsByCode(tableFilterSql, text, code); } /** * 查询表字典 支持过滤数据 【接口签名验证】 + * * @param table * @param text * @param code @@ -703,13 +758,14 @@ public class SystemApiController { * @return */ @GetMapping("/queryFilterTableDictInfo") - List queryFilterTableDictInfo(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("filterSql") String filterSql){ + List queryFilterTableDictInfo(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("filterSql") String filterSql) { return sysBaseApi.queryFilterTableDictInfo(table, text, code, filterSql); } /** * 【接口签名验证】 * 查询指定table的 text code 获取字典,包含text和value + * * @param table * @param text * @param code @@ -718,13 +774,14 @@ public class SystemApiController { */ @Deprecated @GetMapping("/queryTableDictByKeys") - public List queryTableDictByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keyArray") String[] keyArray){ + public List queryTableDictByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keyArray") String[] keyArray) { return sysBaseApi.queryTableDictByKeys(table, text, code, keyArray); } /** * 字典表的 翻译【接口签名验证】 + * * @param table * @param text * @param code @@ -732,12 +789,13 @@ public class SystemApiController { * @return */ @GetMapping("/translateDictFromTable") - public String translateDictFromTable(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("key") String key){ + public String translateDictFromTable(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("key") String key) { return sysBaseApi.translateDictFromTable(table, text, code, key); } //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + /** * 【接口签名验证】 * 49 字典表的 翻译,可批量 @@ -746,60 +804,65 @@ public class SystemApiController { * @param text * @param code * @param keys 多个用逗号分割 - * @param ds 数据源 + * @param ds 数据源 * @return */ @GetMapping("/translateDictFromTableByKeys") - public List translateDictFromTableByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keys") String keys, @RequestParam("ds") String ds) { + public List translateDictFromTableByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keys") String keys, @RequestParam("ds") String ds) { return this.sysBaseApi.translateDictFromTableByKeys(table, text, code, keys, ds); } //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ /** * 发送模板信息 + * * @param message */ @PostMapping("/sendTemplateMessage") - public void sendTemplateMessage(@RequestBody MessageDTO message){ + public void sendTemplateMessage(@RequestBody MessageDTO message) { sysBaseApi.sendTemplateMessage(message); } /** * 获取消息模板内容 + * * @param code * @return */ @GetMapping("/getTemplateContent") - public String getTemplateContent(@RequestParam("code") String code){ + public String getTemplateContent(@RequestParam("code") String code) { return this.sysBaseApi.getTemplateContent(code); } /** * 保存数据日志 + * * @param dataLogDto */ @PostMapping("/saveDataLog") - public void saveDataLog(@RequestBody DataLogDTO dataLogDto){ + public void saveDataLog(@RequestBody DataLogDTO dataLogDto) { this.sysBaseApi.saveDataLog(dataLogDto); } /** * 更新头像 + * * @param loginUser * @return */ @PutMapping("/updateAvatar") - public void updateAvatar(@RequestBody LoginUser loginUser){ + public void updateAvatar(@RequestBody LoginUser loginUser) { this.sysBaseApi.updateAvatar(loginUser); } /** * 向app端 websocket推送聊天刷新消息 + * * @param userId * @return */ @GetMapping("/sendAppChatSocket") - public void sendAppChatSocket(@RequestParam(name="userId") String userId){ + public void sendAppChatSocket(@RequestParam(name = "userId") String userId) { this.sysBaseApi.sendAppChatSocket(userId); } @@ -816,26 +879,28 @@ public class SystemApiController { /** * 获取消息模板内容 + * * @param id * @return */ @GetMapping("/getRoleCode") - public String getRoleCode(@RequestParam("id") String id){ + public String getRoleCode(@RequestParam("id") String id) { return this.sysBaseApi.getRoleCodeById(id); } - + /** * VUEN-2584【issue】平台sql注入漏洞几个问题 * 部分特殊函数 可以将查询结果混夹在错误信息中,导致数据库的信息暴露 + * * @param e * @return */ @ExceptionHandler(java.sql.SQLException.class) - public Result handleSQLException(Exception e){ + public Result handleSQLException(Exception e) { String msg = e.getMessage(); String extractvalue = "extractvalue"; String updatexml = "updatexml"; - if(msg!=null && (msg.toLowerCase().indexOf(extractvalue)>=0 || msg.toLowerCase().indexOf(updatexml)>=0)){ + if (msg != null && (msg.toLowerCase().indexOf(extractvalue) >= 0 || msg.toLowerCase().indexOf(updatexml) >= 0)) { return Result.error("校验失败,sql解析异常!"); } return Result.error("校验失败,sql解析异常!" + msg); @@ -843,96 +908,105 @@ public class SystemApiController { /** * 根据高级查询条件查询用户 + * * @param superQuery * @param matchType * @return */ @GetMapping("/queryUserBySuperQuery") - public List queryUserBySuperQuery(@RequestParam("superQuery") String superQuery, @RequestParam("matchType") String matchType) { - return sysBaseApi.queryUserBySuperQuery(superQuery,matchType); + public List queryUserBySuperQuery(@RequestParam("superQuery") String superQuery, @RequestParam("matchType") String matchType) { + return sysBaseApi.queryUserBySuperQuery(superQuery, matchType); } /** * 根据id条件查询用户 + * * @param id * @return */ @GetMapping("/queryUserById") - public JSONObject queryUserById(@RequestParam("id") String id) { + public JSONObject queryUserById(@RequestParam("id") String id) { return sysBaseApi.queryUserById(id); } /** * 根据高级查询条件查询部门 + * * @param superQuery * @param matchType * @return */ @GetMapping("/queryDeptBySuperQuery") - public List queryDeptBySuperQuery(@RequestParam("superQuery") String superQuery, @RequestParam("matchType") String matchType) { - return sysBaseApi.queryDeptBySuperQuery(superQuery,matchType); + public List queryDeptBySuperQuery(@RequestParam("superQuery") String superQuery, @RequestParam("matchType") String matchType) { + return sysBaseApi.queryDeptBySuperQuery(superQuery, matchType); } /** * 根据高级查询条件查询角色 + * * @param superQuery * @param matchType * @return */ @GetMapping("/queryRoleBySuperQuery") - public List queryRoleBySuperQuery(@RequestParam("superQuery") String superQuery, @RequestParam("matchType") String matchType) { - return sysBaseApi.queryRoleBySuperQuery(superQuery,matchType); + public List queryRoleBySuperQuery(@RequestParam("superQuery") String superQuery, @RequestParam("matchType") String matchType) { + return sysBaseApi.queryRoleBySuperQuery(superQuery, matchType); } /** * 根据租户ID查询用户ID + * * @param tenantId 租户ID * @return List */ @GetMapping("/selectUserIdByTenantId") - public List selectUserIdByTenantId(@RequestParam("tenantId") String tenantId) { + public List selectUserIdByTenantId(@RequestParam("tenantId") String tenantId) { return sysBaseApi.selectUserIdByTenantId(tenantId); } /** * 根据部门ID查询用户ID + * * @param deptIds * @return */ @GetMapping("/queryUserIdsByDeptIds") - public List queryUserIdsByDeptIds(@RequestParam("deptIds") List deptIds){ + public List queryUserIdsByDeptIds(@RequestParam("deptIds") List deptIds) { return sysBaseApi.queryUserIdsByDeptIds(deptIds); } - + /** * 根据部门ID查询用户ID + * * @param deptIds * @return */ @GetMapping("/queryUserAccountsByDeptIds") - public List queryUserAccountsByDeptIds(@RequestParam("deptIds") List deptIds){ + public List queryUserAccountsByDeptIds(@RequestParam("deptIds") List deptIds) { return sysBaseApi.queryUserAccountsByDeptIds(deptIds); } /** * 根据角色编码 查询用户ID + * * @param roleCodes * @return */ @GetMapping("/queryUserIdsByRoleds") - public List queryUserIdsByRoleds(@RequestParam("roleCodes") List roleCodes){ + public List queryUserIdsByRoleds(@RequestParam("roleCodes") List roleCodes) { return sysBaseApi.queryUserIdsByRoleds(roleCodes); } /** * 根据职务ID查询用户ID + * * @param positionIds * @return */ @GetMapping("/queryUserIdsByPositionIds") - public List queryUserIdsByPositionIds(@RequestParam("positionIds") List positionIds){ + public List queryUserIdsByPositionIds(@RequestParam("positionIds") List positionIds) { return sysBaseApi.queryUserIdsByPositionIds(positionIds); } @@ -944,7 +1018,7 @@ public class SystemApiController { * @return */ @GetMapping("/getUserAccountsByDepCode") - public List getUserAccountsByDepCode(@RequestParam("orgCode") String orgCode){ + public List getUserAccountsByDepCode(@RequestParam("orgCode") String orgCode) { return sysBaseApi.getUserAccountsByDepCode(orgCode); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java index 034b47e..3ab8936 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java @@ -1,10 +1,9 @@ package org.jeecg.modules.cas.controller; -import java.util.List; - +import com.alibaba.fastjson.JSONObject; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; @@ -24,9 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import com.alibaba.fastjson.JSONObject; - -import lombok.extern.slf4j.Slf4j; +import java.util.List; /** *

@@ -41,71 +38,71 @@ import lombok.extern.slf4j.Slf4j; @RequestMapping("/sys/cas/client") public class CasClientController { - @Autowired - private ISysUserService sysUserService; - @Autowired + @Autowired + private ISysUserService sysUserService; + @Autowired private ISysDepartService sysDepartService; - @Autowired + @Autowired private RedisUtil redisUtil; - - @Value("${cas.prefixUrl}") + + @Value("${cas.prefixUrl}") private String prefixUrl; - - - @GetMapping("/validateLogin") - public Object validateLogin(@RequestParam(name="ticket") String ticket, - @RequestParam(name="service") String service, - HttpServletRequest request, - HttpServletResponse response) throws Exception { - Result result = new Result(); - log.info("Rest api login."); - try { - String validateUrl = prefixUrl+"/p3/serviceValidate"; - String res = CasServiceUtil.getStValidate(validateUrl, ticket, service); - log.info("res."+res); - final String error = XmlUtils.getTextForElement(res, "authenticationFailure"); - if(StringUtils.isNotEmpty(error)) { - throw new Exception(error); - } - final String principal = XmlUtils.getTextForElement(res, "user"); - if (StringUtils.isEmpty(principal)) { - throw new Exception("No principal was found in the response from the CAS server."); - } - log.info("-------token----username---"+principal); - //1. 校验用户是否有效 - SysUser sysUser = sysUserService.getUserByName(principal); - result = sysUserService.checkUserIsEffective(sysUser); - if(!result.isSuccess()) { - return result; - } - String token = JwtUtil.sign(sysUser.getUsername(), sysUser.getPassword()); - // 设置超时时间 - redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); - redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME*2 / 1000); - //获取用户部门信息 - JSONObject obj = new JSONObject(); - List departs = sysDepartService.queryUserDeparts(sysUser.getId()); - obj.put("departs", departs); - if (departs == null || departs.size() == 0) { - obj.put("multi_depart", 0); - } else if (departs.size() == 1) { - sysUserService.updateUserDepart(principal, departs.get(0).getOrgCode(),null); - obj.put("multi_depart", 1); - } else { - obj.put("multi_depart", 2); - } - obj.put("token", token); - obj.put("userInfo", sysUser); - result.setResult(obj); - result.success("登录成功"); - - } catch (Exception e) { - //e.printStackTrace(); - result.error500(e.getMessage()); - } - return new HttpEntity<>(result); - } - + @GetMapping("/validateLogin") + public Object validateLogin(@RequestParam(name = "ticket") String ticket, + @RequestParam(name = "service") String service, + HttpServletRequest request, + HttpServletResponse response) throws Exception { + Result result = new Result(); + log.info("Rest api login."); + try { + String validateUrl = prefixUrl + "/p3/serviceValidate"; + String res = CasServiceUtil.getStValidate(validateUrl, ticket, service); + log.info("res." + res); + final String error = XmlUtils.getTextForElement(res, "authenticationFailure"); + if (StringUtils.isNotEmpty(error)) { + throw new Exception(error); + } + final String principal = XmlUtils.getTextForElement(res, "user"); + if (StringUtils.isEmpty(principal)) { + throw new Exception("No principal was found in the response from the CAS server."); + } + log.info("-------token----username---" + principal); + //1. 校验用户是否有效 + SysUser sysUser = sysUserService.getUserByName(principal); + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + return result; + } + String token = JwtUtil.sign(sysUser.getUsername(), sysUser.getPassword()); + // 设置超时时间 + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); + + //获取用户部门信息 + JSONObject obj = new JSONObject(); + List departs = sysDepartService.queryUserDeparts(sysUser.getId()); + obj.put("departs", departs); + if (departs == null || departs.size() == 0) { + obj.put("multi_depart", 0); + } else if (departs.size() == 1) { + sysUserService.updateUserDepart(principal, departs.get(0).getOrgCode(), null); + obj.put("multi_depart", 1); + } else { + obj.put("multi_depart", 2); + } + obj.put("token", token); + obj.put("userInfo", sysUser); + result.setResult(obj); + result.success("登录成功"); + + } catch (Exception e) { + //e.printStackTrace(); + result.error500(e.getMessage()); + } + return new HttpEntity<>(result); + } + + } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/util/CasServiceUtil.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/util/CasServiceUtil.java index 12fcec1..e331752 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/util/CasServiceUtil.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/util/CasServiceUtil.java @@ -1,14 +1,5 @@ package org.jeecg.modules.cas.util; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.security.cert.X509Certificate; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.socket.LayeredConnectionSocketFactory; @@ -16,40 +7,48 @@ import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.security.cert.X509Certificate; + /** * @Description: CasServiceUtil * @author: jeecg-boot */ public class CasServiceUtil { - - public static void main(String[] args) { - String serviceUrl = "https://cas.8f8.com.cn:8443/cas/p3/serviceValidate"; - String service = "http://localhost:3003/user/login"; - String ticket = "ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3"; - String res = getStValidate(serviceUrl,ticket, service); - - System.out.println("---------res-----"+res); - } - - - /** + + public static void main(String[] args) { + String serviceUrl = "https://cas.8f8.com.cn:8443/cas/p3/serviceValidate"; + String service = "http://localhost:3003/user/login"; + String ticket = "ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3"; + String res = getStValidate(serviceUrl, ticket, service); + + System.out.println("---------res-----" + res); + } + + + /** * 验证ST */ - public static String getStValidate(String url, String st, String service){ - try { - url = url+"?service="+service+"&ticket="+st; - CloseableHttpClient httpclient = createHttpClientWithNoSsl(); - HttpGet httpget = new HttpGet(url); - HttpResponse response = httpclient.execute(httpget); - String res = readResponse(response); - return res == null ? null : (res == "" ? null : res); - } catch (Exception e) { - e.printStackTrace(); - } - return ""; - } + public static String getStValidate(String url, String st, String service) { + try { + url = url + "?service=" + service + "&ticket=" + st; + CloseableHttpClient httpclient = createHttpClientWithNoSsl(); + HttpGet httpget = new HttpGet(url); + HttpResponse response = httpclient.execute(httpget); + String res = readResponse(response); + return res == null ? null : (res == "" ? null : res); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + - /** * 读取 response body 内容为字符串 * @@ -66,8 +65,8 @@ public class CasServiceUtil { } return result; } - - + + /** * 创建模拟客户端(针对 https 客户端禁用 SSL 验证) * diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java index 408a100..7fbb695 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/cas/util/XmlUtils.java @@ -1,20 +1,7 @@ package org.jeecg.modules.cas.util; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; -import org.jeecg.common.constant.CommonConstant; +import lombok.extern.slf4j.Slf4j; import org.w3c.dom.Document; import org.xml.sax.Attributes; import org.xml.sax.InputSource; @@ -22,10 +9,17 @@ import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; -import lombok.extern.slf4j.Slf4j; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import java.io.StringReader; +import java.util.*; /** * 解析cas,ST验证后的xml + * * @author: jeecg-boot */ @Slf4j @@ -40,7 +34,6 @@ public final class XmlUtils { * Creates a new namespace-aware DOM document object by parsing the given XML. * * @param xml XML content. - * * @return DOM document. */ public static Document newDocument(final String xml) { @@ -189,8 +182,8 @@ public final class XmlUtils { return builder.toString(); } - - + + public static Map extractCustomAttributes(final String xml) { final SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); @@ -203,11 +196,11 @@ public final class XmlUtils { xmlReader.parse(new InputSource(new StringReader(xml))); return handler.getAttributes(); } catch (final Exception e) { - log.error(e.getMessage(), e); + log.error(e.getMessage(), e); return Collections.emptyMap(); } } - + private static class CustomAttributeHandler extends DefaultHandler { private Map attributes; @@ -270,35 +263,35 @@ public final class XmlUtils { return this.attributes; } } - - + + public static void main(String[] args) { - String result = "\r\n" + - " \r\n" + - " admin\r\n" + - " \r\n" + - " UsernamePasswordCredential\r\n" + - " true\r\n" + - " 2019-08-01T19:33:21.527+08:00[Asia/Shanghai]\r\n" + - " RestAuthenticationHandler\r\n" + - " RestAuthenticationHandler\r\n" + - " false\r\n" + - " \r\n" + - " \r\n" + - ""; - - String errorRes = "\r\n" + - " 未能够识别出目标 'ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3'票根\r\n" + - ""; - - String error = XmlUtils.getTextForElement(errorRes, "authenticationFailure"); - System.out.println("------"+error); - - String error2 = XmlUtils.getTextForElement(result, "authenticationFailure"); - System.out.println("------"+error2); - String principal = XmlUtils.getTextForElement(result, "user"); - System.out.println("---principal---"+principal); - Map attributes = XmlUtils.extractCustomAttributes(result); - System.out.println("---attributes---"+attributes); - } + String result = "\r\n" + + " \r\n" + + " admin\r\n" + + " \r\n" + + " UsernamePasswordCredential\r\n" + + " true\r\n" + + " 2019-08-01T19:33:21.527+08:00[Asia/Shanghai]\r\n" + + " RestAuthenticationHandler\r\n" + + " RestAuthenticationHandler\r\n" + + " false\r\n" + + " \r\n" + + " \r\n" + + ""; + + String errorRes = "\r\n" + + " 未能够识别出目标 'ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3'票根\r\n" + + ""; + + String error = XmlUtils.getTextForElement(errorRes, "authenticationFailure"); + System.out.println("------" + error); + + String error2 = XmlUtils.getTextForElement(result, "authenticationFailure"); + System.out.println("------" + error2); + String principal = XmlUtils.getTextForElement(result, "user"); + System.out.println("---principal---" + principal); + Map attributes = XmlUtils.extractCustomAttributes(result); + System.out.println("---attributes---" + attributes); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/constant/ExperimentStatus.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/constant/ExperimentStatus.java index e0d7671..6af9904 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/constant/ExperimentStatus.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/constant/ExperimentStatus.java @@ -2,7 +2,7 @@ package org.jeecg.modules.database.constant; public interface ExperimentStatus { - String PRE_TEST="试验前"; - String PROGRESSING="试验进行中"; - String COMPLETED="试验完成"; + String PRE_TEST = "试验前"; + String PROGRESSING = "试验进行中"; + String COMPLETED = "试验完成"; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ClientController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ClientController.java index 1b3d72c..d393fbb 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ClientController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ClientController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.Client; -import org.jeecg.modules.database.service.IClientService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.Client; +import org.jeecg.modules.database.service.IClientService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: 委托方 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ -@Tag(name="委托方") +@Tag(name = "委托方") @RestController @RequestMapping("/database/client") @Slf4j public class ClientController extends JeecgController { - @Autowired - private IClientService clientService; - - /** - * 分页列表查询 - * - * @param client - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "委托方-分页列表查询") - @Operation(summary="委托方-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(Client client, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(client, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = clientService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param client - * @return - */ - @AutoLog(value = "委托方-添加") - @Operation(summary="委托方-添加") - @RequiresPermissions("database:client:add") - @PostMapping(value = "/add") - public Result add(@RequestBody Client client) { - clientService.save(client); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param client - * @return - */ - @AutoLog(value = "委托方-编辑") - @Operation(summary="委托方-编辑") - @RequiresPermissions("database:client:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody Client client) { - clientService.updateById(client); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "委托方-通过id删除") - @Operation(summary="委托方-通过id删除") - @RequiresPermissions("database:client:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - clientService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "委托方-批量删除") - @Operation(summary="委托方-批量删除") - @RequiresPermissions("database:client:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.clientService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "委托方-通过id查询") - @Operation(summary="委托方-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - Client client = clientService.getById(id); - if(client==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(client); - } + @Autowired + private IClientService clientService; /** - * 导出excel - * - * @param request - * @param client - */ + * 分页列表查询 + * + * @param client + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "委托方-分页列表查询") + @Operation(summary = "委托方-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(Client client, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(client, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = clientService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param client + * @return + */ + @AutoLog(value = "委托方-添加") + @Operation(summary = "委托方-添加") + @RequiresPermissions("database:client:add") + @PostMapping(value = "/add") + public Result add(@RequestBody Client client) { + clientService.save(client); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param client + * @return + */ + @AutoLog(value = "委托方-编辑") + @Operation(summary = "委托方-编辑") + @RequiresPermissions("database:client:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody Client client) { + clientService.updateById(client); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "委托方-通过id删除") + @Operation(summary = "委托方-通过id删除") + @RequiresPermissions("database:client:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + clientService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "委托方-批量删除") + @Operation(summary = "委托方-批量删除") + @RequiresPermissions("database:client:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.clientService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "委托方-通过id查询") + @Operation(summary = "委托方-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Client client = clientService.getById(id); + if (client == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(client); + } + + /** + * 导出excel + * + * @param request + * @param client + */ @RequiresPermissions("database:client:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, Client client) { @@ -163,12 +147,12 @@ public class ClientController extends JeecgController { } /** - * 通过excel导入数据 - * - * @param request - * @param response - * @return - */ + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ @RequiresPermissions("database:client:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/CnasTestController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/CnasTestController.java index 5ff3121..79e52d5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/CnasTestController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/CnasTestController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.CnasTest; -import org.jeecg.modules.database.service.ICnasTestService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.CnasTest; +import org.jeecg.modules.database.service.ICnasTestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: cnas测试参数列表 * @Author: jeecg-boot - * @Date: 2024-10-23 + * @Date: 2024-10-23 * @Version: V1.0 */ -@Tag(name="cnas测试参数列表") +@Tag(name = "cnas测试参数列表") @RestController @RequestMapping("/database/cnasTest") @Slf4j public class CnasTestController extends JeecgController { - @Autowired - private ICnasTestService cnasTestService; - - /** - * 分页列表查询 - * - * @param cnasTest - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "cnas测试参数列表-分页列表查询") - @Operation(summary="cnas测试参数列表-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(CnasTest cnasTest, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(cnasTest, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = cnasTestService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param cnasTest - * @return - */ - @AutoLog(value = "cnas测试参数列表-添加") - @Operation(summary="cnas测试参数列表-添加") - @RequiresPermissions("database:cnas_test:add") - @PostMapping(value = "/add") - public Result add(@RequestBody CnasTest cnasTest) { - cnasTestService.save(cnasTest); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param cnasTest - * @return - */ - @AutoLog(value = "cnas测试参数列表-编辑") - @Operation(summary="cnas测试参数列表-编辑") - @RequiresPermissions("database:cnas_test:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody CnasTest cnasTest) { - cnasTestService.updateById(cnasTest); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "cnas测试参数列表-通过id删除") - @Operation(summary="cnas测试参数列表-通过id删除") - @RequiresPermissions("database:cnas_test:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - cnasTestService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "cnas测试参数列表-批量删除") - @Operation(summary="cnas测试参数列表-批量删除") - @RequiresPermissions("database:cnas_test:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.cnasTestService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "cnas测试参数列表-通过id查询") - @Operation(summary="cnas测试参数列表-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - CnasTest cnasTest = cnasTestService.getById(id); - if(cnasTest==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(cnasTest); - } + @Autowired + private ICnasTestService cnasTestService; /** - * 导出excel - * - * @param request - * @param cnasTest - */ + * 分页列表查询 + * + * @param cnasTest + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "cnas测试参数列表-分页列表查询") + @Operation(summary = "cnas测试参数列表-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(CnasTest cnasTest, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(cnasTest, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = cnasTestService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param cnasTest + * @return + */ + @AutoLog(value = "cnas测试参数列表-添加") + @Operation(summary = "cnas测试参数列表-添加") + @RequiresPermissions("database:cnas_test:add") + @PostMapping(value = "/add") + public Result add(@RequestBody CnasTest cnasTest) { + cnasTestService.save(cnasTest); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param cnasTest + * @return + */ + @AutoLog(value = "cnas测试参数列表-编辑") + @Operation(summary = "cnas测试参数列表-编辑") + @RequiresPermissions("database:cnas_test:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody CnasTest cnasTest) { + cnasTestService.updateById(cnasTest); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "cnas测试参数列表-通过id删除") + @Operation(summary = "cnas测试参数列表-通过id删除") + @RequiresPermissions("database:cnas_test:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + cnasTestService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "cnas测试参数列表-批量删除") + @Operation(summary = "cnas测试参数列表-批量删除") + @RequiresPermissions("database:cnas_test:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.cnasTestService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "cnas测试参数列表-通过id查询") + @Operation(summary = "cnas测试参数列表-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + CnasTest cnasTest = cnasTestService.getById(id); + if (cnasTest == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(cnasTest); + } + + /** + * 导出excel + * + * @param request + * @param cnasTest + */ @RequiresPermissions("database:cnas_test:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, CnasTest cnasTest) { @@ -163,12 +147,12 @@ public class CnasTestController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ComponentController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ComponentController.java index 76889b9..7052e1e 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ComponentController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ComponentController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.Component; -import org.jeecg.modules.database.service.IComponentService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.Component; +import org.jeecg.modules.database.service.IComponentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: 元器件 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ -@Tag(name="元器件") +@Tag(name = "元器件") @RestController @RequestMapping("/database/component") @Slf4j public class ComponentController extends JeecgController { - @Autowired - private IComponentService componentService; - - /** - * 分页列表查询 - * - * @param component - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "元器件-分页列表查询") - @Operation(summary="元器件-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(Component component, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(component, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = componentService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param component - * @return - */ - @AutoLog(value = "元器件-添加") - @Operation(summary="元器件-添加") - @RequiresPermissions("database:component:add") - @PostMapping(value = "/add") - public Result add(@RequestBody Component component) { - componentService.save(component); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param component - * @return - */ - @AutoLog(value = "元器件-编辑") - @Operation(summary="元器件-编辑") - @RequiresPermissions("database:component:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody Component component) { - componentService.updateById(component); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "元器件-通过id删除") - @Operation(summary="元器件-通过id删除") - @RequiresPermissions("database:component:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - componentService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "元器件-批量删除") - @Operation(summary="元器件-批量删除") - @RequiresPermissions("database:component:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.componentService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "元器件-通过id查询") - @Operation(summary="元器件-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - Component component = componentService.getById(id); - if(component==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(component); - } + @Autowired + private IComponentService componentService; /** - * 导出excel - * - * @param request - * @param component - */ + * 分页列表查询 + * + * @param component + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "元器件-分页列表查询") + @Operation(summary = "元器件-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(Component component, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(component, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = componentService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param component + * @return + */ + @AutoLog(value = "元器件-添加") + @Operation(summary = "元器件-添加") + @RequiresPermissions("database:component:add") + @PostMapping(value = "/add") + public Result add(@RequestBody Component component) { + componentService.save(component); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param component + * @return + */ + @AutoLog(value = "元器件-编辑") + @Operation(summary = "元器件-编辑") + @RequiresPermissions("database:component:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody Component component) { + componentService.updateById(component); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "元器件-通过id删除") + @Operation(summary = "元器件-通过id删除") + @RequiresPermissions("database:component:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + componentService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "元器件-批量删除") + @Operation(summary = "元器件-批量删除") + @RequiresPermissions("database:component:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.componentService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "元器件-通过id查询") + @Operation(summary = "元器件-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Component component = componentService.getById(id); + if (component == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(component); + } + + /** + * 导出excel + * + * @param request + * @param component + */ @RequiresPermissions("database:component:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, Component component) { @@ -163,12 +147,12 @@ public class ComponentController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentFavoritesController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentFavoritesController.java index 1ad9708..daf1536 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentFavoritesController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentFavoritesController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.DocumentFavorites; -import org.jeecg.modules.database.service.IDocumentFavoritesService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.DocumentFavorites; +import org.jeecg.modules.database.service.IDocumentFavoritesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: 我的收藏文档 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ -@Tag(name="我的收藏文档") +@Tag(name = "我的收藏文档") @RestController @RequestMapping("/database/documentFavorites") @Slf4j public class DocumentFavoritesController extends JeecgController { - @Autowired - private IDocumentFavoritesService documentFavoritesService; - - /** - * 分页列表查询 - * - * @param documentFavorites - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "我的收藏文档-分页列表查询") - @Operation(summary="我的收藏文档-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(DocumentFavorites documentFavorites, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(documentFavorites, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = documentFavoritesService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param documentFavorites - * @return - */ - @AutoLog(value = "我的收藏文档-添加") - @Operation(summary="我的收藏文档-添加") - @RequiresPermissions("database:document_favorites:add") - @PostMapping(value = "/add") - public Result add(@RequestBody DocumentFavorites documentFavorites) { - documentFavoritesService.save(documentFavorites); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param documentFavorites - * @return - */ - @AutoLog(value = "我的收藏文档-编辑") - @Operation(summary="我的收藏文档-编辑") - @RequiresPermissions("database:document_favorites:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody DocumentFavorites documentFavorites) { - documentFavoritesService.updateById(documentFavorites); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "我的收藏文档-通过id删除") - @Operation(summary="我的收藏文档-通过id删除") - @RequiresPermissions("database:document_favorites:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - documentFavoritesService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "我的收藏文档-批量删除") - @Operation(summary="我的收藏文档-批量删除") - @RequiresPermissions("database:document_favorites:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.documentFavoritesService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "我的收藏文档-通过id查询") - @Operation(summary="我的收藏文档-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - DocumentFavorites documentFavorites = documentFavoritesService.getById(id); - if(documentFavorites==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(documentFavorites); - } + @Autowired + private IDocumentFavoritesService documentFavoritesService; /** - * 导出excel - * - * @param request - * @param documentFavorites - */ + * 分页列表查询 + * + * @param documentFavorites + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "我的收藏文档-分页列表查询") + @Operation(summary = "我的收藏文档-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(DocumentFavorites documentFavorites, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(documentFavorites, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = documentFavoritesService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param documentFavorites + * @return + */ + @AutoLog(value = "我的收藏文档-添加") + @Operation(summary = "我的收藏文档-添加") + @RequiresPermissions("database:document_favorites:add") + @PostMapping(value = "/add") + public Result add(@RequestBody DocumentFavorites documentFavorites) { + documentFavoritesService.save(documentFavorites); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param documentFavorites + * @return + */ + @AutoLog(value = "我的收藏文档-编辑") + @Operation(summary = "我的收藏文档-编辑") + @RequiresPermissions("database:document_favorites:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody DocumentFavorites documentFavorites) { + documentFavoritesService.updateById(documentFavorites); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "我的收藏文档-通过id删除") + @Operation(summary = "我的收藏文档-通过id删除") + @RequiresPermissions("database:document_favorites:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + documentFavoritesService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "我的收藏文档-批量删除") + @Operation(summary = "我的收藏文档-批量删除") + @RequiresPermissions("database:document_favorites:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.documentFavoritesService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "我的收藏文档-通过id查询") + @Operation(summary = "我的收藏文档-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + DocumentFavorites documentFavorites = documentFavoritesService.getById(id); + if (documentFavorites == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(documentFavorites); + } + + /** + * 导出excel + * + * @param request + * @param documentFavorites + */ @RequiresPermissions("database:document_favorites:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, DocumentFavorites documentFavorites) { @@ -163,12 +147,12 @@ public class DocumentFavoritesController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/EquipmentController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/EquipmentController.java index ba2dc77..ba41ce1 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/EquipmentController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/EquipmentController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.Equipment; -import org.jeecg.modules.database.service.IEquipmentService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.Equipment; +import org.jeecg.modules.database.service.IEquipmentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: 设备 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ -@Tag(name="设备") +@Tag(name = "设备") @RestController @RequestMapping("/database/equipment") @Slf4j public class EquipmentController extends JeecgController { - @Autowired - private IEquipmentService equipmentService; - - /** - * 分页列表查询 - * - * @param equipment - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "设备-分页列表查询") - @Operation(summary="设备-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(Equipment equipment, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(equipment, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = equipmentService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param equipment - * @return - */ - @AutoLog(value = "设备-添加") - @Operation(summary="设备-添加") - @RequiresPermissions("database:equipment:add") - @PostMapping(value = "/add") - public Result add(@RequestBody Equipment equipment) { - equipmentService.save(equipment); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param equipment - * @return - */ - @AutoLog(value = "设备-编辑") - @Operation(summary="设备-编辑") - @RequiresPermissions("database:equipment:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody Equipment equipment) { - equipmentService.updateById(equipment); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "设备-通过id删除") - @Operation(summary="设备-通过id删除") - @RequiresPermissions("database:equipment:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - equipmentService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "设备-批量删除") - @Operation(summary="设备-批量删除") - @RequiresPermissions("database:equipment:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.equipmentService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "设备-通过id查询") - @Operation(summary="设备-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - Equipment equipment = equipmentService.getById(id); - if(equipment==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(equipment); - } + @Autowired + private IEquipmentService equipmentService; /** - * 导出excel - * - * @param request - * @param equipment - */ + * 分页列表查询 + * + * @param equipment + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "设备-分页列表查询") + @Operation(summary = "设备-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(Equipment equipment, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(equipment, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = equipmentService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param equipment + * @return + */ + @AutoLog(value = "设备-添加") + @Operation(summary = "设备-添加") + @RequiresPermissions("database:equipment:add") + @PostMapping(value = "/add") + public Result add(@RequestBody Equipment equipment) { + equipmentService.save(equipment); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param equipment + * @return + */ + @AutoLog(value = "设备-编辑") + @Operation(summary = "设备-编辑") + @RequiresPermissions("database:equipment:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody Equipment equipment) { + equipmentService.updateById(equipment); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "设备-通过id删除") + @Operation(summary = "设备-通过id删除") + @RequiresPermissions("database:equipment:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + equipmentService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "设备-批量删除") + @Operation(summary = "设备-批量删除") + @RequiresPermissions("database:equipment:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.equipmentService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "设备-通过id查询") + @Operation(summary = "设备-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Equipment equipment = equipmentService.getById(id); + if (equipment == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(equipment); + } + + /** + * 导出excel + * + * @param request + * @param equipment + */ @RequiresPermissions("database:equipment:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, Equipment equipment) { @@ -163,12 +147,12 @@ public class EquipmentController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java index f4af82e..9abe4b2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java @@ -11,7 +11,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; -import org.jeecg.common.aspect.annotation.PermissionData; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.util.JwtUtil; diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentDocController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentDocController.java index 9deb294..8554c40 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentDocController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentDocController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.ExperimentDoc; -import org.jeecg.modules.database.service.IExperimentDocService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.ExperimentDoc; +import org.jeecg.modules.database.service.IExperimentDocService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: 试验文档 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ -@Tag(name="试验文档") +@Tag(name = "试验文档") @RestController @RequestMapping("/database/experimentDoc") @Slf4j public class ExperimentDocController extends JeecgController { - @Autowired - private IExperimentDocService experimentDocService; - - /** - * 分页列表查询 - * - * @param experimentDoc - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "试验文档-分页列表查询") - @Operation(summary="试验文档-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(ExperimentDoc experimentDoc, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(experimentDoc, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = experimentDocService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param experimentDoc - * @return - */ - @AutoLog(value = "试验文档-添加") - @Operation(summary="试验文档-添加") - @RequiresPermissions("database:experiment_doc:add") - @PostMapping(value = "/add") - public Result add(@RequestBody ExperimentDoc experimentDoc) { - experimentDocService.save(experimentDoc); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param experimentDoc - * @return - */ - @AutoLog(value = "试验文档-编辑") - @Operation(summary="试验文档-编辑") - @RequiresPermissions("database:experiment_doc:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody ExperimentDoc experimentDoc) { - experimentDocService.updateById(experimentDoc); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "试验文档-通过id删除") - @Operation(summary="试验文档-通过id删除") - @RequiresPermissions("database:experiment_doc:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - experimentDocService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "试验文档-批量删除") - @Operation(summary="试验文档-批量删除") - @RequiresPermissions("database:experiment_doc:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.experimentDocService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "试验文档-通过id查询") - @Operation(summary="试验文档-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - ExperimentDoc experimentDoc = experimentDocService.getById(id); - if(experimentDoc==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(experimentDoc); - } + @Autowired + private IExperimentDocService experimentDocService; /** - * 导出excel - * - * @param request - * @param experimentDoc - */ + * 分页列表查询 + * + * @param experimentDoc + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "试验文档-分页列表查询") + @Operation(summary = "试验文档-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(ExperimentDoc experimentDoc, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(experimentDoc, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = experimentDocService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param experimentDoc + * @return + */ + @AutoLog(value = "试验文档-添加") + @Operation(summary = "试验文档-添加") + @RequiresPermissions("database:experiment_doc:add") + @PostMapping(value = "/add") + public Result add(@RequestBody ExperimentDoc experimentDoc) { + experimentDocService.save(experimentDoc); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param experimentDoc + * @return + */ + @AutoLog(value = "试验文档-编辑") + @Operation(summary = "试验文档-编辑") + @RequiresPermissions("database:experiment_doc:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody ExperimentDoc experimentDoc) { + experimentDocService.updateById(experimentDoc); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "试验文档-通过id删除") + @Operation(summary = "试验文档-通过id删除") + @RequiresPermissions("database:experiment_doc:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + experimentDocService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "试验文档-批量删除") + @Operation(summary = "试验文档-批量删除") + @RequiresPermissions("database:experiment_doc:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.experimentDocService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "试验文档-通过id查询") + @Operation(summary = "试验文档-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + ExperimentDoc experimentDoc = experimentDocService.getById(id); + if (experimentDoc == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(experimentDoc); + } + + /** + * 导出excel + * + * @param request + * @param experimentDoc + */ @RequiresPermissions("database:experiment_doc:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, ExperimentDoc experimentDoc) { @@ -163,12 +147,12 @@ public class ExperimentDocController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentLogController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentLogController.java index dda5fb4..f9ba8d2 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentLogController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentLogController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.ExperimentLog; -import org.jeecg.modules.database.service.IExperimentLogService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.ExperimentLog; +import org.jeecg.modules.database.service.IExperimentLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: 试验日志 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ -@Tag(name="试验日志") +@Tag(name = "试验日志") @RestController @RequestMapping("/database/experimentLog") @Slf4j public class ExperimentLogController extends JeecgController { - @Autowired - private IExperimentLogService experimentLogService; - - /** - * 分页列表查询 - * - * @param experimentLog - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "试验日志-分页列表查询") - @Operation(summary="试验日志-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(ExperimentLog experimentLog, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(experimentLog, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = experimentLogService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param experimentLog - * @return - */ - @AutoLog(value = "试验日志-添加") - @Operation(summary="试验日志-添加") - @RequiresPermissions("database:experiment_log:add") - @PostMapping(value = "/add") - public Result add(@RequestBody ExperimentLog experimentLog) { - experimentLogService.save(experimentLog); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param experimentLog - * @return - */ - @AutoLog(value = "试验日志-编辑") - @Operation(summary="试验日志-编辑") - @RequiresPermissions("database:experiment_log:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody ExperimentLog experimentLog) { - experimentLogService.updateById(experimentLog); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "试验日志-通过id删除") - @Operation(summary="试验日志-通过id删除") - @RequiresPermissions("database:experiment_log:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - experimentLogService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "试验日志-批量删除") - @Operation(summary="试验日志-批量删除") - @RequiresPermissions("database:experiment_log:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.experimentLogService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "试验日志-通过id查询") - @Operation(summary="试验日志-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - ExperimentLog experimentLog = experimentLogService.getById(id); - if(experimentLog==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(experimentLog); - } + @Autowired + private IExperimentLogService experimentLogService; /** - * 导出excel - * - * @param request - * @param experimentLog - */ + * 分页列表查询 + * + * @param experimentLog + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "试验日志-分页列表查询") + @Operation(summary = "试验日志-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(ExperimentLog experimentLog, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(experimentLog, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = experimentLogService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param experimentLog + * @return + */ + @AutoLog(value = "试验日志-添加") + @Operation(summary = "试验日志-添加") + @RequiresPermissions("database:experiment_log:add") + @PostMapping(value = "/add") + public Result add(@RequestBody ExperimentLog experimentLog) { + experimentLogService.save(experimentLog); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param experimentLog + * @return + */ + @AutoLog(value = "试验日志-编辑") + @Operation(summary = "试验日志-编辑") + @RequiresPermissions("database:experiment_log:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody ExperimentLog experimentLog) { + experimentLogService.updateById(experimentLog); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "试验日志-通过id删除") + @Operation(summary = "试验日志-通过id删除") + @RequiresPermissions("database:experiment_log:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + experimentLogService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "试验日志-批量删除") + @Operation(summary = "试验日志-批量删除") + @RequiresPermissions("database:experiment_log:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.experimentLogService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "试验日志-通过id查询") + @Operation(summary = "试验日志-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + ExperimentLog experimentLog = experimentLogService.getById(id); + if (experimentLog == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(experimentLog); + } + + /** + * 导出excel + * + * @param request + * @param experimentLog + */ @RequiresPermissions("database:experiment_log:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, ExperimentLog experimentLog) { @@ -163,12 +147,12 @@ public class ExperimentLogController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentReviewController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentReviewController.java new file mode 100644 index 0000000..daa6718 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentReviewController.java @@ -0,0 +1,162 @@ +package org.jeecg.modules.database.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.ExperimentReview; +import org.jeecg.modules.database.service.IExperimentReviewService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import java.util.Arrays; + +/** + * @Description: 试验评定 + * @Author: jeecg-boot + * @Date: 2024-11-05 + * @Version: V1.0 + */ +@Tag(name = "试验评定") +@RestController +@RequestMapping("/database/experimentReview") +@Slf4j +public class ExperimentReviewController extends JeecgController { + @Autowired + private IExperimentReviewService experimentReviewService; + + /** + * 分页列表查询 + * + * @param experimentReview + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "试验评定-分页列表查询") + @Operation(summary = "试验评定-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(ExperimentReview experimentReview, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(experimentReview, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = experimentReviewService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param experimentReview + * @return + */ + @AutoLog(value = "试验评定-添加") + @Operation(summary = "试验评定-添加") + @RequiresPermissions("database:experiment_review:add") + @PostMapping(value = "/add") + public Result add(@RequestBody ExperimentReview experimentReview) { + experimentReviewService.save(experimentReview); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param experimentReview + * @return + */ + @AutoLog(value = "试验评定-编辑") + @Operation(summary = "试验评定-编辑") + @RequiresPermissions("database:experiment_review:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody ExperimentReview experimentReview) { + experimentReviewService.updateById(experimentReview); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "试验评定-通过id删除") + @Operation(summary = "试验评定-通过id删除") + @RequiresPermissions("database:experiment_review:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + experimentReviewService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "试验评定-批量删除") + @Operation(summary = "试验评定-批量删除") + @RequiresPermissions("database:experiment_review:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.experimentReviewService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "试验评定-通过id查询") + @Operation(summary = "试验评定-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + ExperimentReview experimentReview = experimentReviewService.getById(id); + if (experimentReview == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(experimentReview); + } + + /** + * 导出excel + * + * @param request + * @param experimentReview + */ + @RequiresPermissions("database:experiment_review:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, ExperimentReview experimentReview) { + return super.exportXls(request, experimentReview, ExperimentReview.class, "试验评定"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("database:experiment_review:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, ExperimentReview.class); + } + +} diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentTestProcessController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentTestProcessController.java index 9975971..24cc49a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentTestProcessController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentTestProcessController.java @@ -51,6 +51,7 @@ public class ExperimentTestProcessController extends JeecgController { - @Autowired - private IIrradiationStandardsService irradiationStandardsService; - - /** - * 分页列表查询 - * - * @param irradiationStandards - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "辐照标准-分页列表查询") - @Operation(summary="辐照标准-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(IrradiationStandards irradiationStandards, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(irradiationStandards, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = irradiationStandardsService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param irradiationStandards - * @return - */ - @AutoLog(value = "辐照标准-添加") - @Operation(summary="辐照标准-添加") - @RequiresPermissions("database:irradiation_standards:add") - @PostMapping(value = "/add") - public Result add(@RequestBody IrradiationStandards irradiationStandards) { - irradiationStandardsService.save(irradiationStandards); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param irradiationStandards - * @return - */ - @AutoLog(value = "辐照标准-编辑") - @Operation(summary="辐照标准-编辑") - @RequiresPermissions("database:irradiation_standards:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody IrradiationStandards irradiationStandards) { - irradiationStandardsService.updateById(irradiationStandards); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "辐照标准-通过id删除") - @Operation(summary="辐照标准-通过id删除") - @RequiresPermissions("database:irradiation_standards:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - irradiationStandardsService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "辐照标准-批量删除") - @Operation(summary="辐照标准-批量删除") - @RequiresPermissions("database:irradiation_standards:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.irradiationStandardsService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "辐照标准-通过id查询") - @Operation(summary="辐照标准-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - IrradiationStandards irradiationStandards = irradiationStandardsService.getById(id); - if(irradiationStandards==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(irradiationStandards); - } + @Autowired + private IIrradiationStandardsService irradiationStandardsService; /** - * 导出excel - * - * @param request - * @param irradiationStandards - */ + * 分页列表查询 + * + * @param irradiationStandards + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "辐照标准-分页列表查询") + @Operation(summary = "辐照标准-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(IrradiationStandards irradiationStandards, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(irradiationStandards, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = irradiationStandardsService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param irradiationStandards + * @return + */ + @AutoLog(value = "辐照标准-添加") + @Operation(summary = "辐照标准-添加") + @RequiresPermissions("database:irradiation_standards:add") + @PostMapping(value = "/add") + public Result add(@RequestBody IrradiationStandards irradiationStandards) { + irradiationStandardsService.save(irradiationStandards); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param irradiationStandards + * @return + */ + @AutoLog(value = "辐照标准-编辑") + @Operation(summary = "辐照标准-编辑") + @RequiresPermissions("database:irradiation_standards:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody IrradiationStandards irradiationStandards) { + irradiationStandardsService.updateById(irradiationStandards); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "辐照标准-通过id删除") + @Operation(summary = "辐照标准-通过id删除") + @RequiresPermissions("database:irradiation_standards:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + irradiationStandardsService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "辐照标准-批量删除") + @Operation(summary = "辐照标准-批量删除") + @RequiresPermissions("database:irradiation_standards:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.irradiationStandardsService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "辐照标准-通过id查询") + @Operation(summary = "辐照标准-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + IrradiationStandards irradiationStandards = irradiationStandardsService.getById(id); + if (irradiationStandards == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(irradiationStandards); + } + + /** + * 导出excel + * + * @param request + * @param irradiationStandards + */ @RequiresPermissions("database:irradiation_standards:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, IrradiationStandards irradiationStandards) { @@ -163,12 +147,12 @@ public class IrradiationStandardsController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/MigrationDataRecordController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/MigrationDataRecordController.java index 79eaf33..9d81fb1 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/MigrationDataRecordController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/MigrationDataRecordController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.MigrationDataRecord; -import org.jeecg.modules.database.service.IMigrationDataRecordService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.MigrationDataRecord; +import org.jeecg.modules.database.service.IMigrationDataRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: 迁移数据管理 * @Author: jeecg-boot - * @Date: 2024-11-04 + * @Date: 2024-11-04 * @Version: V1.0 */ -@Tag(name="迁移数据管理") +@Tag(name = "迁移数据管理") @RestController @RequestMapping("/database/migrationDataRecord") @Slf4j public class MigrationDataRecordController extends JeecgController { - @Autowired - private IMigrationDataRecordService migrationDataRecordService; - - /** - * 分页列表查询 - * - * @param migrationDataRecord - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "迁移数据管理-分页列表查询") - @Operation(summary="迁移数据管理-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(MigrationDataRecord migrationDataRecord, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(migrationDataRecord, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = migrationDataRecordService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param migrationDataRecord - * @return - */ - @AutoLog(value = "迁移数据管理-添加") - @Operation(summary="迁移数据管理-添加") - @RequiresPermissions("database:migration_data_record:add") - @PostMapping(value = "/add") - public Result add(@RequestBody MigrationDataRecord migrationDataRecord) { - migrationDataRecordService.save(migrationDataRecord); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param migrationDataRecord - * @return - */ - @AutoLog(value = "迁移数据管理-编辑") - @Operation(summary="迁移数据管理-编辑") - @RequiresPermissions("database:migration_data_record:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody MigrationDataRecord migrationDataRecord) { - migrationDataRecordService.updateById(migrationDataRecord); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "迁移数据管理-通过id删除") - @Operation(summary="迁移数据管理-通过id删除") - @RequiresPermissions("database:migration_data_record:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - migrationDataRecordService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "迁移数据管理-批量删除") - @Operation(summary="迁移数据管理-批量删除") - @RequiresPermissions("database:migration_data_record:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.migrationDataRecordService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "迁移数据管理-通过id查询") - @Operation(summary="迁移数据管理-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - MigrationDataRecord migrationDataRecord = migrationDataRecordService.getById(id); - if(migrationDataRecord==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(migrationDataRecord); - } + @Autowired + private IMigrationDataRecordService migrationDataRecordService; /** - * 导出excel - * - * @param request - * @param migrationDataRecord - */ + * 分页列表查询 + * + * @param migrationDataRecord + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "迁移数据管理-分页列表查询") + @Operation(summary = "迁移数据管理-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(MigrationDataRecord migrationDataRecord, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(migrationDataRecord, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = migrationDataRecordService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param migrationDataRecord + * @return + */ + @AutoLog(value = "迁移数据管理-添加") + @Operation(summary = "迁移数据管理-添加") + @RequiresPermissions("database:migration_data_record:add") + @PostMapping(value = "/add") + public Result add(@RequestBody MigrationDataRecord migrationDataRecord) { + migrationDataRecordService.save(migrationDataRecord); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param migrationDataRecord + * @return + */ + @AutoLog(value = "迁移数据管理-编辑") + @Operation(summary = "迁移数据管理-编辑") + @RequiresPermissions("database:migration_data_record:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody MigrationDataRecord migrationDataRecord) { + migrationDataRecordService.updateById(migrationDataRecord); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "迁移数据管理-通过id删除") + @Operation(summary = "迁移数据管理-通过id删除") + @RequiresPermissions("database:migration_data_record:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + migrationDataRecordService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "迁移数据管理-批量删除") + @Operation(summary = "迁移数据管理-批量删除") + @RequiresPermissions("database:migration_data_record:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.migrationDataRecordService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "迁移数据管理-通过id查询") + @Operation(summary = "迁移数据管理-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + MigrationDataRecord migrationDataRecord = migrationDataRecordService.getById(id); + if (migrationDataRecord == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(migrationDataRecord); + } + + /** + * 导出excel + * + * @param request + * @param migrationDataRecord + */ @RequiresPermissions("database:migration_data_record:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, MigrationDataRecord migrationDataRecord) { @@ -163,12 +147,12 @@ public class MigrationDataRecordController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/NasaDataRecordController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/NasaDataRecordController.java index 46d7dd1..9fa14d3 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/NasaDataRecordController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/NasaDataRecordController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.NasaDataRecord; -import org.jeecg.modules.database.service.INasaDataRecordService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.NasaDataRecord; +import org.jeecg.modules.database.service.INasaDataRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: NASA数据管理 * @Author: jeecg-boot - * @Date: 2024-11-04 + * @Date: 2024-11-04 * @Version: V1.0 */ -@Tag(name="NASA数据管理") +@Tag(name = "NASA数据管理") @RestController @RequestMapping("/database/nasaDataRecord") @Slf4j public class NasaDataRecordController extends JeecgController { - @Autowired - private INasaDataRecordService nasaDataRecordService; - - /** - * 分页列表查询 - * - * @param nasaDataRecord - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "NASA数据管理-分页列表查询") - @Operation(summary="NASA数据管理-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(NasaDataRecord nasaDataRecord, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(nasaDataRecord, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = nasaDataRecordService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param nasaDataRecord - * @return - */ - @AutoLog(value = "NASA数据管理-添加") - @Operation(summary="NASA数据管理-添加") - @RequiresPermissions("database:nasa_data_record:add") - @PostMapping(value = "/add") - public Result add(@RequestBody NasaDataRecord nasaDataRecord) { - nasaDataRecordService.save(nasaDataRecord); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param nasaDataRecord - * @return - */ - @AutoLog(value = "NASA数据管理-编辑") - @Operation(summary="NASA数据管理-编辑") - @RequiresPermissions("database:nasa_data_record:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody NasaDataRecord nasaDataRecord) { - nasaDataRecordService.updateById(nasaDataRecord); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "NASA数据管理-通过id删除") - @Operation(summary="NASA数据管理-通过id删除") - @RequiresPermissions("database:nasa_data_record:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - nasaDataRecordService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "NASA数据管理-批量删除") - @Operation(summary="NASA数据管理-批量删除") - @RequiresPermissions("database:nasa_data_record:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.nasaDataRecordService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "NASA数据管理-通过id查询") - @Operation(summary="NASA数据管理-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - NasaDataRecord nasaDataRecord = nasaDataRecordService.getById(id); - if(nasaDataRecord==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(nasaDataRecord); - } + @Autowired + private INasaDataRecordService nasaDataRecordService; /** - * 导出excel - * - * @param request - * @param nasaDataRecord - */ + * 分页列表查询 + * + * @param nasaDataRecord + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "NASA数据管理-分页列表查询") + @Operation(summary = "NASA数据管理-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(NasaDataRecord nasaDataRecord, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(nasaDataRecord, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = nasaDataRecordService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param nasaDataRecord + * @return + */ + @AutoLog(value = "NASA数据管理-添加") + @Operation(summary = "NASA数据管理-添加") + @RequiresPermissions("database:nasa_data_record:add") + @PostMapping(value = "/add") + public Result add(@RequestBody NasaDataRecord nasaDataRecord) { + nasaDataRecordService.save(nasaDataRecord); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param nasaDataRecord + * @return + */ + @AutoLog(value = "NASA数据管理-编辑") + @Operation(summary = "NASA数据管理-编辑") + @RequiresPermissions("database:nasa_data_record:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody NasaDataRecord nasaDataRecord) { + nasaDataRecordService.updateById(nasaDataRecord); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "NASA数据管理-通过id删除") + @Operation(summary = "NASA数据管理-通过id删除") + @RequiresPermissions("database:nasa_data_record:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + nasaDataRecordService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "NASA数据管理-批量删除") + @Operation(summary = "NASA数据管理-批量删除") + @RequiresPermissions("database:nasa_data_record:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.nasaDataRecordService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "NASA数据管理-通过id查询") + @Operation(summary = "NASA数据管理-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + NasaDataRecord nasaDataRecord = nasaDataRecordService.getById(id); + if (nasaDataRecord == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(nasaDataRecord); + } + + /** + * 导出excel + * + * @param request + * @param nasaDataRecord + */ @RequiresPermissions("database:nasa_data_record:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, NasaDataRecord nasaDataRecord) { @@ -163,12 +147,12 @@ public class NasaDataRecordController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/RadiateTypeController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/RadiateTypeController.java index 1a2d021..5b2e3f7 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/RadiateTypeController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/RadiateTypeController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.RadiateType; -import org.jeecg.modules.database.service.IRadiateTypeService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.RadiateType; +import org.jeecg.modules.database.service.IRadiateTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: 辐射源类型 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ -@Tag(name="辐射源类型") +@Tag(name = "辐射源类型") @RestController @RequestMapping("/database/radiateType") @Slf4j public class RadiateTypeController extends JeecgController { - @Autowired - private IRadiateTypeService radiateTypeService; - - /** - * 分页列表查询 - * - * @param radiateType - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "辐射源类型-分页列表查询") - @Operation(summary="辐射源类型-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(RadiateType radiateType, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(radiateType, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = radiateTypeService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param radiateType - * @return - */ - @AutoLog(value = "辐射源类型-添加") - @Operation(summary="辐射源类型-添加") - @RequiresPermissions("database:radiate_type:add") - @PostMapping(value = "/add") - public Result add(@RequestBody RadiateType radiateType) { - radiateTypeService.save(radiateType); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param radiateType - * @return - */ - @AutoLog(value = "辐射源类型-编辑") - @Operation(summary="辐射源类型-编辑") - @RequiresPermissions("database:radiate_type:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody RadiateType radiateType) { - radiateTypeService.updateById(radiateType); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "辐射源类型-通过id删除") - @Operation(summary="辐射源类型-通过id删除") - @RequiresPermissions("database:radiate_type:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - radiateTypeService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "辐射源类型-批量删除") - @Operation(summary="辐射源类型-批量删除") - @RequiresPermissions("database:radiate_type:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.radiateTypeService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "辐射源类型-通过id查询") - @Operation(summary="辐射源类型-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - RadiateType radiateType = radiateTypeService.getById(id); - if(radiateType==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(radiateType); - } + @Autowired + private IRadiateTypeService radiateTypeService; /** - * 导出excel - * - * @param request - * @param radiateType - */ + * 分页列表查询 + * + * @param radiateType + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "辐射源类型-分页列表查询") + @Operation(summary = "辐射源类型-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(RadiateType radiateType, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(radiateType, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = radiateTypeService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param radiateType + * @return + */ + @AutoLog(value = "辐射源类型-添加") + @Operation(summary = "辐射源类型-添加") + @RequiresPermissions("database:radiate_type:add") + @PostMapping(value = "/add") + public Result add(@RequestBody RadiateType radiateType) { + radiateTypeService.save(radiateType); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param radiateType + * @return + */ + @AutoLog(value = "辐射源类型-编辑") + @Operation(summary = "辐射源类型-编辑") + @RequiresPermissions("database:radiate_type:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody RadiateType radiateType) { + radiateTypeService.updateById(radiateType); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "辐射源类型-通过id删除") + @Operation(summary = "辐射源类型-通过id删除") + @RequiresPermissions("database:radiate_type:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + radiateTypeService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "辐射源类型-批量删除") + @Operation(summary = "辐射源类型-批量删除") + @RequiresPermissions("database:radiate_type:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.radiateTypeService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "辐射源类型-通过id查询") + @Operation(summary = "辐射源类型-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + RadiateType radiateType = radiateTypeService.getById(id); + if (radiateType == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(radiateType); + } + + /** + * 导出excel + * + * @param request + * @param radiateType + */ @RequiresPermissions("database:radiate_type:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, RadiateType radiateType) { @@ -163,12 +147,12 @@ public class RadiateTypeController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/TestStandardsController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/TestStandardsController.java index 2d12c89..b4f3666 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/TestStandardsController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/TestStandardsController.java @@ -1,161 +1,145 @@ package org.jeecg.modules.database.controller; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.database.entity.TestStandards; -import org.jeecg.modules.database.service.ITestStandardsService; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - -import org.jeecgframework.poi.excel.ExcelImportUtil; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.jeecg.common.system.base.controller.JeecgController; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import org.jeecg.common.aspect.annotation.AutoLog; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.TestStandards; +import org.jeecg.modules.database.service.ITestStandardsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; + +/** * @Description: 测试标准 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ -@Tag(name="测试标准") +@Tag(name = "测试标准") @RestController @RequestMapping("/database/testStandards") @Slf4j public class TestStandardsController extends JeecgController { - @Autowired - private ITestStandardsService testStandardsService; - - /** - * 分页列表查询 - * - * @param testStandards - * @param pageNo - * @param pageSize - * @param req - * @return - */ - //@AutoLog(value = "测试标准-分页列表查询") - @Operation(summary="测试标准-分页列表查询") - @GetMapping(value = "/list") - public Result> queryPageList(TestStandards testStandards, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(testStandards, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = testStandardsService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param testStandards - * @return - */ - @AutoLog(value = "测试标准-添加") - @Operation(summary="测试标准-添加") - @RequiresPermissions("database:test_standards:add") - @PostMapping(value = "/add") - public Result add(@RequestBody TestStandards testStandards) { - testStandardsService.save(testStandards); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param testStandards - * @return - */ - @AutoLog(value = "测试标准-编辑") - @Operation(summary="测试标准-编辑") - @RequiresPermissions("database:test_standards:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody TestStandards testStandards) { - testStandardsService.updateById(testStandards); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "测试标准-通过id删除") - @Operation(summary="测试标准-通过id删除") - @RequiresPermissions("database:test_standards:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - testStandardsService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "测试标准-批量删除") - @Operation(summary="测试标准-批量删除") - @RequiresPermissions("database:test_standards:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.testStandardsService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - //@AutoLog(value = "测试标准-通过id查询") - @Operation(summary="测试标准-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - TestStandards testStandards = testStandardsService.getById(id); - if(testStandards==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(testStandards); - } + @Autowired + private ITestStandardsService testStandardsService; /** - * 导出excel - * - * @param request - * @param testStandards - */ + * 分页列表查询 + * + * @param testStandards + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "测试标准-分页列表查询") + @Operation(summary = "测试标准-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(TestStandards testStandards, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(testStandards, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = testStandardsService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param testStandards + * @return + */ + @AutoLog(value = "测试标准-添加") + @Operation(summary = "测试标准-添加") + @RequiresPermissions("database:test_standards:add") + @PostMapping(value = "/add") + public Result add(@RequestBody TestStandards testStandards) { + testStandardsService.save(testStandards); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param testStandards + * @return + */ + @AutoLog(value = "测试标准-编辑") + @Operation(summary = "测试标准-编辑") + @RequiresPermissions("database:test_standards:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody TestStandards testStandards) { + testStandardsService.updateById(testStandards); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "测试标准-通过id删除") + @Operation(summary = "测试标准-通过id删除") + @RequiresPermissions("database:test_standards:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + testStandardsService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "测试标准-批量删除") + @Operation(summary = "测试标准-批量删除") + @RequiresPermissions("database:test_standards:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.testStandardsService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "测试标准-通过id查询") + @Operation(summary = "测试标准-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + TestStandards testStandards = testStandardsService.getById(id); + if (testStandards == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(testStandards); + } + + /** + * 导出excel + * + * @param request + * @param testStandards + */ @RequiresPermissions("database:test_standards:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, TestStandards testStandards) { @@ -163,12 +147,12 @@ public class TestStandardsController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Client.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Client.java index 6f9fa9e..4086db9 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Client.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Client.java @@ -1,65 +1,78 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 委托方 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Data @TableName("client") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="委托方") +@Schema(description = "委托方") public class Client implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**名称*/ - @Excel(name = "名称", width = 15) + /** + * 名称 + */ + @Excel(name = "名称", width = 15) @Schema(description = "名称") private String name; - /**地址*/ - @Excel(name = "地址", width = 15) + /** + * 地址 + */ + @Excel(name = "地址", width = 15) @Schema(description = "地址") private String address; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/CnasTest.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/CnasTest.java index 990999e..b4d11ff 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/CnasTest.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/CnasTest.java @@ -1,75 +1,92 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: cnas测试参数列表 * @Author: jeecg-boot - * @Date: 2024-10-23 + * @Date: 2024-10-23 * @Version: V1.0 */ @Data @TableName("cnas_test") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="cnas测试参数列表") +@Schema(description = "cnas测试参数列表") public class CnasTest implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**检测对象*/ - @Excel(name = "检测对象", width = 15) + /** + * 检测对象 + */ + @Excel(name = "检测对象", width = 15) @Schema(description = "检测对象") private String testTarget; - /**参数*/ - @Excel(name = "参数", width = 15) + /** + * 参数 + */ + @Excel(name = "参数", width = 15) @Schema(description = "参数") private String parameter; - /**检测标准*/ - @Excel(name = "检测标准", width = 15) + /** + * 检测标准 + */ + @Excel(name = "检测标准", width = 15) @Schema(description = "检测标准") private String testStandard; - /**创建时间*/ - @Excel(name = "创建时间", width = 15, format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 创建时间 + */ + @Excel(name = "创建时间", width = 15, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "创建时间") private Date time; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Component.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Component.java index 1d3a3ea..370a53d 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Component.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Component.java @@ -1,97 +1,126 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 元器件 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Data @TableName("component") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="元器件") +@Schema(description = "元器件") public class Component implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**名称*/ - @Excel(name = "名称", width = 15) + /** + * 名称 + */ + @Excel(name = "名称", width = 15) @Schema(description = "名称") private String name; - /**型号*/ - @Excel(name = "型号", width = 15) + /** + * 型号 + */ + @Excel(name = "型号", width = 15) @Schema(description = "型号") private String model; - /**特征尺寸*/ - @Excel(name = "特征尺寸", width = 15) + /** + * 特征尺寸 + */ + @Excel(name = "特征尺寸", width = 15) @Schema(description = "特征尺寸") private String size; - /**器件材料*/ - @Excel(name = "器件材料", width = 15) + /** + * 器件材料 + */ + @Excel(name = "器件材料", width = 15) @Schema(description = "器件材料") private String material; - /**器件工艺*/ - @Excel(name = "器件工艺", width = 15) + /** + * 器件工艺 + */ + @Excel(name = "器件工艺", width = 15) @Schema(description = "器件工艺") private String technology; - /**生产厂家*/ - @Excel(name = "生产厂家", width = 15) + /** + * 生产厂家 + */ + @Excel(name = "生产厂家", width = 15) @Schema(description = "生产厂家") private String manufacturer; - /**批次*/ - @Excel(name = "批次", width = 15) + /** + * 批次 + */ + @Excel(name = "批次", width = 15) @Schema(description = "批次") private String batchNo; - /**代工线*/ - @Excel(name = "代工线", width = 15) + /** + * 代工线 + */ + @Excel(name = "代工线", width = 15) @Schema(description = "代工线") private String oemLine; - /**类型*/ - @Excel(name = "类型", width = 15) + /** + * 类型 + */ + @Excel(name = "类型", width = 15) @Schema(description = "类型") private String type; - /**附件*/ - @Excel(name = "附件", width = 15) + /** + * 附件 + */ + @Excel(name = "附件", width = 15) @Schema(description = "附件") private String attachment; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentFavorites.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentFavorites.java index 4a74ba5..240d989 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentFavorites.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentFavorites.java @@ -1,65 +1,78 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 我的收藏文档 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Data @TableName("document_favorites") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="我的收藏文档") +@Schema(description = "我的收藏文档") public class DocumentFavorites implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**文档ID*/ - @Excel(name = "文档ID", width = 15) + /** + * 文档ID + */ + @Excel(name = "文档ID", width = 15) @Schema(description = "文档ID") private String documentId; - /**用户ID*/ - @Excel(name = "用户ID", width = 15) + /** + * 用户ID + */ + @Excel(name = "用户ID", width = 15) @Schema(description = "用户ID") private String userId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Equipment.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Equipment.java index d7977ca..ac24bef 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Equipment.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/Equipment.java @@ -1,81 +1,102 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 设备 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Data @TableName("equipment") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="设备") +@Schema(description = "设备") public class Equipment implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**名称*/ - @Excel(name = "名称", width = 15) + /** + * 名称 + */ + @Excel(name = "名称", width = 15) @Schema(description = "名称") private String name; - /**型号*/ - @Excel(name = "型号", width = 15) + /** + * 型号 + */ + @Excel(name = "型号", width = 15) @Schema(description = "型号") private String model; - /**出厂编号*/ - @Excel(name = "出厂编号", width = 15) + /** + * 出厂编号 + */ + @Excel(name = "出厂编号", width = 15) @Schema(description = "出厂编号") private String factoryNo; - /**管理编号*/ - @Excel(name = "管理编号", width = 15) + /** + * 管理编号 + */ + @Excel(name = "管理编号", width = 15) @Schema(description = "管理编号") private String managementNo; - /**有效期*/ - @Excel(name = "有效期", width = 15) + /** + * 有效期 + */ + @Excel(name = "有效期", width = 15) @Schema(description = "有效期") private String expireDate; - /**房间号*/ - @Excel(name = "房间号", width = 15) + /** + * 房间号 + */ + @Excel(name = "房间号", width = 15) @Schema(description = "房间号") private String roomNo; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentAnnealProcess.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentAnnealProcess.java index d8ba537..b13759e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentAnnealProcess.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentAnnealProcess.java @@ -1,109 +1,142 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 退火过程 * @Author: jeecg-boot - * @Date: 2024-10-23 + * @Date: 2024-10-23 * @Version: V1.0 */ @Data @TableName("experiment_anneal_process") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="退火过程") +@Schema(description = "退火过程") public class ExperimentAnnealProcess implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /** 辐照源*/ - @Excel(name = " 辐照源", width = 15) + /** + * 辐照源 + */ + @Excel(name = " 辐照源", width = 15) @Schema(description = " 辐照源") private String radiationSource; - /**计量率*/ - @Excel(name = "计量率", width = 15) + /** + * 计量率 + */ + @Excel(name = "计量率", width = 15) @Schema(description = "计量率") private String measurementRate; - /**辐照标准*/ - @Excel(name = "辐照标准", width = 15) + /** + * 辐照标准 + */ + @Excel(name = "辐照标准", width = 15) @Schema(description = "辐照标准") private String radiationStandard; - /**退火温度*/ - @Excel(name = "退火温度", width = 15) + /** + * 退火温度 + */ + @Excel(name = "退火温度", width = 15) @Schema(description = "退火温度") private String annealTemperature; - /**备注*/ - @Excel(name = "备注", width = 15) + /** + * 备注 + */ + @Excel(name = "备注", width = 15) @Schema(description = "备注") private String comment; - /**异常记录*/ - @Excel(name = "异常记录", width = 15) + /** + * 异常记录 + */ + @Excel(name = "异常记录", width = 15) @Schema(description = "异常记录") private String exceptionRecord; - /**辐照详情(json存储)*/ - @Excel(name = "辐照详情(json存储)", width = 15) + /** + * 辐照详情(json存储) + */ + @Excel(name = "辐照详情(json存储)", width = 15) @Schema(description = "辐照详情(json存储)") private String radiationDetail; - /**试验ID*/ - @Excel(name = "试验ID", width = 15) + /** + * 试验ID + */ + @Excel(name = "试验ID", width = 15) @Schema(description = "试验ID") private String experimentId; - /**退火开始时间*/ - @Excel(name = "退火开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 退火开始时间 + */ + @Excel(name = "退火开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "退火开始时间") private Date annealStartTime; - /**退火结束时间*/ - @Excel(name = "退火结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 退火结束时间 + */ + @Excel(name = "退火结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "退火结束时间") private Date annealEndTime; - /**偏置条件*/ - @Excel(name = "偏置条件", width = 15) + /** + * 偏置条件 + */ + @Excel(name = "偏置条件", width = 15) @Schema(description = "偏置条件(json 大字段)") private String biasCondition; - /**加偏设备*/ - @Excel(name = "加偏设备", width = 15) + /** + * 加偏设备 + */ + @Excel(name = "加偏设备", width = 15) @Schema(description = "加偏设备(json 大字段)") private String biasEquipment; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentDoc.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentDoc.java index f7cf43b..eaef392 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentDoc.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentDoc.java @@ -1,69 +1,84 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 试验文档 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Data @TableName("experiment_doc") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="试验文档") +@Schema(description = "试验文档") public class ExperimentDoc implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**试验ID*/ - @Excel(name = "试验ID", width = 15) + /** + * 试验ID + */ + @Excel(name = "试验ID", width = 15) @Schema(description = "试验ID") private String experimentId; - /**文档类型*/ - @Excel(name = "文档类型", width = 15) + /** + * 文档类型 + */ + @Excel(name = "文档类型", width = 15) @Schema(description = "文档类型") private String docType; - /**文件地址*/ - @Excel(name = "文件地址", width = 15) + /** + * 文件地址 + */ + @Excel(name = "文件地址", width = 15) @Schema(description = "文件地址") private String filePath; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentLog.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentLog.java index 5e3de2b..7c36f1d 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentLog.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentLog.java @@ -1,65 +1,78 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 试验日志 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Data @TableName("experiment_log") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="试验日志") +@Schema(description = "试验日志") public class ExperimentLog implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**试验ID*/ - @Excel(name = "试验ID", width = 15) + /** + * 试验ID + */ + @Excel(name = "试验ID", width = 15) @Schema(description = "试验ID") private String experimentId; - /**日志内容*/ - @Excel(name = "日志内容", width = 15) + /** + * 日志内容 + */ + @Excel(name = "日志内容", width = 15) @Schema(description = "日志内容") private String logContent; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentRadiationProcess.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentRadiationProcess.java index fab6514..95c97d5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentRadiationProcess.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentRadiationProcess.java @@ -1,89 +1,114 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 辐照过程 * @Author: jeecg-boot - * @Date: 2024-10-15 + * @Date: 2024-10-15 * @Version: V1.0 */ @Data @TableName("experiment_radiation_process") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="辐照过程") +@Schema(description = "辐照过程") public class ExperimentRadiationProcess implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /** 辐照源*/ - @Excel(name = " 辐照源", width = 15) + /** + * 辐照源 + */ + @Excel(name = " 辐照源", width = 15) @Schema(description = " 辐照源") private String radiationSource; - /**计量率*/ - @Excel(name = "计量率", width = 15) + /** + * 计量率 + */ + @Excel(name = "计量率", width = 15) @Schema(description = "计量率") private String measurementRate; - /**辐照标准*/ - @Excel(name = "辐照标准", width = 15) + /** + * 辐照标准 + */ + @Excel(name = "辐照标准", width = 15) @Schema(description = "辐照标准") private String radiationStandard; - /**环境温度*/ - @Excel(name = "环境温度", width = 15) + /** + * 环境温度 + */ + @Excel(name = "环境温度", width = 15) @Schema(description = "环境温度") private String environmentalTemperature; - /**备注*/ - @Excel(name = "备注", width = 15) + /** + * 备注 + */ + @Excel(name = "备注", width = 15) @Schema(description = "备注") private String comment; - /**异常记录*/ - @Excel(name = "异常记录", width = 15) + /** + * 异常记录 + */ + @Excel(name = "异常记录", width = 15) @Schema(description = "异常记录") private String exceptionRecord; - /**辐照详情(json存储)*/ - @Excel(name = "辐照详情(json存储)", width = 15) + /** + * 辐照详情(json存储) + */ + @Excel(name = "辐照详情(json存储)", width = 15) @Schema(description = "辐照详情(json存储)") private String radiationDetail; - /**试验ID*/ - @Excel(name = "试验ID", width = 15) + /** + * 试验ID + */ + @Excel(name = "试验ID", width = 15) @Schema(description = "试验ID") private String experimentId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentReview.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentReview.java new file mode 100644 index 0000000..e87b8fb --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentReview.java @@ -0,0 +1,90 @@ +package org.jeecg.modules.database.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: 试验评定 + * @Author: jeecg-boot + * @Date: 2024-11-05 + * @Version: V1.0 + */ +@Data +@TableName("experiment_review") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@Schema(description = "试验评定") +public class ExperimentReview implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description = "主键") + private String id; + /** + * 创建人 + */ + @Schema(description = "创建人") + private String createBy; + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "创建日期") + private Date createTime; + /** + * 更新人 + */ + @Schema(description = "更新人") + private String updateBy; + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "更新日期") + private Date updateTime; + /** + * 所属部门 + */ + @Schema(description = "所属部门") + private String sysOrgCode; + /** + * 实验ID + */ + @Excel(name = "实验ID", width = 15) + @Schema(description = "实验ID") + private String experimentalId; + /** + * 评审流程 + */ + @Excel(name = "评审流程", width = 15) + @Schema(description = "评审流程") + private String reviewProcess; + /** + * 评审详情(json大字段) + */ + @Excel(name = "评审详情(json大字段)", width = 15) + @Schema(description = "评审详情(json大字段)") + private String reviewDetail; + /** + * 评审结果 + */ + @Excel(name = "评审结果", width = 15) + @Schema(description = "评审结果(合格/不合格)") + private String reviewResult; +} diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentTestProcess.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentTestProcess.java index 8cb44d4..df5156b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentTestProcess.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentTestProcess.java @@ -1,133 +1,178 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 测试过程 * @Author: jeecg-boot - * @Date: 2024-10-22 + * @Date: 2024-10-22 * @Version: V1.0 */ @Data @TableName("experiment_test_process") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="测试过程") +@Schema(description = "测试过程") public class ExperimentTestProcess implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /** 辐照源*/ - @Excel(name = " 辐照源", width = 15) + /** + * 辐照源 + */ + @Excel(name = " 辐照源", width = 15) @Schema(description = " 辐照源") private String radiationSource; - /**计量率*/ - @Excel(name = "计量率", width = 15) + /** + * 计量率 + */ + @Excel(name = "计量率", width = 15) @Schema(description = "计量率") private String measurementRate; - /**辐照标准*/ - @Excel(name = "辐照标准", width = 15) + /** + * 辐照标准 + */ + @Excel(name = "辐照标准", width = 15) @Schema(description = "辐照标准") private String radiationStandard; - /**环境温度*/ - @Excel(name = "环境温度", width = 15) + /** + * 环境温度 + */ + @Excel(name = "环境温度", width = 15) @Schema(description = "环境温度") private String environmentalTemperature; - /**备注*/ - @Excel(name = "备注", width = 15) + /** + * 备注 + */ + @Excel(name = "备注", width = 15) @Schema(description = "备注") private String comment; - /**异常记录*/ - @Excel(name = "异常记录", width = 15) + /** + * 异常记录 + */ + @Excel(name = "异常记录", width = 15) @Schema(description = "异常记录") private String exceptionRecord; - /**辐照详情(json存储)*/ - @Excel(name = "辐照详情(json存储)", width = 15) + /** + * 辐照详情(json存储) + */ + @Excel(name = "辐照详情(json存储)", width = 15) @Schema(description = "辐照详情(json存储)") private String radiationDetail; - /**试验ID*/ - @Excel(name = "试验ID", width = 15) + /** + * 试验ID + */ + @Excel(name = "试验ID", width = 15) @Schema(description = "试验ID") private String experimentId; - /**测试开始时间*/ - @Excel(name = "测试开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 测试开始时间 + */ + @Excel(name = "测试开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "测试开始时间") private Date testStartTime; - /**测试结束时间*/ - @Excel(name = "测试结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 测试结束时间 + */ + @Excel(name = "测试结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "测试结束时间") private Date testEndTime; - /**环境湿度*/ - @Excel(name = "环境湿度", width = 15) + /** + * 环境湿度 + */ + @Excel(name = "环境湿度", width = 15) @Schema(description = "环境湿度") private String environmentalHumidity; - /**测试参数(json 大字段)*/ - @Excel(name = "测试参数", width = 15) + /** + * 测试参数(json 大字段) + */ + @Excel(name = "测试参数", width = 15) @Schema(description = "测试参数(json 大字段)") private String testParameters; - /**测试设备(json 大字段)*/ - @Excel(name = "测试设备", width = 15) + /** + * 测试设备(json 大字段) + */ + @Excel(name = "测试设备", width = 15) @Schema(description = "测试设备(json 大字段)") private String testEquipment; - /**测试计量点*/ - @Excel(name = "测试计量点", width = 15) + /** + * 测试计量点 + */ + @Excel(name = "测试计量点", width = 15) @Schema(description = "测试计量点") private String testMeteringPoint; - /**测试注量点*/ - @Excel(name = "测试注量点", width = 15) + /** + * 测试注量点 + */ + @Excel(name = "测试注量点", width = 15) @Schema(description = "测试注量点") private String testFluencePoint; - /**退火时长*/ - @Excel(name = "退火时长", width = 15) + /** + * 退火时长 + */ + @Excel(name = "退火时长", width = 15) @Schema(description = "退火时长") private String annealingDuration; - /**测试数据(json 大字段)*/ - @Excel(name = "测试数据", width = 15) + /** + * 测试数据(json 大字段) + */ + @Excel(name = "测试数据", width = 15) @Schema(description = "测试数据(json 大字段)") private String testData; - /**测试结果*/ - @Excel(name = "测试结果", width = 15) + /** + * 测试结果 + */ + @Excel(name = "测试结果", width = 15) @Schema(description = "测试结果") private String testResult; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentUser.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentUser.java index 892944a..98047d5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentUser.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/ExperimentUser.java @@ -1,69 +1,84 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 试验人员 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Data @TableName("experiment_user") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="试验人员") +@Schema(description = "试验人员") public class ExperimentUser implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**试验ID*/ - @Excel(name = "试验ID", width = 15) + /** + * 试验ID + */ + @Excel(name = "试验ID", width = 15) @Schema(description = "试验ID") private String experimentId; - /**人员*/ - @Excel(name = "人员", width = 15) + /** + * 人员 + */ + @Excel(name = "人员", width = 15) @Schema(description = "人员") private String userId; - /**类型*/ - @Excel(name = "类型", width = 15) + /** + * 类型 + */ + @Excel(name = "类型", width = 15) @Schema(description = "类型") private String type; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/IrradiationStandards.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/IrradiationStandards.java index 2ea74d2..e3a9626 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/IrradiationStandards.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/IrradiationStandards.java @@ -1,73 +1,90 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 辐照标准 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Data @TableName("irradiation_standards") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="辐照标准") +@Schema(description = "辐照标准") public class IrradiationStandards implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**标准名称*/ - @Excel(name = "标准名称", width = 15) + /** + * 标准名称 + */ + @Excel(name = "标准名称", width = 15) @Schema(description = "标准名称") private String name; - /**标准代码*/ - @Excel(name = "标准代码", width = 15) + /** + * 标准代码 + */ + @Excel(name = "标准代码", width = 15) @Schema(description = "标准代码") private String code; - /**内容*/ - @Excel(name = "内容", width = 15) + /** + * 内容 + */ + @Excel(name = "内容", width = 15) @Schema(description = "内容") private String content; - /**附件*/ - @Excel(name = "附件", width = 15) + /** + * 附件 + */ + @Excel(name = "附件", width = 15) @Schema(description = "附件") private String attachment; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/MigrationDataRecord.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/MigrationDataRecord.java index 10549e5..561b540 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/MigrationDataRecord.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/MigrationDataRecord.java @@ -1,85 +1,108 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 迁移数据管理 * @Author: jeecg-boot - * @Date: 2024-11-04 + * @Date: 2024-11-04 * @Version: V1.0 */ @Data @TableName("migration_data_record") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="迁移数据管理") +@Schema(description = "迁移数据管理") public class MigrationDataRecord implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**试验类型*/ - @Excel(name = "试验类型", width = 15) + /** + * 试验类型 + */ + @Excel(name = "试验类型", width = 15) @Schema(description = "试验类型") private String type; - /**试验名称*/ - @Excel(name = "试验名称", width = 15) + /** + * 试验名称 + */ + @Excel(name = "试验名称", width = 15) @Schema(description = "试验名称") private String name; - /**委托方*/ - @Excel(name = "委托方", width = 15) + /** + * 委托方 + */ + @Excel(name = "委托方", width = 15) @Schema(description = "委托方") private String client; - /**生产厂家*/ - @Excel(name = "生产厂家", width = 15) + /** + * 生产厂家 + */ + @Excel(name = "生产厂家", width = 15) @Schema(description = "生产厂家") private String manufacturer; - /**试验时间*/ - @Excel(name = "试验时间", width = 15) + /** + * 试验时间 + */ + @Excel(name = "试验时间", width = 15) @Schema(description = "试验时间") private String experimentDate; - /**试验人员*/ - @Excel(name = "试验人员", width = 15) + /** + * 试验人员 + */ + @Excel(name = "试验人员", width = 15) @Schema(description = "试验人员") private String experimentUser; - /**实验详情(大字段)*/ - @Excel(name = "实验详情(大字段)", width = 15) + /** + * 实验详情(大字段) + */ + @Excel(name = "实验详情(大字段)", width = 15) @Schema(description = "实验详情(大字段)") private String experimentDetail; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/NasaDataRecord.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/NasaDataRecord.java index 54fbc57..a435c6c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/NasaDataRecord.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/NasaDataRecord.java @@ -1,101 +1,132 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: NASA数据管理 * @Author: jeecg-boot - * @Date: 2024-11-04 + * @Date: 2024-11-04 * @Version: V1.0 */ @Data @TableName("nasa_data_record") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="NASA数据管理") +@Schema(description = "NASA数据管理") public class NasaDataRecord implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**器件类型*/ - @Excel(name = "器件类型", width = 15) + /** + * 器件类型 + */ + @Excel(name = "器件类型", width = 15) @Schema(description = "器件类型") private String deviceType; - /**器件名称*/ - @Excel(name = "器件名称", width = 15) + /** + * 器件名称 + */ + @Excel(name = "器件名称", width = 15) @Schema(description = "器件名称") private String deviceName; - /**器件型号*/ - @Excel(name = "器件型号", width = 15) + /** + * 器件型号 + */ + @Excel(name = "器件型号", width = 15) @Schema(description = "器件型号") private String deviceMode; - /**器件功能*/ - @Excel(name = "器件功能", width = 15) + /** + * 器件功能 + */ + @Excel(name = "器件功能", width = 15) @Schema(description = "器件功能") private String deviceFunction; - /**器件批次*/ - @Excel(name = "器件批次", width = 15) + /** + * 器件批次 + */ + @Excel(name = "器件批次", width = 15) @Schema(description = "器件批次") private String deviceBatch; - /**生产厂家*/ - @Excel(name = "生产厂家", width = 15) + /** + * 生产厂家 + */ + @Excel(name = "生产厂家", width = 15) @Schema(description = "生产厂家") private String manufacturer; - /**试验时间*/ - @Excel(name = "试验时间", width = 15) + /** + * 试验时间 + */ + @Excel(name = "试验时间", width = 15) @Schema(description = "试验时间") private String experimentDate; - /**数据来源*/ - @Excel(name = "数据来源", width = 15) + /** + * 数据来源 + */ + @Excel(name = "数据来源", width = 15) @Schema(description = "数据来源") private String dataSource; - /**试验人员*/ - @Excel(name = "试验人员", width = 15) + /** + * 试验人员 + */ + @Excel(name = "试验人员", width = 15) @Schema(description = "试验人员") private String experimentUser; - /**条目数统计*/ - @Excel(name = "条目数统计", width = 15) + /** + * 条目数统计 + */ + @Excel(name = "条目数统计", width = 15) @Schema(description = "条目数统计") private String totalCount; - /**附件IDs*/ - @Excel(name = "附件IDs", width = 15) + /** + * 附件IDs + */ + @Excel(name = "附件IDs", width = 15) @Schema(description = "附件IDs") private String fileList; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/RadiateType.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/RadiateType.java index 7adaccd..5788878 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/RadiateType.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/RadiateType.java @@ -1,81 +1,102 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 辐射源类型 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Data @TableName("radiate_type") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="辐射源类型") +@Schema(description = "辐射源类型") public class RadiateType implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**名称*/ - @Excel(name = "名称", width = 15) + /** + * 名称 + */ + @Excel(name = "名称", width = 15) @Schema(description = "名称") private String name; - /**型号*/ - @Excel(name = "型号", width = 15) + /** + * 型号 + */ + @Excel(name = "型号", width = 15) @Schema(description = "型号") private String model; - /**管理编号*/ - @Excel(name = "管理编号", width = 15) + /** + * 管理编号 + */ + @Excel(name = "管理编号", width = 15) @Schema(description = "管理编号") private String managementNo; - /**有效期*/ - @Excel(name = "有效期", width = 15) + /** + * 有效期 + */ + @Excel(name = "有效期", width = 15) @Schema(description = "有效期") private String expireDate; - /**房间号*/ - @Excel(name = "房间号", width = 15) + /** + * 房间号 + */ + @Excel(name = "房间号", width = 15) @Schema(description = "房间号") private String roomNo; - /**附件*/ - @Excel(name = "附件", width = 15) + /** + * 附件 + */ + @Excel(name = "附件", width = 15) @Schema(description = "附件") private String attachment; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/TestStandards.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/TestStandards.java index 478785d..0d91b4c 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/TestStandards.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/TestStandards.java @@ -1,73 +1,90 @@ package org.jeecg.modules.database.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.util.Date; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableLogic; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.jeecg.common.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @Description: 测试标准 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Data @TableName("test_standards") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="测试标准") +@Schema(description = "测试标准") public class TestStandards implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; - /**所属部门*/ + /** + * 所属部门 + */ @Schema(description = "所属部门") private String sysOrgCode; - /**标准名称*/ - @Excel(name = "标准名称", width = 15) + /** + * 标准名称 + */ + @Excel(name = "标准名称", width = 15) @Schema(description = "标准名称") private String name; - /**标准代码*/ - @Excel(name = "标准代码", width = 15) + /** + * 标准代码 + */ + @Excel(name = "标准代码", width = 15) @Schema(description = "标准代码") private String code; - /**内容*/ - @Excel(name = "内容", width = 15) + /** + * 内容 + */ + @Excel(name = "内容", width = 15) @Schema(description = "内容") private String content; - /**附件*/ - @Excel(name = "附件", width = 15) + /** + * 附件 + */ + @Excel(name = "附件", width = 15) @Schema(description = "附件") private String attachment; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ClientMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ClientMapper.java index 5c5735c..e9e395c 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ClientMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ClientMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.Client; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.Client; /** * @Description: 委托方 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface ClientMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/CnasTestMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/CnasTestMapper.java index eb1ae2d..b84d607 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/CnasTestMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/CnasTestMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.CnasTest; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.CnasTest; /** * @Description: cnas测试参数列表 * @Author: jeecg-boot - * @Date: 2024-10-23 + * @Date: 2024-10-23 * @Version: V1.0 */ public interface CnasTestMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ComponentMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ComponentMapper.java index c27d923..87a41ea 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ComponentMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ComponentMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.Component; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.Component; /** * @Description: 元器件 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface ComponentMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentFavoritesMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentFavoritesMapper.java index a8aef96..2461582 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentFavoritesMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentFavoritesMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.DocumentFavorites; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.DocumentFavorites; /** * @Description: 我的收藏文档 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface DocumentFavoritesMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentLibraryMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentLibraryMapper.java index a07d575..f15f9fc 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentLibraryMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentLibraryMapper.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.mapper; -import org.jeecg.modules.database.entity.DocumentLibrary; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.DocumentLibrary; /** * @Description: 知识库 * @Author: jeecg-boot - * @Date: 2024-08-21 + * @Date: 2024-08-21 * @Version: V1.0 */ public interface DocumentLibraryMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/EquipmentMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/EquipmentMapper.java index ede8021..a43f4b0 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/EquipmentMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/EquipmentMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.Equipment; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.Equipment; /** * @Description: 设备 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface EquipmentMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentAnnealProcessMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentAnnealProcessMapper.java index e64a3ed..412c3a0 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentAnnealProcessMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentAnnealProcessMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.ExperimentAnnealProcess; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.ExperimentAnnealProcess; /** * @Description: 退火过程 * @Author: jeecg-boot - * @Date: 2024-10-21 + * @Date: 2024-10-21 * @Version: V1.0 */ public interface ExperimentAnnealProcessMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentDocMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentDocMapper.java index 84f7750..5a683e8 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentDocMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentDocMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.ExperimentDoc; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.ExperimentDoc; /** * @Description: 试验文档 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface ExperimentDocMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentLogMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentLogMapper.java index 20aa1b2..d090c3e 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentLogMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentLogMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.ExperimentLog; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.ExperimentLog; /** * @Description: 试验日志 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface ExperimentLogMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentMapper.java index 4e6215e..ceea9b3 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.Experiment; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.Experiment; /** * @Description: 试验管理 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface ExperimentMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentRadiationProcessMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentRadiationProcessMapper.java index b5504da..11dfcb9 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentRadiationProcessMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentRadiationProcessMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.ExperimentRadiationProcess; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.ExperimentRadiationProcess; /** * @Description: 辐照过程 * @Author: jeecg-boot - * @Date: 2024-10-15 + * @Date: 2024-10-15 * @Version: V1.0 */ public interface ExperimentRadiationProcessMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentReportMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentReportMapper.java index 256bae3..0b84b54 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentReportMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentReportMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.ExperimentReport; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.ExperimentReport; /** * @Description: 试验报告 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface ExperimentReportMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentReviewMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentReviewMapper.java new file mode 100644 index 0000000..fbb6454 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentReviewMapper.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.database.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.ExperimentReview; + +/** + * @Description: 试验评定 + * @Author: jeecg-boot + * @Date: 2024-11-05 + * @Version: V1.0 + */ +public interface ExperimentReviewMapper extends BaseMapper { + +} diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentTestProcessMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentTestProcessMapper.java index f6bb0ba..262312b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentTestProcessMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentTestProcessMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.ExperimentTestProcess; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.ExperimentTestProcess; /** * @Description: 测试过程 * @Author: jeecg-boot - * @Date: 2024-10-15 + * @Date: 2024-10-15 * @Version: V1.0 */ public interface ExperimentTestProcessMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentUserMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentUserMapper.java index 81d07fd..8ae05cb 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentUserMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/ExperimentUserMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.ExperimentUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.ExperimentUser; /** * @Description: 试验人员 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface ExperimentUserMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/IrradiationStandardsMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/IrradiationStandardsMapper.java index 5fa807f..5eca921 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/IrradiationStandardsMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/IrradiationStandardsMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.IrradiationStandards; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.IrradiationStandards; /** * @Description: 辐照标准 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IrradiationStandardsMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/MigrationDataRecordMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/MigrationDataRecordMapper.java index ef70358..5720850 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/MigrationDataRecordMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/MigrationDataRecordMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.MigrationDataRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.MigrationDataRecord; /** * @Description: 迁移数据管理 * @Author: jeecg-boot - * @Date: 2024-11-04 + * @Date: 2024-11-04 * @Version: V1.0 */ public interface MigrationDataRecordMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/NasaDataRecordMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/NasaDataRecordMapper.java index 6c2facd..3669fdd 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/NasaDataRecordMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/NasaDataRecordMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.NasaDataRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.NasaDataRecord; /** * @Description: NASA数据管理 * @Author: jeecg-boot - * @Date: 2024-11-04 + * @Date: 2024-11-04 * @Version: V1.0 */ public interface NasaDataRecordMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/RadiateTypeMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/RadiateTypeMapper.java index 79584ed..7331c59 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/RadiateTypeMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/RadiateTypeMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.RadiateType; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.RadiateType; /** * @Description: 辐射源类型 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface RadiateTypeMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/TestStandardsMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/TestStandardsMapper.java index f5b07e0..1954ec8 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/TestStandardsMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/TestStandardsMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.database.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.database.entity.TestStandards; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.database.entity.TestStandards; /** * @Description: 测试标准 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface TestStandardsMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/xml/ExperimentReviewMapper.xml b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/xml/ExperimentReviewMapper.xml new file mode 100644 index 0000000..5b7776d --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/xml/ExperimentReviewMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IClientService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IClientService.java index 4185af0..ddc4905 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IClientService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IClientService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.Client; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.Client; /** * @Description: 委托方 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IClientService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/ICnasTestService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/ICnasTestService.java index 2d702da..be5241f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/ICnasTestService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/ICnasTestService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.CnasTest; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.CnasTest; /** * @Description: cnas测试参数列表 * @Author: jeecg-boot - * @Date: 2024-10-23 + * @Date: 2024-10-23 * @Version: V1.0 */ public interface ICnasTestService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IComponentService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IComponentService.java index 171a67f..35ea534 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IComponentService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IComponentService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.Component; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.Component; /** * @Description: 元器件 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IComponentService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IDocumentFavoritesService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IDocumentFavoritesService.java index 98bff48..22e422e 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IDocumentFavoritesService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IDocumentFavoritesService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.DocumentFavorites; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.DocumentFavorites; /** * @Description: 我的收藏文档 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IDocumentFavoritesService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IEquipmentService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IEquipmentService.java index 633e530..539db49 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IEquipmentService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IEquipmentService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.Equipment; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.Equipment; /** * @Description: 设备 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IEquipmentService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentAnnealProcessService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentAnnealProcessService.java index a5e5d83..f09a89a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentAnnealProcessService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentAnnealProcessService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.ExperimentAnnealProcess; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.ExperimentAnnealProcess; /** * @Description: 退火过程 * @Author: jeecg-boot - * @Date: 2024-10-21 + * @Date: 2024-10-21 * @Version: V1.0 */ public interface IExperimentAnnealProcessService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentDocService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentDocService.java index 7dbae89..5f392f1 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentDocService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentDocService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.ExperimentDoc; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.ExperimentDoc; /** * @Description: 试验文档 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IExperimentDocService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentLogService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentLogService.java index 374ed46..6c427ea 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentLogService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentLogService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.ExperimentLog; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.ExperimentLog; /** * @Description: 试验日志 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IExperimentLogService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentRadiationProcessService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentRadiationProcessService.java index e51e0b4..0c4cac3 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentRadiationProcessService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentRadiationProcessService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.ExperimentRadiationProcess; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.ExperimentRadiationProcess; /** * @Description: 辐照过程 * @Author: jeecg-boot - * @Date: 2024-10-15 + * @Date: 2024-10-15 * @Version: V1.0 */ public interface IExperimentRadiationProcessService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentReportService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentReportService.java index 98466d3..2434382 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentReportService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentReportService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.ExperimentReport; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.ExperimentReport; /** * @Description: 试验报告 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IExperimentReportService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentReviewService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentReviewService.java new file mode 100644 index 0000000..7d53e57 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentReviewService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.database.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.ExperimentReview; + +/** + * @Description: 试验评定 + * @Author: jeecg-boot + * @Date: 2024-11-05 + * @Version: V1.0 + */ +public interface IExperimentReviewService extends IService { + +} diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentService.java index 802a87c..6401f2d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.Experiment; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.Experiment; /** * @Description: 试验管理 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IExperimentService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentTestProcessService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentTestProcessService.java index 8cf1cb8..e42ba66 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentTestProcessService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentTestProcessService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.ExperimentTestProcess; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.ExperimentTestProcess; /** * @Description: 测试过程 * @Author: jeecg-boot - * @Date: 2024-10-15 + * @Date: 2024-10-15 * @Version: V1.0 */ public interface IExperimentTestProcessService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentUserService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentUserService.java index 8397c6f..e102cf1 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentUserService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IExperimentUserService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.ExperimentUser; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.ExperimentUser; /** * @Description: 试验人员 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IExperimentUserService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IIrradiationStandardsService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IIrradiationStandardsService.java index 0ca96a9..6f73ba3 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IIrradiationStandardsService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IIrradiationStandardsService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.IrradiationStandards; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.IrradiationStandards; /** * @Description: 辐照标准 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IIrradiationStandardsService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IMigrationDataRecordService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IMigrationDataRecordService.java index a143328..89d96f2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IMigrationDataRecordService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IMigrationDataRecordService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.MigrationDataRecord; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.MigrationDataRecord; /** * @Description: 迁移数据管理 * @Author: jeecg-boot - * @Date: 2024-11-04 + * @Date: 2024-11-04 * @Version: V1.0 */ public interface IMigrationDataRecordService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/INasaDataRecordService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/INasaDataRecordService.java index 820c781..e8c3412 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/INasaDataRecordService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/INasaDataRecordService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.NasaDataRecord; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.NasaDataRecord; /** * @Description: NASA数据管理 * @Author: jeecg-boot - * @Date: 2024-11-04 + * @Date: 2024-11-04 * @Version: V1.0 */ public interface INasaDataRecordService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IRadiateTypeService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IRadiateTypeService.java index 97b4df0..19400ab 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IRadiateTypeService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IRadiateTypeService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.RadiateType; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.RadiateType; /** * @Description: 辐射源类型 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface IRadiateTypeService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/ITestStandardsService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/ITestStandardsService.java index 9fbde88..a6a0dc5 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/ITestStandardsService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/ITestStandardsService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.database.service; -import org.jeecg.modules.database.entity.TestStandards; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.database.entity.TestStandards; /** * @Description: 测试标准 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ public interface ITestStandardsService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ClientServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ClientServiceImpl.java index c2a7e44..15f4dcd 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ClientServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ClientServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.Client; import org.jeecg.modules.database.mapper.ClientMapper; import org.jeecg.modules.database.service.IClientService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 委托方 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/CnasTestServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/CnasTestServiceImpl.java index 50bde12..2463e74 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/CnasTestServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/CnasTestServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.CnasTest; import org.jeecg.modules.database.mapper.CnasTestMapper; import org.jeecg.modules.database.service.ICnasTestService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: cnas测试参数列表 * @Author: jeecg-boot - * @Date: 2024-10-23 + * @Date: 2024-10-23 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ComponentServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ComponentServiceImpl.java index c114dad..cecc669 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ComponentServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ComponentServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.Component; import org.jeecg.modules.database.mapper.ComponentMapper; import org.jeecg.modules.database.service.IComponentService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 元器件 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentFavoritesServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentFavoritesServiceImpl.java index 36be39c..8eda65a 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentFavoritesServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentFavoritesServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.DocumentFavorites; import org.jeecg.modules.database.mapper.DocumentFavoritesMapper; import org.jeecg.modules.database.service.IDocumentFavoritesService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 我的收藏文档 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentLibraryServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentLibraryServiceImpl.java index 23e941b..2a6fe87 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentLibraryServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentLibraryServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.DocumentLibrary; import org.jeecg.modules.database.mapper.DocumentLibraryMapper; import org.jeecg.modules.database.service.IDocumentLibraryService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 知识库 * @Author: jeecg-boot - * @Date: 2024-08-21 + * @Date: 2024-08-21 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/EquipmentServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/EquipmentServiceImpl.java index c52d5de..63e57da 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/EquipmentServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/EquipmentServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.Equipment; import org.jeecg.modules.database.mapper.EquipmentMapper; import org.jeecg.modules.database.service.IEquipmentService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 设备 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentAnnealProcessServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentAnnealProcessServiceImpl.java index 36024ac..923ba5e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentAnnealProcessServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentAnnealProcessServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.ExperimentAnnealProcess; import org.jeecg.modules.database.mapper.ExperimentAnnealProcessMapper; import org.jeecg.modules.database.service.IExperimentAnnealProcessService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 退火过程 * @Author: jeecg-boot - * @Date: 2024-10-21 + * @Date: 2024-10-21 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentLogServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentLogServiceImpl.java index 8ba9217..8e00543 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentLogServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentLogServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.ExperimentLog; import org.jeecg.modules.database.mapper.ExperimentLogMapper; import org.jeecg.modules.database.service.IExperimentLogService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 试验日志 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentRadiationProcessServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentRadiationProcessServiceImpl.java index 90bb49c..ac95eea 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentRadiationProcessServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentRadiationProcessServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.ExperimentRadiationProcess; import org.jeecg.modules.database.mapper.ExperimentRadiationProcessMapper; import org.jeecg.modules.database.service.IExperimentRadiationProcessService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 辐照过程 * @Author: jeecg-boot - * @Date: 2024-10-15 + * @Date: 2024-10-15 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentReportServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentReportServiceImpl.java index c1d6899..2c72729 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentReportServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentReportServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.ExperimentReport; import org.jeecg.modules.database.mapper.ExperimentReportMapper; import org.jeecg.modules.database.service.IExperimentReportService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 试验报告 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentReviewServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentReviewServiceImpl.java new file mode 100644 index 0000000..3671573 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentReviewServiceImpl.java @@ -0,0 +1,18 @@ +package org.jeecg.modules.database.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.modules.database.entity.ExperimentReview; +import org.jeecg.modules.database.mapper.ExperimentReviewMapper; +import org.jeecg.modules.database.service.IExperimentReviewService; +import org.springframework.stereotype.Service; + +/** + * @Description: 试验评定 + * @Author: jeecg-boot + * @Date: 2024-11-05 + * @Version: V1.0 + */ +@Service +public class ExperimentReviewServiceImpl extends ServiceImpl implements IExperimentReviewService { + +} diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentServiceImpl.java index ad5e07c..28ad04b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.Experiment; import org.jeecg.modules.database.mapper.ExperimentMapper; import org.jeecg.modules.database.service.IExperimentService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 试验管理 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentTestProcessServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentTestProcessServiceImpl.java index e496a73..23ee49e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentTestProcessServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentTestProcessServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.ExperimentTestProcess; import org.jeecg.modules.database.mapper.ExperimentTestProcessMapper; import org.jeecg.modules.database.service.IExperimentTestProcessService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 测试过程 * @Author: jeecg-boot - * @Date: 2024-10-15 + * @Date: 2024-10-15 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentUserServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentUserServiceImpl.java index 4eb4c8a..f680b29 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentUserServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/ExperimentUserServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.ExperimentUser; import org.jeecg.modules.database.mapper.ExperimentUserMapper; import org.jeecg.modules.database.service.IExperimentUserService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 试验人员 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/IrradiationStandardsServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/IrradiationStandardsServiceImpl.java index da95303..41dca20 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/IrradiationStandardsServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/IrradiationStandardsServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.IrradiationStandards; import org.jeecg.modules.database.mapper.IrradiationStandardsMapper; import org.jeecg.modules.database.service.IIrradiationStandardsService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 辐照标准 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/MigrationDataRecordServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/MigrationDataRecordServiceImpl.java index 6107bbc..60cb431 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/MigrationDataRecordServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/MigrationDataRecordServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.MigrationDataRecord; import org.jeecg.modules.database.mapper.MigrationDataRecordMapper; import org.jeecg.modules.database.service.IMigrationDataRecordService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 迁移数据管理 * @Author: jeecg-boot - * @Date: 2024-11-04 + * @Date: 2024-11-04 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/NasaDataRecordServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/NasaDataRecordServiceImpl.java index 9884d89..cda1d2f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/NasaDataRecordServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/NasaDataRecordServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.NasaDataRecord; import org.jeecg.modules.database.mapper.NasaDataRecordMapper; import org.jeecg.modules.database.service.INasaDataRecordService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: NASA数据管理 * @Author: jeecg-boot - * @Date: 2024-11-04 + * @Date: 2024-11-04 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/RadiateTypeServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/RadiateTypeServiceImpl.java index 0f0e172..bb1dd09 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/RadiateTypeServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/RadiateTypeServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.RadiateType; import org.jeecg.modules.database.mapper.RadiateTypeMapper; import org.jeecg.modules.database.service.IRadiateTypeService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 辐射源类型 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/TestStandardsServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/TestStandardsServiceImpl.java index d1c66fd..1707e9a 100755 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/TestStandardsServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/TestStandardsServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.database.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.database.entity.TestStandards; import org.jeecg.modules.database.mapper.TestStandardsMapper; import org.jeecg.modules.database.service.ITestStandardsService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 测试标准 * @Author: jeecg-boot - * @Date: 2024-08-30 + * @Date: 2024-08-30 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/uniapp/ExperimentReviewForm.vue b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/uniapp/ExperimentReviewForm.vue new file mode 100644 index 0000000..e1b1a92 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/uniapp/ExperimentReviewForm.vue @@ -0,0 +1,101 @@ + + + diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/uniapp/ExperimentReviewList.vue b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/uniapp/ExperimentReviewList.vue new file mode 100644 index 0000000..09a2791 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/uniapp/ExperimentReviewList.vue @@ -0,0 +1,44 @@ + + + + diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/ExperimentReview.api.ts b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/ExperimentReview.api.ts new file mode 100644 index 0000000..3d7e823 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/ExperimentReview.api.ts @@ -0,0 +1,64 @@ +import {defHttp} from '/@/utils/http/axios'; +import { useMessage } from "/@/hooks/web/useMessage"; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/database/experimentReview/list', + save='/database/experimentReview/add', + edit='/database/experimentReview/edit', + deleteOne = '/database/experimentReview/delete', + deleteBatch = '/database/experimentReview/deleteBatch', + importExcel = '/database/experimentReview/importExcel', + exportXls = '/database/experimentReview/exportXls', +} +/** + * 导出api + * @param params + */ +export const getExportUrl = Api.exportXls; +/** + * 导入api + */ +export const getImportUrl = Api.importExcel; +/** + * 列表接口 + * @param params + */ +export const list = (params) => + defHttp.get({url: Api.list, params}); + +/** + * 删除单个 + */ +export const deleteOne = (params,handleSuccess) => { + return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); +} +/** + * 批量删除 + * @param params + */ +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => { + handleSuccess(); + }); + } + }); +} +/** + * 保存或者更新 + * @param params + */ +export const saveOrUpdate = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({url: url, params}); +} diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/ExperimentReview.data.ts b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/ExperimentReview.data.ts new file mode 100644 index 0000000..1805569 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/ExperimentReview.data.ts @@ -0,0 +1,78 @@ +import {BasicColumn} from '/@/components/Table'; +import {FormSchema} from '/@/components/Table'; +import { rules} from '/@/utils/helper/validator'; +import { render } from '/@/utils/common/renderUtils'; +import { getWeekMonthQuarterYear } from '/@/utils'; +//列表数据 +export const columns: BasicColumn[] = [ + { + title: '实验ID', + align:"center", + dataIndex: 'experimentalId' + }, + { + title: '评审流程', + align:"center", + dataIndex: 'reviewProcess' + }, + { + title: '评审详情(json大字段)', + align:"center", + dataIndex: 'reviewDetail' + }, + { + title: '评审结果', + align:"center", + dataIndex: 'reviewResult' + }, +]; +//查询数据 +export const searchFormSchema: FormSchema[] = [ +]; +//表单数据 +export const formSchema: FormSchema[] = [ + { + label: '实验ID', + field: 'experimentalId', + component: 'Input', + }, + { + label: '评审流程', + field: 'reviewProcess', + component: 'Input', + }, + { + label: '评审详情(json大字段)', + field: 'reviewDetail', + component: 'Input', + }, + { + label: '评审结果', + field: 'reviewResult', + component: 'Input', + }, + // TODO 主键隐藏字段,目前写死为ID + { + label: '', + field: 'id', + component: 'Input', + show: false + }, +]; + +// 高级查询数据 +export const superQuerySchema = { + experimentalId: {title: '实验ID',order: 0,view: 'text', type: 'string',}, + reviewProcess: {title: '评审流程',order: 1,view: 'text', type: 'string',}, + reviewDetail: {title: '评审详情(json大字段)',order: 2,view: 'text', type: 'string',}, + reviewResult: {title: '评审结果',order: 3,view: 'text', type: 'string',}, +}; + +/** +* 流程表单调用这个方法获取formSchema +* @param param +*/ +export function getBpmFormSchema(_formData): FormSchema[]{ + // 默认和原始表单保持一致 如果流程中配置了权限数据,这里需要单独处理formSchema + return formSchema; +} \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/ExperimentReviewList.vue b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/ExperimentReviewList.vue new file mode 100644 index 0000000..445677f --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/ExperimentReviewList.vue @@ -0,0 +1,188 @@ + + + + + \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/V20241105_1__menu_insert_ExperimentReview.sql b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/V20241105_1__menu_insert_ExperimentReview.sql new file mode 100644 index 0000000..ed391d5 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/V20241105_1__menu_insert_ExperimentReview.sql @@ -0,0 +1,26 @@ +-- 注意:该页面对应的前台目录为views/database文件夹下 +-- 如果你想更改到其他目录,请修改sql中component字段对应的值 + + +INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external) +VALUES ('2024110502579840310', NULL, '试验评定', '/database/experimentReviewList', 'database/ExperimentReviewList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 0, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2024-11-05 02:57:31', NULL, NULL, 0); + +-- 权限控制sql +-- 新增 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110502579850311', '2024110502579840310', '添加试验评定', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_review:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-05 02:57:31', NULL, NULL, 0, 0, '1', 0); +-- 编辑 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110502579850312', '2024110502579840310', '编辑试验评定', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_review:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-05 02:57:31', NULL, NULL, 0, 0, '1', 0); +-- 删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110502579850313', '2024110502579840310', '删除试验评定', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_review:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-05 02:57:31', NULL, NULL, 0, 0, '1', 0); +-- 批量删除 +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110502579850314', '2024110502579840310', '批量删除试验评定', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_review:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-05 02:57:31', NULL, NULL, 0, 0, '1', 0); +-- 导出excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110502579850315', '2024110502579840310', '导出excel_试验评定', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_review:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-05 02:57:31', NULL, NULL, 0, 0, '1', 0); +-- 导入excel +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) +VALUES ('2024110502579850316', '2024110502579840310', '导入excel_试验评定', NULL, NULL, 0, NULL, NULL, 2, 'database:experiment_review:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2024-11-05 02:57:31', NULL, NULL, 0, 0, '1', 0); \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/components/ExperimentReviewForm.vue b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/components/ExperimentReviewForm.vue new file mode 100644 index 0000000..d147df4 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/components/ExperimentReviewForm.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/components/ExperimentReviewModal.vue b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/components/ExperimentReviewModal.vue new file mode 100644 index 0000000..8165d09 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/vue3/components/ExperimentReviewModal.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/SysMessageController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/SysMessageController.java index 87d53a4..ae18fc8 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/SysMessageController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/SysMessageController.java @@ -1,31 +1,21 @@ package org.jeecg.modules.message.controller; -import java.util.Arrays; - +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.message.entity.SysMessage; import org.jeecg.modules.message.service.ISysMessageService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import lombok.extern.slf4j.Slf4j; +import java.util.Arrays; /** * @Description: 消息 @@ -37,109 +27,109 @@ import lombok.extern.slf4j.Slf4j; @RestController @RequestMapping("/sys/message/sysMessage") public class SysMessageController extends JeecgController { - @Autowired - private ISysMessageService sysMessageService; + @Autowired + private ISysMessageService sysMessageService; - /** - * 分页列表查询 - * - * @param sysMessage - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @GetMapping(value = "/list") - public Result queryPageList(SysMessage sysMessage, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysMessage, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = sysMessageService.page(page, queryWrapper); + /** + * 分页列表查询 + * + * @param sysMessage + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/list") + public Result queryPageList(SysMessage sysMessage, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysMessage, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysMessageService.page(page, queryWrapper); return Result.ok(pageList); - } + } - /** - * 添加 - * - * @param sysMessage - * @return - */ - @PostMapping(value = "/add") - public Result add(@RequestBody SysMessage sysMessage) { - sysMessageService.save(sysMessage); - return Result.ok("添加成功!"); - } + /** + * 添加 + * + * @param sysMessage + * @return + */ + @PostMapping(value = "/add") + public Result add(@RequestBody SysMessage sysMessage) { + sysMessageService.save(sysMessage); + return Result.ok("添加成功!"); + } - /** - * 编辑 - * - * @param sysMessage - * @return - */ - @PutMapping(value = "/edit") - public Result edit(@RequestBody SysMessage sysMessage) { - sysMessageService.updateById(sysMessage); + /** + * 编辑 + * + * @param sysMessage + * @return + */ + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysMessage sysMessage) { + sysMessageService.updateById(sysMessage); return Result.ok("修改成功!"); - } + } - /** - * 通过id删除 - * - * @param id - * @return - */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name = "id", required = true) String id) { - sysMessageService.removeById(id); + /** + * 通过id删除 + * + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + sysMessageService.removeById(id); return Result.ok("删除成功!"); - } + } - /** - * 批量删除 - * - * @param ids - * @return - */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + /** + * 批量删除 + * + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { - this.sysMessageService.removeByIds(Arrays.asList(ids.split(","))); - return Result.ok("批量删除成功!"); - } + this.sysMessageService.removeByIds(Arrays.asList(ids.split(","))); + return Result.ok("批量删除成功!"); + } - /** - * 通过id查询 - * - * @param id - * @return - */ - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name = "id", required = true) String id) { - SysMessage sysMessage = sysMessageService.getById(id); - return Result.ok(sysMessage); - } + /** + * 通过id查询 + * + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SysMessage sysMessage = sysMessageService.getById(id); + return Result.ok(sysMessage); + } - /** - * 导出excel - * - * @param request - */ - @GetMapping(value = "/exportXls") - public ModelAndView exportXls(HttpServletRequest request, SysMessage sysMessage) { - return super.exportXls(request,sysMessage,SysMessage.class, "推送消息模板"); - } + /** + * 导出excel + * + * @param request + */ + @GetMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysMessage sysMessage) { + return super.exportXls(request, sysMessage, SysMessage.class, "推送消息模板"); + } - /** - * excel导入 - * - * @param request - * @param response - * @return - */ - @PostMapping(value = "/importExcel") - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { - return super.importExcel(request, response, SysMessage.class); - } + /** + * excel导入 + * + * @param request + * @param response + * @return + */ + @PostMapping(value = "/importExcel") + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysMessage.class); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/SysMessageTemplateController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/SysMessageTemplateController.java index 8cba0ba..687eaf8 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/SysMessageTemplateController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/SysMessageTemplateController.java @@ -1,11 +1,12 @@ package org.jeecg.modules.message.controller; -import java.util.Arrays; -import java.util.Map; - +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.api.ISysBaseAPI; @@ -17,22 +18,11 @@ import org.jeecg.modules.message.entity.SysMessageTemplate; import org.jeecg.modules.message.service.ISysMessageTemplateService; import org.jeecg.modules.message.util.PushMsgUtil; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import lombok.extern.slf4j.Slf4j; +import java.util.Arrays; +import java.util.Map; /** * @Description: 消息模板 @@ -44,137 +34,137 @@ import lombok.extern.slf4j.Slf4j; @RestController @RequestMapping("/sys/message/sysMessageTemplate") public class SysMessageTemplateController extends JeecgController { - @Autowired - private ISysMessageTemplateService sysMessageTemplateService; - @Autowired - private PushMsgUtil pushMsgUtil; + @Autowired + private ISysMessageTemplateService sysMessageTemplateService; + @Autowired + private PushMsgUtil pushMsgUtil; - @Autowired - private ISysBaseAPI sysBaseApi; + @Autowired + private ISysBaseAPI sysBaseApi; - /** - * 分页列表查询 - * - * @param sysMessageTemplate - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @GetMapping(value = "/list") - public Result queryPageList(SysMessageTemplate sysMessageTemplate, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysMessageTemplate, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = sysMessageTemplateService.page(page, queryWrapper); + /** + * 分页列表查询 + * + * @param sysMessageTemplate + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/list") + public Result queryPageList(SysMessageTemplate sysMessageTemplate, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysMessageTemplate, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysMessageTemplateService.page(page, queryWrapper); return Result.ok(pageList); - } + } - /** - * 添加 - * - * @param sysMessageTemplate - * @return - */ - @PostMapping(value = "/add") - public Result add(@RequestBody SysMessageTemplate sysMessageTemplate) { - sysMessageTemplateService.save(sysMessageTemplate); + /** + * 添加 + * + * @param sysMessageTemplate + * @return + */ + @PostMapping(value = "/add") + public Result add(@RequestBody SysMessageTemplate sysMessageTemplate) { + sysMessageTemplateService.save(sysMessageTemplate); return Result.ok("添加成功!"); - } + } - /** - * 编辑 - * - * @param sysMessageTemplate - * @return - */ - @PutMapping(value = "/edit") - public Result edit(@RequestBody SysMessageTemplate sysMessageTemplate) { - sysMessageTemplateService.updateById(sysMessageTemplate); + /** + * 编辑 + * + * @param sysMessageTemplate + * @return + */ + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysMessageTemplate sysMessageTemplate) { + sysMessageTemplateService.updateById(sysMessageTemplate); return Result.ok("更新成功!"); - } + } - /** - * 通过id删除 - * - * @param id - * @return - */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name = "id", required = true) String id) { - sysMessageTemplateService.removeById(id); + /** + * 通过id删除 + * + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + sysMessageTemplateService.removeById(id); return Result.ok("删除成功!"); - } + } - /** - * 批量删除 - * - * @param ids - * @return - */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { - this.sysMessageTemplateService.removeByIds(Arrays.asList(ids.split(","))); + /** + * 批量删除 + * + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.sysMessageTemplateService.removeByIds(Arrays.asList(ids.split(","))); return Result.ok("批量删除成功!"); - } + } - /** - * 通过id查询 - * - * @param id - * @return - */ - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name = "id", required = true) String id) { - SysMessageTemplate sysMessageTemplate = sysMessageTemplateService.getById(id); + /** + * 通过id查询 + * + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SysMessageTemplate sysMessageTemplate = sysMessageTemplateService.getById(id); return Result.ok(sysMessageTemplate); - } + } - /** - * 导出excel - * - * @param request - */ - @GetMapping(value = "/exportXls") - public ModelAndView exportXls(HttpServletRequest request,SysMessageTemplate sysMessageTemplate) { - return super.exportXls(request, sysMessageTemplate, SysMessageTemplate.class,"推送消息模板"); - } + /** + * 导出excel + * + * @param request + */ + @GetMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysMessageTemplate sysMessageTemplate) { + return super.exportXls(request, sysMessageTemplate, SysMessageTemplate.class, "推送消息模板"); + } - /** - * excel导入 - * - * @param request - * @param response - * @return - */ - @PostMapping(value = "/importExcel") - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { - return super.importExcel(request, response, SysMessageTemplate.class); - } + /** + * excel导入 + * + * @param request + * @param response + * @return + */ + @PostMapping(value = "/importExcel") + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysMessageTemplate.class); + } - /** - * 发送消息 - */ - @PostMapping(value = "/sendMsg") - public Result sendMessage(@RequestBody MsgParams msgParams) { - Result result = new Result(); - try { - MessageDTO md = new MessageDTO(); - md.setToAll(false); - md.setTitle("消息发送测试"); - md.setTemplateCode(msgParams.getTemplateCode()); - md.setToUser(msgParams.getReceiver()); - md.setType(msgParams.getMsgType()); - String testData = msgParams.getTestData(); - if(oConvertUtils.isNotEmpty(testData)){ - Map data = JSON.parseObject(testData, Map.class); - md.setData(data); - } - sysBaseApi.sendTemplateMessage(md); - return result.success("消息发送成功!"); - } catch (Exception e) { - log.error("发送消息出错:" + e.getMessage(), e); - return result.error500("发送消息出错!"); - } - } + /** + * 发送消息 + */ + @PostMapping(value = "/sendMsg") + public Result sendMessage(@RequestBody MsgParams msgParams) { + Result result = new Result(); + try { + MessageDTO md = new MessageDTO(); + md.setToAll(false); + md.setTitle("消息发送测试"); + md.setTemplateCode(msgParams.getTemplateCode()); + md.setToUser(msgParams.getReceiver()); + md.setType(msgParams.getMsgType()); + String testData = msgParams.getTestData(); + if (oConvertUtils.isNotEmpty(testData)) { + Map data = JSON.parseObject(testData, Map.class); + md.setData(data); + } + sysBaseApi.sendTemplateMessage(md); + return result.success("消息发送成功!"); + } catch (Exception e) { + log.error("发送消息出错:" + e.getMessage(), e); + return result.error500("发送消息出错!"); + } + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/TestSocketController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/TestSocketController.java index d89a720..165fdf3 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/TestSocketController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/controller/TestSocketController.java @@ -1,5 +1,6 @@ package org.jeecg.modules.message.controller; +import com.alibaba.fastjson.JSONObject; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.WebsocketConst; import org.jeecg.modules.message.websocket.WebSocket; @@ -9,8 +10,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.alibaba.fastjson.JSONObject; - /** * @Description: TestSocketController * @author: jeecg-boot @@ -24,27 +23,27 @@ public class TestSocketController { @PostMapping("/sendAll") public Result sendAll(@RequestBody JSONObject jsonObject) { - Result result = new Result(); - String message = jsonObject.getString("message"); - JSONObject obj = new JSONObject(); - obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); - obj.put(WebsocketConst.MSG_ID, "M0001"); - obj.put(WebsocketConst.MSG_TXT, message); - webSocket.sendMessage(obj.toJSONString()); + Result result = new Result(); + String message = jsonObject.getString("message"); + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + obj.put(WebsocketConst.MSG_ID, "M0001"); + obj.put(WebsocketConst.MSG_TXT, message); + webSocket.sendMessage(obj.toJSONString()); result.setResult("群发!"); return result; } @PostMapping("/sendUser") public Result sendUser(@RequestBody JSONObject jsonObject) { - Result result = new Result(); - String userId = jsonObject.getString("userId"); - String message = jsonObject.getString("message"); - JSONObject obj = new JSONObject(); - obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); - obj.put(WebsocketConst.MSG_USER_ID, userId); - obj.put(WebsocketConst.MSG_ID, "M0001"); - obj.put(WebsocketConst.MSG_TXT, message); + Result result = new Result(); + String userId = jsonObject.getString("userId"); + String message = jsonObject.getString("message"); + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); + obj.put(WebsocketConst.MSG_USER_ID, userId); + obj.put(WebsocketConst.MSG_ID, "M0001"); + obj.put(WebsocketConst.MSG_TXT, message); webSocket.sendMessage(userId, obj.toJSONString()); result.setResult("单发"); return result; diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/MsgParams.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/MsgParams.java index 7bb6367..4368962 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/MsgParams.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/MsgParams.java @@ -1,35 +1,36 @@ package org.jeecg.modules.message.entity; -import java.io.Serializable; - import lombok.Data; +import java.io.Serializable; + /** * 发送消息实体 + * * @author: jeecg-boot */ @Data -public class MsgParams implements Serializable { - - private static final long serialVersionUID = 1L; - /** +public class MsgParams implements Serializable { + + private static final long serialVersionUID = 1L; + /** * 消息类型 */ - private String msgType; + private String msgType; /** * 消息接收方 */ - private String receiver; + private String receiver; /** * 消息模板码 */ - private String templateCode; + private String templateCode; /** * 测试数据 */ - private String testData; - + private String testData; + } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/SysMessage.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/SysMessage.java index f3555e3..00120ad 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/SysMessage.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/SysMessage.java @@ -1,21 +1,19 @@ package org.jeecg.modules.message.entity; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.common.system.base.entity.JeecgEntity; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; -import com.baomidou.mybatisplus.annotation.TableName; -import com.fasterxml.jackson.annotation.JsonFormat; - -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - /** * @Description: 消息 * @Author: jeecg-boot - * @Date: 2019-04-09 + * @Date: 2019-04-09 * @Version: V1.0 */ @Data @@ -23,40 +21,58 @@ import lombok.experimental.Accessors; @Accessors(chain = true) @TableName("sys_sms") public class SysMessage extends JeecgEntity { - /**推送内容*/ - @Excel(name = "推送内容", width = 15) - private java.lang.String esContent; - /**推送所需参数Json格式*/ - @Excel(name = "推送所需参数Json格式", width = 15) - private java.lang.String esParam; - /**接收人*/ - @Excel(name = "接收人", width = 15) - private java.lang.String esReceiver; - /**推送失败原因*/ - @Excel(name = "推送失败原因", width = 15) - private java.lang.String esResult; - /**发送次数*/ - @Excel(name = "发送次数", width = 15) - private java.lang.Integer esSendNum; - /**推送状态 0未推送 1推送成功 2推送失败*/ - @Excel(name = "推送状态 0未推送 1推送成功 2推送失败", width = 15) - @Dict(dicCode = "msgSendStatus") - private java.lang.String esSendStatus; - /**推送时间*/ - @Excel(name = "推送时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date esSendTime; - /**消息标题*/ - @Excel(name = "消息标题", width = 15) - private java.lang.String esTitle; - /** - * 推送方式:参考枚举类MessageTypeEnum - */ - @Excel(name = "推送方式", width = 15) - @Dict(dicCode = "messageType") - private java.lang.String esType; - /**备注*/ - @Excel(name = "备注", width = 15) - private java.lang.String remark; + /** + * 推送内容 + */ + @Excel(name = "推送内容", width = 15) + private java.lang.String esContent; + /** + * 推送所需参数Json格式 + */ + @Excel(name = "推送所需参数Json格式", width = 15) + private java.lang.String esParam; + /** + * 接收人 + */ + @Excel(name = "接收人", width = 15) + private java.lang.String esReceiver; + /** + * 推送失败原因 + */ + @Excel(name = "推送失败原因", width = 15) + private java.lang.String esResult; + /** + * 发送次数 + */ + @Excel(name = "发送次数", width = 15) + private java.lang.Integer esSendNum; + /** + * 推送状态 0未推送 1推送成功 2推送失败 + */ + @Excel(name = "推送状态 0未推送 1推送成功 2推送失败", width = 15) + @Dict(dicCode = "msgSendStatus") + private java.lang.String esSendStatus; + /** + * 推送时间 + */ + @Excel(name = "推送时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date esSendTime; + /** + * 消息标题 + */ + @Excel(name = "消息标题", width = 15) + private java.lang.String esTitle; + /** + * 推送方式:参考枚举类MessageTypeEnum + */ + @Excel(name = "推送方式", width = 15) + @Dict(dicCode = "messageType") + private java.lang.String esType; + /** + * 备注 + */ + @Excel(name = "备注", width = 15) + private java.lang.String remark; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/SysMessageTemplate.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/SysMessageTemplate.java index 1ea966e..b831a05 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/SysMessageTemplate.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/entity/SysMessageTemplate.java @@ -1,43 +1,53 @@ package org.jeecg.modules.message.entity; -import org.jeecg.common.system.base.entity.JeecgEntity; -import org.jeecgframework.poi.excel.annotation.Excel; - import com.baomidou.mybatisplus.annotation.TableName; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecg.common.system.base.entity.JeecgEntity; +import org.jeecgframework.poi.excel.annotation.Excel; /** * @Description: 消息模板 * @Author: jeecg-boot - * @Date: 2019-04-09 + * @Date: 2019-04-09 * @Version: V1.0 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("sys_sms_template") -public class SysMessageTemplate extends JeecgEntity{ - /**模板CODE*/ - @Excel(name = "模板CODE", width = 15) - private java.lang.String templateCode; - /**模板标题*/ - @Excel(name = "模板标题", width = 30) - private java.lang.String templateName; - /**模板内容*/ - @Excel(name = "模板内容", width = 50) - private java.lang.String templateContent; - /**模板测试json*/ - @Excel(name = "模板测试json", width = 15) - private java.lang.String templateTestJson; - /**模板类型*/ - @Excel(name = "模板类型", width = 15) - private java.lang.String templateType; +public class SysMessageTemplate extends JeecgEntity { + /** + * 模板CODE + */ + @Excel(name = "模板CODE", width = 15) + private java.lang.String templateCode; + /** + * 模板标题 + */ + @Excel(name = "模板标题", width = 30) + private java.lang.String templateName; + /** + * 模板内容 + */ + @Excel(name = "模板内容", width = 50) + private java.lang.String templateContent; + /** + * 模板测试json + */ + @Excel(name = "模板测试json", width = 15) + private java.lang.String templateTestJson; + /** + * 模板类型 + */ + @Excel(name = "模板类型", width = 15) + private java.lang.String templateType; - /**已经应用/未应用 1是0否*/ - @Excel(name = "应用状态", width = 15) - private String useStatus; + /** + * 已经应用/未应用 1是0否 + */ + @Excel(name = "应用状态", width = 15) + private String useStatus; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/enums/RangeDateEnum.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/enums/RangeDateEnum.java index 4e6ed84..3e82250 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/enums/RangeDateEnum.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/enums/RangeDateEnum.java @@ -1,7 +1,6 @@ package org.jeecg.modules.message.enums; import lombok.extern.slf4j.Slf4j; -import org.jeecg.common.constant.enums.MessageTypeEnum; import org.jeecg.common.system.annotation.EnumDict; import org.jeecg.common.system.vo.DictModel; @@ -13,6 +12,7 @@ import java.util.List; /** * 用于消息数据查询【vue3】 * 新版系统通知查询条件 + * * @Author taoYan * @Date 2022/8/19 20:41 **/ @@ -23,7 +23,7 @@ public enum RangeDateEnum { JT("jt", "今天"), ZT("zt", "昨天"), QT("qt", "前天"), - BZ("bz","本周"), + BZ("bz", "本周"), SZ("sz", "上周"), BY("by", "本月"), SY("sy", "上月"), @@ -34,19 +34,20 @@ public enum RangeDateEnum { String title; - RangeDateEnum(String key, String title){ + RangeDateEnum(String key, String title) { this.key = key; this.title = title; } /** * 获取字典数据 + * * @return */ - public static List getDictList(){ + public static List getDictList() { List list = new ArrayList<>(); DictModel dictModel = null; - for(RangeDateEnum e: RangeDateEnum.values()){ + for (RangeDateEnum e : RangeDateEnum.values()) { dictModel = new DictModel(); dictModel.setValue(e.key); dictModel.setText(e.title); @@ -57,46 +58,47 @@ public enum RangeDateEnum { /** * 根据key 获取范围时间值 + * * @param key * @return */ - public static Date[] getRangeArray(String key){ + public static Date[] getRangeArray(String key) { Calendar calendar1 = Calendar.getInstance(); Calendar calendar2 = Calendar.getInstance(); Date[] array = new Date[2]; boolean flag = false; - if(JT.key.equals(key)){ + if (JT.key.equals(key)) { //今天 - } else if(ZT.key.equals(key)){ + } else if (ZT.key.equals(key)) { //昨天 calendar1.add(Calendar.DAY_OF_YEAR, -1); calendar2.add(Calendar.DAY_OF_YEAR, -1); - } else if(QT.key.equals(key)){ + } else if (QT.key.equals(key)) { //前天 calendar1.add(Calendar.DAY_OF_YEAR, -2); calendar2.add(Calendar.DAY_OF_YEAR, -2); - } else if(BZ.key.equals(key)){ + } else if (BZ.key.equals(key)) { //本周 calendar1.set(Calendar.DAY_OF_WEEK, 2); - calendar2.add(Calendar.WEEK_OF_MONTH,1); - calendar2.add(Calendar.DAY_OF_WEEK,-1); - } else if(SZ.key.equals(key)){ + calendar2.add(Calendar.WEEK_OF_MONTH, 1); + calendar2.add(Calendar.DAY_OF_WEEK, -1); + } else if (SZ.key.equals(key)) { //本周一减一周 calendar1.set(Calendar.DAY_OF_WEEK, 2); calendar1.add(Calendar.WEEK_OF_MONTH, -1); // 本周一减一天 calendar2.set(Calendar.DAY_OF_WEEK, 2); - calendar2.add(Calendar.DAY_OF_WEEK,-1); - } else if(BY.key.equals(key)){ + calendar2.add(Calendar.DAY_OF_WEEK, -1); + } else if (BY.key.equals(key)) { //本月 calendar1.set(Calendar.DAY_OF_MONTH, 1); calendar2.set(Calendar.DAY_OF_MONTH, 1); calendar2.add(Calendar.MONTH, 1); calendar2.add(Calendar.DAY_OF_MONTH, -1); - } else if(SY.key.equals(key)){ + } else if (SY.key.equals(key)) { //本月第一天减一月 calendar1.set(Calendar.DAY_OF_MONTH, 1); calendar1.add(Calendar.MONTH, -1); @@ -104,14 +106,14 @@ public enum RangeDateEnum { //本月第一天减一天 calendar2.set(Calendar.DAY_OF_MONTH, 1); calendar2.add(Calendar.DAY_OF_MONTH, -1); - } else if (SEVENDAYS.key.equals(key)){ + } else if (SEVENDAYS.key.equals(key)) { //七日第一天 calendar1.setTime(new Date()); calendar1.add(Calendar.DATE, -7); - }else{ + } else { flag = true; } - if(flag){ + if (flag) { return null; } // 开始时间00:00:00 结束时间23:59:59 @@ -127,8 +129,8 @@ public enum RangeDateEnum { array[1] = calendar2.getTime(); return array; } - - public String getKey(){ + + public String getKey() { return this.key; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/ISendMsgHandle.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/ISendMsgHandle.java index 917838a..376f7ef 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/ISendMsgHandle.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/ISendMsgHandle.java @@ -10,17 +10,19 @@ public interface ISendMsgHandle { /** * 发送信息 + * * @param esReceiver 接受人 - * @param esTitle 标题 - * @param esContent 内容 + * @param esTitle 标题 + * @param esContent 内容 */ - void sendMsg(String esReceiver, String esTitle, String esContent); + void sendMsg(String esReceiver, String esTitle, String esContent); /** * 发送信息 + * * @param messageDTO */ - default void sendMessage(MessageDTO messageDTO){ + default void sendMessage(MessageDTO messageDTO) { } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgStatusEnum.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgStatusEnum.java index bfdf075..77c3d9b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgStatusEnum.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgStatusEnum.java @@ -2,25 +2,26 @@ package org.jeecg.modules.message.handle.enums; /** * 推送状态枚举 + * * @author: jeecg-boot */ public enum SendMsgStatusEnum { -//推送状态 0未推送 1推送成功 2推送失败 - WAIT("0"), SUCCESS("1"), FAIL("2"); + //推送状态 0未推送 1推送成功 2推送失败 + WAIT("0"), SUCCESS("1"), FAIL("2"); - private String code; + private String code; - private SendMsgStatusEnum(String code) { - this.code = code; - } + private SendMsgStatusEnum(String code) { + this.code = code; + } - public String getCode() { - return code; - } + public String getCode() { + return code; + } - public void setStatusCode(String code) { - this.code = code; - } + public void setStatusCode(String code) { + this.code = code; + } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgTypeEnum.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgTypeEnum.java index a47b7e2..0063868 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgTypeEnum.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/enums/SendMsgTypeEnum.java @@ -4,6 +4,7 @@ import org.jeecg.common.util.oConvertUtils; /** * 发送消息类型枚举 + * * @author: jeecg-boot */ public enum SendMsgTypeEnum { @@ -11,54 +12,54 @@ public enum SendMsgTypeEnum { /** * 短信 */ - SMS("1", "org.jeecg.modules.message.handle.impl.SmsSendMsgHandle"), + SMS("1", "org.jeecg.modules.message.handle.impl.SmsSendMsgHandle"), /** * 邮件 */ - EMAIL("2", "org.jeecg.modules.message.handle.impl.EmailSendMsgHandle"), + EMAIL("2", "org.jeecg.modules.message.handle.impl.EmailSendMsgHandle"), /** * 微信 */ - WX("3","org.jeecg.modules.message.handle.impl.WxSendMsgHandle"), + WX("3", "org.jeecg.modules.message.handle.impl.WxSendMsgHandle"), /** * 系统消息 */ - SYSTEM_MESSAGE("4","org.jeecg.modules.message.handle.impl.SystemSendMsgHandle"); + SYSTEM_MESSAGE("4", "org.jeecg.modules.message.handle.impl.SystemSendMsgHandle"); - private String type; + private String type; - private String implClass; + private String implClass; - private SendMsgTypeEnum(String type, String implClass) { - this.type = type; - this.implClass = implClass; - } + private SendMsgTypeEnum(String type, String implClass) { + this.type = type; + this.implClass = implClass; + } - public String getType() { - return type; - } + public String getType() { + return type; + } - public void setType(String type) { - this.type = type; - } + public void setType(String type) { + this.type = type; + } - public String getImplClass() { - return implClass; - } + public String getImplClass() { + return implClass; + } - public void setImplClass(String implClass) { - this.implClass = implClass; - } + public void setImplClass(String implClass) { + this.implClass = implClass; + } - public static SendMsgTypeEnum getByType(String type) { - if (oConvertUtils.isEmpty(type)) { - return null; - } - for (SendMsgTypeEnum val : values()) { - if (val.getType().equals(type)) { - return val; - } - } - return null; - } + public static SendMsgTypeEnum getByType(String type) { + if (oConvertUtils.isEmpty(type)) { + return null; + } + for (SendMsgTypeEnum val : values()) { + if (val.getType().equals(type)) { + return val; + } + } + return null; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/DdSendMsgHandle.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/DdSendMsgHandle.java index e6741de..633e70d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/DdSendMsgHandle.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/DdSendMsgHandle.java @@ -15,23 +15,23 @@ import org.springframework.stereotype.Component; @Component("ddSendMsgHandle") public class DdSendMsgHandle implements ISendMsgHandle { - @Autowired - private ThirdAppDingtalkServiceImpl dingtalkService; + @Autowired + private ThirdAppDingtalkServiceImpl dingtalkService; - @Override - public void sendMsg(String esReceiver, String esTitle, String esContent) { - log.info("发微信消息模板"); - MessageDTO messageDTO = new MessageDTO(); - messageDTO.setToUser(esReceiver); - messageDTO.setTitle(esTitle); - messageDTO.setContent(esContent); - messageDTO.setToAll(false); - sendMessage(messageDTO); - } + @Override + public void sendMsg(String esReceiver, String esTitle, String esContent) { + log.info("发微信消息模板"); + MessageDTO messageDTO = new MessageDTO(); + messageDTO.setToUser(esReceiver); + messageDTO.setTitle(esTitle); + messageDTO.setContent(esContent); + messageDTO.setToAll(false); + sendMessage(messageDTO); + } - @Override - public void sendMessage(MessageDTO messageDTO) { - dingtalkService.sendMessage(messageDTO, true); - } + @Override + public void sendMessage(MessageDTO messageDTO) { + dingtalkService.sendMessage(messageDTO, true); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/EmailSendMsgHandle.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/EmailSendMsgHandle.java index 2876b30..f4cffec 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/EmailSendMsgHandle.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/EmailSendMsgHandle.java @@ -1,6 +1,8 @@ package org.jeecg.modules.message.handle.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.jeecg.common.api.dto.message.MessageDTO; @@ -18,8 +20,6 @@ import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; -import jakarta.mail.MessagingException; -import jakarta.mail.internet.MimeMessage; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.List; @@ -47,8 +47,7 @@ public class EmailSendMsgHandle implements ISendMsgHandle { /** * 真实姓名变量 */ - private static final String realNameExp = "{REALNAME}"; - + private static final String realNameExp = "{REALNAME}"; @Override @@ -57,7 +56,7 @@ public class EmailSendMsgHandle implements ISendMsgHandle { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = null; //update-begin-author:taoyan date:20200811 for:配置类数据获取 - if(oConvertUtils.isEmpty(emailFrom)){ + if (oConvertUtils.isEmpty(emailFrom)) { StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class); setEmailFrom(staticConfig.getEmailFrom()); } @@ -83,40 +82,41 @@ public class EmailSendMsgHandle implements ISendMsgHandle { List list = sysUserMapper.selectList(query); String content = messageDTO.getContent(); String title = messageDTO.getTitle(); - for(SysUser user: list){ + for (SysUser user : list) { String email = user.getEmail(); if (ObjectUtils.isEmpty(email)) { continue; } - content=replaceContent(user,content); - log.info("邮件内容:"+ content); + content = replaceContent(user, content); + log.info("邮件内容:" + content); sendMsg(email, title, content); } - + //update-begin-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱 Set toEmailList = messageDTO.getToEmailList(); - if(toEmailList!=null && toEmailList.size()>0){ - for(String email: toEmailList){ + if (toEmailList != null && toEmailList.size() > 0) { + for (String email : toEmailList) { if (ObjectUtils.isEmpty(email)) { continue; } - log.info("邮件内容:"+ content); + log.info("邮件内容:" + content); sendMsg(email, title, content); } } //update-end-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱 - + //发送给抄送人 sendMessageToCopyUser(messageDTO); } /** * 发送邮件给抄送人 + * * @param messageDTO */ public void sendMessageToCopyUser(MessageDTO messageDTO) { String copyToUser = messageDTO.getCopyToUser(); - if(ObjectUtils.isNotEmpty(copyToUser)) { + if (ObjectUtils.isNotEmpty(copyToUser)) { LambdaQueryWrapper query = new LambdaQueryWrapper().in(SysUser::getUsername, copyToUser.split(",")); List list = sysUserMapper.selectList(query); String content = messageDTO.getContent(); @@ -127,34 +127,35 @@ public class EmailSendMsgHandle implements ISendMsgHandle { if (ObjectUtils.isEmpty(email)) { continue; } - content=replaceContent(user,content); + content = replaceContent(user, content); log.info("邮件内容:" + content); - - //update-begin-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱 + + //update-begin-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱 sendEmail(email, content, title); } Set ccEmailList = messageDTO.getCcEmailList(); - if(ccEmailList!=null && ccEmailList.size()>0){ - for(String email: ccEmailList){ + if (ccEmailList != null && ccEmailList.size() > 0) { + for (String email : ccEmailList) { if (ObjectUtils.isEmpty(email)) { continue; } - log.info("邮件内容:"+ content); + log.info("邮件内容:" + content); sendEmail(email, content, title); } } - + } } /** * 发送邮件给抄送人调用 + * * @param email * @param content * @param title */ - private void sendEmail(String email, String content, String title){ + private void sendEmail(String email, String content, String title) { JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender"); MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = null; @@ -177,17 +178,18 @@ public class EmailSendMsgHandle implements ISendMsgHandle { } } //update-end-author:taoyan date:2023-6-20 for: QQYUN-5557【简流】通知节点 发送邮箱 表单上有一个邮箱字段,流程中,邮件发送节点,邮件接收人 不可选择邮箱 - + /** * 替换邮件内容变量 + * * @param user * @param content * @return */ - private String replaceContent(SysUser user,String content){ + private String replaceContent(SysUser user, String content) { if (content.indexOf(realNameExp) > 0) { - content = content.replace("$"+realNameExp,user.getRealname()).replace(realNameExp, user.getRealname()); + content = content.replace("$" + realNameExp, user.getRealname()).replace(realNameExp, user.getRealname()); } if (content.indexOf(CommonConstant.LOGIN_TOKEN) > 0) { String token = getToken(user); @@ -202,6 +204,7 @@ public class EmailSendMsgHandle implements ISendMsgHandle { /** * 获取token + * * @param user * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/QywxSendMsgHandle.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/QywxSendMsgHandle.java index 46afeb6..7bdf485 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/QywxSendMsgHandle.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/QywxSendMsgHandle.java @@ -15,23 +15,23 @@ import org.springframework.stereotype.Component; @Component("qywxSendMsgHandle") public class QywxSendMsgHandle implements ISendMsgHandle { - @Autowired - private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; + @Autowired + private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; - @Override - public void sendMsg(String esReceiver, String esTitle, String esContent) { - log.info("发微信消息模板"); - MessageDTO messageDTO = new MessageDTO(); - messageDTO.setToUser(esReceiver); - messageDTO.setTitle(esTitle); - messageDTO.setContent(esContent); - messageDTO.setToAll(false); - sendMessage(messageDTO); - } + @Override + public void sendMsg(String esReceiver, String esTitle, String esContent) { + log.info("发微信消息模板"); + MessageDTO messageDTO = new MessageDTO(); + messageDTO.setToUser(esReceiver); + messageDTO.setTitle(esTitle); + messageDTO.setContent(esContent); + messageDTO.setToAll(false); + sendMessage(messageDTO); + } - @Override - public void sendMessage(MessageDTO messageDTO) { - wechatEnterpriseService.sendMessage(messageDTO, true); - } + @Override + public void sendMessage(MessageDTO messageDTO) { + wechatEnterpriseService.sendMessage(messageDTO, true); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SmsSendMsgHandle.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SmsSendMsgHandle.java index 5063ddf..f402b8b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SmsSendMsgHandle.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SmsSendMsgHandle.java @@ -10,10 +10,10 @@ import org.jeecg.modules.message.handle.ISendMsgHandle; @Slf4j public class SmsSendMsgHandle implements ISendMsgHandle { - @Override - public void sendMsg(String esReceiver, String esTitle, String esContent) { - // TODO Auto-generated method stub - log.info("发短信"); - } + @Override + public void sendMsg(String esReceiver, String esTitle, String esContent) { + // TODO Auto-generated method stub + log.info("发短信"); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java index 8eeae55..f9d7bc6 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java @@ -1,14 +1,15 @@ package org.jeecg.modules.message.handle.impl; import com.alibaba.fastjson.JSONObject; +import jakarta.annotation.Resource; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.WebsocketConst; +import org.jeecg.common.constant.enums.Vue3MessageHrefEnum; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.api.ISysBaseAPI; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.oConvertUtils; -import org.jeecg.common.constant.enums.Vue3MessageHrefEnum; import org.jeecg.modules.message.handle.ISendMsgHandle; import org.jeecg.modules.message.websocket.WebSocket; import org.jeecg.modules.system.entity.SysAnnouncement; @@ -19,19 +20,18 @@ import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper; import org.jeecg.modules.system.mapper.SysUserMapper; import org.springframework.stereotype.Component; -import jakarta.annotation.Resource; import java.util.Date; import java.util.Map; /** -* @Description: 发送系统消息 -* @Author: wangshuai -* @Date: 2022年3月22日 18:48:20 -*/ + * @Description: 发送系统消息 + * @Author: wangshuai + * @Date: 2022年3月22日 18:48:20 + */ @Component("systemSendMsgHandle") public class SystemSendMsgHandle implements ISendMsgHandle { - public static final String FROM_USER="system"; + public static final String FROM_USER = "system"; @Resource private SysAnnouncementMapper sysAnnouncementMapper; @@ -47,22 +47,24 @@ public class SystemSendMsgHandle implements ISendMsgHandle { /** * 该方法会发送3种消息:系统消息、企业微信 钉钉 + * * @param esReceiver 发送人 - * @param esTitle 标题 - * @param esContent 内容 + * @param esTitle 标题 + * @param esContent 内容 */ @Override public void sendMsg(String esReceiver, String esTitle, String esContent) { - if(oConvertUtils.isEmpty(esReceiver)){ - throw new JeecgBootException("被发送人不能为空"); + if (oConvertUtils.isEmpty(esReceiver)) { + throw new JeecgBootException("被发送人不能为空"); } ISysBaseAPI sysBaseApi = SpringContextUtils.getBean(ISysBaseAPI.class); - MessageDTO messageDTO = new MessageDTO(FROM_USER,esReceiver,esTitle,esContent); + MessageDTO messageDTO = new MessageDTO(FROM_USER, esReceiver, esTitle, esContent); sysBaseApi.sendSysAnnouncement(messageDTO); } /** * 仅发送系统消息 + * * @param messageDTO */ @Override @@ -71,31 +73,31 @@ public class SystemSendMsgHandle implements ISendMsgHandle { String title = messageDTO.getTitle(); String content = messageDTO.getContent(); String fromUser = messageDTO.getFromUser(); - Map data = messageDTO.getData(); + Map data = messageDTO.getData(); String[] arr = messageDTO.getToUser().split(","); - for(String username: arr){ + for (String username : arr) { doSend(title, content, fromUser, username, data); } } - private void doSend(String title, String msgContent, String fromUser, String toUser, Map data){ + private void doSend(String title, String msgContent, String fromUser, String toUser, Map data) { SysAnnouncement announcement = new SysAnnouncement(); - if(data!=null){ + if (data != null) { //摘要信息 Object msgAbstract = data.get(CommonConstant.NOTICE_MSG_SUMMARY); - if(msgAbstract!=null){ + if (msgAbstract != null) { announcement.setMsgAbstract(msgAbstract.toString()); } // 任务节点ID Object taskId = data.get(CommonConstant.NOTICE_MSG_BUS_ID); - if(taskId!=null){ + if (taskId != null) { announcement.setBusId(taskId.toString()); announcement.setBusType(Vue3MessageHrefEnum.BPM_TASK.getBusType()); } // 流程内消息节点 发消息会传一个busType Object busType = data.get(CommonConstant.NOTICE_MSG_BUS_TYPE); - if(busType!=null){ + if (busType != null) { announcement.setBusType(busType.toString()); } } @@ -114,10 +116,10 @@ public class SystemSendMsgHandle implements ISendMsgHandle { String userId = toUser; String[] userIds = userId.split(","); String anntId = announcement.getId(); - for(int i=0;i queryWrapper = new QueryWrapper(); - queryWrapper.eq("es_send_status", SendMsgStatusEnum.WAIT.getCode()) - .or(i -> i.eq("es_send_status", SendMsgStatusEnum.FAIL.getCode()).lt("es_send_num", 6)); - List sysMessages = sysMessageService.list(queryWrapper); - System.out.println(sysMessages); - // 2.根据不同的类型走不通的发送实现类 - for (SysMessage sysMessage : sysMessages) { - //update-begin-author:taoyan date:2022-7-8 for: 模板消息发送测试调用方法修改 - Integer sendNum = sysMessage.getEsSendNum(); - try { - MessageDTO md = new MessageDTO(); - md.setTitle(sysMessage.getEsTitle()); - md.setContent(sysMessage.getEsContent()); - md.setToUser(sysMessage.getEsReceiver()); - md.setType(sysMessage.getEsType()); - md.setToAll(false); - sysBaseAPI.sendTemplateMessage(md); - //发送消息成功 - sysMessage.setEsSendStatus(SendMsgStatusEnum.SUCCESS.getCode()); - //update-end-author:taoyan date:2022-7-8 for: 模板消息发送测试调用方法修改 - } catch (Exception e) { - e.printStackTrace(); - // 发送消息出现异常 - sysMessage.setEsSendStatus(SendMsgStatusEnum.FAIL.getCode()); - } - sysMessage.setEsSendNum(++sendNum); - // 发送结果回写到数据库 - sysMessageService.updateById(sysMessage); - } + // 1.读取消息中心数据,只查询未发送的和发送失败不超过次数的 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("es_send_status", SendMsgStatusEnum.WAIT.getCode()) + .or(i -> i.eq("es_send_status", SendMsgStatusEnum.FAIL.getCode()).lt("es_send_num", 6)); + List sysMessages = sysMessageService.list(queryWrapper); + System.out.println(sysMessages); + // 2.根据不同的类型走不通的发送实现类 + for (SysMessage sysMessage : sysMessages) { + //update-begin-author:taoyan date:2022-7-8 for: 模板消息发送测试调用方法修改 + Integer sendNum = sysMessage.getEsSendNum(); + try { + MessageDTO md = new MessageDTO(); + md.setTitle(sysMessage.getEsTitle()); + md.setContent(sysMessage.getEsContent()); + md.setToUser(sysMessage.getEsReceiver()); + md.setType(sysMessage.getEsType()); + md.setToAll(false); + sysBaseAPI.sendTemplateMessage(md); + //发送消息成功 + sysMessage.setEsSendStatus(SendMsgStatusEnum.SUCCESS.getCode()); + //update-end-author:taoyan date:2022-7-8 for: 模板消息发送测试调用方法修改 + } catch (Exception e) { + e.printStackTrace(); + // 发送消息出现异常 + sysMessage.setEsSendStatus(SendMsgStatusEnum.FAIL.getCode()); + } + sysMessage.setEsSendNum(++sendNum); + // 发送结果回写到数据库 + sysMessageService.updateById(sysMessage); + } - } + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/mapper/SysMessageMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/mapper/SysMessageMapper.java index 100d35e..1180789 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/mapper/SysMessageMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/mapper/SysMessageMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.message.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.message.entity.SysMessage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.message.entity.SysMessage; /** * @Description: 消息 * @Author: jeecg-boot - * @Date: 2019-04-09 + * @Date: 2019-04-09 * @Version: V1.0 */ public interface SysMessageMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/mapper/SysMessageTemplateMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/mapper/SysMessageTemplateMapper.java index 98de4bd..ca43d05 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/mapper/SysMessageTemplateMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/mapper/SysMessageTemplateMapper.java @@ -9,13 +9,14 @@ import java.util.List; /** * @Description: 消息模板 * @Author: jeecg-boot - * @Date: 2019-04-09 + * @Date: 2019-04-09 * @Version: V1.0 */ public interface SysMessageTemplateMapper extends BaseMapper { /** * 通过模板CODE查询消息模板 + * * @param code 模板CODE * @return List */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/ISysMessageService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/ISysMessageService.java index 744f35e..730c185 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/ISysMessageService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/ISysMessageService.java @@ -6,7 +6,7 @@ import org.jeecg.modules.message.entity.SysMessage; /** * @Description: 消息 * @Author: jeecg-boot - * @Date: 2019-04-09 + * @Date: 2019-04-09 * @Version: V1.0 */ public interface ISysMessageService extends JeecgService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/ISysMessageTemplateService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/ISysMessageTemplateService.java index da3e78e..3b3fbee 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/ISysMessageTemplateService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/ISysMessageTemplateService.java @@ -1,20 +1,21 @@ package org.jeecg.modules.message.service; -import java.util.List; - import org.jeecg.common.system.base.service.JeecgService; import org.jeecg.modules.message.entity.SysMessageTemplate; +import java.util.List; + /** * @Description: 消息模板 * @Author: jeecg-boot - * @Date: 2019-04-09 + * @Date: 2019-04-09 * @Version: V1.0 */ public interface ISysMessageTemplateService extends JeecgService { /** * 通过模板CODE查询消息模板 + * * @param code 模板CODE * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/impl/SysMessageServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/impl/SysMessageServiceImpl.java index ff836a5..60bcf8f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/impl/SysMessageServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/impl/SysMessageServiceImpl.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Service; /** * @Description: 消息 * @Author: jeecg-boot - * @Date: 2019-04-09 + * @Date: 2019-04-09 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/impl/SysMessageTemplateServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/impl/SysMessageTemplateServiceImpl.java index 7bce592..faf32ba 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/impl/SysMessageTemplateServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/service/impl/SysMessageTemplateServiceImpl.java @@ -6,12 +6,13 @@ import org.jeecg.modules.message.mapper.SysMessageTemplateMapper; import org.jeecg.modules.message.service.ISysMessageTemplateService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + import java.util.List; /** * @Description: 消息模板 * @Author: jeecg-boot - * @Date: 2019-04-09 + * @Date: 2019-04-09 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/util/PushMsgUtil.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/util/PushMsgUtil.java index 84f6f04..61166ce 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/util/PushMsgUtil.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/util/PushMsgUtil.java @@ -1,5 +1,6 @@ package org.jeecg.modules.message.util; +import com.alibaba.fastjson.JSONObject; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; @@ -11,8 +12,6 @@ import org.jeecg.modules.message.service.ISysMessageTemplateService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.alibaba.fastjson.JSONObject; - import java.io.IOException; import java.io.StringWriter; import java.util.Date; @@ -21,6 +20,7 @@ import java.util.Map; /** * 消息生成工具 + * * @author: jeecg-boot */ @@ -35,11 +35,12 @@ public class PushMsgUtil { @Autowired private Configuration freemarkerConfig; + /** - * @param msgType 消息类型 1短信 2邮件 3微信 - * @param templateCode 消息模板码 - * @param map 消息参数 - * @param sentTo 接收消息方 + * @param msgType 消息类型 1短信 2邮件 3微信 + * @param templateCode 消息模板码 + * @param map 消息参数 + * @param sentTo 接收消息方 */ public boolean sendMessage(String msgType, String templateCode, Map map, String sentTo) { List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); @@ -71,9 +72,9 @@ public class PushMsgUtil { sysMessage.setEsSendTime(new Date()); sysMessage.setEsSendStatus(SendMsgStatusEnum.WAIT.getCode()); sysMessage.setEsSendNum(0); - if(sysMessageService.save(sysMessage)) { - return true; - } + if (sysMessageService.save(sysMessage)) { + return true; + } } return false; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java index a6f9b22..6c41aeb 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/websocket/SocketHandler.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Component; /** * 监听消息(通过redis发布订阅,推送消息) * 此方案:解决集群部署的问题,多实例节点(也就是发送消息端先发送消息到redis中,每个服务节点收到redis消息,再触发具体的ws推送) + * * @author: jeecg-boot */ @Slf4j @@ -22,7 +23,7 @@ public class SocketHandler implements JeecgRedisListener { @Override public void onMessage(BaseMap map) { - log.debug("【Redis发布订阅模式】redis Listener: {},参数:{}",WebSocket.REDIS_TOPIC_NAME, map.toString()); + log.debug("【Redis发布订阅模式】redis Listener: {},参数:{}", WebSocket.REDIS_TOPIC_NAME, map.toString()); String userId = map.get("userId"); String message = map.get("message"); @@ -30,7 +31,7 @@ public class SocketHandler implements JeecgRedisListener { //pc端消息推送具体人 webSocket.pushMessage(userId, message); //app端消息推送具体人 - webSocket.pushMessage(userId+CommonSendStatus.APP_SESSION_SUFFIX, message); + webSocket.pushMessage(userId + CommonSendStatus.APP_SESSION_SUFFIX, message); } else { //推送全部 webSocket.pushMessage(message); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java index a6cc51d..9d5ddd8 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java @@ -1,18 +1,17 @@ package org.jeecg.modules.message.websocket; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import jakarta.websocket.*; import jakarta.websocket.server.PathParam; import jakarta.websocket.server.ServerEndpoint; - -import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.base.BaseMap; import org.jeecg.common.constant.WebsocketConst; import org.jeecg.common.modules.redis.client.JeecgRedisClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import lombok.extern.slf4j.Slf4j; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * @Author scott @@ -23,8 +22,10 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @ServerEndpoint("/websocket/{userId}") public class WebSocket { - - /**线程安全Map*/ + + /** + * 线程安全Map + */ private static ConcurrentHashMap sessionPool = new ConcurrentHashMap<>(); /** @@ -34,8 +35,9 @@ public class WebSocket { //避免初次调用出现空指针的情况 private static JeecgRedisClient jeecgRedisClient; + @Autowired - private void setJeecgRedisClient(JeecgRedisClient jeecgRedisClient){ + private void setJeecgRedisClient(JeecgRedisClient jeecgRedisClient) { WebSocket.jeecgRedisClient = jeecgRedisClient; } @@ -74,13 +76,13 @@ public class WebSocket { Session session = item.getValue(); try { //update-begin-author:taoyan date:20211012 for: websocket报错 https://gitee.com/jeecg/jeecg-boot/issues/I4C0MU - synchronized (session){ + synchronized (session) { log.debug("【系统 WebSocket】推送单人消息:" + message); session.getBasicRemote().sendText(message); } //update-end-author:taoyan date:20211012 for: websocket报错 https://gitee.com/jeecg/jeecg-boot/issues/I4C0MU } catch (Exception e) { - log.error(e.getMessage(),e); + log.error(e.getMessage(), e); } } } @@ -110,15 +112,15 @@ public class WebSocket { */ @OnMessage public void onMessage(String message, @PathParam(value = "userId") String userId) { - if(!"ping".equals(message) && !WebsocketConst.CMD_CHECK.equals(message)){ + if (!"ping".equals(message) && !WebsocketConst.CMD_CHECK.equals(message)) { log.debug("【系统 WebSocket】收到客户端消息:" + message); - }else{ + } else { log.debug("【系统 WebSocket】收到客户端消息:" + message); //update-begin---author:wangshuai---date:2024-05-07---for:【issues/1161】前端websocket因心跳导致监听不起作用--- this.sendMessage(userId, "ping"); //update-end---author:wangshuai---date:2024-05-07---for:【issues/1161】前端websocket因心跳导致监听不起作用--- } - + // //------------------------------------------------------------------------------ // JSONObject obj = new JSONObject(); // //业务类型 @@ -141,9 +143,10 @@ public class WebSocket { t.printStackTrace(); } //==========【系统 WebSocket接受、推送消息等方法 —— 具体服务节点推送ws消息】======================================================================================== - + //==========【采用redis发布订阅模式——推送消息】======================================================================================== + /** * 后台发送消息到redis * @@ -182,5 +185,5 @@ public class WebSocket { } } //=======【采用redis发布订阅模式——推送消息】========================================================================================== - + } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/CustomActuatorConfig.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/CustomActuatorConfig.java index a7c85b0..f1624ef 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/CustomActuatorConfig.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/CustomActuatorConfig.java @@ -24,6 +24,7 @@ public class CustomActuatorConfig { /** * 请求追踪 + * * @return * @author chenrui * @date 2024/5/14 14:52 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomHttpTraceEndpoint.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomHttpTraceEndpoint.java index 38a8440..890fa76 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomHttpTraceEndpoint.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomHttpTraceEndpoint.java @@ -19,7 +19,7 @@ import static org.springframework.boot.actuate.endpoint.annotation.Selector.Matc */ @Component @Endpoint(id = "httptrace-new") -public class CustomHttpTraceEndpoint{ +public class CustomHttpTraceEndpoint { private final CustomInMemoryHttpTraceRepository repository; public CustomHttpTraceEndpoint(CustomInMemoryHttpTraceRepository repository) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomInMemoryHttpTraceRepository.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomInMemoryHttpTraceRepository.java index 2c52cb5..820377f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomInMemoryHttpTraceRepository.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/actuator/httptrace/CustomInMemoryHttpTraceRepository.java @@ -44,13 +44,13 @@ public class CustomInMemoryHttpTraceRepository extends InMemoryHttpExchangeRepos } return stream.sorted((o1, o2) -> { int i = 0; - if("timeTaken".equalsIgnoreCase(sortBy)) { + if ("timeTaken".equalsIgnoreCase(sortBy)) { i = o1.getTimeTaken().compareTo(o2.getTimeTaken()); - }else if("timestamp".equalsIgnoreCase(sortBy)){ + } else if ("timestamp".equalsIgnoreCase(sortBy)) { i = o1.getTimestamp().compareTo(o2.getTimestamp()); } - if("desc".equalsIgnoreCase(order)){ - i *=-1; + if ("desc".equalsIgnoreCase(order)) { + i *= -1; } return i; }); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorMemoryController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorMemoryController.java index c6c3bc1..f99c3dd 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorMemoryController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorMemoryController.java @@ -25,27 +25,28 @@ public class ActuatorMemoryController { /** * 内存详情 + * * @return * @throws Exception */ @GetMapping("/info") public Result getRedisInfo() throws Exception { - OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean(); - JSONObject operatingSystemJson = JSONObject.parseObject(JSONObject.toJSONString(operatingSystemMXBean)); - long totalPhysicalMemory = operatingSystemJson.getLongValue("totalPhysicalMemorySize"); - long freePhysicalMemory = operatingSystemJson.getLongValue("freePhysicalMemorySize"); - long usedPhysicalMemory = totalPhysicalMemory - freePhysicalMemory; - Runtime runtime = Runtime.getRuntime(); - Map result = new HashMap<>(); - result.put("memory.physical.total", totalPhysicalMemory); - result.put("memory.physical.used", freePhysicalMemory); - result.put("memory.physical.free", usedPhysicalMemory); - result.put("memory.physical.usage", NumberUtil.div(usedPhysicalMemory, totalPhysicalMemory)); - result.put("memory.runtime.total", runtime.totalMemory()); - result.put("memory.runtime.used", runtime.freeMemory()); - result.put("memory.runtime.max", runtime.totalMemory() - runtime.freeMemory()); - result.put("memory.runtime.free", runtime.maxMemory() - runtime.totalMemory() + runtime.freeMemory()); - result.put("memory.runtime.usage", NumberUtil.div(runtime.totalMemory() - runtime.freeMemory(), runtime.totalMemory())); + OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean(); + JSONObject operatingSystemJson = JSONObject.parseObject(JSONObject.toJSONString(operatingSystemMXBean)); + long totalPhysicalMemory = operatingSystemJson.getLongValue("totalPhysicalMemorySize"); + long freePhysicalMemory = operatingSystemJson.getLongValue("freePhysicalMemorySize"); + long usedPhysicalMemory = totalPhysicalMemory - freePhysicalMemory; + Runtime runtime = Runtime.getRuntime(); + Map result = new HashMap<>(); + result.put("memory.physical.total", totalPhysicalMemory); + result.put("memory.physical.used", freePhysicalMemory); + result.put("memory.physical.free", usedPhysicalMemory); + result.put("memory.physical.usage", NumberUtil.div(usedPhysicalMemory, totalPhysicalMemory)); + result.put("memory.runtime.total", runtime.totalMemory()); + result.put("memory.runtime.used", runtime.freeMemory()); + result.put("memory.runtime.max", runtime.totalMemory() - runtime.freeMemory()); + result.put("memory.runtime.free", runtime.maxMemory() - runtime.totalMemory() + runtime.freeMemory()); + result.put("memory.runtime.usage", NumberUtil.div(runtime.totalMemory() - runtime.freeMemory(), runtime.totalMemory())); return Result.ok(result); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java index 89d90dc..fa37e56 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/controller/ActuatorRedisController.java @@ -1,6 +1,8 @@ package org.jeecg.modules.monitor.controller; import com.alibaba.fastjson.JSONArray; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.monitor.domain.RedisInfo; @@ -10,8 +12,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import javax.swing.filechooser.FileSystemView; import java.io.File; import java.util.ArrayList; @@ -33,6 +33,7 @@ public class ActuatorRedisController { /** * Redis详细信息 + * * @return * @throws Exception */ @@ -43,20 +44,22 @@ public class ActuatorRedisController { return Result.ok(infoList); } - //update-begin---author:chenrui ---date:20240514 for:[QQYUN-9247]系统监控功能优化------------ - /** - * Redis历史性能指标查询(过去一小时) - * @return - * @throws Exception - * @author chenrui - * @date 2024/5/14 14:56 - */ - @GetMapping(value = "/metrics/history") - public Result getMetricsHistory() throws Exception { - Map>> metricsHistory = this.redisService.getMetricsHistory(); - return Result.OK(metricsHistory); - } - //update-end---author:chenrui ---date:20240514 for:[QQYUN-9247]系统监控功能优化------------ + //update-begin---author:chenrui ---date:20240514 for:[QQYUN-9247]系统监控功能优化------------ + + /** + * Redis历史性能指标查询(过去一小时) + * + * @return + * @throws Exception + * @author chenrui + * @date 2024/5/14 14:56 + */ + @GetMapping(value = "/metrics/history") + public Result getMetricsHistory() throws Exception { + Map>> metricsHistory = this.redisService.getMetricsHistory(); + return Result.OK(metricsHistory); + } + //update-end---author:chenrui ---date:20240514 for:[QQYUN-9247]系统监控功能优化------------ @GetMapping("/keysSize") public Map getKeysSize() throws Exception { @@ -65,13 +68,15 @@ public class ActuatorRedisController { /** * 获取redis key数量 for 报表 + * * @return * @throws Exception */ @GetMapping("/keysSizeForReport") public Map getKeysSizeReport() throws Exception { - return redisService.getMapForReport("1"); + return redisService.getMapForReport("1"); } + /** * 获取redis 内存 for 报表 * @@ -80,59 +85,62 @@ public class ActuatorRedisController { */ @GetMapping("/memoryForReport") public Map memoryForReport() throws Exception { - return redisService.getMapForReport("2"); + return redisService.getMapForReport("2"); } + /** * 获取redis 全部信息 for 报表 + * * @return * @throws Exception */ @GetMapping("/infoForReport") public Map infoForReport() throws Exception { - return redisService.getMapForReport("3"); + return redisService.getMapForReport("3"); } @GetMapping("/memoryInfo") public Map getMemoryInfo() throws Exception { return redisService.getMemoryInfo(); } - - //update-begin--Author:zhangweijian Date:20190425 for:获取磁盘信息 - /** - * @功能:获取磁盘信息 - * @param request - * @param response - * @return - */ - @GetMapping("/queryDiskInfo") - public Result>> queryDiskInfo(HttpServletRequest request, HttpServletResponse response){ - Result>> res = new Result<>(); - try { - // 当前文件系统类 - FileSystemView fsv = FileSystemView.getFileSystemView(); - // 列出所有windows 磁盘 - File[] fs = File.listRoots(); - log.info("查询磁盘信息:"+fs.length+"个"); - List> list = new ArrayList<>(); - - for (int i = 0; i < fs.length; i++) { - if(fs[i].getTotalSpace()==0) { - continue; - } - Map map = new HashMap(5); - map.put("name", fsv.getSystemDisplayName(fs[i])); - map.put("max", fs[i].getTotalSpace()); - map.put("rest", fs[i].getFreeSpace()); - map.put("restPPT", (fs[i].getTotalSpace()-fs[i].getFreeSpace())*100/fs[i].getTotalSpace()); - list.add(map); - log.info(map.toString()); - } - res.setResult(list); - res.success("查询成功"); - } catch (Exception e) { - res.error500("查询失败"+e.getMessage()); - } - return res; - } - //update-end--Author:zhangweijian Date:20190425 for:获取磁盘信息 + + //update-begin--Author:zhangweijian Date:20190425 for:获取磁盘信息 + + /** + * @param request + * @param response + * @return + * @功能:获取磁盘信息 + */ + @GetMapping("/queryDiskInfo") + public Result>> queryDiskInfo(HttpServletRequest request, HttpServletResponse response) { + Result>> res = new Result<>(); + try { + // 当前文件系统类 + FileSystemView fsv = FileSystemView.getFileSystemView(); + // 列出所有windows 磁盘 + File[] fs = File.listRoots(); + log.info("查询磁盘信息:" + fs.length + "个"); + List> list = new ArrayList<>(); + + for (int i = 0; i < fs.length; i++) { + if (fs[i].getTotalSpace() == 0) { + continue; + } + Map map = new HashMap(5); + map.put("name", fsv.getSystemDisplayName(fs[i])); + map.put("max", fs[i].getTotalSpace()); + map.put("rest", fs[i].getFreeSpace()); + map.put("restPPT", (fs[i].getTotalSpace() - fs[i].getFreeSpace()) * 100 / fs[i].getTotalSpace()); + list.add(map); + log.info(map.toString()); + } + res.setResult(list); + res.success("查询成功"); + } catch (Exception e) { + res.error500("查询失败" + e.getMessage()); + } + return res; + } + //update-end--Author:zhangweijian Date:20190425 for:获取磁盘信息 } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java index 2249221..ce1543e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/domain/RedisInfo.java @@ -9,133 +9,133 @@ import java.util.Map; */ public class RedisInfo { - private static Map map = new HashMap(5); + private static Map map = new HashMap(5); - static { - map.put("redis_version", "Redis 服务器版本"); - map.put("redis_git_sha1", "Git SHA1"); - map.put("redis_git_dirty", "Git dirty flag"); - map.put("os", "Redis 服务器的宿主操作系统"); - map.put("arch_bits", " 架构(32 或 64 位)"); - map.put("multiplexing_api", "Redis 所使用的事件处理机制"); - map.put("gcc_version", "编译 Redis 时所使用的 GCC 版本"); - map.put("process_id", "服务器进程的 PID"); - map.put("run_id", "Redis 服务器的随机标识符(用于 Sentinel 和集群)"); - map.put("tcp_port", "TCP/IP 监听端口"); - map.put("uptime_in_seconds", "自 Redis 服务器启动以来,经过的秒数"); - map.put("uptime_in_days", "自 Redis 服务器启动以来,经过的天数"); - map.put("lru_clock", " 以分钟为单位进行自增的时钟,用于 LRU 管理"); - map.put("connected_clients", "已连接客户端的数量(不包括通过从属服务器连接的客户端)"); - map.put("client_longest_output_list", "当前连接的客户端当中,最长的输出列表"); - map.put("client_longest_input_buf", "当前连接的客户端当中,最大输入缓存"); - map.put("blocked_clients", "正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量"); - map.put("used_memory", "由 Redis 分配器分配的内存总量,以字节(byte)为单位"); - map.put("used_memory_human", "以人类可读的格式返回 Redis 分配的内存总量"); - map.put("used_memory_rss", "从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致"); - map.put("used_memory_peak", " Redis 的内存消耗峰值(以字节为单位)"); - map.put("used_memory_peak_human", "以人类可读的格式返回 Redis 的内存消耗峰值"); - map.put("used_memory_lua", "Lua 引擎所使用的内存大小(以字节为单位)"); - map.put("mem_fragmentation_ratio", "sed_memory_rss 和 used_memory 之间的比率"); - map.put("mem_allocator", "在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc"); + static { + map.put("redis_version", "Redis 服务器版本"); + map.put("redis_git_sha1", "Git SHA1"); + map.put("redis_git_dirty", "Git dirty flag"); + map.put("os", "Redis 服务器的宿主操作系统"); + map.put("arch_bits", " 架构(32 或 64 位)"); + map.put("multiplexing_api", "Redis 所使用的事件处理机制"); + map.put("gcc_version", "编译 Redis 时所使用的 GCC 版本"); + map.put("process_id", "服务器进程的 PID"); + map.put("run_id", "Redis 服务器的随机标识符(用于 Sentinel 和集群)"); + map.put("tcp_port", "TCP/IP 监听端口"); + map.put("uptime_in_seconds", "自 Redis 服务器启动以来,经过的秒数"); + map.put("uptime_in_days", "自 Redis 服务器启动以来,经过的天数"); + map.put("lru_clock", " 以分钟为单位进行自增的时钟,用于 LRU 管理"); + map.put("connected_clients", "已连接客户端的数量(不包括通过从属服务器连接的客户端)"); + map.put("client_longest_output_list", "当前连接的客户端当中,最长的输出列表"); + map.put("client_longest_input_buf", "当前连接的客户端当中,最大输入缓存"); + map.put("blocked_clients", "正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量"); + map.put("used_memory", "由 Redis 分配器分配的内存总量,以字节(byte)为单位"); + map.put("used_memory_human", "以人类可读的格式返回 Redis 分配的内存总量"); + map.put("used_memory_rss", "从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致"); + map.put("used_memory_peak", " Redis 的内存消耗峰值(以字节为单位)"); + map.put("used_memory_peak_human", "以人类可读的格式返回 Redis 的内存消耗峰值"); + map.put("used_memory_lua", "Lua 引擎所使用的内存大小(以字节为单位)"); + map.put("mem_fragmentation_ratio", "sed_memory_rss 和 used_memory 之间的比率"); + map.put("mem_allocator", "在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc"); - map.put("redis_build_id", "redis_build_id"); - map.put("redis_mode", "运行模式,单机(standalone)或者集群(cluster)"); - map.put("atomicvar_api", "atomicvar_api"); - map.put("hz", "redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次。"); - map.put("executable", "server脚本目录"); - map.put("config_file", "配置文件目录"); - map.put("client_biggest_input_buf", "当前连接的客户端当中,最大输入缓存,用client list命令观察qbuf和qbuf-free两个字段最大值"); - map.put("used_memory_rss_human", "以人类可读的方式返回 Redis 已分配的内存总量"); - map.put("used_memory_peak_perc", "内存使用率峰值"); - map.put("total_system_memory", "系统总内存"); - map.put("total_system_memory_human", "以人类可读的方式返回系统总内存"); - map.put("used_memory_lua_human", "以人类可读的方式返回Lua 引擎所使用的内存大小"); - map.put("maxmemory", "最大内存限制,0表示无限制"); - map.put("maxmemory_human", "以人类可读的方式返回最大限制内存"); - map.put("maxmemory_policy", "超过内存限制后的处理策略"); - map.put("loading", "服务器是否正在载入持久化文件"); - map.put("rdb_changes_since_last_save", "离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化"); - map.put("rdb_bgsave_in_progress", "服务器是否正在创建rdb文件"); - map.put("rdb_last_save_time", "离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件"); - map.put("rdb_last_bgsave_status", "最近一次rdb持久化是否成功"); - map.put("rdb_last_bgsave_time_sec", "最近一次成功生成rdb文件耗时秒数"); - map.put("rdb_current_bgsave_time_sec", "如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数"); - map.put("aof_enabled", "是否开启了aof"); - map.put("aof_rewrite_in_progress", "标识aof的rewrite操作是否在进行中"); - map.put("aof_rewrite_scheduled", "rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite "); + map.put("redis_build_id", "redis_build_id"); + map.put("redis_mode", "运行模式,单机(standalone)或者集群(cluster)"); + map.put("atomicvar_api", "atomicvar_api"); + map.put("hz", "redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次。"); + map.put("executable", "server脚本目录"); + map.put("config_file", "配置文件目录"); + map.put("client_biggest_input_buf", "当前连接的客户端当中,最大输入缓存,用client list命令观察qbuf和qbuf-free两个字段最大值"); + map.put("used_memory_rss_human", "以人类可读的方式返回 Redis 已分配的内存总量"); + map.put("used_memory_peak_perc", "内存使用率峰值"); + map.put("total_system_memory", "系统总内存"); + map.put("total_system_memory_human", "以人类可读的方式返回系统总内存"); + map.put("used_memory_lua_human", "以人类可读的方式返回Lua 引擎所使用的内存大小"); + map.put("maxmemory", "最大内存限制,0表示无限制"); + map.put("maxmemory_human", "以人类可读的方式返回最大限制内存"); + map.put("maxmemory_policy", "超过内存限制后的处理策略"); + map.put("loading", "服务器是否正在载入持久化文件"); + map.put("rdb_changes_since_last_save", "离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化"); + map.put("rdb_bgsave_in_progress", "服务器是否正在创建rdb文件"); + map.put("rdb_last_save_time", "离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件"); + map.put("rdb_last_bgsave_status", "最近一次rdb持久化是否成功"); + map.put("rdb_last_bgsave_time_sec", "最近一次成功生成rdb文件耗时秒数"); + map.put("rdb_current_bgsave_time_sec", "如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数"); + map.put("aof_enabled", "是否开启了aof"); + map.put("aof_rewrite_in_progress", "标识aof的rewrite操作是否在进行中"); + map.put("aof_rewrite_scheduled", "rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite "); - map.put("aof_last_rewrite_time_sec", "最近一次aof rewrite耗费的时长"); - map.put("aof_current_rewrite_time_sec", "如果rewrite操作正在进行,则记录所使用的时间,单位秒"); - map.put("aof_last_bgrewrite_status", "上次bgrewrite aof操作的状态"); - map.put("aof_last_write_status", "上次aof写入状态"); + map.put("aof_last_rewrite_time_sec", "最近一次aof rewrite耗费的时长"); + map.put("aof_current_rewrite_time_sec", "如果rewrite操作正在进行,则记录所使用的时间,单位秒"); + map.put("aof_last_bgrewrite_status", "上次bgrewrite aof操作的状态"); + map.put("aof_last_write_status", "上次aof写入状态"); - map.put("total_commands_processed", "redis处理的命令数"); - map.put("total_connections_received", "新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置"); - map.put("instantaneous_ops_per_sec", "redis当前的qps,redis内部较实时的每秒执行的命令数"); - map.put("total_net_input_bytes", "redis网络入口流量字节数"); - map.put("total_net_output_bytes", "redis网络出口流量字节数"); + map.put("total_commands_processed", "redis处理的命令数"); + map.put("total_connections_received", "新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置"); + map.put("instantaneous_ops_per_sec", "redis当前的qps,redis内部较实时的每秒执行的命令数"); + map.put("total_net_input_bytes", "redis网络入口流量字节数"); + map.put("total_net_output_bytes", "redis网络出口流量字节数"); - map.put("instantaneous_input_kbps", "redis网络入口kps"); - map.put("instantaneous_output_kbps", "redis网络出口kps"); - map.put("rejected_connections", "拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数"); - map.put("sync_full", "主从完全同步成功次数"); + map.put("instantaneous_input_kbps", "redis网络入口kps"); + map.put("instantaneous_output_kbps", "redis网络出口kps"); + map.put("rejected_connections", "拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数"); + map.put("sync_full", "主从完全同步成功次数"); - map.put("sync_partial_ok", "主从部分同步成功次数"); - map.put("sync_partial_err", "主从部分同步失败次数"); - map.put("expired_keys", "运行以来过期的key的数量"); - map.put("evicted_keys", "运行以来剔除(超过了maxmemory后)的key的数量"); - map.put("keyspace_hits", "命中次数"); - map.put("keyspace_misses", "没命中次数"); - map.put("pubsub_channels", "当前使用中的频道数量"); - map.put("pubsub_patterns", "当前使用的模式的数量"); - map.put("latest_fork_usec", "最近一次fork操作阻塞redis进程的耗时数,单位微秒"); - map.put("role", "实例的角色,是master or slave"); - map.put("connected_slaves", "连接的slave实例个数"); - map.put("master_repl_offset", "主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟"); - map.put("repl_backlog_active", "复制积压缓冲区是否开启"); - map.put("repl_backlog_size", "复制积压缓冲大小"); - map.put("repl_backlog_first_byte_offset", "复制缓冲区里偏移量的大小"); - map.put("repl_backlog_histlen", "此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小"); - map.put("used_cpu_sys", "将所有redis主进程在核心态所占用的CPU时求和累计起来"); - map.put("used_cpu_user", "将所有redis主进程在用户态所占用的CPU时求和累计起来"); - map.put("used_cpu_sys_children", "将后台进程在核心态所占用的CPU时求和累计起来"); - map.put("used_cpu_user_children", "将后台进程在用户态所占用的CPU时求和累计起来"); - map.put("cluster_enabled", "实例是否启用集群模式"); - map.put("db0", "db0的key的数量,以及带有生存期的key的数,平均存活时间"); + map.put("sync_partial_ok", "主从部分同步成功次数"); + map.put("sync_partial_err", "主从部分同步失败次数"); + map.put("expired_keys", "运行以来过期的key的数量"); + map.put("evicted_keys", "运行以来剔除(超过了maxmemory后)的key的数量"); + map.put("keyspace_hits", "命中次数"); + map.put("keyspace_misses", "没命中次数"); + map.put("pubsub_channels", "当前使用中的频道数量"); + map.put("pubsub_patterns", "当前使用的模式的数量"); + map.put("latest_fork_usec", "最近一次fork操作阻塞redis进程的耗时数,单位微秒"); + map.put("role", "实例的角色,是master or slave"); + map.put("connected_slaves", "连接的slave实例个数"); + map.put("master_repl_offset", "主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟"); + map.put("repl_backlog_active", "复制积压缓冲区是否开启"); + map.put("repl_backlog_size", "复制积压缓冲大小"); + map.put("repl_backlog_first_byte_offset", "复制缓冲区里偏移量的大小"); + map.put("repl_backlog_histlen", "此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小"); + map.put("used_cpu_sys", "将所有redis主进程在核心态所占用的CPU时求和累计起来"); + map.put("used_cpu_user", "将所有redis主进程在用户态所占用的CPU时求和累计起来"); + map.put("used_cpu_sys_children", "将后台进程在核心态所占用的CPU时求和累计起来"); + map.put("used_cpu_user_children", "将后台进程在用户态所占用的CPU时求和累计起来"); + map.put("cluster_enabled", "实例是否启用集群模式"); + map.put("db0", "db0的key的数量,以及带有生存期的key的数,平均存活时间"); - } + } - private String key; - private String value; - private String description; + private String key; + private String value; + private String description; - public String getKey() { - return key; - } + public String getKey() { + return key; + } - public void setKey(String key) { - this.key = key; - this.description = map.get(this.key); - } + public void setKey(String key) { + this.key = key; + this.description = map.get(this.key); + } - public String getValue() { - return value; - } + public String getValue() { + return value; + } - public void setValue(String value) { - this.value = value; - } + public void setValue(String value) { + this.value = value; + } - public String getDescription() { - return description; - } + public String getDescription() { + return description; + } - public void setDescription(String description) { - this.description = description; - } + public void setDescription(String description) { + this.description = description; + } - @Override - public String toString() { - return "RedisInfo{" + "key='" + key + '\'' + ", value='" + value + '\'' + ", desctiption='" + description + '\'' + '}'; - } + @Override + public String toString() { + return "RedisInfo{" + "key='" + key + '\'' + ", value='" + value + '\'' + ", desctiption='" + description + '\'' + '}'; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/exception/RedisConnectException.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/exception/RedisConnectException.java index 0cc67b2..c0e67dd 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/exception/RedisConnectException.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/exception/RedisConnectException.java @@ -2,6 +2,7 @@ package org.jeecg.modules.monitor.exception; /** * Redis 连接异常 + * * @author: jeecg-boot */ public class RedisConnectException extends Exception { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/RedisService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/RedisService.java index 1eb17b5..b89db40 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/RedisService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/RedisService.java @@ -1,55 +1,57 @@ package org.jeecg.modules.monitor.service; -import java.util.List; -import java.util.Map; -import java.util.Set; - import com.alibaba.fastjson.JSONArray; import org.jeecg.modules.monitor.domain.RedisInfo; import org.jeecg.modules.monitor.exception.RedisConnectException; +import java.util.List; +import java.util.Map; + /** * @Description: redis信息service接口 * @author: jeecg-boot */ public interface RedisService { - /** - * 获取 redis 的详细信息 - * - * @return List + /** + * 获取 redis 的详细信息 + * + * @return List * @throws RedisConnectException - */ - List getRedisInfo() throws RedisConnectException; + */ + List getRedisInfo() throws RedisConnectException; - /** - * 获取 redis key 数量 - * - * @return Map + /** + * 获取 redis key 数量 + * + * @return Map * @throws RedisConnectException - */ - Map getKeysSize() throws RedisConnectException; + */ + Map getKeysSize() throws RedisConnectException; - /** - * 获取 redis 内存信息 - * - * @return Map + /** + * 获取 redis 内存信息 + * + * @return Map * @throws RedisConnectException - */ - Map getMemoryInfo() throws RedisConnectException; - /** - * 获取 报表需要个redis信息 - * @param type - * @return Map - * @throws RedisConnectException - */ - Map getMapForReport(String type) throws RedisConnectException ; + */ + Map getMemoryInfo() throws RedisConnectException; - /** - * 获取历史性能指标 - * @return - * @author chenrui - * @date 2024/5/14 14:57 - */ - Map>> getMetricsHistory(); + /** + * 获取 报表需要个redis信息 + * + * @param type + * @return Map + * @throws RedisConnectException + */ + Map getMapForReport(String type) throws RedisConnectException; + + /** + * 获取历史性能指标 + * + * @return + * @author chenrui + * @date 2024/5/14 14:57 + */ + Map>> getMetricsHistory(); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/impl/MailHealthIndicator.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/impl/MailHealthIndicator.java index ea86410..2dc0587 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/impl/MailHealthIndicator.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/impl/MailHealthIndicator.java @@ -15,14 +15,16 @@ import org.springframework.stereotype.Component; public class MailHealthIndicator implements HealthIndicator { - @Override public Health health() { + @Override + public Health health() { int errorCode = check(); if (errorCode != 0) { - return Health.down().withDetail("Error Code", errorCode) .build(); + return Health.down().withDetail("Error Code", errorCode).build(); } return Health.up().build(); } - int check(){ + + int check() { //可以实现自定义的数据库检测逻辑 return 0; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/impl/RedisServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/impl/RedisServiceImpl.java index bdeaa24..30587ca 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/impl/RedisServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/monitor/service/impl/RedisServiceImpl.java @@ -1,13 +1,11 @@ package org.jeecg.modules.monitor.service.impl; -import java.util.*; - -import jakarta.annotation.Resource; - import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Maps; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.monitor.domain.RedisInfo; import org.jeecg.modules.monitor.exception.RedisConnectException; @@ -17,7 +15,7 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; -import lombok.extern.slf4j.Slf4j; +import java.util.*; /** * Redis 监控信息获取 @@ -28,147 +26,151 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class RedisServiceImpl implements RedisService { - @Resource - private RedisConnectionFactory redisConnectionFactory; + @Resource + private RedisConnectionFactory redisConnectionFactory; /** * redis信息 */ private static final String REDIS_MESSAGE = "3"; - /** - * redis性能信息记录 - */ - private static final Map>> REDIS_METRICS = new HashMap<>(2); + /** + * redis性能信息记录 + */ + private static final Map>> REDIS_METRICS = new HashMap<>(2); - /** - * Redis详细信息 - */ - @Override - public List getRedisInfo() throws RedisConnectException { - Properties info = redisConnectionFactory.getConnection().info(); - List infoList = new ArrayList<>(); - RedisInfo redisInfo = null; - for (Map.Entry entry : info.entrySet()) { - redisInfo = new RedisInfo(); - redisInfo.setKey(oConvertUtils.getString(entry.getKey())); - redisInfo.setValue(oConvertUtils.getString(entry.getValue())); - infoList.add(redisInfo); - } - return infoList; - } + /** + * Redis详细信息 + */ + @Override + public List getRedisInfo() throws RedisConnectException { + Properties info = redisConnectionFactory.getConnection().info(); + List infoList = new ArrayList<>(); + RedisInfo redisInfo = null; + for (Map.Entry entry : info.entrySet()) { + redisInfo = new RedisInfo(); + redisInfo.setKey(oConvertUtils.getString(entry.getKey())); + redisInfo.setValue(oConvertUtils.getString(entry.getValue())); + infoList.add(redisInfo); + } + return infoList; + } - @Override - public Map getKeysSize() throws RedisConnectException { - Long dbSize = redisConnectionFactory.getConnection().dbSize(); - Map map = new HashMap(5); - map.put("create_time", System.currentTimeMillis()); - map.put("dbSize", dbSize); + @Override + public Map getKeysSize() throws RedisConnectException { + Long dbSize = redisConnectionFactory.getConnection().dbSize(); + Map map = new HashMap(5); + map.put("create_time", System.currentTimeMillis()); + map.put("dbSize", dbSize); - log.debug("--getKeysSize--: " + map.toString()); - return map; - } + log.debug("--getKeysSize--: " + map.toString()); + return map; + } - @Override - public Map getMemoryInfo() throws RedisConnectException { - Map map = null; - Properties info = redisConnectionFactory.getConnection().info(); - for (Map.Entry entry : info.entrySet()) { - String key = oConvertUtils.getString(entry.getKey()); - if ("used_memory".equals(key)) { - map = new HashMap(5); - map.put("used_memory", entry.getValue()); - map.put("create_time", System.currentTimeMillis()); - } - } - log.debug("--getMemoryInfo--: " + map.toString()); - return map; - } + @Override + public Map getMemoryInfo() throws RedisConnectException { + Map map = null; + Properties info = redisConnectionFactory.getConnection().info(); + for (Map.Entry entry : info.entrySet()) { + String key = oConvertUtils.getString(entry.getKey()); + if ("used_memory".equals(key)) { + map = new HashMap(5); + map.put("used_memory", entry.getValue()); + map.put("create_time", System.currentTimeMillis()); + } + } + log.debug("--getMemoryInfo--: " + map.toString()); + return map; + } /** * 查询redis信息for报表 + * * @param type 1redis key数量 2 占用内存 3redis信息 * @return * @throws RedisConnectException */ - @Override - public Map getMapForReport(String type) throws RedisConnectException { - Map mapJson=new HashMap(5); - JSONArray json = new JSONArray(); - if(REDIS_MESSAGE.equals(type)){ - List redisInfo = getRedisInfo(); - for(RedisInfo info:redisInfo){ - Map map= Maps.newHashMap(); - BeanMap beanMap = BeanMap.create(info); - for (Object key : beanMap.keySet()) { - map.put(key+"", beanMap.get(key)); - } - json.add(map); - } - mapJson.put("data",json); - return mapJson; - } - int length = 5; - for(int i = 0; i < length; i++){ - JSONObject jo = new JSONObject(); - Map map; - if("1".equals(type)){ - map= getKeysSize(); - jo.put("value",map.get("dbSize")); - }else{ - map = getMemoryInfo(); - Integer usedMemory = Integer.valueOf(map.get("used_memory").toString()); - jo.put("value",usedMemory/1000); - } - String createTime = DateUtil.formatTime(DateUtil.date((Long) map.get("create_time")-(4-i)*1000)); - jo.put("name",createTime); - json.add(jo); - } - mapJson.put("data",json); - return mapJson; - } + @Override + public Map getMapForReport(String type) throws RedisConnectException { + Map mapJson = new HashMap(5); + JSONArray json = new JSONArray(); + if (REDIS_MESSAGE.equals(type)) { + List redisInfo = getRedisInfo(); + for (RedisInfo info : redisInfo) { + Map map = Maps.newHashMap(); + BeanMap beanMap = BeanMap.create(info); + for (Object key : beanMap.keySet()) { + map.put(key + "", beanMap.get(key)); + } + json.add(map); + } + mapJson.put("data", json); + return mapJson; + } + int length = 5; + for (int i = 0; i < length; i++) { + JSONObject jo = new JSONObject(); + Map map; + if ("1".equals(type)) { + map = getKeysSize(); + jo.put("value", map.get("dbSize")); + } else { + map = getMemoryInfo(); + Integer usedMemory = Integer.valueOf(map.get("used_memory").toString()); + jo.put("value", usedMemory / 1000); + } + String createTime = DateUtil.formatTime(DateUtil.date((Long) map.get("create_time") - (4 - i) * 1000)); + jo.put("name", createTime); + json.add(jo); + } + mapJson.put("data", json); + return mapJson; + } - //update-begin---author:chenrui ---date:20240514 for:[QQYUN-9247]系统监控功能优化------------ - /** - * 获取历史性能指标 - * @return - * @author chenrui - * @date 2024/5/14 14:57 - */ - @Override - public Map>> getMetricsHistory() { - return REDIS_METRICS; - } + //update-begin---author:chenrui ---date:20240514 for:[QQYUN-9247]系统监控功能优化------------ - /** - * 记录近一小时redis监控数据
- * 60s一次,,记录存储keysize和内存 - * @throws RedisConnectException - * @author chenrui - * @date 2024/5/14 14:09 - */ - @Scheduled(fixedRate = 60000) - public void recordCustomMetric() throws RedisConnectException { - List> list= new ArrayList<>(); - if(REDIS_METRICS.containsKey("dbSize")){ - list = REDIS_METRICS.get("dbSize"); - }else{ - REDIS_METRICS.put("dbSize",list); - } - if(list.size()>60){ - list.remove(0); - } - list.add(getKeysSize()); - list= new ArrayList<>(); - if(REDIS_METRICS.containsKey("memory")){ - list = REDIS_METRICS.get("memory"); - }else{ - REDIS_METRICS.put("memory",list); - } - if(list.size()>60){ - list.remove(0); - } - list.add(getMemoryInfo()); - } - //update-end---author:chenrui ---date:20240514 for:[QQYUN-9247]系统监控功能优化------------ + /** + * 获取历史性能指标 + * + * @return + * @author chenrui + * @date 2024/5/14 14:57 + */ + @Override + public Map>> getMetricsHistory() { + return REDIS_METRICS; + } + + /** + * 记录近一小时redis监控数据
+ * 60s一次,,记录存储keysize和内存 + * + * @throws RedisConnectException + * @author chenrui + * @date 2024/5/14 14:09 + */ + @Scheduled(fixedRate = 60000) + public void recordCustomMetric() throws RedisConnectException { + List> list = new ArrayList<>(); + if (REDIS_METRICS.containsKey("dbSize")) { + list = REDIS_METRICS.get("dbSize"); + } else { + REDIS_METRICS.put("dbSize", list); + } + if (list.size() > 60) { + list.remove(0); + } + list.add(getKeysSize()); + list = new ArrayList<>(); + if (REDIS_METRICS.containsKey("memory")) { + list = REDIS_METRICS.get("memory"); + } else { + REDIS_METRICS.put("memory", list); + } + if (list.size() > 60) { + list.remove(0); + } + list.add(getMemoryInfo()); + } + //update-end---author:chenrui ---date:20240514 for:[QQYUN-9247]系统监控功能优化------------ } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/aop/LogRecordAspect.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/aop/LogRecordAspect.java index c625318..fa189fa 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/aop/LogRecordAspect.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/aop/LogRecordAspect.java @@ -14,9 +14,9 @@ //import org.slf4j.LoggerFactory;; // // -//// 暂时注释掉,提高系统性能 -////@Aspect //定义一个切面 -////@Configuration +/// / 暂时注释掉,提高系统性能 +/// /@Aspect //定义一个切面 +/// /@Configuration //public class LogRecordAspect { //private static final Logger logger = LoggerFactory.getLogger(LogRecordAspect.class); // diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/service/NgAlainService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/service/NgAlainService.java index 07ddf19..8102cda 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/service/NgAlainService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/service/NgAlainService.java @@ -5,7 +5,7 @@ //import java.util.List; //import java.util.Map; // -///** +/// ** // * @Description: NgAlainService接口 // * @author: jeecg-boot // */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/service/impl/NgAlainServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/service/impl/NgAlainServiceImpl.java index be7632d..3d7f05b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/service/impl/NgAlainServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/ngalain/service/impl/NgAlainServiceImpl.java @@ -17,7 +17,7 @@ //import java.util.List; //import java.util.Map; // -///** +/// ** // * @Description: NgAlainServiceImpl 实现类 // * @author: jeecg-boot // */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/entity/OssFile.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/entity/OssFile.java index ba4e073..c9a1ef2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/entity/OssFile.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/entity/OssFile.java @@ -17,12 +17,12 @@ import org.jeecgframework.poi.excel.annotation.Excel; @Accessors(chain = true) public class OssFile extends JeecgEntity { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - @Excel(name = "文件名称") - private String fileName; + @Excel(name = "文件名称") + private String fileName; - @Excel(name = "文件地址") - private String url; + @Excel(name = "文件地址") + private String url; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/service/IOssFileService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/service/IOssFileService.java index 815d7c4..4951aea 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/service/IOssFileService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/service/IOssFileService.java @@ -1,11 +1,11 @@ package org.jeecg.modules.oss.service; -import java.io.IOException; - import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.oss.entity.OssFile; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; + /** * @Description: OOS云存储service接口 * @author: jeecg-boot @@ -14,16 +14,18 @@ public interface IOssFileService extends IService { /** * oss文件上传 + * * @param multipartFile * @throws IOException */ - void upload(MultipartFile multipartFile) throws Exception; + void upload(MultipartFile multipartFile) throws Exception; /** * oss文件删除 + * * @param ossFile OSSFile对象 * @return */ - boolean delete(OssFile ossFile); + boolean delete(OssFile ossFile); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/service/impl/OssFileServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/service/impl/OssFileServiceImpl.java index e69f3c6..b182822 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/service/impl/OssFileServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/oss/service/impl/OssFileServiceImpl.java @@ -11,8 +11,6 @@ import org.jeecg.modules.oss.service.IOssFileService; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; - /** * @Description: OSS云存储实现类 * @author: jeecg-boot @@ -20,34 +18,33 @@ import java.io.IOException; @Service("ossFileService") public class OssFileServiceImpl extends ServiceImpl implements IOssFileService { - @Override - public void upload(MultipartFile multipartFile) throws Exception { - String fileName = multipartFile.getOriginalFilename(); - fileName = CommonUtils.getFileName(fileName); - OssFile ossFile = new OssFile(); - ossFile.setFileName(fileName); - String url = OssBootUtil.upload(multipartFile,"upload/test"); - if(oConvertUtils.isEmpty(url)){ - throw new JeecgBootException("上传文件失败! "); - } - //update-begin--Author:scott Date:20201227 for:JT-361【文件预览】阿里云原生域名可以文件预览,自己映射域名kkfileview提示文件下载失败------------------- - // 返回阿里云原生域名前缀URL - ossFile.setUrl(OssBootUtil.getOriginalUrl(url)); - //update-end--Author:scott Date:20201227 for:JT-361【文件预览】阿里云原生域名可以文件预览,自己映射域名kkfileview提示文件下载失败------------------- - this.save(ossFile); - } + @Override + public void upload(MultipartFile multipartFile) throws Exception { + String fileName = multipartFile.getOriginalFilename(); + fileName = CommonUtils.getFileName(fileName); + OssFile ossFile = new OssFile(); + ossFile.setFileName(fileName); + String url = OssBootUtil.upload(multipartFile, "upload/test"); + if (oConvertUtils.isEmpty(url)) { + throw new JeecgBootException("上传文件失败! "); + } + //update-begin--Author:scott Date:20201227 for:JT-361【文件预览】阿里云原生域名可以文件预览,自己映射域名kkfileview提示文件下载失败------------------- + // 返回阿里云原生域名前缀URL + ossFile.setUrl(OssBootUtil.getOriginalUrl(url)); + //update-end--Author:scott Date:20201227 for:JT-361【文件预览】阿里云原生域名可以文件预览,自己映射域名kkfileview提示文件下载失败------------------- + this.save(ossFile); + } - @Override - public boolean delete(OssFile ossFile) { - try { - this.removeById(ossFile.getId()); - OssBootUtil.deleteUrl(ossFile.getUrl()); - } - catch (Exception ex) { - log.error(ex.getMessage(),ex); - return false; - } - return true; - } + @Override + public boolean delete(OssFile ossFile) { + try { + this.removeById(ossFile.getId()); + OssBootUtil.deleteUrl(ossFile.getUrl()); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + return false; + } + return true; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java index 3c625e4..6d2854c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/controller/QuartzJobController.java @@ -5,10 +5,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.apache.shiro.authz.annotation.RequiresRoles; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.SymbolConstant; @@ -30,8 +31,6 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -49,244 +48,245 @@ import java.util.Map; @Slf4j @Tag(name = "定时任务接口") public class QuartzJobController { - @Autowired - private IQuartzJobService quartzJobService; - @Autowired - private Scheduler scheduler; + @Autowired + private IQuartzJobService quartzJobService; + @Autowired + private Scheduler scheduler; - /** - * 分页列表查询 - * - * @param quartzJob - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result queryPageList(QuartzJob quartzJob, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(quartzJob, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = quartzJobService.page(page, queryWrapper); + /** + * 分页列表查询 + * + * @param quartzJob + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result queryPageList(QuartzJob quartzJob, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(quartzJob, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = quartzJobService.page(page, queryWrapper); return Result.ok(pageList); - } + } - /** - * 添加定时任务 - * - * @param quartzJob - * @return - */ - //@RequiresRoles("admin") + /** + * 添加定时任务 + * + * @param quartzJob + * @return + */ + //@RequiresRoles("admin") @RequiresPermissions("system:quartzJob:add") - @RequestMapping(value = "/add", method = RequestMethod.POST) - public Result add(@RequestBody QuartzJob quartzJob) { - quartzJobService.saveAndScheduleJob(quartzJob); - return Result.ok("创建定时任务成功"); - } + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody QuartzJob quartzJob) { + quartzJobService.saveAndScheduleJob(quartzJob); + return Result.ok("创建定时任务成功"); + } - /** - * 更新定时任务 - * - * @param quartzJob - * @return - */ - //@RequiresRoles("admin") + /** + * 更新定时任务 + * + * @param quartzJob + * @return + */ + //@RequiresRoles("admin") @RequiresPermissions("system:quartzJob:edit") - @RequestMapping(value = "/edit", method ={RequestMethod.PUT, RequestMethod.POST}) - public Result eidt(@RequestBody QuartzJob quartzJob) { - try { - quartzJobService.editAndScheduleJob(quartzJob); - } catch (SchedulerException e) { - log.error(e.getMessage(),e); - return Result.error("更新定时任务失败!"); - } - return Result.ok("更新定时任务成功!"); - } + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result eidt(@RequestBody QuartzJob quartzJob) { + try { + quartzJobService.editAndScheduleJob(quartzJob); + } catch (SchedulerException e) { + log.error(e.getMessage(), e); + return Result.error("更新定时任务失败!"); + } + return Result.ok("更新定时任务成功!"); + } - /** - * 通过id删除 - * - * @param id - * @return - */ - //@RequiresRoles("admin") + /** + * 通过id删除 + * + * @param id + * @return + */ + //@RequiresRoles("admin") @RequiresPermissions("system:quartzJob:delete") - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name = "id", required = true) String id) { - QuartzJob quartzJob = quartzJobService.getById(id); - if (quartzJob == null) { - return Result.error("未找到对应实体"); - } - quartzJobService.deleteAndStopJob(quartzJob); + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name = "id", required = true) String id) { + QuartzJob quartzJob = quartzJobService.getById(id); + if (quartzJob == null) { + return Result.error("未找到对应实体"); + } + quartzJobService.deleteAndStopJob(quartzJob); return Result.ok("删除成功!"); - } + } - /** - * 批量删除 - * - * @param ids - * @return - */ - //@RequiresRoles("admin") + /** + * 批量删除 + * + * @param ids + * @return + */ + //@RequiresRoles("admin") @RequiresPermissions("system:quartzJob:deleteBatch") - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { - if (ids == null || "".equals(ids.trim())) { - return Result.error("参数不识别!"); - } - for (String id : Arrays.asList(ids.split(SymbolConstant.COMMA))) { - QuartzJob job = quartzJobService.getById(id); - quartzJobService.deleteAndStopJob(job); - } + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + if (ids == null || "".equals(ids.trim())) { + return Result.error("参数不识别!"); + } + for (String id : Arrays.asList(ids.split(SymbolConstant.COMMA))) { + QuartzJob job = quartzJobService.getById(id); + quartzJobService.deleteAndStopJob(job); + } return Result.ok("删除定时任务成功!"); - } + } - /** - * 暂停定时任务 - * - * @param id - * @return - */ - //@RequiresRoles("admin") + /** + * 暂停定时任务 + * + * @param id + * @return + */ + //@RequiresRoles("admin") @RequiresPermissions("system:quartzJob:pause") - @GetMapping(value = "/pause") - @Operation(summary = "停止定时任务") - public Result pauseJob(@RequestParam(name = "id") String id) { - QuartzJob job = quartzJobService.getById(id); - if (job == null) { - return Result.error("定时任务不存在!"); - } - quartzJobService.pause(job); - return Result.ok("停止定时任务成功"); - } + @GetMapping(value = "/pause") + @Operation(summary = "停止定时任务") + public Result pauseJob(@RequestParam(name = "id") String id) { + QuartzJob job = quartzJobService.getById(id); + if (job == null) { + return Result.error("定时任务不存在!"); + } + quartzJobService.pause(job); + return Result.ok("停止定时任务成功"); + } - /** - * 启动定时任务 - * - * @param id - * @return - */ - //@RequiresRoles("admin") + /** + * 启动定时任务 + * + * @param id + * @return + */ + //@RequiresRoles("admin") @RequiresPermissions("system:quartzJob:resume") - @GetMapping(value = "/resume") - @Operation(summary = "启动定时任务") - public Result resumeJob(@RequestParam(name = "id") String id) { - QuartzJob job = quartzJobService.getById(id); - if (job == null) { - return Result.error("定时任务不存在!"); - } - quartzJobService.resumeJob(job); - //scheduler.resumeJob(JobKey.jobKey(job.getJobClassName().trim())); - return Result.ok("启动定时任务成功"); - } + @GetMapping(value = "/resume") + @Operation(summary = "启动定时任务") + public Result resumeJob(@RequestParam(name = "id") String id) { + QuartzJob job = quartzJobService.getById(id); + if (job == null) { + return Result.error("定时任务不存在!"); + } + quartzJobService.resumeJob(job); + //scheduler.resumeJob(JobKey.jobKey(job.getJobClassName().trim())); + return Result.ok("启动定时任务成功"); + } - /** - * 通过id查询 - * - * @param id - * @return - */ - @RequestMapping(value = "/queryById", method = RequestMethod.GET) - public Result queryById(@RequestParam(name = "id", required = true) String id) { - QuartzJob quartzJob = quartzJobService.getById(id); + /** + * 通过id查询 + * + * @param id + * @return + */ + @RequestMapping(value = "/queryById", method = RequestMethod.GET) + public Result queryById(@RequestParam(name = "id", required = true) String id) { + QuartzJob quartzJob = quartzJobService.getById(id); return Result.ok(quartzJob); - } + } - /** - * 导出excel - * - * @param request - * @param quartzJob - */ - @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(HttpServletRequest request, QuartzJob quartzJob) { - // Step.1 组装查询条件 - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(quartzJob, request.getParameterMap()); - // Step.2 AutoPoi 导出Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - List pageList = quartzJobService.list(queryWrapper); - // 导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "定时任务列表"); - mv.addObject(NormalExcelConstants.CLASS, QuartzJob.class); + /** + * 导出excel + * + * @param request + * @param quartzJob + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, QuartzJob quartzJob) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(quartzJob, request.getParameterMap()); + // Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List pageList = quartzJobService.list(queryWrapper); + // 导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "定时任务列表"); + mv.addObject(NormalExcelConstants.CLASS, QuartzJob.class); //获取当前登录用户 //update-begin---author:wangshuai ---date:20211227 for:[JTC-116]导出人写死了------------ LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("定时任务列表数据", "导出人:"+user.getRealname(), "导出信息")); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("定时任务列表数据", "导出人:" + user.getRealname(), "导出信息")); //update-end---author:wangshuai ---date:20211227 for:[JTC-116]导出人写死了------------ mv.addObject(NormalExcelConstants.DATA_LIST, pageList); - return mv; - } + return mv; + } - /** - * 通过excel导入数据 - * - * @param request - * @param response - * @return - */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); - // 错误信息 - List errorMessage = new ArrayList<>(); - int successLines = 0, errorLines = 0; - for (Map.Entry entity : fileMap.entrySet()) { + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + // 错误信息 + List errorMessage = new ArrayList<>(); + int successLines = 0, errorLines = 0; + for (Map.Entry entity : fileMap.entrySet()) { // 获取上传文件对象 - MultipartFile file = entity.getValue(); - ImportParams params = new ImportParams(); - params.setTitleRows(2); - params.setHeadRows(1); - params.setNeedSave(true); - try { - List listQuartzJobs = ExcelImportUtil.importExcel(file.getInputStream(), QuartzJob.class, params); - //add-begin-author:taoyan date:20210909 for:导入定时任务,并不会被启动和调度,需要手动点击启动,才会加入调度任务中 #2986 - for(QuartzJob job: listQuartzJobs){ - job.setStatus(CommonConstant.STATUS_DISABLE); - } - List list = ImportExcelUtil.importDateSave(listQuartzJobs, IQuartzJobService.class, errorMessage,CommonConstant.SQL_INDEX_UNIQ_JOB_CLASS_NAME); - //add-end-author:taoyan date:20210909 for:导入定时任务,并不会被启动和调度,需要手动点击启动,才会加入调度任务中 #2986 - errorLines+=list.size(); - successLines+=(listQuartzJobs.size()-errorLines); - } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("文件导入失败!"); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); - } + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List listQuartzJobs = ExcelImportUtil.importExcel(file.getInputStream(), QuartzJob.class, params); + //add-begin-author:taoyan date:20210909 for:导入定时任务,并不会被启动和调度,需要手动点击启动,才会加入调度任务中 #2986 + for (QuartzJob job : listQuartzJobs) { + job.setStatus(CommonConstant.STATUS_DISABLE); + } + List list = ImportExcelUtil.importDateSave(listQuartzJobs, IQuartzJobService.class, errorMessage, CommonConstant.SQL_INDEX_UNIQ_JOB_CLASS_NAME); + //add-end-author:taoyan date:20210909 for:导入定时任务,并不会被启动和调度,需要手动点击启动,才会加入调度任务中 #2986 + errorLines += list.size(); + successLines += (listQuartzJobs.size() - errorLines); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("文件导入失败!"); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return ImportExcelUtil.imporReturnRes(errorLines, successLines, errorMessage); + } - /** - * 立即执行 - * @param id - * @return - */ - //@RequiresRoles("admin") + /** + * 立即执行 + * + * @param id + * @return + */ + //@RequiresRoles("admin") @RequiresPermissions("system:quartzJob:execute") - @GetMapping("/execute") - public Result execute(@RequestParam(name = "id", required = true) String id) { - QuartzJob quartzJob = quartzJobService.getById(id); - if (quartzJob == null) { - return Result.error("未找到对应实体"); - } - try { - quartzJobService.execute(quartzJob); - } catch (Exception e) { - //e.printStackTrace(); - log.info("定时任务 立即执行失败>>"+e.getMessage()); - return Result.error("执行失败!"); - } - return Result.ok("执行成功!"); - } + @GetMapping("/execute") + public Result execute(@RequestParam(name = "id", required = true) String id) { + QuartzJob quartzJob = quartzJobService.getById(id); + if (quartzJob == null) { + return Result.error("未找到对应实体"); + } + try { + quartzJobService.execute(quartzJob); + } catch (Exception e) { + //e.printStackTrace(); + log.info("定时任务 立即执行失败>>" + e.getMessage()); + return Result.error("执行失败!"); + } + return Result.ok("执行成功!"); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/entity/QuartzJob.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/entity/QuartzJob.java index 9fd7e02..de53065 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/entity/QuartzJob.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/entity/QuartzJob.java @@ -1,62 +1,81 @@ package org.jeecg.modules.quartz.entity; -import java.io.Serializable; - +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; import org.jeecg.common.aspect.annotation.Dict; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.fasterxml.jackson.annotation.JsonFormat; - -import lombok.Data; +import java.io.Serializable; /** * @Description: 定时任务在线管理 * @Author: jeecg-boot - * @Date: 2019-01-02 + * @Date: 2019-01-02 * @Version: V1.0 */ @Data @TableName("sys_quartz_job") public class QuartzJob implements Serializable { private static final long serialVersionUID = 1L; - - /**id*/ - @TableId(type = IdType.ASSIGN_ID) - private java.lang.String id; - /**创建人*/ - private java.lang.String createBy; - /**创建时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date createTime; - /**删除状态*/ - private java.lang.Integer delFlag; - /**修改人*/ - private java.lang.String updateBy; - /**修改时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date updateTime; - /**任务类名*/ - @Excel(name="任务类名",width=40) - private java.lang.String jobClassName; - /**cron表达式*/ - @Excel(name="cron表达式",width=30) - private java.lang.String cronExpression; - /**参数*/ - @Excel(name="参数",width=15) - private java.lang.String parameter; - /**描述*/ - @Excel(name="描述",width=40) - private java.lang.String description; - /**状态 0正常 -1停止*/ - @Excel(name="状态",width=15,dicCode="quartz_status") - @Dict(dicCode = "quartz_status") - private java.lang.Integer status; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /** + * 创建人 + */ + private java.lang.String createBy; + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /** + * 删除状态 + */ + private java.lang.Integer delFlag; + /** + * 修改人 + */ + private java.lang.String updateBy; + /** + * 修改时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /** + * 任务类名 + */ + @Excel(name = "任务类名", width = 40) + private java.lang.String jobClassName; + /** + * cron表达式 + */ + @Excel(name = "cron表达式", width = 30) + private java.lang.String cronExpression; + /** + * 参数 + */ + @Excel(name = "参数", width = 15) + private java.lang.String parameter; + /** + * 描述 + */ + @Excel(name = "描述", width = 40) + private java.lang.String description; + /** + * 状态 0正常 -1停止 + */ + @Excel(name = "状态", width = 15, dicCode = "quartz_status") + @Dict(dicCode = "quartz_status") + private java.lang.Integer status; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/AsyncJob.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/AsyncJob.java index 61b9dcf..78b1843 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/AsyncJob.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/AsyncJob.java @@ -6,11 +6,9 @@ import org.quartz.*; /** * @Description: 同步定时任务测试 - * + *

* 此处的同步是指 当定时任务的执行时间大于任务的时间间隔时 * 会等待第一个任务执行完成才会走第二个任务 - * - * * @author: taoyan * @date: 2020年06月19日 */ @@ -29,7 +27,7 @@ public class AsyncJob implements Job { e.printStackTrace(); } //测试发现 每5秒执行一次 - log.info(" --- 执行完毕,时间:"+DateUtils.now()+"---"); + log.info(" --- 执行完毕,时间:" + DateUtils.now() + "---"); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/SampleJob.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/SampleJob.java index db37777..81cc167 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/SampleJob.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/SampleJob.java @@ -1,23 +1,22 @@ package org.jeecg.modules.quartz.job; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.util.DateUtils; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; -import lombok.extern.slf4j.Slf4j; - /** * 示例不带参定时任务 - * + * * @Author Scott */ @Slf4j public class SampleJob implements Job { - @Override - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - log.info(" Job Execution key:"+jobExecutionContext.getJobDetail().getKey()); - log.info(String.format(" Jeecg-Boot 普通定时任务 SampleJob ! 时间:" + DateUtils.getTimestamp())); - } + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + log.info(" Job Execution key:" + jobExecutionContext.getJobDetail().getKey()); + log.info(String.format(" Jeecg-Boot 普通定时任务 SampleJob ! 时间:" + DateUtils.getTimestamp())); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/SampleParamJob.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/SampleParamJob.java index db2a71c..3cc1f30 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/SampleParamJob.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/job/SampleParamJob.java @@ -1,32 +1,31 @@ package org.jeecg.modules.quartz.job; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.util.DateUtils; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; -import lombok.extern.slf4j.Slf4j; - /** * 示例带参定时任务 - * + * * @Author Scott */ @Slf4j public class SampleParamJob implements Job { - /** - * 若参数变量名修改 QuartzJobController中也需对应修改 - */ - private String parameter; + /** + * 若参数变量名修改 QuartzJobController中也需对应修改 + */ + private String parameter; - public void setParameter(String parameter) { - this.parameter = parameter; - } + public void setParameter(String parameter) { + this.parameter = parameter; + } - @Override - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - log.info(" Job Execution key:"+jobExecutionContext.getJobDetail().getKey()); - log.info( String.format("welcome %s! Jeecg-Boot 带参数定时任务 SampleParamJob ! 时间:" + DateUtils.now(), this.parameter)); - } + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + log.info(" Job Execution key:" + jobExecutionContext.getJobDetail().getKey()); + log.info(String.format("welcome %s! Jeecg-Boot 带参数定时任务 SampleParamJob ! 时间:" + DateUtils.now(), this.parameter)); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java index a84c3c6..8c08eec 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/mapper/QuartzJobMapper.java @@ -1,25 +1,25 @@ package org.jeecg.modules.quartz.mapper; -import java.util.List; - +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.quartz.entity.QuartzJob; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; /** * @Description: 定时任务在线管理 * @Author: jeecg-boot - * @Date: 2019-01-02 + * @Date: 2019-01-02 * @Version: V1.0 */ public interface QuartzJobMapper extends BaseMapper { /** * 根据jobClassName查询 + * * @param jobClassName 任务类名 * @return */ - public List findByJobClassName(@Param("jobClassName") String jobClassName); + public List findByJobClassName(@Param("jobClassName") String jobClassName); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java index cf90d13..70230f9 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/service/IQuartzJobService.java @@ -1,11 +1,10 @@ package org.jeecg.modules.quartz.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.quartz.entity.QuartzJob; import org.quartz.SchedulerException; -import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; /** * @Description: 定时任务在线管理 @@ -17,51 +16,58 @@ public interface IQuartzJobService extends IService { /** * 通过类名寻找定时任务 + * * @param jobClassName 类名 * @return List */ - List findByJobClassName(String jobClassName); + List findByJobClassName(String jobClassName); /** * 保存定时任务 + * * @param quartzJob * @return boolean */ - boolean saveAndScheduleJob(QuartzJob quartzJob); + boolean saveAndScheduleJob(QuartzJob quartzJob); /** * 编辑定时任务 + * * @param quartzJob * @return boolean * @throws SchedulerException */ - boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException; + boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException; /** * 删除定时任务 + * * @param quartzJob * @return boolean */ - boolean deleteAndStopJob(QuartzJob quartzJob); + boolean deleteAndStopJob(QuartzJob quartzJob); /** * 恢复定时任务 + * * @param quartzJob * @return */ - boolean resumeJob(QuartzJob quartzJob); + boolean resumeJob(QuartzJob quartzJob); - /** - * 执行定时任务 - * @param quartzJob + /** + * 执行定时任务 + * + * @param quartzJob * @throws Exception - */ - void execute(QuartzJob quartzJob) throws Exception; + */ + void execute(QuartzJob quartzJob) throws Exception; - /** - * 暂停任务 - * @param quartzJob - * @throws SchedulerException - */ - void pause(QuartzJob quartzJob); + /** + * 暂停任务 + * + * @param quartzJob + * @throws SchedulerException + */ + void pause(QuartzJob quartzJob); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java index 67e8b52..b601e6e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/quartz/service/impl/QuartzJobServiceImpl.java @@ -25,159 +25,160 @@ import java.util.List; @Slf4j @Service public class QuartzJobServiceImpl extends ServiceImpl implements IQuartzJobService { - @Autowired - private QuartzJobMapper quartzJobMapper; - @Autowired - private Scheduler scheduler; + @Autowired + private QuartzJobMapper quartzJobMapper; + @Autowired + private Scheduler scheduler; - /** - * 立即执行的任务分组 - */ - private static final String JOB_TEST_GROUP = "test_group"; + /** + * 立即执行的任务分组 + */ + private static final String JOB_TEST_GROUP = "test_group"; - @Override - public List findByJobClassName(String jobClassName) { - return quartzJobMapper.findByJobClassName(jobClassName); - } + @Override + public List findByJobClassName(String jobClassName) { + return quartzJobMapper.findByJobClassName(jobClassName); + } - /** - * 保存&启动定时任务 - */ - @Override - @Transactional(rollbackFor = JeecgBootException.class) - public boolean saveAndScheduleJob(QuartzJob quartzJob) { - // DB设置修改 - quartzJob.setDelFlag(CommonConstant.DEL_FLAG_0); - boolean success = this.save(quartzJob); - if (success) { - if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { - // 定时器添加 - this.schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); - } - } - return success; - } + /** + * 保存&启动定时任务 + */ + @Override + @Transactional(rollbackFor = JeecgBootException.class) + public boolean saveAndScheduleJob(QuartzJob quartzJob) { + // DB设置修改 + quartzJob.setDelFlag(CommonConstant.DEL_FLAG_0); + boolean success = this.save(quartzJob); + if (success) { + if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { + // 定时器添加 + this.schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + } + } + return success; + } - /** - * 恢复定时任务 - */ - @Override - @Transactional(rollbackFor = JeecgBootException.class) - public boolean resumeJob(QuartzJob quartzJob) { - schedulerDelete(quartzJob.getId()); - schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); - quartzJob.setStatus(CommonConstant.STATUS_NORMAL); - return this.updateById(quartzJob); - } + /** + * 恢复定时任务 + */ + @Override + @Transactional(rollbackFor = JeecgBootException.class) + public boolean resumeJob(QuartzJob quartzJob) { + schedulerDelete(quartzJob.getId()); + schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + quartzJob.setStatus(CommonConstant.STATUS_NORMAL); + return this.updateById(quartzJob); + } - /** - * 编辑&启停定时任务 - * @throws SchedulerException - */ - @Override - @Transactional(rollbackFor = JeecgBootException.class) - public boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException { - if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { - schedulerDelete(quartzJob.getId()); - schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); - }else{ - scheduler.pauseJob(JobKey.jobKey(quartzJob.getId())); - } - return this.updateById(quartzJob); - } + /** + * 编辑&启停定时任务 + * + * @throws SchedulerException + */ + @Override + @Transactional(rollbackFor = JeecgBootException.class) + public boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException { + if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { + schedulerDelete(quartzJob.getId()); + schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + } else { + scheduler.pauseJob(JobKey.jobKey(quartzJob.getId())); + } + return this.updateById(quartzJob); + } - /** - * 删除&停止删除定时任务 - */ - @Override - @Transactional(rollbackFor = JeecgBootException.class) - public boolean deleteAndStopJob(QuartzJob job) { - schedulerDelete(job.getId()); - boolean ok = this.removeById(job.getId()); - return ok; - } + /** + * 删除&停止删除定时任务 + */ + @Override + @Transactional(rollbackFor = JeecgBootException.class) + public boolean deleteAndStopJob(QuartzJob job) { + schedulerDelete(job.getId()); + boolean ok = this.removeById(job.getId()); + return ok; + } - @Override - public void execute(QuartzJob quartzJob) throws Exception { - String jobName = quartzJob.getJobClassName().trim(); - Date startDate = new Date(); - String ymd = DateUtils.date2Str(startDate,DateUtils.yyyymmddhhmmss.get()); - String identity = jobName + ymd; - //3秒后执行 只执行一次 - // update-begin--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- - startDate.setTime(startDate.getTime() + 100L); - // update-end--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- - // 定义一个Trigger - SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger() - .withIdentity(identity, JOB_TEST_GROUP) - .startAt(startDate) - .build(); - // 构建job信息 - JobDetail jobDetail = JobBuilder.newJob(getClass(jobName).getClass()).withIdentity(identity).usingJobData("parameter", quartzJob.getParameter()).build(); - // 将trigger和 jobDetail 加入这个调度 - scheduler.scheduleJob(jobDetail, trigger); - // 启动scheduler - scheduler.start(); - } + @Override + public void execute(QuartzJob quartzJob) throws Exception { + String jobName = quartzJob.getJobClassName().trim(); + Date startDate = new Date(); + String ymd = DateUtils.date2Str(startDate, DateUtils.yyyymmddhhmmss.get()); + String identity = jobName + ymd; + //3秒后执行 只执行一次 + // update-begin--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- + startDate.setTime(startDate.getTime() + 100L); + // update-end--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- + // 定义一个Trigger + SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger() + .withIdentity(identity, JOB_TEST_GROUP) + .startAt(startDate) + .build(); + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(getClass(jobName).getClass()).withIdentity(identity).usingJobData("parameter", quartzJob.getParameter()).build(); + // 将trigger和 jobDetail 加入这个调度 + scheduler.scheduleJob(jobDetail, trigger); + // 启动scheduler + scheduler.start(); + } - @Override - @Transactional(rollbackFor = JeecgBootException.class) - public void pause(QuartzJob quartzJob){ - schedulerDelete(quartzJob.getId()); - quartzJob.setStatus(CommonConstant.STATUS_DISABLE); - this.updateById(quartzJob); - } + @Override + @Transactional(rollbackFor = JeecgBootException.class) + public void pause(QuartzJob quartzJob) { + schedulerDelete(quartzJob.getId()); + quartzJob.setStatus(CommonConstant.STATUS_DISABLE); + this.updateById(quartzJob); + } - /** - * 添加定时任务 - * - * @param jobClassName - * @param cronExpression - * @param parameter - */ - private void schedulerAdd(String id, String jobClassName, String cronExpression, String parameter) { - try { - // 启动调度器 - scheduler.start(); + /** + * 添加定时任务 + * + * @param jobClassName + * @param cronExpression + * @param parameter + */ + private void schedulerAdd(String id, String jobClassName, String cronExpression, String parameter) { + try { + // 启动调度器 + scheduler.start(); - // 构建job信息 - JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(id).usingJobData("parameter", parameter).build(); + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(id).usingJobData("parameter", parameter).build(); - // 表达式调度构建器(即任务执行的时间) - CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); + // 表达式调度构建器(即任务执行的时间) + CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); - // 按新的cronExpression表达式构建一个新的trigger - CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(id).withSchedule(scheduleBuilder).build(); + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(id).withSchedule(scheduleBuilder).build(); - scheduler.scheduleJob(jobDetail, trigger); - } catch (SchedulerException e) { - throw new JeecgBootException("创建定时任务失败", e); - } catch (RuntimeException e) { - throw new JeecgBootException(e.getMessage(), e); - }catch (Exception e) { - throw new JeecgBootException("后台找不到该类名:" + jobClassName, e); - } - } + scheduler.scheduleJob(jobDetail, trigger); + } catch (SchedulerException e) { + throw new JeecgBootException("创建定时任务失败", e); + } catch (RuntimeException e) { + throw new JeecgBootException(e.getMessage(), e); + } catch (Exception e) { + throw new JeecgBootException("后台找不到该类名:" + jobClassName, e); + } + } - /** - * 删除定时任务 - * - * @param id - */ - private void schedulerDelete(String id) { - try { - scheduler.pauseTrigger(TriggerKey.triggerKey(id)); - scheduler.unscheduleJob(TriggerKey.triggerKey(id)); - scheduler.deleteJob(JobKey.jobKey(id)); - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new JeecgBootException("删除定时任务失败"); - } - } + /** + * 删除定时任务 + * + * @param id + */ + private void schedulerDelete(String id) { + try { + scheduler.pauseTrigger(TriggerKey.triggerKey(id)); + scheduler.unscheduleJob(TriggerKey.triggerKey(id)); + scheduler.deleteJob(JobKey.jobKey(id)); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new JeecgBootException("删除定时任务失败"); + } + } - private static Job getClass(String classname) throws Exception { - Class class1 = Class.forName(classname); - return (Job) class1.newInstance(); - } + private static Job getClass(String classname) throws Exception { + Class class1 = Class.forName(classname); + return (Job) class1.newInstance(); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/DuplicateCheckController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/DuplicateCheckController.java index 804f417..1696a30 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/DuplicateCheckController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/DuplicateCheckController.java @@ -2,6 +2,7 @@ package org.jeecg.modules.system.controller; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.jeecg.common.api.vo.Result; @@ -12,8 +13,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import jakarta.servlet.http.HttpServletRequest; - /** * @Title: DuplicateCheckAction * @Description: 重复校验工具 @@ -24,41 +23,41 @@ import jakarta.servlet.http.HttpServletRequest; @Slf4j @RestController @RequestMapping("/sys/duplicate") -@Tag(name="重复校验") +@Tag(name = "重复校验") public class DuplicateCheckController { - @Autowired - ISysDictService sysDictService; + @Autowired + ISysDictService sysDictService; - /** - * 校验数据是否在系统中是否存在 - * - * @return - */ - @RequestMapping(value = "/check", method = RequestMethod.GET) - @Operation(summary = "重复校验接口") - public Result doDuplicateCheck(DuplicateCheckVo duplicateCheckVo, HttpServletRequest request) { - log.debug("----duplicate check------:"+ duplicateCheckVo.toString()); - - // 1.填值为空,直接返回 - if(StringUtils.isEmpty(duplicateCheckVo.getFieldVal())){ - Result rs = new Result(); - rs.setCode(500); - rs.setSuccess(true); - rs.setMessage("数据为空,不作处理!"); - return rs; - } - - // 2.返回结果 - if (sysDictService.duplicateCheckData(duplicateCheckVo)) { - // 该值可用 - return Result.ok("该值可用!"); - } else { - // 该值不可用 - log.info("该值不可用,系统中已存在!"); - return Result.error("该值不可用,系统中已存在!"); - } - } + /** + * 校验数据是否在系统中是否存在 + * + * @return + */ + @RequestMapping(value = "/check", method = RequestMethod.GET) + @Operation(summary = "重复校验接口") + public Result doDuplicateCheck(DuplicateCheckVo duplicateCheckVo, HttpServletRequest request) { + log.debug("----duplicate check------:" + duplicateCheckVo.toString()); + + // 1.填值为空,直接返回 + if (StringUtils.isEmpty(duplicateCheckVo.getFieldVal())) { + Result rs = new Result(); + rs.setCode(500); + rs.setSuccess(true); + rs.setMessage("数据为空,不作处理!"); + return rs; + } + + // 2.返回结果 + if (sysDictService.duplicateCheckData(duplicateCheckVo)) { + // 该值可用 + return Result.ok("该值可用!"); + } else { + // 该值不可用 + log.info("该值不可用,系统中已存在!"); + return Result.error("该值不可用,系统中已存在!"); + } + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java index eb1a4e5..3843582 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java @@ -7,6 +7,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresRoles; @@ -23,7 +26,6 @@ import org.jeecg.config.JeecgBaseConfig; import org.jeecg.modules.base.service.BaseCommonService; import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.entity.SysRoleIndex; -import org.jeecg.modules.system.entity.SysTenant; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.model.SysLoginModel; import org.jeecg.modules.system.service.*; @@ -31,14 +33,9 @@ import org.jeecg.modules.system.service.impl.SysBaseApiImpl; import org.jeecg.modules.system.util.RandImageUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.util.*; -import java.util.stream.Collectors; /** * @Author scott @@ -46,41 +43,41 @@ import java.util.stream.Collectors; */ @RestController @RequestMapping("/sys") -@Tag(name="用户登录") +@Tag(name = "用户登录") @Slf4j public class LoginController { - @Autowired - private ISysUserService sysUserService; - @Autowired - private ISysPermissionService sysPermissionService; - @Autowired - private SysBaseApiImpl sysBaseApi; - @Autowired - private ISysLogService logService; - @Autowired + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysPermissionService sysPermissionService; + @Autowired + private SysBaseApiImpl sysBaseApi; + @Autowired + private ISysLogService logService; + @Autowired private RedisUtil redisUtil; - @Autowired + @Autowired private ISysDepartService sysDepartService; - @Autowired + @Autowired private ISysDictService sysDictService; - @Resource - private BaseCommonService baseCommonService; - @Autowired - private JeecgBaseConfig jeecgBaseConfig; + @Resource + private BaseCommonService baseCommonService; + @Autowired + private JeecgBaseConfig jeecgBaseConfig; - private final String BASE_CHECK_CODES = "qwertyuiplkjhgfdsazxcvbnmQWERTYUPLKJHGFDSAZXCVBNM1234567890"; + private final String BASE_CHECK_CODES = "qwertyuiplkjhgfdsazxcvbnmQWERTYUPLKJHGFDSAZXCVBNM1234567890"; - @Operation(summary = "登录接口") - @RequestMapping(value = "/login", method = RequestMethod.POST) - public Result login(@RequestBody SysLoginModel sysLoginModel, HttpServletRequest request){ - Result result = new Result(); - String username = sysLoginModel.getUsername(); - String password = sysLoginModel.getPassword(); - if(isLoginFailOvertimes(username)){ - return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!"); - } + @Operation(summary = "登录接口") + @RequestMapping(value = "/login", method = RequestMethod.POST) + public Result login(@RequestBody SysLoginModel sysLoginModel, HttpServletRequest request) { + Result result = new Result(); + String username = sysLoginModel.getUsername(); + String password = sysLoginModel.getPassword(); + if (isLoginFailOvertimes(username)) { + return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!"); + } - // step.1 验证码check + // step.1 验证码check // String captcha = sysLoginModel.getCaptcha(); // if(captcha==null){ // result.error500("验证码无效"); @@ -99,730 +96,743 @@ public class LoginController { // result.setCode(HttpStatus.PRECONDITION_FAILED.value()); // return result; // } - - // step.2 校验用户是否存在且有效 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysUser::getUsername,username); - SysUser sysUser = sysUserService.getOne(queryWrapper); - result = sysUserService.checkUserIsEffective(sysUser); - if(!result.isSuccess()) { - return result; - } - // step.3 校验用户名或密码是否正确 - String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); - String syspassword = sysUser.getPassword(); - if (!syspassword.equals(userpassword)) { - addLoginFailOvertimes(username); - result.error500("用户名或密码错误"); - return result; - } + // step.2 校验用户是否存在且有效 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysUser::getUsername, username); + SysUser sysUser = sysUserService.getOne(queryWrapper); + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + return result; + } - // step.4 登录成功获取用户信息 - userInfo(sysUser, result, request); + // step.3 校验用户名或密码是否正确 + String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); + String syspassword = sysUser.getPassword(); + if (!syspassword.equals(userpassword)) { + addLoginFailOvertimes(username); + result.error500("用户名或密码错误"); + return result; + } - // step.5 登录成功删除验证码 + // step.4 登录成功获取用户信息 + userInfo(sysUser, result, request); + + // step.5 登录成功删除验证码 // redisUtil.del(realKey); - redisUtil.del(CommonConstant.LOGIN_FAIL + username); + redisUtil.del(CommonConstant.LOGIN_FAIL + username); - // step.6 记录用户登录日志 - LoginUser loginUser = new LoginUser(); - BeanUtils.copyProperties(sysUser, loginUser); - baseCommonService.addLog("用户名: " + username + ",登录成功!", CommonConstant.LOG_TYPE_1, null,loginUser); - return result; - } + // step.6 记录用户登录日志 + LoginUser loginUser = new LoginUser(); + BeanUtils.copyProperties(sysUser, loginUser); + baseCommonService.addLog("用户名: " + username + ",登录成功!", CommonConstant.LOG_TYPE_1, null, loginUser); + return result; + } - /** - * 【vue3专用】获取用户信息 - */ - @GetMapping("/user/getUserInfo") - public Result getUserInfo(HttpServletRequest request){ - long start = System.currentTimeMillis(); - Result result = new Result(); - String username = JwtUtil.getUserNameByToken(request); - if(oConvertUtils.isNotEmpty(username)) { - // 根据用户名查询用户信息 - SysUser sysUser = sysUserService.getUserByName(username); - JSONObject obj=new JSONObject(); - log.info("1 获取用户信息耗时(用户基础信息)" + (System.currentTimeMillis() - start) + "毫秒"); + /** + * 【vue3专用】获取用户信息 + */ + @GetMapping("/user/getUserInfo") + public Result getUserInfo(HttpServletRequest request) { + long start = System.currentTimeMillis(); + Result result = new Result(); + String username = JwtUtil.getUserNameByToken(request); + if (oConvertUtils.isNotEmpty(username)) { + // 根据用户名查询用户信息 + SysUser sysUser = sysUserService.getUserByName(username); + JSONObject obj = new JSONObject(); + log.info("1 获取用户信息耗时(用户基础信息)" + (System.currentTimeMillis() - start) + "毫秒"); - //update-begin---author:scott ---date:2022-06-20 for:vue3前端,支持自定义首页----------- - String vue3Version = request.getHeader(CommonConstant.VERSION); - //update-begin---author:liusq ---date:2022-06-29 for:接口返回值修改,同步修改这里的判断逻辑----------- - SysRoleIndex roleIndex = sysUserService.getDynamicIndexByUserRole(username, vue3Version); - if (oConvertUtils.isNotEmpty(vue3Version) && roleIndex != null && oConvertUtils.isNotEmpty(roleIndex.getUrl())) { - String homePath = roleIndex.getUrl(); - if (!homePath.startsWith(SymbolConstant.SINGLE_SLASH)) { - homePath = SymbolConstant.SINGLE_SLASH + homePath; - } - sysUser.setHomePath(homePath); - } - //update-begin---author:liusq ---date:2022-06-29 for:接口返回值修改,同步修改这里的判断逻辑----------- - //update-end---author:scott ---date::2022-06-20 for:vue3前端,支持自定义首页-------------- - log.info("2 获取用户信息耗时 (首页面配置)" + (System.currentTimeMillis() - start) + "毫秒"); - - obj.put("userInfo",sysUser); - obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); - log.info("3 获取用户信息耗时 (字典数据)" + (System.currentTimeMillis() - start) + "毫秒"); - - result.setResult(obj); - result.success(""); - } - log.info("end 获取用户信息耗时 " + (System.currentTimeMillis() - start) + "毫秒"); - return result; + //update-begin---author:scott ---date:2022-06-20 for:vue3前端,支持自定义首页----------- + String vue3Version = request.getHeader(CommonConstant.VERSION); + //update-begin---author:liusq ---date:2022-06-29 for:接口返回值修改,同步修改这里的判断逻辑----------- + SysRoleIndex roleIndex = sysUserService.getDynamicIndexByUserRole(username, vue3Version); + if (oConvertUtils.isNotEmpty(vue3Version) && roleIndex != null && oConvertUtils.isNotEmpty(roleIndex.getUrl())) { + String homePath = roleIndex.getUrl(); + if (!homePath.startsWith(SymbolConstant.SINGLE_SLASH)) { + homePath = SymbolConstant.SINGLE_SLASH + homePath; + } + sysUser.setHomePath(homePath); + } + //update-begin---author:liusq ---date:2022-06-29 for:接口返回值修改,同步修改这里的判断逻辑----------- + //update-end---author:scott ---date::2022-06-20 for:vue3前端,支持自定义首页-------------- + log.info("2 获取用户信息耗时 (首页面配置)" + (System.currentTimeMillis() - start) + "毫秒"); - } - - /** - * 退出登录 - * @param request - * @param response - * @return - */ - @RequestMapping(value = "/logout") - public Result logout(HttpServletRequest request,HttpServletResponse response) { - //用户退出逻辑 - String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); - if(oConvertUtils.isEmpty(token)) { - return Result.error("退出登录失败!"); - } - String username = JwtUtil.getUsername(token); - LoginUser sysUser = sysBaseApi.getUserByName(username); - if(sysUser!=null) { - //update-begin--Author:wangshuai Date:20200714 for:登出日志没有记录人员 - baseCommonService.addLog("用户名: "+sysUser.getRealname()+",退出成功!", CommonConstant.LOG_TYPE_1, null,sysUser); - //update-end--Author:wangshuai Date:20200714 for:登出日志没有记录人员 - log.info(" 用户名: "+sysUser.getRealname()+",退出成功! "); - //清空用户登录Token缓存 - redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + token); - //清空用户登录Shiro权限缓存 - redisUtil.del(CommonConstant.PREFIX_USER_SHIRO_CACHE + sysUser.getId()); - //清空用户的缓存信息(包括部门信息),例如sys:cache:user:: - redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, sysUser.getUsername())); - //调用shiro的logout - SecurityUtils.getSubject().logout(); - return Result.ok("退出登录成功!"); - }else { - return Result.error("Token无效!"); - } - } - - /** - * 获取访问量 - * @return - */ - @GetMapping("loginfo") - public Result loginfo() { - Result result = new Result(); - JSONObject obj = new JSONObject(); - //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 - // 获取一天的开始和结束时间 - Calendar calendar = new GregorianCalendar(); - calendar.set(Calendar.HOUR_OF_DAY, 0); - calendar.set(Calendar.MINUTE, 0); - calendar.set(Calendar.SECOND, 0); - calendar.set(Calendar.MILLISECOND, 0); - Date dayStart = calendar.getTime(); - calendar.add(Calendar.DATE, 1); - Date dayEnd = calendar.getTime(); - // 获取系统访问记录 - Long totalVisitCount = logService.findTotalVisitCount(); - obj.put("totalVisitCount", totalVisitCount); - Long todayVisitCount = logService.findTodayVisitCount(dayStart,dayEnd); - obj.put("todayVisitCount", todayVisitCount); - Long todayIp = logService.findTodayIp(dayStart,dayEnd); - //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 - obj.put("todayIp", todayIp); - result.setResult(obj); - result.success("登录成功"); - return result; - } - - /** - * 获取访问量 - * @return - */ - @GetMapping("/visitInfo") - public Result>> visitInfo() { - Result>> result = new Result>>(); - Calendar calendar = new GregorianCalendar(); - calendar.set(Calendar.HOUR_OF_DAY,0); - calendar.set(Calendar.MINUTE,0); - calendar.set(Calendar.SECOND,0); - calendar.set(Calendar.MILLISECOND,0); + obj.put("userInfo", sysUser); + obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); + log.info("3 获取用户信息耗时 (字典数据)" + (System.currentTimeMillis() - start) + "毫秒"); + + result.setResult(obj); + result.success(""); + } + log.info("end 获取用户信息耗时 " + (System.currentTimeMillis() - start) + "毫秒"); + return result; + + } + + /** + * 退出登录 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/logout") + public Result logout(HttpServletRequest request, HttpServletResponse response) { + //用户退出逻辑 + String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); + if (oConvertUtils.isEmpty(token)) { + return Result.error("退出登录失败!"); + } + String username = JwtUtil.getUsername(token); + LoginUser sysUser = sysBaseApi.getUserByName(username); + if (sysUser != null) { + //update-begin--Author:wangshuai Date:20200714 for:登出日志没有记录人员 + baseCommonService.addLog("用户名: " + sysUser.getRealname() + ",退出成功!", CommonConstant.LOG_TYPE_1, null, sysUser); + //update-end--Author:wangshuai Date:20200714 for:登出日志没有记录人员 + log.info(" 用户名: " + sysUser.getRealname() + ",退出成功! "); + //清空用户登录Token缓存 + redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + token); + //清空用户登录Shiro权限缓存 + redisUtil.del(CommonConstant.PREFIX_USER_SHIRO_CACHE + sysUser.getId()); + //清空用户的缓存信息(包括部门信息),例如sys:cache:user:: + redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, sysUser.getUsername())); + //调用shiro的logout + SecurityUtils.getSubject().logout(); + return Result.ok("退出登录成功!"); + } else { + return Result.error("Token无效!"); + } + } + + /** + * 获取访问量 + * + * @return + */ + @GetMapping("loginfo") + public Result loginfo() { + Result result = new Result(); + JSONObject obj = new JSONObject(); + //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + // 获取一天的开始和结束时间 + Calendar calendar = new GregorianCalendar(); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date dayStart = calendar.getTime(); + calendar.add(Calendar.DATE, 1); + Date dayEnd = calendar.getTime(); + // 获取系统访问记录 + Long totalVisitCount = logService.findTotalVisitCount(); + obj.put("totalVisitCount", totalVisitCount); + Long todayVisitCount = logService.findTodayVisitCount(dayStart, dayEnd); + obj.put("todayVisitCount", todayVisitCount); + Long todayIp = logService.findTodayIp(dayStart, dayEnd); + //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + obj.put("todayIp", todayIp); + result.setResult(obj); + result.success("登录成功"); + return result; + } + + /** + * 获取访问量 + * + * @return + */ + @GetMapping("/visitInfo") + public Result>> visitInfo() { + Result>> result = new Result>>(); + Calendar calendar = new GregorianCalendar(); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); calendar.add(Calendar.DAY_OF_MONTH, 1); Date dayEnd = calendar.getTime(); calendar.add(Calendar.DAY_OF_MONTH, -7); Date dayStart = calendar.getTime(); - List> list = logService.findVisitCount(dayStart, dayEnd); - result.setResult(oConvertUtils.toLowerCasePageList(list)); - return result; - } - - - /** - * 登陆成功选择用户当前部门 - * @param user - * @return - */ - @RequestMapping(value = "/selectDepart", method = RequestMethod.PUT) - public Result selectDepart(@RequestBody SysUser user) { - Result result = new Result(); - String username = user.getUsername(); - if(oConvertUtils.isEmpty(username)) { - LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); - username = sysUser.getUsername(); - } - - //获取登录部门 - String orgCode= user.getOrgCode(); - //获取登录租户 - Integer tenantId = user.getLoginTenantId(); - //设置用户登录部门和登录租户 - this.sysUserService.updateUserDepart(username, orgCode,tenantId); - SysUser sysUser = sysUserService.getUserByName(username); - JSONObject obj = new JSONObject(); - obj.put("userInfo", sysUser); - result.setResult(obj); - return result; - } - - /** - * 短信登录接口 - * - * @param jsonObject - * @return - */ - @PostMapping(value = "/sms") - public Result sms(@RequestBody JSONObject jsonObject,HttpServletRequest request) { - Result result = new Result(); - String clientIp = IpUtils.getIpAddr(request); - String mobile = jsonObject.get("mobile").toString(); - //手机号模式 登录模式: "2" 注册模式: "1" - String smsmode=jsonObject.get("smsmode").toString(); - log.info("-------- IP:{}, 手机号:{},获取绑定验证码", clientIp, mobile); - - if(oConvertUtils.isEmpty(mobile)){ - result.setMessage("手机号不允许为空!"); - result.setSuccess(false); - return result; - } - - //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE+mobile; - Object object = redisUtil.get(redisKey); - //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - - if (object != null) { - result.setMessage("验证码10分钟内,仍然有效!"); - result.setSuccess(false); - return result; - } - - //------------------------------------------------------------------------------------- - //增加 check防止恶意刷短信接口 - if(!DySmsLimit.canSendSms(clientIp)){ - log.warn("--------[警告] IP地址:{}, 短信接口请求太多-------", clientIp); - result.setMessage("短信接口请求太多,请稍后再试!"); - result.setCode(CommonConstant.PHONE_SMS_FAIL_CODE); - result.setSuccess(false); - return result; - } - //------------------------------------------------------------------------------------- - - //随机数 - String captcha = RandomUtil.randomNumbers(6); - JSONObject obj = new JSONObject(); - obj.put("code", captcha); - try { - boolean b = false; - //注册模板 - if (CommonConstant.SMS_TPL_TYPE_1.equals(smsmode)) { - SysUser sysUser = sysUserService.getUserByPhone(mobile); - if(sysUser!=null) { - result.error500(" 手机号已经注册,请直接登录!"); - baseCommonService.addLog("手机号已经注册,请直接登录!", CommonConstant.LOG_TYPE_1, null); - return result; - } - b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.REGISTER_TEMPLATE_CODE); - }else { - //登录模式,校验用户有效性 - SysUser sysUser = sysUserService.getUserByPhone(mobile); - result = sysUserService.checkUserIsEffective(sysUser); - if(!result.isSuccess()) { - String message = result.getMessage(); - String userNotExist="该用户不存在,请注册"; - if(userNotExist.equals(message)){ - result.error500("该用户不存在或未绑定手机号"); - } - return result; - } - - /** - * smsmode 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板 - */ - if (CommonConstant.SMS_TPL_TYPE_0.equals(smsmode)) { - //登录模板 - b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.LOGIN_TEMPLATE_CODE); - } else if(CommonConstant.SMS_TPL_TYPE_2.equals(smsmode)) { - //忘记密码模板 - b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE); - } - } - - if (b == false) { - result.setMessage("短信验证码发送失败,请稍后重试"); - result.setSuccess(false); - return result; - } - - //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - //验证码10分钟内有效 - redisUtil.set(redisKey, captcha, 600); - //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - - //update-begin--Author:scott Date:20190812 for:issues#391 - //result.setResult(captcha); - //update-end--Author:scott Date:20190812 for:issues#391 - result.setSuccess(true); - - } catch (ClientException e) { - e.printStackTrace(); - result.error500(" 短信接口未配置,请联系管理员!"); - return result; - } - return result; - } - - - /** - * 手机号登录接口 - * - * @param jsonObject - * @return - */ - @Operation(summary ="手机号登录接口") - @PostMapping("/phoneLogin") - public Result phoneLogin(@RequestBody JSONObject jsonObject, HttpServletRequest request) { - Result result = new Result(); - String phone = jsonObject.getString("mobile"); - //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 - if(isLoginFailOvertimes(phone)){ - return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!"); - } - //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 - //校验用户有效性 - SysUser sysUser = sysUserService.getUserByPhone(phone); - result = sysUserService.checkUserIsEffective(sysUser); - if(!result.isSuccess()) { - return result; - } - - String smscode = jsonObject.getString("captcha"); - - //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE+phone; - Object code = redisUtil.get(redisKey); - //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - - if (!smscode.equals(code)) { - //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 - addLoginFailOvertimes(phone); - //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 - return Result.error("手机验证码错误"); - } - //用户信息 - userInfo(sysUser, result, request); - //添加日志 - baseCommonService.addLog("用户名: " + sysUser.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null); - - return result; - } + List> list = logService.findVisitCount(dayStart, dayEnd); + result.setResult(oConvertUtils.toLowerCasePageList(list)); + return result; + } - /** - * 用户信息 - * - * @param sysUser - * @param result - * @return - */ - private Result userInfo(SysUser sysUser, Result result, HttpServletRequest request) { - String username = sysUser.getUsername(); - String syspassword = sysUser.getPassword(); - // 获取用户部门信息 - JSONObject obj = new JSONObject(new LinkedHashMap<>()); + /** + * 登陆成功选择用户当前部门 + * + * @param user + * @return + */ + @RequestMapping(value = "/selectDepart", method = RequestMethod.PUT) + public Result selectDepart(@RequestBody SysUser user) { + Result result = new Result(); + String username = user.getUsername(); + if (oConvertUtils.isEmpty(username)) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + username = sysUser.getUsername(); + } - //1.生成token - String token = JwtUtil.sign(username, syspassword); - // 设置token缓存有效时间 - redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); - redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); - obj.put("token", token); + //获取登录部门 + String orgCode = user.getOrgCode(); + //获取登录租户 + Integer tenantId = user.getLoginTenantId(); + //设置用户登录部门和登录租户 + this.sysUserService.updateUserDepart(username, orgCode, tenantId); + SysUser sysUser = sysUserService.getUserByName(username); + JSONObject obj = new JSONObject(); + obj.put("userInfo", sysUser); + result.setResult(obj); + return result; + } - //2.设置登录租户 - Result loginTenantError = sysUserService.setLoginTenant(sysUser, obj, username,result); - if (loginTenantError != null) { - return loginTenantError; - } + /** + * 短信登录接口 + * + * @param jsonObject + * @return + */ + @PostMapping(value = "/sms") + public Result sms(@RequestBody JSONObject jsonObject, HttpServletRequest request) { + Result result = new Result(); + String clientIp = IpUtils.getIpAddr(request); + String mobile = jsonObject.get("mobile").toString(); + //手机号模式 登录模式: "2" 注册模式: "1" + String smsmode = jsonObject.get("smsmode").toString(); + log.info("-------- IP:{}, 手机号:{},获取绑定验证码", clientIp, mobile); - //3.设置登录用户信息 - obj.put("userInfo", sysUser); - - //4.设置登录部门 - List departs = sysDepartService.queryUserDeparts(sysUser.getId()); - obj.put("departs", departs); - if (departs == null || departs.size() == 0) { - obj.put("multi_depart", 0); - } else if (departs.size() == 1) { - sysUserService.updateUserDepart(username, departs.get(0).getOrgCode(),null); - obj.put("multi_depart", 1); - } else { - //查询当前是否有登录部门 - // update-begin--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 - SysUser sysUserById = sysUserService.getById(sysUser.getId()); - if(oConvertUtils.isEmpty(sysUserById.getOrgCode())){ - sysUserService.updateUserDepart(username, departs.get(0).getOrgCode(),null); - } - // update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 - obj.put("multi_depart", 2); - } + if (oConvertUtils.isEmpty(mobile)) { + result.setMessage("手机号不允许为空!"); + result.setSuccess(false); + return result; + } - //update-begin---author:scott ---date:2024-01-05 for:【QQYUN-7802】前端在登录时加载了两次数据字典,建议优化下,避免数据字典太多时可能产生的性能问题 #956--- - // login接口,在vue3前端下不加载字典数据,vue2下加载字典 - String vue3Version = request.getHeader(CommonConstant.VERSION); - if(oConvertUtils.isEmpty(vue3Version)){ - obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); - } - //end-begin---author:scott ---date:2024-01-05 for:【QQYUN-7802】前端在登录时加载了两次数据字典,建议优化下,避免数据字典太多时可能产生的性能问题 #956--- - - result.setResult(obj); - result.success("登录成功"); - return result; - } + //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 + String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + mobile; + Object object = redisUtil.get(redisKey); + //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - /** - * 获取加密字符串 - * @return - */ - @GetMapping(value = "/getEncryptedString") - public Result> getEncryptedString(){ - Result> result = new Result>(); - Map map = new HashMap(5); - map.put("key", EncryptedString.key); - map.put("iv",EncryptedString.iv); - result.setResult(map); - return result; - } + if (object != null) { + result.setMessage("验证码10分钟内,仍然有效!"); + result.setSuccess(false); + return result; + } - /** - * 后台生成图形验证码 :有效 - * @param response - * @param key - */ - @Operation(summary ="获取验证码") - @GetMapping(value = "/randomImage/{key}") - public Result randomImage(HttpServletResponse response,@PathVariable("key") String key){ - Result res = new Result(); - try { - //生成验证码 - String code = RandomUtil.randomString(BASE_CHECK_CODES,4); - //存到redis中 - String lowerCaseCode = code.toLowerCase(); - - //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - // 加入密钥作为混淆,避免简单的拼接,被外部利用,用户自定义该密钥即可 - String origin = lowerCaseCode+key+jeecgBaseConfig.getSignatureSecret(); - String realKey = Md5Util.md5Encode(origin, "utf-8"); - //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - - redisUtil.set(realKey, lowerCaseCode, 60); - log.info("获取验证码,Redis key = {},checkCode = {}", realKey, code); - //返回前端 - String base64 = RandImageUtil.generate(code); - res.setSuccess(true); - res.setResult(base64); - } catch (Exception e) { - log.error(e.getMessage(), e); - res.error500("获取验证码失败,请检查redis配置!"); - return res; - } - return res; - } + //------------------------------------------------------------------------------------- + //增加 check防止恶意刷短信接口 + if (!DySmsLimit.canSendSms(clientIp)) { + log.warn("--------[警告] IP地址:{}, 短信接口请求太多-------", clientIp); + result.setMessage("短信接口请求太多,请稍后再试!"); + result.setCode(CommonConstant.PHONE_SMS_FAIL_CODE); + result.setSuccess(false); + return result; + } + //------------------------------------------------------------------------------------- - /** - * 切换菜单表为vue3的表 - */ - @RequiresRoles({"admin"}) - @GetMapping(value = "/switchVue3Menu") - public Result switchVue3Menu(HttpServletResponse response) { - Result res = new Result(); - sysPermissionService.switchVue3Menu(); - return res; - } - - /** - * app登录 - * @param sysLoginModel - * @return - * @throws Exception - */ - @RequestMapping(value = "/mLogin", method = RequestMethod.POST) - public Result mLogin(@RequestBody SysLoginModel sysLoginModel) throws Exception { - Result result = new Result(); - String username = sysLoginModel.getUsername(); - String password = sysLoginModel.getPassword(); - JSONObject obj = new JSONObject(); - - //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 - if(isLoginFailOvertimes(username)){ - return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!"); - } - //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 - //1. 校验用户是否有效 - SysUser sysUser = sysUserService.getUserByName(username); - result = sysUserService.checkUserIsEffective(sysUser); - if(!result.isSuccess()) { - return result; - } - - //2. 校验用户名或密码是否正确 - String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); - String syspassword = sysUser.getPassword(); - if (!syspassword.equals(userpassword)) { - //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 - addLoginFailOvertimes(username); - //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 - result.error500("用户名或密码错误"); - return result; - } - - //3.设置登录部门 - String orgCode = sysUser.getOrgCode(); - if(oConvertUtils.isEmpty(orgCode)) { - //如果当前用户无选择部门 查看部门关联信息 - - List departs = sysDepartService.queryUserDeparts(sysUser.getId()); - //update-begin-author:taoyan date:20220117 for: JTC-1068【app】新建用户,没有设置部门及角色,点击登录提示暂未归属部,一直在登录页面 使用手机号登录 可正常 - if (departs == null || departs.size() == 0) { + //随机数 + String captcha = RandomUtil.randomNumbers(6); + JSONObject obj = new JSONObject(); + obj.put("code", captcha); + try { + boolean b = false; + //注册模板 + if (CommonConstant.SMS_TPL_TYPE_1.equals(smsmode)) { + SysUser sysUser = sysUserService.getUserByPhone(mobile); + if (sysUser != null) { + result.error500(" 手机号已经注册,请直接登录!"); + baseCommonService.addLog("手机号已经注册,请直接登录!", CommonConstant.LOG_TYPE_1, null); + return result; + } + b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.REGISTER_TEMPLATE_CODE); + } else { + //登录模式,校验用户有效性 + SysUser sysUser = sysUserService.getUserByPhone(mobile); + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + String message = result.getMessage(); + String userNotExist = "该用户不存在,请注册"; + if (userNotExist.equals(message)) { + result.error500("该用户不存在或未绑定手机号"); + } + return result; + } + + /** + * smsmode 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板 + */ + if (CommonConstant.SMS_TPL_TYPE_0.equals(smsmode)) { + //登录模板 + b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.LOGIN_TEMPLATE_CODE); + } else if (CommonConstant.SMS_TPL_TYPE_2.equals(smsmode)) { + //忘记密码模板 + b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE); + } + } + + if (b == false) { + result.setMessage("短信验证码发送失败,请稍后重试"); + result.setSuccess(false); + return result; + } + + //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 + //验证码10分钟内有效 + redisUtil.set(redisKey, captcha, 600); + //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 + + //update-begin--Author:scott Date:20190812 for:issues#391 + //result.setResult(captcha); + //update-end--Author:scott Date:20190812 for:issues#391 + result.setSuccess(true); + + } catch (ClientException e) { + e.printStackTrace(); + result.error500(" 短信接口未配置,请联系管理员!"); + return result; + } + return result; + } + + + /** + * 手机号登录接口 + * + * @param jsonObject + * @return + */ + @Operation(summary = "手机号登录接口") + @PostMapping("/phoneLogin") + public Result phoneLogin(@RequestBody JSONObject jsonObject, HttpServletRequest request) { + Result result = new Result(); + String phone = jsonObject.getString("mobile"); + //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 + if (isLoginFailOvertimes(phone)) { + return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!"); + } + //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 + //校验用户有效性 + SysUser sysUser = sysUserService.getUserByPhone(phone); + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + return result; + } + + String smscode = jsonObject.getString("captcha"); + + //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 + String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + phone; + Object code = redisUtil.get(redisKey); + //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 + + if (!smscode.equals(code)) { + //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 + addLoginFailOvertimes(phone); + //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 + return Result.error("手机验证码错误"); + } + //用户信息 + userInfo(sysUser, result, request); + //添加日志 + baseCommonService.addLog("用户名: " + sysUser.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null); + + return result; + } + + + /** + * 用户信息 + * + * @param sysUser + * @param result + * @return + */ + private Result userInfo(SysUser sysUser, Result result, HttpServletRequest request) { + String username = sysUser.getUsername(); + String syspassword = sysUser.getPassword(); + // 获取用户部门信息 + JSONObject obj = new JSONObject(new LinkedHashMap<>()); + + //1.生成token + String token = JwtUtil.sign(username, syspassword); + // 设置token缓存有效时间 + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); + obj.put("token", token); + + //2.设置登录租户 + Result loginTenantError = sysUserService.setLoginTenant(sysUser, obj, username, result); + if (loginTenantError != null) { + return loginTenantError; + } + + //3.设置登录用户信息 + obj.put("userInfo", sysUser); + + //4.设置登录部门 + List departs = sysDepartService.queryUserDeparts(sysUser.getId()); + obj.put("departs", departs); + if (departs == null || departs.size() == 0) { + obj.put("multi_depart", 0); + } else if (departs.size() == 1) { + sysUserService.updateUserDepart(username, departs.get(0).getOrgCode(), null); + obj.put("multi_depart", 1); + } else { + //查询当前是否有登录部门 + // update-begin--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 + SysUser sysUserById = sysUserService.getById(sysUser.getId()); + if (oConvertUtils.isEmpty(sysUserById.getOrgCode())) { + sysUserService.updateUserDepart(username, departs.get(0).getOrgCode(), null); + } + // update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 + obj.put("multi_depart", 2); + } + + //update-begin---author:scott ---date:2024-01-05 for:【QQYUN-7802】前端在登录时加载了两次数据字典,建议优化下,避免数据字典太多时可能产生的性能问题 #956--- + // login接口,在vue3前端下不加载字典数据,vue2下加载字典 + String vue3Version = request.getHeader(CommonConstant.VERSION); + if (oConvertUtils.isEmpty(vue3Version)) { + obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); + } + //end-begin---author:scott ---date:2024-01-05 for:【QQYUN-7802】前端在登录时加载了两次数据字典,建议优化下,避免数据字典太多时可能产生的性能问题 #956--- + + result.setResult(obj); + result.success("登录成功"); + return result; + } + + /** + * 获取加密字符串 + * + * @return + */ + @GetMapping(value = "/getEncryptedString") + public Result> getEncryptedString() { + Result> result = new Result>(); + Map map = new HashMap(5); + map.put("key", EncryptedString.key); + map.put("iv", EncryptedString.iv); + result.setResult(map); + return result; + } + + /** + * 后台生成图形验证码 :有效 + * + * @param response + * @param key + */ + @Operation(summary = "获取验证码") + @GetMapping(value = "/randomImage/{key}") + public Result randomImage(HttpServletResponse response, @PathVariable("key") String key) { + Result res = new Result(); + try { + //生成验证码 + String code = RandomUtil.randomString(BASE_CHECK_CODES, 4); + //存到redis中 + String lowerCaseCode = code.toLowerCase(); + + //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 + // 加入密钥作为混淆,避免简单的拼接,被外部利用,用户自定义该密钥即可 + String origin = lowerCaseCode + key + jeecgBaseConfig.getSignatureSecret(); + String realKey = Md5Util.md5Encode(origin, "utf-8"); + //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 + + redisUtil.set(realKey, lowerCaseCode, 60); + log.info("获取验证码,Redis key = {},checkCode = {}", realKey, code); + //返回前端 + String base64 = RandImageUtil.generate(code); + res.setSuccess(true); + res.setResult(base64); + } catch (Exception e) { + log.error(e.getMessage(), e); + res.error500("获取验证码失败,请检查redis配置!"); + return res; + } + return res; + } + + /** + * 切换菜单表为vue3的表 + */ + @RequiresRoles({"admin"}) + @GetMapping(value = "/switchVue3Menu") + public Result switchVue3Menu(HttpServletResponse response) { + Result res = new Result(); + sysPermissionService.switchVue3Menu(); + return res; + } + + /** + * app登录 + * + * @param sysLoginModel + * @return + * @throws Exception + */ + @RequestMapping(value = "/mLogin", method = RequestMethod.POST) + public Result mLogin(@RequestBody SysLoginModel sysLoginModel) throws Exception { + Result result = new Result(); + String username = sysLoginModel.getUsername(); + String password = sysLoginModel.getPassword(); + JSONObject obj = new JSONObject(); + + //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 + if (isLoginFailOvertimes(username)) { + return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!"); + } + //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 + //1. 校验用户是否有效 + SysUser sysUser = sysUserService.getUserByName(username); + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + return result; + } + + //2. 校验用户名或密码是否正确 + String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); + String syspassword = sysUser.getPassword(); + if (!syspassword.equals(userpassword)) { + //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 + addLoginFailOvertimes(username); + //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 + result.error500("用户名或密码错误"); + return result; + } + + //3.设置登录部门 + String orgCode = sysUser.getOrgCode(); + if (oConvertUtils.isEmpty(orgCode)) { + //如果当前用户无选择部门 查看部门关联信息 + + List departs = sysDepartService.queryUserDeparts(sysUser.getId()); + //update-begin-author:taoyan date:20220117 for: JTC-1068【app】新建用户,没有设置部门及角色,点击登录提示暂未归属部,一直在登录页面 使用手机号登录 可正常 + if (departs == null || departs.size() == 0) { /*result.error500("用户暂未归属部门,不可登录!"); return result;*/ - }else{ - orgCode = departs.get(0).getOrgCode(); - sysUser.setOrgCode(orgCode); - this.sysUserService.updateUserDepart(username, orgCode,null); - } - //update-end-author:taoyan date:20220117 for: JTC-1068【app】新建用户,没有设置部门及角色,点击登录提示暂未归属部,一直在登录页面 使用手机号登录 可正常 - } + } else { + orgCode = departs.get(0).getOrgCode(); + sysUser.setOrgCode(orgCode); + this.sysUserService.updateUserDepart(username, orgCode, null); + } + //update-end-author:taoyan date:20220117 for: JTC-1068【app】新建用户,没有设置部门及角色,点击登录提示暂未归属部,一直在登录页面 使用手机号登录 可正常 + } - //4. 设置登录租户 - Result loginTenantError = sysUserService.setLoginTenant(sysUser, obj, username, result); - if (loginTenantError != null) { - return loginTenantError; - } + //4. 设置登录租户 + Result loginTenantError = sysUserService.setLoginTenant(sysUser, obj, username, result); + if (loginTenantError != null) { + return loginTenantError; + } - //5. 设置登录用户信息 - obj.put("userInfo", sysUser); - - //6. 生成token - String token = JwtUtil.sign(username, syspassword); - // 设置超时时间 - redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); - redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME*2 / 1000); + //5. 设置登录用户信息 + obj.put("userInfo", sysUser); - //token 信息 - obj.put("token", token); - result.setResult(obj); - result.setSuccess(true); - result.setCode(200); - baseCommonService.addLog("用户名: " + username + ",登录成功[移动端]!", CommonConstant.LOG_TYPE_1, null); - return result; - } + //6. 生成token + String token = JwtUtil.sign(username, syspassword); + // 设置超时时间 + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); - /** - * 图形验证码 - * @param sysLoginModel - * @return - */ - @RequestMapping(value = "/checkCaptcha", method = RequestMethod.POST) - public Result checkCaptcha(@RequestBody SysLoginModel sysLoginModel){ - String captcha = sysLoginModel.getCaptcha(); - String checkKey = sysLoginModel.getCheckKey(); - if(captcha==null){ - return Result.error("验证码无效"); - } - String lowerCaseCaptcha = captcha.toLowerCase(); - String realKey = Md5Util.md5Encode(lowerCaseCaptcha+checkKey, "utf-8"); - Object checkCode = redisUtil.get(realKey); - if(checkCode==null || !checkCode.equals(lowerCaseCaptcha)) { - return Result.error("验证码错误"); - } - return Result.ok(); - } - /** - * 登录二维码 - */ - @Operation(summary = "登录二维码") - @GetMapping("/getLoginQrcode") - public Result getLoginQrcode() { - String qrcodeId = CommonConstant.LOGIN_QRCODE_PRE+IdWorker.getIdStr(); - //定义二维码参数 - Map params = new HashMap(5); - params.put("qrcodeId", qrcodeId); - //存放二维码唯一标识30秒有效 - redisUtil.set(CommonConstant.LOGIN_QRCODE + qrcodeId, qrcodeId, 30); - return Result.OK(params); - } - /** - * 扫码二维码 - */ - @Operation(summary = "扫码登录二维码") - @PostMapping("/scanLoginQrcode") - public Result scanLoginQrcode(@RequestParam String qrcodeId, @RequestParam String token) { - Object check = redisUtil.get(CommonConstant.LOGIN_QRCODE + qrcodeId); - if (oConvertUtils.isNotEmpty(check)) { - //存放token给前台读取 - redisUtil.set(CommonConstant.LOGIN_QRCODE_TOKEN+qrcodeId, token, 60); - } else { - return Result.error("二维码已过期,请刷新后重试"); - } - return Result.OK("扫码成功"); - } + //token 信息 + obj.put("token", token); + result.setResult(obj); + result.setSuccess(true); + result.setCode(200); + baseCommonService.addLog("用户名: " + username + ",登录成功[移动端]!", CommonConstant.LOG_TYPE_1, null); + return result; + } + + /** + * 图形验证码 + * + * @param sysLoginModel + * @return + */ + @RequestMapping(value = "/checkCaptcha", method = RequestMethod.POST) + public Result checkCaptcha(@RequestBody SysLoginModel sysLoginModel) { + String captcha = sysLoginModel.getCaptcha(); + String checkKey = sysLoginModel.getCheckKey(); + if (captcha == null) { + return Result.error("验证码无效"); + } + String lowerCaseCaptcha = captcha.toLowerCase(); + String realKey = Md5Util.md5Encode(lowerCaseCaptcha + checkKey, "utf-8"); + Object checkCode = redisUtil.get(realKey); + if (checkCode == null || !checkCode.equals(lowerCaseCaptcha)) { + return Result.error("验证码错误"); + } + return Result.ok(); + } + + /** + * 登录二维码 + */ + @Operation(summary = "登录二维码") + @GetMapping("/getLoginQrcode") + public Result getLoginQrcode() { + String qrcodeId = CommonConstant.LOGIN_QRCODE_PRE + IdWorker.getIdStr(); + //定义二维码参数 + Map params = new HashMap(5); + params.put("qrcodeId", qrcodeId); + //存放二维码唯一标识30秒有效 + redisUtil.set(CommonConstant.LOGIN_QRCODE + qrcodeId, qrcodeId, 30); + return Result.OK(params); + } + + /** + * 扫码二维码 + */ + @Operation(summary = "扫码登录二维码") + @PostMapping("/scanLoginQrcode") + public Result scanLoginQrcode(@RequestParam String qrcodeId, @RequestParam String token) { + Object check = redisUtil.get(CommonConstant.LOGIN_QRCODE + qrcodeId); + if (oConvertUtils.isNotEmpty(check)) { + //存放token给前台读取 + redisUtil.set(CommonConstant.LOGIN_QRCODE_TOKEN + qrcodeId, token, 60); + } else { + return Result.error("二维码已过期,请刷新后重试"); + } + return Result.OK("扫码成功"); + } - /** - * 获取用户扫码后保存的token - */ - @Operation(summary = "获取用户扫码后保存的token") - @GetMapping("/getQrcodeToken") - public Result getQrcodeToken(@RequestParam String qrcodeId) { - Object token = redisUtil.get(CommonConstant.LOGIN_QRCODE_TOKEN + qrcodeId); - Map result = new HashMap(5); - Object qrcodeIdExpire = redisUtil.get(CommonConstant.LOGIN_QRCODE + qrcodeId); - if (oConvertUtils.isEmpty(qrcodeIdExpire)) { - //二维码过期通知前台刷新 - result.put("token", "-2"); - return Result.OK(result); - } - if (oConvertUtils.isNotEmpty(token)) { - result.put("success", true); - result.put("token", token); - } else { - result.put("token", "-1"); - } - return Result.OK(result); - } + /** + * 获取用户扫码后保存的token + */ + @Operation(summary = "获取用户扫码后保存的token") + @GetMapping("/getQrcodeToken") + public Result getQrcodeToken(@RequestParam String qrcodeId) { + Object token = redisUtil.get(CommonConstant.LOGIN_QRCODE_TOKEN + qrcodeId); + Map result = new HashMap(5); + Object qrcodeIdExpire = redisUtil.get(CommonConstant.LOGIN_QRCODE + qrcodeId); + if (oConvertUtils.isEmpty(qrcodeIdExpire)) { + //二维码过期通知前台刷新 + result.put("token", "-2"); + return Result.OK(result); + } + if (oConvertUtils.isNotEmpty(token)) { + result.put("success", true); + result.put("token", token); + } else { + result.put("token", "-1"); + } + return Result.OK(result); + } - /** - * 登录失败超出次数5 返回true - * @param username - * @return - */ - private boolean isLoginFailOvertimes(String username){ - String key = CommonConstant.LOGIN_FAIL + username; - Object failTime = redisUtil.get(key); - if(failTime!=null){ - Integer val = Integer.parseInt(failTime.toString()); - if(val>5){ - return true; - } - } - return false; - } + /** + * 登录失败超出次数5 返回true + * + * @param username + * @return + */ + private boolean isLoginFailOvertimes(String username) { + String key = CommonConstant.LOGIN_FAIL + username; + Object failTime = redisUtil.get(key); + if (failTime != null) { + Integer val = Integer.parseInt(failTime.toString()); + if (val > 5) { + return true; + } + } + return false; + } - /** - * 记录登录失败次数 - * @param username - */ - private void addLoginFailOvertimes(String username){ - String key = CommonConstant.LOGIN_FAIL + username; - Object failTime = redisUtil.get(key); - Integer val = 0; - if(failTime!=null){ - val = Integer.parseInt(failTime.toString()); - } - // 10分钟,一分钟为60s - redisUtil.set(key, ++val, 600); - } + /** + * 记录登录失败次数 + * + * @param username + */ + private void addLoginFailOvertimes(String username) { + String key = CommonConstant.LOGIN_FAIL + username; + Object failTime = redisUtil.get(key); + Integer val = 0; + if (failTime != null) { + val = Integer.parseInt(failTime.toString()); + } + // 10分钟,一分钟为60s + redisUtil.set(key, ++val, 600); + } - /** - * 发送短信验证码接口(修改密码) - * - * @param jsonObject - * @return - */ - @PostMapping(value = "/sendChangePwdSms") - public Result sendSms(@RequestBody JSONObject jsonObject) { - Result result = new Result<>(); - String mobile = jsonObject.get("mobile").toString(); - if (oConvertUtils.isEmpty(mobile)) { - result.setMessage("手机号不允许为空!"); - result.setSuccess(false); - return result; - } - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String username = sysUser.getUsername(); - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysUser::getUsername, username).eq(SysUser::getPhone, mobile); - SysUser user = sysUserService.getOne(query); - if (null == user) { - return Result.error("当前登录用户和绑定的手机号不匹配,无法修改密码!"); - } - String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + mobile; - Object object = redisUtil.get(redisKey); - if (object != null) { - result.setMessage("验证码10分钟内,仍然有效!"); - result.setSuccess(false); - return result; - } - //随机数 - String captcha = RandomUtil.randomNumbers(6); - JSONObject obj = new JSONObject(); - obj.put("code", captcha); - try { - boolean b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.CHANGE_PASSWORD_TEMPLATE_CODE); - if (!b) { - result.setMessage("短信验证码发送失败,请稍后重试"); - result.setSuccess(false); - return result; - } - //验证码5分钟内有效 - redisUtil.set(redisKey, captcha, 300); - result.setSuccess(true); - } catch (ClientException e) { - e.printStackTrace(); - result.error500(" 短信接口未配置,请联系管理员!"); - return result; - } - return result; - } + /** + * 发送短信验证码接口(修改密码) + * + * @param jsonObject + * @return + */ + @PostMapping(value = "/sendChangePwdSms") + public Result sendSms(@RequestBody JSONObject jsonObject) { + Result result = new Result<>(); + String mobile = jsonObject.get("mobile").toString(); + if (oConvertUtils.isEmpty(mobile)) { + result.setMessage("手机号不允许为空!"); + result.setSuccess(false); + return result; + } + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String username = sysUser.getUsername(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysUser::getUsername, username).eq(SysUser::getPhone, mobile); + SysUser user = sysUserService.getOne(query); + if (null == user) { + return Result.error("当前登录用户和绑定的手机号不匹配,无法修改密码!"); + } + String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + mobile; + Object object = redisUtil.get(redisKey); + if (object != null) { + result.setMessage("验证码10分钟内,仍然有效!"); + result.setSuccess(false); + return result; + } + //随机数 + String captcha = RandomUtil.randomNumbers(6); + JSONObject obj = new JSONObject(); + obj.put("code", captcha); + try { + boolean b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.CHANGE_PASSWORD_TEMPLATE_CODE); + if (!b) { + result.setMessage("短信验证码发送失败,请稍后重试"); + result.setSuccess(false); + return result; + } + //验证码5分钟内有效 + redisUtil.set(redisKey, captcha, 300); + result.setSuccess(true); + } catch (ClientException e) { + e.printStackTrace(); + result.error500(" 短信接口未配置,请联系管理员!"); + return result; + } + return result; + } + + + /** + * 图形验证码 + * + * @param sysLoginModel + * @return + */ + @RequestMapping(value = "/smsCheckCaptcha", method = RequestMethod.POST) + public Result smsCheckCaptcha(@RequestBody SysLoginModel sysLoginModel, HttpServletRequest request) { + String captcha = sysLoginModel.getCaptcha(); + String checkKey = sysLoginModel.getCheckKey(); + if (captcha == null) { + return Result.error("验证码无效"); + } + String lowerCaseCaptcha = captcha.toLowerCase(); + String realKey = Md5Util.md5Encode(lowerCaseCaptcha + checkKey + jeecgBaseConfig.getSignatureSecret(), "utf-8"); + Object checkCode = redisUtil.get(realKey); + if (checkCode == null || !checkCode.equals(lowerCaseCaptcha)) { + return Result.error("验证码错误"); + } + String clientIp = IpUtils.getIpAddr(request); + //清空短信记录数量 + DySmsLimit.clearSendSmsCount(clientIp); + redisUtil.removeAll(realKey); + return Result.ok(); + } - - /** - * 图形验证码 - * @param sysLoginModel - * @return - */ - @RequestMapping(value = "/smsCheckCaptcha", method = RequestMethod.POST) - public Result smsCheckCaptcha(@RequestBody SysLoginModel sysLoginModel, HttpServletRequest request){ - String captcha = sysLoginModel.getCaptcha(); - String checkKey = sysLoginModel.getCheckKey(); - if(captcha==null){ - return Result.error("验证码无效"); - } - String lowerCaseCaptcha = captcha.toLowerCase(); - String realKey = Md5Util.md5Encode(lowerCaseCaptcha+checkKey+jeecgBaseConfig.getSignatureSecret(), "utf-8"); - Object checkCode = redisUtil.get(realKey); - if(checkCode==null || !checkCode.equals(lowerCaseCaptcha)) { - return Result.error("验证码错误"); - } - String clientIp = IpUtils.getIpAddr(request); - //清空短信记录数量 - DySmsLimit.clearSendSmsCount(clientIp); - redisUtil.removeAll(realKey); - return Result.ok(); - } - } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java index 8219272..15062a4 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java @@ -6,6 +6,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jeecg.dingtalk.api.core.response.Response; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.shiro.SecurityUtils; @@ -44,9 +47,6 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; import java.util.HashMap; @@ -71,327 +71,335 @@ import static org.jeecg.common.constant.CommonConstant.ANNOUNCEMENT_SEND_STATUS_ @RequestMapping("/sys/annountCement") @Slf4j public class SysAnnouncementController { - @Autowired - private ISysAnnouncementService sysAnnouncementService; - @Autowired - private ISysAnnouncementSendService sysAnnouncementSendService; - @Resource + @Autowired + private ISysAnnouncementService sysAnnouncementService; + @Autowired + private ISysAnnouncementSendService sysAnnouncementSendService; + @Resource private WebSocket webSocket; - @Autowired + @Autowired ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; - @Autowired + @Autowired ThirdAppDingtalkServiceImpl dingtalkService; - @Autowired - private SysBaseApiImpl sysBaseApi; - @Autowired - @Lazy - private RedisUtil redisUtil; - @Autowired - public RedisTemplate redisTemplate; - - /** - * QQYUN-5072【性能优化】线上通知消息打开有点慢 - */ - public static ExecutorService cachedThreadPool = new ThreadPoolExecutor(0, 1024,60L, TimeUnit.SECONDS, new SynchronousQueue()); - public static ExecutorService completeNoteThreadPool = new ThreadPoolExecutor(0, 1024,60L, TimeUnit.SECONDS, new SynchronousQueue()); + @Autowired + private SysBaseApiImpl sysBaseApi; + @Autowired + @Lazy + private RedisUtil redisUtil; + @Autowired + public RedisTemplate redisTemplate; - /** - * 分页列表查询 - * @param sysAnnouncement - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result> queryPageList(SysAnnouncement sysAnnouncement, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - sysAnnouncement.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - Result> result = new Result>(); - sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysAnnouncement, req.getParameterMap()); - Page page = new Page(pageNo,pageSize); - IPage pageList = sysAnnouncementService.page(page, queryWrapper); - result.setSuccess(true); - result.setResult(pageList); - return result; - } + /** + * QQYUN-5072【性能优化】线上通知消息打开有点慢 + */ + public static ExecutorService cachedThreadPool = new ThreadPoolExecutor(0, 1024, 60L, TimeUnit.SECONDS, new SynchronousQueue()); + public static ExecutorService completeNoteThreadPool = new ThreadPoolExecutor(0, 1024, 60L, TimeUnit.SECONDS, new SynchronousQueue()); - /** - * 添加 - * @param sysAnnouncement - * @return - */ - @RequestMapping(value = "/add", method = RequestMethod.POST) - public Result add(@RequestBody SysAnnouncement sysAnnouncement) { - Result result = new Result(); - try { - // update-begin-author:liusq date:20210804 for:标题处理xss攻击的问题 - String title = XssUtils.scriptXss(sysAnnouncement.getTitile()); - sysAnnouncement.setTitile(title); - // update-end-author:liusq date:20210804 for:标题处理xss攻击的问题 - sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + /** + * 分页列表查询 + * + * @param sysAnnouncement + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysAnnouncement sysAnnouncement, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + sysAnnouncement.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + Result> result = new Result>(); + sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysAnnouncement, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysAnnouncementService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * + * @param sysAnnouncement + * @return + */ + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody SysAnnouncement sysAnnouncement) { + Result result = new Result(); + try { + // update-begin-author:liusq date:20210804 for:标题处理xss攻击的问题 + String title = XssUtils.scriptXss(sysAnnouncement.getTitile()); + sysAnnouncement.setTitile(title); + // update-end-author:liusq date:20210804 for:标题处理xss攻击的问题 + sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); //未发布 - sysAnnouncement.setSendStatus(CommonSendStatus.UNPUBLISHED_STATUS_0); - sysAnnouncementService.saveAnnouncement(sysAnnouncement); - result.success("添加成功!"); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败"); - } - return result; - } + sysAnnouncement.setSendStatus(CommonSendStatus.UNPUBLISHED_STATUS_0); + sysAnnouncementService.saveAnnouncement(sysAnnouncement); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } - /** - * 编辑 - * @param sysAnnouncement - * @return - */ - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result eidt(@RequestBody SysAnnouncement sysAnnouncement) { - Result result = new Result(); - SysAnnouncement sysAnnouncementEntity = sysAnnouncementService.getById(sysAnnouncement.getId()); - if(sysAnnouncementEntity==null) { - result.error500("未找到对应实体"); - }else { - // update-begin-author:liusq date:20210804 for:标题处理xss攻击的问题 - String title = XssUtils.scriptXss(sysAnnouncement.getTitile()); - sysAnnouncement.setTitile(title); - // update-end-author:liusq date:20210804 for:标题处理xss攻击的问题 - boolean ok = sysAnnouncementService.upDateAnnouncement(sysAnnouncement); - //TODO 返回false说明什么? - if(ok) { - result.success("修改成功!"); - } - } + /** + * 编辑 + * + * @param sysAnnouncement + * @return + */ + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result eidt(@RequestBody SysAnnouncement sysAnnouncement) { + Result result = new Result(); + SysAnnouncement sysAnnouncementEntity = sysAnnouncementService.getById(sysAnnouncement.getId()); + if (sysAnnouncementEntity == null) { + result.error500("未找到对应实体"); + } else { + // update-begin-author:liusq date:20210804 for:标题处理xss攻击的问题 + String title = XssUtils.scriptXss(sysAnnouncement.getTitile()); + sysAnnouncement.setTitile(title); + // update-end-author:liusq date:20210804 for:标题处理xss攻击的问题 + boolean ok = sysAnnouncementService.upDateAnnouncement(sysAnnouncement); + //TODO 返回false说明什么? + if (ok) { + result.success("修改成功!"); + } + } - return result; - } + return result; + } - /** - * 通过id删除 - * @param id - * @return - */ - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); - if(sysAnnouncement==null) { - result.error500("未找到对应实体"); - }else { - sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_1.toString()); - boolean ok = sysAnnouncementService.updateById(sysAnnouncement); - if(ok) { - result.success("删除成功!"); - } - } + /** + * 通过id删除 + * + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if (sysAnnouncement == null) { + result.error500("未找到对应实体"); + } else { + sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_1.toString()); + boolean ok = sysAnnouncementService.updateById(sysAnnouncement); + if (ok) { + result.success("删除成功!"); + } + } - return result; - } + return result; + } - /** - * 批量删除 - * @param ids - * @return - */ - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - Result result = new Result(); - if(ids==null || "".equals(ids.trim())) { - result.error500("参数不识别!"); - }else { - String[] id = ids.split(","); - for(int i=0;i deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + String[] id = ids.split(","); + for (int i = 0; i < id.length; i++) { + SysAnnouncement announcement = sysAnnouncementService.getById(id[i]); + announcement.setDelFlag(CommonConstant.DEL_FLAG_1.toString()); + sysAnnouncementService.updateById(announcement); + } + result.success("删除成功!"); + } + return result; + } - /** - * 通过id查询 - * @param id - * @return - */ - @RequestMapping(value = "/queryById", method = RequestMethod.GET) - public Result queryById(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); - if(sysAnnouncement==null) { - result.error500("未找到对应实体"); - }else { - result.setResult(sysAnnouncement); - result.setSuccess(true); - } - return result; - } + /** + * 通过id查询 + * + * @param id + * @return + */ + @RequestMapping(value = "/queryById", method = RequestMethod.GET) + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if (sysAnnouncement == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(sysAnnouncement); + result.setSuccess(true); + } + return result; + } - /** - * 更新发布操作 - * @param id - * @return - */ - @RequestMapping(value = "/doReleaseData", method = RequestMethod.GET) - public Result doReleaseData(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { - Result result = new Result(); - SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); - if(sysAnnouncement==null) { - result.error500("未找到对应实体"); - }else { + /** + * 更新发布操作 + * + * @param id + * @return + */ + @RequestMapping(value = "/doReleaseData", method = RequestMethod.GET) + public Result doReleaseData(@RequestParam(name = "id", required = true) String id, HttpServletRequest request) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if (sysAnnouncement == null) { + result.error500("未找到对应实体"); + } else { //发布中 - sysAnnouncement.setSendStatus(CommonSendStatus.PUBLISHED_STATUS_1); - sysAnnouncement.setSendTime(new Date()); - String currentUserName = JwtUtil.getUserNameByToken(request); - sysAnnouncement.setSender(currentUserName); - boolean ok = sysAnnouncementService.updateById(sysAnnouncement); - if(ok) { - result.success("系统通知推送成功"); - if(sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) { - // 补全公告和用户之前的关系 - sysAnnouncementService.batchInsertSysAnnouncementSend(sysAnnouncement.getId(), sysAnnouncement.getTenantId()); - - // 推送websocket通知 - JSONObject obj = new JSONObject(); - obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); - obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); - obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); - webSocket.sendMessage(obj.toJSONString()); - }else { - // 2.插入用户通告阅读标记表记录 - String userId = sysAnnouncement.getUserIds(); - String[] userIds = userId.substring(0, (userId.length()-1)).split(","); - String anntId = sysAnnouncement.getId(); - Date refDate = new Date(); - JSONObject obj = new JSONObject(); - obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); - obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); - obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); - webSocket.sendMessage(userIds, obj.toJSONString()); - } - try { - // 同步企业微信、钉钉的消息通知 - Response dtResponse = dingtalkService.sendActionCardMessage(sysAnnouncement, null, true); - wechatEnterpriseService.sendTextCardMessage(sysAnnouncement, true); + sysAnnouncement.setSendStatus(CommonSendStatus.PUBLISHED_STATUS_1); + sysAnnouncement.setSendTime(new Date()); + String currentUserName = JwtUtil.getUserNameByToken(request); + sysAnnouncement.setSender(currentUserName); + boolean ok = sysAnnouncementService.updateById(sysAnnouncement); + if (ok) { + result.success("系统通知推送成功"); + if (sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) { + // 补全公告和用户之前的关系 + sysAnnouncementService.batchInsertSysAnnouncementSend(sysAnnouncement.getId(), sysAnnouncement.getTenantId()); - if (dtResponse != null && dtResponse.isSuccess()) { - String taskId = dtResponse.getResult(); - sysAnnouncement.setDtTaskId(taskId); - sysAnnouncementService.updateById(sysAnnouncement); - } - } catch (Exception e) { - log.error("同步发送第三方APP消息失败:", e); - } - } - } + // 推送websocket通知 + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); + obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); + webSocket.sendMessage(obj.toJSONString()); + } else { + // 2.插入用户通告阅读标记表记录 + String userId = sysAnnouncement.getUserIds(); + String[] userIds = userId.substring(0, (userId.length() - 1)).split(","); + String anntId = sysAnnouncement.getId(); + Date refDate = new Date(); + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); + obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); + obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); + webSocket.sendMessage(userIds, obj.toJSONString()); + } + try { + // 同步企业微信、钉钉的消息通知 + Response dtResponse = dingtalkService.sendActionCardMessage(sysAnnouncement, null, true); + wechatEnterpriseService.sendTextCardMessage(sysAnnouncement, true); - return result; - } + if (dtResponse != null && dtResponse.isSuccess()) { + String taskId = dtResponse.getResult(); + sysAnnouncement.setDtTaskId(taskId); + sysAnnouncementService.updateById(sysAnnouncement); + } + } catch (Exception e) { + log.error("同步发送第三方APP消息失败:", e); + } + } + } - /** - * 更新撤销操作 - * @param id - * @return - */ - @RequestMapping(value = "/doReovkeData", method = RequestMethod.GET) - public Result doReovkeData(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { - Result result = new Result(); - SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); - if(sysAnnouncement==null) { - result.error500("未找到对应实体"); - }else { + return result; + } + + /** + * 更新撤销操作 + * + * @param id + * @return + */ + @RequestMapping(value = "/doReovkeData", method = RequestMethod.GET) + public Result doReovkeData(@RequestParam(name = "id", required = true) String id, HttpServletRequest request) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if (sysAnnouncement == null) { + result.error500("未找到对应实体"); + } else { //撤销发布 - sysAnnouncement.setSendStatus(CommonSendStatus.REVOKE_STATUS_2); - sysAnnouncement.setCancelTime(new Date()); - boolean ok = sysAnnouncementService.updateById(sysAnnouncement); - if(ok) { - result.success("该系统通知撤销成功"); - if (oConvertUtils.isNotEmpty(sysAnnouncement.getDtTaskId())) { - try { - dingtalkService.recallMessage(sysAnnouncement.getDtTaskId()); - } catch (Exception e) { - log.error("第三方APP撤回消息失败:", e); - } - } - } - } + sysAnnouncement.setSendStatus(CommonSendStatus.REVOKE_STATUS_2); + sysAnnouncement.setCancelTime(new Date()); + boolean ok = sysAnnouncementService.updateById(sysAnnouncement); + if (ok) { + result.success("该系统通知撤销成功"); + if (oConvertUtils.isNotEmpty(sysAnnouncement.getDtTaskId())) { + try { + dingtalkService.recallMessage(sysAnnouncement.getDtTaskId()); + } catch (Exception e) { + log.error("第三方APP撤回消息失败:", e); + } + } + } + } - return result; - } + return result; + } - /** - * @功能:补充用户数据,并返回系统消息 - * @return - */ - @RequestMapping(value = "/listByUser", method = RequestMethod.GET) - public Result> listByUser(@RequestParam(required = false, defaultValue = "5") Integer pageSize, HttpServletRequest request) { - long start = System.currentTimeMillis(); - Result> result = new Result>(); - Map sysMsgMap = new HashMap(5); - LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); - String userId = sysUser.getId(); + /** + * @return + * @功能:补充用户数据,并返回系统消息 + */ + @RequestMapping(value = "/listByUser", method = RequestMethod.GET) + public Result> listByUser(@RequestParam(required = false, defaultValue = "5") Integer pageSize, HttpServletRequest request) { + long start = System.currentTimeMillis(); + Result> result = new Result>(); + Map sysMsgMap = new HashMap(5); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); - //update-begin---author:scott ---date:2024-05-11 for:【性能优化】优化系统通知,只查近2个月的通知--- - // 获取上个月的第一天(只查近两个月的通知) - Date lastMonthStartDay = DateRangeUtils.getLastMonthStartDay(); - log.info("-----查询近两个月收到的未读通知-----,近2月的第一天:{}", lastMonthStartDay); - //update-end---author:scott ---date::2024-05-11 for:【性能优化】优化系统通知,只查近2个月的通知--- - + //update-begin---author:scott ---date:2024-05-11 for:【性能优化】优化系统通知,只查近2个月的通知--- + // 获取上个月的第一天(只查近两个月的通知) + Date lastMonthStartDay = DateRangeUtils.getLastMonthStartDay(); + log.info("-----查询近两个月收到的未读通知-----,近2月的第一天:{}", lastMonthStartDay); + //update-end---author:scott ---date::2024-05-11 for:【性能优化】优化系统通知,只查近2个月的通知--- + // //补推送数据(用户和通知的关系表) // completeNoteThreadPool.execute(()->{ // sysAnnouncementService.completeAnnouncementSendInfo(); // }); - - // 2.查询用户未读的系统消息 - Page anntMsgList = new Page(0, pageSize); + + // 2.查询用户未读的系统消息 + Page anntMsgList = new Page(0, pageSize); //通知公告消息 - anntMsgList = sysAnnouncementService.querySysCementPageByUserId(anntMsgList,userId,"1",null, lastMonthStartDay); - sysMsgMap.put("anntMsgList", anntMsgList.getRecords()); - sysMsgMap.put("anntMsgTotal", anntMsgList.getTotal()); + anntMsgList = sysAnnouncementService.querySysCementPageByUserId(anntMsgList, userId, "1", null, lastMonthStartDay); + sysMsgMap.put("anntMsgList", anntMsgList.getRecords()); + sysMsgMap.put("anntMsgTotal", anntMsgList.getTotal()); + + log.info("begin 获取用户近2个月的系统公告 (通知)" + (System.currentTimeMillis() - start) + "毫秒"); - log.info("begin 获取用户近2个月的系统公告 (通知)" + (System.currentTimeMillis() - start) + "毫秒"); - //系统消息 - Page sysMsgList = new Page(0, pageSize); - sysMsgList = sysAnnouncementService.querySysCementPageByUserId(sysMsgList,userId,"2",null, lastMonthStartDay); - sysMsgMap.put("sysMsgList", sysMsgList.getRecords()); - sysMsgMap.put("sysMsgTotal", sysMsgList.getTotal()); + Page sysMsgList = new Page(0, pageSize); + sysMsgList = sysAnnouncementService.querySysCementPageByUserId(sysMsgList, userId, "2", null, lastMonthStartDay); + sysMsgMap.put("sysMsgList", sysMsgList.getRecords()); + sysMsgMap.put("sysMsgTotal", sysMsgList.getTotal()); - log.info("end 获取用户2个月的系统公告 (系统消息)" + (System.currentTimeMillis() - start) + "毫秒"); - - result.setSuccess(true); - result.setResult(sysMsgMap); - return result; - } + log.info("end 获取用户2个月的系统公告 (系统消息)" + (System.currentTimeMillis() - start) + "毫秒"); + + result.setSuccess(true); + result.setResult(sysMsgMap); + return result; + } - /** - * 获取未读消息通知数量 - * - * @return - */ - @RequestMapping(value = "/getUnreadMessageCount", method = RequestMethod.GET) - public Result getUnreadMessageCount(@RequestParam(required = false, defaultValue = "5") Integer pageSize, HttpServletRequest request) { - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String userId = sysUser.getId(); + /** + * 获取未读消息通知数量 + * + * @return + */ + @RequestMapping(value = "/getUnreadMessageCount", method = RequestMethod.GET) + public Result getUnreadMessageCount(@RequestParam(required = false, defaultValue = "5") Integer pageSize, HttpServletRequest request) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); - // 获取上个月的第一天(只查近两个月的通知) - Date lastMonthStartDay = DateRangeUtils.getLastMonthStartDay(); - log.info(" ------查询近两个月收到的未读通知消息数量------,近2月的第一天:{}", lastMonthStartDay); - Integer unreadMessageCount = sysAnnouncementService.getUnreadMessageCountByUserId(userId, lastMonthStartDay); - return Result.ok(unreadMessageCount); - } + // 获取上个月的第一天(只查近两个月的通知) + Date lastMonthStartDay = DateRangeUtils.getLastMonthStartDay(); + log.info(" ------查询近两个月收到的未读通知消息数量------,近2月的第一天:{}", lastMonthStartDay); + Integer unreadMessageCount = sysAnnouncementService.getUnreadMessageCountByUserId(userId, lastMonthStartDay); + return Result.ok(unreadMessageCount); + } /** @@ -400,18 +408,18 @@ public class SysAnnouncementController { * @param request */ @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(SysAnnouncement sysAnnouncement,HttpServletRequest request) { + public ModelAndView exportXls(SysAnnouncement sysAnnouncement, HttpServletRequest request) { // Step.1 组装查询条件 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(sysAnnouncement); //Step.2 AutoPoi 导出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - queryWrapper.eq(SysAnnouncement::getDelFlag,CommonConstant.DEL_FLAG_0.toString()); + queryWrapper.eq(SysAnnouncement::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); List pageList = sysAnnouncementService.list(queryWrapper); //导出文件名称 mv.addObject(NormalExcelConstants.FILE_NAME, "系统通告列表"); mv.addObject(NormalExcelConstants.CLASS, SysAnnouncement.class); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("系统通告列表数据", "导出人:"+user.getRealname(), "导出信息")); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("系统通告列表数据", "导出人:" + user.getRealname(), "导出信息")); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; } @@ -437,14 +445,14 @@ public class SysAnnouncementController { try { List listSysAnnouncements = ExcelImportUtil.importExcel(file.getInputStream(), SysAnnouncement.class, params); for (SysAnnouncement sysAnnouncementExcel : listSysAnnouncements) { - if(sysAnnouncementExcel.getDelFlag()==null){ - sysAnnouncementExcel.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); - } + if (sysAnnouncementExcel.getDelFlag() == null) { + sysAnnouncementExcel.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + } sysAnnouncementService.save(sysAnnouncementExcel); } return Result.ok("文件导入成功!数据行数:" + listSysAnnouncements.size()); } catch (Exception e) { - log.error(e.getMessage(),e); + log.error(e.getMessage(), e); return Result.error("文件导入失败!"); } finally { try { @@ -456,51 +464,54 @@ public class SysAnnouncementController { } return Result.error("文件导入失败!"); } - /** - *同步消息 - * @param anntId - * @return - */ - @RequestMapping(value = "/syncNotic", method = RequestMethod.GET) - public Result syncNotic(@RequestParam(name="anntId",required=false) String anntId, HttpServletRequest request) { - Result result = new Result(); - JSONObject obj = new JSONObject(); - if(StringUtils.isNotBlank(anntId)){ - SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(anntId); - if(sysAnnouncement==null) { - result.error500("未找到对应实体"); - }else { - if(sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) { - obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); - obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); - obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); - webSocket.sendMessage(obj.toJSONString()); - }else { - // 2.插入用户通告阅读标记表记录 - String userId = sysAnnouncement.getUserIds(); - if(oConvertUtils.isNotEmpty(userId)){ - String[] userIds = userId.substring(0, (userId.length()-1)).split(","); - obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); - obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); - obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); - webSocket.sendMessage(userIds, obj.toJSONString()); - } - } - } - }else{ - obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); - obj.put(WebsocketConst.MSG_TXT, "批量设置已读"); - webSocket.sendMessage(obj.toJSONString()); - } - return result; - } - /** - * 通告查看详情页面(用于第三方APP) - * @param modelAndView - * @param id - * @return - */ + /** + * 同步消息 + * + * @param anntId + * @return + */ + @RequestMapping(value = "/syncNotic", method = RequestMethod.GET) + public Result syncNotic(@RequestParam(name = "anntId", required = false) String anntId, HttpServletRequest request) { + Result result = new Result(); + JSONObject obj = new JSONObject(); + if (StringUtils.isNotBlank(anntId)) { + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(anntId); + if (sysAnnouncement == null) { + result.error500("未找到对应实体"); + } else { + if (sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) { + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); + obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); + webSocket.sendMessage(obj.toJSONString()); + } else { + // 2.插入用户通告阅读标记表记录 + String userId = sysAnnouncement.getUserIds(); + if (oConvertUtils.isNotEmpty(userId)) { + String[] userIds = userId.substring(0, (userId.length() - 1)).split(","); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); + obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); + obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); + webSocket.sendMessage(userIds, obj.toJSONString()); + } + } + } + } else { + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + obj.put(WebsocketConst.MSG_TXT, "批量设置已读"); + webSocket.sendMessage(obj.toJSONString()); + } + return result; + } + + /** + * 通告查看详情页面(用于第三方APP) + * + * @param modelAndView + * @param id + * @return + */ @GetMapping("/show/{id}") public ModelAndView showContent(ModelAndView modelAndView, @PathVariable("id") String id, HttpServletRequest request) { SysAnnouncement announcement = sysAnnouncementService.getById(id); @@ -523,121 +534,124 @@ public class SysAnnouncementController { return modelAndView; } - /** - * 【vue3用】 消息列表查询 - * @param fromUser - * @param beginDate - * @param endDate - * @param pageNo - * @param pageSize - * @return - */ - @RequestMapping(value = "/vue3List", method = RequestMethod.GET) - public Result> vue3List(@RequestParam(name="fromUser", required = false) String fromUser, - @RequestParam(name="starFlag", required = false) String starFlag, - @RequestParam(name="rangeDateKey", required = false) String rangeDateKey, - @RequestParam(name="beginDate", required = false) String beginDate, - @RequestParam(name="endDate", required = false) String endDate, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { - long calStartTime = System.currentTimeMillis(); // 记录开始时间 - - // 1、获取日期查询条件,开始时间和结束时间 - Date beginTime = null, endTime = null; - if (RangeDateEnum.ZDY.getKey().equals(rangeDateKey)) { - // 自定义日期范围查询 - if (oConvertUtils.isNotEmpty(beginDate)) { - beginTime = DateUtils.parseDatetime(beginDate); - } - if (oConvertUtils.isNotEmpty(endDate)) { - endTime = DateUtils.parseDatetime(endDate); - } - } else { - // 日期段落查询 - Date[] arr = RangeDateEnum.getRangeArray(rangeDateKey); - if (arr != null) { - beginTime = arr[0]; - endTime = arr[1]; - } - } - - // 2、根据条件查询用户的通知消息 - List ls = this.sysAnnouncementService.querySysMessageList(pageSize, pageNo, fromUser, starFlag, beginTime, endTime); + /** + * 【vue3用】 消息列表查询 + * + * @param fromUser + * @param beginDate + * @param endDate + * @param pageNo + * @param pageSize + * @return + */ + @RequestMapping(value = "/vue3List", method = RequestMethod.GET) + public Result> vue3List(@RequestParam(name = "fromUser", required = false) String fromUser, + @RequestParam(name = "starFlag", required = false) String starFlag, + @RequestParam(name = "rangeDateKey", required = false) String rangeDateKey, + @RequestParam(name = "beginDate", required = false) String beginDate, + @RequestParam(name = "endDate", required = false) String endDate, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + long calStartTime = System.currentTimeMillis(); // 记录开始时间 - // 3、设置当前页的消息为已读 - if (!CollectionUtils.isEmpty(ls)) { - // 设置已读 - String readed = "1"; - List annoceIdList = ls.stream().filter(item -> !readed.equals(item.getReadFlag())).map(item -> item.getId()).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(annoceIdList)) { - cachedThreadPool.execute(() -> { - sysAnnouncementService.updateReaded(annoceIdList); - }); - } - } - - JSONObject obj = new JSONObject(); - obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - webSocket.sendMessage(sysUser.getId(), obj.toJSONString()); + // 1、获取日期查询条件,开始时间和结束时间 + Date beginTime = null, endTime = null; + if (RangeDateEnum.ZDY.getKey().equals(rangeDateKey)) { + // 自定义日期范围查询 + if (oConvertUtils.isNotEmpty(beginDate)) { + beginTime = DateUtils.parseDatetime(beginDate); + } + if (oConvertUtils.isNotEmpty(endDate)) { + endTime = DateUtils.parseDatetime(endDate); + } + } else { + // 日期段落查询 + Date[] arr = RangeDateEnum.getRangeArray(rangeDateKey); + if (arr != null) { + beginTime = arr[0]; + endTime = arr[1]; + } + } - // 4、性能统计耗时 - long calEndTime = System.currentTimeMillis(); // 记录结束时间 - long duration = calEndTime - calStartTime; // 计算耗时 - System.out.println("耗时:" + duration + " 毫秒"); - - return Result.ok(ls); - } + // 2、根据条件查询用户的通知消息 + List ls = this.sysAnnouncementService.querySysMessageList(pageSize, pageNo, fromUser, starFlag, beginTime, endTime); + + // 3、设置当前页的消息为已读 + if (!CollectionUtils.isEmpty(ls)) { + // 设置已读 + String readed = "1"; + List annoceIdList = ls.stream().filter(item -> !readed.equals(item.getReadFlag())).map(item -> item.getId()).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(annoceIdList)) { + cachedThreadPool.execute(() -> { + sysAnnouncementService.updateReaded(annoceIdList); + }); + } + } + + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + webSocket.sendMessage(sysUser.getId(), obj.toJSONString()); + + // 4、性能统计耗时 + long calEndTime = System.currentTimeMillis(); // 记录结束时间 + long duration = calEndTime - calStartTime; // 计算耗时 + System.out.println("耗时:" + duration + " 毫秒"); + + return Result.ok(ls); + } /** * 根据用户id获取最新一条消息发送时间(创建时间) + * * @param userId * @return */ - @GetMapping("/getLastAnnountTime") - public Result> getLastAnnountTime(@RequestParam(name = "userId") String userId){ - Result> result = new Result<>(); - //---------------------------------------------------------------------------------------- - // step.1 此接口过慢,可以采用缓存一小时方案 - String keyString = String.format(CommonConstant.CACHE_KEY_USER_LAST_ANNOUNT_TIME_1HOUR, userId); - if (redisTemplate.hasKey(keyString)) { - log.info("[SysAnnouncementSend Redis] 通过Redis缓存查询用户最后一次收到系统通知时间,userId={}", userId); - Page pageList = (Page) redisTemplate.opsForValue().get(keyString); - result.setSuccess(true); - result.setResult(pageList); - return result; - } - //---------------------------------------------------------------------------------------- + @GetMapping("/getLastAnnountTime") + public Result> getLastAnnountTime(@RequestParam(name = "userId") String userId) { + Result> result = new Result<>(); + //---------------------------------------------------------------------------------------- + // step.1 此接口过慢,可以采用缓存一小时方案 + String keyString = String.format(CommonConstant.CACHE_KEY_USER_LAST_ANNOUNT_TIME_1HOUR, userId); + if (redisTemplate.hasKey(keyString)) { + log.info("[SysAnnouncementSend Redis] 通过Redis缓存查询用户最后一次收到系统通知时间,userId={}", userId); + Page pageList = (Page) redisTemplate.opsForValue().get(keyString); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + //---------------------------------------------------------------------------------------- - Page page = new Page<>(1,1); + Page page = new Page<>(1, 1); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysAnnouncementSend::getUserId,userId); + query.eq(SysAnnouncementSend::getUserId, userId); //只查询上个月和本月,的通知的数据 - query.ne(SysAnnouncementSend::getCreateTime, DateRangeUtils.getLastMonthStartDay()); + query.ne(SysAnnouncementSend::getCreateTime, DateRangeUtils.getLastMonthStartDay()); query.select(SysAnnouncementSend::getCreateTime); // 提高查询效率 query.orderByDesc(SysAnnouncementSend::getCreateTime); Page pageList = sysAnnouncementSendService.page(page, query); - //---------------------------------------------------------------------------------------- - if (pageList != null && pageList.getSize() > 0) { - // step.3 保留1小时redis缓存 - redisTemplate.opsForValue().set(keyString, pageList, 3600, TimeUnit.SECONDS); - } - //---------------------------------------------------------------------------------------- + //---------------------------------------------------------------------------------------- + if (pageList != null && pageList.getSize() > 0) { + // step.3 保留1小时redis缓存 + redisTemplate.opsForValue().set(keyString, pageList, 3600, TimeUnit.SECONDS); + } + //---------------------------------------------------------------------------------------- - result.setSuccess(true); - result.setResult(pageList); + result.setSuccess(true); + result.setResult(pageList); return result; } - /** - * 清除当前用户所有未读消息 - * @return - */ - @PostMapping("/clearAllUnReadMessage") - public Result clearAllUnReadMessage(){ - sysAnnouncementService.clearAllUnReadMessage(); - return Result.ok("清除未读消息成功"); - } + /** + * 清除当前用户所有未读消息 + * + * @return + */ + @PostMapping("/clearAllUnReadMessage") + public Result clearAllUnReadMessage() { + sysAnnouncementService.clearAllUnReadMessage(); + return Result.ok("清除未读消息成功"); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java index 72b9d9e..ba6a06a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java @@ -1,10 +1,13 @@ package org.jeecg.modules.system.controller; -import java.util.Arrays; -import java.util.Date; - +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.servlet.http.HttpServletRequest; - +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; @@ -18,252 +21,246 @@ import org.jeecg.modules.system.entity.SysAnnouncementSend; import org.jeecg.modules.system.model.AnnouncementSendModel; import org.jeecg.modules.system.service.ISysAnnouncementSendService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.util.Arrays; +import java.util.Date; -import lombok.extern.slf4j.Slf4j; - - /** +/** * @Title: Controller * @Description: 用户通告阅读标记表 * @Author: jeecg-boot - * @Date: 2019-02-21 + * @Date: 2019-02-21 * @Version: V1.0 */ @RestController @RequestMapping("/sys/sysAnnouncementSend") @Slf4j public class SysAnnouncementSendController { - @Autowired - private ISysAnnouncementSendService sysAnnouncementSendService; - @Autowired - private WebSocket webSocket; + @Autowired + private ISysAnnouncementSendService sysAnnouncementSendService; + @Autowired + private WebSocket webSocket; - /** - * 分页列表查询 - * @param sysAnnouncementSend - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @GetMapping(value = "/list") - public Result> queryPageList(SysAnnouncementSend sysAnnouncementSend, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - Result> result = new Result>(); - QueryWrapper queryWrapper = new QueryWrapper(sysAnnouncementSend); - Page page = new Page(pageNo,pageSize); - //排序逻辑 处理 - String column = req.getParameter("column"); - String order = req.getParameter("order"); + /** + * 分页列表查询 + * + * @param sysAnnouncementSend + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/list") + public Result> queryPageList(SysAnnouncementSend sysAnnouncementSend, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = new QueryWrapper(sysAnnouncementSend); + Page page = new Page(pageNo, pageSize); + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); - if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { - if(DataBaseConstant.SQL_ASC.equals(order)) { - queryWrapper.orderByAsc(SqlInjectionUtil.getSqlInjectSortField(column)); - }else { - queryWrapper.orderByDesc(SqlInjectionUtil.getSqlInjectSortField(column)); - } - } - IPage pageList = sysAnnouncementSendService.page(page, queryWrapper); - //log.info("查询当前页:"+pageList.getCurrent()); - //log.info("查询当前页数量:"+pageList.getSize()); - //log.info("查询结果数量:"+pageList.getRecords().size()); - //log.info("数据总数:"+pageList.getTotal()); - result.setSuccess(true); - result.setResult(pageList); - return result; - } - - /** - * 添加 - * @param sysAnnouncementSend - * @return - */ - @PostMapping(value = "/add") - public Result add(@RequestBody SysAnnouncementSend sysAnnouncementSend) { - Result result = new Result(); - try { - sysAnnouncementSendService.save(sysAnnouncementSend); - result.success("添加成功!"); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败"); - } - return result; - } - - /** - * 编辑 - * @param sysAnnouncementSend - * @return - */ - @PutMapping(value = "/edit") - public Result eidt(@RequestBody SysAnnouncementSend sysAnnouncementSend) { - Result result = new Result(); - SysAnnouncementSend sysAnnouncementSendEntity = sysAnnouncementSendService.getById(sysAnnouncementSend.getId()); - if(sysAnnouncementSendEntity==null) { - result.error500("未找到对应实体"); - }else { - boolean ok = sysAnnouncementSendService.updateById(sysAnnouncementSend); - //TODO 返回false说明什么? - if(ok) { - result.success("操作成功!"); - } - } - - return result; - } - - /** - * 通过id删除 - * @param id - * @return - */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendService.getById(id); - if(sysAnnouncementSend==null) { - result.error500("未找到对应实体"); - }else { - boolean ok = sysAnnouncementSendService.removeById(id); - if(ok) { - result.success("删除成功!"); - } - } - - return result; - } - - /** - * 批量删除 - * @param ids - * @return - */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - Result result = new Result(); - if(ids==null || "".equals(ids.trim())) { - result.error500("参数不识别!"); - }else { - this.sysAnnouncementSendService.removeByIds(Arrays.asList(ids.split(","))); - result.success("删除成功!"); - } - return result; - } - - /** - * 通过id查询 - * @param id - * @return - */ - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendService.getById(id); - if(sysAnnouncementSend==null) { - result.error500("未找到对应实体"); - }else { - result.setResult(sysAnnouncementSend); - result.setSuccess(true); - } - return result; - } - - /** - * @功能:更新用户系统消息阅读状态 - * @param json - * @return - */ - @PutMapping(value = "/editByAnntIdAndUserId") - public Result editById(@RequestBody JSONObject json) { - Result result = new Result(); - String anntId = json.getString("anntId"); - LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); - String userId = sysUser.getId(); - LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); - updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); - updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); - //update-begin-author:liusq date:2023-09-04 for:系统模块存在的sql漏洞写法 - updateWrapper.eq(SysAnnouncementSend::getAnntId,anntId); - updateWrapper.eq(SysAnnouncementSend::getUserId,userId); - //update-end-author:liusq date:2023-09-04 for: 系统模块存在的sql漏洞写法 - //updateWrapper.last("where annt_id ='"+anntId+"' and user_id ='"+userId+"'"); - SysAnnouncementSend announcementSend = new SysAnnouncementSend(); - sysAnnouncementSendService.update(announcementSend, updateWrapper); - result.setSuccess(true); - return result; - } - - /** - * @功能:获取我的消息 - * @return - */ - @GetMapping(value = "/getMyAnnouncementSend") - public Result> getMyAnnouncementSend(AnnouncementSendModel announcementSendModel, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { - Result> result = new Result>(); - LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); - String userId = sysUser.getId(); - announcementSendModel.setUserId(userId); - announcementSendModel.setPageNo((pageNo-1)*pageSize); - announcementSendModel.setPageSize(pageSize); - Page pageList = new Page(pageNo,pageSize); - pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(pageList, announcementSendModel); - result.setResult(pageList); - result.setSuccess(true); - return result; - } + if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if (DataBaseConstant.SQL_ASC.equals(order)) { + queryWrapper.orderByAsc(SqlInjectionUtil.getSqlInjectSortField(column)); + } else { + queryWrapper.orderByDesc(SqlInjectionUtil.getSqlInjectSortField(column)); + } + } + IPage pageList = sysAnnouncementSendService.page(page, queryWrapper); + //log.info("查询当前页:"+pageList.getCurrent()); + //log.info("查询当前页数量:"+pageList.getSize()); + //log.info("查询结果数量:"+pageList.getRecords().size()); + //log.info("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } - /** - * @功能:一键已读 - * @return - */ - @PutMapping(value = "/readAll") - public Result readAll() { - Result result = new Result(); - LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); - String userId = sysUser.getId(); - LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); - updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); - updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); - updateWrapper.eq(SysAnnouncementSend::getUserId,userId); - //updateWrapper.last("where user_id ='"+userId+"'"); - SysAnnouncementSend announcementSend = new SysAnnouncementSend(); - sysAnnouncementSendService.update(announcementSend, updateWrapper); - JSONObject socketParams = new JSONObject(); - socketParams.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); - webSocket.sendMessage(socketParams.toJSONString()); - result.setSuccess(true); - result.setMessage("全部已读"); - return result; - } + /** + * 添加 + * + * @param sysAnnouncementSend + * @return + */ + @PostMapping(value = "/add") + public Result add(@RequestBody SysAnnouncementSend sysAnnouncementSend) { + Result result = new Result(); + try { + sysAnnouncementSendService.save(sysAnnouncementSend); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * + * @param sysAnnouncementSend + * @return + */ + @PutMapping(value = "/edit") + public Result eidt(@RequestBody SysAnnouncementSend sysAnnouncementSend) { + Result result = new Result(); + SysAnnouncementSend sysAnnouncementSendEntity = sysAnnouncementSendService.getById(sysAnnouncementSend.getId()); + if (sysAnnouncementSendEntity == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = sysAnnouncementSendService.updateById(sysAnnouncementSend); + //TODO 返回false说明什么? + if (ok) { + result.success("操作成功!"); + } + } + + return result; + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendService.getById(id); + if (sysAnnouncementSend == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = sysAnnouncementSendService.removeById(id); + if (ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.sysAnnouncementSendService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendService.getById(id); + if (sysAnnouncementSend == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(sysAnnouncementSend); + result.setSuccess(true); + } + return result; + } + + /** + * @param json + * @return + * @功能:更新用户系统消息阅读状态 + */ + @PutMapping(value = "/editByAnntIdAndUserId") + public Result editById(@RequestBody JSONObject json) { + Result result = new Result(); + String anntId = json.getString("anntId"); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); + updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); + updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); + //update-begin-author:liusq date:2023-09-04 for:系统模块存在的sql漏洞写法 + updateWrapper.eq(SysAnnouncementSend::getAnntId, anntId); + updateWrapper.eq(SysAnnouncementSend::getUserId, userId); + //update-end-author:liusq date:2023-09-04 for: 系统模块存在的sql漏洞写法 + //updateWrapper.last("where annt_id ='"+anntId+"' and user_id ='"+userId+"'"); + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + sysAnnouncementSendService.update(announcementSend, updateWrapper); + result.setSuccess(true); + return result; + } + + /** + * @return + * @功能:获取我的消息 + */ + @GetMapping(value = "/getMyAnnouncementSend") + public Result> getMyAnnouncementSend(AnnouncementSendModel announcementSendModel, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Result> result = new Result>(); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + announcementSendModel.setUserId(userId); + announcementSendModel.setPageNo((pageNo - 1) * pageSize); + announcementSendModel.setPageSize(pageSize); + Page pageList = new Page(pageNo, pageSize); + pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(pageList, announcementSendModel); + result.setResult(pageList); + result.setSuccess(true); + return result; + } + + /** + * @return + * @功能:一键已读 + */ + @PutMapping(value = "/readAll") + public Result readAll() { + Result result = new Result(); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); + updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); + updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); + updateWrapper.eq(SysAnnouncementSend::getUserId, userId); + //updateWrapper.last("where user_id ='"+userId+"'"); + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + sysAnnouncementSendService.update(announcementSend, updateWrapper); + JSONObject socketParams = new JSONObject(); + socketParams.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + webSocket.sendMessage(socketParams.toJSONString()); + result.setSuccess(true); + result.setMessage("全部已读"); + return result; + } - /** - * 根据消息发送记录ID获取消息内容 - * @param sendId - * @return - */ - @GetMapping(value = "/getOne") - public Result getOne(@RequestParam(name="sendId",required=true) String sendId) { - AnnouncementSendModel model = sysAnnouncementSendService.getOne(sendId); - return Result.ok(model); - } + /** + * 根据消息发送记录ID获取消息内容 + * + * @param sendId + * @return + */ + @GetMapping(value = "/getOne") + public Result getOne(@RequestParam(name = "sendId", required = true) String sendId) { + AnnouncementSendModel model = sysAnnouncementSendService.getOne(sendId); + return Result.ok(model); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java index 969bb6c..ccb8f86 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCategoryController.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.shiro.SecurityUtils; @@ -32,507 +34,514 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; - /** +/** * @Description: 分类字典 * @Author: jeecg-boot - * @Date: 2019-05-29 + * @Date: 2019-05-29 * @Version: V1.0 */ @RestController @RequestMapping("/sys/category") @Slf4j public class SysCategoryController { - @Autowired - private ISysCategoryService sysCategoryService; + @Autowired + private ISysCategoryService sysCategoryService; - /** - * 分类编码0 - */ - private static final String CATEGORY_ROOT_CODE = "0"; - - /** - * 分页列表查询 - * @param sysCategory - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @GetMapping(value = "/rootList") - public Result> queryPageList(SysCategory sysCategory, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - if(oConvertUtils.isEmpty(sysCategory.getPid())){ - sysCategory.setPid("0"); - } - Result> result = new Result>(); - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(),0)); - } - //------------------------------------------------------------------------------------------------ - - //--author:os_chengtgen---date:20190804 -----for: 分类字典页面显示错误,issues:377--------start - //--author:liusq---date:20211119 -----for: 【vue3】分类字典页面查询条件配置--------start - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); - String name = sysCategory.getName(); - String code = sysCategory.getCode(); - //QueryWrapper queryWrapper = new QueryWrapper(); - if(StringUtils.isBlank(name)&&StringUtils.isBlank(code)){ - queryWrapper.eq("pid", sysCategory.getPid()); - } - //--author:liusq---date:20211119 -----for: 分类字典页面查询条件配置--------end - //--author:os_chengtgen---date:20190804 -----for:【vue3】 分类字典页面显示错误,issues:377--------end - - Page page = new Page(pageNo, pageSize); - IPage pageList = sysCategoryService.page(page, queryWrapper); - result.setSuccess(true); - result.setResult(pageList); - return result; - } - - @GetMapping(value = "/childList") - public Result> queryPageList(SysCategory sysCategory,HttpServletRequest req) { - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - Result> result = new Result>(); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); - List list = sysCategoryService.list(queryWrapper); - result.setSuccess(true); - result.setResult(list); - return result; - } - - - /** - * 添加 - * @param sysCategory - * @return - */ - @PostMapping(value = "/add") - public Result add(@RequestBody SysCategory sysCategory) { - Result result = new Result(); - try { - sysCategoryService.addSysCategory(sysCategory); - result.success("添加成功!"); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败"); - } - return result; - } - - /** - * 编辑 - * @param sysCategory - * @return - */ - @RequestMapping(value = "/edit", method = { RequestMethod.PUT,RequestMethod.POST }) - public Result edit(@RequestBody SysCategory sysCategory) { - Result result = new Result(); - SysCategory sysCategoryEntity = sysCategoryService.getById(sysCategory.getId()); - if(sysCategoryEntity==null) { - result.error500("未找到对应实体"); - }else { - sysCategoryService.updateSysCategory(sysCategory); - result.success("修改成功!"); - } - return result; - } - - /** - * 通过id删除 - * @param id - * @return - */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysCategory sysCategory = sysCategoryService.getById(id); - if(sysCategory==null) { - result.error500("未找到对应实体"); - }else { - this.sysCategoryService.deleteSysCategory(id); - result.success("删除成功!"); - } - - return result; - } - - /** - * 批量删除 - * @param ids - * @return - */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - Result result = new Result(); - if(ids==null || "".equals(ids.trim())) { - result.error500("参数不识别!"); - }else { - this.sysCategoryService.deleteSysCategory(ids); - result.success("删除成功!"); - } - return result; - } - - /** - * 通过id查询 - * @param id - * @return - */ - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysCategory sysCategory = sysCategoryService.getById(id); - if(sysCategory==null) { - result.error500("未找到对应实体"); - }else { - result.setResult(sysCategory); - result.setSuccess(true); - } - return result; - } - - /** - * 导出excel - * - * @param request - */ - @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(HttpServletRequest request, SysCategory sysCategory) { - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - - // Step.1 组装查询条件查询数据 - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, request.getParameterMap()); - List pageList = sysCategoryService.list(queryWrapper); - // Step.2 AutoPoi 导出Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - // 过滤选中数据 - String selections = request.getParameter("selections"); - if(oConvertUtils.isEmpty(selections)) { - mv.addObject(NormalExcelConstants.DATA_LIST, pageList); - }else { - List selectionList = Arrays.asList(selections.split(",")); - List exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); - mv.addObject(NormalExcelConstants.DATA_LIST, exportList); - } - //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "分类字典列表"); - mv.addObject(NormalExcelConstants.CLASS, SysCategory.class); - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("分类字典列表数据", "导出人:"+user.getRealname(), "导出信息")); - return mv; - } - - /** - * 通过excel导入数据 - * - * @param request - * @param response - * @return - */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException{ - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); - // 错误信息 - List errorMessage = new ArrayList<>(); - int successLines = 0, errorLines = 0; - for (Map.Entry entity : fileMap.entrySet()) { - // 获取上传文件对象 - MultipartFile file = entity.getValue(); - ImportParams params = new ImportParams(); - params.setTitleRows(2); - params.setHeadRows(1); - params.setNeedSave(true); - try { - List listSysCategorys = ExcelImportUtil.importExcel(file.getInputStream(), SysCategory.class, params); - //按照编码长度排序 - Collections.sort(listSysCategorys); - log.info("排序后的list====>",listSysCategorys); - for (int i = 0; i < listSysCategorys.size(); i++) { - SysCategory sysCategoryExcel = listSysCategorys.get(i); - String code = sysCategoryExcel.getCode(); - if(code.length()>3){ - String pCode = sysCategoryExcel.getCode().substring(0,code.length()-3); - log.info("pCode====>",pCode); - String pId=sysCategoryService.queryIdByCode(pCode); - log.info("pId====>",pId); - if(StringUtils.isNotBlank(pId)){ - sysCategoryExcel.setPid(pId); - } - }else{ - sysCategoryExcel.setPid("0"); - } - try { - sysCategoryService.save(sysCategoryExcel); - successLines++; - } catch (Exception e) { - errorLines++; - String message = e.getMessage().toLowerCase(); - int lineNumber = i + 1; - // 通过索引名判断出错信息 - if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CATEGORY_CODE)) { - errorMessage.add("第 " + lineNumber + " 行:分类编码已经存在,忽略导入。"); - } else { - errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); - log.error(e.getMessage(), e); - } - } - } - } catch (Exception e) { - errorMessage.add("发生异常:" + e.getMessage()); - log.error(e.getMessage(), e); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); - } - - - - /** - * 加载单个数据 用于回显 - */ - @RequestMapping(value = "/loadOne", method = RequestMethod.GET) - public Result loadOne(@RequestParam(name="field") String field,@RequestParam(name="val") String val) { - Result result = new Result(); - try { - //update-begin-author:taoyan date:2022-5-6 for: issues/3663 sql注入问题 - boolean isClassField = ReflectHelper.isClassField(field, SysCategory.class); - if (!isClassField) { - return Result.error("字段无效,请检查!"); - } - //update-end-author:taoyan date:2022-5-6 for: issues/3663 sql注入问题 - QueryWrapper query = new QueryWrapper(); - query.eq(field, val); - List ls = this.sysCategoryService.list(query); - if(ls==null || ls.size()==0) { - result.setMessage("查询无果"); - result.setSuccess(false); - }else if(ls.size()>1) { - result.setMessage("查询数据异常,["+field+"]存在多个值:"+val); - result.setSuccess(false); - }else { - result.setSuccess(true); - result.setResult(ls.get(0)); - } - } catch (Exception e) { - e.printStackTrace(); - result.setMessage(e.getMessage()); - result.setSuccess(false); - } - return result; - } - /** - * 加载节点的子数据 + * 分类编码0 + */ + private static final String CATEGORY_ROOT_CODE = "0"; + + /** + * 分页列表查询 + * + * @param sysCategory + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/rootList") + public Result> queryPageList(SysCategory sysCategory, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + if (oConvertUtils.isEmpty(sysCategory.getPid())) { + sysCategory.setPid("0"); + } + Result> result = new Result>(); + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + + //--author:os_chengtgen---date:20190804 -----for: 分类字典页面显示错误,issues:377--------start + //--author:liusq---date:20211119 -----for: 【vue3】分类字典页面查询条件配置--------start + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); + String name = sysCategory.getName(); + String code = sysCategory.getCode(); + //QueryWrapper queryWrapper = new QueryWrapper(); + if (StringUtils.isBlank(name) && StringUtils.isBlank(code)) { + queryWrapper.eq("pid", sysCategory.getPid()); + } + //--author:liusq---date:20211119 -----for: 分类字典页面查询条件配置--------end + //--author:os_chengtgen---date:20190804 -----for:【vue3】 分类字典页面显示错误,issues:377--------end + + Page page = new Page(pageNo, pageSize); + IPage pageList = sysCategoryService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + @GetMapping(value = "/childList") + public Result> queryPageList(SysCategory sysCategory, HttpServletRequest req) { + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); + List list = sysCategoryService.list(queryWrapper); + result.setSuccess(true); + result.setResult(list); + return result; + } + + + /** + * 添加 + * + * @param sysCategory + * @return + */ + @PostMapping(value = "/add") + public Result add(@RequestBody SysCategory sysCategory) { + Result result = new Result(); + try { + sysCategoryService.addSysCategory(sysCategory); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * + * @param sysCategory + * @return + */ + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody SysCategory sysCategory) { + Result result = new Result(); + SysCategory sysCategoryEntity = sysCategoryService.getById(sysCategory.getId()); + if (sysCategoryEntity == null) { + result.error500("未找到对应实体"); + } else { + sysCategoryService.updateSysCategory(sysCategory); + result.success("修改成功!"); + } + return result; + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysCategory sysCategory = sysCategoryService.getById(id); + if (sysCategory == null) { + result.error500("未找到对应实体"); + } else { + this.sysCategoryService.deleteSysCategory(id); + result.success("删除成功!"); + } + + return result; + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.sysCategoryService.deleteSysCategory(ids); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysCategory sysCategory = sysCategoryService.getById(id); + if (sysCategory == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(sysCategory); + result.setSuccess(true); + } + return result; + } + + /** + * 导出excel + * + * @param request + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysCategory sysCategory) { + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + sysCategory.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + + // Step.1 组装查询条件查询数据 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, request.getParameterMap()); + List pageList = sysCategoryService.list(queryWrapper); + // Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + // 过滤选中数据 + String selections = request.getParameter("selections"); + if (oConvertUtils.isEmpty(selections)) { + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + } else { + List selectionList = Arrays.asList(selections.split(",")); + List exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); + mv.addObject(NormalExcelConstants.DATA_LIST, exportList); + } + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "分类字典列表"); + mv.addObject(NormalExcelConstants.CLASS, SysCategory.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("分类字典列表数据", "导出人:" + user.getRealname(), "导出信息")); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + // 错误信息 + List errorMessage = new ArrayList<>(); + int successLines = 0, errorLines = 0; + for (Map.Entry entity : fileMap.entrySet()) { + // 获取上传文件对象 + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List listSysCategorys = ExcelImportUtil.importExcel(file.getInputStream(), SysCategory.class, params); + //按照编码长度排序 + Collections.sort(listSysCategorys); + log.info("排序后的list====>", listSysCategorys); + for (int i = 0; i < listSysCategorys.size(); i++) { + SysCategory sysCategoryExcel = listSysCategorys.get(i); + String code = sysCategoryExcel.getCode(); + if (code.length() > 3) { + String pCode = sysCategoryExcel.getCode().substring(0, code.length() - 3); + log.info("pCode====>", pCode); + String pId = sysCategoryService.queryIdByCode(pCode); + log.info("pId====>", pId); + if (StringUtils.isNotBlank(pId)) { + sysCategoryExcel.setPid(pId); + } + } else { + sysCategoryExcel.setPid("0"); + } + try { + sysCategoryService.save(sysCategoryExcel); + successLines++; + } catch (Exception e) { + errorLines++; + String message = e.getMessage().toLowerCase(); + int lineNumber = i + 1; + // 通过索引名判断出错信息 + if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CATEGORY_CODE)) { + errorMessage.add("第 " + lineNumber + " 行:分类编码已经存在,忽略导入。"); + } else { + errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); + log.error(e.getMessage(), e); + } + } + } + } catch (Exception e) { + errorMessage.add("发生异常:" + e.getMessage()); + log.error(e.getMessage(), e); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return ImportExcelUtil.imporReturnRes(errorLines, successLines, errorMessage); + } + + + /** + * 加载单个数据 用于回显 + */ + @RequestMapping(value = "/loadOne", method = RequestMethod.GET) + public Result loadOne(@RequestParam(name = "field") String field, @RequestParam(name = "val") String val) { + Result result = new Result(); + try { + //update-begin-author:taoyan date:2022-5-6 for: issues/3663 sql注入问题 + boolean isClassField = ReflectHelper.isClassField(field, SysCategory.class); + if (!isClassField) { + return Result.error("字段无效,请检查!"); + } + //update-end-author:taoyan date:2022-5-6 for: issues/3663 sql注入问题 + QueryWrapper query = new QueryWrapper(); + query.eq(field, val); + List ls = this.sysCategoryService.list(query); + if (ls == null || ls.size() == 0) { + result.setMessage("查询无果"); + result.setSuccess(false); + } else if (ls.size() > 1) { + result.setMessage("查询数据异常,[" + field + "]存在多个值:" + val); + result.setSuccess(false); + } else { + result.setSuccess(true); + result.setResult(ls.get(0)); + } + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + + /** + * 加载节点的子数据 */ @RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET) - public Result> loadTreeChildren(@RequestParam(name="pid") String pid) { - Result> result = new Result>(); - try { - List ls = this.sysCategoryService.queryListByPid(pid); - result.setResult(ls); - result.setSuccess(true); - } catch (Exception e) { - e.printStackTrace(); - result.setMessage(e.getMessage()); - result.setSuccess(false); - } - return result; - } - + public Result> loadTreeChildren(@RequestParam(name = "pid") String pid) { + Result> result = new Result>(); + try { + List ls = this.sysCategoryService.queryListByPid(pid); + result.setResult(ls); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + /** - * 加载一级节点/如果是同步 则所有数据 + * 加载一级节点/如果是同步 则所有数据 */ @RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET) - public Result> loadTreeRoot(@RequestParam(name="async") Boolean async,@RequestParam(name="pcode") String pcode) { - Result> result = new Result>(); - try { - List ls = this.sysCategoryService.queryListByCode(pcode); - if(!async) { - loadAllCategoryChildren(ls); - } - result.setResult(ls); - result.setSuccess(true); - } catch (Exception e) { - e.printStackTrace(); - result.setMessage(e.getMessage()); - result.setSuccess(false); - } - return result; - } - + public Result> loadTreeRoot(@RequestParam(name = "async") Boolean async, @RequestParam(name = "pcode") String pcode) { + Result> result = new Result>(); + try { + List ls = this.sysCategoryService.queryListByCode(pcode); + if (!async) { + loadAllCategoryChildren(ls); + } + result.setResult(ls); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + /** - * 递归求子节点 同步加载用到 + * 递归求子节点 同步加载用到 */ - private void loadAllCategoryChildren(List ls) { - for (TreeSelectModel tsm : ls) { - List temp = this.sysCategoryService.queryListByPid(tsm.getKey()); - if(temp!=null && temp.size()>0) { - tsm.setChildren(temp); - loadAllCategoryChildren(temp); - } - } - } + private void loadAllCategoryChildren(List ls) { + for (TreeSelectModel tsm : ls) { + List temp = this.sysCategoryService.queryListByPid(tsm.getKey()); + if (temp != null && temp.size() > 0) { + tsm.setChildren(temp); + loadAllCategoryChildren(temp); + } + } + } - /** - * 校验编码 - * @param pid - * @param code - * @return - */ - @GetMapping(value = "/checkCode") - public Result checkCode(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="code",required = false) String code) { - if(oConvertUtils.isEmpty(code)){ - return Result.error("错误,类型编码为空!"); - } - if(oConvertUtils.isEmpty(pid)){ - return Result.ok(); - } - SysCategory parent = this.sysCategoryService.getById(pid); - if(code.startsWith(parent.getCode())){ - return Result.ok(); - }else{ - return Result.error("编码不符合规范,须以\""+parent.getCode()+"\"开头!"); - } + /** + * 校验编码 + * + * @param pid + * @param code + * @return + */ + @GetMapping(value = "/checkCode") + public Result checkCode(@RequestParam(name = "pid", required = false) String pid, @RequestParam(name = "code", required = false) String code) { + if (oConvertUtils.isEmpty(code)) { + return Result.error("错误,类型编码为空!"); + } + if (oConvertUtils.isEmpty(pid)) { + return Result.ok(); + } + SysCategory parent = this.sysCategoryService.getById(pid); + if (code.startsWith(parent.getCode())) { + return Result.ok(); + } else { + return Result.error("编码不符合规范,须以\"" + parent.getCode() + "\"开头!"); + } - } + } - /** - * 分类字典树控件 加载节点 - * @param pid - * @param pcode - * @param condition - * @return - */ - @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) - public Result> loadDict(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="pcode",required = false) String pcode, @RequestParam(name="condition",required = false) String condition) { - Result> result = new Result>(); - //pid如果传值了 就忽略pcode的作用 - if(oConvertUtils.isEmpty(pid)){ - if(oConvertUtils.isEmpty(pcode)){ - result.setSuccess(false); - result.setMessage("加载分类字典树参数有误.[null]!"); - return result; - }else{ - if(ISysCategoryService.ROOT_PID_VALUE.equals(pcode)){ - pid = ISysCategoryService.ROOT_PID_VALUE; - }else{ - pid = this.sysCategoryService.queryIdByCode(pcode); - } - if(oConvertUtils.isEmpty(pid)){ - result.setSuccess(false); - result.setMessage("加载分类字典树参数有误.[code]!"); - return result; - } - } - } - Map query = null; - if(oConvertUtils.isNotEmpty(condition)) { - query = JSON.parseObject(condition, Map.class); - } - List ls = sysCategoryService.queryListByPid(pid,query); - result.setSuccess(true); - result.setResult(ls); - return result; - } + /** + * 分类字典树控件 加载节点 + * + * @param pid + * @param pcode + * @param condition + * @return + */ + @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) + public Result> loadDict(@RequestParam(name = "pid", required = false) String pid, @RequestParam(name = "pcode", required = false) String pcode, @RequestParam(name = "condition", required = false) String condition) { + Result> result = new Result>(); + //pid如果传值了 就忽略pcode的作用 + if (oConvertUtils.isEmpty(pid)) { + if (oConvertUtils.isEmpty(pcode)) { + result.setSuccess(false); + result.setMessage("加载分类字典树参数有误.[null]!"); + return result; + } else { + if (ISysCategoryService.ROOT_PID_VALUE.equals(pcode)) { + pid = ISysCategoryService.ROOT_PID_VALUE; + } else { + pid = this.sysCategoryService.queryIdByCode(pcode); + } + if (oConvertUtils.isEmpty(pid)) { + result.setSuccess(false); + result.setMessage("加载分类字典树参数有误.[code]!"); + return result; + } + } + } + Map query = null; + if (oConvertUtils.isNotEmpty(condition)) { + query = JSON.parseObject(condition, Map.class); + } + List ls = sysCategoryService.queryListByPid(pid, query); + result.setSuccess(true); + result.setResult(ls); + return result; + } - /** - * 分类字典控件数据回显[表单页面] - * - * @param ids - * @param delNotExist 是否移除不存在的项,默认为true,设为false如果某个key不存在数据库中,则直接返回key本身 - * @return - */ - @RequestMapping(value = "/loadDictItem", method = RequestMethod.GET) - public Result> loadDictItem(@RequestParam(name = "ids") String ids, @RequestParam(name = "delNotExist", required = false, defaultValue = "true") boolean delNotExist) { - Result> result = new Result<>(); - // 非空判断 - if (StringUtils.isBlank(ids)) { - result.setSuccess(false); - result.setMessage("ids 不能为空"); - return result; - } - // 查询数据 - List textList = sysCategoryService.loadDictItem(ids, delNotExist); - result.setSuccess(true); - result.setResult(textList); - return result; - } + /** + * 分类字典控件数据回显[表单页面] + * + * @param ids + * @param delNotExist 是否移除不存在的项,默认为true,设为false如果某个key不存在数据库中,则直接返回key本身 + * @return + */ + @RequestMapping(value = "/loadDictItem", method = RequestMethod.GET) + public Result> loadDictItem(@RequestParam(name = "ids") String ids, @RequestParam(name = "delNotExist", required = false, defaultValue = "true") boolean delNotExist) { + Result> result = new Result<>(); + // 非空判断 + if (StringUtils.isBlank(ids)) { + result.setSuccess(false); + result.setMessage("ids 不能为空"); + return result; + } + // 查询数据 + List textList = sysCategoryService.loadDictItem(ids, delNotExist); + result.setSuccess(true); + result.setResult(textList); + return result; + } - /** - * [列表页面]加载分类字典数据 用于值的替换 - * @param code - * @return - */ - @RequestMapping(value = "/loadAllData", method = RequestMethod.GET) - public Result> loadAllData(@RequestParam(name="code",required = true) String code) { - Result> result = new Result>(); - LambdaQueryWrapper query = new LambdaQueryWrapper(); - if(oConvertUtils.isNotEmpty(code) && !CATEGORY_ROOT_CODE.equals(code)){ - query.likeRight(SysCategory::getCode,code); - } - List list = this.sysCategoryService.list(query); - if(list==null || list.size()==0) { - result.setMessage("无数据,参数有误.[code]"); - result.setSuccess(false); - return result; - } - List rdList = new ArrayList(); - for (SysCategory c : list) { - rdList.add(new DictModel(c.getId(),c.getName())); - } - result.setSuccess(true); - result.setResult(rdList); - return result; - } + /** + * [列表页面]加载分类字典数据 用于值的替换 + * + * @param code + * @return + */ + @RequestMapping(value = "/loadAllData", method = RequestMethod.GET) + public Result> loadAllData(@RequestParam(name = "code", required = true) String code) { + Result> result = new Result>(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + if (oConvertUtils.isNotEmpty(code) && !CATEGORY_ROOT_CODE.equals(code)) { + query.likeRight(SysCategory::getCode, code); + } + List list = this.sysCategoryService.list(query); + if (list == null || list.size() == 0) { + result.setMessage("无数据,参数有误.[code]"); + result.setSuccess(false); + return result; + } + List rdList = new ArrayList(); + for (SysCategory c : list) { + rdList.add(new DictModel(c.getId(), c.getName())); + } + result.setSuccess(true); + result.setResult(rdList); + return result; + } - /** - * 根据父级id批量查询子节点 - * @param parentIds - * @return - */ - @GetMapping("/getChildListBatch") - public Result getChildListBatch(@RequestParam("parentIds") String parentIds) { - try { - QueryWrapper queryWrapper = new QueryWrapper<>(); - List parentIdList = Arrays.asList(parentIds.split(",")); - queryWrapper.in("pid", parentIdList); - List list = sysCategoryService.list(queryWrapper); - IPage pageList = new Page<>(1, 10, list.size()); - pageList.setRecords(list); - return Result.OK(pageList); - } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("批量查询子节点失败:" + e.getMessage()); - } - } + /** + * 根据父级id批量查询子节点 + * + * @param parentIds + * @return + */ + @GetMapping("/getChildListBatch") + public Result getChildListBatch(@RequestParam("parentIds") String parentIds) { + try { + QueryWrapper queryWrapper = new QueryWrapper<>(); + List parentIdList = Arrays.asList(parentIds.split(",")); + queryWrapper.in("pid", parentIdList); + List list = sysCategoryService.list(queryWrapper); + IPage pageList = new Page<>(1, 10, list.size()); + pageList.setRecords(list); + return Result.OK(pageList); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("批量查询子节点失败:" + e.getMessage()); + } + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCheckRuleController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCheckRuleController.java index 5574f03..a6e7fa4 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCheckRuleController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysCheckRuleController.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; @@ -17,8 +19,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Arrays; @@ -112,7 +112,7 @@ public class SysCheckRuleController extends JeecgController deleteOne(@RequestParam(name = "id", required = true) String id) { SysComment comment = sysCommentService.getById(id); - if(comment==null){ + if (comment == null) { return Result.error("该评论已被删除!"); } LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String username = sysUser.getUsername(); String admin = "admin"; //除了admin外 其他人只能删除自己的评论 - if((!admin.equals(username)) && !username.equals(comment.getCreateBy())){ + if ((!admin.equals(username)) && !username.equals(comment.getCreateBy())) { return Result.error("只能删除自己的评论!"); } sysCommentService.deleteOne(id); //删除评论添加日志 - String logContent = "删除了评论, "+ comment.getCommentContent(); + String logContent = "删除了评论, " + comment.getCommentContent(); DataLogDTO dataLog = new DataLogDTO(comment.getTableName(), comment.getTableDataId(), logContent, CommonConstant.DATA_LOG_TYPE_COMMENT); sysBaseAPI.saveDataLog(dataLog); return Result.OK("删除成功!"); @@ -144,6 +145,7 @@ public class SysCommentController extends JeecgController delete(@RequestParam(name = "id", required = true) String id) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDataLogController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDataLogController.java index c900154..c7be51f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDataLogController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDataLogController.java @@ -1,10 +1,10 @@ package org.jeecg.modules.system.controller; -import java.util.ArrayList; -import java.util.List; - +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.servlet.http.HttpServletRequest; - +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.query.QueryGenerator; @@ -17,11 +17,8 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import lombok.extern.slf4j.Slf4j; +import java.util.ArrayList; +import java.util.List; /** * @Description: 系统数据日志 @@ -31,79 +28,81 @@ import lombok.extern.slf4j.Slf4j; @RequestMapping("/sys/dataLog") @Slf4j public class SysDataLogController { - @Autowired - private ISysDataLogService service; - - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result> queryPageList(SysDataLog dataLog,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result>(); - dataLog.setType(CommonConstant.DATA_LOG_TYPE_JSON); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(dataLog, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = service.page(page, queryWrapper); - log.info("查询当前页:"+pageList.getCurrent()); - log.info("查询当前页数量:"+pageList.getSize()); - log.info("查询结果数量:"+pageList.getRecords().size()); - log.info("数据总数:"+pageList.getTotal()); - result.setSuccess(true); - result.setResult(pageList); - return result; - } - - /** - * 查询对比数据 - * @param req - * @return - */ - @RequestMapping(value = "/queryCompareList", method = RequestMethod.GET) - public Result> queryCompareList(HttpServletRequest req) { - Result> result = new Result<>(); - String dataId1 = req.getParameter("dataId1"); - String dataId2 = req.getParameter("dataId2"); - List idList = new ArrayList(); - idList.add(dataId1); - idList.add(dataId2); - try { - List list = (List) service.listByIds(idList); - result.setResult(list); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(),e); - } - return result; - } - - /** - * 查询版本信息 - * @param req - * @return - */ - @RequestMapping(value = "/queryDataVerList", method = RequestMethod.GET) - public Result> queryDataVerList(HttpServletRequest req) { - Result> result = new Result<>(); - String dataTable = req.getParameter("dataTable"); - String dataId = req.getParameter("dataId"); - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("data_table", dataTable); - queryWrapper.eq("data_id", dataId); - //update-begin-author:taoyan date:2022-7-26 for: 新增查询条件-type - String type = req.getParameter("type"); - if (oConvertUtils.isNotEmpty(type)) { - queryWrapper.eq("type", type); - } - // 按时间倒序排 - queryWrapper.orderByDesc("create_time"); - //update-end-author:taoyan date:2022-7-26 for:新增查询条件-type + @Autowired + private ISysDataLogService service; + + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysDataLog dataLog, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result>(); + dataLog.setType(CommonConstant.DATA_LOG_TYPE_JSON); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(dataLog, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = service.page(page, queryWrapper); + log.info("查询当前页:" + pageList.getCurrent()); + log.info("查询当前页数量:" + pageList.getSize()); + log.info("查询结果数量:" + pageList.getRecords().size()); + log.info("数据总数:" + pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 查询对比数据 + * + * @param req + * @return + */ + @RequestMapping(value = "/queryCompareList", method = RequestMethod.GET) + public Result> queryCompareList(HttpServletRequest req) { + Result> result = new Result<>(); + String dataId1 = req.getParameter("dataId1"); + String dataId2 = req.getParameter("dataId2"); + List idList = new ArrayList(); + idList.add(dataId1); + idList.add(dataId2); + try { + List list = (List) service.listByIds(idList); + result.setResult(list); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 查询版本信息 + * + * @param req + * @return + */ + @RequestMapping(value = "/queryDataVerList", method = RequestMethod.GET) + public Result> queryDataVerList(HttpServletRequest req) { + Result> result = new Result<>(); + String dataTable = req.getParameter("dataTable"); + String dataId = req.getParameter("dataId"); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("data_table", dataTable); + queryWrapper.eq("data_id", dataId); + //update-begin-author:taoyan date:2022-7-26 for: 新增查询条件-type + String type = req.getParameter("type"); + if (oConvertUtils.isNotEmpty(type)) { + queryWrapper.eq("type", type); + } + // 按时间倒序排 + queryWrapper.orderByDesc("create_time"); + //update-end-author:taoyan date:2022-7-26 for:新增查询条件-type + + List list = service.list(queryWrapper); + if (list == null || list.size() <= 0) { + result.error500("未找到版本信息"); + } else { + result.setResult(list); + result.setSuccess(true); + } + return result; + } - List list = service.list(queryWrapper); - if(list==null||list.size()<=0) { - result.error500("未找到版本信息"); - }else { - result.setResult(list); - result.setSuccess(true); - } - return result; - } - } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDataSourceController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDataSourceController.java index 2463674..84570bc 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDataSourceController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDataSourceController.java @@ -69,7 +69,7 @@ public class SysDataSourceController extends JeecgController queryOptions(SysDataSource sysDataSource, HttpServletRequest req) { //------------------------------------------------------------------------------------------------ //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { sysDataSource.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); } //------------------------------------------------------------------------------------------------ - + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDataSource, req.getParameterMap()); List pageList = sysDataSourceService.list(queryWrapper); JSONArray array = new JSONArray(pageList.size()); @@ -114,7 +114,7 @@ public class SysDataSourceController extends JeecgController edit(@RequestBody SysDataSource sysDataSource) { //update-begin-author:taoyan date:2022-8-10 for: jdbc连接地址漏洞问题 try { @@ -163,11 +163,11 @@ public class SysDataSourceController extends JeecgController deleteBatch(@RequestParam(name = "ids") String ids) { List idList = Arrays.asList(ids.split(",")); - idList.forEach(item->{ + idList.forEach(item -> { SysDataSource sysDataSource = sysDataSourceService.getById(item); DataSourceCachePool.removeCache(sysDataSource.getCode()); }); @@ -188,7 +188,7 @@ public class SysDataSourceController extends JeecgController * 部门表 前端控制器 *

- * + * * @Author: Steve @Since: 2019-01-22 */ @RestController @@ -57,228 +54,231 @@ import java.util.*; @Slf4j public class SysDepartController { - @Autowired - private ISysDepartService sysDepartService; - @Autowired - public RedisTemplate redisTemplate; - @Autowired - private ISysUserService sysUserService; - @Autowired - private ISysUserDepartService sysUserDepartService; - /** - * 查询数据 查出我的部门,并以树结构数据格式响应给前端 - * - * @return - */ - @RequestMapping(value = "/queryMyDeptTreeList", method = RequestMethod.GET) - public Result> queryMyDeptTreeList() { - Result> result = new Result<>(); - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - try { - if(oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals( CommonConstant.USER_IDENTITY_2 )){ - //update-begin--Author:liusq Date:20210624 for:部门查询ids为空后的前端显示问题 issues/I3UD06 - String departIds = user.getDepartIds(); - if(StringUtils.isNotBlank(departIds)){ - List list = sysDepartService.queryMyDeptTreeList(departIds); - result.setResult(list); - } - //update-end--Author:liusq Date:20210624 for:部门查询ids为空后的前端显示问题 issues/I3UD06 - result.setMessage(CommonConstant.USER_IDENTITY_2.toString()); - result.setSuccess(true); - }else{ - result.setMessage(CommonConstant.USER_IDENTITY_1.toString()); - result.setSuccess(true); - } - } catch (Exception e) { - log.error(e.getMessage(),e); - } - return result; - } + @Autowired + private ISysDepartService sysDepartService; + @Autowired + public RedisTemplate redisTemplate; + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysUserDepartService sysUserDepartService; - /** - * 查询数据 查出所有部门,并以树结构数据格式响应给前端 - * - * @return - */ - @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) - public Result> queryTreeList(@RequestParam(name = "ids", required = false) String ids) { - Result> result = new Result<>(); - try { - // 从内存中读取 + /** + * 查询数据 查出我的部门,并以树结构数据格式响应给前端 + * + * @return + */ + @RequestMapping(value = "/queryMyDeptTreeList", method = RequestMethod.GET) + public Result> queryMyDeptTreeList() { + Result> result = new Result<>(); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + try { + if (oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals(CommonConstant.USER_IDENTITY_2)) { + //update-begin--Author:liusq Date:20210624 for:部门查询ids为空后的前端显示问题 issues/I3UD06 + String departIds = user.getDepartIds(); + if (StringUtils.isNotBlank(departIds)) { + List list = sysDepartService.queryMyDeptTreeList(departIds); + result.setResult(list); + } + //update-end--Author:liusq Date:20210624 for:部门查询ids为空后的前端显示问题 issues/I3UD06 + result.setMessage(CommonConstant.USER_IDENTITY_2.toString()); + result.setSuccess(true); + } else { + result.setMessage(CommonConstant.USER_IDENTITY_1.toString()); + result.setSuccess(true); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 查询数据 查出所有部门,并以树结构数据格式响应给前端 + * + * @return + */ + @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) + public Result> queryTreeList(@RequestParam(name = "ids", required = false) String ids) { + Result> result = new Result<>(); + try { + // 从内存中读取 // List list =FindsDepartsChildrenUtil.getSysDepartTreeList(); // if (CollectionUtils.isEmpty(list)) { // list = sysDepartService.queryTreeList(); // } - if(oConvertUtils.isNotEmpty(ids)){ - List departList = sysDepartService.queryTreeList(ids); - result.setResult(departList); - }else{ - List list = sysDepartService.queryTreeList(); - result.setResult(list); - } - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(),e); - } - return result; - } + if (oConvertUtils.isNotEmpty(ids)) { + List departList = sysDepartService.queryTreeList(ids); + result.setResult(departList); + } else { + List list = sysDepartService.queryTreeList(); + result.setResult(list); + } + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } - /** - * 异步查询部门list - * @param parentId 父节点 异步加载时传递 - * @param ids 前端回显是传递 - * @param primaryKey 主键字段(id或者orgCode) - * @return - */ - @RequestMapping(value = "/queryDepartTreeSync", method = RequestMethod.GET) - public Result> queryDepartTreeSync(@RequestParam(name = "pid", required = false) String parentId,@RequestParam(name = "ids", required = false) String ids, @RequestParam(name = "primaryKey", required = false) String primaryKey) { - Result> result = new Result<>(); - try { - List list = sysDepartService.queryTreeListByPid(parentId,ids, primaryKey); - result.setResult(list); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.setSuccess(false); - result.setMessage("查询失败"); - } - return result; - } + /** + * 异步查询部门list + * + * @param parentId 父节点 异步加载时传递 + * @param ids 前端回显是传递 + * @param primaryKey 主键字段(id或者orgCode) + * @return + */ + @RequestMapping(value = "/queryDepartTreeSync", method = RequestMethod.GET) + public Result> queryDepartTreeSync(@RequestParam(name = "pid", required = false) String parentId, @RequestParam(name = "ids", required = false) String ids, @RequestParam(name = "primaryKey", required = false) String primaryKey) { + Result> result = new Result<>(); + try { + List list = sysDepartService.queryTreeListByPid(parentId, ids, primaryKey); + result.setResult(list); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.setSuccess(false); + result.setMessage("查询失败"); + } + return result; + } - /** - * 获取某个部门的所有父级部门的ID - * - * @param departId 根据departId查 - * @param orgCode 根据orgCode查,departId和orgCode必须有一个不为空 - */ - @GetMapping("/queryAllParentId") - public Result queryParentIds( - @RequestParam(name = "departId", required = false) String departId, - @RequestParam(name = "orgCode", required = false) String orgCode) { - try { - JSONObject data; - if (oConvertUtils.isNotEmpty(departId)) { - data = sysDepartService.queryAllParentIdByDepartId(departId); - } else if (oConvertUtils.isNotEmpty(orgCode)) { - data = sysDepartService.queryAllParentIdByOrgCode(orgCode); - } else { - return Result.error("departId 和 orgCode 不能都为空!"); - } - return Result.OK(data); - } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error(e.getMessage()); - } - } + /** + * 获取某个部门的所有父级部门的ID + * + * @param departId 根据departId查 + * @param orgCode 根据orgCode查,departId和orgCode必须有一个不为空 + */ + @GetMapping("/queryAllParentId") + public Result queryParentIds( + @RequestParam(name = "departId", required = false) String departId, + @RequestParam(name = "orgCode", required = false) String orgCode) { + try { + JSONObject data; + if (oConvertUtils.isNotEmpty(departId)) { + data = sysDepartService.queryAllParentIdByDepartId(departId); + } else if (oConvertUtils.isNotEmpty(orgCode)) { + data = sysDepartService.queryAllParentIdByOrgCode(orgCode); + } else { + return Result.error("departId 和 orgCode 不能都为空!"); + } + return Result.OK(data); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error(e.getMessage()); + } + } - /** - * 添加新数据 添加用户新建的部门对象数据,并保存到数据库 - * - * @param sysDepart - * @return - */ + /** + * 添加新数据 添加用户新建的部门对象数据,并保存到数据库 + * + * @param sysDepart + * @return + */ @RequiresPermissions("system:depart:add") - @RequestMapping(value = "/add", method = RequestMethod.POST) - @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result add(@RequestBody SysDepart sysDepart, HttpServletRequest request) { - Result result = new Result(); - String username = JwtUtil.getUserNameByToken(request); - try { - sysDepart.setCreateBy(username); - sysDepartService.saveDepartData(sysDepart, username); - //清除部门树内存 - // FindsDepartsChildrenUtil.clearSysDepartTreeList(); - // FindsDepartsChildrenUtil.clearDepartIdModel(); - result.success("添加成功!"); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败"); - } - return result; - } + @RequestMapping(value = "/add", method = RequestMethod.POST) + @CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true) + public Result add(@RequestBody SysDepart sysDepart, HttpServletRequest request) { + Result result = new Result(); + String username = JwtUtil.getUserNameByToken(request); + try { + sysDepart.setCreateBy(username); + sysDepartService.saveDepartData(sysDepart, username); + //清除部门树内存 + // FindsDepartsChildrenUtil.clearSysDepartTreeList(); + // FindsDepartsChildrenUtil.clearDepartIdModel(); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } - /** - * 编辑数据 编辑部门的部分数据,并保存到数据库 - * - * @param sysDepart - * @return - */ + /** + * 编辑数据 编辑部门的部分数据,并保存到数据库 + * + * @param sysDepart + * @return + */ @RequiresPermissions("system:depart:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result edit(@RequestBody SysDepart sysDepart, HttpServletRequest request) { - String username = JwtUtil.getUserNameByToken(request); - sysDepart.setUpdateBy(username); - Result result = new Result(); - SysDepart sysDepartEntity = sysDepartService.getById(sysDepart.getId()); - if (sysDepartEntity == null) { - result.error500("未找到对应实体"); - } else { - boolean ok = sysDepartService.updateDepartDataById(sysDepart, username); - // TODO 返回false说明什么? - if (ok) { - //清除部门树内存 - //FindsDepartsChildrenUtil.clearSysDepartTreeList(); - //FindsDepartsChildrenUtil.clearDepartIdModel(); - result.success("修改成功!"); - } - } - return result; - } - - /** - * 通过id删除 - * @param id - * @return - */ + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + @CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true) + public Result edit(@RequestBody SysDepart sysDepart, HttpServletRequest request) { + String username = JwtUtil.getUserNameByToken(request); + sysDepart.setUpdateBy(username); + Result result = new Result(); + SysDepart sysDepartEntity = sysDepartService.getById(sysDepart.getId()); + if (sysDepartEntity == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = sysDepartService.updateDepartDataById(sysDepart, username); + // TODO 返回false说明什么? + if (ok) { + //清除部门树内存 + //FindsDepartsChildrenUtil.clearSysDepartTreeList(); + //FindsDepartsChildrenUtil.clearDepartIdModel(); + result.success("修改成功!"); + } + } + return result; + } + + /** + * 通过id删除 + * + * @param id + * @return + */ @RequiresPermissions("system:depart:delete") @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result delete(@RequestParam(name="id",required=true) String id) { + @CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true) + public Result delete(@RequestParam(name = "id", required = true) String id) { - Result result = new Result(); - SysDepart sysDepart = sysDepartService.getById(id); - if(sysDepart==null) { - result.error500("未找到对应实体"); - }else { - sysDepartService.deleteDepart(id); - //清除部门树内存 - //FindsDepartsChildrenUtil.clearSysDepartTreeList(); - // FindsDepartsChildrenUtil.clearDepartIdModel(); - result.success("删除成功!"); - } - return result; - } + Result result = new Result(); + SysDepart sysDepart = sysDepartService.getById(id); + if (sysDepart == null) { + result.error500("未找到对应实体"); + } else { + sysDepartService.deleteDepart(id); + //清除部门树内存 + //FindsDepartsChildrenUtil.clearSysDepartTreeList(); + // FindsDepartsChildrenUtil.clearDepartIdModel(); + result.success("删除成功!"); + } + return result; + } - /** - * 批量删除 根据前端请求的多个ID,对数据库执行删除相关部门数据的操作 - * - * @param ids - * @return - */ + /** + * 批量删除 根据前端请求的多个ID,对数据库执行删除相关部门数据的操作 + * + * @param ids + * @return + */ @RequiresPermissions("system:depart:deleteBatch") - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { - Result result = new Result(); - if (ids == null || "".equals(ids.trim())) { - result.error500("参数不识别!"); - } else { - this.sysDepartService.deleteBatchWithChildren(Arrays.asList(ids.split(","))); - result.success("删除成功!"); - } - return result; - } + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.sysDepartService.deleteBatchWithChildren(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } - /** - * 查询数据 添加或编辑页面对该方法发起请求,以树结构形式加载所有部门的名称,方便用户的操作 - * - * @return - */ - @RequestMapping(value = "/queryIdTree", method = RequestMethod.GET) - public Result> queryIdTree() { + /** + * 查询数据 添加或编辑页面对该方法发起请求,以树结构形式加载所有部门的名称,方便用户的操作 + * + * @return + */ + @RequestMapping(value = "/queryIdTree", method = RequestMethod.GET) + public Result> queryIdTree() { // Result> result = new Result>(); // List idList; // try { @@ -298,94 +298,94 @@ public class SysDepartController { // result.setSuccess(false); // return result; // } - Result> result = new Result<>(); - try { - List list = sysDepartService.queryDepartIdTreeList(); - result.setResult(list); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(),e); - } - return result; - } - - /** - *

- * 部门搜索功能方法,根据关键字模糊搜索相关部门 - *

- * - * @param keyWord - * @return - */ - @RequestMapping(value = "/searchBy", method = RequestMethod.GET) - public Result> searchBy(@RequestParam(name = "keyWord", required = true) String keyWord,@RequestParam(name = "myDeptSearch", required = false) String myDeptSearch) { - Result> result = new Result>(); - //部门查询,myDeptSearch为1时为我的部门查询,登录用户为上级时查只查负责部门下数据 - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String departIds = null; - if(oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals( CommonConstant.USER_IDENTITY_2 )){ - departIds = user.getDepartIds(); - } - List treeList = this.sysDepartService.searchByKeyWord(keyWord,myDeptSearch,departIds); - if (treeList == null || treeList.size() == 0) { - result.setSuccess(false); - result.setMessage("未查询匹配数据!"); - return result; - } - result.setResult(treeList); - return result; - } + Result> result = new Result<>(); + try { + List list = sysDepartService.queryDepartIdTreeList(); + result.setResult(list); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + *

+ * 部门搜索功能方法,根据关键字模糊搜索相关部门 + *

+ * + * @param keyWord + * @return + */ + @RequestMapping(value = "/searchBy", method = RequestMethod.GET) + public Result> searchBy(@RequestParam(name = "keyWord", required = true) String keyWord, @RequestParam(name = "myDeptSearch", required = false) String myDeptSearch) { + Result> result = new Result>(); + //部门查询,myDeptSearch为1时为我的部门查询,登录用户为上级时查只查负责部门下数据 + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String departIds = null; + if (oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals(CommonConstant.USER_IDENTITY_2)) { + departIds = user.getDepartIds(); + } + List treeList = this.sysDepartService.searchByKeyWord(keyWord, myDeptSearch, departIds); + if (treeList == null || treeList.size() == 0) { + result.setSuccess(false); + result.setMessage("未查询匹配数据!"); + return result; + } + result.setResult(treeList); + return result; + } - /** + /** * 导出excel * * @param request */ @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(SysDepart sysDepart,HttpServletRequest request) { - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - sysDepart.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - - //update-begin---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径--- - //// Step.1 组装查询条件 - //QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepart, request.getParameterMap()); - //Step.1 AutoPoi 导出Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + public ModelAndView exportXls(SysDepart sysDepart, HttpServletRequest request) { + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + sysDepart.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + + //update-begin---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径--- + //// Step.1 组装查询条件 + //QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepart, request.getParameterMap()); + //Step.1 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); //List pageList = sysDepartService.list(queryWrapper); //按字典排序 //Collections.sort(pageList, new Comparator() { - //@Override - //public int compare(SysDepart arg0, SysDepart arg1) { - //return arg0.getOrgCode().compareTo(arg1.getOrgCode()); - //} - //}); - //step.2 组装导出数据 - Integer tenantId = sysDepart == null ? null : sysDepart.getTenantId(); - List sysDepartExportVos = sysDepartService.getExportDepart(tenantId); + //@Override + //public int compare(SysDepart arg0, SysDepart arg1) { + //return arg0.getOrgCode().compareTo(arg1.getOrgCode()); + //} + //}); + //step.2 组装导出数据 + Integer tenantId = sysDepart == null ? null : sysDepart.getTenantId(); + List sysDepartExportVos = sysDepartService.getExportDepart(tenantId); //导出文件名称 mv.addObject(NormalExcelConstants.FILE_NAME, "部门列表"); mv.addObject(NormalExcelConstants.CLASS, SysDepartExportVo.class); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("导入规则:\n" + - "1、标题为第三行,部门路径和部门名称的标题不允许修改,否则会匹配失败;第四行为数据填写范围;\n" + - "2、部门路径用英文字符/分割,部门名称为部门路径的最后一位;\n" + - "3、部门从一级名称开始创建,如果有同级就需要多添加一行,如研发部/研发一部;研发部/研发二部;\n" + - "4、自定义的部门编码需要满足规则才能导入。如一级部门编码为A01,那么子部门为A01A01,同级子部门为A01A02,编码固定为三位,首字母为A-Z,后两位为数字0-99,依次递增;", "导出人:"+user.getRealname(), "导出信息")); + "1、标题为第三行,部门路径和部门名称的标题不允许修改,否则会匹配失败;第四行为数据填写范围;\n" + + "2、部门路径用英文字符/分割,部门名称为部门路径的最后一位;\n" + + "3、部门从一级名称开始创建,如果有同级就需要多添加一行,如研发部/研发一部;研发部/研发二部;\n" + + "4、自定义的部门编码需要满足规则才能导入。如一级部门编码为A01,那么子部门为A01A01,同级子部门为A01A02,编码固定为三位,首字母为A-Z,后两位为数字0-99,依次递增;", "导出人:" + user.getRealname(), "导出信息")); mv.addObject(NormalExcelConstants.DATA_LIST, sysDepartExportVos); - //update-end---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径--- - - return mv; + //update-end---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径--- + + return mv; } /** * 通过excel导入数据 - * 部门导入方案1: 通过机构编码来计算出部门的父级ID,维护上下级关系; - * 部门导入方案2: 你也可以改造下程序,机构编码直接导入,先不设置父ID;全部导入后,写一个sql,补下父ID; + * 部门导入方案1: 通过机构编码来计算出部门的父级ID,维护上下级关系; + * 部门导入方案2: 你也可以改造下程序,机构编码直接导入,先不设置父ID;全部导入后,写一个sql,补下父ID; * * @param request * @param response @@ -393,12 +393,12 @@ public class SysDepartController { */ @RequiresPermissions("system:depart:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) + @CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true) public Result importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - List errorMessageList = new ArrayList<>(); - //List listSysDeparts = null; - List listSysDeparts = null; + List errorMessageList = new ArrayList<>(); + //List listSysDeparts = null; + List listSysDeparts = null; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { // 获取上传文件对象 @@ -408,7 +408,7 @@ public class SysDepartController { params.setHeadRows(1); params.setNeedSave(true); try { - //update-begin---author:wangshuai---date:2023-10-20---for: 注释掉原来的导入部门的逻辑--- + //update-begin---author:wangshuai---date:2023-10-20---for: 注释掉原来的导入部门的逻辑--- // // orgCode编码长度 // int codeLength = YouBianCodeUtil.ZHANWEI_LENGTH; // listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), SysDepart.class, params); @@ -454,22 +454,22 @@ public class SysDepartController { // ImportExcelUtil.importDateSaveOne(sysDepart, ISysDepartService.class, errorMessageList, num, CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE); // num++; // } - //update-end---author:wangshuai---date:2023-10-20---for: 注释掉原来的导入部门的逻辑--- - - //update-begin---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径--- - listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), SysDepartExportVo.class, params); - sysDepartService.importSysDepart(listSysDeparts,errorMessageList); - //update-end---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径--- - - //清空部门缓存 - Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*"); - Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); - redisTemplate.delete(keys3); - redisTemplate.delete(keys4); - return ImportExcelUtil.imporReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList); + //update-end---author:wangshuai---date:2023-10-20---for: 注释掉原来的导入部门的逻辑--- + + //update-begin---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径--- + listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), SysDepartExportVo.class, params); + sysDepartService.importSysDepart(listSysDeparts, errorMessageList); + //update-end---author:wangshuai---date:2023-10-19---for:【QQYUN-5482】系统的部门导入导出也可以改成敲敲云模式的部门路径--- + + //清空部门缓存 + Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*"); + Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); + redisTemplate.delete(keys3); + redisTemplate.delete(keys4); + return ImportExcelUtil.imporReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList); } catch (Exception e) { - log.error(e.getMessage(),e); - return Result.error("文件导入失败:"+e.getMessage()); + log.error(e.getMessage(), e); + return Result.error("文件导入失败:" + e.getMessage()); } finally { try { file.getInputStream().close(); @@ -482,197 +482,201 @@ public class SysDepartController { } - /** - * 查询所有部门信息 - * @return - */ - @GetMapping("listAll") - public Result> listAll(@RequestParam(name = "id", required = false) String id) { - Result> result = new Result<>(); - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.orderByAsc(SysDepart::getOrgCode); - if(oConvertUtils.isNotEmpty(id)){ - String[] arr = id.split(","); - query.in(SysDepart::getId,arr); - } - List ls = this.sysDepartService.list(query); - result.setSuccess(true); - result.setResult(ls); - return result; - } - /** - * 查询数据 查出所有部门,并以树结构数据格式响应给前端 - * - * @return - */ - @RequestMapping(value = "/queryTreeByKeyWord", method = RequestMethod.GET) - public Result> queryTreeByKeyWord(@RequestParam(name = "keyWord", required = false) String keyWord) { - Result> result = new Result<>(); - try { - Map map=new HashMap(5); - List list = sysDepartService.queryTreeByKeyWord(keyWord); - //根据keyWord获取用户信息 - LambdaQueryWrapper queryUser = new LambdaQueryWrapper(); - queryUser.eq(SysUser::getDelFlag,CommonConstant.DEL_FLAG_0); - queryUser.and(i -> i.like(SysUser::getUsername, keyWord).or().like(SysUser::getRealname, keyWord)); - List sysUsers = this.sysUserService.list(queryUser); - map.put("userList",sysUsers); - map.put("departList",list); - result.setResult(map); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(),e); - } - return result; - } + /** + * 查询所有部门信息 + * + * @return + */ + @GetMapping("listAll") + public Result> listAll(@RequestParam(name = "id", required = false) String id) { + Result> result = new Result<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.orderByAsc(SysDepart::getOrgCode); + if (oConvertUtils.isNotEmpty(id)) { + String[] arr = id.split(","); + query.in(SysDepart::getId, arr); + } + List ls = this.sysDepartService.list(query); + result.setSuccess(true); + result.setResult(ls); + return result; + } - /** - * 根据部门编码获取部门信息 - * - * @param orgCode - * @return - */ - @GetMapping("/getDepartName") - public Result getDepartName(@RequestParam(name = "orgCode") String orgCode) { - Result result = new Result<>(); - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysDepart::getOrgCode, orgCode); - SysDepart sysDepart = sysDepartService.getOne(query); - result.setSuccess(true); - result.setResult(sysDepart); - return result; - } + /** + * 查询数据 查出所有部门,并以树结构数据格式响应给前端 + * + * @return + */ + @RequestMapping(value = "/queryTreeByKeyWord", method = RequestMethod.GET) + public Result> queryTreeByKeyWord(@RequestParam(name = "keyWord", required = false) String keyWord) { + Result> result = new Result<>(); + try { + Map map = new HashMap(5); + List list = sysDepartService.queryTreeByKeyWord(keyWord); + //根据keyWord获取用户信息 + LambdaQueryWrapper queryUser = new LambdaQueryWrapper(); + queryUser.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0); + queryUser.and(i -> i.like(SysUser::getUsername, keyWord).or().like(SysUser::getRealname, keyWord)); + List sysUsers = this.sysUserService.list(queryUser); + map.put("userList", sysUsers); + map.put("departList", list); + result.setResult(map); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } - /** - * 根据部门id获取用户信息 - * - * @param id - * @return - */ - @GetMapping("/getUsersByDepartId") - public Result> getUsersByDepartId(@RequestParam(name = "id") String id) { - Result> result = new Result<>(); - List sysUsers = sysUserDepartService.queryUserByDepId(id); - result.setSuccess(true); - result.setResult(sysUsers); - return result; - } + /** + * 根据部门编码获取部门信息 + * + * @param orgCode + * @return + */ + @GetMapping("/getDepartName") + public Result getDepartName(@RequestParam(name = "orgCode") String orgCode) { + Result result = new Result<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysDepart::getOrgCode, orgCode); + SysDepart sysDepart = sysDepartService.getOne(query); + result.setSuccess(true); + result.setResult(sysDepart); + return result; + } - /** - * @功能:根据id 批量查询 - * @param deptIds - * @return - */ - @RequestMapping(value = "/queryByIds", method = RequestMethod.GET) - public Result> queryByIds(@RequestParam(name = "deptIds") String deptIds) { - Result> result = new Result<>(); - String[] ids = deptIds.split(","); - Collection idList = Arrays.asList(ids); - Collection deptList = sysDepartService.listByIds(idList); - result.setSuccess(true); - result.setResult(deptList); - return result; - } + /** + * 根据部门id获取用户信息 + * + * @param id + * @return + */ + @GetMapping("/getUsersByDepartId") + public Result> getUsersByDepartId(@RequestParam(name = "id") String id) { + Result> result = new Result<>(); + List sysUsers = sysUserDepartService.queryUserByDepId(id); + result.setSuccess(true); + result.setResult(sysUsers); + return result; + } - @GetMapping("/getMyDepartList") - public Result> getMyDepartList(){ + /** + * @param deptIds + * @return + * @功能:根据id 批量查询 + */ + @RequestMapping(value = "/queryByIds", method = RequestMethod.GET) + public Result> queryByIds(@RequestParam(name = "deptIds") String deptIds) { + Result> result = new Result<>(); + String[] ids = deptIds.split(","); + Collection idList = Arrays.asList(ids); + Collection deptList = sysDepartService.listByIds(idList); + result.setSuccess(true); + result.setResult(deptList); + return result; + } + + @GetMapping("/getMyDepartList") + public Result> getMyDepartList() { List list = sysDepartService.getMyDepartList(); return Result.ok(list); } - /** - * 异步查询部门list - * @param parentId 父节点 异步加载时传递 - * @return - */ - @RequestMapping(value = "/queryBookDepTreeSync", method = RequestMethod.GET) - public Result> queryBookDepTreeSync(@RequestParam(name = "pid", required = false) String parentId, - @RequestParam(name = "tenantId") Integer tenantId, - @RequestParam(name = "departName",required = false) String departName) { - Result> result = new Result<>(); - try { - List list = sysDepartService.queryBookDepTreeSync(parentId, tenantId, departName); - result.setResult(list); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(),e); - } - return result; - } + /** + * 异步查询部门list + * + * @param parentId 父节点 异步加载时传递 + * @return + */ + @RequestMapping(value = "/queryBookDepTreeSync", method = RequestMethod.GET) + public Result> queryBookDepTreeSync(@RequestParam(name = "pid", required = false) String parentId, + @RequestParam(name = "tenantId") Integer tenantId, + @RequestParam(name = "departName", required = false) String departName) { + Result> result = new Result<>(); + try { + List list = sysDepartService.queryBookDepTreeSync(parentId, tenantId, departName); + result.setResult(list); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } - /** - * 通过部门id和租户id获取用户 【低代码应用: 用于选择部门负责人】 - * @param departId - * @return - */ - @GetMapping("/getUsersByDepartTenantId") - public Result> getUsersByDepartTenantId(@RequestParam("departId") String departId){ - int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - List sysUserList = sysUserDepartService.getUsersByDepartTenantId(departId,tenantId); - return Result.ok(sysUserList); - } + /** + * 通过部门id和租户id获取用户 【低代码应用: 用于选择部门负责人】 + * + * @param departId + * @return + */ + @GetMapping("/getUsersByDepartTenantId") + public Result> getUsersByDepartTenantId(@RequestParam("departId") String departId) { + int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + List sysUserList = sysUserDepartService.getUsersByDepartTenantId(departId, tenantId); + return Result.ok(sysUserList); + } - /** - * 导出excel【低代码应用: 用于导出部门】 - * - * @param request - */ - @RequestMapping(value = "/appExportXls") - public ModelAndView appExportXls(SysDepart sysDepart,HttpServletRequest request) { - // Step.1 组装查询条件 - int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - List pageList = sysDepartService.getExcelDepart(tenantId); - //Step.2 AutoPoi 导出Excel - //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "部门列表"); - mv.addObject(NormalExcelConstants.CLASS, ExportDepartVo.class); - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("部门列表数据", "导出人:"+user.getRealname(), "导出信息")); - mv.addObject(NormalExcelConstants.DATA_LIST, pageList); - return mv; - } + /** + * 导出excel【低代码应用: 用于导出部门】 + * + * @param request + */ + @RequestMapping(value = "/appExportXls") + public ModelAndView appExportXls(SysDepart sysDepart, HttpServletRequest request) { + // Step.1 组装查询条件 + int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List pageList = sysDepartService.getExcelDepart(tenantId); + //Step.2 AutoPoi 导出Excel + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "部门列表"); + mv.addObject(NormalExcelConstants.CLASS, ExportDepartVo.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("部门列表数据", "导出人:" + user.getRealname(), "导出信息")); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 导入excel【低代码应用: 用于导出部门】 + * + * @param request + */ + @RequestMapping(value = "/appImportExcel", method = RequestMethod.POST) + @CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true) + public Result appImportExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + List errorMessageList = new ArrayList<>(); + List listSysDeparts = null; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + // 获取上传文件对象 + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), ExportDepartVo.class, params); + sysDepartService.importExcel(listSysDeparts, errorMessageList); + //清空部门缓存 + Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*"); + Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); + redisTemplate.delete(keys3); + redisTemplate.delete(keys4); + return ImportExcelUtil.imporReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("文件导入失败:" + e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); + } - /** - * 导入excel【低代码应用: 用于导出部门】 - * - * @param request - */ - @RequestMapping(value = "/appImportExcel", method = RequestMethod.POST) - @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result appImportExcel(HttpServletRequest request, HttpServletResponse response) { - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - List errorMessageList = new ArrayList<>(); - List listSysDeparts = null; - Map fileMap = multipartRequest.getFileMap(); - for (Map.Entry entity : fileMap.entrySet()) { - // 获取上传文件对象 - MultipartFile file = entity.getValue(); - ImportParams params = new ImportParams(); - params.setTitleRows(2); - params.setHeadRows(1); - params.setNeedSave(true); - try { - listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), ExportDepartVo.class, params); - sysDepartService.importExcel(listSysDeparts,errorMessageList); - //清空部门缓存 - Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*"); - Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); - redisTemplate.delete(keys3); - redisTemplate.delete(keys4); - return ImportExcelUtil.imporReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList); - } catch (Exception e) { - log.error(e.getMessage(),e); - return Result.error("文件导入失败:"+e.getMessage()); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - return Result.error("文件导入失败!"); - } - } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartPermissionController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartPermissionController.java index 272384e..196409c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartPermissionController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartPermissionController.java @@ -34,288 +34,289 @@ import org.springframework.web.servlet.ModelAndView; import java.util.*; import java.util.stream.Collectors; - /** +/** * @Description: 部门权限表 * @Author: jeecg-boot - * @Date: 2020-02-11 + * @Date: 2020-02-11 * @Version: V1.0 */ @Slf4j -@Tag(name="部门权限表") +@Tag(name = "部门权限表") @RestController @RequestMapping("/sys/sysDepartPermission") public class SysDepartPermissionController extends JeecgController { - @Autowired - private ISysDepartPermissionService sysDepartPermissionService; + @Autowired + private ISysDepartPermissionService sysDepartPermissionService; - @Autowired - private ISysPermissionDataRuleService sysPermissionDataRuleService; + @Autowired + private ISysPermissionDataRuleService sysPermissionDataRuleService; - @Autowired - private ISysPermissionService sysPermissionService; + @Autowired + private ISysPermissionService sysPermissionService; - @Autowired - private ISysDepartRolePermissionService sysDepartRolePermissionService; + @Autowired + private ISysDepartRolePermissionService sysDepartRolePermissionService; - @Autowired - private BaseCommonService baseCommonService; - - /** - * 分页列表查询 - * - * @param sysDepartPermission - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @Operation(summary="部门权限表-分页列表查询") - @GetMapping(value = "/list") - public Result queryPageList(SysDepartPermission sysDepartPermission, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepartPermission, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = sysDepartPermissionService.page(page, queryWrapper); - return Result.ok(pageList); - } - - /** - * 添加 - * - * @param sysDepartPermission - * @return - */ - @Operation(summary="部门权限表-添加") - @PostMapping(value = "/add") - public Result add(@RequestBody SysDepartPermission sysDepartPermission) { - sysDepartPermissionService.save(sysDepartPermission); - return Result.ok("添加成功!"); - } - - /** - * 编辑 - * - * @param sysDepartPermission - * @return - */ - @Operation(summary="部门权限表-编辑") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody SysDepartPermission sysDepartPermission) { - sysDepartPermissionService.updateById(sysDepartPermission); - return Result.ok("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @Operation(summary="部门权限表-通过id删除") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - sysDepartPermissionService.removeById(id); - return Result.ok("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @Operation(summary="部门权限表-批量删除") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.sysDepartPermissionService.removeByIds(Arrays.asList(ids.split(","))); - return Result.ok("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - @Operation(summary="部门权限表-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - SysDepartPermission sysDepartPermission = sysDepartPermissionService.getById(id); - return Result.ok(sysDepartPermission); - } + @Autowired + private BaseCommonService baseCommonService; - /** - * 导出excel - * - * @param request - * @param sysDepartPermission - */ - @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(HttpServletRequest request, SysDepartPermission sysDepartPermission) { - return super.exportXls(request, sysDepartPermission, SysDepartPermission.class, "部门权限表"); - } + /** + * 分页列表查询 + * + * @param sysDepartPermission + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @Operation(summary = "部门权限表-分页列表查询") + @GetMapping(value = "/list") + public Result queryPageList(SysDepartPermission sysDepartPermission, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepartPermission, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysDepartPermissionService.page(page, queryWrapper); + return Result.ok(pageList); + } - /** - * 通过excel导入数据 - * - * @param request - * @param response - * @return - */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { - return super.importExcel(request, response, SysDepartPermission.class); - } + /** + * 添加 + * + * @param sysDepartPermission + * @return + */ + @Operation(summary = "部门权限表-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody SysDepartPermission sysDepartPermission) { + sysDepartPermissionService.save(sysDepartPermission); + return Result.ok("添加成功!"); + } - /** - * 部门管理授权查询数据规则数据 - */ - @GetMapping(value = "/datarule/{permissionId}/{departId}") - public Result loadDatarule(@PathVariable("permissionId") String permissionId,@PathVariable("departId") String departId) { - List list = sysPermissionDataRuleService.getPermRuleListByPermId(permissionId); - if(list==null || list.size()==0) { - return Result.error("未找到权限配置信息"); - }else { - Map map = new HashMap(5); - map.put("datarule", list); - LambdaQueryWrapper query = new LambdaQueryWrapper() - .eq(SysDepartPermission::getPermissionId, permissionId) - .eq(SysDepartPermission::getDepartId,departId); - SysDepartPermission sysDepartPermission = sysDepartPermissionService.getOne(query); - if(sysDepartPermission==null) { - //return Result.error("未找到角色菜单配置信息"); - }else { - String drChecked = sysDepartPermission.getDataRuleIds(); - if(oConvertUtils.isNotEmpty(drChecked)) { - map.put("drChecked", drChecked.endsWith(",")?drChecked.substring(0, drChecked.length()-1):drChecked); - } - } - return Result.ok(map); - //TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key - } - } + /** + * 编辑 + * + * @param sysDepartPermission + * @return + */ + @Operation(summary = "部门权限表-编辑") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody SysDepartPermission sysDepartPermission) { + sysDepartPermissionService.updateById(sysDepartPermission); + return Result.ok("编辑成功!"); + } - /** - * 保存数据规则至部门菜单关联表 - */ - @PostMapping(value = "/datarule") - public Result saveDatarule(@RequestBody JSONObject jsonObject) { - try { - String permissionId = jsonObject.getString("permissionId"); - String departId = jsonObject.getString("departId"); - String dataRuleIds = jsonObject.getString("dataRuleIds"); - log.info("保存数据规则>>"+"菜单ID:"+permissionId+"部门ID:"+ departId+"数据权限ID:"+dataRuleIds); - LambdaQueryWrapper query = new LambdaQueryWrapper() - .eq(SysDepartPermission::getPermissionId, permissionId) - .eq(SysDepartPermission::getDepartId,departId); - SysDepartPermission sysDepartPermission = sysDepartPermissionService.getOne(query); - if(sysDepartPermission==null) { - return Result.error("请先保存部门菜单权限!"); - }else { - sysDepartPermission.setDataRuleIds(dataRuleIds); - this.sysDepartPermissionService.updateById(sysDepartPermission); - } - } catch (Exception e) { - log.error("SysDepartPermissionController.saveDatarule()发生异常:" + e.getMessage(),e); - return Result.error("保存失败"); - } - return Result.ok("保存成功!"); - } + /** + * 通过id删除 + * + * @param id + * @return + */ + @Operation(summary = "部门权限表-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + sysDepartPermissionService.removeById(id); + return Result.ok("删除成功!"); + } - /** - * 查询角色授权 - * - * @return - */ - @RequestMapping(value = "/queryDeptRolePermission", method = RequestMethod.GET) - public Result> queryDeptRolePermission(@RequestParam(name = "roleId", required = true) String roleId) { - Result> result = new Result<>(); - try { - List list = sysDepartRolePermissionService.list(new QueryWrapper().lambda().eq(SysDepartRolePermission::getRoleId, roleId)); - result.setResult(list.stream().map(sysDepartRolePermission -> String.valueOf(sysDepartRolePermission.getPermissionId())).collect(Collectors.toList())); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - return result; - } + /** + * 批量删除 + * + * @param ids + * @return + */ + @Operation(summary = "部门权限表-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.sysDepartPermissionService.removeByIds(Arrays.asList(ids.split(","))); + return Result.ok("批量删除成功!"); + } - /** - * 保存角色授权 - * - * @return - */ - @RequestMapping(value = "/saveDeptRolePermission", method = RequestMethod.POST) - public Result saveDeptRolePermission(@RequestBody JSONObject json) { - long start = System.currentTimeMillis(); - Result result = new Result<>(); - try { - String roleId = json.getString("roleId"); - String permissionIds = json.getString("permissionIds"); - String lastPermissionIds = json.getString("lastpermissionIds"); - this.sysDepartRolePermissionService.saveDeptRolePermission(roleId, permissionIds, lastPermissionIds); - result.success("保存成功!"); - //update-begin---author:wangshuai ---date:20220316 for:[VUEN-234]部门角色授权添加敏感日志------------ - LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - baseCommonService.addLog("修改部门角色ID:"+roleId+"的权限配置,操作人: " +loginUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2); - //update-end---author:wangshuai ---date:20220316 for:[VUEN-234]部门角色授权添加敏感日志------------ - log.info("======部门角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); - } catch (Exception e) { - result.error500("授权失败!"); - log.error(e.getMessage(), e); - } - return result; - } + /** + * 通过id查询 + * + * @param id + * @return + */ + @Operation(summary = "部门权限表-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SysDepartPermission sysDepartPermission = sysDepartPermissionService.getById(id); + return Result.ok(sysDepartPermission); + } - /** - * 用户角色授权功能,查询菜单权限树 - * @param request - * @return - */ - @RequestMapping(value = "/queryTreeListForDeptRole", method = RequestMethod.GET) - public Result> queryTreeListForDeptRole(@RequestParam(name="departId",required=true) String departId,HttpServletRequest request) { - Result> result = new Result<>(); - //全部权限ids - List ids = new ArrayList<>(); - try { - List list = sysPermissionService.queryDepartPermissionList(departId); - for(SysPermission sysPer : list) { - ids.add(sysPer.getId()); - } - List treeList = new ArrayList<>(); - getTreeModelList(treeList, list, null); - Map resMap = new HashMap(5); - //全部树节点数据 - resMap.put("treeList", treeList); - //全部树ids - resMap.put("ids", ids); - result.setResult(resMap); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - return result; - } + /** + * 导出excel + * + * @param request + * @param sysDepartPermission + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysDepartPermission sysDepartPermission) { + return super.exportXls(request, sysDepartPermission, SysDepartPermission.class, "部门权限表"); + } - private void getTreeModelList(List treeList, List metaList, TreeModel temp) { - for (SysPermission permission : metaList) { - String tempPid = permission.getParentId(); - TreeModel tree = new TreeModel(permission.getId(), tempPid, permission.getName(),permission.getRuleFlag(), permission.isLeaf()); - if(temp==null && oConvertUtils.isEmpty(tempPid)) { - treeList.add(tree); - if(!tree.getIsLeaf()) { - getTreeModelList(treeList, metaList, tree); - } - }else if(temp!=null && tempPid!=null && tempPid.equals(temp.getKey())){ - temp.getChildren().add(tree); - if(!tree.getIsLeaf()) { - getTreeModelList(treeList, metaList, tree); - } - } + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysDepartPermission.class); + } - } - } + /** + * 部门管理授权查询数据规则数据 + */ + @GetMapping(value = "/datarule/{permissionId}/{departId}") + public Result loadDatarule(@PathVariable("permissionId") String permissionId, @PathVariable("departId") String departId) { + List list = sysPermissionDataRuleService.getPermRuleListByPermId(permissionId); + if (list == null || list.size() == 0) { + return Result.error("未找到权限配置信息"); + } else { + Map map = new HashMap(5); + map.put("datarule", list); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysDepartPermission::getPermissionId, permissionId) + .eq(SysDepartPermission::getDepartId, departId); + SysDepartPermission sysDepartPermission = sysDepartPermissionService.getOne(query); + if (sysDepartPermission == null) { + //return Result.error("未找到角色菜单配置信息"); + } else { + String drChecked = sysDepartPermission.getDataRuleIds(); + if (oConvertUtils.isNotEmpty(drChecked)) { + map.put("drChecked", drChecked.endsWith(",") ? drChecked.substring(0, drChecked.length() - 1) : drChecked); + } + } + return Result.ok(map); + //TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key + } + } + + /** + * 保存数据规则至部门菜单关联表 + */ + @PostMapping(value = "/datarule") + public Result saveDatarule(@RequestBody JSONObject jsonObject) { + try { + String permissionId = jsonObject.getString("permissionId"); + String departId = jsonObject.getString("departId"); + String dataRuleIds = jsonObject.getString("dataRuleIds"); + log.info("保存数据规则>>" + "菜单ID:" + permissionId + "部门ID:" + departId + "数据权限ID:" + dataRuleIds); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysDepartPermission::getPermissionId, permissionId) + .eq(SysDepartPermission::getDepartId, departId); + SysDepartPermission sysDepartPermission = sysDepartPermissionService.getOne(query); + if (sysDepartPermission == null) { + return Result.error("请先保存部门菜单权限!"); + } else { + sysDepartPermission.setDataRuleIds(dataRuleIds); + this.sysDepartPermissionService.updateById(sysDepartPermission); + } + } catch (Exception e) { + log.error("SysDepartPermissionController.saveDatarule()发生异常:" + e.getMessage(), e); + return Result.error("保存失败"); + } + return Result.ok("保存成功!"); + } + + /** + * 查询角色授权 + * + * @return + */ + @RequestMapping(value = "/queryDeptRolePermission", method = RequestMethod.GET) + public Result> queryDeptRolePermission(@RequestParam(name = "roleId", required = true) String roleId) { + Result> result = new Result<>(); + try { + List list = sysDepartRolePermissionService.list(new QueryWrapper().lambda().eq(SysDepartRolePermission::getRoleId, roleId)); + result.setResult(list.stream().map(sysDepartRolePermission -> String.valueOf(sysDepartRolePermission.getPermissionId())).collect(Collectors.toList())); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 保存角色授权 + * + * @return + */ + @RequestMapping(value = "/saveDeptRolePermission", method = RequestMethod.POST) + public Result saveDeptRolePermission(@RequestBody JSONObject json) { + long start = System.currentTimeMillis(); + Result result = new Result<>(); + try { + String roleId = json.getString("roleId"); + String permissionIds = json.getString("permissionIds"); + String lastPermissionIds = json.getString("lastpermissionIds"); + this.sysDepartRolePermissionService.saveDeptRolePermission(roleId, permissionIds, lastPermissionIds); + result.success("保存成功!"); + //update-begin---author:wangshuai ---date:20220316 for:[VUEN-234]部门角色授权添加敏感日志------------ + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + baseCommonService.addLog("修改部门角色ID:" + roleId + "的权限配置,操作人: " + loginUser.getUsername(), CommonConstant.LOG_TYPE_2, 2); + //update-end---author:wangshuai ---date:20220316 for:[VUEN-234]部门角色授权添加敏感日志------------ + log.info("======部门角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + } catch (Exception e) { + result.error500("授权失败!"); + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 用户角色授权功能,查询菜单权限树 + * + * @param request + * @return + */ + @RequestMapping(value = "/queryTreeListForDeptRole", method = RequestMethod.GET) + public Result> queryTreeListForDeptRole(@RequestParam(name = "departId", required = true) String departId, HttpServletRequest request) { + Result> result = new Result<>(); + //全部权限ids + List ids = new ArrayList<>(); + try { + List list = sysPermissionService.queryDepartPermissionList(departId); + for (SysPermission sysPer : list) { + ids.add(sysPer.getId()); + } + List treeList = new ArrayList<>(); + getTreeModelList(treeList, list, null); + Map resMap = new HashMap(5); + //全部树节点数据 + resMap.put("treeList", treeList); + //全部树ids + resMap.put("ids", ids); + result.setResult(resMap); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + private void getTreeModelList(List treeList, List metaList, TreeModel temp) { + for (SysPermission permission : metaList) { + String tempPid = permission.getParentId(); + TreeModel tree = new TreeModel(permission.getId(), tempPid, permission.getName(), permission.getRuleFlag(), permission.isLeaf()); + if (temp == null && oConvertUtils.isEmpty(tempPid)) { + treeList.add(tree); + if (!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + } else if (temp != null && tempPid != null && tempPid.equals(temp.getKey())) { + temp.getChildren().add(tree); + if (!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + } + + } + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartRoleController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartRoleController.java index 0713780..94f3930 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartRoleController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDepartRoleController.java @@ -1,85 +1,87 @@ package org.jeecg.modules.system.controller; -import java.util.*; -import java.util.stream.Collectors; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.apache.shiro.authz.annotation.RequiresRoles; -import org.jeecg.common.api.vo.Result; -import org.jeecg.common.constant.CommonConstant; -import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.aspect.annotation.AutoLog; -import org.jeecg.common.system.vo.LoginUser; -import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.base.service.BaseCommonService; -import org.jeecg.modules.system.entity.*; -import org.jeecg.modules.system.service.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.base.controller.JeecgController; - +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.base.service.BaseCommonService; +import org.jeecg.modules.system.entity.SysDepartRole; +import org.jeecg.modules.system.entity.SysDepartRolePermission; +import org.jeecg.modules.system.entity.SysDepartRoleUser; +import org.jeecg.modules.system.entity.SysPermissionDataRule; +import org.jeecg.modules.system.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; - /** +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** * @Description: 部门角色 * @Author: jeecg-boot - * @Date: 2020-02-12 + * @Date: 2020-02-12 * @Version: V1.0 */ @Slf4j -@Tag(name="部门角色") +@Tag(name = "部门角色") @RestController @RequestMapping("/sys/sysDepartRole") public class SysDepartRoleController extends JeecgController { - @Autowired - private ISysDepartRoleService sysDepartRoleService; + @Autowired + private ISysDepartRoleService sysDepartRoleService; - @Autowired - private ISysDepartRoleUserService departRoleUserService; + @Autowired + private ISysDepartRoleUserService departRoleUserService; - @Autowired - private ISysDepartPermissionService sysDepartPermissionService; + @Autowired + private ISysDepartPermissionService sysDepartPermissionService; - @Autowired - private ISysDepartRolePermissionService sysDepartRolePermissionService; + @Autowired + private ISysDepartRolePermissionService sysDepartRolePermissionService; - @Autowired - private ISysDepartService sysDepartService; + @Autowired + private ISysDepartService sysDepartService; - @Autowired - private BaseCommonService baseCommonService; - - /** - * 分页列表查询 - * - * @param sysDepartRole - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @Operation(summary="部门角色-分页列表查询") - @GetMapping(value = "/list") - public Result queryPageList(SysDepartRole sysDepartRole, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - @RequestParam(name="deptId",required=false) String deptId, - HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepartRole, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + @Autowired + private BaseCommonService baseCommonService; + + /** + * 分页列表查询 + * + * @param sysDepartRole + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @Operation(summary = "部门角色-分页列表查询") + @GetMapping(value = "/list") + public Result queryPageList(SysDepartRole sysDepartRole, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "deptId", required = false) String deptId, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepartRole, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); // LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // List deptIds = null; // if(oConvertUtils.isEmpty(deptId)){ @@ -93,218 +95,221 @@ public class SysDepartRoleController extends JeecgController pageList = sysDepartRoleService.page(page, queryWrapper); - return Result.ok(pageList); - } - - /** - * 添加 - * - * @param sysDepartRole - * @return - */ + //我的部门,选中部门只能看当前部门下的角色 + if (oConvertUtils.isNotEmpty(deptId)) { + queryWrapper.eq("depart_id", deptId); + } + + IPage pageList = sysDepartRoleService.page(page, queryWrapper); + return Result.ok(pageList); + } + + /** + * 添加 + * + * @param sysDepartRole + * @return + */ @RequiresPermissions("system:depart:role:add") - @Operation(summary="部门角色-添加") - @PostMapping(value = "/add") - public Result add(@RequestBody SysDepartRole sysDepartRole) { - sysDepartRoleService.save(sysDepartRole); - return Result.ok("添加成功!"); - } - - /** - * 编辑 - * - * @param sysDepartRole - * @return - */ - @Operation(summary="部门角色-编辑") + @Operation(summary = "部门角色-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody SysDepartRole sysDepartRole) { + sysDepartRoleService.save(sysDepartRole); + return Result.ok("添加成功!"); + } + + /** + * 编辑 + * + * @param sysDepartRole + * @return + */ + @Operation(summary = "部门角色-编辑") @RequiresPermissions("system:depart:role:edit") - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody SysDepartRole sysDepartRole) { - sysDepartRoleService.updateById(sysDepartRole); - return Result.ok("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "部门角色-通过id删除") - @Operation(summary="部门角色-通过id删除") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody SysDepartRole sysDepartRole) { + sysDepartRoleService.updateById(sysDepartRole); + return Result.ok("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "部门角色-通过id删除") + @Operation(summary = "部门角色-通过id删除") @RequiresPermissions("system:depart:role:delete") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - sysDepartRoleService.removeById(id); - return Result.ok("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "部门角色-批量删除") - @Operation(summary="部门角色-批量删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + sysDepartRoleService.removeById(id); + return Result.ok("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "部门角色-批量删除") + @Operation(summary = "部门角色-批量删除") @RequiresPermissions("system:depart:role:deleteBatch") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.sysDepartRoleService.removeByIds(Arrays.asList(ids.split(","))); - return Result.ok("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - @Operation(summary="部门角色-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - SysDepartRole sysDepartRole = sysDepartRoleService.getById(id); - return Result.ok(sysDepartRole); - } + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.sysDepartRoleService.removeByIds(Arrays.asList(ids.split(","))); + return Result.ok("批量删除成功!"); + } - /** - * 获取部门下角色 - * @param departId - * @return - */ - @RequestMapping(value = "/getDeptRoleList", method = RequestMethod.GET) - public Result> getDeptRoleList(@RequestParam(value = "departId") String departId,@RequestParam(value = "userId") String userId){ - Result> result = new Result<>(); - //查询选中部门的角色 - List deptRoleList = sysDepartRoleService.list(new LambdaQueryWrapper().eq(SysDepartRole::getDepartId,departId)); - result.setSuccess(true); - result.setResult(deptRoleList); - return result; - } + /** + * 通过id查询 + * + * @param id + * @return + */ + @Operation(summary = "部门角色-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SysDepartRole sysDepartRole = sysDepartRoleService.getById(id); + return Result.ok(sysDepartRole); + } - /** - * 设置 - * @param json - * @return - */ - @RequiresPermissions("system:depart:role:userAdd") - @RequestMapping(value = "/deptRoleUserAdd", method = RequestMethod.POST) - public Result deptRoleAdd(@RequestBody JSONObject json) { - String newRoleId = json.getString("newRoleId"); - String oldRoleId = json.getString("oldRoleId"); - String userId = json.getString("userId"); - departRoleUserService.deptRoleUserAdd(userId,newRoleId,oldRoleId); - //update-begin---author:wangshuai ---date:20220316 for:[VUEN-234]部门角色分配添加敏感日志------------ - LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - baseCommonService.addLog("给部门用户ID:"+userId+"分配角色,操作人: " +loginUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2); - //update-end---author:wangshuai ---date:20220316 for:[VUEN-234]部门角色分配添加敏感日志------------ - return Result.ok("添加成功!"); - } + /** + * 获取部门下角色 + * + * @param departId + * @return + */ + @RequestMapping(value = "/getDeptRoleList", method = RequestMethod.GET) + public Result> getDeptRoleList(@RequestParam(value = "departId") String departId, @RequestParam(value = "userId") String userId) { + Result> result = new Result<>(); + //查询选中部门的角色 + List deptRoleList = sysDepartRoleService.list(new LambdaQueryWrapper().eq(SysDepartRole::getDepartId, departId)); + result.setSuccess(true); + result.setResult(deptRoleList); + return result; + } - /** - * 根据用户id获取已设置部门角色 - * @param userId - * @return - */ - @RequestMapping(value = "/getDeptRoleByUserId", method = RequestMethod.GET) - public Result> getDeptRoleByUserId(@RequestParam(value = "userId") String userId,@RequestParam(value = "departId") String departId){ - Result> result = new Result<>(); - //查询部门下角色 - List roleList = sysDepartRoleService.list(new QueryWrapper().eq("depart_id",departId)); - List roleIds = roleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); - //根据角色id,用户id查询已授权角色 - List roleUserList = null; - if(roleIds!=null && roleIds.size()>0){ - roleUserList = departRoleUserService.list(new QueryWrapper().eq("user_id",userId).in("drole_id",roleIds)); - } - result.setSuccess(true); - result.setResult(roleUserList); - return result; - } + /** + * 设置 + * + * @param json + * @return + */ + @RequiresPermissions("system:depart:role:userAdd") + @RequestMapping(value = "/deptRoleUserAdd", method = RequestMethod.POST) + public Result deptRoleAdd(@RequestBody JSONObject json) { + String newRoleId = json.getString("newRoleId"); + String oldRoleId = json.getString("oldRoleId"); + String userId = json.getString("userId"); + departRoleUserService.deptRoleUserAdd(userId, newRoleId, oldRoleId); + //update-begin---author:wangshuai ---date:20220316 for:[VUEN-234]部门角色分配添加敏感日志------------ + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + baseCommonService.addLog("给部门用户ID:" + userId + "分配角色,操作人: " + loginUser.getUsername(), CommonConstant.LOG_TYPE_2, 2); + //update-end---author:wangshuai ---date:20220316 for:[VUEN-234]部门角色分配添加敏感日志------------ + return Result.ok("添加成功!"); + } - /** - * 查询数据规则数据 - */ - @GetMapping(value = "/datarule/{permissionId}/{departId}/{roleId}") - public Result loadDatarule(@PathVariable("permissionId") String permissionId,@PathVariable("departId") String departId,@PathVariable("roleId") String roleId) { - //查询已授权的部门规则 - List list = sysDepartPermissionService.getPermRuleListByDeptIdAndPermId(departId,permissionId); - if(list==null || list.size()==0) { - return Result.error("未找到权限配置信息"); - }else { - Map map = new HashMap(5); - map.put("datarule", list); - LambdaQueryWrapper query = new LambdaQueryWrapper() - .eq(SysDepartRolePermission::getPermissionId, permissionId) - .eq(SysDepartRolePermission::getRoleId,roleId); - SysDepartRolePermission sysRolePermission = sysDepartRolePermissionService.getOne(query); - if(sysRolePermission==null) { - //return Result.error("未找到角色菜单配置信息"); - }else { - String drChecked = sysRolePermission.getDataRuleIds(); - if(oConvertUtils.isNotEmpty(drChecked)) { - map.put("drChecked", drChecked.endsWith(",")?drChecked.substring(0, drChecked.length()-1):drChecked); - } - } - return Result.ok(map); - //TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key - } - } + /** + * 根据用户id获取已设置部门角色 + * + * @param userId + * @return + */ + @RequestMapping(value = "/getDeptRoleByUserId", method = RequestMethod.GET) + public Result> getDeptRoleByUserId(@RequestParam(value = "userId") String userId, @RequestParam(value = "departId") String departId) { + Result> result = new Result<>(); + //查询部门下角色 + List roleList = sysDepartRoleService.list(new QueryWrapper().eq("depart_id", departId)); + List roleIds = roleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + //根据角色id,用户id查询已授权角色 + List roleUserList = null; + if (roleIds != null && roleIds.size() > 0) { + roleUserList = departRoleUserService.list(new QueryWrapper().eq("user_id", userId).in("drole_id", roleIds)); + } + result.setSuccess(true); + result.setResult(roleUserList); + return result; + } - /** - * 保存数据规则至角色菜单关联表 - */ - @PostMapping(value = "/datarule") - public Result saveDatarule(@RequestBody JSONObject jsonObject) { - try { - String permissionId = jsonObject.getString("permissionId"); - String roleId = jsonObject.getString("roleId"); - String dataRuleIds = jsonObject.getString("dataRuleIds"); - log.info("保存数据规则>>"+"菜单ID:"+permissionId+"角色ID:"+ roleId+"数据权限ID:"+dataRuleIds); - LambdaQueryWrapper query = new LambdaQueryWrapper() - .eq(SysDepartRolePermission::getPermissionId, permissionId) - .eq(SysDepartRolePermission::getRoleId,roleId); - SysDepartRolePermission sysRolePermission = sysDepartRolePermissionService.getOne(query); - if(sysRolePermission==null) { - return Result.error("请先保存角色菜单权限!"); - }else { - sysRolePermission.setDataRuleIds(dataRuleIds); - this.sysDepartRolePermissionService.updateById(sysRolePermission); - } - } catch (Exception e) { - log.error("SysRoleController.saveDatarule()发生异常:" + e.getMessage(),e); - return Result.error("保存失败"); - } - return Result.ok("保存成功!"); - } + /** + * 查询数据规则数据 + */ + @GetMapping(value = "/datarule/{permissionId}/{departId}/{roleId}") + public Result loadDatarule(@PathVariable("permissionId") String permissionId, @PathVariable("departId") String departId, @PathVariable("roleId") String roleId) { + //查询已授权的部门规则 + List list = sysDepartPermissionService.getPermRuleListByDeptIdAndPermId(departId, permissionId); + if (list == null || list.size() == 0) { + return Result.error("未找到权限配置信息"); + } else { + Map map = new HashMap(5); + map.put("datarule", list); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysDepartRolePermission::getPermissionId, permissionId) + .eq(SysDepartRolePermission::getRoleId, roleId); + SysDepartRolePermission sysRolePermission = sysDepartRolePermissionService.getOne(query); + if (sysRolePermission == null) { + //return Result.error("未找到角色菜单配置信息"); + } else { + String drChecked = sysRolePermission.getDataRuleIds(); + if (oConvertUtils.isNotEmpty(drChecked)) { + map.put("drChecked", drChecked.endsWith(",") ? drChecked.substring(0, drChecked.length() - 1) : drChecked); + } + } + return Result.ok(map); + //TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key + } + } - /** - * 导出excel - * - * @param request - * @param sysDepartRole - */ - @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(HttpServletRequest request, SysDepartRole sysDepartRole) { - return super.exportXls(request, sysDepartRole, SysDepartRole.class, "部门角色"); - } + /** + * 保存数据规则至角色菜单关联表 + */ + @PostMapping(value = "/datarule") + public Result saveDatarule(@RequestBody JSONObject jsonObject) { + try { + String permissionId = jsonObject.getString("permissionId"); + String roleId = jsonObject.getString("roleId"); + String dataRuleIds = jsonObject.getString("dataRuleIds"); + log.info("保存数据规则>>" + "菜单ID:" + permissionId + "角色ID:" + roleId + "数据权限ID:" + dataRuleIds); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysDepartRolePermission::getPermissionId, permissionId) + .eq(SysDepartRolePermission::getRoleId, roleId); + SysDepartRolePermission sysRolePermission = sysDepartRolePermissionService.getOne(query); + if (sysRolePermission == null) { + return Result.error("请先保存角色菜单权限!"); + } else { + sysRolePermission.setDataRuleIds(dataRuleIds); + this.sysDepartRolePermissionService.updateById(sysRolePermission); + } + } catch (Exception e) { + log.error("SysRoleController.saveDatarule()发生异常:" + e.getMessage(), e); + return Result.error("保存失败"); + } + return Result.ok("保存成功!"); + } - /** - * 通过excel导入数据 - * - * @param request - * @param response - * @return - */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { - return super.importExcel(request, response, SysDepartRole.class); - } + /** + * 导出excel + * + * @param request + * @param sysDepartRole + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysDepartRole sysDepartRole) { + return super.exportXls(request, sysDepartRole, SysDepartRole.class, "部门角色"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysDepartRole.class); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictController.java index 4024b19..56c4dde 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictController.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; @@ -47,8 +49,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; + import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.*; @@ -66,402 +67,408 @@ import java.util.*; @Slf4j public class SysDictController { - @Autowired - private ISysDictService sysDictService; - @Autowired - private ISysDictItemService sysDictItemService; - @Autowired - public RedisTemplate redisTemplate; - @Autowired - private RedisUtil redisUtil; - @Autowired - private ShiroRealm shiroRealm; + @Autowired + private ISysDictService sysDictService; + @Autowired + private ISysDictItemService sysDictItemService; + @Autowired + public RedisTemplate redisTemplate; + @Autowired + private RedisUtil redisUtil; + @Autowired + private ShiroRealm shiroRealm; - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result> queryPageList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result>(); - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - sysDict.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(),0)); - } - //------------------------------------------------------------------------------------------------ - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = sysDictService.page(page, queryWrapper); - log.debug("查询当前页:"+pageList.getCurrent()); - log.debug("查询当前页数量:"+pageList.getSize()); - log.debug("查询结果数量:"+pageList.getRecords().size()); - log.debug("数据总数:"+pageList.getTotal()); - result.setSuccess(true); - result.setResult(pageList); - return result; - } + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysDict sysDict, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result>(); + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + sysDict.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysDictService.page(page, queryWrapper); + log.debug("查询当前页:" + pageList.getCurrent()); + log.debug("查询当前页数量:" + pageList.getSize()); + log.debug("查询结果数量:" + pageList.getRecords().size()); + log.debug("数据总数:" + pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } - /** - * @功能:获取树形字典数据 - * @param sysDict - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @SuppressWarnings("unchecked") - @RequestMapping(value = "/treeList", method = RequestMethod.GET) - public Result> treeList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result<>(); - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - // 构造查询条件 - String dictName = sysDict.getDictName(); - if(oConvertUtils.isNotEmpty(dictName)) { - query.like(true, SysDict::getDictName, dictName); - } - query.orderByDesc(true, SysDict::getCreateTime); - List list = sysDictService.list(query); - List treeList = new ArrayList<>(); - for (SysDict node : list) { - treeList.add(new SysDictTree(node)); - } - result.setSuccess(true); - result.setResult(treeList); - return result; - } + /** + * @param sysDict + * @param pageNo + * @param pageSize + * @param req + * @return + * @功能:获取树形字典数据 + */ + @SuppressWarnings("unchecked") + @RequestMapping(value = "/treeList", method = RequestMethod.GET) + public Result> treeList(SysDict sysDict, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + // 构造查询条件 + String dictName = sysDict.getDictName(); + if (oConvertUtils.isNotEmpty(dictName)) { + query.like(true, SysDict::getDictName, dictName); + } + query.orderByDesc(true, SysDict::getCreateTime); + List list = sysDictService.list(query); + List treeList = new ArrayList<>(); + for (SysDict node : list) { + treeList.add(new SysDictTree(node)); + } + result.setSuccess(true); + result.setResult(treeList); + return result; + } - /** - * 获取全部字典数据 - * - * @return - */ - @RequestMapping(value = "/queryAllDictItems", method = RequestMethod.GET) - public Result queryAllDictItems(HttpServletRequest request) { - Map> res = new HashMap(5); - res = sysDictService.queryAllDictItems(); - return Result.ok(res); - } + /** + * 获取全部字典数据 + * + * @return + */ + @RequestMapping(value = "/queryAllDictItems", method = RequestMethod.GET) + public Result queryAllDictItems(HttpServletRequest request) { + Map> res = new HashMap(5); + res = sysDictService.queryAllDictItems(); + return Result.ok(res); + } - /** - * 获取字典数据 - * @param dictCode - * @return - */ - @RequestMapping(value = "/getDictText/{dictCode}/{key}", method = RequestMethod.GET) - public Result getDictText(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key) { - log.info(" dictCode : "+ dictCode); - Result result = new Result(); - String text = null; - try { - text = sysDictService.queryDictTextByKey(dictCode, key); - result.setSuccess(true); - result.setResult(text); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败"); - return result; - } - return result; - } + /** + * 获取字典数据 + * + * @param dictCode + * @return + */ + @RequestMapping(value = "/getDictText/{dictCode}/{key}", method = RequestMethod.GET) + public Result getDictText(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key) { + log.info(" dictCode : " + dictCode); + Result result = new Result(); + String text = null; + try { + text = sysDictService.queryDictTextByKey(dictCode, key); + result.setSuccess(true); + result.setResult(text); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + return result; + } + return result; + } - /** - * 获取字典数据 【接口签名验证】 - * @param dictCode 字典code - * @param dictCode 表名,文本字段,code字段 | 举例:sys_user,realname,id - * @return - */ - @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET) - public Result> getDictItems(@PathVariable("dictCode") String dictCode, @RequestParam(value = "sign",required = false) String sign,HttpServletRequest request) { - log.info(" dictCode : "+ dictCode); - Result> result = new Result>(); - try { - List ls = sysDictService.getDictItems(dictCode); - if (ls == null) { - result.error500("字典Code格式不正确!"); - return result; - } - result.setSuccess(true); - result.setResult(ls); - log.debug(result.toString()); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - return result; - } - return result; - } + /** + * 获取字典数据 【接口签名验证】 + * + * @param dictCode 字典code + * @param dictCode 表名,文本字段,code字段 | 举例:sys_user,realname,id + * @return + */ + @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET) + public Result> getDictItems(@PathVariable("dictCode") String dictCode, @RequestParam(value = "sign", required = false) String sign, HttpServletRequest request) { + log.info(" dictCode : " + dictCode); + Result> result = new Result>(); + try { + List ls = sysDictService.getDictItems(dictCode); + if (ls == null) { + result.error500("字典Code格式不正确!"); + return result; + } + result.setSuccess(true); + result.setResult(ls); + log.debug(result.toString()); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + return result; + } + return result; + } - /** - * 【接口签名验证】 - * 【JSearchSelectTag下拉搜索组件专用接口】 - * 大数据量的字典表 走异步加载 即前端输入内容过滤数据 - * @param dictCode 字典code格式:table,text,code - * @return - */ - @RequestMapping(value = "/loadDict/{dictCode}", method = RequestMethod.GET) - public Result> loadDict(@PathVariable("dictCode") String dictCode, - @RequestParam(name="keyword",required = false) String keyword, - @RequestParam(value = "sign",required = false) String sign, - @RequestParam(value = "pageSize", required = false) Integer pageSize) { - - //update-begin-author:taoyan date:2023-5-22 for: /issues/4905 因为中括号(%5)的问题导致的 表单生成器字段配置时,选择关联字段,在进行高级配置时,无法加载数据库列表,提示 Sgin签名校验错误! #4905 RouteToRequestUrlFilter - if(keyword!=null && keyword.indexOf("%5")>=0){ - try { - keyword = URLDecoder.decode(keyword, "UTF-8"); - } catch (UnsupportedEncodingException e) { - log.error("下拉搜索关键字解码失败", e); - } - } - //update-end-author:taoyan date:2023-5-22 for: /issues/4905 因为中括号(%5)的问题导致的 表单生成器字段配置时,选择关联字段,在进行高级配置时,无法加载数据库列表,提示 Sgin签名校验错误! #4905 - - log.info(" 加载字典表数据,加载关键字: "+ keyword); - Result> result = new Result>(); - try { - List ls = sysDictService.loadDict(dictCode, keyword, pageSize); - if (ls == null) { - result.error500("字典Code格式不正确!"); - return result; - } - result.setSuccess(true); - result.setResult(ls); - log.info(result.toString()); - return result; - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败:" + e.getMessage()); - return result; - } - } + /** + * 【接口签名验证】 + * 【JSearchSelectTag下拉搜索组件专用接口】 + * 大数据量的字典表 走异步加载 即前端输入内容过滤数据 + * + * @param dictCode 字典code格式:table,text,code + * @return + */ + @RequestMapping(value = "/loadDict/{dictCode}", method = RequestMethod.GET) + public Result> loadDict(@PathVariable("dictCode") String dictCode, + @RequestParam(name = "keyword", required = false) String keyword, + @RequestParam(value = "sign", required = false) String sign, + @RequestParam(value = "pageSize", required = false) Integer pageSize) { - /** - * 【接口签名验证】 - * 【给表单设计器的表字典使用】下拉搜索模式,有值时动态拼接数据 - * @param dictCode - * @param keyword 当前控件的值,可以逗号分割 - * @param sign - * @param pageSize - * @return - */ - @RequestMapping(value = "/loadDictOrderByValue/{dictCode}", method = RequestMethod.GET) - public Result> loadDictOrderByValue( - @PathVariable("dictCode") String dictCode, - @RequestParam(name = "keyword") String keyword, - @RequestParam(value = "sign", required = false) String sign, - @RequestParam(value = "pageSize", required = false) Integer pageSize) { - // 首次查询查出来用户选中的值,并且不分页 - Result> firstRes = this.loadDict(dictCode, keyword, sign, null); - if (!firstRes.isSuccess()) { - return firstRes; - } - // 然后再查询出第一页的数据 - Result> result = this.loadDict(dictCode, "", sign, pageSize); - if (!result.isSuccess()) { - return result; - } - // 合并两次查询的数据 - List firstList = firstRes.getResult(); - List list = result.getResult(); - for (DictModel firstItem : firstList) { - // anyMatch 表示:判断的条件里,任意一个元素匹配成功,返回true - // allMatch 表示:判断条件里的元素,所有的都匹配成功,返回true - // noneMatch 跟 allMatch 相反,表示:判断条件里的元素,所有的都匹配失败,返回true - boolean none = list.stream().noneMatch(item -> item.getValue().equals(firstItem.getValue())); - // 当元素不存在时,再添加到集合里 - if (none) { - list.add(0, firstItem); - } - } - return result; - } + //update-begin-author:taoyan date:2023-5-22 for: /issues/4905 因为中括号(%5)的问题导致的 表单生成器字段配置时,选择关联字段,在进行高级配置时,无法加载数据库列表,提示 Sgin签名校验错误! #4905 RouteToRequestUrlFilter + if (keyword != null && keyword.indexOf("%5") >= 0) { + try { + keyword = URLDecoder.decode(keyword, "UTF-8"); + } catch (UnsupportedEncodingException e) { + log.error("下拉搜索关键字解码失败", e); + } + } + //update-end-author:taoyan date:2023-5-22 for: /issues/4905 因为中括号(%5)的问题导致的 表单生成器字段配置时,选择关联字段,在进行高级配置时,无法加载数据库列表,提示 Sgin签名校验错误! #4905 - /** - * 【接口签名验证】 - * 根据字典code加载字典text 返回 - * @param dictCode 顺序:tableName,text,code - * @param keys 要查询的key - * @param sign - * @param delNotExist 是否移除不存在的项,默认为true,设为false如果某个key不存在数据库中,则直接返回key本身 - * @param request - * @return - */ - @RequestMapping(value = "/loadDictItem/{dictCode}", method = RequestMethod.GET) - public Result> loadDictItem(@PathVariable("dictCode") String dictCode,@RequestParam(name="key") String keys, @RequestParam(value = "sign",required = false) String sign,@RequestParam(value = "delNotExist",required = false,defaultValue = "true") boolean delNotExist,HttpServletRequest request) { - Result> result = new Result<>(); - try { - if(dictCode.indexOf(SymbolConstant.COMMA)!=-1) { - String[] params = dictCode.split(SymbolConstant.COMMA); - if(params.length!=3) { - result.error500("字典Code格式不正确!"); - return result; - } - List texts = sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys, delNotExist); + log.info(" 加载字典表数据,加载关键字: " + keyword); + Result> result = new Result>(); + try { + List ls = sysDictService.loadDict(dictCode, keyword, pageSize); + if (ls == null) { + result.error500("字典Code格式不正确!"); + return result; + } + result.setSuccess(true); + result.setResult(ls); + log.info(result.toString()); + return result; + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败:" + e.getMessage()); + return result; + } + } - result.setSuccess(true); - result.setResult(texts); - log.info(result.toString()); - }else { - result.error500("字典Code格式不正确!"); - } - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败"); - return result; - } + /** + * 【接口签名验证】 + * 【给表单设计器的表字典使用】下拉搜索模式,有值时动态拼接数据 + * + * @param dictCode + * @param keyword 当前控件的值,可以逗号分割 + * @param sign + * @param pageSize + * @return + */ + @RequestMapping(value = "/loadDictOrderByValue/{dictCode}", method = RequestMethod.GET) + public Result> loadDictOrderByValue( + @PathVariable("dictCode") String dictCode, + @RequestParam(name = "keyword") String keyword, + @RequestParam(value = "sign", required = false) String sign, + @RequestParam(value = "pageSize", required = false) Integer pageSize) { + // 首次查询查出来用户选中的值,并且不分页 + Result> firstRes = this.loadDict(dictCode, keyword, sign, null); + if (!firstRes.isSuccess()) { + return firstRes; + } + // 然后再查询出第一页的数据 + Result> result = this.loadDict(dictCode, "", sign, pageSize); + if (!result.isSuccess()) { + return result; + } + // 合并两次查询的数据 + List firstList = firstRes.getResult(); + List list = result.getResult(); + for (DictModel firstItem : firstList) { + // anyMatch 表示:判断的条件里,任意一个元素匹配成功,返回true + // allMatch 表示:判断条件里的元素,所有的都匹配成功,返回true + // noneMatch 跟 allMatch 相反,表示:判断条件里的元素,所有的都匹配失败,返回true + boolean none = list.stream().noneMatch(item -> item.getValue().equals(firstItem.getValue())); + // 当元素不存在时,再添加到集合里 + if (none) { + list.add(0, firstItem); + } + } + return result; + } - return result; - } + /** + * 【接口签名验证】 + * 根据字典code加载字典text 返回 + * + * @param dictCode 顺序:tableName,text,code + * @param keys 要查询的key + * @param sign + * @param delNotExist 是否移除不存在的项,默认为true,设为false如果某个key不存在数据库中,则直接返回key本身 + * @param request + * @return + */ + @RequestMapping(value = "/loadDictItem/{dictCode}", method = RequestMethod.GET) + public Result> loadDictItem(@PathVariable("dictCode") String dictCode, @RequestParam(name = "key") String keys, @RequestParam(value = "sign", required = false) String sign, @RequestParam(value = "delNotExist", required = false, defaultValue = "true") boolean delNotExist, HttpServletRequest request) { + Result> result = new Result<>(); + try { + if (dictCode.indexOf(SymbolConstant.COMMA) != -1) { + String[] params = dictCode.split(SymbolConstant.COMMA); + if (params.length != 3) { + result.error500("字典Code格式不正确!"); + return result; + } + List texts = sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys, delNotExist); - /** - * 【接口签名验证】 - * 根据表名——显示字段-存储字段 pid 加载树形数据 - * @param hasChildField 是否叶子节点字段 - * @param converIsLeafVal 是否需要系统转换 是否叶子节点的值 (0标识不转换、1标准系统自动转换) - * @param tableName 表名 - * @param text label字段 - * @param code value 字段 - * @param condition 查询条件 ? - * - */ - @SuppressWarnings("unchecked") - @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) - public Result> loadTreeData(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="pidField") String pidField, - @RequestParam(name="tableName") String tableName, - @RequestParam(name="text") String text, - @RequestParam(name="code") String code, - @RequestParam(name="hasChildField") String hasChildField, - @RequestParam(name="converIsLeafVal",defaultValue ="1") int converIsLeafVal, - @RequestParam(name="condition") String condition, - @RequestParam(value = "sign",required = false) String sign,HttpServletRequest request) { - Result> result = new Result>(); + result.setSuccess(true); + result.setResult(texts); + log.info(result.toString()); + } else { + result.error500("字典Code格式不正确!"); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + return result; + } - // 【QQYUN-9207】防止参数为空导致报错 - if (oConvertUtils.isEmpty(tableName) || oConvertUtils.isEmpty(text) || oConvertUtils.isEmpty(code)) { - result.error500("字典Code格式不正确!"); - return result; - } + return result; + } - // 1.获取查询条件参数 - Map query = null; - if(oConvertUtils.isNotEmpty(condition)) { - query = JSON.parseObject(condition, Map.class); - } - - // 2.返回查询结果 - List ls = sysDictService.queryTreeList(query,tableName, text, code, pidField, pid,hasChildField,converIsLeafVal); - result.setSuccess(true); - result.setResult(ls); - return result; - } + /** + * 【接口签名验证】 + * 根据表名——显示字段-存储字段 pid 加载树形数据 + * + * @param hasChildField 是否叶子节点字段 + * @param converIsLeafVal 是否需要系统转换 是否叶子节点的值 (0标识不转换、1标准系统自动转换) + * @param tableName 表名 + * @param text label字段 + * @param code value 字段 + * @param condition 查询条件 ? + */ + @SuppressWarnings("unchecked") + @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) + public Result> loadTreeData(@RequestParam(name = "pid", required = false) String pid, @RequestParam(name = "pidField") String pidField, + @RequestParam(name = "tableName") String tableName, + @RequestParam(name = "text") String text, + @RequestParam(name = "code") String code, + @RequestParam(name = "hasChildField") String hasChildField, + @RequestParam(name = "converIsLeafVal", defaultValue = "1") int converIsLeafVal, + @RequestParam(name = "condition") String condition, + @RequestParam(value = "sign", required = false) String sign, HttpServletRequest request) { + Result> result = new Result>(); - /** - * 【APP接口】根据字典配置查询表字典数据(目前暂未找到调用的地方) - * @param query - * @param pageNo - * @param pageSize - * @return - */ - @Deprecated - @GetMapping("/queryTableData") - public Result> queryTableData(DictQuery query, - @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, - @RequestParam(value = "sign",required = false) String sign,HttpServletRequest request){ - Result> res = new Result>(); - List ls = this.sysDictService.queryDictTablePageList(query,pageSize,pageNo); - res.setResult(ls); - res.setSuccess(true); - return res; - } + // 【QQYUN-9207】防止参数为空导致报错 + if (oConvertUtils.isEmpty(tableName) || oConvertUtils.isEmpty(text) || oConvertUtils.isEmpty(code)) { + result.error500("字典Code格式不正确!"); + return result; + } - /** - * @功能:新增 - * @param sysDict - * @return - */ + // 1.获取查询条件参数 + Map query = null; + if (oConvertUtils.isNotEmpty(condition)) { + query = JSON.parseObject(condition, Map.class); + } + + // 2.返回查询结果 + List ls = sysDictService.queryTreeList(query, tableName, text, code, pidField, pid, hasChildField, converIsLeafVal); + result.setSuccess(true); + result.setResult(ls); + return result; + } + + /** + * 【APP接口】根据字典配置查询表字典数据(目前暂未找到调用的地方) + * + * @param query + * @param pageNo + * @param pageSize + * @return + */ + @Deprecated + @GetMapping("/queryTableData") + public Result> queryTableData(DictQuery query, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(value = "sign", required = false) String sign, HttpServletRequest request) { + Result> res = new Result>(); + List ls = this.sysDictService.queryDictTablePageList(query, pageSize, pageNo); + res.setResult(ls); + res.setSuccess(true); + return res; + } + + /** + * @param sysDict + * @return + * @功能:新增 + */ @RequiresPermissions("system:dict:add") - @RequestMapping(value = "/add", method = RequestMethod.POST) - public Result add(@RequestBody SysDict sysDict) { - Result result = new Result(); - try { - sysDict.setCreateTime(new Date()); - sysDict.setDelFlag(CommonConstant.DEL_FLAG_0); - sysDictService.save(sysDict); - result.success("保存成功!"); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败"); - } - return result; - } + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody SysDict sysDict) { + Result result = new Result(); + try { + sysDict.setCreateTime(new Date()); + sysDict.setDelFlag(CommonConstant.DEL_FLAG_0); + sysDictService.save(sysDict); + result.success("保存成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } - /** - * @功能:编辑 - * @param sysDict - * @return - */ + /** + * @param sysDict + * @return + * @功能:编辑 + */ @RequiresPermissions("system:dict:edit") - @RequestMapping(value = "/edit", method = { RequestMethod.PUT,RequestMethod.POST }) - public Result edit(@RequestBody SysDict sysDict) { - Result result = new Result(); - SysDict sysdict = sysDictService.getById(sysDict.getId()); - if(sysdict==null) { - result.error500("未找到对应实体"); - }else { - sysDict.setUpdateTime(new Date()); - boolean ok = sysDictService.updateById(sysDict); - if(ok) { - result.success("编辑成功!"); - } - } - return result; - } + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody SysDict sysDict) { + Result result = new Result(); + SysDict sysdict = sysDictService.getById(sysDict.getId()); + if (sysdict == null) { + result.error500("未找到对应实体"); + } else { + sysDict.setUpdateTime(new Date()); + boolean ok = sysDictService.updateById(sysDict); + if (ok) { + result.success("编辑成功!"); + } + } + return result; + } - /** - * @功能:删除 - * @param id - * @return - */ + /** + * @param id + * @return + * @功能:删除 + */ @RequiresPermissions("system:dict:delete") - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - @CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result delete(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - boolean ok = sysDictService.removeById(id); - if(ok) { - result.success("删除成功!"); - }else{ - result.error500("删除失败!"); - } - return result; - } + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @CacheEvict(value = {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries = true) + public Result delete(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + boolean ok = sysDictService.removeById(id); + if (ok) { + result.success("删除成功!"); + } else { + result.error500("删除失败!"); + } + return result; + } - /** - * @功能:批量删除 - * @param ids - * @return - */ + /** + * @param ids + * @return + * @功能:批量删除 + */ @RequiresPermissions("system:dict:deleteBatch") - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - @CacheEvict(value= {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - Result result = new Result(); - if(oConvertUtils.isEmpty(ids)) { - result.error500("参数不识别!"); - }else { - sysDictService.removeByIds(Arrays.asList(ids.split(","))); - result.success("删除成功!"); - } - return result; - } + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @CacheEvict(value = {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries = true) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result(); + if (oConvertUtils.isEmpty(ids)) { + result.error500("参数不识别!"); + } else { + sysDictService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } - /** - * @功能:刷新缓存 - * @return - */ - @RequestMapping(value = "/refleshCache") - public Result refleshCache() { - Result result = new Result(); - //清空字典缓存 + /** + * @return + * @功能:刷新缓存 + */ + @RequestMapping(value = "/refleshCache") + public Result refleshCache() { + Result result = new Result(); + //清空字典缓存 // Set keys = redisTemplate.keys(CacheConstant.SYS_DICT_CACHE + "*"); // Set keys7 = redisTemplate.keys(CacheConstant.SYS_ENABLE_DICT_CACHE + "*"); // Set keys2 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_CACHE + "*"); @@ -479,243 +486,249 @@ public class SysDictController { // redisTemplate.delete(keys6); // redisTemplate.delete(keys7); - //update-begin-author:liusq date:20230404 for: [issue/4358]springCache中的清除缓存的操作使用了“keys” - redisUtil.removeAll(CacheConstant.SYS_DICT_CACHE); - redisUtil.removeAll(CacheConstant.SYS_ENABLE_DICT_CACHE); - redisUtil.removeAll(CacheConstant.SYS_DICT_TABLE_CACHE); - redisUtil.removeAll(CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE); - redisUtil.removeAll(CacheConstant.SYS_DEPARTS_CACHE); - redisUtil.removeAll(CacheConstant.SYS_DEPART_IDS_CACHE); - redisUtil.removeAll("jmreport:cache:dict"); - redisUtil.removeAll("jmreport:cache:dictTable"); - //update-end-author:liusq date:20230404 for: [issue/4358]springCache中的清除缓存的操作使用了“keys” - - //update-begin---author:scott ---date:2024-06-18 for:【TV360X-1320】分配权限必须退出重新登录才生效,造成很多用户困扰--- - // 清除当前用户的授权缓存信息 - Subject currentUser = SecurityUtils.getSubject(); - if (currentUser.isAuthenticated()) { - shiroRealm.clearCache(currentUser.getPrincipals()); - } - //update-end---author:scott ---date::2024-06-18 for:【TV360X-1320】分配权限必须退出重新登录才生效,造成很多用户困扰--- - return result; - } + //update-begin-author:liusq date:20230404 for: [issue/4358]springCache中的清除缓存的操作使用了“keys” + redisUtil.removeAll(CacheConstant.SYS_DICT_CACHE); + redisUtil.removeAll(CacheConstant.SYS_ENABLE_DICT_CACHE); + redisUtil.removeAll(CacheConstant.SYS_DICT_TABLE_CACHE); + redisUtil.removeAll(CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE); + redisUtil.removeAll(CacheConstant.SYS_DEPARTS_CACHE); + redisUtil.removeAll(CacheConstant.SYS_DEPART_IDS_CACHE); + redisUtil.removeAll("jmreport:cache:dict"); + redisUtil.removeAll("jmreport:cache:dictTable"); + //update-end-author:liusq date:20230404 for: [issue/4358]springCache中的清除缓存的操作使用了“keys” - /** - * 导出excel - * - * @param request - */ - @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(SysDict sysDict,HttpServletRequest request) { - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - sysDict.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - - // Step.1 组装查询条件 - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, request.getParameterMap()); - //Step.2 AutoPoi 导出Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - String selections = request.getParameter("selections"); - if(!oConvertUtils.isEmpty(selections)){ - queryWrapper.in("id",selections.split(",")); - } - List pageList = new ArrayList(); + //update-begin---author:scott ---date:2024-06-18 for:【TV360X-1320】分配权限必须退出重新登录才生效,造成很多用户困扰--- + // 清除当前用户的授权缓存信息 + Subject currentUser = SecurityUtils.getSubject(); + if (currentUser.isAuthenticated()) { + shiroRealm.clearCache(currentUser.getPrincipals()); + } + //update-end---author:scott ---date::2024-06-18 for:【TV360X-1320】分配权限必须退出重新登录才生效,造成很多用户困扰--- + return result; + } - List sysDictList = sysDictService.list(queryWrapper); - for (SysDict dictMain : sysDictList) { - SysDictPage vo = new SysDictPage(); - BeanUtils.copyProperties(dictMain, vo); - // 查询机票 - List sysDictItemList = sysDictItemService.selectItemsByMainId(dictMain.getId()); - vo.setSysDictItemList(sysDictItemList); - pageList.add(vo); - } + /** + * 导出excel + * + * @param request + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(SysDict sysDict, HttpServletRequest request) { + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + sysDict.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ - // 导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "数据字典"); - // 注解对象Class - mv.addObject(NormalExcelConstants.CLASS, SysDictPage.class); - // 自定义表格参数 - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("数据字典列表", "导出人:"+user.getRealname(), "数据字典")); - // 导出数据列表 - mv.addObject(NormalExcelConstants.DATA_LIST, pageList); - return mv; - } + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, request.getParameterMap()); + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + String selections = request.getParameter("selections"); + if (!oConvertUtils.isEmpty(selections)) { + queryWrapper.in("id", selections.split(",")); + } + List pageList = new ArrayList(); - /** - * 通过excel导入数据 - * - * @param request - * @param - * @return - */ + List sysDictList = sysDictService.list(queryWrapper); + for (SysDict dictMain : sysDictList) { + SysDictPage vo = new SysDictPage(); + BeanUtils.copyProperties(dictMain, vo); + // 查询机票 + List sysDictItemList = sysDictItemService.selectItemsByMainId(dictMain.getId()); + vo.setSysDictItemList(sysDictItemList); + pageList.add(vo); + } + + // 导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "数据字典"); + // 注解对象Class + mv.addObject(NormalExcelConstants.CLASS, SysDictPage.class); + // 自定义表格参数 + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("数据字典列表", "导出人:" + user.getRealname(), "数据字典")); + // 导出数据列表 + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param + * @return + */ @RequiresPermissions("system:dict:importExcel") - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); - for (Map.Entry entity : fileMap.entrySet()) { + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { // 获取上传文件对象 - MultipartFile file = entity.getValue(); - ImportParams params = new ImportParams(); - params.setTitleRows(2); - params.setHeadRows(2); - params.setNeedSave(true); - try { - //导入Excel格式校验,看匹配的字段文本概率 - Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysDictPage.class, params); - if(t!=null && !t){ - throw new RuntimeException("导入Excel校验失败 !"); - } - List list = ExcelImportUtil.importExcel(file.getInputStream(), SysDictPage.class, params); - // 错误信息 - List errorMessage = new ArrayList<>(); - int successLines = 0, errorLines = 0; - for (int i=0;i< list.size();i++) { - SysDict po = new SysDict(); - BeanUtils.copyProperties(list.get(i), po); - po.setDelFlag(CommonConstant.DEL_FLAG_0); - try { - Integer integer = sysDictService.saveMain(po, list.get(i).getSysDictItemList()); - if(integer>0){ - successLines++; - //update-begin---author:wangshuai ---date:20220211 for:[JTC-1168]如果字典项值为空,则字典项忽略导入------------ - }else if(integer == -1){ + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(2); + params.setNeedSave(true); + try { + //导入Excel格式校验,看匹配的字段文本概率 + Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysDictPage.class, params); + if (t != null && !t) { + throw new RuntimeException("导入Excel校验失败 !"); + } + List list = ExcelImportUtil.importExcel(file.getInputStream(), SysDictPage.class, params); + // 错误信息 + List errorMessage = new ArrayList<>(); + int successLines = 0, errorLines = 0; + for (int i = 0; i < list.size(); i++) { + SysDict po = new SysDict(); + BeanUtils.copyProperties(list.get(i), po); + po.setDelFlag(CommonConstant.DEL_FLAG_0); + try { + Integer integer = sysDictService.saveMain(po, list.get(i).getSysDictItemList()); + if (integer > 0) { + successLines++; + //update-begin---author:wangshuai ---date:20220211 for:[JTC-1168]如果字典项值为空,则字典项忽略导入------------ + } else if (integer == -1) { errorLines++; errorMessage.add("字典名称:" + po.getDictName() + ",对应字典列表的字典项值不能为空,忽略导入。"); - }else{ - //update-end---author:wangshuai ---date:20220211 for:[JTC-1168]如果字典项值为空,则字典项忽略导入------------ - errorLines++; - int lineNumber = i + 1; + } else { + //update-end---author:wangshuai ---date:20220211 for:[JTC-1168]如果字典项值为空,则字典项忽略导入------------ + errorLines++; + int lineNumber = i + 1; //update-begin---author:wangshuai ---date:20220209 for:[JTC-1168]字典编号不能为空------------ - if(oConvertUtils.isEmpty(po.getDictCode())){ + if (oConvertUtils.isEmpty(po.getDictCode())) { errorMessage.add("第 " + lineNumber + " 行:字典编码不能为空,忽略导入。"); - }else{ + } else { errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。"); } //update-end---author:wangshuai ---date:20220209 for:[JTC-1168]字典编号不能为空------------ } - } catch (Exception e) { - errorLines++; - int lineNumber = i + 1; - errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。"); - } - } - return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); - } catch (Exception e) { - log.error(e.getMessage(),e); - return Result.error("文件导入失败:"+e.getMessage()); - } finally { - try { - file.getInputStream().close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - return Result.error("文件导入失败!"); - } + } catch (Exception e) { + errorLines++; + int lineNumber = i + 1; + errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。"); + } + } + return ImportExcelUtil.imporReturnRes(errorLines, successLines, errorMessage); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("文件导入失败:" + e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); + } - /** - * 查询被删除的列表 - * @return - */ - @RequestMapping(value = "/deleteList", method = RequestMethod.GET) - public Result> deleteList(HttpServletRequest request) { - Result> result = new Result>(); - String tenantId = TokenUtils.getTenantIdByRequest(request); - List list = this.sysDictService.queryDeleteList(tenantId); - result.setSuccess(true); - result.setResult(list); - return result; - } + /** + * 查询被删除的列表 + * + * @return + */ + @RequestMapping(value = "/deleteList", method = RequestMethod.GET) + public Result> deleteList(HttpServletRequest request) { + Result> result = new Result>(); + String tenantId = TokenUtils.getTenantIdByRequest(request); + List list = this.sysDictService.queryDeleteList(tenantId); + result.setSuccess(true); + result.setResult(list); + return result; + } - /** - * 物理删除 - * @param id - * @return - */ - @RequestMapping(value = "/deletePhysic/{id}", method = RequestMethod.DELETE) - public Result deletePhysic(@PathVariable("id") String id) { - try { - sysDictService.deleteOneDictPhysically(id); - return Result.ok("删除成功!"); - } catch (Exception e) { - e.printStackTrace(); - return Result.error("删除失败!"); - } - } + /** + * 物理删除 + * + * @param id + * @return + */ + @RequestMapping(value = "/deletePhysic/{id}", method = RequestMethod.DELETE) + public Result deletePhysic(@PathVariable("id") String id) { + try { + sysDictService.deleteOneDictPhysically(id); + return Result.ok("删除成功!"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("删除失败!"); + } + } - /** - * 逻辑删除的字段,进行取回 - * @param id - * @return - */ - @RequestMapping(value = "/back/{id}", method = RequestMethod.PUT) - public Result back(@PathVariable("id") String id) { - try { - sysDictService.updateDictDelFlag(0,id); - return Result.ok("操作成功!"); - } catch (Exception e) { - e.printStackTrace(); - return Result.error("操作失败!"); - } - } + /** + * 逻辑删除的字段,进行取回 + * + * @param id + * @return + */ + @RequestMapping(value = "/back/{id}", method = RequestMethod.PUT) + public Result back(@PathVariable("id") String id) { + try { + sysDictService.updateDictDelFlag(0, id); + return Result.ok("操作成功!"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("操作失败!"); + } + } - /** - * VUEN-2584【issue】平台sql注入漏洞几个问题 - * 部分特殊函数 可以将查询结果混夹在错误信息中,导致数据库的信息暴露 - * @param e - * @return - */ - @ExceptionHandler(java.sql.SQLException.class) - public Result handleSQLException(Exception e){ - String msg = e.getMessage(); - String extractvalue = "extractvalue"; - String updatexml = "updatexml"; - if(msg!=null && (msg.toLowerCase().indexOf(extractvalue)>=0 || msg.toLowerCase().indexOf(updatexml)>=0)){ - return Result.error("校验失败,sql解析异常!"); - } - return Result.error("校验失败,sql解析异常!" + msg); - } + /** + * VUEN-2584【issue】平台sql注入漏洞几个问题 + * 部分特殊函数 可以将查询结果混夹在错误信息中,导致数据库的信息暴露 + * + * @param e + * @return + */ + @ExceptionHandler(java.sql.SQLException.class) + public Result handleSQLException(Exception e) { + String msg = e.getMessage(); + String extractvalue = "extractvalue"; + String updatexml = "updatexml"; + if (msg != null && (msg.toLowerCase().indexOf(extractvalue) >= 0 || msg.toLowerCase().indexOf(updatexml) >= 0)) { + return Result.error("校验失败,sql解析异常!"); + } + return Result.error("校验失败,sql解析异常!" + msg); + } - /** - * 根据应用id获取字典列表和详情 - * @param request - */ - @GetMapping("/getDictListByLowAppId") - public Result> getDictListByLowAppId(HttpServletRequest request){ - String lowAppId = oConvertUtils.getString(TokenUtils.getLowAppIdByRequest(request)); - List list = sysDictService.getDictListByLowAppId(lowAppId); - return Result.ok(list); - } + /** + * 根据应用id获取字典列表和详情 + * + * @param request + */ + @GetMapping("/getDictListByLowAppId") + public Result> getDictListByLowAppId(HttpServletRequest request) { + String lowAppId = oConvertUtils.getString(TokenUtils.getLowAppIdByRequest(request)); + List list = sysDictService.getDictListByLowAppId(lowAppId); + return Result.ok(list); + } - /** - * 添加字典 - * @param sysDictVo - * @param request - * @return - */ - @PostMapping("/addDictByLowAppId") - public Result addDictByLowAppId(@RequestBody SysDictVo sysDictVo,HttpServletRequest request){ - String lowAppId = oConvertUtils.getString(TokenUtils.getLowAppIdByRequest(request)); - String tenantId = oConvertUtils.getString(TokenUtils.getTenantIdByRequest(request)); - sysDictVo.setLowAppId(lowAppId); - sysDictVo.setTenantId(oConvertUtils.getInteger(tenantId, null)); - sysDictService.addDictByLowAppId(sysDictVo); - return Result.ok("添加成功"); - } + /** + * 添加字典 + * + * @param sysDictVo + * @param request + * @return + */ + @PostMapping("/addDictByLowAppId") + public Result addDictByLowAppId(@RequestBody SysDictVo sysDictVo, HttpServletRequest request) { + String lowAppId = oConvertUtils.getString(TokenUtils.getLowAppIdByRequest(request)); + String tenantId = oConvertUtils.getString(TokenUtils.getTenantIdByRequest(request)); + sysDictVo.setLowAppId(lowAppId); + sysDictVo.setTenantId(oConvertUtils.getInteger(tenantId, null)); + sysDictService.addDictByLowAppId(sysDictVo); + return Result.ok("添加成功"); + } - @PutMapping("/editDictByLowAppId") - public Result editDictByLowAppId(@RequestBody SysDictVo sysDictVo,HttpServletRequest request){ - String lowAppId = oConvertUtils.getString(TokenUtils.getLowAppIdByRequest(request)); - sysDictVo.setLowAppId(lowAppId); - sysDictService.editDictByLowAppId(sysDictVo); - return Result.ok("编辑成功"); - } + @PutMapping("/editDictByLowAppId") + public Result editDictByLowAppId(@RequestBody SysDictVo sysDictVo, HttpServletRequest request) { + String lowAppId = oConvertUtils.getString(TokenUtils.getLowAppIdByRequest(request)); + sysDictVo.setLowAppId(lowAppId); + sysDictService.editDictByLowAppId(sysDictVo); + return Result.ok("编辑成功"); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java index a7cb0ff..60bc8d0 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java @@ -1,40 +1,31 @@ package org.jeecg.modules.system.controller; -import java.util.Arrays; -import java.util.Date; - +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.apache.shiro.authz.annotation.RequiresRoles; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CacheConstant; import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysDictItem; import org.jeecg.modules.system.service.ISysDictItemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import lombok.extern.slf4j.Slf4j; +import java.util.Arrays; +import java.util.Date; /** *

- * 前端控制器 + * 前端控制器 *

* * @Author zhangweijian @@ -46,141 +37,142 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class SysDictItemController { - @Autowired - private ISysDictItemService sysDictItemService; - - /** - * @功能:查询字典数据 - * @param sysDictItem - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result> queryPageList(SysDictItem sysDictItem,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result>(); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDictItem, req.getParameterMap()); - queryWrapper.orderByAsc("sort_order"); - Page page = new Page(pageNo, pageSize); - IPage pageList = sysDictItemService.page(page, queryWrapper); - result.setSuccess(true); - result.setResult(pageList); - return result; - } - - /** - * @功能:新增 - * @return - */ - @RequiresPermissions("system:dict:item:add") - @RequestMapping(value = "/add", method = RequestMethod.POST) - @CacheEvict(value= {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result add(@RequestBody SysDictItem sysDictItem) { - Result result = new Result(); - try { - sysDictItem.setCreateTime(new Date()); - sysDictItemService.save(sysDictItem); - result.success("保存成功!"); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败"); - } - return result; - } - - /** - * @功能:编辑 - * @param sysDictItem - * @return - */ - @RequiresPermissions("system:dict:item:edit") - @RequestMapping(value = "/edit", method = { RequestMethod.PUT,RequestMethod.POST }) - @CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result edit(@RequestBody SysDictItem sysDictItem) { - Result result = new Result(); - SysDictItem sysdict = sysDictItemService.getById(sysDictItem.getId()); - if(sysdict==null) { - result.error500("未找到对应实体"); - }else { - sysDictItem.setUpdateTime(new Date()); - boolean ok = sysDictItemService.updateById(sysDictItem); - //TODO 返回false说明什么? - if(ok) { - result.success("编辑成功!"); - } - } - return result; - } - - /** - * @功能:删除字典数据 - * @param id - * @return - */ - @RequiresPermissions("system:dict:item:delete") - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - @CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result delete(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysDictItem joinSystem = sysDictItemService.getById(id); - if(joinSystem==null) { - result.error500("未找到对应实体"); - }else { - boolean ok = sysDictItemService.removeById(id); - if(ok) { - result.success("删除成功!"); - } - } - return result; - } - - /** - * @功能:批量删除字典数据 - * @param ids - * @return - */ - @RequiresPermissions("system:dict:item:deleteBatch") - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - @CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - Result result = new Result(); - if(ids==null || "".equals(ids.trim())) { - result.error500("参数不识别!"); - }else { - this.sysDictItemService.removeByIds(Arrays.asList(ids.split(","))); - result.success("删除成功!"); - } - return result; - } + @Autowired + private ISysDictItemService sysDictItemService; + + /** + * @param sysDictItem + * @param pageNo + * @param pageSize + * @param req + * @return + * @功能:查询字典数据 + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysDictItem sysDictItem, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDictItem, req.getParameterMap()); + queryWrapper.orderByAsc("sort_order"); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysDictItemService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * @return + * @功能:新增 + */ + @RequiresPermissions("system:dict:item:add") + @RequestMapping(value = "/add", method = RequestMethod.POST) + @CacheEvict(value = {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries = true) + public Result add(@RequestBody SysDictItem sysDictItem) { + Result result = new Result(); + try { + sysDictItem.setCreateTime(new Date()); + sysDictItemService.save(sysDictItem); + result.success("保存成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * @param sysDictItem + * @return + * @功能:编辑 + */ + @RequiresPermissions("system:dict:item:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + @CacheEvict(value = {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries = true) + public Result edit(@RequestBody SysDictItem sysDictItem) { + Result result = new Result(); + SysDictItem sysdict = sysDictItemService.getById(sysDictItem.getId()); + if (sysdict == null) { + result.error500("未找到对应实体"); + } else { + sysDictItem.setUpdateTime(new Date()); + boolean ok = sysDictItemService.updateById(sysDictItem); + //TODO 返回false说明什么? + if (ok) { + result.success("编辑成功!"); + } + } + return result; + } + + /** + * @param id + * @return + * @功能:删除字典数据 + */ + @RequiresPermissions("system:dict:item:delete") + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @CacheEvict(value = {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries = true) + public Result delete(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysDictItem joinSystem = sysDictItemService.getById(id); + if (joinSystem == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = sysDictItemService.removeById(id); + if (ok) { + result.success("删除成功!"); + } + } + return result; + } + + /** + * @param ids + * @return + * @功能:批量删除字典数据 + */ + @RequiresPermissions("system:dict:item:deleteBatch") + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @CacheEvict(value = {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries = true) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.sysDictItemService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 字典值重复校验 + * + * @param sysDictItem + * @param request + * @return + */ + @RequestMapping(value = "/dictItemCheck", method = RequestMethod.GET) + @Operation(summary = "字典重复校验接口") + public Result doDictItemCheck(SysDictItem sysDictItem, HttpServletRequest request) { + Long num = Long.valueOf(0); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(SysDictItem::getItemValue, sysDictItem.getItemValue()); + queryWrapper.eq(SysDictItem::getDictId, sysDictItem.getDictId()); + if (StringUtils.isNotBlank(sysDictItem.getId())) { + // 编辑页面校验 + queryWrapper.ne(SysDictItem::getId, sysDictItem.getId()); + } + num = sysDictItemService.count(queryWrapper); + if (num == 0) { + // 该值可用 + return Result.ok("该值可用!"); + } else { + // 该值不可用 + log.info("该值不可用,系统中已存在!"); + return Result.error("该值不可用,系统中已存在!"); + } + } - /** - * 字典值重复校验 - * @param sysDictItem - * @param request - * @return - */ - @RequestMapping(value = "/dictItemCheck", method = RequestMethod.GET) - @Operation(summary = "字典重复校验接口") - public Result doDictItemCheck(SysDictItem sysDictItem, HttpServletRequest request) { - Long num = Long.valueOf(0); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); - queryWrapper.eq(SysDictItem::getItemValue,sysDictItem.getItemValue()); - queryWrapper.eq(SysDictItem::getDictId,sysDictItem.getDictId()); - if (StringUtils.isNotBlank(sysDictItem.getId())) { - // 编辑页面校验 - queryWrapper.ne(SysDictItem::getId,sysDictItem.getId()); - } - num = sysDictItemService.count(queryWrapper); - if (num == 0) { - // 该值可用 - return Result.ok("该值可用!"); - } else { - // 该值不可用 - log.info("该值不可用,系统中已存在!"); - return Result.error("该值不可用,系统中已存在!"); - } - } - } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysFillRuleController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysFillRuleController.java index 7fc843f..abf7cda 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysFillRuleController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysFillRuleController.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; @@ -19,8 +21,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.util.Arrays; /** @@ -93,7 +93,7 @@ public class SysFillRuleController extends JeecgController edit(@RequestBody SysFillRule sysFillRule) { sysFillRuleService.updateById(sysFillRule); return Result.ok("编辑成功!"); @@ -184,7 +184,6 @@ public class SysFillRuleController extends JeecgController { - @Autowired - private ISysGatewayRouteService sysGatewayRouteService; + @Autowired + private ISysGatewayRouteService sysGatewayRouteService; @PostMapping(value = "/updateAll") public Result updateAll(@RequestBody JSONObject json) { @@ -37,29 +37,29 @@ public class SysGatewayRouteController extends JeecgController queryPageList(SysGatewayRoute sysGatewayRoute) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - List ls = sysGatewayRouteService.list(query); - JSONArray array = new JSONArray(); - for(SysGatewayRoute rt: ls){ - JSONObject obj = (JSONObject) JSONObject.toJSON(rt); - if(oConvertUtils.isNotEmpty(rt.getPredicates())){ - obj.put("predicates", JSONArray.parseArray(rt.getPredicates())); - } - if(oConvertUtils.isNotEmpty(rt.getFilters())){ - obj.put("filters", JSONArray.parseArray(rt.getFilters())); - } - array.add(obj); - } - return Result.ok(array); - } + @GetMapping(value = "/list") + public Result queryPageList(SysGatewayRoute sysGatewayRoute) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List ls = sysGatewayRouteService.list(query); + JSONArray array = new JSONArray(); + for (SysGatewayRoute rt : ls) { + JSONObject obj = (JSONObject) JSONObject.toJSON(rt); + if (oConvertUtils.isNotEmpty(rt.getPredicates())) { + obj.put("predicates", JSONArray.parseArray(rt.getPredicates())); + } + if (oConvertUtils.isNotEmpty(rt.getFilters())) { + obj.put("filters", JSONArray.parseArray(rt.getFilters())); + } + array.add(obj); + } + return Result.ok(array); + } - @GetMapping(value = "/clearRedis") - public Result clearRedis() { - sysGatewayRouteService.clearRedis(); - return Result.ok("清除成功!"); - } + @GetMapping(value = "/clearRedis") + public Result clearRedis() { + sysGatewayRouteService.clearRedis(); + return Result.ok("清除成功!"); + } /** * 通过id删除 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysLogController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysLogController.java index c984e98..20f0044 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysLogController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysLogController.java @@ -1,13 +1,12 @@ package org.jeecg.modules.system.controller; -import java.util.Arrays; - +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.servlet.http.HttpServletRequest; - -import org.apache.shiro.authz.annotation.RequiresPermissions; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; -import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysLog; @@ -19,11 +18,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import lombok.extern.slf4j.Slf4j; +import java.util.Arrays; /** *

@@ -37,91 +32,91 @@ import lombok.extern.slf4j.Slf4j; @RequestMapping("/sys/log") @Slf4j public class SysLogController { - - @Autowired - private ISysLogService sysLogService; + + @Autowired + private ISysLogService sysLogService; /** * 全部清除 */ - private static final String ALL_ClEAR = "allclear"; + private static final String ALL_ClEAR = "allclear"; + + /** + * @param syslog + * @param pageNo + * @param pageSize + * @param req + * @return + * @功能:查询日志记录 + */ + @RequestMapping(value = "/list", method = RequestMethod.GET) + //@RequiresPermissions("system:log:list") + public Result> queryPageList(SysLog syslog, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(syslog, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + //日志关键词 + String keyWord = req.getParameter("keyWord"); + if (oConvertUtils.isNotEmpty(keyWord)) { + queryWrapper.like("log_content", keyWord); + } + //TODO 过滤逻辑处理 + //TODO begin、end逻辑处理 + //TODO 一个强大的功能,前端传一个字段字符串,后台只返回这些字符串对应的字段 + //创建时间/创建人的赋值 + IPage pageList = sysLogService.page(page, queryWrapper); + log.info("查询当前页:" + pageList.getCurrent()); + log.info("查询当前页数量:" + pageList.getSize()); + log.info("查询结果数量:" + pageList.getRecords().size()); + log.info("数据总数:" + pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * @param id + * @return + * @功能:删除单个日志记录 + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + //@RequiresPermissions("system:log:delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysLog sysLog = sysLogService.getById(id); + if (sysLog == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = sysLogService.removeById(id); + if (ok) { + result.success("删除成功!"); + } + } + return result; + } + + /** + * @param ids + * @return + * @功能:批量,全部清空日志记录 + */ + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + //@RequiresPermissions("system:log:deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + if (ALL_ClEAR.equals(ids)) { + this.sysLogService.removeAll(); + result.success("清除成功!"); + } + this.sysLogService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + - /** - * @功能:查询日志记录 - * @param syslog - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @RequestMapping(value = "/list", method = RequestMethod.GET) - //@RequiresPermissions("system:log:list") - public Result> queryPageList(SysLog syslog,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result>(); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(syslog, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - //日志关键词 - String keyWord = req.getParameter("keyWord"); - if(oConvertUtils.isNotEmpty(keyWord)) { - queryWrapper.like("log_content",keyWord); - } - //TODO 过滤逻辑处理 - //TODO begin、end逻辑处理 - //TODO 一个强大的功能,前端传一个字段字符串,后台只返回这些字符串对应的字段 - //创建时间/创建人的赋值 - IPage pageList = sysLogService.page(page, queryWrapper); - log.info("查询当前页:"+pageList.getCurrent()); - log.info("查询当前页数量:"+pageList.getSize()); - log.info("查询结果数量:"+pageList.getRecords().size()); - log.info("数据总数:"+pageList.getTotal()); - result.setSuccess(true); - result.setResult(pageList); - return result; - } - - /** - * @功能:删除单个日志记录 - * @param id - * @return - */ - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - //@RequiresPermissions("system:log:delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysLog sysLog = sysLogService.getById(id); - if(sysLog==null) { - result.error500("未找到对应实体"); - }else { - boolean ok = sysLogService.removeById(id); - if(ok) { - result.success("删除成功!"); - } - } - return result; - } - - /** - * @功能:批量,全部清空日志记录 - * @param ids - * @return - */ - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - //@RequiresPermissions("system:log:deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - Result result = new Result(); - if(ids==null || "".equals(ids.trim())) { - result.error500("参数不识别!"); - }else { - if(ALL_ClEAR.equals(ids)) { - this.sysLogService.removeAll(); - result.success("清除成功!"); - } - this.sysLogService.removeByIds(Arrays.asList(ids.split(","))); - result.success("删除成功!"); - } - return result; - } - - } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java index b4ab257..a6844db 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysPermissionController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; @@ -27,7 +28,6 @@ import org.jeecg.modules.system.util.PermissionDataUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import jakarta.servlet.http.HttpServletRequest; import java.util.*; import java.util.stream.Collectors; @@ -44,173 +44,176 @@ import java.util.stream.Collectors; @RequestMapping("/sys/permission") public class SysPermissionController { - @Autowired - private ISysPermissionService sysPermissionService; + @Autowired + private ISysPermissionService sysPermissionService; - @Autowired - private ISysRolePermissionService sysRolePermissionService; + @Autowired + private ISysRolePermissionService sysRolePermissionService; - @Autowired - private ISysPermissionDataRuleService sysPermissionDataRuleService; + @Autowired + private ISysPermissionDataRuleService sysPermissionDataRuleService; - @Autowired - private ISysDepartPermissionService sysDepartPermissionService; + @Autowired + private ISysDepartPermissionService sysDepartPermissionService; - @Autowired - private ISysUserService sysUserService; + @Autowired + private ISysUserService sysUserService; - @Autowired - private JeecgBaseConfig jeecgBaseConfig; + @Autowired + private JeecgBaseConfig jeecgBaseConfig; - @Autowired + @Autowired private BaseCommonService baseCommonService; - @Autowired - private ISysRoleIndexService sysRoleIndexService; - - @Autowired - private ShiroRealm shiroRealm; + @Autowired + private ISysRoleIndexService sysRoleIndexService; + + @Autowired + private ShiroRealm shiroRealm; /** * 子菜单 */ - private static final String CHILDREN = "children"; + private static final String CHILDREN = "children"; - /** - * 加载数据节点 - * - * @return - */ - //@RequiresPermissions("system:permission:list") - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result> list(SysPermission sysPermission, HttpServletRequest req) { + /** + * 加载数据节点 + * + * @return + */ + //@RequiresPermissions("system:permission:list") + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> list(SysPermission sysPermission, HttpServletRequest req) { long start = System.currentTimeMillis(); - Result> result = new Result<>(); - try { - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); - query.orderByAsc(SysPermission::getSortNo); - - //支持通过菜单名字,模糊查询 - if(oConvertUtils.isNotEmpty(sysPermission.getName())){ - query.like(SysPermission::getName, sysPermission.getName()); - } - List list = sysPermissionService.list(query); - List treeList = new ArrayList<>(); + Result> result = new Result<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); - //如果有菜单名查询条件,则平铺数据 不做上下级 - if(oConvertUtils.isNotEmpty(sysPermission.getName())){ - if(list!=null && list.size()>0){ - treeList = list.stream().map(e -> { - e.setLeaf(true); - return new SysPermissionTree(e); - }).collect(Collectors.toList()); - } - }else{ - getTreeList(treeList, list, null); - } - result.setResult(treeList); - result.setSuccess(true); + //支持通过菜单名字,模糊查询 + if (oConvertUtils.isNotEmpty(sysPermission.getName())) { + query.like(SysPermission::getName, sysPermission.getName()); + } + List list = sysPermissionService.list(query); + List treeList = new ArrayList<>(); + + //如果有菜单名查询条件,则平铺数据 不做上下级 + if (oConvertUtils.isNotEmpty(sysPermission.getName())) { + if (list != null && list.size() > 0) { + treeList = list.stream().map(e -> { + e.setLeaf(true); + return new SysPermissionTree(e); + }).collect(Collectors.toList()); + } + } else { + getTreeList(treeList, list, null); + } + result.setResult(treeList); + result.setSuccess(true); log.info("======获取全部菜单数据=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - return result; - } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } - /*update_begin author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */ - /** - * 系统菜单列表(一级菜单) - * - * @return - */ - @RequestMapping(value = "/getSystemMenuList", method = RequestMethod.GET) - public Result> getSystemMenuList() { + /*update_begin author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */ + + /** + * 系统菜单列表(一级菜单) + * + * @return + */ + @RequestMapping(value = "/getSystemMenuList", method = RequestMethod.GET) + public Result> getSystemMenuList() { long start = System.currentTimeMillis(); - Result> result = new Result<>(); - try { - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysPermission::getMenuType,CommonConstant.MENU_TYPE_0); - query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); - query.orderByAsc(SysPermission::getSortNo); - List list = sysPermissionService.list(query); - List sysPermissionTreeList = new ArrayList(); - for(SysPermission sysPermission : list){ - SysPermissionTree sysPermissionTree = new SysPermissionTree(sysPermission); - sysPermissionTreeList.add(sysPermissionTree); - } - result.setResult(sysPermissionTreeList); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(), e); - } + Result> result = new Result<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getMenuType, CommonConstant.MENU_TYPE_0); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + List sysPermissionTreeList = new ArrayList(); + for (SysPermission sysPermission : list) { + SysPermissionTree sysPermissionTree = new SysPermissionTree(sysPermission); + sysPermissionTreeList.add(sysPermissionTree); + } + result.setResult(sysPermissionTreeList); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } log.info("======获取一级菜单数据=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); - return result; - } + return result; + } - /** - * 查询子菜单 - * @param parentId - * @return - */ - @RequestMapping(value = "/getSystemSubmenu", method = RequestMethod.GET) - public Result> getSystemSubmenu(@RequestParam("parentId") String parentId){ - Result> result = new Result<>(); - try{ - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysPermission::getParentId,parentId); - query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); - query.orderByAsc(SysPermission::getSortNo); - List list = sysPermissionService.list(query); - List sysPermissionTreeList = new ArrayList(); - for(SysPermission sysPermission : list){ - SysPermissionTree sysPermissionTree = new SysPermissionTree(sysPermission); - sysPermissionTreeList.add(sysPermissionTree); - } - result.setResult(sysPermissionTreeList); - result.setSuccess(true); - }catch (Exception e){ - log.error(e.getMessage(), e); - } - return result; - } - /*update_end author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */ + /** + * 查询子菜单 + * + * @param parentId + * @return + */ + @RequestMapping(value = "/getSystemSubmenu", method = RequestMethod.GET) + public Result> getSystemSubmenu(@RequestParam("parentId") String parentId) { + Result> result = new Result<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getParentId, parentId); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + List sysPermissionTreeList = new ArrayList(); + for (SysPermission sysPermission : list) { + SysPermissionTree sysPermissionTree = new SysPermissionTree(sysPermission); + sysPermissionTreeList.add(sysPermissionTree); + } + result.setResult(sysPermissionTreeList); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + /*update_end author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */ - // update_begin author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 ------------- - /** - * 查询子菜单 - * - * @param parentIds 父ID(多个采用半角逗号分割) - * @return 返回 key-value 的 Map - */ - @GetMapping("/getSystemSubmenuBatch") - public Result getSystemSubmenuBatch(@RequestParam("parentIds") String parentIds) { - try { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - List parentIdList = Arrays.asList(parentIds.split(",")); - query.in(SysPermission::getParentId, parentIdList); - query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); - query.orderByAsc(SysPermission::getSortNo); - List list = sysPermissionService.list(query); - Map> listMap = new HashMap(5); - for (SysPermission item : list) { - String pid = item.getParentId(); - if (parentIdList.contains(pid)) { - List mapList = listMap.get(pid); - if (mapList == null) { - mapList = new ArrayList<>(); - } - mapList.add(new SysPermissionTree(item)); - listMap.put(pid, mapList); - } - } - return Result.ok(listMap); - } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("批量查询子菜单失败:" + e.getMessage()); - } - } - // update_end author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 ------------- + // update_begin author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 ------------- + + /** + * 查询子菜单 + * + * @param parentIds 父ID(多个采用半角逗号分割) + * @return 返回 key-value 的 Map + */ + @GetMapping("/getSystemSubmenuBatch") + public Result getSystemSubmenuBatch(@RequestParam("parentIds") String parentIds) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List parentIdList = Arrays.asList(parentIds.split(",")); + query.in(SysPermission::getParentId, parentIdList); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + Map> listMap = new HashMap(5); + for (SysPermission item : list) { + String pid = item.getParentId(); + if (parentIdList.contains(pid)) { + List mapList = listMap.get(pid); + if (mapList == null) { + mapList = new ArrayList<>(); + } + mapList.add(new SysPermissionTree(item)); + listMap.put(pid, mapList); + } + } + return Result.ok(listMap); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("批量查询子菜单失败:" + e.getMessage()); + } + } + // update_end author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 ------------- // /** // * 查询用户拥有的菜单权限和按钮权限(根据用户账号) @@ -234,57 +237,57 @@ public class SysPermissionController { // return result; // } - /** - * 查询用户拥有的菜单权限和按钮权限 - * - * @return - */ - @RequestMapping(value = "/getUserPermissionByToken", method = RequestMethod.GET) - //@DynamicTable(value = DynamicTableConstant.SYS_ROLE_INDEX) - public Result getUserPermissionByToken(HttpServletRequest request) { - Result result = new Result(); - try { - //直接获取当前用户不适用前端token - LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - if (oConvertUtils.isEmpty(loginUser)) { - return Result.error("请登录系统!"); - } - List metaList = sysPermissionService.queryByUser(loginUser.getId()); - //添加首页路由 - //update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存 + /** + * 查询用户拥有的菜单权限和按钮权限 + * + * @return + */ + @RequestMapping(value = "/getUserPermissionByToken", method = RequestMethod.GET) + //@DynamicTable(value = DynamicTableConstant.SYS_ROLE_INDEX) + public Result getUserPermissionByToken(HttpServletRequest request) { + Result result = new Result(); + try { + //直接获取当前用户不适用前端token + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (oConvertUtils.isEmpty(loginUser)) { + return Result.error("请登录系统!"); + } + List metaList = sysPermissionService.queryByUser(loginUser.getId()); + //添加首页路由 + //update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存 - //update-begin--Author:zyf Date:20220425 for:自定义首页地址 LOWCOD-1578 - String version = request.getHeader(CommonConstant.VERSION); - SysRoleIndex defIndexCfg = sysUserService.getDynamicIndexByUserRole(loginUser.getUsername(), version); - if (defIndexCfg == null) { - defIndexCfg = sysRoleIndexService.initDefaultIndex(); - } - //update-end--Author:zyf Date:20220425 for:自定义首页地址 LOWCOD-1578 + //update-begin--Author:zyf Date:20220425 for:自定义首页地址 LOWCOD-1578 + String version = request.getHeader(CommonConstant.VERSION); + SysRoleIndex defIndexCfg = sysUserService.getDynamicIndexByUserRole(loginUser.getUsername(), version); + if (defIndexCfg == null) { + defIndexCfg = sysRoleIndexService.initDefaultIndex(); + } + //update-end--Author:zyf Date:20220425 for:自定义首页地址 LOWCOD-1578 - // 如果没有授权角色首页,则自动添加首页路由 - if (!PermissionDataUtil.hasIndexPage(metaList, defIndexCfg)) { - LambdaQueryWrapper indexQueryWrapper = new LambdaQueryWrapper<>(); - indexQueryWrapper.eq(SysPermission::getUrl, defIndexCfg.getUrl()); - SysPermission indexMenu = sysPermissionService.getOne(indexQueryWrapper); - if (indexMenu == null) { - indexMenu = new SysPermission(); - indexMenu.setUrl(defIndexCfg.getUrl()); - indexMenu.setComponent(defIndexCfg.getComponent()); - indexMenu.setRoute(defIndexCfg.isRoute()); - indexMenu.setName(DefIndexConst.DEF_INDEX_NAME); - indexMenu.setMenuType(0); - } - // 如果没有授权一级菜单,则自身变为一级菜单 - if (indexMenu.getParentId() != null && !PermissionDataUtil.hasMenuById(metaList, indexMenu.getParentId())) { - indexMenu.setMenuType(0); - indexMenu.setParentId(null); - } - if (oConvertUtils.isEmpty(indexMenu.getIcon())) { - indexMenu.setIcon("ant-design:home"); - } - metaList.add(0, indexMenu); - } - //update-end-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存 + // 如果没有授权角色首页,则自动添加首页路由 + if (!PermissionDataUtil.hasIndexPage(metaList, defIndexCfg)) { + LambdaQueryWrapper indexQueryWrapper = new LambdaQueryWrapper<>(); + indexQueryWrapper.eq(SysPermission::getUrl, defIndexCfg.getUrl()); + SysPermission indexMenu = sysPermissionService.getOne(indexQueryWrapper); + if (indexMenu == null) { + indexMenu = new SysPermission(); + indexMenu.setUrl(defIndexCfg.getUrl()); + indexMenu.setComponent(defIndexCfg.getComponent()); + indexMenu.setRoute(defIndexCfg.isRoute()); + indexMenu.setName(DefIndexConst.DEF_INDEX_NAME); + indexMenu.setMenuType(0); + } + // 如果没有授权一级菜单,则自身变为一级菜单 + if (indexMenu.getParentId() != null && !PermissionDataUtil.hasMenuById(metaList, indexMenu.getParentId())) { + indexMenu.setMenuType(0); + indexMenu.setParentId(null); + } + if (oConvertUtils.isEmpty(indexMenu.getIcon())) { + indexMenu.setIcon("ant-design:home"); + } + metaList.add(0, indexMenu); + } + //update-end-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存 /* TODO 注: 这段代码的主要作用是:把首页菜单的组件替换成角色菜单的组件,由于现在的逻辑如果角色菜单不存在则自动插入一条,所以这段代码暂时不需要 List menus = metaList.stream().filter(sysPermission -> { @@ -309,730 +312,742 @@ public class SysPermissionController { //update-end---author:liusq ---date:2022-06-29 for:设置自定义首页地址和组件----------- */ - JSONObject json = new JSONObject(); - JSONArray menujsonArray = new JSONArray(); - this.getPermissionJsonArray(menujsonArray, metaList, null); - //一级菜单下的子菜单全部是隐藏路由,则一级菜单不显示 - this.handleFirstLevelMenuHidden(menujsonArray); + JSONObject json = new JSONObject(); + JSONArray menujsonArray = new JSONArray(); + this.getPermissionJsonArray(menujsonArray, metaList, null); + //一级菜单下的子菜单全部是隐藏路由,则一级菜单不显示 + this.handleFirstLevelMenuHidden(menujsonArray); - JSONArray authjsonArray = new JSONArray(); - this.getAuthJsonArray(authjsonArray, metaList); - //查询所有的权限 - LambdaQueryWrapper query = new LambdaQueryWrapper().select( SysPermission::getName, SysPermission::getPermsType, SysPermission::getPerms, SysPermission::getStatus); - query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); - query.eq(SysPermission::getMenuType, CommonConstant.MENU_TYPE_2); - //query.eq(SysPermission::getStatus, "1"); - List allAuthList = sysPermissionService.list(query); - JSONArray allauthjsonArray = new JSONArray(); - this.getAllAuthJsonArray(allauthjsonArray, allAuthList); - //路由菜单 - json.put("menu", menujsonArray); - //按钮权限(用户拥有的权限集合) - json.put("auth", authjsonArray); - // 按钮权限(用户拥有的权限集合) - List codeList = metaList.stream() - .filter((permission) -> CommonConstant.MENU_TYPE_2.equals(permission.getMenuType()) && CommonConstant.STATUS_1.equals(permission.getStatus())) - .collect(ArrayList::new, (list, permission) -> list.add(permission.getPerms()), ArrayList::addAll); - // 所拥有的权限编码(vue3专用) - json.put("codeList", codeList); - //全部权限配置集合(按钮权限,访问权限) - json.put("allAuth", allauthjsonArray); - //数据源安全模式 - json.put("sysSafeMode", jeecgBaseConfig.getFirewall()!=null? jeecgBaseConfig.getFirewall().getDataSourceSafe(): false); - result.setResult(json); - } catch (Exception e) { - result.error500("查询失败:" + e.getMessage()); - log.error(e.getMessage(), e); - } - return result; - } + JSONArray authjsonArray = new JSONArray(); + this.getAuthJsonArray(authjsonArray, metaList); + //查询所有的权限 + LambdaQueryWrapper query = new LambdaQueryWrapper().select(SysPermission::getName, SysPermission::getPermsType, SysPermission::getPerms, SysPermission::getStatus); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.eq(SysPermission::getMenuType, CommonConstant.MENU_TYPE_2); + //query.eq(SysPermission::getStatus, "1"); + List allAuthList = sysPermissionService.list(query); + JSONArray allauthjsonArray = new JSONArray(); + this.getAllAuthJsonArray(allauthjsonArray, allAuthList); + //路由菜单 + json.put("menu", menujsonArray); + //按钮权限(用户拥有的权限集合) + json.put("auth", authjsonArray); + // 按钮权限(用户拥有的权限集合) + List codeList = metaList.stream() + .filter((permission) -> CommonConstant.MENU_TYPE_2.equals(permission.getMenuType()) && CommonConstant.STATUS_1.equals(permission.getStatus())) + .collect(ArrayList::new, (list, permission) -> list.add(permission.getPerms()), ArrayList::addAll); + // 所拥有的权限编码(vue3专用) + json.put("codeList", codeList); + //全部权限配置集合(按钮权限,访问权限) + json.put("allAuth", allauthjsonArray); + //数据源安全模式 + json.put("sysSafeMode", jeecgBaseConfig.getFirewall() != null ? jeecgBaseConfig.getFirewall().getDataSourceSafe() : false); + result.setResult(json); + } catch (Exception e) { + result.error500("查询失败:" + e.getMessage()); + log.error(e.getMessage(), e); + } + return result; + } - /** - * 【vue3专用】获取 - * 1、查询用户拥有的按钮/表单访问权限 - * 2、所有权限 (菜单权限配置) - * 3、系统安全模式 (开启则online报表的数据源必填) - */ - @RequestMapping(value = "/getPermCode", method = RequestMethod.GET) - public Result getPermCode() { - try { - // 直接获取当前用户 - LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - if (oConvertUtils.isEmpty(loginUser)) { - return Result.error("请登录系统!"); - } - // 获取当前用户的权限集合 - List metaList = sysPermissionService.queryByUser(loginUser.getId()); + /** + * 【vue3专用】获取 + * 1、查询用户拥有的按钮/表单访问权限 + * 2、所有权限 (菜单权限配置) + * 3、系统安全模式 (开启则online报表的数据源必填) + */ + @RequestMapping(value = "/getPermCode", method = RequestMethod.GET) + public Result getPermCode() { + try { + // 直接获取当前用户 + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (oConvertUtils.isEmpty(loginUser)) { + return Result.error("请登录系统!"); + } + // 获取当前用户的权限集合 + List metaList = sysPermissionService.queryByUser(loginUser.getId()); // 按钮权限(用户拥有的权限集合) List codeList = metaList.stream() .filter((permission) -> CommonConstant.MENU_TYPE_2.equals(permission.getMenuType()) && CommonConstant.STATUS_1.equals(permission.getStatus())) .collect(ArrayList::new, (list, permission) -> list.add(permission.getPerms()), ArrayList::addAll); // - JSONArray authArray = new JSONArray(); - this.getAuthJsonArray(authArray, metaList); - // 查询所有的权限 - LambdaQueryWrapper query = new LambdaQueryWrapper().select( SysPermission::getName, SysPermission::getPermsType, SysPermission::getPerms, SysPermission::getStatus); - query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); - query.eq(SysPermission::getMenuType, CommonConstant.MENU_TYPE_2); - List allAuthList = sysPermissionService.list(query); - JSONArray allAuthArray = new JSONArray(); - this.getAllAuthJsonArray(allAuthArray, allAuthList); - JSONObject result = new JSONObject(); + JSONArray authArray = new JSONArray(); + this.getAuthJsonArray(authArray, metaList); + // 查询所有的权限 + LambdaQueryWrapper query = new LambdaQueryWrapper().select(SysPermission::getName, SysPermission::getPermsType, SysPermission::getPerms, SysPermission::getStatus); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.eq(SysPermission::getMenuType, CommonConstant.MENU_TYPE_2); + List allAuthList = sysPermissionService.list(query); + JSONArray allAuthArray = new JSONArray(); + this.getAllAuthJsonArray(allAuthArray, allAuthList); + JSONObject result = new JSONObject(); // 所拥有的权限编码 - result.put("codeList", codeList); - //按钮权限(用户拥有的权限集合) - result.put("auth", authArray); - //全部权限配置集合(按钮权限,访问权限) - result.put("allAuth", allAuthArray); + result.put("codeList", codeList); + //按钮权限(用户拥有的权限集合) + result.put("auth", authArray); + //全部权限配置集合(按钮权限,访问权限) + result.put("allAuth", allAuthArray); //数据源安全模式 - result.put("sysSafeMode", jeecgBaseConfig.getFirewall()!=null? jeecgBaseConfig.getFirewall().getDataSourceSafe(): null); + result.put("sysSafeMode", jeecgBaseConfig.getFirewall() != null ? jeecgBaseConfig.getFirewall().getDataSourceSafe() : null); return Result.OK(result); - } catch (Exception e) { - log.error(e.getMessage(), e); + } catch (Exception e) { + log.error(e.getMessage(), e); return Result.error("查询失败:" + e.getMessage()); - } - } + } + } - /** - * 添加菜单 - * @param permission - * @return - */ + /** + * 添加菜单 + * + * @param permission + * @return + */ @RequiresPermissions("system:permission:add") - @RequestMapping(value = "/add", method = RequestMethod.POST) - public Result add(@RequestBody SysPermission permission) { - Result result = new Result(); - try { - permission = PermissionDataUtil.intelligentProcessData(permission); - sysPermissionService.addPermission(permission); - result.success("添加成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody SysPermission permission) { + Result result = new Result(); + try { + permission = PermissionDataUtil.intelligentProcessData(permission); + sysPermissionService.addPermission(permission); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } - /** - * 编辑菜单 - * @param permission - * @return - */ + /** + * 编辑菜单 + * + * @param permission + * @return + */ @RequiresPermissions("system:permission:edit") - @RequestMapping(value = "/edit", method = { RequestMethod.PUT, RequestMethod.POST }) - public Result edit(@RequestBody SysPermission permission) { - Result result = new Result<>(); - try { - permission = PermissionDataUtil.intelligentProcessData(permission); - sysPermissionService.editPermission(permission); - result.success("修改成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody SysPermission permission) { + Result result = new Result<>(); + try { + permission = PermissionDataUtil.intelligentProcessData(permission); + sysPermissionService.editPermission(permission); + result.success("修改成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } - /** - * 检测菜单路径是否存在 - * @param id - * @param url - * @return - */ - @RequestMapping(value = "/checkPermDuplication", method = RequestMethod.GET) - public Result checkPermDuplication(@RequestParam(name = "id", required = false) String id,@RequestParam(name = "url") String url,@RequestParam(name = "alwaysShow") Boolean alwaysShow) { - Result result = new Result<>(); - try { - boolean check=sysPermissionService.checkPermDuplication(id,url,alwaysShow); - if(check){ - return Result.ok("该值可用!"); - } - return Result.error("访问路径不允许重复,请重定义!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } + /** + * 检测菜单路径是否存在 + * + * @param id + * @param url + * @return + */ + @RequestMapping(value = "/checkPermDuplication", method = RequestMethod.GET) + public Result checkPermDuplication(@RequestParam(name = "id", required = false) String id, @RequestParam(name = "url") String url, @RequestParam(name = "alwaysShow") Boolean alwaysShow) { + Result result = new Result<>(); + try { + boolean check = sysPermissionService.checkPermDuplication(id, url, alwaysShow); + if (check) { + return Result.ok("该值可用!"); + } + return Result.error("访问路径不允许重复,请重定义!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } - /** - * 删除菜单 - * @param id - * @return - */ + /** + * 删除菜单 + * + * @param id + * @return + */ @RequiresPermissions("system:permission:delete") - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name = "id", required = true) String id) { - Result result = new Result<>(); - try { - sysPermissionService.deletePermission(id); - result.success("删除成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500(e.getMessage()); - } - return result; - } + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name = "id", required = true) String id) { + Result result = new Result<>(); + try { + sysPermissionService.deletePermission(id); + result.success("删除成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500(e.getMessage()); + } + return result; + } - /** - * 批量删除菜单 - * @param ids - * @return - */ + /** + * 批量删除菜单 + * + * @param ids + * @return + */ @RequiresPermissions("system:permission:deleteBatch") - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { - Result result = new Result<>(); - try { + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result<>(); + try { String[] arr = ids.split(","); - for (String id : arr) { - if (oConvertUtils.isNotEmpty(id)) { - try { - sysPermissionService.deletePermission(id); - } catch (JeecgBootException e) { - if(e.getMessage()!=null && e.getMessage().contains("未找到菜单信息")){ - log.warn(e.getMessage()); - }else{ - throw e; - } - } - } - } - result.success("删除成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("删除失败!"); - } - return result; - } + for (String id : arr) { + if (oConvertUtils.isNotEmpty(id)) { + try { + sysPermissionService.deletePermission(id); + } catch (JeecgBootException e) { + if (e.getMessage() != null && e.getMessage().contains("未找到菜单信息")) { + log.warn(e.getMessage()); + } else { + throw e; + } + } + } + } + result.success("删除成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("删除失败!"); + } + return result; + } - /** - * 获取全部的权限树 - * - * @return - */ - @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) - public Result> queryTreeList() { - Result> result = new Result<>(); - // 全部权限ids - List ids = new ArrayList<>(); - try { - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); - query.orderByAsc(SysPermission::getSortNo); - List list = sysPermissionService.list(query); - for (SysPermission sysPer : list) { - ids.add(sysPer.getId()); - } - List treeList = new ArrayList<>(); - getTreeModelList(treeList, list, null); + /** + * 获取全部的权限树 + * + * @return + */ + @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) + public Result> queryTreeList() { + Result> result = new Result<>(); + // 全部权限ids + List ids = new ArrayList<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + for (SysPermission sysPer : list) { + ids.add(sysPer.getId()); + } + List treeList = new ArrayList<>(); + getTreeModelList(treeList, list, null); - Map resMap = new HashMap(5); + Map resMap = new HashMap(5); // 全部树节点数据 - resMap.put("treeList", treeList); + resMap.put("treeList", treeList); // 全部树ids - resMap.put("ids", ids); - result.setResult(resMap); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - return result; - } + resMap.put("ids", ids); + result.setResult(resMap); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } - /** - * 异步加载数据节点 [接口是废的,没有用到] - * - * @return - */ - @RequestMapping(value = "/queryListAsync", method = RequestMethod.GET) - public Result> queryAsync(@RequestParam(name = "pid", required = false) String parentId) { - Result> result = new Result<>(); - try { - List list = sysPermissionService.queryListByParentId(parentId); - if (list == null || list.size() <= 0) { - result.error500("未找到角色信息"); - } else { - result.setResult(list); - result.setSuccess(true); - } - } catch (Exception e) { - log.error(e.getMessage(), e); - } + /** + * 异步加载数据节点 [接口是废的,没有用到] + * + * @return + */ + @RequestMapping(value = "/queryListAsync", method = RequestMethod.GET) + public Result> queryAsync(@RequestParam(name = "pid", required = false) String parentId) { + Result> result = new Result<>(); + try { + List list = sysPermissionService.queryListByParentId(parentId); + if (list == null || list.size() <= 0) { + result.error500("未找到角色信息"); + } else { + result.setResult(list); + result.setSuccess(true); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } - return result; - } + return result; + } - /** - * 查询角色授权 - * - * @return - */ - @RequestMapping(value = "/queryRolePermission", method = RequestMethod.GET) - public Result> queryRolePermission(@RequestParam(name = "roleId", required = true) String roleId) { - Result> result = new Result<>(); - try { - List list = sysRolePermissionService.list(new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId)); - result.setResult(list.stream().map(sysRolePermission -> String.valueOf(sysRolePermission.getPermissionId())).collect(Collectors.toList())); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - return result; - } + /** + * 查询角色授权 + * + * @return + */ + @RequestMapping(value = "/queryRolePermission", method = RequestMethod.GET) + public Result> queryRolePermission(@RequestParam(name = "roleId", required = true) String roleId) { + Result> result = new Result<>(); + try { + List list = sysRolePermissionService.list(new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId)); + result.setResult(list.stream().map(sysRolePermission -> String.valueOf(sysRolePermission.getPermissionId())).collect(Collectors.toList())); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } - /** - * 保存角色授权 - * - * @return - */ - @RequestMapping(value = "/saveRolePermission", method = RequestMethod.POST) + /** + * 保存角色授权 + * + * @return + */ + @RequestMapping(value = "/saveRolePermission", method = RequestMethod.POST) @RequiresPermissions("system:permission:saveRole") - public Result saveRolePermission(@RequestBody JSONObject json) { - long start = System.currentTimeMillis(); - Result result = new Result<>(); - try { - String roleId = json.getString("roleId"); - String permissionIds = json.getString("permissionIds"); - String lastPermissionIds = json.getString("lastpermissionIds"); - this.sysRolePermissionService.saveRolePermission(roleId, permissionIds, lastPermissionIds); - //update-begin---author:wangshuai ---date:20220316 for:[VUEN-234]用户管理角色授权添加敏感日志------------ + public Result saveRolePermission(@RequestBody JSONObject json) { + long start = System.currentTimeMillis(); + Result result = new Result<>(); + try { + String roleId = json.getString("roleId"); + String permissionIds = json.getString("permissionIds"); + String lastPermissionIds = json.getString("lastpermissionIds"); + this.sysRolePermissionService.saveRolePermission(roleId, permissionIds, lastPermissionIds); + //update-begin---author:wangshuai ---date:20220316 for:[VUEN-234]用户管理角色授权添加敏感日志------------ LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - baseCommonService.addLog("修改角色ID: "+roleId+" 的权限配置,操作人: " +loginUser.getUsername() ,CommonConstant.LOG_TYPE_2, 2); + baseCommonService.addLog("修改角色ID: " + roleId + " 的权限配置,操作人: " + loginUser.getUsername(), CommonConstant.LOG_TYPE_2, 2); //update-end---author:wangshuai ---date:20220316 for:[VUEN-234]用户管理角色授权添加敏感日志------------ - result.success("保存成功!"); - log.info("======角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + result.success("保存成功!"); + log.info("======角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); - //update-begin---author:scott ---date:2024-06-18 for:【TV360X-1320】分配权限必须退出重新登录才生效,造成很多用户困扰--- - // 获取当前用户的Subject对象 - Subject currentUser = SecurityUtils.getSubject(); - // 清除当前用户的授权缓存信息 - if (currentUser.isAuthenticated()) { - shiroRealm.clearCache(currentUser.getPrincipals()); - } - //update-end---author:scott ---date::2024-06-18 for:【TV360X-1320】分配权限必须退出重新登录才生效,造成很多用户困扰--- + //update-begin---author:scott ---date:2024-06-18 for:【TV360X-1320】分配权限必须退出重新登录才生效,造成很多用户困扰--- + // 获取当前用户的Subject对象 + Subject currentUser = SecurityUtils.getSubject(); + // 清除当前用户的授权缓存信息 + if (currentUser.isAuthenticated()) { + shiroRealm.clearCache(currentUser.getPrincipals()); + } + //update-end---author:scott ---date::2024-06-18 for:【TV360X-1320】分配权限必须退出重新登录才生效,造成很多用户困扰--- - } catch (Exception e) { - result.error500("授权失败!"); - log.error(e.getMessage(), e); - } - return result; - } + } catch (Exception e) { + result.error500("授权失败!"); + log.error(e.getMessage(), e); + } + return result; + } - private void getTreeList(List treeList, List metaList, SysPermissionTree temp) { - for (SysPermission permission : metaList) { - String tempPid = permission.getParentId(); - SysPermissionTree tree = new SysPermissionTree(permission); - if (temp == null && oConvertUtils.isEmpty(tempPid)) { - treeList.add(tree); - if (!tree.getIsLeaf()) { - getTreeList(treeList, metaList, tree); - } - } else if (temp != null && tempPid != null && tempPid.equals(temp.getId())) { - temp.getChildren().add(tree); - if (!tree.getIsLeaf()) { - getTreeList(treeList, metaList, tree); - } - } + private void getTreeList(List treeList, List metaList, SysPermissionTree temp) { + for (SysPermission permission : metaList) { + String tempPid = permission.getParentId(); + SysPermissionTree tree = new SysPermissionTree(permission); + if (temp == null && oConvertUtils.isEmpty(tempPid)) { + treeList.add(tree); + if (!tree.getIsLeaf()) { + getTreeList(treeList, metaList, tree); + } + } else if (temp != null && tempPid != null && tempPid.equals(temp.getId())) { + temp.getChildren().add(tree); + if (!tree.getIsLeaf()) { + getTreeList(treeList, metaList, tree); + } + } - } - } + } + } - private void getTreeModelList(List treeList, List metaList, TreeModel temp) { - for (SysPermission permission : metaList) { - String tempPid = permission.getParentId(); - TreeModel tree = new TreeModel(permission); - if (temp == null && oConvertUtils.isEmpty(tempPid)) { - treeList.add(tree); - if (!tree.getIsLeaf()) { - getTreeModelList(treeList, metaList, tree); - } - } else if (temp != null && tempPid != null && tempPid.equals(temp.getKey())) { - temp.getChildren().add(tree); - if (!tree.getIsLeaf()) { - getTreeModelList(treeList, metaList, tree); - } - } + private void getTreeModelList(List treeList, List metaList, TreeModel temp) { + for (SysPermission permission : metaList) { + String tempPid = permission.getParentId(); + TreeModel tree = new TreeModel(permission); + if (temp == null && oConvertUtils.isEmpty(tempPid)) { + treeList.add(tree); + if (!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + } else if (temp != null && tempPid != null && tempPid.equals(temp.getKey())) { + temp.getChildren().add(tree); + if (!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + } - } - } + } + } - /** - * 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示 - * @param jsonArray - */ - private void handleFirstLevelMenuHidden(JSONArray jsonArray) { - jsonArray = jsonArray.stream().map(obj -> { - JSONObject returnObj = new JSONObject(); - JSONObject jsonObj = (JSONObject)obj; - if(jsonObj.containsKey(CHILDREN)){ - JSONArray childrens = jsonObj.getJSONArray(CHILDREN); + /** + * 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示 + * + * @param jsonArray + */ + private void handleFirstLevelMenuHidden(JSONArray jsonArray) { + jsonArray = jsonArray.stream().map(obj -> { + JSONObject returnObj = new JSONObject(); + JSONObject jsonObj = (JSONObject) obj; + if (jsonObj.containsKey(CHILDREN)) { + JSONArray childrens = jsonObj.getJSONArray(CHILDREN); childrens = childrens.stream().filter(arrObj -> !"true".equals(((JSONObject) arrObj).getString("hidden"))).collect(Collectors.toCollection(JSONArray::new)); - if(childrens==null || childrens.size()==0){ - jsonObj.put("hidden",true); + if (childrens == null || childrens.size() == 0) { + jsonObj.put("hidden", true); //vue3版本兼容代码 JSONObject meta = new JSONObject(); - meta.put("hideMenu",true); + meta.put("hideMenu", true); jsonObj.put("meta", meta); } - } - return returnObj; - }).collect(Collectors.toCollection(JSONArray::new)); - } + } + return returnObj; + }).collect(Collectors.toCollection(JSONArray::new)); + } - /** - * 获取权限JSON数组 - * @param jsonArray - * @param allList - */ - private void getAllAuthJsonArray(JSONArray jsonArray,List allList) { - JSONObject json = null; - for (SysPermission permission : allList) { - json = new JSONObject(); - json.put("action", permission.getPerms()); - json.put("status", permission.getStatus()); - //1显示2禁用 - json.put("type", permission.getPermsType()); - json.put("describe", permission.getName()); - jsonArray.add(json); - } - } + /** + * 获取权限JSON数组 + * + * @param jsonArray + * @param allList + */ + private void getAllAuthJsonArray(JSONArray jsonArray, List allList) { + JSONObject json = null; + for (SysPermission permission : allList) { + json = new JSONObject(); + json.put("action", permission.getPerms()); + json.put("status", permission.getStatus()); + //1显示2禁用 + json.put("type", permission.getPermsType()); + json.put("describe", permission.getName()); + jsonArray.add(json); + } + } - /** - * 获取权限JSON数组 - * @param jsonArray - * @param metaList - */ - private void getAuthJsonArray(JSONArray jsonArray,List metaList) { - for (SysPermission permission : metaList) { - if(permission.getMenuType()==null) { - continue; - } - JSONObject json = null; - if(permission.getMenuType().equals(CommonConstant.MENU_TYPE_2) &&CommonConstant.STATUS_1.equals(permission.getStatus())) { - json = new JSONObject(); - json.put("action", permission.getPerms()); - json.put("type", permission.getPermsType()); - json.put("describe", permission.getName()); - jsonArray.add(json); - } - } - } - /** - * 获取菜单JSON数组 - * @param jsonArray - * @param metaList - * @param parentJson - */ - private void getPermissionJsonArray(JSONArray jsonArray, List metaList, JSONObject parentJson) { - for (SysPermission permission : metaList) { - if (permission.getMenuType() == null) { - continue; - } - String tempPid = permission.getParentId(); - JSONObject json = getPermissionJsonObject(permission); - if(json==null) { - continue; - } - if (parentJson == null && oConvertUtils.isEmpty(tempPid)) { - jsonArray.add(json); - if (!permission.isLeaf()) { - getPermissionJsonArray(jsonArray, metaList, json); - } - } else if (parentJson != null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))) { - // 类型( 0:一级菜单 1:子菜单 2:按钮 ) - if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) { - JSONObject metaJson = parentJson.getJSONObject("meta"); - if (metaJson.containsKey("permissionList")) { - metaJson.getJSONArray("permissionList").add(json); - } else { - JSONArray permissionList = new JSONArray(); - permissionList.add(json); - metaJson.put("permissionList", permissionList); - } - // 类型( 0:一级菜单 1:子菜单 2:按钮 ) - } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_1) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_0)) { - if (parentJson.containsKey("children")) { - parentJson.getJSONArray("children").add(json); - } else { - JSONArray children = new JSONArray(); - children.add(json); - parentJson.put("children", children); - } + /** + * 获取权限JSON数组 + * + * @param jsonArray + * @param metaList + */ + private void getAuthJsonArray(JSONArray jsonArray, List metaList) { + for (SysPermission permission : metaList) { + if (permission.getMenuType() == null) { + continue; + } + JSONObject json = null; + if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2) && CommonConstant.STATUS_1.equals(permission.getStatus())) { + json = new JSONObject(); + json.put("action", permission.getPerms()); + json.put("type", permission.getPermsType()); + json.put("describe", permission.getName()); + jsonArray.add(json); + } + } + } - if (!permission.isLeaf()) { - getPermissionJsonArray(jsonArray, metaList, json); - } - } - } + /** + * 获取菜单JSON数组 + * + * @param jsonArray + * @param metaList + * @param parentJson + */ + private void getPermissionJsonArray(JSONArray jsonArray, List metaList, JSONObject parentJson) { + for (SysPermission permission : metaList) { + if (permission.getMenuType() == null) { + continue; + } + String tempPid = permission.getParentId(); + JSONObject json = getPermissionJsonObject(permission); + if (json == null) { + continue; + } + if (parentJson == null && oConvertUtils.isEmpty(tempPid)) { + jsonArray.add(json); + if (!permission.isLeaf()) { + getPermissionJsonArray(jsonArray, metaList, json); + } + } else if (parentJson != null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))) { + // 类型( 0:一级菜单 1:子菜单 2:按钮 ) + if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) { + JSONObject metaJson = parentJson.getJSONObject("meta"); + if (metaJson.containsKey("permissionList")) { + metaJson.getJSONArray("permissionList").add(json); + } else { + JSONArray permissionList = new JSONArray(); + permissionList.add(json); + metaJson.put("permissionList", permissionList); + } + // 类型( 0:一级菜单 1:子菜单 2:按钮 ) + } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_1) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_0)) { + if (parentJson.containsKey("children")) { + parentJson.getJSONArray("children").add(json); + } else { + JSONArray children = new JSONArray(); + children.add(json); + parentJson.put("children", children); + } - } - } + if (!permission.isLeaf()) { + getPermissionJsonArray(jsonArray, metaList, json); + } + } + } - /** - * 根据菜单配置生成路由json - * @param permission - * @return - */ - private JSONObject getPermissionJsonObject(SysPermission permission) { - JSONObject json = new JSONObject(); - // 类型(0:一级菜单 1:子菜单 2:按钮) - if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) { - //json.put("action", permission.getPerms()); - //json.put("type", permission.getPermsType()); - //json.put("describe", permission.getName()); - return null; - } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_0) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_1)) { - json.put("id", permission.getId()); - if (permission.isRoute()) { + } + } + + /** + * 根据菜单配置生成路由json + * + * @param permission + * @return + */ + private JSONObject getPermissionJsonObject(SysPermission permission) { + JSONObject json = new JSONObject(); + // 类型(0:一级菜单 1:子菜单 2:按钮) + if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) { + //json.put("action", permission.getPerms()); + //json.put("type", permission.getPermsType()); + //json.put("describe", permission.getName()); + return null; + } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_0) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_1)) { + json.put("id", permission.getId()); + if (permission.isRoute()) { //表示生成路由 - json.put("route", "1"); - } else { + json.put("route", "1"); + } else { //表示不生成路由 - json.put("route", "0"); - } + json.put("route", "0"); + } - if (isWwwHttpUrl(permission.getUrl())) { - json.put("path", Md5Util.md5Encode(permission.getUrl(), "utf-8")); - } else { - json.put("path", permission.getUrl()); - } + if (isWwwHttpUrl(permission.getUrl())) { + json.put("path", Md5Util.md5Encode(permission.getUrl(), "utf-8")); + } else { + json.put("path", permission.getUrl()); + } - // 重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用) - if (oConvertUtils.isNotEmpty(permission.getComponentName())) { - json.put("name", permission.getComponentName()); - } else { - json.put("name", urlToRouteName(permission.getUrl())); - } + // 重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用) + if (oConvertUtils.isNotEmpty(permission.getComponentName())) { + json.put("name", permission.getComponentName()); + } else { + json.put("name", urlToRouteName(permission.getUrl())); + } - JSONObject meta = new JSONObject(); - // 是否隐藏路由,默认都是显示的 - if (permission.isHidden()) { - json.put("hidden", true); + JSONObject meta = new JSONObject(); + // 是否隐藏路由,默认都是显示的 + if (permission.isHidden()) { + json.put("hidden", true); //vue3版本兼容代码 - meta.put("hideMenu",true); - } - // 聚合路由 - if (permission.isAlwaysShow()) { - json.put("alwaysShow", true); - } - json.put("component", permission.getComponent()); - // 由用户设置是否缓存页面 用布尔值 - if (permission.isKeepAlive()) { - meta.put("keepAlive", true); - } else { - meta.put("keepAlive", false); - } + meta.put("hideMenu", true); + } + // 聚合路由 + if (permission.isAlwaysShow()) { + json.put("alwaysShow", true); + } + json.put("component", permission.getComponent()); + // 由用户设置是否缓存页面 用布尔值 + if (permission.isKeepAlive()) { + meta.put("keepAlive", true); + } else { + meta.put("keepAlive", false); + } - /*update_begin author:wuxianquan date:20190908 for:往菜单信息里添加外链菜单打开方式 */ - //外链菜单打开方式 - if (permission.isInternalOrExternal()) { - meta.put("internalOrExternal", true); - } else { - meta.put("internalOrExternal", false); - } - /* update_end author:wuxianquan date:20190908 for: 往菜单信息里添加外链菜单打开方式*/ + /*update_begin author:wuxianquan date:20190908 for:往菜单信息里添加外链菜单打开方式 */ + //外链菜单打开方式 + if (permission.isInternalOrExternal()) { + meta.put("internalOrExternal", true); + } else { + meta.put("internalOrExternal", false); + } + /* update_end author:wuxianquan date:20190908 for: 往菜单信息里添加外链菜单打开方式*/ - meta.put("title", permission.getName()); + meta.put("title", permission.getName()); - //update-begin--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842 - String component = permission.getComponent(); - if(oConvertUtils.isNotEmpty(permission.getComponentName()) || oConvertUtils.isNotEmpty(component)){ - meta.put("componentName", oConvertUtils.getString(permission.getComponentName(),component.substring(component.lastIndexOf("/")+1))); - } - //update-end--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842 + //update-begin--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842 + String component = permission.getComponent(); + if (oConvertUtils.isNotEmpty(permission.getComponentName()) || oConvertUtils.isNotEmpty(component)) { + meta.put("componentName", oConvertUtils.getString(permission.getComponentName(), component.substring(component.lastIndexOf("/") + 1))); + } + //update-end--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842 - if (oConvertUtils.isEmpty(permission.getParentId())) { - // 一级菜单跳转地址 - json.put("redirect", permission.getRedirect()); - if (oConvertUtils.isNotEmpty(permission.getIcon())) { - meta.put("icon", permission.getIcon()); - } - } else { - if (oConvertUtils.isNotEmpty(permission.getIcon())) { - meta.put("icon", permission.getIcon()); - } - } - if (isWwwHttpUrl(permission.getUrl())) { - meta.put("url", permission.getUrl()); - } - // update-begin--Author:sunjianlei Date:20210918 for:新增适配vue3项目的隐藏tab功能 - if (permission.isHideTab()) { - meta.put("hideTab", true); - } - // update-end--Author:sunjianlei Date:20210918 for:新增适配vue3项目的隐藏tab功能 - json.put("meta", meta); - } + if (oConvertUtils.isEmpty(permission.getParentId())) { + // 一级菜单跳转地址 + json.put("redirect", permission.getRedirect()); + if (oConvertUtils.isNotEmpty(permission.getIcon())) { + meta.put("icon", permission.getIcon()); + } + } else { + if (oConvertUtils.isNotEmpty(permission.getIcon())) { + meta.put("icon", permission.getIcon()); + } + } + if (isWwwHttpUrl(permission.getUrl())) { + meta.put("url", permission.getUrl()); + } + // update-begin--Author:sunjianlei Date:20210918 for:新增适配vue3项目的隐藏tab功能 + if (permission.isHideTab()) { + meta.put("hideTab", true); + } + // update-end--Author:sunjianlei Date:20210918 for:新增适配vue3项目的隐藏tab功能 + json.put("meta", meta); + } - return json; - } + return json; + } - /** - * 判断是否外网URL 例如: http://localhost:8080/jeecg-boot/swagger-ui.html#/ 支持特殊格式: {{ - * window._CONFIG['domianURL'] }}/druid/ {{ JS代码片段 }},前台解析会自动执行JS代码片段 - * - * @return - */ - private boolean isWwwHttpUrl(String url) { + /** + * 判断是否外网URL 例如: http://localhost:8080/jeecg-boot/swagger-ui.html#/ 支持特殊格式: {{ + * window._CONFIG['domianURL'] }}/druid/ {{ JS代码片段 }},前台解析会自动执行JS代码片段 + * + * @return + */ + private boolean isWwwHttpUrl(String url) { boolean flag = url != null && (url.startsWith(CommonConstant.HTTP_PROTOCOL) || url.startsWith(CommonConstant.HTTPS_PROTOCOL) || url.startsWith(SymbolConstant.DOUBLE_LEFT_CURLY_BRACKET)); if (flag) { - return true; - } - return false; - } + return true; + } + return false; + } - /** - * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) 举例: URL = /isystem/role RouteName = - * isystem-role - * - * @return - */ - private String urlToRouteName(String url) { - if (oConvertUtils.isNotEmpty(url)) { - if (url.startsWith(SymbolConstant.SINGLE_SLASH)) { - url = url.substring(1); - } - url = url.replace("/", "-"); + /** + * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) 举例: URL = /isystem/role RouteName = + * isystem-role + * + * @return + */ + private String urlToRouteName(String url) { + if (oConvertUtils.isNotEmpty(url)) { + if (url.startsWith(SymbolConstant.SINGLE_SLASH)) { + url = url.substring(1); + } + url = url.replace("/", "-"); - // 特殊标记 - url = url.replace(":", "@"); - return url; - } else { - return null; - } - } + // 特殊标记 + url = url.replace(":", "@"); + return url; + } else { + return null; + } + } - /** - * 根据菜单id来获取其对应的权限数据 - * - * @param sysPermissionDataRule - * @return - */ - @RequestMapping(value = "/getPermRuleListByPermId", method = RequestMethod.GET) - public Result> getPermRuleListByPermId(SysPermissionDataRule sysPermissionDataRule) { - List permRuleList = sysPermissionDataRuleService.getPermRuleListByPermId(sysPermissionDataRule.getPermissionId()); - Result> result = new Result<>(); - result.setSuccess(true); - result.setResult(permRuleList); - return result; - } + /** + * 根据菜单id来获取其对应的权限数据 + * + * @param sysPermissionDataRule + * @return + */ + @RequestMapping(value = "/getPermRuleListByPermId", method = RequestMethod.GET) + public Result> getPermRuleListByPermId(SysPermissionDataRule sysPermissionDataRule) { + List permRuleList = sysPermissionDataRuleService.getPermRuleListByPermId(sysPermissionDataRule.getPermissionId()); + Result> result = new Result<>(); + result.setSuccess(true); + result.setResult(permRuleList); + return result; + } - /** - * 添加菜单权限数据 - * - * @param sysPermissionDataRule - * @return - */ + /** + * 添加菜单权限数据 + * + * @param sysPermissionDataRule + * @return + */ @RequiresPermissions("system:permission:addRule") - @RequestMapping(value = "/addPermissionRule", method = RequestMethod.POST) - public Result addPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { - Result result = new Result(); - try { - sysPermissionDataRule.setCreateTime(new Date()); - sysPermissionDataRuleService.savePermissionDataRule(sysPermissionDataRule); - result.success("添加成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } + @RequestMapping(value = "/addPermissionRule", method = RequestMethod.POST) + public Result addPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { + Result result = new Result(); + try { + sysPermissionDataRule.setCreateTime(new Date()); + sysPermissionDataRuleService.savePermissionDataRule(sysPermissionDataRule); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } @RequiresPermissions("system:permission:editRule") - @RequestMapping(value = "/editPermissionRule", method = { RequestMethod.PUT, RequestMethod.POST }) - public Result editPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { - Result result = new Result(); - try { - sysPermissionDataRuleService.saveOrUpdate(sysPermissionDataRule); - result.success("更新成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } + @RequestMapping(value = "/editPermissionRule", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result editPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { + Result result = new Result(); + try { + sysPermissionDataRuleService.saveOrUpdate(sysPermissionDataRule); + result.success("更新成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } - /** - * 删除菜单权限数据 - * - * @param id - * @return - */ + /** + * 删除菜单权限数据 + * + * @param id + * @return + */ @RequiresPermissions("system:permission:deleteRule") - @RequestMapping(value = "/deletePermissionRule", method = RequestMethod.DELETE) - public Result deletePermissionRule(@RequestParam(name = "id", required = true) String id) { - Result result = new Result(); - try { - sysPermissionDataRuleService.deletePermissionDataRule(id); - result.success("删除成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } + @RequestMapping(value = "/deletePermissionRule", method = RequestMethod.DELETE) + public Result deletePermissionRule(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + try { + sysPermissionDataRuleService.deletePermissionDataRule(id); + result.success("删除成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } - /** - * 查询菜单权限数据 - * - * @param sysPermissionDataRule - * @return - */ - @RequestMapping(value = "/queryPermissionRule", method = RequestMethod.GET) - public Result> queryPermissionRule(SysPermissionDataRule sysPermissionDataRule) { - Result> result = new Result<>(); - try { - List permRuleList = sysPermissionDataRuleService.queryPermissionRule(sysPermissionDataRule); - result.setResult(permRuleList); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } + /** + * 查询菜单权限数据 + * + * @param sysPermissionDataRule + * @return + */ + @RequestMapping(value = "/queryPermissionRule", method = RequestMethod.GET) + public Result> queryPermissionRule(SysPermissionDataRule sysPermissionDataRule) { + Result> result = new Result<>(); + try { + List permRuleList = sysPermissionDataRuleService.queryPermissionRule(sysPermissionDataRule); + result.setResult(permRuleList); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } - /** - * 部门权限表 - * @param departId - * @return - */ - @RequestMapping(value = "/queryDepartPermission", method = RequestMethod.GET) - public Result> queryDepartPermission(@RequestParam(name = "departId", required = true) String departId) { - Result> result = new Result<>(); - try { - List list = sysDepartPermissionService.list(new QueryWrapper().lambda().eq(SysDepartPermission::getDepartId, departId)); - result.setResult(list.stream().map(sysDepartPermission -> String.valueOf(sysDepartPermission.getPermissionId())).collect(Collectors.toList())); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - return result; - } + /** + * 部门权限表 + * + * @param departId + * @return + */ + @RequestMapping(value = "/queryDepartPermission", method = RequestMethod.GET) + public Result> queryDepartPermission(@RequestParam(name = "departId", required = true) String departId) { + Result> result = new Result<>(); + try { + List list = sysDepartPermissionService.list(new QueryWrapper().lambda().eq(SysDepartPermission::getDepartId, departId)); + result.setResult(list.stream().map(sysDepartPermission -> String.valueOf(sysDepartPermission.getPermissionId())).collect(Collectors.toList())); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } - /** - * 保存部门授权 - * - * @return - */ - @RequestMapping(value = "/saveDepartPermission", method = RequestMethod.POST) + /** + * 保存部门授权 + * + * @return + */ + @RequestMapping(value = "/saveDepartPermission", method = RequestMethod.POST) @RequiresPermissions("system:permission:saveDepart") - public Result saveDepartPermission(@RequestBody JSONObject json) { - long start = System.currentTimeMillis(); - Result result = new Result<>(); - try { - String departId = json.getString("departId"); - String permissionIds = json.getString("permissionIds"); - String lastPermissionIds = json.getString("lastpermissionIds"); - this.sysDepartPermissionService.saveDepartPermission(departId, permissionIds, lastPermissionIds); - result.success("保存成功!"); - log.info("======部门授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); - } catch (Exception e) { - result.error500("授权失败!"); - log.error(e.getMessage(), e); - } - return result; - } + public Result saveDepartPermission(@RequestBody JSONObject json) { + long start = System.currentTimeMillis(); + Result result = new Result<>(); + try { + String departId = json.getString("departId"); + String permissionIds = json.getString("permissionIds"); + String lastPermissionIds = json.getString("lastpermissionIds"); + this.sysDepartPermissionService.saveDepartPermission(departId, permissionIds, lastPermissionIds); + result.success("保存成功!"); + log.info("======部门授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + } catch (Exception e) { + result.error500("授权失败!"); + log.error(e.getMessage(), e); + } + return result; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysPositionController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysPositionController.java index e55c1f3..a5c0917 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysPositionController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysPositionController.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; @@ -34,8 +36,6 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; @@ -85,8 +85,8 @@ public class SysPositionController { Result> result = new Result>(); //------------------------------------------------------------------------------------------------ //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - sysPosition.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(),0)); + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + sysPosition.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); } //------------------------------------------------------------------------------------------------ QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysPosition, req.getParameterMap()); @@ -111,7 +111,7 @@ public class SysPositionController { try { //update-begin---author:wangshuai ---date:20230313 for:【QQYUN-4558】vue3职位功能调整,去掉编码和级别,可以先隐藏------------ //编号是空的,不需要判断多租户隔离了 - if(oConvertUtils.isEmpty(sysPosition.getCode())){ + if (oConvertUtils.isEmpty(sysPosition.getCode())) { //生成职位编码10位 sysPosition.setCode(RandomUtil.randomString(10)); } @@ -133,7 +133,7 @@ public class SysPositionController { */ @AutoLog(value = "职务表-编辑") @Operation(summary = "职务表-编辑") - @RequestMapping(value = "/edit", method ={RequestMethod.PUT, RequestMethod.POST}) + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) public Result edit(@RequestBody SysPosition sysPosition) { Result result = new Result(); SysPosition sysPositionEntity = sysPositionService.getById(sysPosition.getId()); @@ -229,8 +229,8 @@ public class SysPositionController { SysPosition sysPosition = JSON.parseObject(deString, SysPosition.class); //------------------------------------------------------------------------------------------------ //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - sysPosition.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(),0)); + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + sysPosition.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); } //------------------------------------------------------------------------------------------------ queryWrapper = QueryGenerator.initQueryWrapper(sysPosition, request.getParameterMap()); @@ -246,7 +246,7 @@ public class SysPositionController { //导出文件名称 mv.addObject(NormalExcelConstants.FILE_NAME, "职务表列表"); mv.addObject(NormalExcelConstants.CLASS, SysPosition.class); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("职务表列表数据", "导出人:"+user.getRealname(),"导出信息")); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("职务表列表数据", "导出人:" + user.getRealname(), "导出信息")); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; } @@ -259,7 +259,7 @@ public class SysPositionController { * @return */ @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response)throws IOException { + public Result importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); // 错误信息 @@ -273,10 +273,10 @@ public class SysPositionController { params.setHeadRows(1); params.setNeedSave(true); try { - List listSysPositions = ExcelImportUtil.importExcel(file.getInputStream(), SysPosition.class, params); - List list = ImportExcelUtil.importDateSave(listSysPositions, ISysPositionService.class, errorMessage,CommonConstant.SQL_INDEX_UNIQ_CODE); - errorLines+=list.size(); - successLines+=(listSysPositions.size()-errorLines); + List listSysPositions = ExcelImportUtil.importExcel(file.getInputStream(), SysPosition.class, params); + List list = ImportExcelUtil.importDateSave(listSysPositions, ISysPositionService.class, errorMessage, CommonConstant.SQL_INDEX_UNIQ_CODE); + errorLines += list.size(); + successLines += (listSysPositions.size() - errorLines); } catch (Exception e) { log.error(e.getMessage(), e); return Result.error("文件导入失败:" + e.getMessage()); @@ -288,7 +288,7 @@ public class SysPositionController { } } } - return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); + return ImportExcelUtil.imporReturnRes(errorLines, successLines, errorMessage); } /** @@ -303,7 +303,7 @@ public class SysPositionController { public Result queryByCode(@RequestParam(name = "code", required = true) String code) { Result result = new Result(); QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("code",code); + queryWrapper.eq("code", code); SysPosition sysPosition = sysPositionService.getOne(queryWrapper); if (sysPosition == null) { result.error500("未找到对应实体"); @@ -327,7 +327,7 @@ public class SysPositionController { public Result> queryByIds(@RequestParam(name = "ids") String ids) { Result> result = new Result<>(); QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in(true,"id",ids.split(",")); + queryWrapper.in(true, "id", ids.split(",")); List list = sysPositionService.list(queryWrapper); if (list == null) { result.error500("未找到对应实体"); @@ -339,7 +339,6 @@ public class SysPositionController { } - /** * 获取职位用户列表 * diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java index 2998828..51d8e0a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java @@ -1,28 +1,25 @@ package org.jeecg.modules.system.controller; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - +import cn.hutool.core.util.RandomUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - -import cn.hutool.core.util.RandomUtil; -import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.jeecg.common.api.vo.Result; -import org.jeecg.common.base.BaseMap; import org.jeecg.common.config.TenantContext; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.modules.redis.client.JeecgRedisClient; import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.mybatis.MybatisPlusSaasConfig; import org.jeecg.modules.base.service.BaseCommonService; @@ -36,26 +33,13 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import org.jeecg.common.system.vo.LoginUser; -import org.apache.shiro.SecurityUtils; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; +import java.io.IOException; +import java.util.*; /** *

@@ -69,506 +53,517 @@ import lombok.extern.slf4j.Slf4j; @RequestMapping("/sys/role") @Slf4j public class SysRoleController { - @Autowired - private ISysRoleService sysRoleService; - - @Autowired - private ISysPermissionDataRuleService sysPermissionDataRuleService; - - @Autowired - private ISysRolePermissionService sysRolePermissionService; - - @Autowired - private ISysPermissionService sysPermissionService; + @Autowired + private ISysRoleService sysRoleService; + + @Autowired + private ISysPermissionDataRuleService sysPermissionDataRuleService; + + @Autowired + private ISysRolePermissionService sysRolePermissionService; + + @Autowired + private ISysPermissionService sysPermissionService; @Autowired private ISysUserRoleService sysUserRoleService; - @Autowired - private BaseCommonService baseCommonService; - @Autowired - private JeecgRedisClient jeecgRedisClient; - - /** - * 分页列表查询 【系统角色,不做租户隔离】 - * @param role - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @RequiresPermissions("system:role:list") - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result> queryPageList(SysRole role, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - Result> result = new Result>(); - //QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(role, req.getParameterMap()); - //IPage pageList = sysRoleService.page(page, queryWrapper); - Page page = new Page(pageNo, pageSize); - //换成不做租户隔离的方法,实际上还是存在缺陷(缺陷:如果开启租户隔离,虽然能看到其他租户下的角色,编辑会提示报错) - IPage pageList = sysRoleService.listAllSysRole(page, role); - result.setSuccess(true); - result.setResult(pageList); - return result; - } - - /** - * 分页列表查询【租户角色,做租户隔离】 - * @param role - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @RequestMapping(value = "/listByTenant", method = RequestMethod.GET) - public Result> listByTenant(SysRole role, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - Result> result = new Result>(); - //此接口必须通过租户来隔离查询 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - role.setTenantId(oConvertUtils.getInt(!"0".equals(TenantContext.getTenant()) ? TenantContext.getTenant() : "", -1)); - } - - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(role, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = sysRoleService.page(page, queryWrapper); - result.setSuccess(true); - result.setResult(pageList); - return result; - } - - /** - * 添加 - * @param role - * @return - */ - @RequestMapping(value = "/add", method = RequestMethod.POST) + @Autowired + private BaseCommonService baseCommonService; + @Autowired + private JeecgRedisClient jeecgRedisClient; + + /** + * 分页列表查询 【系统角色,不做租户隔离】 + * + * @param role + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequiresPermissions("system:role:list") + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysRole role, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + //QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(role, req.getParameterMap()); + //IPage pageList = sysRoleService.page(page, queryWrapper); + Page page = new Page(pageNo, pageSize); + //换成不做租户隔离的方法,实际上还是存在缺陷(缺陷:如果开启租户隔离,虽然能看到其他租户下的角色,编辑会提示报错) + IPage pageList = sysRoleService.listAllSysRole(page, role); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 分页列表查询【租户角色,做租户隔离】 + * + * @param role + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/listByTenant", method = RequestMethod.GET) + public Result> listByTenant(SysRole role, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + //此接口必须通过租户来隔离查询 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + role.setTenantId(oConvertUtils.getInt(!"0".equals(TenantContext.getTenant()) ? TenantContext.getTenant() : "", -1)); + } + + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(role, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysRoleService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * + * @param role + * @return + */ + @RequestMapping(value = "/add", method = RequestMethod.POST) @RequiresPermissions("system:role:add") - public Result add(@RequestBody SysRole role) { - Result result = new Result(); - try { - //开启多租户隔离,角色id自动生成10位 - //update-begin---author:wangshuai---date:2024-05-23---for:【TV360X-42】角色新增时设置的编码,保存后不一致--- - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && oConvertUtils.isEmpty(role.getRoleCode())){ - //update-end---author:wangshuai---date:2024-05-23---for:【TV360X-42】角色新增时设置的编码,保存后不一致--- - role.setRoleCode(RandomUtil.randomString(10)); - } - role.setCreateTime(new Date()); - sysRoleService.save(role); - result.success("添加成功!"); - } catch (Exception e) { - log.error(e.getMessage(), e); - result.error500("操作失败"); - } - return result; - } - - /** - * 编辑 - * @param role - * @return - */ + public Result add(@RequestBody SysRole role) { + Result result = new Result(); + try { + //开启多租户隔离,角色id自动生成10位 + //update-begin---author:wangshuai---date:2024-05-23---for:【TV360X-42】角色新增时设置的编码,保存后不一致--- + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && oConvertUtils.isEmpty(role.getRoleCode())) { + //update-end---author:wangshuai---date:2024-05-23---for:【TV360X-42】角色新增时设置的编码,保存后不一致--- + role.setRoleCode(RandomUtil.randomString(10)); + } + role.setCreateTime(new Date()); + sysRoleService.save(role); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * + * @param role + * @return + */ @RequiresPermissions("system:role:edit") - @RequestMapping(value = "/edit",method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody SysRole role) { - Result result = new Result(); - SysRole sysrole = sysRoleService.getById(role.getId()); - if(sysrole==null) { - result.error500("未找到对应角色!"); - }else { - role.setUpdateTime(new Date()); + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody SysRole role) { + Result result = new Result(); + SysRole sysrole = sysRoleService.getById(role.getId()); + if (sysrole == null) { + result.error500("未找到对应角色!"); + } else { + role.setUpdateTime(new Date()); - //------------------------------------------------------------------ - //如果是saas隔离的情况下,判断当前租户id是否是当前租户下的 - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - //获取当前用户 - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - String username = "admin"; - if (!tenantId.equals(role.getTenantId()) && !username.equals(sysUser.getUsername())) { - baseCommonService.addLog("未经授权,修改非本租户下的角色ID:" + role.getId() + ",操作人:" + sysUser.getUsername(), CommonConstant.LOG_TYPE_2, CommonConstant.OPERATE_TYPE_3); - return Result.error("修改角色失败,当前角色不在此租户中。"); - } - } - //------------------------------------------------------------------ - - boolean ok = sysRoleService.updateById(role); - if(ok) { - result.success("修改成功!"); - } - } - return result; - } - - /** - * 通过id删除 - * @param id - * @return - */ + //------------------------------------------------------------------ + //如果是saas隔离的情况下,判断当前租户id是否是当前租户下的 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + //获取当前用户 + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + String username = "admin"; + if (!tenantId.equals(role.getTenantId()) && !username.equals(sysUser.getUsername())) { + baseCommonService.addLog("未经授权,修改非本租户下的角色ID:" + role.getId() + ",操作人:" + sysUser.getUsername(), CommonConstant.LOG_TYPE_2, CommonConstant.OPERATE_TYPE_3); + return Result.error("修改角色失败,当前角色不在此租户中。"); + } + } + //------------------------------------------------------------------ + + boolean ok = sysRoleService.updateById(role); + if (ok) { + result.success("修改成功!"); + } + } + return result; + } + + /** + * 通过id删除 + * + * @param id + * @return + */ @RequiresPermissions("system:role:delete") - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name="id",required=true) String id) { - //如果是saas隔离的情况下,判断当前租户id是否是当前租户下的 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - //获取当前用户 - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - Long getRoleCount = sysRoleService.getRoleCountByTenantId(id, tenantId); - String username = "admin"; - if(getRoleCount == 0 && !username.equals(sysUser.getUsername())){ - baseCommonService.addLog("未经授权,删除非本租户下的角色ID:" + id + ",操作人:" + sysUser.getUsername(), CommonConstant.LOG_TYPE_2, CommonConstant.OPERATE_TYPE_4); - return Result.error("删除角色失败,删除角色不属于登录租户!"); - } - } - - //update-begin---author:wangshuai---date:2024-01-16---for:【QQYUN-7974】禁止删除 admin 角色--- - //是否存在admin角色 - sysRoleService.checkAdminRoleRejectDel(id); - //update-end---author:wangshuai---date:2024-01-16---for:【QQYUN-7974】禁止删除 admin 角色--- - - sysRoleService.deleteRole(id); + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name = "id", required = true) String id) { + //如果是saas隔离的情况下,判断当前租户id是否是当前租户下的 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + //获取当前用户 + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + Long getRoleCount = sysRoleService.getRoleCountByTenantId(id, tenantId); + String username = "admin"; + if (getRoleCount == 0 && !username.equals(sysUser.getUsername())) { + baseCommonService.addLog("未经授权,删除非本租户下的角色ID:" + id + ",操作人:" + sysUser.getUsername(), CommonConstant.LOG_TYPE_2, CommonConstant.OPERATE_TYPE_4); + return Result.error("删除角色失败,删除角色不属于登录租户!"); + } + } - return Result.ok("删除角色成功"); - } - - /** - * 批量删除 - * @param ids - * @return - */ + //update-begin---author:wangshuai---date:2024-01-16---for:【QQYUN-7974】禁止删除 admin 角色--- + //是否存在admin角色 + sysRoleService.checkAdminRoleRejectDel(id); + //update-end---author:wangshuai---date:2024-01-16---for:【QQYUN-7974】禁止删除 admin 角色--- + + sysRoleService.deleteRole(id); + + return Result.ok("删除角色成功"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ @RequiresPermissions("system:role:deleteBatch") - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - baseCommonService.addLog("删除角色操作,角色ids:" + ids, CommonConstant.LOG_TYPE_2, CommonConstant.OPERATE_TYPE_4); - Result result = new Result(); - if(oConvertUtils.isEmpty(ids)) { - result.error500("未选中角色!"); - }else { - //如果是saas隔离的情况下,判断当前租户id是否是当前租户下的 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - String[] roleIds = ids.split(SymbolConstant.COMMA); - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String username = "admin"; - for (String id:roleIds) { - Long getRoleCount = sysRoleService.getRoleCountByTenantId(id, tenantId); - //如果存在角色id为0,即不存在,则删除角色 - if(getRoleCount == 0 && !username.equals(sysUser.getUsername()) ){ - baseCommonService.addLog("未经授权,删除非本租户下的角色ID:" + id + ",操作人:" + sysUser.getUsername(), CommonConstant.LOG_TYPE_2, CommonConstant.OPERATE_TYPE_4); - return Result.error("批量删除角色失败,存在角色不在此租户中,禁止批量删除"); - } - } - } - //验证是否为admin角色 - sysRoleService.checkAdminRoleRejectDel(ids); - sysRoleService.deleteBatchRole(ids.split(",")); - result.success("删除角色成功!"); - } - return result; - } - - /** - * 通过id查询 - * @param id - * @return - */ - @RequestMapping(value = "/queryById", method = RequestMethod.GET) - public Result queryById(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysRole sysrole = sysRoleService.getById(id); - if(sysrole==null) { - result.error500("未找到对应实体"); - }else { - result.setResult(sysrole); - result.setSuccess(true); - } - return result; - } + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + baseCommonService.addLog("删除角色操作,角色ids:" + ids, CommonConstant.LOG_TYPE_2, CommonConstant.OPERATE_TYPE_4); + Result result = new Result(); + if (oConvertUtils.isEmpty(ids)) { + result.error500("未选中角色!"); + } else { + //如果是saas隔离的情况下,判断当前租户id是否是当前租户下的 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + String[] roleIds = ids.split(SymbolConstant.COMMA); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String username = "admin"; + for (String id : roleIds) { + Long getRoleCount = sysRoleService.getRoleCountByTenantId(id, tenantId); + //如果存在角色id为0,即不存在,则删除角色 + if (getRoleCount == 0 && !username.equals(sysUser.getUsername())) { + baseCommonService.addLog("未经授权,删除非本租户下的角色ID:" + id + ",操作人:" + sysUser.getUsername(), CommonConstant.LOG_TYPE_2, CommonConstant.OPERATE_TYPE_4); + return Result.error("批量删除角色失败,存在角色不在此租户中,禁止批量删除"); + } + } + } + //验证是否为admin角色 + sysRoleService.checkAdminRoleRejectDel(ids); + sysRoleService.deleteBatchRole(ids.split(",")); + result.success("删除角色成功!"); + } + return result; + } - /** - * 查询全部角色(参与租户隔离) - * - * @return - */ - @RequestMapping(value = "/queryall", method = RequestMethod.GET) - public Result> queryall() { - Result> result = new Result<>(); - LambdaQueryWrapper query = new LambdaQueryWrapper(); - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - query.eq(SysRole::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - List list = sysRoleService.list(query); - if(list==null||list.size()<=0) { - result.error500("未找到角色信息"); - }else { - result.setResult(list); - result.setSuccess(true); - } - return result; - } + /** + * 通过id查询 + * + * @param id + * @return + */ + @RequestMapping(value = "/queryById", method = RequestMethod.GET) + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysRole sysrole = sysRoleService.getById(id); + if (sysrole == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(sysrole); + result.setSuccess(true); + } + return result; + } - /** - * 查询全部系统角色(不做租户隔离) - * - * @return - */ - @RequiresPermissions("system:role:queryallNoByTenant") - @RequestMapping(value = "/queryallNoByTenant", method = RequestMethod.GET) - public Result> queryallNoByTenant() { - Result> result = new Result<>(); - LambdaQueryWrapper query = new LambdaQueryWrapper(); - List list = sysRoleService.list(query); - if(list==null||list.size()<=0) { - result.error500("未找到角色信息"); - }else { - result.setResult(list); - result.setSuccess(true); - } - return result; - } - - /** - * 校验角色编码唯一 - */ - @RequestMapping(value = "/checkRoleCode", method = RequestMethod.GET) - public Result checkUsername(String id,String roleCode) { - Result result = new Result<>(); + /** + * 查询全部角色(参与租户隔离) + * + * @return + */ + @RequestMapping(value = "/queryall", method = RequestMethod.GET) + public Result> queryall() { + Result> result = new Result<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + query.eq(SysRole::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + List list = sysRoleService.list(query); + if (list == null || list.size() <= 0) { + result.error500("未找到角色信息"); + } else { + result.setResult(list); + result.setSuccess(true); + } + return result; + } + + /** + * 查询全部系统角色(不做租户隔离) + * + * @return + */ + @RequiresPermissions("system:role:queryallNoByTenant") + @RequestMapping(value = "/queryallNoByTenant", method = RequestMethod.GET) + public Result> queryallNoByTenant() { + Result> result = new Result<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List list = sysRoleService.list(query); + if (list == null || list.size() <= 0) { + result.error500("未找到角色信息"); + } else { + result.setResult(list); + result.setSuccess(true); + } + return result; + } + + /** + * 校验角色编码唯一 + */ + @RequestMapping(value = "/checkRoleCode", method = RequestMethod.GET) + public Result checkUsername(String id, String roleCode) { + Result result = new Result<>(); //如果此参数为false则程序发生异常 - result.setResult(true); - log.info("--验证角色编码是否唯一---id:"+id+"--roleCode:"+roleCode); - try { - SysRole role = null; - if(oConvertUtils.isNotEmpty(id)) { - role = sysRoleService.getById(id); - } - //SysRole newRole = sysRoleService.getOne(new QueryWrapper().lambda().eq(SysRole::getRoleCode, roleCode)); - SysRole newRole = sysRoleService.getRoleNoTenant(roleCode); - if(newRole!=null) { - //如果根据传入的roleCode查询到信息了,那么就需要做校验了。 - if(role==null) { - //role为空=>新增模式=>只要roleCode存在则返回false - result.setSuccess(false); - result.setMessage("角色编码已存在"); - return result; - }else if(!id.equals(newRole.getId())) { - //否则=>编辑模式=>判断两者ID是否一致- - result.setSuccess(false); - result.setMessage("角色编码已存在"); - return result; - } - } - } catch (Exception e) { - result.setSuccess(false); - result.setResult(false); - result.setMessage(e.getMessage()); - return result; - } - result.setSuccess(true); - return result; - } + result.setResult(true); + log.info("--验证角色编码是否唯一---id:" + id + "--roleCode:" + roleCode); + try { + SysRole role = null; + if (oConvertUtils.isNotEmpty(id)) { + role = sysRoleService.getById(id); + } + //SysRole newRole = sysRoleService.getOne(new QueryWrapper().lambda().eq(SysRole::getRoleCode, roleCode)); + SysRole newRole = sysRoleService.getRoleNoTenant(roleCode); + if (newRole != null) { + //如果根据传入的roleCode查询到信息了,那么就需要做校验了。 + if (role == null) { + //role为空=>新增模式=>只要roleCode存在则返回false + result.setSuccess(false); + result.setMessage("角色编码已存在"); + return result; + } else if (!id.equals(newRole.getId())) { + //否则=>编辑模式=>判断两者ID是否一致- + result.setSuccess(false); + result.setMessage("角色编码已存在"); + return result; + } + } + } catch (Exception e) { + result.setSuccess(false); + result.setResult(false); + result.setMessage(e.getMessage()); + return result; + } + result.setSuccess(true); + return result; + } - /** - * 导出excel - * @param request - */ - @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(SysRole sysRole,HttpServletRequest request) { - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - sysRole.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - - // Step.1 组装查询条件 - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysRole, request.getParameterMap()); - //Step.2 AutoPoi 导出Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - List pageList = sysRoleService.list(queryWrapper); - //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME,"角色列表"); - mv.addObject(NormalExcelConstants.CLASS,SysRole.class); - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS,new ExportParams("角色列表数据","导出人:"+user.getRealname(),"导出信息")); - mv.addObject(NormalExcelConstants.DATA_LIST,pageList); - return mv; - } + /** + * 导出excel + * + * @param request + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(SysRole sysRole, HttpServletRequest request) { + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + sysRole.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ - /** - * 通过excel导入数据 - * @param request - * @param response - * @return - */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); - for (Map.Entry entity : fileMap.entrySet()) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysRole, request.getParameterMap()); + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List pageList = sysRoleService.list(queryWrapper); + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "角色列表"); + mv.addObject(NormalExcelConstants.CLASS, SysRole.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("角色列表数据", "导出人:" + user.getRealname(), "导出信息")); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { // 获取上传文件对象 - MultipartFile file = entity.getValue(); - ImportParams params = new ImportParams(); - params.setTitleRows(2); - params.setHeadRows(1); - params.setNeedSave(true); - try { - return sysRoleService.importExcelCheckRoleCode(file, params); - } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("文件导入失败:" + e.getMessage()); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - log.error(e.getMessage(), e); - } - } - } - return Result.error("文件导入失败!"); - } - - /** - * 查询数据规则数据 - */ - @GetMapping(value = "/datarule/{permissionId}/{roleId}") - public Result loadDatarule(@PathVariable("permissionId") String permissionId,@PathVariable("roleId") String roleId) { - List list = sysPermissionDataRuleService.getPermRuleListByPermId(permissionId); - if(list==null || list.size()==0) { - return Result.error("未找到权限配置信息"); - }else { - Map map = new HashMap(5); - map.put("datarule", list); - LambdaQueryWrapper query = new LambdaQueryWrapper() - .eq(SysRolePermission::getPermissionId, permissionId) - .isNotNull(SysRolePermission::getDataRuleIds) - .eq(SysRolePermission::getRoleId,roleId); - SysRolePermission sysRolePermission = sysRolePermissionService.getOne(query); - if(sysRolePermission==null) { - //return Result.error("未找到角色菜单配置信息"); - }else { - String drChecked = sysRolePermission.getDataRuleIds(); - if(oConvertUtils.isNotEmpty(drChecked)) { - map.put("drChecked", drChecked.endsWith(",")?drChecked.substring(0, drChecked.length()-1):drChecked); - } - } - return Result.ok(map); - //TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key - } - } - - /** - * 保存数据规则至角色菜单关联表 - */ - @PostMapping(value = "/datarule") - public Result saveDatarule(@RequestBody JSONObject jsonObject) { - try { - String permissionId = jsonObject.getString("permissionId"); - String roleId = jsonObject.getString("roleId"); - String dataRuleIds = jsonObject.getString("dataRuleIds"); - log.info("保存数据规则>>"+"菜单ID:"+permissionId+"角色ID:"+ roleId+"数据权限ID:"+dataRuleIds); - LambdaQueryWrapper query = new LambdaQueryWrapper() - .eq(SysRolePermission::getPermissionId, permissionId) - .eq(SysRolePermission::getRoleId,roleId); - SysRolePermission sysRolePermission = sysRolePermissionService.getOne(query); - if(sysRolePermission==null) { - return Result.error("请先保存角色菜单权限!"); - }else { - sysRolePermission.setDataRuleIds(dataRuleIds); - this.sysRolePermissionService.updateById(sysRolePermission); - } - } catch (Exception e) { - log.error("SysRoleController.saveDatarule()发生异常:" + e.getMessage(),e); - return Result.error("保存失败"); - } - return Result.ok("保存成功!"); - } - - - /** - * 用户角色授权功能,查询菜单权限树 - * @param request - * @return - */ - @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) - public Result> queryTreeList(HttpServletRequest request) { - Result> result = new Result<>(); - //全部权限ids - List ids = new ArrayList<>(); - try { - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); - query.orderByAsc(SysPermission::getSortNo); - List list = sysPermissionService.list(query); - for(SysPermission sysPer : list) { - ids.add(sysPer.getId()); - } - List treeList = new ArrayList<>(); - getTreeModelList(treeList, list, null); - Map resMap = new HashMap(5); + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + return sysRoleService.importExcelCheckRoleCode(file, params); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("文件导入失败:" + e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + } + return Result.error("文件导入失败!"); + } + + /** + * 查询数据规则数据 + */ + @GetMapping(value = "/datarule/{permissionId}/{roleId}") + public Result loadDatarule(@PathVariable("permissionId") String permissionId, @PathVariable("roleId") String roleId) { + List list = sysPermissionDataRuleService.getPermRuleListByPermId(permissionId); + if (list == null || list.size() == 0) { + return Result.error("未找到权限配置信息"); + } else { + Map map = new HashMap(5); + map.put("datarule", list); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysRolePermission::getPermissionId, permissionId) + .isNotNull(SysRolePermission::getDataRuleIds) + .eq(SysRolePermission::getRoleId, roleId); + SysRolePermission sysRolePermission = sysRolePermissionService.getOne(query); + if (sysRolePermission == null) { + //return Result.error("未找到角色菜单配置信息"); + } else { + String drChecked = sysRolePermission.getDataRuleIds(); + if (oConvertUtils.isNotEmpty(drChecked)) { + map.put("drChecked", drChecked.endsWith(",") ? drChecked.substring(0, drChecked.length() - 1) : drChecked); + } + } + return Result.ok(map); + //TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key + } + } + + /** + * 保存数据规则至角色菜单关联表 + */ + @PostMapping(value = "/datarule") + public Result saveDatarule(@RequestBody JSONObject jsonObject) { + try { + String permissionId = jsonObject.getString("permissionId"); + String roleId = jsonObject.getString("roleId"); + String dataRuleIds = jsonObject.getString("dataRuleIds"); + log.info("保存数据规则>>" + "菜单ID:" + permissionId + "角色ID:" + roleId + "数据权限ID:" + dataRuleIds); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysRolePermission::getPermissionId, permissionId) + .eq(SysRolePermission::getRoleId, roleId); + SysRolePermission sysRolePermission = sysRolePermissionService.getOne(query); + if (sysRolePermission == null) { + return Result.error("请先保存角色菜单权限!"); + } else { + sysRolePermission.setDataRuleIds(dataRuleIds); + this.sysRolePermissionService.updateById(sysRolePermission); + } + } catch (Exception e) { + log.error("SysRoleController.saveDatarule()发生异常:" + e.getMessage(), e); + return Result.error("保存失败"); + } + return Result.ok("保存成功!"); + } + + + /** + * 用户角色授权功能,查询菜单权限树 + * + * @param request + * @return + */ + @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) + public Result> queryTreeList(HttpServletRequest request) { + Result> result = new Result<>(); + //全部权限ids + List ids = new ArrayList<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + for (SysPermission sysPer : list) { + ids.add(sysPer.getId()); + } + List treeList = new ArrayList<>(); + getTreeModelList(treeList, list, null); + Map resMap = new HashMap(5); //全部树节点数据 - resMap.put("treeList", treeList); + resMap.put("treeList", treeList); //全部树ids - resMap.put("ids", ids); - result.setResult(resMap); - result.setSuccess(true); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - return result; - } - - private void getTreeModelList(List treeList,List metaList,TreeModel temp) { - for (SysPermission permission : metaList) { - String tempPid = permission.getParentId(); - TreeModel tree = new TreeModel(permission.getId(), tempPid, permission.getName(),permission.getRuleFlag(), permission.isLeaf()); - if(temp==null && oConvertUtils.isEmpty(tempPid)) { - treeList.add(tree); - if(!tree.getIsLeaf()) { - getTreeModelList(treeList, metaList, tree); - } - }else if(temp!=null && tempPid!=null && tempPid.equals(temp.getKey())){ - temp.getChildren().add(tree); - if(!tree.getIsLeaf()) { - getTreeModelList(treeList, metaList, tree); - } - } - - } - } + resMap.put("ids", ids); + result.setResult(resMap); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + private void getTreeModelList(List treeList, List metaList, TreeModel temp) { + for (SysPermission permission : metaList) { + String tempPid = permission.getParentId(); + TreeModel tree = new TreeModel(permission.getId(), tempPid, permission.getName(), permission.getRuleFlag(), permission.isLeaf()); + if (temp == null && oConvertUtils.isEmpty(tempPid)) { + treeList.add(tree); + if (!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + } else if (temp != null && tempPid != null && tempPid.equals(temp.getKey())) { + temp.getChildren().add(tree); + if (!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + } + + } + } /** * 分页获取全部角色列表(包含每个角色的数量) + * * @return */ @RequestMapping(value = "/queryPageRoleCount", method = RequestMethod.GET) - public Result> queryPageRoleCount(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + public Result> queryPageRoleCount(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { Result> result = new Result<>(); - LambdaQueryWrapper query = new LambdaQueryWrapper(); - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - query.eq(SysRole::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ + LambdaQueryWrapper query = new LambdaQueryWrapper(); + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + query.eq(SysRole::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ Page page = new Page<>(pageNo, pageSize); IPage pageList = sysRoleService.page(page, query); List records = pageList.getRecords(); IPage sysRoleCountPage = new PageDTO<>(); List sysCountVoList = new ArrayList<>(); //循环角色数据获取每个角色下面对应的角色数量 - for (SysRole role:records) { + for (SysRole role : records) { LambdaQueryWrapper countQuery = new LambdaQueryWrapper<>(); - countQuery.eq(SysUserRole::getRoleId,role.getId()); + countQuery.eq(SysUserRole::getRoleId, role.getId()); long count = sysUserRoleService.count(countQuery); SysUserRoleCountVo countVo = new SysUserRoleCountVo(); - BeanUtils.copyProperties(role,countVo); + BeanUtils.copyProperties(role, countVo); countVo.setCount(count); sysCountVoList.add(countVo); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleIndexController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleIndexController.java index f09c958..038f27c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleIndexController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleIndexController.java @@ -1,31 +1,27 @@ package org.jeecg.modules.system.controller; -import java.util.Arrays; - +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.apache.shiro.authz.annotation.RequiresRoles; import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.system.entity.SysRoleIndex; import org.jeecg.modules.system.service.ISysRoleIndexService; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; -import org.jeecg.common.system.base.controller.JeecgController; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; +import java.util.Arrays; + /** * @Description: 角色首页配置 * @Author: jeecg-boot @@ -73,7 +69,7 @@ public class SysRoleIndexController extends JeecgController add(@RequestBody SysRoleIndex sysRoleIndex,HttpServletRequest request) { + public Result add(@RequestBody SysRoleIndex sysRoleIndex, HttpServletRequest request) { sysRoleIndexService.save(sysRoleIndex); return Result.OK("添加成功!"); } @@ -89,7 +85,7 @@ public class SysRoleIndexController extends JeecgController edit(@RequestBody SysRoleIndex sysRoleIndex,HttpServletRequest request) { + public Result edit(@RequestBody SysRoleIndex sysRoleIndex, HttpServletRequest request) { sysRoleIndexService.updateById(sysRoleIndex); return Result.OK("编辑成功!"); } @@ -169,7 +165,7 @@ public class SysRoleIndexController extends JeecgController queryByCode(@RequestParam(name = "roleCode", required = true) String roleCode,HttpServletRequest request) { + public Result queryByCode(@RequestParam(name = "roleCode", required = true) String roleCode, HttpServletRequest request) { SysRoleIndex sysRoleIndex = sysRoleIndexService.getOne(new LambdaQueryWrapper().eq(SysRoleIndex::getRoleCode, roleCode)); return Result.OK(sysRoleIndex); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTableWhiteListController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTableWhiteListController.java index c20b144..6f326f1 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTableWhiteListController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTableWhiteListController.java @@ -6,8 +6,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; -import org.apache.shiro.authz.annotation.RequiresRoles; import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresRoles; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.base.controller.JeecgController; @@ -80,7 +80,7 @@ public class SysTableWhiteListController extends JeecgController edit(@RequestBody SysTableWhiteList sysTableWhiteList) { @@ -116,7 +116,7 @@ public class SysTableWhiteListController extends JeecgController deleteBatch(@RequestParam(name = "ids") String ids) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java index 26c67cc..d898b60 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysTenantController.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; @@ -23,11 +24,7 @@ import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.mybatis.MybatisPlusSaasConfig; import org.jeecg.modules.base.service.BaseCommonService; import org.jeecg.modules.system.entity.*; -import org.jeecg.modules.system.service.ISysTenantPackService; -import org.jeecg.modules.system.service.ISysTenantService; -import org.jeecg.modules.system.service.ISysUserService; -import org.jeecg.modules.system.service.ISysUserTenantService; -import org.jeecg.modules.system.service.ISysDepartService; +import org.jeecg.modules.system.service.*; import org.jeecg.modules.system.vo.SysUserTenantVo; import org.jeecg.modules.system.vo.tenant.TenantDepartAuthInfo; import org.jeecg.modules.system.vo.tenant.TenantPackModel; @@ -36,11 +33,11 @@ import org.jeecg.modules.system.vo.tenant.TenantPackUserCount; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import jakarta.servlet.http.HttpServletRequest; import java.util.*; /** * 租户配置信息 + * * @author: jeecg-boot */ @Slf4j @@ -56,10 +53,10 @@ public class SysTenantController { @Autowired private ISysUserTenantService relationService; - + @Autowired private ISysTenantPackService sysTenantPackService; - + @Autowired private BaseCommonService baseCommonService; @@ -68,6 +65,7 @@ public class SysTenantController { /** * 获取列表数据 + * * @param sysTenant * @param pageNo * @param pageSize @@ -76,36 +74,37 @@ public class SysTenantController { */ @RequiresPermissions("system:tenant:list") @PermissionData(pageComponent = "system/TenantList") - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result> queryPageList(SysTenant sysTenant,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result>(); + @RequestMapping(value = "/list", method = RequestMethod.GET) + public Result> queryPageList(SysTenant sysTenant, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result>(); //---author:zhangyafei---date:20210916-----for: 租户管理添加日期范围查询--- - Date beginDate=null; - Date endDate=null; - if(oConvertUtils.isNotEmpty(sysTenant)) { - beginDate=sysTenant.getBeginDate(); - endDate=sysTenant.getEndDate(); + Date beginDate = null; + Date endDate = null; + if (oConvertUtils.isNotEmpty(sysTenant)) { + beginDate = sysTenant.getBeginDate(); + endDate = sysTenant.getEndDate(); sysTenant.setBeginDate(null); sysTenant.setEndDate(null); } //---author:zhangyafei---date:20210916-----for: 租户管理添加日期范围查询--- QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysTenant, req.getParameterMap()); //---author:zhangyafei---date:20210916-----for: 租户管理添加日期范围查询--- - if(oConvertUtils.isNotEmpty(sysTenant)){ - queryWrapper.ge(oConvertUtils.isNotEmpty(beginDate),"begin_date",beginDate); - queryWrapper.le(oConvertUtils.isNotEmpty(endDate),"end_date",endDate); + if (oConvertUtils.isNotEmpty(sysTenant)) { + queryWrapper.ge(oConvertUtils.isNotEmpty(beginDate), "begin_date", beginDate); + queryWrapper.le(oConvertUtils.isNotEmpty(endDate), "end_date", endDate); } //---author:zhangyafei---date:20210916-----for: 租户管理添加日期范围查询--- - Page page = new Page(pageNo, pageSize); - IPage pageList = sysTenantService.page(page, queryWrapper); - result.setSuccess(true); - result.setResult(pageList); - return result; - } + Page page = new Page(pageNo, pageSize); + IPage pageList = sysTenantService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } /** * 获取租户删除的列表 + * * @param sysTenant * @param pageNo * @param pageSize @@ -114,8 +113,8 @@ public class SysTenantController { */ @GetMapping("/recycleBinPageList") @RequiresPermissions("system:tenant:recycleBinPageList") - public Result> recycleBinPageList(SysTenant sysTenant,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req){ + public Result> recycleBinPageList(SysTenant sysTenant, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { Result> result = new Result>(); Page page = new Page(pageNo, pageSize); IPage pageList = sysTenantService.getRecycleBinPageList(page, sysTenant); @@ -123,9 +122,10 @@ public class SysTenantController { result.setResult(pageList); return result; } - + /** - * 添加 + * 添加 + * * @param * @return */ @@ -133,7 +133,7 @@ public class SysTenantController { @RequestMapping(value = "/add", method = RequestMethod.POST) public Result add(@RequestBody SysTenant sysTenant) { Result result = new Result(); - if(sysTenantService.getById(sysTenant.getId())!=null){ + if (sysTenantService.getById(sysTenant.getId()) != null) { return result.error500("该编号已存在!"); } try { @@ -149,36 +149,38 @@ public class SysTenantController { } /** - * 编辑 + * 编辑 + * * @param * @return */ @RequiresPermissions("system:tenant:edit") - @RequestMapping(value = "/edit", method ={RequestMethod.PUT, RequestMethod.POST}) + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) public Result edit(@RequestBody SysTenant tenant) { Result result = new Result(); SysTenant sysTenant = sysTenantService.getById(tenant.getId()); - if(sysTenant==null) { - return result.error500("未找到对应实体"); + if (sysTenant == null) { + return result.error500("未找到对应实体"); } - if(oConvertUtils.isEmpty(sysTenant.getHouseNumber())){ + if (oConvertUtils.isEmpty(sysTenant.getHouseNumber())) { tenant.setHouseNumber(RandomUtil.randomStringUpper(6)); } boolean ok = sysTenantService.updateById(tenant); - if(ok) { + if (ok) { result.success("修改成功!"); } return result; } /** - * 通过id删除 + * 通过id删除 + * * @param id * @return */ @RequiresPermissions("system:tenant:delete") - @RequestMapping(value = "/delete", method ={RequestMethod.DELETE, RequestMethod.POST}) - public Result delete(@RequestParam(name="id",required=true) String id) { + @RequestMapping(value = "/delete", method = {RequestMethod.DELETE, RequestMethod.POST}) + public Result delete(@RequestParam(name = "id", required = true) String id) { //------------------------------------------------------------------ //如果是saas隔离的情况下,判断当前租户id是否是当前租户下的 if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { @@ -194,23 +196,24 @@ public class SysTenantController { } } //------------------------------------------------------------------ - + sysTenantService.removeTenantById(id); return Result.ok("删除成功"); } /** - * 批量删除 + * 批量删除 + * * @param ids * @return */ @RequiresPermissions("system:tenant:deleteBatch") @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { Result result = new Result<>(); - if(oConvertUtils.isEmpty(ids)) { + if (oConvertUtils.isEmpty(ids)) { result.error500("未选中租户!"); - }else { + } else { String[] ls = ids.split(","); // 过滤掉已被引用的租户 List idList = new ArrayList<>(); @@ -230,7 +233,7 @@ public class SysTenantController { } } //------------------------------------------------------------------ - + idList.add(Integer.parseInt(id)); } //update-begin---author:wangshuai ---date:20230710 for:【QQYUN-5723】3、租户删除直接删除,不删除中间表------------ @@ -243,31 +246,32 @@ public class SysTenantController { /** * 通过id查询 + * * @param id * @return */ @RequestMapping(value = "/queryById", method = RequestMethod.GET) - public Result queryById(@RequestParam(name="id",required=true) String id) { + public Result queryById(@RequestParam(name = "id", required = true) String id) { Result result = new Result(); - if(oConvertUtils.isEmpty(id)){ + if (oConvertUtils.isEmpty(id)) { result.error500("参数为空!"); } //------------------------------------------------------------------------------------------------ //获取登录用户信息 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】, admin给特权可以管理所有租户 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && !"admin".equals(sysUser.getUsername())){ + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && !"admin".equals(sysUser.getUsername())) { Integer loginSessionTenant = oConvertUtils.getInt(TenantContext.getTenant()); - if(loginSessionTenant!=null && !loginSessionTenant.equals(Integer.valueOf(id))){ + if (loginSessionTenant != null && !loginSessionTenant.equals(Integer.valueOf(id))) { result.error500("无权限访问他人租户!"); return result; } } //------------------------------------------------------------------------------------------------ SysTenant sysTenant = sysTenantService.getById(id); - if(sysTenant==null) { + if (sysTenant == null) { result.error500("未找到对应实体"); - }else { + } else { result.setResult(sysTenant); result.setSuccess(true); } @@ -277,15 +281,16 @@ public class SysTenantController { /** * 查询有效的 租户数据 + * * @return */ @RequiresPermissions("system:tenant:queryList") @RequestMapping(value = "/queryList", method = RequestMethod.GET) - public Result> queryList(@RequestParam(name="ids",required=false) String ids) { + public Result> queryList(@RequestParam(name = "ids", required = false) String ids) { Result> result = new Result>(); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysTenant::getStatus, 1); - if(oConvertUtils.isNotEmpty(ids)){ + if (oConvertUtils.isNotEmpty(ids)) { query.in(SysTenant::getId, ids.split(",")); } //此处查询忽略时间条件 @@ -358,31 +363,32 @@ public class SysTenantController { sysTenantPackService.deleteTenantPack(ids); return Result.ok("删除租户产品包成功"); } - //===========【低代码应用,前端专用接口 —— 加入限制只能维护和查看自己拥有的租户】========================================================== + /** - * 查询当前用户的所有有效租户【低代码应用专用接口】 + * 查询当前用户的所有有效租户【低代码应用专用接口】 + * * @return */ @RequestMapping(value = "/getCurrentUserTenant", method = RequestMethod.GET) - public Result> getCurrentUserTenant() { - Result> result = new Result>(); + public Result> getCurrentUserTenant() { + Result> result = new Result>(); try { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); //update-begin---author:wangshuai ---date:20221223 for:[QQYUN-3371]租户逻辑改造,改成关系表------------ List tenantIdList = relationService.getTenantIdsByUserId(sysUser.getId()); - Map map = new HashMap(5); - if (null!=tenantIdList && tenantIdList.size()>0) { - //update-end---author:wangshuai ---date:20221223 for:[QQYUN-3371]租户逻辑改造,改成关系表------------ + Map map = new HashMap(5); + if (null != tenantIdList && tenantIdList.size() > 0) { + //update-end---author:wangshuai ---date:20221223 for:[QQYUN-3371]租户逻辑改造,改成关系表------------ // 该方法仅查询有效的租户,如果返回0个就说明所有的租户均无效。 List tenantList = sysTenantService.queryEffectiveTenant(tenantIdList); map.put("list", tenantList); } result.setSuccess(true); result.setResult(map); - }catch(Exception e) { + } catch (Exception e) { log.error(e.getMessage(), e); result.error500("查询失败!"); } @@ -391,19 +397,21 @@ public class SysTenantController { /** * 邀请用户【低代码应用专用接口】 + * * @param ids * @param phone * @return */ @PutMapping("/invitationUserJoin") @RequiresPermissions("system:tenant:invitation:user") - public Result invitationUserJoin(@RequestParam("ids") String ids,@RequestParam("phone") String phone){ - sysTenantService.invitationUserJoin(ids,phone); + public Result invitationUserJoin(@RequestParam("ids") String ids, @RequestParam("phone") String phone) { + sysTenantService.invitationUserJoin(ids, phone); return Result.ok("邀请用户成功"); } /** * 获取用户列表数据【低代码应用专用接口】 + * * @param user * @param pageNo * @param pageSize @@ -413,13 +421,13 @@ public class SysTenantController { @RequestMapping(value = "/getTenantUserList", method = RequestMethod.GET) @RequiresPermissions("system:tenant:user:list") public Result> getTenantUserList(SysUser user, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - @RequestParam(name="userTenantId") String userTenantId, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "userTenantId") String userTenantId, HttpServletRequest req) { Result> result = new Result<>(); Page page = new Page<>(pageNo, pageSize); - Page pageList = relationService.getPageUserList(page,Integer.valueOf(userTenantId),user); + Page pageList = relationService.getPageUserList(page, Integer.valueOf(userTenantId), user); result.setSuccess(true); result.setResult(pageList); return result; @@ -427,6 +435,7 @@ public class SysTenantController { /** * 请离用户租户【低代码应用专用接口】 + * * @param userIds * @param tenantId * @return @@ -434,54 +443,56 @@ public class SysTenantController { @PutMapping("/leaveTenant") @RequiresPermissions("system:tenant:leave") public Result leaveTenant(@RequestParam("userIds") String userIds, - @RequestParam("tenantId") String tenantId){ + @RequestParam("tenantId") String tenantId) { Result result = new Result<>(); //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && !"admin".equals(sysUser.getUsername())){ + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && !"admin".equals(sysUser.getUsername())) { Integer loginSessionTenant = oConvertUtils.getInt(TenantContext.getTenant()); - if(loginSessionTenant!=null && !loginSessionTenant.equals(Integer.valueOf(tenantId))){ + if (loginSessionTenant != null && !loginSessionTenant.equals(Integer.valueOf(tenantId))) { result.error500("无权限访问他人租户!"); return result; } } - sysTenantService.leaveTenant(userIds,tenantId); + sysTenantService.leaveTenant(userIds, tenantId); return Result.ok("请离成功"); } /** - * 编辑(只允许修改自己拥有的租户)【低代码应用专用接口】 + * 编辑(只允许修改自己拥有的租户)【低代码应用专用接口】 + * * @param * @return */ - @RequestMapping(value = "/editOwnTenant", method ={RequestMethod.PUT, RequestMethod.POST}) - public Result editOwnTenant(@RequestBody SysTenant tenant,HttpServletRequest req) { + @RequestMapping(value = "/editOwnTenant", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result editOwnTenant(@RequestBody SysTenant tenant, HttpServletRequest req) { Result result = new Result(); String tenantId = TokenUtils.getTenantIdByRequest(req); - if(!tenantId.equals(tenant.getId().toString())){ + if (!tenantId.equals(tenant.getId().toString())) { return result.error500("无权修改他人租户!"); } SysTenant sysTenant = sysTenantService.getById(tenant.getId()); - if(sysTenant==null) { + if (sysTenant == null) { return result.error500("未找到对应实体"); } - if(oConvertUtils.isEmpty(sysTenant.getHouseNumber())){ + if (oConvertUtils.isEmpty(sysTenant.getHouseNumber())) { tenant.setHouseNumber(RandomUtil.randomStringUpper(6)); } boolean ok = sysTenantService.updateById(tenant); - if(ok) { + if (ok) { result.success("修改成功!"); } return result; } - + /** * 创建租户并且将用户保存到中间表【低代码应用专用接口】 + * * @param sysTenant */ @PostMapping("/saveTenantJoinUser") - public Result saveTenantJoinUser(@RequestBody SysTenant sysTenant){ + public Result saveTenantJoinUser(@RequestBody SysTenant sysTenant) { Result result = new Result<>(); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); Integer tenantId = sysTenantService.saveTenantJoinUser(sysTenant, sysUser.getId()); @@ -493,26 +504,28 @@ public class SysTenantController { /** * 加入租户通过门牌号【低代码应用专用接口】 + * * @param sysTenant */ @PostMapping("/joinTenantByHouseNumber") - public Result joinTenantByHouseNumber(@RequestBody SysTenant sysTenant){ + public Result joinTenantByHouseNumber(@RequestBody SysTenant sysTenant) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); Integer tenantId = sysTenantService.joinTenantByHouseNumber(sysTenant, sysUser.getId()); Result result = new Result<>(); - if(tenantId != 0){ + if (tenantId != 0) { result.setMessage("申请加入组织成功"); result.setSuccess(true); result.setResult(tenantId); return result; - }else{ + } else { result.setMessage("该门牌号不存在"); result.setSuccess(false); return result; } } - + //update-begin---author:wangshuai ---date:20230107 for:[QQYUN-3725]申请加入租户,审核中状态增加接口------------ + /** * 分页获取租户用户数据(vue3用户租户页面)【低代码应用专用接口】 * @@ -565,7 +578,7 @@ public class SysTenantController { public Result updateUserTenantStatus(@RequestBody SysUserTenant userTenant) { String tenantId = TenantContext.getTenant(); if (oConvertUtils.isEmpty(tenantId)) { - return Result.error("未找到当前租户信息"); + return Result.error("未找到当前租户信息"); } relationService.updateUserTenantStatus(userTenant.getUserId(), tenantId, userTenant.getStatus()); return Result.ok("更新用户租户状态成功"); @@ -579,7 +592,7 @@ public class SysTenantController { */ @PutMapping("/cancelTenant") //@RequiresPermissions("system:tenant:cancelTenant") - public Result cancelTenant(@RequestBody SysTenant sysTenant,HttpServletRequest request) { + public Result cancelTenant(@RequestBody SysTenant sysTenant, HttpServletRequest request) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); SysTenant tenant = sysTenantService.getById(sysTenant.getId()); if (null == tenant) { @@ -590,7 +603,7 @@ public class SysTenantController { } SysUser userById = sysUserService.getById(sysUser.getId()); String loginPassword = request.getParameter("loginPassword"); - String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(),loginPassword, userById.getSalt()); + String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), loginPassword, userById.getSalt()); if (!passwordEncode.equals(userById.getPassword())) { return Result.error("密码不正确"); } @@ -601,30 +614,32 @@ public class SysTenantController { /** * 获取租户用户不同状态下的数量【低代码应用专用接口】 + * * @return */ @GetMapping("/getTenantStatusCount") - public Result getTenantStatusCount(@RequestParam(value = "status",defaultValue = "1") String status, HttpServletRequest req){ + public Result getTenantStatusCount(@RequestParam(value = "status", defaultValue = "1") String status, HttpServletRequest req) { String tenantId = TokenUtils.getTenantIdByRequest(req); if (null == tenantId) { return Result.error("未找到当前租户信息"); } LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysUserTenant::getTenantId,tenantId); - query.eq(SysUserTenant::getStatus,status); + query.eq(SysUserTenant::getTenantId, tenantId); + query.eq(SysUserTenant::getStatus, status); long count = relationService.count(query); return Result.ok(count); } /** * 用户取消租户申请【低代码应用专用接口】 + * * @param tenantId * @return */ @PutMapping("/cancelApplyTenant") - public Result cancelApplyTenant(@RequestParam("tenantId") String tenantId){ + public Result cancelApplyTenant(@RequestParam("tenantId") String tenantId) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - sysTenantService.leaveTenant(sysUser.getId(),tenantId); + sysTenantService.leaveTenant(sysUser.getId(), tenantId); return Result.ok("取消申请成功"); } @@ -632,97 +647,104 @@ public class SysTenantController { /** * 彻底删除租户 + * * @param ids * @return */ @DeleteMapping("/deleteLogicDeleted") @RequiresPermissions("system:tenant:deleteTenantLogic") - public Result deleteTenantLogic(@RequestParam("ids") String ids){ + public Result deleteTenantLogic(@RequestParam("ids") String ids) { sysTenantService.deleteTenantLogic(ids); return Result.ok("彻底删除成功"); } /** * 还原删除的租户 + * * @param ids * @return */ @PutMapping("/revertTenantLogic") @RequiresPermissions("system:tenant:revertTenantLogic") - public Result revertTenantLogic(@RequestParam("ids") String ids){ + public Result revertTenantLogic(@RequestParam("ids") String ids) { sysTenantService.revertTenantLogic(ids); return Result.ok("还原成功"); } /** * 退出租户【低代码应用专用接口】 + * * @param sysTenant * @param request * @return */ @DeleteMapping("/exitUserTenant") - public Result exitUserTenant(@RequestBody SysTenant sysTenant,HttpServletRequest request){ + public Result exitUserTenant(@RequestBody SysTenant sysTenant, HttpServletRequest request) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); //验证用户是否已存在 - Integer count = relationService.userTenantIzExist(sysUser.getId(),sysTenant.getId()); + Integer count = relationService.userTenantIzExist(sysUser.getId(), sysTenant.getId()); if (count == 0) { return Result.error("此租户下没有当前用户"); } //验证密码 String loginPassword = request.getParameter("loginPassword"); SysUser userById = sysUserService.getById(sysUser.getId()); - String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(),loginPassword, userById.getSalt()); + String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), loginPassword, userById.getSalt()); if (!passwordEncode.equals(userById.getPassword())) { return Result.error("密码不正确"); } //退出登录 - sysTenantService.exitUserTenant(sysUser.getId(),sysUser.getUsername(),String.valueOf(sysTenant.getId())); + sysTenantService.exitUserTenant(sysUser.getId(), sysUser.getUsername(), String.valueOf(sysTenant.getId())); return Result.ok("退出租户成功"); } /** * 变更租户拥有者【低代码应用专用接口】 + * * @param userId * @return */ @PostMapping("/changeOwenUserTenant") public Result changeOwenUserTenant(@RequestParam("userId") String userId, - @RequestParam("tenantId") String tenantId){ - sysTenantService.changeOwenUserTenant(userId,tenantId); + @RequestParam("tenantId") String tenantId) { + sysTenantService.changeOwenUserTenant(userId, tenantId); return Result.ok("退出租户成功"); } /** * 邀请用户到租户,通过手机号匹配 【低代码应用专用接口】 + * * @param phone * @param departId * @return */ @PostMapping("/invitationUser") - public Result invitationUser(@RequestParam(name="phone") String phone, - @RequestParam(name="departId",defaultValue = "") String departId){ - return sysTenantService.invitationUser(phone,departId); + public Result invitationUser(@RequestParam(name = "phone") String phone, + @RequestParam(name = "departId", defaultValue = "") String departId) { + return sysTenantService.invitationUser(phone, departId); } /** * 获取 租户产品包-3个默认admin的人员数量 + * * @param tenantId * @return */ @GetMapping("/loadAdminPackCount") - public Result> loadAdminPackCount(@RequestParam("tenantId") Integer tenantId){ + public Result> loadAdminPackCount(@RequestParam("tenantId") Integer tenantId) { List list = sysTenantService.queryTenantPackUserCount(tenantId); return Result.ok(list); } /** * 查询租户产品包信息 + * * @param packModel * @return */ @GetMapping("/getTenantPackInfo") - public Result getTenantPackInfo(TenantPackModel packModel){ + public Result getTenantPackInfo(TenantPackModel packModel) { TenantPackModel tenantPackModel = sysTenantService.queryTenantPack(packModel); return Result.ok(tenantPackModel); } @@ -730,22 +752,24 @@ public class SysTenantController { /** * 添加用户和产品包的关系数据 + * * @param sysTenantPackUser * @return */ @PostMapping("/addTenantPackUser") - public Result addTenantPackUser(@RequestBody SysTenantPackUser sysTenantPackUser){ + public Result addTenantPackUser(@RequestBody SysTenantPackUser sysTenantPackUser) { sysTenantService.addBatchTenantPackUser(sysTenantPackUser); return Result.ok("操作成功!"); } /** * 从产品包移除用户 + * * @param sysTenantPackUser * @return */ @PutMapping("/deleteTenantPackUser") - public Result deleteTenantPackUser(@RequestBody SysTenantPackUser sysTenantPackUser){ + public Result deleteTenantPackUser(@RequestBody SysTenantPackUser sysTenantPackUser) { sysTenantService.deleteTenantPackUser(sysTenantPackUser); return Result.ok("操作成功!"); } @@ -753,13 +777,14 @@ public class SysTenantController { /** * 修改申请状态 + * * @param sysTenant * @return */ @PutMapping("/updateApplyStatus") - public Result updateApplyStatus(@RequestBody SysTenant sysTenant){ + public Result updateApplyStatus(@RequestBody SysTenant sysTenant) { SysTenant entity = this.sysTenantService.getById(sysTenant.getId()); - if(entity==null){ + if (entity == null) { return Result.error("租户不存在!"); } entity.setApplyStatus(sysTenant.getApplyStatus()); @@ -770,71 +795,78 @@ public class SysTenantController { /** * 获取产品包人员申请列表 + * * @param tenantId * @return */ @GetMapping("/getTenantPackApplyUsers") - public Result getTenantPackApplyUsers(@RequestParam("tenantId") Integer tenantId){ + public Result getTenantPackApplyUsers(@RequestParam("tenantId") Integer tenantId) { List list = sysTenantService.getTenantPackApplyUsers(tenantId); return Result.ok(list); } /** * 个人 申请成为管理员 + * * @param sysTenantPackUser * @return */ @PostMapping("/doApplyTenantPackUser") - public Result doApplyTenantPackUser(@RequestBody SysTenantPackUser sysTenantPackUser){ + public Result doApplyTenantPackUser(@RequestBody SysTenantPackUser sysTenantPackUser) { sysTenantService.doApplyTenantPackUser(sysTenantPackUser); return Result.ok("申请成功!"); } /** * 申请通过 成为管理员 + * * @param sysTenantPackUser * @return */ @PutMapping("/passApply") - public Result passApply(@RequestBody SysTenantPackUser sysTenantPackUser){ + public Result passApply(@RequestBody SysTenantPackUser sysTenantPackUser) { sysTenantService.passApply(sysTenantPackUser); return Result.ok("操作成功!"); } /** - * 拒绝申请 成为管理员 + * 拒绝申请 成为管理员 + * * @param sysTenantPackUser * @return */ @PutMapping("/deleteApply") - public Result deleteApply(@RequestBody SysTenantPackUser sysTenantPackUser){ + public Result deleteApply(@RequestBody SysTenantPackUser sysTenantPackUser) { sysTenantService.deleteApply(sysTenantPackUser); return Result.ok(""); } /** * 查看是否已经申请过了超级管理员 + * * @return */ @GetMapping("/getApplySuperAdminCount") - public Result getApplySuperAdminCount(){ + public Result getApplySuperAdminCount() { Long count = sysTenantService.getApplySuperAdminCount(); return Result.ok(count); } /** * 进入应用组织页面 查询租户信息及当前用户是否有 管理员的权限-- + * * @param id * @return */ @RequestMapping(value = "/queryTenantAuthInfo", method = RequestMethod.GET) - public Result queryTenantAuthInfo(@RequestParam(name="id",required=true) String id) { + public Result queryTenantAuthInfo(@RequestParam(name = "id", required = true) String id) { TenantDepartAuthInfo info = sysTenantService.getTenantDepartAuthInfo(Integer.parseInt(id)); return Result.ok(info); } /** * 获取产品包下的用户列表(分页) + * * @param tenantId * @param packId * @param status @@ -846,10 +878,10 @@ public class SysTenantController { public Result> queryTenantPackUserList(@RequestParam("tenantId") String tenantId, @RequestParam("packId") String packId, @RequestParam("status") Integer status, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ - Page page = new Page<>(pageNo,pageSize); - IPage pageList = sysTenantService.queryTenantPackUserList(tenantId,packId,status,page); + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { + Page page = new Page<>(pageNo, pageSize); + IPage pageList = sysTenantService.queryTenantPackUserList(tenantId, packId, status, page); return Result.ok(pageList); } @@ -857,23 +889,23 @@ public class SysTenantController { * 获取当前租户下的部门和成员数量 */ @GetMapping("/getTenantCount") - public Result> getTenantCount(HttpServletRequest request){ - Map map = new HashMap<>(); + public Result> getTenantCount(HttpServletRequest request) { + Map map = new HashMap<>(); //update-begin---author:wangshuai---date:2023-11-24---for:【QQYUN-7177】用户数量显示不正确--- - if(oConvertUtils.isEmpty(TokenUtils.getTenantIdByRequest(request))){ + if (oConvertUtils.isEmpty(TokenUtils.getTenantIdByRequest(request))) { return Result.error("当前租户为空,禁止访问!"); } Integer tenantId = oConvertUtils.getInt(TokenUtils.getTenantIdByRequest(request)); - Long userCount = relationService.getUserCount(tenantId,CommonConstant.USER_TENANT_NORMAL); + Long userCount = relationService.getUserCount(tenantId, CommonConstant.USER_TENANT_NORMAL); //update-end---author:wangshuai---date:2023-11-24---for:【QQYUN-7177】用户数量显示不正确--- - map.put("userCount",userCount); + map.put("userCount", userCount); LambdaQueryWrapper departQuery = new LambdaQueryWrapper<>(); - departQuery.eq(SysDepart::getDelFlag,String.valueOf(CommonConstant.DEL_FLAG_0)); - departQuery.eq(SysDepart::getTenantId,tenantId); + departQuery.eq(SysDepart::getDelFlag, String.valueOf(CommonConstant.DEL_FLAG_0)); + departQuery.eq(SysDepart::getTenantId, tenantId); //部门状态暂时没用,先注释掉 //departQuery.eq(SysDepart::getStatus,CommonConstant.STATUS_1); long departCount = sysDepartService.count(departQuery); - map.put("departCount",departCount); + map.put("departCount", departCount); return Result.ok(map); } @@ -885,16 +917,16 @@ public class SysTenantController { */ @GetMapping("/getTenantPageListByUserId") public Result> getTenantPageListByUserId(SysUserTenantVo sysUserTenantVo, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); List list = null; String userTenantStatus = sysUserTenantVo.getUserTenantStatus(); if (oConvertUtils.isNotEmpty(userTenantStatus)) { list = Arrays.asList(userTenantStatus.split(SymbolConstant.COMMA)); } - Page page = new Page<>(pageNo,pageSize); - IPage pageList = relationService.getTenantPageListByUserId(page,sysUser.getId(),list,sysUserTenantVo); + Page page = new Page<>(pageNo, pageSize); + IPage pageList = relationService.getTenantPageListByUserId(page, sysUser.getId(), list, sysUserTenantVo); return Result.ok(pageList); } @@ -902,13 +934,13 @@ public class SysTenantController { * 同意或拒绝加入租户 */ @PutMapping("/agreeOrRefuseJoinTenant") - public Result agreeOrRefuseJoinTenant(@RequestParam("tenantId") Integer tenantId, - @RequestParam("status") String status){ + public Result agreeOrRefuseJoinTenant(@RequestParam("tenantId") Integer tenantId, + @RequestParam("status") String status) { //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); SysTenant tenant = sysTenantService.getById(tenantId); - if(null == tenant){ + if (null == tenant) { return Result.error("不存在该组织"); } SysUserTenant sysUserTenant = relationService.getUserTenantByTenantId(userId, tenantId); @@ -918,54 +950,55 @@ public class SysTenantController { String content = ""; SysUser user = new SysUser(); user.setUsername(sysUserTenant.getCreateBy()); - String realname = oConvertUtils.getString(sysUser.getRealname(),sysUser.getUsername()); + String realname = oConvertUtils.getString(sysUser.getRealname(), sysUser.getUsername()); //成功加入 - if(CommonConstant.USER_TENANT_NORMAL.equals(status)){ + if (CommonConstant.USER_TENANT_NORMAL.equals(status)) { //修改租户状态 - relationService.agreeJoinTenant(userId,tenantId); + relationService.agreeJoinTenant(userId, tenantId); content = content + realname + "已同意您发送的加入 " + tenant.getName() + " 的邀请"; sysTenantService.sendMsgForAgreeAndRefuseJoin(user, content); return Result.OK("您已同意该组织的邀请"); - }else if(CommonConstant.USER_TENANT_REFUSE.equals(status)){ + } else if (CommonConstant.USER_TENANT_REFUSE.equals(status)) { //直接删除关系表即可 - relationService.refuseJoinTenant(userId,tenantId); + relationService.refuseJoinTenant(userId, tenantId); content = content + realname + "拒绝了您发送的加入 " + tenant.getName() + " 的邀请"; sysTenantService.sendMsgForAgreeAndRefuseJoin(user, content); return Result.OK("您已成功拒绝该组织的邀请"); } return Result.error("类型不匹配,禁止修改数据"); } - + /** * 目前只给敲敲云租户下删除用户使用 - * + *

* 根据密码删除用户 */ @DeleteMapping("/deleteUserByPassword") - public Result deleteUserByPassword(@RequestBody SysUser sysUser,HttpServletRequest request){ + public Result deleteUserByPassword(@RequestBody SysUser sysUser, HttpServletRequest request) { Integer tenantId = oConvertUtils.getInteger(TokenUtils.getTenantIdByRequest(request), null); sysTenantService.deleteUserByPassword(sysUser, tenantId); return Result.ok("删除用户成功"); } /** - * 查询当前用户的所有有效租户【知识库专用接口】 + * 查询当前用户的所有有效租户【知识库专用接口】 + * * @return */ @RequestMapping(value = "/getCurrentUserTenantForFile", method = RequestMethod.GET) - public Result> getCurrentUserTenantForFile() { - Result> result = new Result>(); + public Result> getCurrentUserTenantForFile() { + Result> result = new Result>(); try { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); List tenantList = sysTenantService.getTenantListByUserId(sysUser.getId()); - Map map = new HashMap<>(5); + Map map = new HashMap<>(5); //在开启saas租户隔离的时候并且租户数据不为空,则返回租户信息 if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && CollectionUtil.isNotEmpty(tenantList)) { map.put("list", tenantList); } result.setSuccess(true); result.setResult(map); - }catch(Exception e) { + } catch (Exception e) { log.error(e.getMessage(), e); result.error500("查询失败!"); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUploadController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUploadController.java index a6efcf8..cb05336 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUploadController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUploadController.java @@ -1,5 +1,6 @@ package org.jeecg.modules.system.controller; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.common.exception.JeecgBootException; @@ -15,10 +16,9 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; -import jakarta.servlet.http.HttpServletRequest; - /** * minio文件上传示例 + * * @author: jeecg-boot */ @Slf4j @@ -30,6 +30,7 @@ public class SysUploadController { /** * 上传 + * * @param request */ @PostMapping(value = "/uploadMinio") @@ -43,7 +44,7 @@ public class SysUploadController { throw new JeecgBootException("上传目录bizPath,格式非法!"); } - if(oConvertUtils.isEmpty(bizPath)){ + if (oConvertUtils.isEmpty(bizPath)) { bizPath = ""; } MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; @@ -52,8 +53,8 @@ public class SysUploadController { // 获取文件名 String orgName = file.getOriginalFilename(); orgName = CommonUtils.getFileName(orgName); - String fileUrl = MinioUtil.upload(file,bizPath); - if(oConvertUtils.isEmpty(fileUrl)){ + String fileUrl = MinioUtil.upload(file, bizPath); + if (oConvertUtils.isEmpty(fileUrl)) { return Result.error("上传失败,请检查配置信息是否正确!"); } //保存文件信息 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java index 4ab7c84..7335dbf 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserAgentController.java @@ -1,20 +1,16 @@ package org.jeecg.modules.system.controller; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; - +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; -import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysUserAgent; import org.jeecg.modules.system.service.ISysUserAgentService; import org.jeecgframework.poi.excel.ExcelImportUtil; @@ -24,242 +20,238 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; -import lombok.extern.slf4j.Slf4j; - - /** +/** * @Title: Controller * @Description: 用户代理人设置 * @Author: jeecg-boot - * @Date: 2019-04-17 + * @Date: 2019-04-17 * @Version: V1.0 */ @RestController @RequestMapping("/sys/sysUserAgent") @Slf4j public class SysUserAgentController { - @Autowired - private ISysUserAgentService sysUserAgentService; + @Autowired + private ISysUserAgentService sysUserAgentService; - @Value("${jeecg.path.upload}") - private String upLoadPath; - - /** - * 分页列表查询 - * @param sysUserAgent - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @GetMapping(value = "/list") - public Result> queryPageList(SysUserAgent sysUserAgent, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - Result> result = new Result>(); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysUserAgent, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = sysUserAgentService.page(page, queryWrapper); - result.setSuccess(true); - result.setResult(pageList); - return result; - } - - /** - * 添加 - * @param sysUserAgent - * @return - */ - @PostMapping(value = "/add") - public Result add(@RequestBody SysUserAgent sysUserAgent) { - Result result = new Result(); - try { - sysUserAgentService.save(sysUserAgent); - result.success("代理人设置成功!"); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败"); - } - return result; - } - - /** - * 编辑 - * @param sysUserAgent - * @return - */ - @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) - public Result edit(@RequestBody SysUserAgent sysUserAgent) { - Result result = new Result(); - SysUserAgent sysUserAgentEntity = sysUserAgentService.getById(sysUserAgent.getId()); - if(sysUserAgentEntity==null) { - result.error500("未找到对应实体"); - }else { - boolean ok = sysUserAgentService.updateById(sysUserAgent); - //TODO 返回false说明什么? - if(ok) { - result.success("代理人设置成功!"); - } - } - - return result; - } - - /** - * 通过id删除 - * @param id - * @return - */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysUserAgent sysUserAgent = sysUserAgentService.getById(id); - if(sysUserAgent==null) { - result.error500("未找到对应实体"); - }else { - boolean ok = sysUserAgentService.removeById(id); - if(ok) { - result.success("删除成功!"); - } - } - - return result; - } - - /** - * 批量删除 - * @param ids - * @return - */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - Result result = new Result(); - if(ids==null || "".equals(ids.trim())) { - result.error500("参数不识别!"); - }else { - this.sysUserAgentService.removeByIds(Arrays.asList(ids.split(","))); - result.success("删除成功!"); - } - return result; - } - - /** - * 通过id查询 - * @param id - * @return - */ - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - SysUserAgent sysUserAgent = sysUserAgentService.getById(id); - if(sysUserAgent==null) { - result.error500("未找到对应实体"); - }else { - result.setResult(sysUserAgent); - result.setSuccess(true); - } - return result; - } - - /** - * 通过userName查询 - * @param userName - * @return - */ - @GetMapping(value = "/queryByUserName") - public Result queryByUserName(@RequestParam(name="userName",required=true) String userName) { - Result result = new Result(); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); - queryWrapper.eq(SysUserAgent::getUserName, userName); - SysUserAgent sysUserAgent = sysUserAgentService.getOne(queryWrapper); - if(sysUserAgent==null) { - result.error500("未找到对应实体"); - }else { - result.setResult(sysUserAgent); - result.setSuccess(true); - } - return result; - } + @Value("${jeecg.path.upload}") + private String upLoadPath; - /** - * 导出excel - * - * @param sysUserAgent - * @param request - */ - @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(SysUserAgent sysUserAgent,HttpServletRequest request) { - // Step.1 组装查询条件 - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysUserAgent, request.getParameterMap()); - //Step.2 AutoPoi 导出Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - List pageList = sysUserAgentService.list(queryWrapper); - //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "用户代理人设置列表"); - mv.addObject(NormalExcelConstants.CLASS, SysUserAgent.class); - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - ExportParams exportParams = new ExportParams("用户代理人设置列表数据", "导出人:"+user.getRealname(), "导出信息"); - exportParams.setImageBasePath(upLoadPath); - mv.addObject(NormalExcelConstants.PARAMS, exportParams); - mv.addObject(NormalExcelConstants.DATA_LIST, pageList); - return mv; - } + /** + * 分页列表查询 + * + * @param sysUserAgent + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/list") + public Result> queryPageList(SysUserAgent sysUserAgent, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysUserAgent, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysUserAgentService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } - /** - * 通过excel导入数据 - * - * @param request - * @param response - * @return - */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); - for (Map.Entry entity : fileMap.entrySet()) { - // 获取上传文件对象 - MultipartFile file = entity.getValue(); - ImportParams params = new ImportParams(); - params.setTitleRows(2); - params.setHeadRows(1); - params.setNeedSave(true); - try { - List listSysUserAgents = ExcelImportUtil.importExcel(file.getInputStream(), SysUserAgent.class, params); - for (SysUserAgent sysUserAgentExcel : listSysUserAgents) { - sysUserAgentService.save(sysUserAgentExcel); - } - return Result.ok("文件导入成功!数据行数:" + listSysUserAgents.size()); - } catch (Exception e) { - log.error(e.getMessage(),e); - return Result.error("文件导入失败!"); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - return Result.error("文件导入失败!"); - } + /** + * 添加 + * + * @param sysUserAgent + * @return + */ + @PostMapping(value = "/add") + public Result add(@RequestBody SysUserAgent sysUserAgent) { + Result result = new Result(); + try { + sysUserAgentService.save(sysUserAgent); + result.success("代理人设置成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * + * @param sysUserAgent + * @return + */ + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody SysUserAgent sysUserAgent) { + Result result = new Result(); + SysUserAgent sysUserAgentEntity = sysUserAgentService.getById(sysUserAgent.getId()); + if (sysUserAgentEntity == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = sysUserAgentService.updateById(sysUserAgent); + //TODO 返回false说明什么? + if (ok) { + result.success("代理人设置成功!"); + } + } + + return result; + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysUserAgent sysUserAgent = sysUserAgentService.getById(id); + if (sysUserAgent == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = sysUserAgentService.removeById(id); + if (ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.sysUserAgentService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysUserAgent sysUserAgent = sysUserAgentService.getById(id); + if (sysUserAgent == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(sysUserAgent); + result.setSuccess(true); + } + return result; + } + + /** + * 通过userName查询 + * + * @param userName + * @return + */ + @GetMapping(value = "/queryByUserName") + public Result queryByUserName(@RequestParam(name = "userName", required = true) String userName) { + Result result = new Result(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(SysUserAgent::getUserName, userName); + SysUserAgent sysUserAgent = sysUserAgentService.getOne(queryWrapper); + if (sysUserAgent == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(sysUserAgent); + result.setSuccess(true); + } + return result; + } + + /** + * 导出excel + * + * @param sysUserAgent + * @param request + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(SysUserAgent sysUserAgent, HttpServletRequest request) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysUserAgent, request.getParameterMap()); + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List pageList = sysUserAgentService.list(queryWrapper); + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "用户代理人设置列表"); + mv.addObject(NormalExcelConstants.CLASS, SysUserAgent.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + ExportParams exportParams = new ExportParams("用户代理人设置列表数据", "导出人:" + user.getRealname(), "导出信息"); + exportParams.setImageBasePath(upLoadPath); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + // 获取上传文件对象 + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List listSysUserAgents = ExcelImportUtil.importExcel(file.getInputStream(), SysUserAgent.class, params); + for (SysUserAgent sysUserAgentExcel : listSysUserAgents) { + sysUserAgentService.save(sysUserAgentExcel); + } + return Result.ok("文件导入成功!数据行数:" + listSysUserAgents.size()); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("文件导入失败!"); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserOnlineController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserOnlineController.java index f01684e..aa15b0d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserOnlineController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserOnlineController.java @@ -1,6 +1,7 @@ package org.jeecg.modules.system.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.shiro.SecurityUtils; @@ -20,7 +21,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -50,12 +50,12 @@ public class SysUserOnlineController { private BaseCommonService baseCommonService; @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result> list(@RequestParam(name="username", required=false) String username, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,@RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + public Result> list(@RequestParam(name = "username", required = false) String username, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { Collection keys = redisTemplate.keys(CommonConstant.PREFIX_USER_TOKEN + "*"); List onlineList = new ArrayList(); for (String key : keys) { - String token = (String)redisUtil.get(key); + String token = (String) redisUtil.get(key); if (StringUtils.isNotEmpty(token)) { SysUserOnlineVO online = new SysUserOnlineVO(); online.setToken(token); @@ -64,12 +64,12 @@ public class SysUserOnlineController { if (loginUser != null && !"_reserve_user_external".equals(loginUser.getUsername())) { //update-begin---author:wangshuai ---date:20220104 for:[JTC-382]在线用户查询无效------------ //验证用户名是否与传过来的用户名相同 - boolean isMatchUsername=true; + boolean isMatchUsername = true; //判断用户名是否为空,并且当前循环的用户不包含传过来的用户名,那么就设成false - if(oConvertUtils.isNotEmpty(username) && !loginUser.getUsername().contains(username)){ + if (oConvertUtils.isNotEmpty(username) && !loginUser.getUsername().contains(username)) { isMatchUsername = false; } - if(isMatchUsername){ + if (isMatchUsername) { BeanUtils.copyProperties(loginUser, online); onlineList.add(online); } @@ -103,17 +103,17 @@ public class SysUserOnlineController { /** * 强退用户 */ - @RequestMapping(value = "/forceLogout",method = RequestMethod.POST) + @RequestMapping(value = "/forceLogout", method = RequestMethod.POST) public Result forceLogout(@RequestBody SysUserOnlineVO online) { //用户退出逻辑 - if(oConvertUtils.isEmpty(online.getToken())) { + if (oConvertUtils.isEmpty(online.getToken())) { return Result.error("退出登录失败!"); } String username = JwtUtil.getUsername(online.getToken()); LoginUser sysUser = sysBaseApi.getUserByName(username); - if(sysUser!=null) { - baseCommonService.addLog("强制: "+sysUser.getRealname()+"退出成功!", CommonConstant.LOG_TYPE_1, null,sysUser); - log.info(" 强制 "+sysUser.getRealname()+"退出成功! "); + if (sysUser != null) { + baseCommonService.addLog("强制: " + sysUser.getRealname() + "退出成功!", CommonConstant.LOG_TYPE_1, null, sysUser); + log.info(" 强制 " + sysUser.getRealname() + "退出成功! "); //清空用户登录Token缓存 redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + online.getToken()); //清空用户登录Shiro权限缓存 @@ -123,7 +123,7 @@ public class SysUserOnlineController { //调用shiro的logout SecurityUtils.getSubject().logout(); return Result.ok("退出登录成功!"); - }else { + } else { return Result.error("Token无效!"); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java index f32860b..872fa45 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jeecg.dingtalk.api.core.response.Response; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.dto.message.MessageDTO; @@ -29,7 +30,6 @@ import org.jeecg.modules.system.vo.thirdapp.SyncInfoVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import jakarta.servlet.http.HttpServletRequest; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -37,6 +37,7 @@ import java.util.Map; /** * 第三方App对接 + * * @author: jeecg-boot */ @Slf4j @@ -74,13 +75,13 @@ public class ThirdAppController { boolean dingConfig = false; //企业微信是否已配置 boolean qywxConfig = false; - if(null != list && list.size()>0){ - for (SysThirdAppConfig config:list) { - if(MessageTypeEnum.DD.getType().equals(config.getThirdType())){ + if (null != list && list.size() > 0) { + for (SysThirdAppConfig config : list) { + if (MessageTypeEnum.DD.getType().equals(config.getThirdType())) { dingConfig = true; continue; } - if(MessageTypeEnum.QYWX.getType().equals(config.getThirdType())){ + if (MessageTypeEnum.QYWX.getType().equals(config.getThirdType())) { qywxConfig = true; continue; } @@ -102,10 +103,10 @@ public class ThirdAppController { public Result syncWechatEnterpriseUserToApp(@RequestParam(value = "ids", required = false) String ids) { //update-begin---author:wangshuai ---date:20230224 for:[QQYUN-3440]通过租户模式隔离 ------------ //获取企业微信配置 - Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant(),0); + Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); SysThirdAppConfig config = appConfigService.getThirdConfigByThirdType(tenantId, MessageTypeEnum.QYWX.getType()); if (null != config) { - //update-begin---author:wangshuai ---date:20230224 for:[QQYUN-3440]通过租户模式隔离 ------------ + //update-begin---author:wangshuai ---date:20230224 for:[QQYUN-3440]通过租户模式隔离 ------------ SyncInfoVo syncInfo = wechatEnterpriseService.syncLocalUserToThirdApp(ids); if (syncInfo.getFailInfo().size() == 0) { return Result.OK("同步成功", syncInfo); @@ -146,7 +147,7 @@ public class ThirdAppController { @GetMapping("/sync/wechatEnterprise/depart/toApp") public Result syncWechatEnterpriseDepartToApp(@RequestParam(value = "ids", required = false) String ids) { //获取企业微信配置 - Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant(),0); + Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); SysThirdAppConfig config = appConfigService.getThirdConfigByThirdType(tenantId, MessageTypeEnum.QYWX.getType()); if (null != config) { SyncInfoVo syncInfo = wechatEnterpriseService.syncLocalDepartmentToThirdApp(ids); @@ -191,7 +192,7 @@ public class ThirdAppController { @GetMapping("/sync/dingtalk/depart/toApp") public Result syncDingtalkDepartToApp(@RequestParam(value = "ids", required = false) String ids) { //获取钉钉配置 - Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant(),0); + Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); SysThirdAppConfig config = appConfigService.getThirdConfigByThirdType(tenantId, MessageTypeEnum.DD.getType()); if (null != config) { SyncInfoVo syncInfo = dingtalkService.syncLocalDepartmentToThirdApp(ids); @@ -237,8 +238,8 @@ public class ThirdAppController { //获取钉钉配置 int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); //根据租户id和第三方类别获取租户数据 - SysThirdAppConfig appConfig = appConfigService.getThirdConfigByThirdType(tenantId,MessageTypeEnum.DD.getType()); - if(null != appConfig){ + SysThirdAppConfig appConfig = appConfigService.getThirdConfigByThirdType(tenantId, MessageTypeEnum.DD.getType()); + if (null != appConfig) { SyncInfoVo syncInfo = dingtalkService.syncLocalUserToThirdApp(ids); if (syncInfo.getFailInfo().size() == 0) { return Result.OK("同步成功", syncInfo); @@ -288,7 +289,7 @@ public class ThirdAppController { // 消息内容 String content = params.getString("content"); // 租户id - int tenantId = oConvertUtils.getInt(TenantContext.getTenant(),0); + int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); String fromUser = JwtUtil.getUserNameByToken(request); String title = "第三方APP消息测试"; @@ -300,7 +301,7 @@ public class ThirdAppController { if (weChatType.toUpperCase().equals(app)) { SysThirdAppConfig config = appConfigService.getThirdConfigByThirdType(tenantId, weChatType); if (null != config) { - //update-end---author:wangshuai ---date:20230224 for:[QQYUN-3440]钉钉、企业微信通过租户模式隔离 ------------ + //update-end---author:wangshuai ---date:20230224 for:[QQYUN-3440]钉钉、企业微信通过租户模式隔离 ------------ JSONObject response = wechatEnterpriseService.sendMessageResponse(message, false); return Result.OK(response); } @@ -309,7 +310,7 @@ public class ThirdAppController { } else if (dingType.toUpperCase().equals(app)) { SysThirdAppConfig config = appConfigService.getThirdConfigByThirdType(tenantId, dingType); if (null != config) { - //update-end---author:wangshuai ---date:20230224 for:[QQYUN-3440]钉钉、企业微信通过租户模式隔离 ------------ + //update-end---author:wangshuai ---date:20230224 for:[QQYUN-3440]钉钉、企业微信通过租户模式隔离 ------------ Response response = dingtalkService.sendMessageResponse(message, false); return Result.OK(response); } @@ -331,7 +332,7 @@ public class ThirdAppController { // 消息id String msgTaskId = params.getString("msg_task_id"); //租户id - int tenantId = oConvertUtils.getInt(TenantContext.getTenant(),0); + int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); if (CommonConstant.WECHAT_ENTERPRISE.equals(app)) { SysThirdAppConfig config = appConfigService.getThirdConfigByThirdType(tenantId, MessageTypeEnum.QYWX.getType()); if (null != config) { @@ -354,6 +355,7 @@ public class ThirdAppController { } //========================begin 应用低代码钉钉/企业微信同步用户部门专用 ============================= + /** * 添加第三方app配置 * @@ -373,12 +375,12 @@ public class ThirdAppController { String clientId = appConfig.getClientId(); //通过应用key获取第三方配置 List thirdAppConfigByClientId = appConfigService.getThirdAppConfigByClientId(clientId); - if(CollectionUtil.isNotEmpty(thirdAppConfigByClientId)){ + if (CollectionUtil.isNotEmpty(thirdAppConfigByClientId)) { result.error500("AppKey已存在,请勿重复添加"); return result; } try { - appConfig.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(),0)); + appConfig.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(), 0)); appConfigService.save(appConfig); result.success("添加成功!"); } catch (Exception e) { @@ -404,10 +406,10 @@ public class ThirdAppController { } String clientId = appConfig.getClientId(); //如果编辑的应用key,和数据库中的不一致,需要判断应用key是否已存在 - if(!clientId.equals(config.getClientId())){ + if (!clientId.equals(config.getClientId())) { //通过应用key获取第三方配置 List thirdAppConfigByClientId = appConfigService.getThirdAppConfigByClientId(clientId); - if(CollectionUtil.isNotEmpty(thirdAppConfigByClientId)){ + if (CollectionUtil.isNotEmpty(thirdAppConfigByClientId)) { result.error500("AppKey已存在,请勿重复添加"); return result; } @@ -444,8 +446,8 @@ public class ThirdAppController { } Result result = new Result<>(); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysThirdAppConfig::getThirdType,thirdType); - query.eq(SysThirdAppConfig::getTenantId,tenantId); + query.eq(SysThirdAppConfig::getThirdType, thirdType); + query.eq(SysThirdAppConfig::getTenantId, tenantId); SysThirdAppConfig sysThirdAppConfig = appConfigService.getOne(query); result.setSuccess(true); result.setResult(sysThirdAppConfig); @@ -476,21 +478,23 @@ public class ThirdAppController { //========================begin 应用低代码账号设置第三方账号绑定 ================================ + /** * 获取第三方账号 + * * @param thirdType * @return */ @GetMapping("/getThirdAccountByUserId") - public Result> getThirdAccountByUserId(@RequestParam(name="thirdType") String thirdType){ + public Result> getThirdAccountByUserId(@RequestParam(name = "thirdType") String thirdType) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); //根据id查询 - query.eq(SysThirdAccount::getSysUserId,sysUser.getId()); + query.eq(SysThirdAccount::getSysUserId, sysUser.getId()); //扫码登录只有租户为0 - query.eq(SysThirdAccount::getTenantId,CommonConstant.TENANT_ID_DEFAULT_VALUE); + query.eq(SysThirdAccount::getTenantId, CommonConstant.TENANT_ID_DEFAULT_VALUE); //根据第三方类别查询 - if(oConvertUtils.isNotEmpty(thirdType)){ + if (oConvertUtils.isNotEmpty(thirdType)) { query.in(SysThirdAccount::getThirdType, Arrays.asList(thirdType.split(SymbolConstant.COMMA))); } List list = sysThirdAccountService.list(query); @@ -499,27 +503,29 @@ public class ThirdAppController { /** * 绑定第三方账号 + * * @return */ @PostMapping("/bindThirdAppAccount") - public Result bindThirdAppAccount(@RequestBody SysThirdAccount sysThirdAccount){ + public Result bindThirdAppAccount(@RequestBody SysThirdAccount sysThirdAccount) { SysThirdAccount thirdAccount = sysThirdAccountService.bindThirdAppAccountByUserId(sysThirdAccount); return Result.ok(thirdAccount); } /** * 删除第三方用户信息 + * * @param sysThirdAccount * @return */ @DeleteMapping("/deleteThirdAccount") - public Result deleteThirdAccountById(@RequestBody SysThirdAccount sysThirdAccount){ + public Result deleteThirdAccountById(@RequestBody SysThirdAccount sysThirdAccount) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - if(!sysUser.getId().equals(sysThirdAccount.getSysUserId())){ + if (!sysUser.getId().equals(sysThirdAccount.getSysUserId())) { return Result.error("无权修改他人信息"); } SysThirdAccount thirdAccount = sysThirdAccountService.getById(sysThirdAccount.getId()); - if(null == thirdAccount){ + if (null == thirdAccount) { return Result.error("未找到改第三方账户信息"); } sysThirdAccountService.removeById(thirdAccount.getId()); @@ -529,41 +535,44 @@ public class ThirdAppController { /** * 获取企业微信绑定的用户信息 + * * @param request * @return */ @GetMapping("/getThirdUserByWechat") - public Result getThirdUserByWechat(HttpServletRequest request){ + public Result getThirdUserByWechat(HttpServletRequest request) { //获取企业微信配置 - Integer tenantId = oConvertUtils.getInt(TokenUtils.getTenantIdByRequest(request),0); + Integer tenantId = oConvertUtils.getInt(TokenUtils.getTenantIdByRequest(request), 0); SysThirdAppConfig config = appConfigService.getThirdConfigByThirdType(tenantId, MessageTypeEnum.QYWX.getType()); if (null != config) { JwSysUserDepartVo list = wechatEnterpriseService.getThirdUserByWechat(tenantId); return Result.ok(list); } - return Result.error("企业微信尚未配置,请配置企业微信"); + return Result.error("企业微信尚未配置,请配置企业微信"); } /** * 同步企业微信部门和用户到本地 + * * @param jwUserDepartJson * @param request * @return */ @GetMapping("/sync/wechatEnterprise/departAndUser/toLocal") - public Result syncWechatEnterpriseDepartAndUserToLocal(@RequestParam(name = "jwUserDepartJson") String jwUserDepartJson,HttpServletRequest request){ + public Result syncWechatEnterpriseDepartAndUserToLocal(@RequestParam(name = "jwUserDepartJson") String jwUserDepartJson, HttpServletRequest request) { int tenantId = oConvertUtils.getInt(TokenUtils.getTenantIdByRequest(request), 0); - SyncInfoVo syncInfoVo = wechatEnterpriseService.syncWechatEnterpriseDepartAndUserToLocal(jwUserDepartJson,tenantId); + SyncInfoVo syncInfoVo = wechatEnterpriseService.syncWechatEnterpriseDepartAndUserToLocal(jwUserDepartJson, tenantId); return Result.ok(syncInfoVo); } /** * 查询被绑定的企业微信用户 + * * @param request * @return */ @GetMapping("/getThirdUserBindByWechat") - public Result> getThirdUserBindByWechat(HttpServletRequest request){ + public Result> getThirdUserBindByWechat(HttpServletRequest request) { int tenantId = oConvertUtils.getInt(TokenUtils.getTenantIdByRequest(request), 0); List jwSysUserDepartVos = wechatEnterpriseService.getThirdUserBindByWechat(tenantId); return Result.ok(jwSysUserDepartVos); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java index 98ff970..cabf1ba 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java @@ -6,6 +6,8 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xkcoding.justauth.AuthRequestFactory; import io.swagger.v3.oas.annotations.Operation; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthResponse; @@ -15,7 +17,10 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.enums.MessageTypeEnum; import org.jeecg.common.system.util.JwtUtil; -import org.jeecg.common.util.*; +import org.jeecg.common.util.CommonUtils; +import org.jeecg.common.util.PasswordUtil; +import org.jeecg.common.util.RedisUtil; +import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.base.service.BaseCommonService; import org.jeecg.modules.system.entity.SysThirdAccount; import org.jeecg.modules.system.entity.SysThirdAppConfig; @@ -32,8 +37,6 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; @@ -48,28 +51,28 @@ import java.util.List; @RequestMapping("/sys/thirdLogin") @Slf4j public class ThirdLoginController { - @Autowired - private ISysUserService sysUserService; - @Autowired - private ISysThirdAccountService sysThirdAccountService; - @Autowired - private ISysDictService sysDictService; - @Autowired - private BaseCommonService baseCommonService; - @Autowired + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysThirdAccountService sysThirdAccountService; + @Autowired + private ISysDictService sysDictService; + @Autowired + private BaseCommonService baseCommonService; + @Autowired private RedisUtil redisUtil; - @Autowired - private AuthRequestFactory factory; + @Autowired + private AuthRequestFactory factory; - @Autowired - private ThirdAppWechatEnterpriseServiceImpl thirdAppWechatEnterpriseService; - @Autowired - private ThirdAppDingtalkServiceImpl thirdAppDingtalkService; + @Autowired + private ThirdAppWechatEnterpriseServiceImpl thirdAppWechatEnterpriseService; + @Autowired + private ThirdAppDingtalkServiceImpl thirdAppDingtalkService; - @Autowired - private ISysThirdAppConfigService appConfigService; + @Autowired + private ISysThirdAppConfigService appConfigService; - @RequestMapping("/render/{source}") + @RequestMapping("/render/{source}") public void render(@PathVariable("source") String source, HttpServletResponse response) throws IOException { log.info("第三方登录进入render:" + source); AuthRequest authRequest = factory.get(source); @@ -78,308 +81,313 @@ public class ThirdLoginController { response.sendRedirect(authorizeUrl); } - @RequestMapping("/{source}/callback") - public String loginThird(@PathVariable("source") String source, AuthCallback callback,ModelMap modelMap) { - log.info("第三方登录进入callback:" + source + " params:" + JSONObject.toJSONString(callback)); + @RequestMapping("/{source}/callback") + public String loginThird(@PathVariable("source") String source, AuthCallback callback, ModelMap modelMap) { + log.info("第三方登录进入callback:" + source + " params:" + JSONObject.toJSONString(callback)); AuthRequest authRequest = factory.get(source); AuthResponse response = authRequest.login(callback); log.info(JSONObject.toJSONString(response)); Result result = new Result(); - if(response.getCode()==2000) { + if (response.getCode() == 2000) { - JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData())); - String username = data.getString("username"); - String avatar = data.getString("avatar"); - String uuid = data.getString("uuid"); - //构造第三方登录信息存储对象 - ThirdLoginModel tlm = new ThirdLoginModel(source, uuid, username, avatar); - //判断有没有这个人 - //update-begin-author:wangshuai date:20201118 for:修改成查询第三方账户表 - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysThirdAccount::getThirdType, source); - //update-begin---author:wangshuai---date:2023-10-07---for:【QQYUN-6667】敲敲云,线上解绑重新绑定一直提示这个--- - query.eq(SysThirdAccount::getTenantId, CommonConstant.TENANT_ID_DEFAULT_VALUE); - //update-end---author:wangshuai---date:2023-10-07---for:【QQYUN-6667】敲敲云,线上解绑重新绑定一直提示这个--- - query.and(q -> q.eq(SysThirdAccount::getThirdUserUuid, uuid).or().eq(SysThirdAccount::getThirdUserId, uuid)); - List thridList = sysThirdAccountService.list(query); - SysThirdAccount user = null; - if(thridList==null || thridList.size()==0) { - //否则直接创建新账号 - user = sysThirdAccountService.saveThirdUser(tlm,CommonConstant.TENANT_ID_DEFAULT_VALUE); - }else { - //已存在 只设置用户名 不设置头像 - user = thridList.get(0); - } - // 生成token - //update-begin-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号 - if(oConvertUtils.isNotEmpty(user.getSysUserId())) { - String sysUserId = user.getSysUserId(); - SysUser sysUser = sysUserService.getById(sysUserId); - String token = saveToken(sysUser); - modelMap.addAttribute("token", token); - }else{ - modelMap.addAttribute("token", "绑定手机号,"+""+uuid); - } - //update-end-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号 - //update-begin--Author:wangshuai Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441-------------------- - }else{ - modelMap.addAttribute("token", "登录失败"); - } - //update-end--Author:wangshuai Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441-------------------- + JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData())); + String username = data.getString("username"); + String avatar = data.getString("avatar"); + String uuid = data.getString("uuid"); + //构造第三方登录信息存储对象 + ThirdLoginModel tlm = new ThirdLoginModel(source, uuid, username, avatar); + //判断有没有这个人 + //update-begin-author:wangshuai date:20201118 for:修改成查询第三方账户表 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysThirdAccount::getThirdType, source); + //update-begin---author:wangshuai---date:2023-10-07---for:【QQYUN-6667】敲敲云,线上解绑重新绑定一直提示这个--- + query.eq(SysThirdAccount::getTenantId, CommonConstant.TENANT_ID_DEFAULT_VALUE); + //update-end---author:wangshuai---date:2023-10-07---for:【QQYUN-6667】敲敲云,线上解绑重新绑定一直提示这个--- + query.and(q -> q.eq(SysThirdAccount::getThirdUserUuid, uuid).or().eq(SysThirdAccount::getThirdUserId, uuid)); + List thridList = sysThirdAccountService.list(query); + SysThirdAccount user = null; + if (thridList == null || thridList.size() == 0) { + //否则直接创建新账号 + user = sysThirdAccountService.saveThirdUser(tlm, CommonConstant.TENANT_ID_DEFAULT_VALUE); + } else { + //已存在 只设置用户名 不设置头像 + user = thridList.get(0); + } + // 生成token + //update-begin-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号 + if (oConvertUtils.isNotEmpty(user.getSysUserId())) { + String sysUserId = user.getSysUserId(); + SysUser sysUser = sysUserService.getById(sysUserId); + String token = saveToken(sysUser); + modelMap.addAttribute("token", token); + } else { + modelMap.addAttribute("token", "绑定手机号," + "" + uuid); + } + //update-end-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号 + //update-begin--Author:wangshuai Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441-------------------- + } else { + modelMap.addAttribute("token", "登录失败"); + } + //update-end--Author:wangshuai Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441-------------------- result.setSuccess(false); result.setMessage("第三方登录异常,请联系管理员"); return "thirdLogin"; } - /** - * 创建新账号 - * @param model - * @return - */ - @PostMapping("/user/create") - @ResponseBody - public Result thirdUserCreate(@RequestBody ThirdLoginModel model) { - log.info("第三方登录创建新账号:" ); - Result res = new Result<>(); - Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); - if(operateCode==null || !operateCode.toString().equals(model.getOperateCode())){ - res.setSuccess(false); - res.setMessage("校验失败"); - return res; - } - //创建新账号 - //update-begin-author:wangshuai date:20201118 for:修改成从第三方登录查出来的user_id,在查询用户表尽行token - SysThirdAccount user = sysThirdAccountService.saveThirdUser(model,CommonConstant.TENANT_ID_DEFAULT_VALUE); - if(oConvertUtils.isNotEmpty(user.getSysUserId())){ - String sysUserId = user.getSysUserId(); - SysUser sysUser = sysUserService.getById(sysUserId); - // 生成token - String token = saveToken(sysUser); - //update-end-author:wangshuai date:20201118 for:修改成从第三方登录查出来的user_id,在查询用户表尽行token - res.setResult(token); - res.setSuccess(true); - } - return res; - } + /** + * 创建新账号 + * + * @param model + * @return + */ + @PostMapping("/user/create") + @ResponseBody + public Result thirdUserCreate(@RequestBody ThirdLoginModel model) { + log.info("第三方登录创建新账号:"); + Result res = new Result<>(); + Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); + if (operateCode == null || !operateCode.toString().equals(model.getOperateCode())) { + res.setSuccess(false); + res.setMessage("校验失败"); + return res; + } + //创建新账号 + //update-begin-author:wangshuai date:20201118 for:修改成从第三方登录查出来的user_id,在查询用户表尽行token + SysThirdAccount user = sysThirdAccountService.saveThirdUser(model, CommonConstant.TENANT_ID_DEFAULT_VALUE); + if (oConvertUtils.isNotEmpty(user.getSysUserId())) { + String sysUserId = user.getSysUserId(); + SysUser sysUser = sysUserService.getById(sysUserId); + // 生成token + String token = saveToken(sysUser); + //update-end-author:wangshuai date:20201118 for:修改成从第三方登录查出来的user_id,在查询用户表尽行token + res.setResult(token); + res.setSuccess(true); + } + return res; + } - /** - * 绑定账号 需要设置密码 需要走一遍校验 - * @param json - * @return - */ - @PostMapping("/user/checkPassword") - @ResponseBody - public Result checkPassword(@RequestBody JSONObject json) { - Result result = new Result<>(); - Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); - if(operateCode==null || !operateCode.toString().equals(json.getString("operateCode"))){ - result.setSuccess(false); - result.setMessage("校验失败"); - return result; - } - String username = json.getString("uuid"); - SysUser user = this.sysUserService.getUserByName(username); - if(user==null){ - result.setMessage("用户未找到"); - result.setSuccess(false); - return result; - } - String password = json.getString("password"); - String salt = user.getSalt(); - String passwordEncode = PasswordUtil.encrypt(user.getUsername(), password, salt); - if(!passwordEncode.equals(user.getPassword())){ - result.setMessage("密码不正确"); - result.setSuccess(false); - return result; - } + /** + * 绑定账号 需要设置密码 需要走一遍校验 + * + * @param json + * @return + */ + @PostMapping("/user/checkPassword") + @ResponseBody + public Result checkPassword(@RequestBody JSONObject json) { + Result result = new Result<>(); + Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); + if (operateCode == null || !operateCode.toString().equals(json.getString("operateCode"))) { + result.setSuccess(false); + result.setMessage("校验失败"); + return result; + } + String username = json.getString("uuid"); + SysUser user = this.sysUserService.getUserByName(username); + if (user == null) { + result.setMessage("用户未找到"); + result.setSuccess(false); + return result; + } + String password = json.getString("password"); + String salt = user.getSalt(); + String passwordEncode = PasswordUtil.encrypt(user.getUsername(), password, salt); + if (!passwordEncode.equals(user.getPassword())) { + result.setMessage("密码不正确"); + result.setSuccess(false); + return result; + } - sysUserService.updateById(user); - result.setSuccess(true); - // 生成token - String token = saveToken(user); - result.setResult(token); - return result; - } + sysUserService.updateById(user); + result.setSuccess(true); + // 生成token + String token = saveToken(user); + result.setResult(token); + return result; + } - private String saveToken(SysUser user) { - // 生成token - String token = JwtUtil.sign(user.getUsername(), user.getPassword()); - redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); - // 设置超时时间 - redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); - return token; - } + private String saveToken(SysUser user) { + // 生成token + String token = JwtUtil.sign(user.getUsername(), user.getPassword()); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + // 设置超时时间 + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); + return token; + } - /** - * 第三方登录回调接口 - * @param token - * @param thirdType - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - @RequestMapping(value = "/getLoginUser/{token}/{thirdType}/{tenantId}", method = RequestMethod.GET) - @ResponseBody - public Result getThirdLoginUser(@PathVariable("token") String token,@PathVariable("thirdType") String thirdType,@PathVariable("tenantId") String tenantId) throws Exception { - Result result = new Result(); - String username = JwtUtil.getUsername(token); + /** + * 第三方登录回调接口 + * + * @param token + * @param thirdType + * @return + * @throws Exception + */ + @SuppressWarnings("unchecked") + @RequestMapping(value = "/getLoginUser/{token}/{thirdType}/{tenantId}", method = RequestMethod.GET) + @ResponseBody + public Result getThirdLoginUser(@PathVariable("token") String token, @PathVariable("thirdType") String thirdType, @PathVariable("tenantId") String tenantId) throws Exception { + Result result = new Result(); + String username = JwtUtil.getUsername(token); - //1. 校验用户是否有效 - SysUser sysUser = sysUserService.getUserByName(username); - result = sysUserService.checkUserIsEffective(sysUser); - if(!result.isSuccess()) { - return result; - } - //update-begin-author:wangshuai date:20201118 for:如果真实姓名和头像不存在就取第三方登录的 - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysThirdAccount::getSysUserId,sysUser.getId()); - query.eq(SysThirdAccount::getThirdType,thirdType); - query.eq(SysThirdAccount::getTenantId,oConvertUtils.getInt(tenantId,CommonConstant.TENANT_ID_DEFAULT_VALUE)); - //update-begin---author:wangshuai ---date:20230328 for:[QQYUN-4883]钉钉auth登录同一个租户下有同一个用户id------------ - List accountList = sysThirdAccountService.list(query); - SysThirdAccount account = new SysThirdAccount(); - if(CollectionUtil.isNotEmpty(accountList)){ - account = accountList.get(0); - } - //update-end---author:wangshuai ---date:20230328 for:[QQYUN-4883]钉钉auth登录同一个租户下有同一个用户id------------ - if(oConvertUtils.isEmpty(sysUser.getRealname())){ - sysUser.setRealname(account.getRealname()); - } - if(oConvertUtils.isEmpty(sysUser.getAvatar())){ - sysUser.setAvatar(account.getAvatar()); - } - //update-end-author:wangshuai date:20201118 for:如果真实姓名和头像不存在就取第三方登录的 - JSONObject obj = new JSONObject(); - //TODO 第三方登确定登录租户和部门逻辑 + //1. 校验用户是否有效 + SysUser sysUser = sysUserService.getUserByName(username); + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + return result; + } + //update-begin-author:wangshuai date:20201118 for:如果真实姓名和头像不存在就取第三方登录的 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysThirdAccount::getSysUserId, sysUser.getId()); + query.eq(SysThirdAccount::getThirdType, thirdType); + query.eq(SysThirdAccount::getTenantId, oConvertUtils.getInt(tenantId, CommonConstant.TENANT_ID_DEFAULT_VALUE)); + //update-begin---author:wangshuai ---date:20230328 for:[QQYUN-4883]钉钉auth登录同一个租户下有同一个用户id------------ + List accountList = sysThirdAccountService.list(query); + SysThirdAccount account = new SysThirdAccount(); + if (CollectionUtil.isNotEmpty(accountList)) { + account = accountList.get(0); + } + //update-end---author:wangshuai ---date:20230328 for:[QQYUN-4883]钉钉auth登录同一个租户下有同一个用户id------------ + if (oConvertUtils.isEmpty(sysUser.getRealname())) { + sysUser.setRealname(account.getRealname()); + } + if (oConvertUtils.isEmpty(sysUser.getAvatar())) { + sysUser.setAvatar(account.getAvatar()); + } + //update-end-author:wangshuai date:20201118 for:如果真实姓名和头像不存在就取第三方登录的 + JSONObject obj = new JSONObject(); + //TODO 第三方登确定登录租户和部门逻辑 - //用户登录信息 - obj.put("userInfo", sysUser); - //获取字典缓存【解决 #jeecg-boot/issues/3998】 - obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); - //token 信息 - obj.put("token", token); - result.setResult(obj); - result.setSuccess(true); - result.setCode(200); - baseCommonService.addLog("用户名: " + username + ",登录成功[第三方用户]!", CommonConstant.LOG_TYPE_1, null); - return result; - } - /** - * 第三方绑定手机号返回token - * - * @param jsonObject - * @return - */ - @Operation(summary ="手机号登录接口") - @PostMapping("/bindingThirdPhone") - @ResponseBody - public Result bindingThirdPhone(@RequestBody JSONObject jsonObject) { - Result result = new Result(); - String phone = jsonObject.getString("mobile"); - String thirdUserUuid = jsonObject.getString("thirdUserUuid"); - // 校验验证码 - String captcha = jsonObject.getString("captcha"); - //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE+phone; - Object captchaCache = redisUtil.get(redisKey); - //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - if (oConvertUtils.isEmpty(captcha) || !captcha.equals(captchaCache)) { - result.setMessage("验证码错误"); - result.setSuccess(false); - return result; - } - //校验用户有效性 - SysUser sysUser = sysUserService.getUserByPhone(phone); - if(sysUser != null){ - // 存在用户,直接绑定 - sysThirdAccountService.updateThirdUserId(sysUser,thirdUserUuid); - }else{ - // 不存在手机号,创建用户 - sysUser = sysThirdAccountService.createUser(phone,thirdUserUuid,CommonConstant.TENANT_ID_DEFAULT_VALUE); - } - String token = saveToken(sysUser); - result.setSuccess(true); - result.setResult(token); - return result; - } + //用户登录信息 + obj.put("userInfo", sysUser); + //获取字典缓存【解决 #jeecg-boot/issues/3998】 + obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); + //token 信息 + obj.put("token", token); + result.setResult(obj); + result.setSuccess(true); + result.setCode(200); + baseCommonService.addLog("用户名: " + username + ",登录成功[第三方用户]!", CommonConstant.LOG_TYPE_1, null); + return result; + } - /** - * 企业微信/钉钉 OAuth2登录 - * - * @param source - * @param state - * @return - */ - @ResponseBody - @GetMapping("/oauth2/{source}/login") - public String oauth2LoginCallback(@PathVariable("source") String source, @RequestParam("state") String state, HttpServletRequest request, HttpServletResponse response, - @RequestParam(value = "tenantId",required = false,defaultValue = "0") String tenantId) throws Exception { - String url; - //应用id为空,说明没有配置lowAppId - if(oConvertUtils.isEmpty(tenantId)){ - return "租户编码未配置"; - } - if (CommonConstant.WECHAT_ENTERPRISE.equalsIgnoreCase(source)) { - //换成第三方app配置表 - SysThirdAppConfig config = appConfigService.getThirdConfigByThirdType(Integer.valueOf(tenantId), MessageTypeEnum.QYWX.getType()); - if(null == config){ - return "还未配置企业微信应用,请配置企业微信应用"; - } - StringBuilder builder = new StringBuilder(); - // 构造企业微信OAuth2登录授权地址 - builder.append("https://open.weixin.qq.com/connect/oauth2/authorize"); - // 企业的CorpID - builder.append("?appid=").append(config.getClientId()); - // 授权后重定向的回调链接地址,请使用urlencode对链接进行处理 - String redirectUri = CommonUtils.getBaseUrl(request) + "/sys/thirdLogin/oauth2/wechat_enterprise/callback?tenantId="+tenantId;; - builder.append("&redirect_uri=").append(URLEncoder.encode(redirectUri, "UTF-8")); - // 返回类型,此时固定为:code - builder.append("&response_type=code"); - // 应用授权作用域。 - // snsapi_base:静默授权,可获取成员的的基础信息(UserId与DeviceId); - builder.append("&scope=snsapi_base"); - // 重定向后会带上state参数,长度不可超过128个字节 - builder.append("&state=").append(state); - // 终端使用此参数判断是否需要带上身份信息 - builder.append("#wechat_redirect"); - url = builder.toString(); - } else if (CommonConstant.DINGTALK.equalsIgnoreCase(source)) { - //update-begin---author:wangshuai ---date:20230224 for:[QQYUN-3440]新建企业微信和钉钉配置表,通过租户模式隔离------------ - //换成第三方app配置表 - SysThirdAppConfig appConfig = appConfigService.getThirdConfigByThirdType(Integer.valueOf(tenantId), MessageTypeEnum.DD.getType()); - if(null == appConfig){ - return "还未配置钉钉应用,请配置钉钉应用"; - } - //update-end---author:wangshuai ---date:20230224 for:[QQYUN-3440]新建企业微信和钉钉配置表,通过租户模式隔离------------ - StringBuilder builder = new StringBuilder(); - // 构造钉钉OAuth2登录授权地址 - builder.append("https://login.dingtalk.com/oauth2/auth"); - // 授权通过/拒绝后回调地址。 - // 注意 需要与注册应用时登记的域名保持一致。 - String redirectUri = CommonUtils.getBaseUrl(request) + "/sys/thirdLogin/oauth2/dingtalk/callback?tenantId="+tenantId; - builder.append("?redirect_uri=").append(URLEncoder.encode(redirectUri, "UTF-8")); - // 固定值为code。 - // 授权通过后返回authCode。 - builder.append("&response_type=code"); - // 步骤一中创建的应用详情中获取。 - // 企业内部应用:client_id为应用的AppKey。 - builder.append("&client_id=").append(appConfig.getClientId()); - // 授权范围,授权页面显示的授权信息以应用注册时配置的为准。 - // openid:授权后可获得用户userid - builder.append("&scope=openid"); - // 跟随authCode原样返回。 - builder.append("&state=").append(state); + /** + * 第三方绑定手机号返回token + * + * @param jsonObject + * @return + */ + @Operation(summary = "手机号登录接口") + @PostMapping("/bindingThirdPhone") + @ResponseBody + public Result bindingThirdPhone(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + String phone = jsonObject.getString("mobile"); + String thirdUserUuid = jsonObject.getString("thirdUserUuid"); + // 校验验证码 + String captcha = jsonObject.getString("captcha"); + //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 + String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + phone; + Object captchaCache = redisUtil.get(redisKey); + //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 + if (oConvertUtils.isEmpty(captcha) || !captcha.equals(captchaCache)) { + result.setMessage("验证码错误"); + result.setSuccess(false); + return result; + } + //校验用户有效性 + SysUser sysUser = sysUserService.getUserByPhone(phone); + if (sysUser != null) { + // 存在用户,直接绑定 + sysThirdAccountService.updateThirdUserId(sysUser, thirdUserUuid); + } else { + // 不存在手机号,创建用户 + sysUser = sysThirdAccountService.createUser(phone, thirdUserUuid, CommonConstant.TENANT_ID_DEFAULT_VALUE); + } + String token = saveToken(sysUser); + result.setSuccess(true); + result.setResult(token); + return result; + } + + /** + * 企业微信/钉钉 OAuth2登录 + * + * @param source + * @param state + * @return + */ + @ResponseBody + @GetMapping("/oauth2/{source}/login") + public String oauth2LoginCallback(@PathVariable("source") String source, @RequestParam("state") String state, HttpServletRequest request, HttpServletResponse response, + @RequestParam(value = "tenantId", required = false, defaultValue = "0") String tenantId) throws Exception { + String url; + //应用id为空,说明没有配置lowAppId + if (oConvertUtils.isEmpty(tenantId)) { + return "租户编码未配置"; + } + if (CommonConstant.WECHAT_ENTERPRISE.equalsIgnoreCase(source)) { + //换成第三方app配置表 + SysThirdAppConfig config = appConfigService.getThirdConfigByThirdType(Integer.valueOf(tenantId), MessageTypeEnum.QYWX.getType()); + if (null == config) { + return "还未配置企业微信应用,请配置企业微信应用"; + } + StringBuilder builder = new StringBuilder(); + // 构造企业微信OAuth2登录授权地址 + builder.append("https://open.weixin.qq.com/connect/oauth2/authorize"); + // 企业的CorpID + builder.append("?appid=").append(config.getClientId()); + // 授权后重定向的回调链接地址,请使用urlencode对链接进行处理 + String redirectUri = CommonUtils.getBaseUrl(request) + "/sys/thirdLogin/oauth2/wechat_enterprise/callback?tenantId=" + tenantId; + ; + builder.append("&redirect_uri=").append(URLEncoder.encode(redirectUri, "UTF-8")); + // 返回类型,此时固定为:code + builder.append("&response_type=code"); + // 应用授权作用域。 + // snsapi_base:静默授权,可获取成员的的基础信息(UserId与DeviceId); + builder.append("&scope=snsapi_base"); + // 重定向后会带上state参数,长度不可超过128个字节 + builder.append("&state=").append(state); + // 终端使用此参数判断是否需要带上身份信息 + builder.append("#wechat_redirect"); + url = builder.toString(); + } else if (CommonConstant.DINGTALK.equalsIgnoreCase(source)) { + //update-begin---author:wangshuai ---date:20230224 for:[QQYUN-3440]新建企业微信和钉钉配置表,通过租户模式隔离------------ + //换成第三方app配置表 + SysThirdAppConfig appConfig = appConfigService.getThirdConfigByThirdType(Integer.valueOf(tenantId), MessageTypeEnum.DD.getType()); + if (null == appConfig) { + return "还未配置钉钉应用,请配置钉钉应用"; + } + //update-end---author:wangshuai ---date:20230224 for:[QQYUN-3440]新建企业微信和钉钉配置表,通过租户模式隔离------------ + StringBuilder builder = new StringBuilder(); + // 构造钉钉OAuth2登录授权地址 + builder.append("https://login.dingtalk.com/oauth2/auth"); + // 授权通过/拒绝后回调地址。 + // 注意 需要与注册应用时登记的域名保持一致。 + String redirectUri = CommonUtils.getBaseUrl(request) + "/sys/thirdLogin/oauth2/dingtalk/callback?tenantId=" + tenantId; + builder.append("?redirect_uri=").append(URLEncoder.encode(redirectUri, "UTF-8")); + // 固定值为code。 + // 授权通过后返回authCode。 + builder.append("&response_type=code"); + // 步骤一中创建的应用详情中获取。 + // 企业内部应用:client_id为应用的AppKey。 + builder.append("&client_id=").append(appConfig.getClientId()); + // 授权范围,授权页面显示的授权信息以应用注册时配置的为准。 + // openid:授权后可获得用户userid + builder.append("&scope=openid"); + // 跟随authCode原样返回。 + builder.append("&state=").append(state); //update-begin---author:wangshuai ---date:20220613 for:[issues/I5BOUF]oauth2 钉钉无法登录------------ builder.append("&prompt=").append("consent"); //update-end---author:wangshuai ---date:20220613 for:[issues/I5BOUF]oauth2 钉钉无法登录-------------- url = builder.toString(); - } else { - return "不支持的source"; - } - log.info("oauth2 login url:" + url); - response.sendRedirect(url); - return "login…"; - } + } else { + return "不支持的source"; + } + log.info("oauth2 login url:" + url); + response.sendRedirect(url); + return "login…"; + } /** * 企业微信/钉钉 OAuth2登录回调 @@ -389,57 +397,57 @@ public class ThirdLoginController { * @param response * @return */ - @ResponseBody - @GetMapping("/oauth2/{source}/callback") - public String oauth2LoginCallback( - @PathVariable("source") String source, - // 企业微信返回的code - @RequestParam(value = "code", required = false) String code, - // 钉钉返回的code - @RequestParam(value = "authCode", required = false) String authCode, - @RequestParam("state") String state, - @RequestParam(name = "tenantId",defaultValue = "0") String tenantId, - HttpServletResponse response) { + @ResponseBody + @GetMapping("/oauth2/{source}/callback") + public String oauth2LoginCallback( + @PathVariable("source") String source, + // 企业微信返回的code + @RequestParam(value = "code", required = false) String code, + // 钉钉返回的code + @RequestParam(value = "authCode", required = false) String authCode, + @RequestParam("state") String state, + @RequestParam(name = "tenantId", defaultValue = "0") String tenantId, + HttpServletResponse response) { SysUser loginUser; if (CommonConstant.WECHAT_ENTERPRISE.equalsIgnoreCase(source)) { log.info("【企业微信】OAuth2登录进入callback:code=" + code + ", state=" + state); - loginUser = thirdAppWechatEnterpriseService.oauth2Login(code,Integer.valueOf(tenantId)); + loginUser = thirdAppWechatEnterpriseService.oauth2Login(code, Integer.valueOf(tenantId)); if (loginUser == null) { return "登录失败"; } } else if (CommonConstant.DINGTALK.equalsIgnoreCase(source)) { - log.info("【钉钉】OAuth2登录进入callback:authCode=" + authCode + ", state=" + state); - loginUser = thirdAppDingtalkService.oauth2Login(authCode,Integer.valueOf(tenantId)); - if (loginUser == null) { - return "登录失败"; - } + log.info("【钉钉】OAuth2登录进入callback:authCode=" + authCode + ", state=" + state); + loginUser = thirdAppDingtalkService.oauth2Login(authCode, Integer.valueOf(tenantId)); + if (loginUser == null) { + return "登录失败"; + } } else { return "不支持的source"; } try { - //update-begin-author:taoyan date:2022-6-30 for: 工作流发送消息 点击消息链接跳转办理页面 - String redirect = ""; - if (state.indexOf("?") > 0) { - String[] arr = state.split("\\?"); - state = arr[0]; - if(arr.length>1){ - redirect = arr[1]; - } - } + //update-begin-author:taoyan date:2022-6-30 for: 工作流发送消息 点击消息链接跳转办理页面 + String redirect = ""; + if (state.indexOf("?") > 0) { + String[] arr = state.split("\\?"); + state = arr[0]; + if (arr.length > 1) { + redirect = arr[1]; + } + } - String token = saveToken(loginUser); - state += "/oauth2-app/login?oauth2LoginToken=" + URLEncoder.encode(token, "UTF-8") + "&tenantId=" + URLEncoder.encode(tenantId, "UTF-8"); - //update-begin---author:wangshuai ---date:20220613 for:[issues/I5BOUF]oauth2 钉钉无法登录------------ - state += "&thirdType=" + source; - //state += "&thirdType=" + "wechat_enterprise"; - if (redirect != null && redirect.length() > 0) { - state += "&" + redirect; - } - //update-end-author:taoyan date:2022-6-30 for: 工作流发送消息 点击消息链接跳转办理页面 + String token = saveToken(loginUser); + state += "/oauth2-app/login?oauth2LoginToken=" + URLEncoder.encode(token, "UTF-8") + "&tenantId=" + URLEncoder.encode(tenantId, "UTF-8"); + //update-begin---author:wangshuai ---date:20220613 for:[issues/I5BOUF]oauth2 钉钉无法登录------------ + state += "&thirdType=" + source; + //state += "&thirdType=" + "wechat_enterprise"; + if (redirect != null && redirect.length() > 0) { + state += "&" + redirect; + } + //update-end-author:taoyan date:2022-6-30 for: 工作流发送消息 点击消息链接跳转办理页面 //update-end---author:wangshuai ---date:20220613 for:[issues/I5BOUF]oauth2 钉钉无法登录------------ - log.info("OAuth2登录重定向地址: " + state); + log.info("OAuth2登录重定向地址: " + state); try { response.sendRedirect(state); return "ok"; @@ -453,79 +461,80 @@ public class ThirdLoginController { } } - /** - * 注册账号并绑定第三方账号 【低代码应用专用接口】 - * @param jsonObject - * @param user - * @return - */ - @ResponseBody - @PutMapping("/registerBindThirdAccount") - public Result registerBindThirdAccount(@RequestBody JSONObject jsonObject, SysUser user) { - //手机号 - String phone = jsonObject.getString("phone"); - //验证码 - String smscode = jsonObject.getString("smscode"); - String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + phone; - Object code = redisUtil.get(redisKey); - //第三方uuid - String thirdUserUuid = jsonObject.getString("thirdUserUuid"); - String username = jsonObject.getString("username"); - //未设置用户名,则用手机号作为用户名 - if (oConvertUtils.isEmpty(username)) { - username = phone; - } - //未设置密码,则随机生成一个密码 - String password = jsonObject.getString("password"); - if (oConvertUtils.isEmpty(password)) { - password = RandomUtil.randomString(8); - } - String email = jsonObject.getString("email"); - SysUser sysUser1 = sysUserService.getUserByName(username); - if (sysUser1 != null) { - return Result.error("用户名已注册"); - } - SysUser sysUser2 = sysUserService.getUserByPhone(phone); - if (sysUser2 != null) { - return Result.error("该手机号已注册"); - } - if (oConvertUtils.isNotEmpty(email)) { - SysUser sysUser3 = sysUserService.getUserByEmail(email); - if (sysUser3 != null) { - return Result.error("邮箱已被注册"); - } - } - if (null == code) { - return Result.error("手机验证码失效,请重新获取"); - } - if (!smscode.equals(code.toString())) { - return Result.error("手机验证码错误"); - } - String realname = jsonObject.getString("realname"); - if (oConvertUtils.isEmpty(realname)) { - realname = username; - } - try { - //保存用户表 - user.setCreateTime(new Date()); - String salt = oConvertUtils.randomGen(8); - String passwordEncode = PasswordUtil.encrypt(username, password, salt); - user.setSalt(salt); - user.setUsername(username); - user.setRealname(realname); - user.setPassword(passwordEncode); - user.setEmail(email); - user.setPhone(phone); - user.setStatus(CommonConstant.USER_UNFREEZE); - user.setDelFlag(CommonConstant.DEL_FLAG_0); - user.setActivitiSync(CommonConstant.ACT_SYNC_1); - sysUserService.addUserWithRole(user, ""); - //保存第三方用户表 - sysThirdAccountService.updateThirdUserId(user, thirdUserUuid); - String token = saveToken(user); - return Result.ok(token); - } catch (Exception e) { - return Result.error("注册失败"); - } - } + /** + * 注册账号并绑定第三方账号 【低代码应用专用接口】 + * + * @param jsonObject + * @param user + * @return + */ + @ResponseBody + @PutMapping("/registerBindThirdAccount") + public Result registerBindThirdAccount(@RequestBody JSONObject jsonObject, SysUser user) { + //手机号 + String phone = jsonObject.getString("phone"); + //验证码 + String smscode = jsonObject.getString("smscode"); + String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + phone; + Object code = redisUtil.get(redisKey); + //第三方uuid + String thirdUserUuid = jsonObject.getString("thirdUserUuid"); + String username = jsonObject.getString("username"); + //未设置用户名,则用手机号作为用户名 + if (oConvertUtils.isEmpty(username)) { + username = phone; + } + //未设置密码,则随机生成一个密码 + String password = jsonObject.getString("password"); + if (oConvertUtils.isEmpty(password)) { + password = RandomUtil.randomString(8); + } + String email = jsonObject.getString("email"); + SysUser sysUser1 = sysUserService.getUserByName(username); + if (sysUser1 != null) { + return Result.error("用户名已注册"); + } + SysUser sysUser2 = sysUserService.getUserByPhone(phone); + if (sysUser2 != null) { + return Result.error("该手机号已注册"); + } + if (oConvertUtils.isNotEmpty(email)) { + SysUser sysUser3 = sysUserService.getUserByEmail(email); + if (sysUser3 != null) { + return Result.error("邮箱已被注册"); + } + } + if (null == code) { + return Result.error("手机验证码失效,请重新获取"); + } + if (!smscode.equals(code.toString())) { + return Result.error("手机验证码错误"); + } + String realname = jsonObject.getString("realname"); + if (oConvertUtils.isEmpty(realname)) { + realname = username; + } + try { + //保存用户表 + user.setCreateTime(new Date()); + String salt = oConvertUtils.randomGen(8); + String passwordEncode = PasswordUtil.encrypt(username, password, salt); + user.setSalt(salt); + user.setUsername(username); + user.setRealname(realname); + user.setPassword(passwordEncode); + user.setEmail(email); + user.setPhone(phone); + user.setStatus(CommonConstant.USER_UNFREEZE); + user.setDelFlag(CommonConstant.DEL_FLAG_0); + user.setActivitiSync(CommonConstant.ACT_SYNC_1); + sysUserService.addUserWithRole(user, ""); + //保存第三方用户表 + sysThirdAccountService.updateThirdUserId(user, thirdUserUuid); + String token = saveToken(user); + return Result.ok(token); + } catch (Exception e) { + return Result.error("注册失败"); + } + } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/WechatVerifyController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/WechatVerifyController.java index 92f26a8..b0ba497 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/WechatVerifyController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/controller/WechatVerifyController.java @@ -1,11 +1,11 @@ package org.jeecg.modules.system.controller; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import jakarta.servlet.http.HttpServletResponse; import java.io.PrintWriter; /** diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java index d49c025..4f9b4a5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java @@ -14,7 +14,7 @@ import java.io.Serializable; /** * @Description: 系统通告表 * @Author: jeecg-boot - * @Date: 2019-01-02 + * @Date: 2019-01-02 * @Version: V1.0 */ @Data @@ -62,7 +62,7 @@ public class SysAnnouncement implements Serializable { @Excel(name = "优先级", width = 15, dicCode = "priority") @Dict(dicCode = "priority") private java.lang.String priority; - + /** * 消息类型1:通知公告2:系统消息 */ @@ -141,10 +141,10 @@ public class SysAnnouncement implements Serializable { private java.lang.String openPage; /** * 摘要/扩展业务参数 - * + *

* 示例: * 1 摘要值 - * 放假安排 + * 放假安排 * 2 跳转流程的参数值 * {"taskDetail":true,"procInsId":"1706547306004377602","taskId":"task630958764530507776"} */ @@ -169,6 +169,8 @@ public class SysAnnouncement implements Serializable { */ private transient String sendId; - /**租户ID*/ + /** + * 租户ID + */ private java.lang.Integer tenantId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncementSend.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncementSend.java index 6f5dfe0..b3db495 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncementSend.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncementSend.java @@ -1,53 +1,71 @@ package org.jeecg.modules.system.entity; -import java.io.Serializable; -import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serializable; + /** * @Description: 用户通告阅读标记表 * @Author: jeecg-boot - * @Date: 2019-02-21 + * @Date: 2019-02-21 * @Version: V1.0 */ @Data @TableName("sys_announcement_send") public class SysAnnouncementSend implements Serializable { private static final long serialVersionUID = 1L; - - /**id*/ - @TableId(type = IdType.ASSIGN_ID) - private java.lang.String id; - /**通告id*/ - private java.lang.String anntId; - /**用户id*/ - private java.lang.String userId; - /**阅读状态(0未读,1已读)*/ - private java.lang.Integer readFlag; - /**阅读时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date readTime; - /**创建人*/ - private java.lang.String createBy; - /**创建时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date createTime; - /**更新人*/ - private java.lang.String updateBy; - /**更新时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date updateTime; - /** - * 是否标星 当值为1是标星消息 - */ - private String starFlag; + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /** + * 通告id + */ + private java.lang.String anntId; + /** + * 用户id + */ + private java.lang.String userId; + /** + * 阅读状态(0未读,1已读) + */ + private java.lang.Integer readFlag; + /** + * 阅读时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date readTime; + /** + * 创建人 + */ + private java.lang.String createBy; + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /** + * 更新人 + */ + private java.lang.String updateBy; + /** + * 更新时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + + /** + * 是否标星 当值为1是标星消息 + */ + private String starFlag; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java index e19273b..b2c872c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysCategory.java @@ -13,57 +13,80 @@ import java.io.Serializable; /** * @Description: 分类字典 * @Author: jeecg-boot - * @Date: 2019-05-29 + * @Date: 2019-05-29 * @Version: V1.0 */ @Data @TableName("sys_category") -public class SysCategory implements Serializable,Comparable{ +public class SysCategory implements Serializable, Comparable { private static final long serialVersionUID = 1L; - - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) - private java.lang.String id; - /**父级节点*/ - private java.lang.String pid; - /**类型名称*/ - @Excel(name = "类型名称", width = 15) - private java.lang.String name; - /**类型编码*/ - @Excel(name = "类型编码", width = 15) - private java.lang.String code; - /**创建人*/ - private java.lang.String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date createTime; - /**更新人*/ - private java.lang.String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date updateTime; - /**所属部门*/ - private java.lang.String sysOrgCode; - /**是否有子节点*/ - @Excel(name = "是否有子节点(1:有)", width = 15) - private java.lang.String hasChild; - /**租户ID*/ - private java.lang.Integer tenantId; + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /** + * 父级节点 + */ + private java.lang.String pid; + /** + * 类型名称 + */ + @Excel(name = "类型名称", width = 15) + private java.lang.String name; + /** + * 类型编码 + */ + @Excel(name = "类型编码", width = 15) + private java.lang.String code; + /** + * 创建人 + */ + private java.lang.String createBy; + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /** + * 更新人 + */ + private java.lang.String updateBy; + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /** + * 所属部门 + */ + private java.lang.String sysOrgCode; + /** + * 是否有子节点 + */ + @Excel(name = "是否有子节点(1:有)", width = 15) + private java.lang.String hasChild; - @Override - public int compareTo(SysCategory o) { - //比较条件我们定的是按照code的长度升序 - // <0:当前对象比传入对象小。 - // =0:当前对象等于传入对象。 - // >0:当前对象比传入对象大。 - int s = this.code.length() - o.code.length(); - return s; - } - @Override - public String toString() { - return "SysCategory [code=" + code + ", name=" + name + "]"; - } + /** + * 租户ID + */ + private java.lang.Integer tenantId; + + @Override + public int compareTo(SysCategory o) { + //比较条件我们定的是按照code的长度升序 + // <0:当前对象比传入对象小。 + // =0:当前对象等于传入对象。 + // >0:当前对象比传入对象大。 + int s = this.code.length() - o.code.length(); + return s; + } + + @Override + public String toString() { + return "SysCategory [code=" + code + ", name=" + name + "]"; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysComment.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysComment.java index bb711b3..874416c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysComment.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysComment.java @@ -18,62 +18,84 @@ import java.util.Date; /** * @Description: 系统评论回复表 * @Author: jeecg-boot - * @Date: 2022-07-19 + * @Date: 2022-07-19 * @Version: V1.0 */ @Data @TableName("sys_comment") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="sys_comment对象") +@Schema(description = "sys_comment对象") public class SysComment implements Serializable { private static final long serialVersionUID = 1L; - /**id*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "id") private String id; - /**表名*/ - @Excel(name = "表名", width = 15) + /** + * 表名 + */ + @Excel(name = "表名", width = 15) @Schema(description = "表名") private String tableName; - /**数据id*/ - @Excel(name = "数据id", width = 15) + /** + * 数据id + */ + @Excel(name = "数据id", width = 15) @Schema(description = "数据id") private String tableDataId; - /**来源用户id*/ - @Excel(name = "来源用户id", width = 15) + /** + * 来源用户id + */ + @Excel(name = "来源用户id", width = 15) @Schema(description = "来源用户id") @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") private String fromUserId; - /**发送给用户id(允许为空)*/ - @Excel(name = "发送给用户id(允许为空)", width = 15) + /** + * 发送给用户id(允许为空) + */ + @Excel(name = "发送给用户id(允许为空)", width = 15) @Schema(description = "发送给用户id(允许为空)") @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") private String toUserId; - /**评论id(允许为空,不为空时,则为回复)*/ - @Excel(name = "评论id(允许为空,不为空时,则为回复)", width = 15) + /** + * 评论id(允许为空,不为空时,则为回复) + */ + @Excel(name = "评论id(允许为空,不为空时,则为回复)", width = 15) @Schema(description = "评论id(允许为空,不为空时,则为回复)") @Dict(dictTable = "sys_comment", dicCode = "id", dicText = "comment_content") private String commentId; - /**回复内容*/ - @Excel(name = "回复内容", width = 15) + /** + * 回复内容 + */ + @Excel(name = "回复内容", width = 15) @Schema(description = "回复内容") private String commentContent; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") private Date updateTime; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDataLog.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDataLog.java index 3eca932..838dbce 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDataLog.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDataLog.java @@ -23,37 +23,37 @@ import java.util.Date; @Accessors(chain = true) @Slf4j public class SysDataLog implements Serializable { - private static final long serialVersionUID = 1L; - - @TableId(type = IdType.ASSIGN_ID) + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.ASSIGN_ID) /** * id */ - private String id; + private String id; /** * 创建人登录名称 */ - private String createBy; + private String createBy; /** * 创建人真实名称 */ - private String createName; + private String createName; /** * 创建日期 */ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private Date createTime; + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; /** * 更新人登录名称 */ - private String updateBy; - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private String updateBy; + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") /** * 更新日期 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDataSource.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDataSource.java index e2e74ad..963d71a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDataSource.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDataSource.java @@ -117,7 +117,9 @@ public class SysDataSource { @Schema(description = "所属部门") private java.lang.String sysOrgCode; - /**租户ID*/ + /** + * 租户ID + */ @Schema(description = "租户ID") private java.lang.Integer tenantId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepart.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepart.java index d585e66..4806b46 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepart.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepart.java @@ -18,105 +18,157 @@ import java.util.Objects; *

* 部门表 *

- * + * * @Author Steve - * @Since 2019-01-22 + * @Since 2019-01-22 */ @Data @TableName("sys_depart") public class SysDepart implements Serializable { private static final long serialVersionUID = 1L; - - /**ID*/ - @TableId(type = IdType.ASSIGN_ID) - private String id; - /**父机构ID*/ - private String parentId; - /**机构/部门名称*/ - @Excel(name="机构/部门名称",width=15) - private String departName; - /**英文名*/ - @Excel(name="英文名",width=15) - private String departNameEn; - /**缩写*/ - private String departNameAbbr; - /**排序*/ - @Excel(name="排序",width=15) - private Integer departOrder; - /**描述*/ - @Excel(name="描述",width=15) - private String description; - /**机构类别 1=公司,2=组织机构,3=岗位*/ - @Excel(name="机构类别",width=15,dicCode="org_category") - private String orgCategory; - /**机构类型*/ - private String orgType; - /**机构编码*/ - @Excel(name="机构编码",width=15) - private String orgCode; - /**手机号*/ - @Excel(name="手机号",width=15) - private String mobile; - /**传真*/ - @Excel(name="传真",width=15) - private String fax; - /**地址*/ - @Excel(name="地址",width=15) - private String address; - /**备注*/ - @Excel(name="备注",width=15) - private String memo; - /**状态(1启用,0不启用)*/ - @Dict(dicCode = "depart_status") - private String status; - /**删除状态(0,正常,1已删除)*/ - @Dict(dicCode = "del_flag") - private String delFlag; - /**对接企业微信的ID*/ - private String qywxIdentifier; - /**对接钉钉的部门ID*/ - private String dingIdentifier; - /**创建人*/ - private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private Date createTime; - /**更新人*/ - private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private Date updateTime; - /**租户ID*/ - private java.lang.Integer tenantId; - /**是否有叶子节点: 1是0否*/ - private Integer izLeaf; + /** + * ID + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + /** + * 父机构ID + */ + private String parentId; + /** + * 机构/部门名称 + */ + @Excel(name = "机构/部门名称", width = 15) + private String departName; + /** + * 英文名 + */ + @Excel(name = "英文名", width = 15) + private String departNameEn; + /** + * 缩写 + */ + private String departNameAbbr; + /** + * 排序 + */ + @Excel(name = "排序", width = 15) + private Integer departOrder; + /** + * 描述 + */ + @Excel(name = "描述", width = 15) + private String description; + /** + * 机构类别 1=公司,2=组织机构,3=岗位 + */ + @Excel(name = "机构类别", width = 15, dicCode = "org_category") + private String orgCategory; + /** + * 机构类型 + */ + private String orgType; + /** + * 机构编码 + */ + @Excel(name = "机构编码", width = 15) + private String orgCode; + /** + * 手机号 + */ + @Excel(name = "手机号", width = 15) + private String mobile; + /** + * 传真 + */ + @Excel(name = "传真", width = 15) + private String fax; + /** + * 地址 + */ + @Excel(name = "地址", width = 15) + private String address; + /** + * 备注 + */ + @Excel(name = "备注", width = 15) + private String memo; + /** + * 状态(1启用,0不启用) + */ + @Dict(dicCode = "depart_status") + private String status; + /** + * 删除状态(0,正常,1已删除) + */ + @Dict(dicCode = "del_flag") + private String delFlag; + /** + * 对接企业微信的ID + */ + private String qywxIdentifier; + /** + * 对接钉钉的部门ID + */ + private String dingIdentifier; + /** + * 创建人 + */ + private String createBy; + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + /** + * 更新人 + */ + private String updateBy; + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + /** + * 租户ID + */ + private java.lang.Integer tenantId; + + /** + * 是否有叶子节点: 1是0否 + */ + private Integer izLeaf; //update-begin---author:wangshuai ---date:20200308 for:[JTC-119]在部门管理菜单下设置部门负责人,新增字段负责人ids和旧的负责人ids - /**部门负责人的ids*/ - @TableField(exist = false) - private String directorUserIds; - /**旧的部门负责人的ids(用于比较删除和新增)*/ - @TableField(exist = false) + /** + * 部门负责人的ids + */ + @TableField(exist = false) + private String directorUserIds; + /** + * 旧的部门负责人的ids(用于比较删除和新增) + */ + @TableField(exist = false) private String oldDirectorUserIds; //update-end---author:wangshuai ---date:20200308 for:[JTC-119]新增字段负责人ids和旧的负责人ids - - /** - * 重写equals方法 - */ + + /** + * 重写equals方法 + */ @Override public boolean equals(Object o) { if (this == o) { - return true; - } + return true; + } if (o == null || getClass() != o.getClass()) { - return false; - } + return false; + } if (!super.equals(o)) { - return false; - } + return false; + } SysDepart depart = (SysDepart) o; return Objects.equals(id, depart.id) && Objects.equals(parentId, depart.parentId) && @@ -146,9 +198,9 @@ public class SysDepart implements Serializable { */ @Override public int hashCode() { - return Objects.hash(super.hashCode(), id, parentId, departName, - departNameEn, departNameAbbr, departOrder, description,orgCategory, - orgType, orgCode, mobile, fax, address, memo, status, - delFlag, createBy, createTime, updateBy, updateTime, tenantId); + return Objects.hash(super.hashCode(), id, parentId, departName, + departNameEn, departNameAbbr, departOrder, description, orgCategory, + orgType, orgCode, mobile, fax, address, memo, status, + delFlag, createBy, createTime, updateBy, updateTime, tenantId); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartPermission.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartPermission.java index 803e85f..e323903 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartPermission.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartPermission.java @@ -12,38 +12,46 @@ import org.jeecgframework.poi.excel.annotation.Excel; /** * @Description: 部门权限表 * @Author: jeecg-boot - * @Date: 2020-02-11 + * @Date: 2020-02-11 * @Version: V1.0 */ @Data @TableName("sys_depart_permission") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@Schema(description="部门权限表") +@Schema(description = "部门权限表") public class SysDepartPermission { - - /**id*/ - @TableId(type = IdType.ASSIGN_ID) + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "id") - private java.lang.String id; - /**部门id*/ - @Excel(name = "部门id", width = 15) + private java.lang.String id; + /** + * 部门id + */ + @Excel(name = "部门id", width = 15) @Schema(description = "部门id") - private java.lang.String departId; - /**权限id*/ - @Excel(name = "权限id", width = 15) + private java.lang.String departId; + /** + * 权限id + */ + @Excel(name = "权限id", width = 15) @Schema(description = "权限id") - private java.lang.String permissionId; - /**数据规则id*/ - @Schema(description = "数据规则id") - private java.lang.String dataRuleIds; + private java.lang.String permissionId; + /** + * 数据规则id + */ + @Schema(description = "数据规则id") + private java.lang.String dataRuleIds; - public SysDepartPermission() { + public SysDepartPermission() { - } + } - public SysDepartPermission(String departId, String permissionId) { - this.departId = departId; - this.permissionId = permissionId; - } + public SysDepartPermission(String departId, String permissionId) { + this.departId = departId; + this.permissionId = permissionId; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRole.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRole.java index d586c62..79c14ad 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRole.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRole.java @@ -15,57 +15,75 @@ import org.springframework.format.annotation.DateTimeFormat; /** * @Description: 部门角色 * @Author: jeecg-boot - * @Date: 2020-02-12 + * @Date: 2020-02-12 * @Version: V1.0 */ @Data @TableName("sys_depart_role") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@Schema(description="sys_depart_role对象") +@Schema(description = "sys_depart_role对象") public class SysDepartRole { - - /**id*/ - @TableId(type = IdType.ASSIGN_ID) + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "id") - private java.lang.String id; - /**部门id*/ - @Excel(name = "部门id", width = 15) - @Schema(description = "部门id") - @Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") - private java.lang.String departId; - /**部门角色名称*/ - @Excel(name = "部门角色名称", width = 15) + private java.lang.String id; + /** + * 部门id + */ + @Excel(name = "部门id", width = 15) + @Schema(description = "部门id") + @Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id") + private java.lang.String departId; + /** + * 部门角色名称 + */ + @Excel(name = "部门角色名称", width = 15) @Schema(description = "部门角色名称") - private java.lang.String roleName; - /**部门角色编码*/ - @Excel(name = "部门角色编码", width = 15) + private java.lang.String roleName; + /** + * 部门角色编码 + */ + @Excel(name = "部门角色编码", width = 15) @Schema(description = "部门角色编码") - private java.lang.String roleCode; - /**描述*/ - @Excel(name = "描述", width = 15) + private java.lang.String roleCode; + /** + * 描述 + */ + @Excel(name = "描述", width = 15) @Schema(description = "描述") - private java.lang.String description; - /**创建人*/ - @Excel(name = "创建人", width = 15) + private java.lang.String description; + /** + * 创建人 + */ + @Excel(name = "创建人", width = 15) @Schema(description = "创建人") - private java.lang.String createBy; - /**创建时间*/ - @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.lang.String createBy; + /** + * 创建时间 + */ + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建时间") - private java.util.Date createTime; - /**更新人*/ - @Excel(name = "更新人", width = 15) + private java.util.Date createTime; + /** + * 更新人 + */ + @Excel(name = "更新人", width = 15) @Schema(description = "更新人") - private java.lang.String updateBy; - /**更新时间*/ - @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.lang.String updateBy; + /** + * 更新时间 + */ + @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新时间") - private java.util.Date updateTime; + private java.util.Date updateTime; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRolePermission.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRolePermission.java index 7a1995e..29aa839 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRolePermission.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRolePermission.java @@ -14,50 +14,64 @@ import org.springframework.format.annotation.DateTimeFormat; /** * @Description: 部门角色权限 * @Author: jeecg-boot - * @Date: 2020-02-12 + * @Date: 2020-02-12 * @Version: V1.0 */ @Data @TableName("sys_depart_role_permission") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@Schema(description="sys_depart_role_permission对象") +@Schema(description = "sys_depart_role_permission对象") public class SysDepartRolePermission { - - /**id*/ - @TableId(type = IdType.ASSIGN_ID) + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "id") - private java.lang.String id; - /**部门id*/ - @Excel(name = "部门id", width = 15) + private java.lang.String id; + /** + * 部门id + */ + @Excel(name = "部门id", width = 15) @Schema(description = "部门id") - private java.lang.String departId; - /**角色id*/ - @Excel(name = "角色id", width = 15) + private java.lang.String departId; + /** + * 角色id + */ + @Excel(name = "角色id", width = 15) @Schema(description = "角色id") - private java.lang.String roleId; - /**权限id*/ - @Excel(name = "权限id", width = 15) + private java.lang.String roleId; + /** + * 权限id + */ + @Excel(name = "权限id", width = 15) @Schema(description = "权限id") - private java.lang.String permissionId; - /**dataRuleIds*/ - @Excel(name = "dataRuleIds", width = 15) + private java.lang.String permissionId; + /** + * dataRuleIds + */ + @Excel(name = "dataRuleIds", width = 15) @Schema(description = "dataRuleIds") - private java.lang.String dataRuleIds; - /** 操作时间 */ - @Excel(name = "操作时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - @Schema(description = "操作时间") - private java.util.Date operateDate; - /** 操作ip */ - private java.lang.String operateIp; + private java.lang.String dataRuleIds; + /** + * 操作时间 + */ + @Excel(name = "操作时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "操作时间") + private java.util.Date operateDate; + /** + * 操作ip + */ + private java.lang.String operateIp; - public SysDepartRolePermission() { - } + public SysDepartRolePermission() { + } - public SysDepartRolePermission(String roleId, String permissionId) { - this.roleId = roleId; - this.permissionId = permissionId; - } + public SysDepartRolePermission(String roleId, String permissionId) { + this.roleId = roleId; + this.permissionId = permissionId; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRoleUser.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRoleUser.java index a30c364..d1486f5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRoleUser.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepartRoleUser.java @@ -12,35 +12,41 @@ import org.jeecgframework.poi.excel.annotation.Excel; /** * @Description: 部门角色人员信息 * @Author: jeecg-boot - * @Date: 2020-02-13 + * @Date: 2020-02-13 * @Version: V1.0 */ @Data @TableName("sys_depart_role_user") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@Schema(description="sys_depart_role_user对象") +@Schema(description = "sys_depart_role_user对象") public class SysDepartRoleUser { - - /**主键id*/ - @TableId(type = IdType.ASSIGN_ID) + + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键id") - private java.lang.String id; - /**用户id*/ - @Excel(name = "用户id", width = 15) + private java.lang.String id; + /** + * 用户id + */ + @Excel(name = "用户id", width = 15) @Schema(description = "用户id") - private java.lang.String userId; - /**角色id*/ - @Excel(name = "角色id", width = 15) + private java.lang.String userId; + /** + * 角色id + */ + @Excel(name = "角色id", width = 15) @Schema(description = "角色id") - private java.lang.String droleId; + private java.lang.String droleId; - public SysDepartRoleUser() { + public SysDepartRoleUser() { - } + } - public SysDepartRoleUser(String userId, String droleId) { - this.userId = userId; - this.droleId = droleId; - } + public SysDepartRoleUser(String userId, String droleId) { + this.userId = userId; + this.droleId = droleId; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDict.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDict.java index 8e7569c..41c852d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDict.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDict.java @@ -1,16 +1,15 @@ package org.jeecg.modules.system.entity; -import java.io.Serializable; -import java.util.Date; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.io.Serializable; +import java.util.Date; + /** *

* 字典表 @@ -31,7 +30,7 @@ public class SysDict implements Serializable { */ @TableId(type = IdType.ASSIGN_ID) private String id; - + /** * [预留字段,暂时无用] * 字典类型,0 string,1 number类型,2 boolean @@ -39,7 +38,7 @@ public class SysDict implements Serializable { * 默认为string类型 */ private Integer type; - + /** * 字典名称 */ @@ -81,10 +80,14 @@ public class SysDict implements Serializable { */ private Date updateTime; - /**租户ID*/ + /** + * 租户ID + */ private java.lang.Integer tenantId; - - /** 关联的低代码应用ID */ + + /** + * 关联的低代码应用ID + */ private java.lang.String lowAppId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDictItem.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDictItem.java index ca27c44..57bb0a6 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDictItem.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDictItem.java @@ -1,18 +1,16 @@ package org.jeecg.modules.system.entity; -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.Date; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.jeecgframework.poi.excel.annotation.Excel; +import java.io.Serializable; +import java.util.Date; + /** *

* @@ -60,7 +58,7 @@ public class SysDictItem implements Serializable { /** * 排序 */ - @Excel(name = "排序", width = 15,type=4) + @Excel(name = "排序", width = 15, type = 4) private Integer sortOrder; @@ -79,7 +77,7 @@ public class SysDictItem implements Serializable { private Date updateTime; /** - * 字典项颜色 + * 字典项颜色 */ private String itemColor; diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFillRule.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFillRule.java index 81cf655..9ead1cf 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFillRule.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFillRule.java @@ -21,7 +21,7 @@ import org.springframework.format.annotation.DateTimeFormat; @TableName("sys_fill_rule") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@Schema( description = "填值规则") +@Schema(description = "填值规则") public class SysFillRule { /** diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFormFile.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFormFile.java index 0aaaf8a..12b6985 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFormFile.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysFormFile.java @@ -16,44 +16,58 @@ import java.util.Date; /** * @Description: 表单评论文件 * @Author: jeecg-boot - * @Date: 2022-07-21 + * @Date: 2022-07-21 * @Version: V1.0 */ @Data @TableName("sys_form_file") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@Schema(description="sys_form_file对象") +@Schema(description = "sys_form_file对象") public class SysFormFile { - - /**id*/ - @TableId(type = IdType.ASSIGN_ID) + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "id") - private String id; - /**表名*/ - @Excel(name = "表名", width = 15) + private String id; + /** + * 表名 + */ + @Excel(name = "表名", width = 15) @Schema(description = "表名") - private String tableName; - /**数据id*/ - @Excel(name = "数据id", width = 15) + private String tableName; + /** + * 数据id + */ + @Excel(name = "数据id", width = 15) @Schema(description = "数据id") - private String tableDataId; - /**关联文件id*/ - @Excel(name = "关联文件id", width = 15) + private String tableDataId; + /** + * 关联文件id + */ + @Excel(name = "关联文件id", width = 15) @Schema(description = "关联文件id") - private String fileId; - /**文档类型(folder:文件夹 excel:excel doc:word pp:ppt image:图片 archive:其他文档 video:视频)*/ - @Excel(name = "文档类型(folder:文件夹 excel:excel doc:word pp:ppt image:图片 archive:其他文档 video:视频)", width = 15) - @Schema(description = "文档类型(folder:文件夹 excel:excel doc:word pp:ppt image:图片 archive:其他文档 video:视频)") - private String fileType; - /**创建人登录名称*/ - @Excel(name = "创建人登录名称", width = 15) + private String fileId; + /** + * 文档类型(folder:文件夹 excel:excel doc:word pp:ppt image:图片 archive:其他文档 video:视频) + */ + @Excel(name = "文档类型(folder:文件夹 excel:excel doc:word pp:ppt image:图片 archive:其他文档 video:视频)", width = 15) + @Schema(description = "文档类型(folder:文件夹 excel:excel doc:word pp:ppt image:图片 archive:其他文档 video:视频)") + private String fileType; + /** + * 创建人登录名称 + */ + @Excel(name = "创建人登录名称", width = 15) @Schema(description = "创建人登录名称") - private String createBy; - /**创建日期*/ - @Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private String createBy; + /** + * 创建日期 + */ + @Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") - private Date createTime; + private Date createTime; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysGatewayRoute.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysGatewayRoute.java index 4fc6174..ede0f19 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysGatewayRoute.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysGatewayRoute.java @@ -18,32 +18,40 @@ import java.util.Date; /** * @Description: gateway路由管理 * @Author: jeecg-boot - * @Date: 2020-05-26 + * @Date: 2020-05-26 * @Version: V1.0 */ @Data @TableName("sys_gateway_route") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="sys_gateway_route对象") +@Schema(description = "sys_gateway_route对象") public class SysGatewayRoute implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ + /** + * 主键 + */ @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**routerKEy*/ + /** + * routerKEy + */ @Schema(description = "路由ID") private String routerId; - /**服务名*/ + /** + * 服务名 + */ @Excel(name = "服务名", width = 15) @Schema(description = "服务名") private String name; - /**服务地址*/ + /** + * 服务地址 + */ @Excel(name = "服务地址", width = 15) @Schema(description = "服务地址") private String uri; @@ -58,42 +66,56 @@ public class SysGatewayRoute implements Serializable { */ private String filters; - /**是否忽略前缀0-否 1-是*/ + /** + * 是否忽略前缀0-否 1-是 + */ @Excel(name = "忽略前缀", width = 15) @Schema(description = "忽略前缀") @Dict(dicCode = "yn") private Integer stripPrefix; - /**是否重试0-否 1-是*/ + /** + * 是否重试0-否 1-是 + */ @Excel(name = "是否重试", width = 15) @Schema(description = "是否重试") @Dict(dicCode = "yn") private Integer retryable; - /**是否为保留数据:0-否 1-是*/ + /** + * 是否为保留数据:0-否 1-是 + */ @Excel(name = "保留数据", width = 15) @Schema(description = "保留数据") @Dict(dicCode = "yn") private Integer persistable; - /**是否在接口文档中展示:0-否 1-是*/ + /** + * 是否在接口文档中展示:0-否 1-是 + */ @Excel(name = "在接口文档中展示", width = 15) @Schema(description = "在接口文档中展示") @Dict(dicCode = "yn") private Integer showApi; - /**状态 1有效 0无效*/ + /** + * 状态 1有效 0无效 + */ @Excel(name = "状态", width = 15) @Schema(description = "状态") @Dict(dicCode = "yn") private Integer status; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") private Date createTime; /* *//**更新人*//* diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysLog.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysLog.java index 9aa07ed..bf6ce42 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysLog.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysLog.java @@ -1,16 +1,16 @@ package org.jeecg.modules.system.entity; -import java.util.Date; - -import org.jeecg.common.aspect.annotation.Dict; -import org.springframework.format.annotation.DateTimeFormat; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; -import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** *

@@ -25,99 +25,99 @@ import lombok.experimental.Accessors; @Accessors(chain = true) public class SysLog implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * id - */ - @TableId(type = IdType.ASSIGN_ID) - private String id; + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; - /** - * 创建人 - */ - private String createBy; + /** + * 创建人 + */ + private String createBy; - /** - * 创建时间 - */ - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; - /** - * 更新人 - */ - private String updateBy; + /** + * 更新人 + */ + private String updateBy; - /** - * 更新时间 - */ - private Date updateTime; + /** + * 更新时间 + */ + private Date updateTime; - /** - * 耗时 - */ - private Long costTime; + /** + * 耗时 + */ + private Long costTime; - /** - * IP - */ - private String ip; + /** + * IP + */ + private String ip; - /** - * 请求参数 - */ - private String requestParam; + /** + * 请求参数 + */ + private String requestParam; - /** - * 请求类型 - */ - private String requestType; + /** + * 请求类型 + */ + private String requestType; - /** - * 请求路径 - */ - private String requestUrl; - /** - * 请求方法 - */ - private String method; + /** + * 请求路径 + */ + private String requestUrl; + /** + * 请求方法 + */ + private String method; - /** - * 操作人用户名称 - */ - private String username; - /** - * 操作人用户账户 - */ - private String userid; - /** - * 操作详细日志 - */ - private String logContent; + /** + * 操作人用户名称 + */ + private String username; + /** + * 操作人用户账户 + */ + private String userid; + /** + * 操作详细日志 + */ + private String logContent; - /** - * 日志类型(1登录日志,2操作日志) - */ - @Dict(dicCode = "log_type") - private Integer logType; + /** + * 日志类型(1登录日志,2操作日志) + */ + @Dict(dicCode = "log_type") + private Integer logType; - /** - * 操作类型(1查询,2添加,3修改,4删除,5导入,6导出) - */ - @Dict(dicCode = "operate_type") - private Integer operateType; - - /** - * 客户终端类型 pc:电脑端 app:手机端 h5:移动网页端 - */ - @Dict(dicCode = "client_type") - private String clientType; + /** + * 操作类型(1查询,2添加,3修改,4删除,5导入,6导出) + */ + @Dict(dicCode = "operate_type") + private Integer operateType; - /** - * 租户ID - */ - private Integer tenantId; + /** + * 客户终端类型 pc:电脑端 app:手机端 h5:移动网页端 + */ + @Dict(dicCode = "client_type") + private String clientType; + + /** + * 租户ID + */ + private Integer tenantId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPackPermission.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPackPermission.java index 6150bfd..00a93a2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPackPermission.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPackPermission.java @@ -17,43 +17,57 @@ import java.util.Date; /** * @Description: 产品包菜单关系表 * @Author: jeecg-boot - * @Date: 2022-12-31 + * @Date: 2022-12-31 * @Version: V1.0 */ @Data @TableName("sys_tenant_pack_perms") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="产品包菜单关系表") +@Schema(description = "产品包菜单关系表") public class SysPackPermission implements Serializable { private static final long serialVersionUID = 1L; - /**主键编号*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键编号 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键编号") private String id; - /**租户产品包名称*/ - @Excel(name = "租户产品包名称", width = 15) + /** + * 租户产品包名称 + */ + @Excel(name = "租户产品包名称", width = 15) @Schema(description = "租户产品包名称") private String packId; - /**菜单id*/ - @Excel(name = "菜单id", width = 15) + /** + * 菜单id + */ + @Excel(name = "菜单id", width = 15) @Schema(description = "菜单id") private String permissionId; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "创建时间") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 更新时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "更新时间") private Date updateTime; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPermission.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPermission.java index f88774f..b586f03 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPermission.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPermission.java @@ -1,7 +1,5 @@ package org.jeecg.modules.system.entity; -import java.io.Serializable; -import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -11,6 +9,9 @@ import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.modules.system.constant.DefIndexConst; +import java.io.Serializable; +import java.util.Date; + /** *

* 菜单权限表 @@ -24,164 +25,171 @@ import org.jeecg.modules.system.constant.DefIndexConst; @Accessors(chain = true) public class SysPermission implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * id - */ - @TableId(type = IdType.ASSIGN_ID) - private String id; + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; - /** - * 父id - */ - private String parentId; + /** + * 父id + */ + private String parentId; - /** - * 菜单名称 - */ - private String name; + /** + * 菜单名称 + */ + private String name; - /** - * 菜单权限编码,例如:“sys:schedule:list,sys:schedule:info”,多个逗号隔开 - */ - private String perms; - /** - * 权限策略1显示2禁用 - */ - private String permsType; + /** + * 菜单权限编码,例如:“sys:schedule:list,sys:schedule:info”,多个逗号隔开 + */ + private String perms; + /** + * 权限策略1显示2禁用 + */ + private String permsType; - /** - * 菜单图标 - */ - private String icon; + /** + * 菜单图标 + */ + private String icon; - /** - * 组件 - */ - private String component; - - /** - * 组件名字 - */ - private String componentName; + /** + * 组件 + */ + private String component; - /** - * 路径 - */ - private String url; - /** - * 一级菜单跳转地址 - */ - private String redirect; + /** + * 组件名字 + */ + private String componentName; - /** - * 菜单排序 - */ - private Double sortNo; + /** + * 路径 + */ + private String url; + /** + * 一级菜单跳转地址 + */ + private String redirect; - /** - * 类型(0:一级菜单;1:子菜单 ;2:按钮权限) - */ - @Dict(dicCode = "menu_type") - private Integer menuType; + /** + * 菜单排序 + */ + private Double sortNo; - /** - * 是否叶子节点: 1:是 0:不是 - */ - @TableField(value="is_leaf") - private boolean leaf; - - /** - * 是否路由菜单: 0:不是 1:是(默认值1) - */ - @TableField(value="is_route") - private boolean route; + /** + * 类型(0:一级菜单;1:子菜单 ;2:按钮权限) + */ + @Dict(dicCode = "menu_type") + private Integer menuType; + + /** + * 是否叶子节点: 1:是 0:不是 + */ + @TableField(value = "is_leaf") + private boolean leaf; + + /** + * 是否路由菜单: 0:不是 1:是(默认值1) + */ + @TableField(value = "is_route") + private boolean route; - /** - * 是否缓存页面: 0:不是 1:是(默认值1) - */ - @TableField(value="keep_alive") - private boolean keepAlive; + /** + * 是否缓存页面: 0:不是 1:是(默认值1) + */ + @TableField(value = "keep_alive") + private boolean keepAlive; - /** - * 描述 - */ - private String description; + /** + * 描述 + */ + private String description; - /** - * 创建人 - */ - private String createBy; + /** + * 创建人 + */ + private String createBy; - /** - * 删除状态 0正常 1已删除 - */ - private Integer delFlag; - - /** - * 是否配置菜单的数据权限 1是0否 默认0 - */ - private Integer ruleFlag; - - /** - * 是否隐藏路由菜单: 0否,1是(默认值0) - */ - private boolean hidden; + /** + * 删除状态 0正常 1已删除 + */ + private Integer delFlag; - /** - * 是否隐藏Tab: 0否,1是(默认值0) - */ - private boolean hideTab; + /** + * 是否配置菜单的数据权限 1是0否 默认0 + */ + private Integer ruleFlag; - /** - * 创建时间 - */ - private Date createTime; + /** + * 是否隐藏路由菜单: 0否,1是(默认值0) + */ + private boolean hidden; - /** - * 更新人 - */ - private String updateBy; + /** + * 是否隐藏Tab: 0否,1是(默认值0) + */ + private boolean hideTab; - /** - * 更新时间 - */ - private Date updateTime; - - /**按钮权限状态(0无效1有效)*/ - private java.lang.String status; - - /**alwaysShow*/ + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 按钮权限状态(0无效1有效) + */ + private java.lang.String status; + + /** + * alwaysShow + */ private boolean alwaysShow; - /*update_begin author:wuxianquan date:20190908 for:实体增加字段 */ - /** 外链菜单打开方式 0/内部打开 1/外部打开 */ + /*update_begin author:wuxianquan date:20190908 for:实体增加字段 */ + /** + * 外链菜单打开方式 0/内部打开 1/外部打开 + */ private boolean internalOrExternal; - /*update_end author:wuxianquan date:20190908 for:实体增加字段 */ + /*update_end author:wuxianquan date:20190908 for:实体增加字段 */ public SysPermission() { - + } + public SysPermission(boolean index) { - if(index) { - this.id = "9502685863ab87f0ad1134142788a385"; - this.name = DefIndexConst.DEF_INDEX_NAME; - this.component = DefIndexConst.DEF_INDEX_COMPONENT; - this.componentName = "dashboard-analysis"; - this.url = DefIndexConst.DEF_INDEX_URL; - this.icon="home"; - this.menuType=0; - this.sortNo=0.0; - this.ruleFlag=0; - this.delFlag=0; - this.alwaysShow=false; - this.route=true; - this.keepAlive=true; - this.leaf=true; - this.hidden=false; - } - + if (index) { + this.id = "9502685863ab87f0ad1134142788a385"; + this.name = DefIndexConst.DEF_INDEX_NAME; + this.component = DefIndexConst.DEF_INDEX_COMPONENT; + this.componentName = "dashboard-analysis"; + this.url = DefIndexConst.DEF_INDEX_URL; + this.icon = "home"; + this.menuType = 0; + this.sortNo = 0.0; + this.ruleFlag = 0; + this.delFlag = 0; + this.alwaysShow = false; + this.route = true; + this.keepAlive = true; + this.leaf = true; + this.hidden = false; + } + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPermissionDataRule.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPermissionDataRule.java index 4a0af83..a101440 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPermissionDataRule.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPermissionDataRule.java @@ -1,15 +1,14 @@ package org.jeecg.modules.system.entity; -import java.io.Serializable; -import java.util.Date; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.io.Serializable; +import java.util.Date; + /** *

* 菜单权限规则表 @@ -22,62 +21,62 @@ import lombok.experimental.Accessors; @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class SysPermissionDataRule implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * id - */ - @TableId(type = IdType.ASSIGN_ID) - private String id; - - /** - * 对应的菜单id - */ - private String permissionId; - - /** - * 规则名称 - */ - private String ruleName; - - /** - * 字段 - */ - private String ruleColumn; - - /** - * 条件 - */ - private String ruleConditions; - - /** - * 规则值 - */ - private String ruleValue; - - /** - * 状态值 1有效 0无效 - */ - private String status; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 创建人 - */ - private String createBy; - - /** - * 修改时间 - */ - private Date updateTime; - - /** - * 修改人 - */ - private String updateBy; + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + + /** + * 对应的菜单id + */ + private String permissionId; + + /** + * 规则名称 + */ + private String ruleName; + + /** + * 字段 + */ + private String ruleColumn; + + /** + * 条件 + */ + private String ruleConditions; + + /** + * 规则值 + */ + private String ruleValue; + + /** + * 状态值 1有效 0无效 + */ + private String status; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 修改时间 + */ + private Date updateTime; + + /** + * 修改人 + */ + private String updateBy; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPosition.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPosition.java index 482c9ed..4022cb7 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPosition.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysPosition.java @@ -46,7 +46,7 @@ public class SysPosition { /** * 职级 */ - @Excel(name = "职级", width = 15,dicCode ="position_rank") + @Excel(name = "职级", width = 15, dicCode = "position_rank") @Schema(description = "职级") @Dict(dicCode = "position_rank") private java.lang.String postRank; @@ -85,7 +85,9 @@ public class SysPosition { @Schema(description = "组织机构编码") private java.lang.String sysOrgCode; - /**租户ID*/ + /** + * 租户ID + */ @Schema(description = "租户ID") private java.lang.Integer tenantId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRole.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRole.java index 6163123..d740da2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRole.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRole.java @@ -1,19 +1,16 @@ package org.jeecg.modules.system.entity; -import java.io.Serializable; -import java.time.LocalDateTime; -import java.util.Date; - -import org.jeecgframework.poi.excel.annotation.Excel; -import org.springframework.format.annotation.DateTimeFormat; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** *

@@ -35,23 +32,23 @@ public class SysRole implements Serializable { */ @TableId(type = IdType.ASSIGN_ID) private String id; - + /** * 角色名称 */ - @Excel(name="角色名",width=15) + @Excel(name = "角色名", width = 15) private String roleName; - + /** * 角色编码 */ - @Excel(name="角色编码",width=15) + @Excel(name = "角色编码", width = 15) private String roleCode; - + /** - * 描述 + * 描述 */ - @Excel(name="描述",width=60) + @Excel(name = "描述", width = 60) private String description; /** @@ -62,8 +59,8 @@ public class SysRole implements Serializable { /** * 创建时间 */ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; /** @@ -74,10 +71,12 @@ public class SysRole implements Serializable { /** * 更新时间 */ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; - /**租户ID*/ + /** + * 租户ID + */ private java.lang.Integer tenantId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRoleIndex.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRoleIndex.java index 1593278..144e0d4 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRoleIndex.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRoleIndex.java @@ -15,77 +15,100 @@ import org.springframework.format.annotation.DateTimeFormat; /** * @Description: 角色首页配置 * @Author: liusq - * @Date: 2022-03-25 + * @Date: 2022-03-25 * @Version: V1.0 */ @Data @TableName("sys_role_index") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@Schema(description="sys_role_index对象") +@Schema(description = "sys_role_index对象") public class SysRoleIndex { - - /**id*/ - @TableId(type = IdType.ASSIGN_ID) + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "id") - private java.lang.String id; - /**角色编码*/ - @Excel(name = "角色编码", width = 15) + private java.lang.String id; + /** + * 角色编码 + */ + @Excel(name = "角色编码", width = 15) @Schema(description = "角色编码") - private java.lang.String roleCode; - /**路由地址*/ - @Excel(name = "路由地址", width = 15) + private java.lang.String roleCode; + /** + * 路由地址 + */ + @Excel(name = "路由地址", width = 15) @Schema(description = "路由地址") - private java.lang.String url; - /**路由地址*/ - @Excel(name = "路由地址", width = 15) + private java.lang.String url; + /** + * 路由地址 + */ + @Excel(name = "路由地址", width = 15) @Schema(description = "组件") - private java.lang.String component; - /** - * 是否路由菜单: 0:不是 1:是(默认值1) - */ - @Excel(name = "是否路由菜单", width = 15) - @Schema(description = "是否路由菜单") - @TableField(value="is_route") - private boolean route; - /**优先级*/ - @Excel(name = "优先级", width = 15) + private java.lang.String component; + /** + * 是否路由菜单: 0:不是 1:是(默认值1) + */ + @Excel(name = "是否路由菜单", width = 15) + @Schema(description = "是否路由菜单") + @TableField(value = "is_route") + private boolean route; + /** + * 优先级 + */ + @Excel(name = "优先级", width = 15) @Schema(description = "优先级") - private java.lang.Integer priority; - /**路由地址*/ - @Excel(name = "状态", width = 15) - @Schema(description = "状态") - private java.lang.String status; - /**创建人登录名称*/ - @Excel(name = "创建人登录名称", width = 15) + private java.lang.Integer priority; + /** + * 路由地址 + */ + @Excel(name = "状态", width = 15) + @Schema(description = "状态") + private java.lang.String status; + /** + * 创建人登录名称 + */ + @Excel(name = "创建人登录名称", width = 15) @Schema(description = "创建人登录名称") - private java.lang.String createBy; - /**创建日期*/ - @Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.lang.String createBy; + /** + * 创建日期 + */ + @Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "创建日期") - private java.util.Date createTime; - /**更新人登录名称*/ - @Excel(name = "更新人登录名称", width = 15) + private java.util.Date createTime; + /** + * 更新人登录名称 + */ + @Excel(name = "更新人登录名称", width = 15) @Schema(description = "更新人登录名称") - private java.lang.String updateBy; - /**更新日期*/ - @Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.lang.String updateBy; + /** + * 更新日期 + */ + @Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Schema(description = "更新日期") - private java.util.Date updateTime; - /**所属部门*/ - @Excel(name = "所属部门", width = 15) + private java.util.Date updateTime; + /** + * 所属部门 + */ + @Excel(name = "所属部门", width = 15) @Schema(description = "所属部门") - private java.lang.String sysOrgCode; + private java.lang.String sysOrgCode; - public SysRoleIndex() { + public SysRoleIndex() { - } - public SysRoleIndex(String componentUrl){ - this.component = componentUrl; - } + } + + public SysRoleIndex(String componentUrl) { + this.component = componentUrl; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRolePermission.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRolePermission.java index f0a301d..9d637d9 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRolePermission.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysRolePermission.java @@ -1,17 +1,16 @@ package org.jeecg.modules.system.entity; -import java.io.Serializable; -import java.util.Date; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; - import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serializable; +import java.util.Date; + /** *

* 角色权限表 @@ -32,7 +31,7 @@ public class SysRolePermission implements Serializable { */ @TableId(type = IdType.ASSIGN_ID) private String id; - + /** * 角色id */ @@ -42,7 +41,7 @@ public class SysRolePermission implements Serializable { * 权限id */ private String permissionId; - + /** * 数据权限 */ @@ -51,8 +50,8 @@ public class SysRolePermission implements Serializable { /** * 操作时间 */ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date operateDate; /** @@ -61,11 +60,11 @@ public class SysRolePermission implements Serializable { private String operateIp; public SysRolePermission() { - } - - public SysRolePermission(String roleId, String permissionId) { - this.roleId = roleId; - this.permissionId = permissionId; - } + } + + public SysRolePermission(String roleId, String permissionId) { + this.roleId = roleId; + this.permissionId = permissionId; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenant.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenant.java index fc1a0f6..2bd0cff 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenant.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenant.java @@ -1,17 +1,18 @@ package org.jeecg.modules.system.entity; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.jeecg.common.aspect.annotation.Dict; import org.springframework.format.annotation.DateTimeFormat; + import java.io.Serializable; import java.util.Date; /** * 租户信息 + * * @author: jeecg-boot */ @Data @@ -24,38 +25,38 @@ public class SysTenant implements Serializable { * 编码 */ private Integer id; - + /** * 名称 */ private String name; - + /** * 创建人 */ - @Dict(dictTable ="sys_user",dicText = "realname",dicCode = "username") + @Dict(dictTable = "sys_user", dicText = "realname", dicCode = "username") private String createBy; /** * 创建时间 */ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; /** * 开始时间 */ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date beginDate; /** * 结束时间 */ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date endDate; /** @@ -117,21 +118,25 @@ public class SysTenant implements Serializable { */ @Dict(dicCode = "company_department") private String department; - + @TableLogic private Integer delFlag; - /**更新人登录名称*/ + /** + * 更新人登录名称 + */ private String updateBy; - - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; /** * 允许申请管理员 1允许 0不允许 */ private Integer applyStatus; - + } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenantPack.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenantPack.java index b2fa674..d3dfa1c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenantPack.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenantPack.java @@ -18,73 +18,95 @@ import java.util.Date; /** * @Description: 租户产品包 * @Author: jeecg-boot - * @Date: 2022-12-31 + * @Date: 2022-12-31 * @Version: V1.0 */ @Data @TableName("sys_tenant_pack") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="sys_tenant_pack对象") +@Schema(description = "sys_tenant_pack对象") public class SysTenantPack implements Serializable { private static final long serialVersionUID = 1L; - /**主键id*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键id") private String id; - /**租户id*/ - @Excel(name = "租户id", width = 15) + /** + * 租户id + */ + @Excel(name = "租户id", width = 15) @Schema(description = "租户id") private Integer tenantId; - /**产品包名*/ - @Excel(name = "产品包名", width = 15) + /** + * 产品包名 + */ + @Excel(name = "产品包名", width = 15) @Schema(description = "产品包名") private String packName; - /**开启状态(0 未开启 1开启)*/ - @Excel(name = "开启状态(0 未开启 1开启)", width = 15) + /** + * 开启状态(0 未开启 1开启) + */ + @Excel(name = "开启状态(0 未开启 1开启)", width = 15) @Schema(description = "开启状态(0 未开启 1开启)") private String status; - /**备注*/ - @Excel(name = "备注", width = 15) + /** + * 备注 + */ + @Excel(name = "备注", width = 15) @Schema(description = "备注") private String remarks; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "创建时间") private Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private String updateBy; - /**更新时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 更新时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "更新时间") private Date updateTime; - /**产品包类型(default 默认产品包 custom 自定义产品包)*/ + /** + * 产品包类型(default 默认产品包 custom 自定义产品包) + */ @Excel(name = "产品包类型", width = 15) @Schema(description = "产品包类型") - private String packType; - - /**菜单id 临时字段用于新增编辑菜单id传递*/ + private String packType; + + /** + * 菜单id 临时字段用于新增编辑菜单id传递 + */ @TableField(exist = false) private String permissionIds; - - + + /** * 编码 */ private String packCode; - - public SysTenantPack(){ - + + public SysTenantPack() { + } - public SysTenantPack(Integer tenantId, String packName, String packCode){ + public SysTenantPack(Integer tenantId, String packName, String packCode) { this.tenantId = tenantId; this.packCode = packCode; this.packName = packName; diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenantPackUser.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenantPackUser.java index 3d4240f..d0b20d2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenantPackUser.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysTenantPackUser.java @@ -16,47 +16,63 @@ import java.io.Serializable; /** * @Description: 租户产品包用户关系表 * @Author: jeecg-boot - * @Date: 2023-02-16 + * @Date: 2023-02-16 * @Version: V1.0 */ @Data @TableName("sys_tenant_pack_user") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="sys_tenant_pack_user对象") +@Schema(description = "sys_tenant_pack_user对象") public class SysTenantPackUser implements Serializable { private static final long serialVersionUID = 1L; - /**id*/ + /** + * id + */ @TableId(type = IdType.ASSIGN_ID) @Schema(description = "id") private java.lang.String id; - /**租户产品包ID*/ + /** + * 租户产品包ID + */ @Excel(name = "租户产品包ID", width = 15) @Schema(description = "租户产品包ID") private java.lang.String packId; - /**用户ID*/ + /** + * 用户ID + */ @Excel(name = "用户ID", width = 15) @Schema(description = "用户ID") private java.lang.String userId; - /**租户ID*/ + /** + * 租户ID + */ @Excel(name = "租户ID", width = 15) @Schema(description = "租户ID") private java.lang.Integer tenantId; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private java.lang.String createBy; - /**创建时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "创建时间") private java.util.Date createTime; - /**更新人*/ + /** + * 更新人 + */ @Schema(description = "更新人") private java.lang.String updateBy; - /**更新时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 更新时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "更新时间") private java.util.Date updateTime; @@ -71,9 +87,10 @@ public class SysTenantPackUser implements Serializable { */ private Integer status; - public SysTenantPackUser(){ - + public SysTenantPackUser() { + } + public SysTenantPackUser(Integer tenantId, String packId, String userId) { this.packId = packId; this.userId = userId; diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysThirdAccount.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysThirdAccount.java index 48c0792..e4abd0b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysThirdAccount.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysThirdAccount.java @@ -14,69 +14,97 @@ import org.springframework.format.annotation.DateTimeFormat; /** * @Description: 第三方登录账号表 * @Author: jeecg-boot - * @Date: 2020-11-17 + * @Date: 2020-11-17 * @Version: V1.0 */ @Data @TableName("sys_third_account") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@Schema(description="sys_third_account对象") +@Schema(description = "sys_third_account对象") public class SysThirdAccount { - - /**编号*/ - @TableId(type = IdType.ASSIGN_ID) + + /** + * 编号 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "编号") - private java.lang.String id; - /**第三方登录id*/ - @Excel(name = "第三方登录id", width = 15) - @Schema(description = "第三方登录id") - private java.lang.String sysUserId; - /**登录来源*/ - @Excel(name = "登录来源", width = 15) - @Schema(description = "登录来源") - private java.lang.String thirdType; - /**头像*/ - @Excel(name = "头像", width = 15) - @Schema(description = "头像") - private java.lang.String avatar; - /**状态(1-正常,2-冻结)*/ - @Excel(name = "状态(1-正常,2-冻结)", width = 15) - @Schema(description = "状态(1-正常,2-冻结)") - private java.lang.Integer status; - /**删除状态(0-正常,1-已删除)*/ - @Excel(name = "删除状态(0-正常,1-已删除)", width = 15) - @Schema(description = "删除状态(0-正常,1-已删除)") - private java.lang.Integer delFlag; - /**真实姓名*/ - @Excel(name = "真实姓名", width = 15) - @Schema(description = "真实姓名") - private java.lang.String realname; - /**第三方用户uuid*/ - @Excel(name = "第三方用户uuid", width = 15) - @Schema(description = "第三方用户uuid") - private java.lang.String thirdUserUuid; - /**第三方用户账号*/ - @Excel(name = "第三方用户账号", width = 15) - @Schema(description = "第三方用户账号") - private java.lang.String thirdUserId; - /**创建人*/ + private java.lang.String id; + /** + * 第三方登录id + */ + @Excel(name = "第三方登录id", width = 15) + @Schema(description = "第三方登录id") + private java.lang.String sysUserId; + /** + * 登录来源 + */ + @Excel(name = "登录来源", width = 15) + @Schema(description = "登录来源") + private java.lang.String thirdType; + /** + * 头像 + */ + @Excel(name = "头像", width = 15) + @Schema(description = "头像") + private java.lang.String avatar; + /** + * 状态(1-正常,2-冻结) + */ + @Excel(name = "状态(1-正常,2-冻结)", width = 15) + @Schema(description = "状态(1-正常,2-冻结)") + private java.lang.Integer status; + /** + * 删除状态(0-正常,1-已删除) + */ + @Excel(name = "删除状态(0-正常,1-已删除)", width = 15) + @Schema(description = "删除状态(0-正常,1-已删除)") + private java.lang.Integer delFlag; + /** + * 真实姓名 + */ + @Excel(name = "真实姓名", width = 15) + @Schema(description = "真实姓名") + private java.lang.String realname; + /** + * 第三方用户uuid + */ + @Excel(name = "第三方用户uuid", width = 15) + @Schema(description = "第三方用户uuid") + private java.lang.String thirdUserUuid; + /** + * 第三方用户账号 + */ + @Excel(name = "第三方用户账号", width = 15) + @Schema(description = "第三方用户账号") + private java.lang.String thirdUserId; + /** + * 创建人 + */ @Excel(name = "创建人", width = 15) private java.lang.String createBy; - /**创建日期*/ + /** + * 创建日期 + */ @Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private java.util.Date createTime; - /**修改人*/ + /** + * 修改人 + */ @Excel(name = "修改人", width = 15) private java.lang.String updateBy; - /**修改日期*/ + /** + * 修改日期 + */ @Excel(name = "修改日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private java.util.Date updateTime; - /**租户id*/ - private java.lang.Integer tenantId; + /** + * 租户id + */ + private java.lang.Integer tenantId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysThirdAppConfig.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysThirdAppConfig.java index 844b600..d04ab08 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysThirdAppConfig.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysThirdAppConfig.java @@ -16,65 +16,85 @@ import java.util.Date; /** * @Description: 第三方配置表 * @Author: jeecg-boot - * @Date: 2023-02-03 + * @Date: 2023-02-03 * @Version: V1.0 */ @Data @TableName("sys_third_app_config") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@Schema(description="sys_third_app_config对象") +@Schema(description = "sys_third_app_config对象") public class SysThirdAppConfig { - /**编号*/ + /** + * 编号 + */ @TableId(type = IdType.ASSIGN_ID) @Schema(description = "编号") private String id; - /**租户id*/ + /** + * 租户id + */ @Excel(name = "租户id", width = 15) @Schema(description = "租户id") private Integer tenantId; - /**钉钉/企业微信第三方企业应用标识*/ + /** + * 钉钉/企业微信第三方企业应用标识 + */ @Excel(name = "钉钉/企业微信第三方企业应用标识", width = 15) @Schema(description = "钉钉/企业微信第三方企业应用标识") private String agentId; - /**钉钉/企业微信 应用id*/ + /** + * 钉钉/企业微信 应用id + */ @Excel(name = "钉钉/企业微信 应用id", width = 15) @Schema(description = "钉钉/企业微信 应用id") private String clientId; - /**钉钉/企业微信应用id对应的秘钥*/ + /** + * 钉钉/企业微信应用id对应的秘钥 + */ @Excel(name = "钉钉/企业微信应用id对应的秘钥", width = 15) @Schema(description = "钉钉/企业微信应用id对应的秘钥") private String clientSecret; - /**企业微信自建应用Secret*/ + /** + * 企业微信自建应用Secret + */ @Excel(name = "企业微信自建应用Secret", width = 15) @Schema(description = "企业微信自建应用Secret") private String agentAppSecret; - /**第三方类别(dingtalk 钉钉 wechat_enterprise 企业微信)*/ + /** + * 第三方类别(dingtalk 钉钉 wechat_enterprise 企业微信) + */ @Excel(name = "第三方类别(dingtalk 钉钉 wechat_enterprise 企业微信)", width = 15) @Schema(description = "第三方类别(dingtalk 钉钉 wechat_enterprise 企业微信)") private String thirdType; - /**是否启用(0-否,1-是)*/ + /** + * 是否启用(0-否,1-是) + */ @Excel(name = "是否启用(0-否,1-是)", width = 15) @Schema(description = "是否启用(0-否,1-是)") private Integer status; - /**创建日期*/ + /** + * 创建日期 + */ @Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; - /**修改日期*/ + /** + * 修改日期 + */ @Excel(name = "修改日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java index 52d03d9..bd28651 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java @@ -1,23 +1,20 @@ package org.jeecg.modules.system.entity; -import java.util.Date; - +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.fasterxml.jackson.annotation.JsonFormat; - import java.io.Serializable; - -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; +import java.util.Date; /** *

@@ -67,7 +64,7 @@ public class SysUser implements Serializable { /** * 头像 */ - @Excel(name = "头像", width = 15,type = 2) + @Excel(name = "头像", width = 15, type = 2) private String avatar; /** @@ -81,7 +78,7 @@ public class SysUser implements Serializable { /** * 性别(1:男 2:女) */ - @Excel(name = "性别", width = 15,dicCode="sex") + @Excel(name = "性别", width = 15, dicCode = "sex") @Dict(dicCode = "sex") private Integer sex; @@ -106,20 +103,22 @@ public class SysUser implements Serializable { */ private Integer loginTenantId; - /**部门名称*/ + /** + * 部门名称 + */ private transient String orgCodeTxt; /** * 状态(1:正常 2:冻结 ) */ - @Excel(name = "状态", width = 15,dicCode="user_status") + @Excel(name = "状态", width = 15, dicCode = "user_status") @Dict(dicCode = "user_status") private Integer status; /** * 删除状态(0,正常,1已删除) */ - @Excel(name = "删除状态", width = 15,dicCode="del_flag") + @Excel(name = "删除状态", width = 15, dicCode = "del_flag") @TableLogic private Integer delFlag; @@ -133,7 +132,7 @@ public class SysUser implements Serializable { * 职务,关联职务表 */ @Excel(name = "职务", width = 15) - @Dict(dictTable ="sys_position",dicText = "name",dicCode = "id") + @Dict(dictTable = "sys_position", dicText = "name", dicCode = "id") @TableField(exist = false) private String post; @@ -170,14 +169,14 @@ public class SysUser implements Serializable { /** * 身份(0 普通成员 1 上级) */ - @Excel(name="(1普通成员 2上级)",width = 15) + @Excel(name = "(1普通成员 2上级)", width = 15) private Integer userIdentity; /** * 负责部门 */ - @Excel(name="负责部门",width = 15,dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") - @Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") + @Excel(name = "负责部门", width = 15, dictTable = "sys_depart", dicText = "depart_name", dicCode = "id") + @Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id") private String departIds; /** @@ -186,7 +185,9 @@ public class SysUser implements Serializable { @TableField(exist = false) private String relTenantIds; - /**设备id uniapp推送用*/ + /** + * 设备id uniapp推送用 + */ private String clientId; /** diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserAgent.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserAgent.java index f443f5d..fec5911 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserAgent.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserAgent.java @@ -1,74 +1,102 @@ package org.jeecg.modules.system.entity; -import java.io.Serializable; -import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; /** * @Description: 用户代理人设置 * @Author: jeecg-boot - * @Date: 2019-04-17 + * @Date: 2019-04-17 * @Version: V1.0 */ @Data @TableName("sys_user_agent") public class SysUserAgent implements Serializable { private static final long serialVersionUID = 1L; - - /**序号*/ - @TableId(type = IdType.ASSIGN_ID) - private java.lang.String id; - /**用户名*/ - @Excel(name = "用户名", width = 15) - private java.lang.String userName; - /**代理人用户名*/ - @Excel(name = "代理人用户名", width = 15) - private java.lang.String agentUserName; - /**代理开始时间*/ - @Excel(name = "代理开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date startTime; - /**代理结束时间*/ - @Excel(name = "代理结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date endTime; - /**状态0无效1有效*/ - @Excel(name = "状态0无效1有效", width = 15) - private java.lang.String status; - /**创建人名称*/ - @Excel(name = "创建人名称", width = 15) - private java.lang.String createName; - /**创建人登录名称*/ - @Excel(name = "创建人登录名称", width = 15) - private java.lang.String createBy; - /**创建日期*/ - @Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date createTime; - /**更新人名称*/ - @Excel(name = "更新人名称", width = 15) - private java.lang.String updateName; - /**更新人登录名称*/ - @Excel(name = "更新人登录名称", width = 15) - private java.lang.String updateBy; - /**更新日期*/ - @Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date updateTime; - /**所属部门*/ - @Excel(name = "所属部门", width = 15) - private java.lang.String sysOrgCode; - /**所属公司*/ - @Excel(name = "所属公司", width = 15) - private java.lang.String sysCompanyCode; + + /** + * 序号 + */ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /** + * 用户名 + */ + @Excel(name = "用户名", width = 15) + private java.lang.String userName; + /** + * 代理人用户名 + */ + @Excel(name = "代理人用户名", width = 15) + private java.lang.String agentUserName; + /** + * 代理开始时间 + */ + @Excel(name = "代理开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date startTime; + /** + * 代理结束时间 + */ + @Excel(name = "代理结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date endTime; + /** + * 状态0无效1有效 + */ + @Excel(name = "状态0无效1有效", width = 15) + private java.lang.String status; + /** + * 创建人名称 + */ + @Excel(name = "创建人名称", width = 15) + private java.lang.String createName; + /** + * 创建人登录名称 + */ + @Excel(name = "创建人登录名称", width = 15) + private java.lang.String createBy; + /** + * 创建日期 + */ + @Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /** + * 更新人名称 + */ + @Excel(name = "更新人名称", width = 15) + private java.lang.String updateName; + /** + * 更新人登录名称 + */ + @Excel(name = "更新人登录名称", width = 15) + private java.lang.String updateBy; + /** + * 更新日期 + */ + @Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /** + * 所属部门 + */ + @Excel(name = "所属部门", width = 15) + private java.lang.String sysOrgCode; + /** + * 所属公司 + */ + @Excel(name = "所属公司", width = 15) + private java.lang.String sysCompanyCode; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserDepart.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserDepart.java index d370ddd..b623fdf 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserDepart.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserDepart.java @@ -1,13 +1,12 @@ package org.jeecg.modules.system.entity; -import java.io.Serializable; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; - import lombok.Data; +import java.io.Serializable; + /** * @Description: 用户部门 * @author: jeecg-boot @@ -15,24 +14,31 @@ import lombok.Data; @Data @TableName("sys_user_depart") public class SysUserDepart implements Serializable { - private static final long serialVersionUID = 1L; - - /**主键id*/ - @TableId(type = IdType.ASSIGN_ID) - private String id; - /**用户id*/ - private String userId; - /**部门id*/ - private String depId; - public SysUserDepart(String id, String userId, String depId) { - super(); - this.id = id; - this.userId = userId; - this.depId = depId; - } + private static final long serialVersionUID = 1L; - public SysUserDepart(String id, String departId) { - this.userId = id; - this.depId = departId; - } + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + /** + * 用户id + */ + private String userId; + /** + * 部门id + */ + private String depId; + + public SysUserDepart(String id, String userId, String depId) { + super(); + this.id = id; + this.userId = userId; + this.depId = depId; + } + + public SysUserDepart(String id, String departId) { + this.userId = id; + this.depId = departId; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserPosition.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserPosition.java index bb758eb..f7dbde3 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserPosition.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserPosition.java @@ -15,40 +15,54 @@ import java.util.Date; /** * @Description: 用户职位关系表 * @Author: jeecg-boot - * @Date: 2023-02-14 + * @Date: 2023-02-14 * @Version: V1.0 */ -@Schema(description="sys_user_position对象") +@Schema(description = "sys_user_position对象") @Data @TableName("sys_user_position") public class SysUserPosition implements Serializable { private static final long serialVersionUID = 1L; - /**主键*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键") private String id; - /**用户id*/ - @Excel(name = "用户id", width = 15) + /** + * 用户id + */ + @Excel(name = "用户id", width = 15) @Schema(description = "用户id") private String userId; - /**职位id*/ + /** + * 职位id + */ @Schema(description = "职位id") private String positionId; - /**创建人*/ + /** + * 创建人 + */ @Schema(description = "创建人") private String createBy; - /**创建时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "创建时间") private Date createTime; - /**修改人*/ + /** + * 修改人 + */ @Schema(description = "修改人") private String updateBy; - /**修改时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 修改时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "修改时间") private Date updateTime; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserRole.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserRole.java index 1998e3d..fc01c6f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserRole.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserRole.java @@ -1,14 +1,13 @@ package org.jeecg.modules.system.entity; -import java.io.Serializable; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import java.io.Serializable; + /** *

* 用户角色表 @@ -26,7 +25,7 @@ public class SysUserRole implements Serializable { @TableId(type = IdType.ASSIGN_ID) private String id; - + /** * 用户id */ @@ -36,16 +35,18 @@ public class SysUserRole implements Serializable { * 角色id */ private String roleId; - - /**租户ID*/ - private java.lang.Integer tenantId; - - public SysUserRole() { - } - public SysUserRole(String userId, String roleId) { - this.userId = userId; - this.roleId = roleId; - } + /** + * 租户ID + */ + private java.lang.Integer tenantId; + + public SysUserRole() { + } + + public SysUserRole(String userId, String roleId) { + this.userId = userId; + this.roleId = roleId; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserTenant.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserTenant.java index 735f4a6..56263ea 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserTenant.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUserTenant.java @@ -17,47 +17,63 @@ import java.util.Date; /** * @Description: sys_user_tenant_relation * @Author: jeecg-boot - * @Date: 2022-12-23 + * @Date: 2022-12-23 * @Version: V1.0 */ @Data @TableName("sys_user_tenant") @Accessors(chain = true) @EqualsAndHashCode(callSuper = false) -@Schema(description="sys_user_tenant对象") +@Schema(description = "sys_user_tenant对象") public class SysUserTenant implements Serializable { private static final long serialVersionUID = 1L; - /**主键id*/ - @TableId(type = IdType.ASSIGN_ID) + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) @Schema(description = "主键id") private String id; - /**用户id*/ - @Excel(name = "用户id", width = 15) + /** + * 用户id + */ + @Excel(name = "用户id", width = 15) @Schema(description = "用户id") private String userId; - /**租户id*/ - @Excel(name = "租户id", width = 15) + /** + * 租户id + */ + @Excel(name = "租户id", width = 15) @Schema(description = "租户id") private Integer tenantId; - /**状态(1 正常 2 冻结 3 待审核 4 拒绝)*/ - @Excel(name = "状态(1 正常 2 冻结 3 待审核 4 拒绝)", width = 15) + /** + * 状态(1 正常 2 冻结 3 待审核 4 拒绝) + */ + @Excel(name = "状态(1 正常 2 冻结 3 待审核 4 拒绝)", width = 15) @Schema(description = "状态(1 正常 2 冻结 3 待审核 4 拒绝)") private String status; - /**创建人登录名称*/ + /** + * 创建人登录名称 + */ @Schema(description = "创建人登录名称") private String createBy; - /**创建日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "创建日期") private Date createTime; - /**更新人登录名称*/ + /** + * 更新人登录名称 + */ @Schema(description = "更新人登录名称") private String updateBy; - /**更新日期*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") @Schema(description = "更新日期") private Date updateTime; } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java index 4df93c7..6013b17 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementMapper.java @@ -1,33 +1,31 @@ package org.jeecg.modules.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.system.entity.SysAnnouncement; + import java.util.Date; import java.util.List; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.system.entity.SysAnnouncement; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - /** * @Description: 系统通告表 * @Author: jeecg-boot - * @Date: 2019-01-02 + * @Date: 2019-01-02 * @Version: V1.0 */ public interface SysAnnouncementMapper extends BaseMapper { /** * 通过消息类型和用户id获取系统通告 + * * @param page - * @param userId 用户id + * @param userId 用户id * @param msgCategory 消息类型 * @return */ - List querySysCementListByUserId(Page page, @Param("userId")String userId,@Param("msgCategory")String msgCategory, - @Param("tenantId")Integer tenantId, @Param("beginDate")Date beginDate); + List querySysCementListByUserId(Page page, @Param("userId") String userId, @Param("msgCategory") String msgCategory, + @Param("tenantId") Integer tenantId, @Param("beginDate") Date beginDate); /** * 获取用户未读消息数量 @@ -39,6 +37,7 @@ public interface SysAnnouncementMapper extends BaseMapper { /** * 分页查询全部消息列表 + * * @param page * @param userId * @param fromUser @@ -46,13 +45,14 @@ public interface SysAnnouncementMapper extends BaseMapper { * @param endDate * @return */ - List queryAllMessageList(Page page, @Param("userId")String userId, @Param("fromUser")String fromUser, @Param("starFlag")String starFlag, @Param("beginDate")Date beginDate, @Param("endDate")Date endDate); - + List queryAllMessageList(Page page, @Param("userId") String userId, @Param("fromUser") String fromUser, @Param("starFlag") String starFlag, @Param("beginDate") Date beginDate, @Param("endDate") Date endDate); + /** * 查询用户未阅读的通知公告 + * * @param currDate * @param userId * @return */ - List getNotSendedAnnouncementlist(@Param("currDate") Date currDate, @Param("userId")String userId); + List getNotSendedAnnouncementlist(@Param("currDate") Date currDate, @Param("userId") String userId); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java index a18ac33..48331fe 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysAnnouncementSendMapper.java @@ -1,46 +1,48 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.system.entity.SysAnnouncementSend; import org.jeecg.modules.system.model.AnnouncementSendModel; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.util.List; /** * @Description: 用户通告阅读标记表 * @Author: jeecg-boot - * @Date: 2019-02-21 + * @Date: 2019-02-21 * @Version: V1.0 */ public interface SysAnnouncementSendMapper extends BaseMapper { - /** - * 获取我的消息 - * @param announcementSendModel - * @param page - * @return - */ - public List getMyAnnouncementSendList(Page page,@Param("announcementSendModel") AnnouncementSendModel announcementSendModel); + /** + * 获取我的消息 + * + * @param announcementSendModel + * @param page + * @return + */ + public List getMyAnnouncementSendList(Page page, @Param("announcementSendModel") AnnouncementSendModel announcementSendModel); - /** - * 获取一条记录 - * @param sendId - * @return - */ - AnnouncementSendModel getOne(@Param("sendId") String sendId); + /** + * 获取一条记录 + * + * @param sendId + * @return + */ + AnnouncementSendModel getOne(@Param("sendId") String sendId); - /** - * 修改为已读消息 - */ - void updateReaded(@Param("userId") String userId, @Param("annoceIdList") List annoceIdList); + /** + * 修改为已读消息 + */ + void updateReaded(@Param("userId") String userId, @Param("annoceIdList") List annoceIdList); - /** - * 清除所有未读消息 - * @param userId - */ - void clearAllUnReadMessage(@Param("userId") String userId); + /** + * 清除所有未读消息 + * + * @param userId + */ + void clearAllUnReadMessage(@Param("userId") String userId); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java index 208ba7e..bea572b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCategoryMapper.java @@ -1,51 +1,53 @@ package org.jeecg.modules.system.mapper; -import java.util.List; -import java.util.Map; - import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.jeecg.modules.system.entity.SysCategory; import org.jeecg.modules.system.model.TreeSelectModel; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; +import java.util.Map; /** * @Description: 分类字典 * @Author: jeecg-boot - * @Date: 2019-05-29 + * @Date: 2019-05-29 * @Version: V1.0 */ public interface SysCategoryMapper extends BaseMapper { - - /** - * 根据父级ID查询树节点数据 - * @param pid + + /** + * 根据父级ID查询树节点数据 + * + * @param pid * @param query - * @return - */ - public List queryListByPid(@Param("pid") String pid,@Param("query") Map query); + * @return + */ + public List queryListByPid(@Param("pid") String pid, @Param("query") Map query); /** * 通过code查询分类字典表 + * * @param code * @return */ - @Select("SELECT ID FROM sys_category WHERE CODE = #{code,jdbcType=VARCHAR}") - public String queryIdByCode(@Param("code") String code); - - /** - * 获取分类字典最大的code - * @param page - * @return - */ - @InterceptorIgnore(tenantLine = "true") - @Select("SELECT code FROM sys_category WHERE code IS NOT NULL AND pid=#{categoryPid} ORDER BY code DESC") - List getMaxCategoryCodeByPage(@Param("page") Page page,@Param("categoryPid") String categoryPid); + @Select("SELECT ID FROM sys_category WHERE CODE = #{code,jdbcType=VARCHAR}") + public String queryIdByCode(@Param("code") String code); - @InterceptorIgnore(tenantLine = "true") - @Select("SELECT code FROM sys_category WHERE ID = #{id}") - SysCategory selectSysCategoryById(@Param("id") String id); + /** + * 获取分类字典最大的code + * + * @param page + * @return + */ + @InterceptorIgnore(tenantLine = "true") + @Select("SELECT code FROM sys_category WHERE code IS NOT NULL AND pid=#{categoryPid} ORDER BY code DESC") + List getMaxCategoryCodeByPage(@Param("page") Page page, @Param("categoryPid") String categoryPid); + + @InterceptorIgnore(tenantLine = "true") + @Select("SELECT code FROM sys_category WHERE ID = #{id}") + SysCategory selectSysCategoryById(@Param("id") String id); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCommentMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCommentMapper.java index 63c3740..b2c6238 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCommentMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysCommentMapper.java @@ -32,6 +32,7 @@ public interface SysCommentMapper extends BaseMapper { /** * 根据用户名获取用户信息 + * * @param idSet * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDataLogMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDataLogMapper.java index 4bdcffd..a831f17 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDataLogMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDataLogMapper.java @@ -1,21 +1,21 @@ package org.jeecg.modules.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.system.entity.SysDataLog; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - /** * @Description: 系统数据日志Mapper接口 * @author: jeecg-boot */ -public interface SysDataLogMapper extends BaseMapper{ - /** - * 通过表名及数据Id获取最大版本 - * @param tableName - * @param dataId - * @return - */ - public String queryMaxDataVer(@Param("tableName") String tableName,@Param("dataId") String dataId); - +public interface SysDataLogMapper extends BaseMapper { + /** + * 通过表名及数据Id获取最大版本 + * + * @param tableName + * @param dataId + * @return + */ + public String queryMaxDataVer(@Param("tableName") String tableName, @Param("dataId") String dataId); + } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java index 5fe7228..c61660f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java @@ -7,8 +7,6 @@ import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.entity.SysUser; -import org.jeecg.modules.system.model.SysDepartTreeModel; -import org.jeecg.modules.system.model.TreeModel; import org.jeecg.modules.system.vo.SysDepartExportVo; import org.jeecg.modules.system.vo.SysUserDepVo; import org.jeecg.modules.system.vo.lowapp.ExportDepartVo; @@ -20,162 +18,182 @@ import java.util.List; *

* 部门 Mapper 接口 *

- * + * * @Author: Steve - * @Since: 2019-01-22 + * @Since: 2019-01-22 */ public interface SysDepartMapper extends BaseMapper { - - /** - * 根据用户ID查询部门集合 + + /** + * 根据用户ID查询部门集合 + * * @param userId 用户id * @return List - */ - public List queryUserDeparts(@Param("userId") String userId); + */ + public List queryUserDeparts(@Param("userId") String userId); - /** - * 根据用户名查询部门 - * - * @param username - * @return - */ - public List queryDepartsByUsername(@Param("username") String username); - - /** - * 根据用户名查询部门 - * - * @param userId - * @return - */ - public List queryDepartsByUserId(@Param("userId") String userId); + /** + * 根据用户名查询部门 + * + * @param username + * @return + */ + public List queryDepartsByUsername(@Param("username") String username); + + /** + * 根据用户名查询部门 + * + * @param userId + * @return + */ + public List queryDepartsByUserId(@Param("userId") String userId); /** * 通过部门编码获取部门id + * * @param orgCode 部门编码 * @return String */ - @Select("select id from sys_depart where org_code=#{orgCode}") - public String queryDepartIdByOrgCode(@Param("orgCode") String orgCode); - + @Select("select id from sys_depart where org_code=#{orgCode}") + public String queryDepartIdByOrgCode(@Param("orgCode") String orgCode); + /** * 通过部门id,查询部门下的用户的账号 + * * @param departIds 部门ID集合 * @return String */ - public List queryUserAccountByDepartIds(@Param("departIds") List departIds); + public List queryUserAccountByDepartIds(@Param("departIds") List departIds); /** * 通过部门id 查询部门id,父id + * * @param departId 部门id * @return */ - @Select("select id,parent_id from sys_depart where id=#{departId}") - public SysDepart getParentDepartId(@Param("departId") String departId); + @Select("select id,parent_id from sys_depart where id=#{departId}") + public SysDepart getParentDepartId(@Param("departId") String departId); - /** - * 根据部门Id查询,当前和下级所有部门IDS - * @param departId - * @return - */ - List getSubDepIdsByDepId(@Param("departId") String departId); + /** + * 根据部门Id查询,当前和下级所有部门IDS + * + * @param departId + * @return + */ + List getSubDepIdsByDepId(@Param("departId") String departId); - /** - * 根据部门编码获取部门下所有IDS - * @param orgCodes - * @return - */ - List getSubDepIdsByOrgCodes(@org.apache.ibatis.annotations.Param("orgCodes") String[] orgCodes); + /** + * 根据部门编码获取部门下所有IDS + * + * @param orgCodes + * @return + */ + List getSubDepIdsByOrgCodes(@org.apache.ibatis.annotations.Param("orgCodes") String[] orgCodes); /** * 根据parent_id查询下级部门 + * * @param parentId 父id * @return List */ List queryTreeListByPid(@Param("parentId") String parentId); - /** - * 根据id下级部门数量 - * @param parentId - * @return - */ - @Select("SELECT count(*) FROM sys_depart where del_flag ='0' AND parent_id = #{parentId,jdbcType=VARCHAR}") - Integer queryCountByPid(@Param("parentId")String parentId); - /** - * 根据OrgCod查询所属公司信息 - * @param orgCode - * @return - */ - SysDepart queryCompByOrgCode(@Param("orgCode")String orgCode); - /** - * 根据id下级部门 - * @param parentId - * @return - */ - @Select("SELECT * FROM sys_depart where del_flag ='0' AND parent_id = #{parentId,jdbcType=VARCHAR}") - List queryDeptByPid(@Param("parentId")String parentId); - /** - * 通过父级id和租户id查询部门 - * @param parentId - * @param tenantId - * @return - */ - @InterceptorIgnore(tenantLine = "true") - List queryBookDepTreeSync(@Param("parentId") String parentId, @Param("tenantId") Integer tenantId, @Param("departName") String departName); + /** + * 根据id下级部门数量 + * + * @param parentId + * @return + */ + @Select("SELECT count(*) FROM sys_depart where del_flag ='0' AND parent_id = #{parentId,jdbcType=VARCHAR}") + Integer queryCountByPid(@Param("parentId") String parentId); - @InterceptorIgnore(tenantLine = "true") - @Select("SELECT * FROM sys_depart where id = #{id,jdbcType=VARCHAR}") - SysDepart getDepartById(@Param("id") String id); + /** + * 根据OrgCod查询所属公司信息 + * + * @param orgCode + * @return + */ + SysDepart queryCompByOrgCode(@Param("orgCode") String orgCode); - @InterceptorIgnore(tenantLine = "true") - List getMaxCodeDepart(@Param("page") Page page, @Param("parentId") String parentId); + /** + * 根据id下级部门 + * + * @param parentId + * @return + */ + @Select("SELECT * FROM sys_depart where del_flag ='0' AND parent_id = #{parentId,jdbcType=VARCHAR}") + List queryDeptByPid(@Param("parentId") String parentId); - /** - * 修改部门状态字段: 是否子节点 - * @param id 部门id - * @param leaf 叶子节点 - * @return int - */ - @Update("UPDATE sys_depart SET iz_leaf=#{leaf} WHERE id = #{id}") - int setMainLeaf(@Param("id") String id, @Param("leaf") Integer leaf); + /** + * 通过父级id和租户id查询部门 + * + * @param parentId + * @param tenantId + * @return + */ + @InterceptorIgnore(tenantLine = "true") + List queryBookDepTreeSync(@Param("parentId") String parentId, @Param("tenantId") Integer tenantId, @Param("departName") String departName); - /** - * 获取租户id和部门父id获取的部门数据 - * @param tenantId - * @param parentId - * @return - */ + @InterceptorIgnore(tenantLine = "true") + @Select("SELECT * FROM sys_depart where id = #{id,jdbcType=VARCHAR}") + SysDepart getDepartById(@Param("id") String id); + + @InterceptorIgnore(tenantLine = "true") + List getMaxCodeDepart(@Param("page") Page page, @Param("parentId") String parentId); + + /** + * 修改部门状态字段: 是否子节点 + * + * @param id 部门id + * @param leaf 叶子节点 + * @return int + */ + @Update("UPDATE sys_depart SET iz_leaf=#{leaf} WHERE id = #{id}") + int setMainLeaf(@Param("id") String id, @Param("leaf") Integer leaf); + + /** + * 获取租户id和部门父id获取的部门数据 + * + * @param tenantId + * @param parentId + * @return + */ List getDepartList(@Param("parentId") String parentId, @Param("tenantId") Integer tenantId); - /** - * 根据部门名称和租户id获取部门数据 - * @param departName - * @param tenantId - * @return - */ - List getDepartByName(@Param("departName")String departName, @Param("tenantId")Integer tenantId,@Param("parentId") String parentId); + /** + * 根据部门名称和租户id获取部门数据 + * + * @param departName + * @param tenantId + * @return + */ + List getDepartByName(@Param("departName") String departName, @Param("tenantId") Integer tenantId, @Param("parentId") String parentId); - /** - * 根据部门id获取用户id和部门名称 - * @param userList - * @return - */ - List getUserDepartByTenantUserId(@Param("userList") List userList, @Param("tenantId") Integer tenantId); + /** + * 根据部门id获取用户id和部门名称 + * + * @param userList + * @return + */ + List getUserDepartByTenantUserId(@Param("userList") List userList, @Param("tenantId") Integer tenantId); - /** - * 根据部门名称和租户id获取分页部门数据 - * @param page - * @param departName - * @param tenantId - * @param parentId - * @return - */ - List getDepartPageByName(@Param("page") Page page, @Param("departName") String departName, @Param("tenantId") Integer tenantId, @Param("parentId") String parentId); + /** + * 根据部门名称和租户id获取分页部门数据 + * + * @param page + * @param departName + * @param tenantId + * @param parentId + * @return + */ + List getDepartPageByName(@Param("page") Page page, @Param("departName") String departName, @Param("tenantId") Integer tenantId, @Param("parentId") String parentId); - /** - * 获取租户id和部门父id获取的部门数据 - * @param tenantId - * @param parentId - * @return - */ - List getSysDepartList(@Param("parentId") String parentId,@Param("tenantId") Integer tenantId); + /** + * 获取租户id和部门父id获取的部门数据 + * + * @param tenantId + * @param parentId + * @return + */ + List getSysDepartList(@Param("parentId") String parentId, @Param("tenantId") Integer tenantId); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartPermissionMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartPermissionMapper.java index bfc44f4..f41f9f4 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartPermissionMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartPermissionMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.system.entity.SysDepartPermission; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.system.entity.SysDepartPermission; /** * @Description: 部门权限表 * @Author: jeecg-boot - * @Date: 2020-02-11 + * @Date: 2020-02-11 * @Version: V1.0 */ public interface SysDepartPermissionMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleMapper.java index 8ee074e..3f9a78c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleMapper.java @@ -1,20 +1,21 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.system.entity.SysDepartRole; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; /** * @Description: 部门角色 * @Author: jeecg-boot - * @Date: 2020-02-12 + * @Date: 2020-02-12 * @Version: V1.0 */ public interface SysDepartRoleMapper extends BaseMapper { /** * 根据用户id,部门id查询可授权所有部门角色 + * * @param orgCode * @param userId * @return diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRolePermissionMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRolePermissionMapper.java index 8fc9848..1cd6337 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRolePermissionMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRolePermissionMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.system.entity.SysDepartRolePermission; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.system.entity.SysDepartRolePermission; /** * @Description: 部门角色权限 * @Author: jeecg-boot - * @Date: 2020-02-12 + * @Date: 2020-02-12 * @Version: V1.0 */ public interface SysDepartRolePermissionMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleUserMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleUserMapper.java index 9e57c6d..dd43c0a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleUserMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartRoleUserMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.system.entity.SysDepartRoleUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.system.entity.SysDepartRoleUser; /** * @Description: 部门角色人员信息 * @Author: jeecg-boot - * @Date: 2020-02-13 + * @Date: 2020-02-13 * @Version: V1.0 */ public interface SysDepartRoleUserMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java index d53093e..c85bf06 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictItemMapper.java @@ -1,8 +1,8 @@ package org.jeecg.modules.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Select; import org.jeecg.modules.system.entity.SysDictItem; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; @@ -18,6 +18,7 @@ public interface SysDictItemMapper extends BaseMapper { /** * 通过字典id查询字典项 + * * @param mainId 字典id * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java index d62b53f..0552da4 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java @@ -26,178 +26,197 @@ import java.util.Map; * @since 2018-12-28 */ public interface SysDictMapper extends BaseMapper { - - /** - * 重复检查SQL - * @param duplicateCheckVo - * @return - */ - @Deprecated - public Long duplicateCheckCountSql(DuplicateCheckVo duplicateCheckVo); /** - * 重复校验 sql语句 + * 重复检查SQL + * * @param duplicateCheckVo * @return */ - @Deprecated - public Long duplicateCheckCountSqlNoDataId(DuplicateCheckVo duplicateCheckVo); + @Deprecated + public Long duplicateCheckCountSql(DuplicateCheckVo duplicateCheckVo); /** - * 通过字典code获取字典数据 - * @param code 字典code - * @return List + * 重复校验 sql语句 + * + * @param duplicateCheckVo + * @return */ - public List queryDictItemsByCode(@Param("code") String code); - - /** - * 查询有效的数据字典项 - * @param code - * @return - */ - List queryEnableDictItemsByCode(@Param("code") String code); - - - /** - * 通过多个字典code获取字典数据 - * - * @param dictCodeList - * @return - */ - public List queryDictItemsByCodeList(@Param("dictCodeList") List dictCodeList); + @Deprecated + public Long duplicateCheckCountSqlNoDataId(DuplicateCheckVo duplicateCheckVo); /** * 通过字典code获取字典数据 + * + * @param code 字典code + * @return List + */ + public List queryDictItemsByCode(@Param("code") String code); + + /** + * 查询有效的数据字典项 + * + * @param code + * @return + */ + List queryEnableDictItemsByCode(@Param("code") String code); + + + /** + * 通过多个字典code获取字典数据 + * + * @param dictCodeList + * @return + */ + public List queryDictItemsByCodeList(@Param("dictCodeList") List dictCodeList); + + /** + * 通过字典code获取字典数据 + * * @param code * @param key * @return */ - public String queryDictTextByKey(@Param("code") String code,@Param("key") String key); + public String queryDictTextByKey(@Param("code") String code, @Param("key") String key); - /** - * 可通过多个字典code查询翻译文本 - * @param dictCodeList 多个字典code - * @param keys 数据列表 - * @return - */ - List queryManyDictByKeys(@Param("dictCodeList") List dictCodeList, @Param("keys") List keys); + /** + * 可通过多个字典code查询翻译文本 + * + * @param dictCodeList 多个字典code + * @param keys 数据列表 + * @return + */ + List queryManyDictByKeys(@Param("dictCodeList") List dictCodeList, @Param("keys") List keys); - /** - * 查询系统所有字典项 - * @return - */ - public List queryAllDictItems(List tenantIdList); - - /** - * 查询所有部门 作为字典信息 id -->value,departName -->text - * @return - */ - public List queryAllDepartBackDictModel(); - - /** - * 查询所有用户 作为字典信息 username -->value,realname -->text - * @return - */ - public List queryAllUserBackDictModel(); - - /** - * 根据表名、显示字段名、存储字段名 查询树 - * @param table - * @param text - * @param code - * @param pid - * @param hasChildField + /** + * 查询系统所有字典项 + * + * @return + */ + public List queryAllDictItems(List tenantIdList); + + /** + * 查询所有部门 作为字典信息 id -->value,departName -->text + * + * @return + */ + public List queryAllDepartBackDictModel(); + + /** + * 查询所有用户 作为字典信息 username -->value,realname -->text + * + * @return + */ + public List queryAllUserBackDictModel(); + + /** + * 根据表名、显示字段名、存储字段名 查询树 + * + * @param table + * @param text + * @param code + * @param pid + * @param hasChildField * @param query * @param pidField - * @return - */ - @Deprecated - List queryTreeList(@Param("query") Map query, @Param("table") String table, @Param("text") String text, @Param("code") String code, - @Param("pidField") String pidField, @Param("pid") String pid, @Param("hasChildField") String hasChildField, - @Param("converIsLeafVal") int converIsLeafVal); + * @return + */ + @Deprecated + List queryTreeList(@Param("query") Map query, @Param("table") String table, @Param("text") String text, @Param("code") String code, + @Param("pidField") String pidField, @Param("pid") String pid, @Param("hasChildField") String hasChildField, + @Param("converIsLeafVal") int converIsLeafVal); - /** - * 删除 - * @param id - */ - @Select("delete from sys_dict where id = #{id}") - public void deleteOneById(@Param("id") String id); + /** + * 删除 + * + * @param id + */ + @Select("delete from sys_dict where id = #{id}") + public void deleteOneById(@Param("id") String id); - /** - * 查询被逻辑删除的数据 - * @return - */ - @Select("select * from sys_dict where del_flag = 1") - public List queryDeleteList(); + /** + * 查询被逻辑删除的数据 + * + * @return + */ + @Select("select * from sys_dict where del_flag = 1") + public List queryDeleteList(); - /** - * 修改状态值 - * @param delFlag - * @param id - */ - @Update("update sys_dict set del_flag = #{flag,jdbcType=INTEGER} where id = #{id,jdbcType=VARCHAR}") - public void updateDictDelFlag(@Param("flag") int delFlag, @Param("id") String id); + /** + * 修改状态值 + * + * @param delFlag + * @param id + */ + @Update("update sys_dict set del_flag = #{flag,jdbcType=INTEGER} where id = #{id,jdbcType=VARCHAR}") + public void updateDictDelFlag(@Param("flag") int delFlag, @Param("id") String id); - /** - * 分页查询字典表数据 - * @param page - * @param query - * @return - */ - @Deprecated - public Page queryDictTablePageList(Page page, @Param("query") DictQuery query); + /** + * 分页查询字典表数据 + * + * @param page + * @param query + * @return + */ + @Deprecated + public Page queryDictTablePageList(Page page, @Param("query") DictQuery query); - /** - * 查询 字典表数据 支持查询条件 分页 - * @param page - * @param table - * @param text - * @param code - * @param filterSql - * @return - */ - @Deprecated - IPage queryPageTableDictWithFilter(Page page, @Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("filterSql") String filterSql); + /** + * 查询 字典表数据 支持查询条件 分页 + * + * @param page + * @param table + * @param text + * @param code + * @param filterSql + * @return + */ + @Deprecated + IPage queryPageTableDictWithFilter(Page page, @Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("filterSql") String filterSql); - /** - * 查询 字典表数据 支持查询条件 查询所有 - * @param table - * @param text - * @param code - * @param filterSql - * @return - */ - @Deprecated - List queryTableDictWithFilter(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("filterSql") String filterSql); + /** + * 查询 字典表数据 支持查询条件 查询所有 + * + * @param table + * @param text + * @param code + * @param filterSql + * @return + */ + @Deprecated + List queryTableDictWithFilter(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("filterSql") String filterSql); - /** - * 查询字典表的数据 - * @param table 表名 - * @param text 显示字段名 - * @param code 存储字段名 - * @param filterSql 条件sql - * @param codeValues 存储字段值 作为查询条件in - * @return - */ - @Deprecated - List queryTableDictByKeysAndFilterSql(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("filterSql") String filterSql, - @Param("codeValues") List codeValues); + /** + * 查询字典表的数据 + * + * @param table 表名 + * @param text 显示字段名 + * @param code 存储字段名 + * @param filterSql 条件sql + * @param codeValues 存储字段值 作为查询条件in + * @return + */ + @Deprecated + List queryTableDictByKeysAndFilterSql(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("filterSql") String filterSql, + @Param("codeValues") List codeValues); - /** - * 根据应用id获取字典列表和详情 - * @param lowAppId - * @param tenantId - * @return - */ - @InterceptorIgnore(tenantLine = "true") + /** + * 根据应用id获取字典列表和详情 + * + * @param lowAppId + * @param tenantId + * @return + */ + @InterceptorIgnore(tenantLine = "true") List getDictListByLowAppId(@Param("lowAppId") String lowAppId, @Param("tenantId") Integer tenantId); - /** - * 查询被逻辑删除的数据(根据租户id) - * @return - */ - @Select("select * from sys_dict where del_flag = 1 and tenant_id = #{tenantId}") - List queryDeleteListBtTenantId(@Param("tenantId") Integer tenantId); + /** + * 查询被逻辑删除的数据(根据租户id) + * + * @return + */ + @Select("select * from sys_dict where del_flag = 1 and tenant_id = #{tenantId}") + List queryDeleteListBtTenantId(@Param("tenantId") Integer tenantId); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysGatewayRouteMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysGatewayRouteMapper.java index 43cb00b..7aeba8c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysGatewayRouteMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysGatewayRouteMapper.java @@ -6,7 +6,7 @@ import org.jeecg.modules.system.entity.SysGatewayRoute; /** * @Description: gateway路由管理 * @Author: jeecg-boot - * @Date: 2020-05-26 + * @Date: 2020-05-26 * @Version: V1.0 */ public interface SysGatewayRouteMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java index f84d124..801b15b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysLogMapper.java @@ -1,14 +1,13 @@ package org.jeecg.modules.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.system.entity.SysLog; + import java.util.Date; import java.util.List; import java.util.Map; -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.system.entity.SysLog; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - /** *

* 系统日志表 Mapper 接口 @@ -19,42 +18,46 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface SysLogMapper extends BaseMapper { - /** - * 清空所有日志记录 - */ - public void removeAll(); + /** + * 清空所有日志记录 + */ + public void removeAll(); - /** - * 获取系统总访问次数 - * - * @return Long - */ - Long findTotalVisitCount(); + /** + * 获取系统总访问次数 + * + * @return Long + */ + Long findTotalVisitCount(); - //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 - /** - * 获取系统今日访问次数 - * @param dayStart 开始时间 - * @param dayEnd 结束时间 - * @return Long - */ - Long findTodayVisitCount(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd); + //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 - /** - * 获取系统今日访问 IP数 - * @param dayStart 开始时间 - * @param dayEnd 结束时间 - * @return Long - */ - Long findTodayIp(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd); - //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 - - /** - * 首页:根据时间统计访问数量/ip数量 - * @param dayStart - * @param dayEnd + /** + * 获取系统今日访问次数 + * + * @param dayStart 开始时间 + * @param dayEnd 结束时间 + * @return Long + */ + Long findTodayVisitCount(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd); + + /** + * 获取系统今日访问 IP数 + * + * @param dayStart 开始时间 + * @param dayEnd 结束时间 + * @return Long + */ + Long findTodayIp(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd); + //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + + /** + * 首页:根据时间统计访问数量/ip数量 + * + * @param dayStart + * @param dayEnd * @param dbType - * @return - */ - List> findVisitCount(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd, @Param("dbType") String dbType); + * @return + */ + List> findVisitCount(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd, @Param("dbType") String dbType); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPackPermissionMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPackPermissionMapper.java index 5f6eeb2..cc9970e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPackPermissionMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPackPermissionMapper.java @@ -1,21 +1,22 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.system.entity.SysPackPermission; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; /** * @Description: 产品包菜单关系表 * @Author: jeecg-boot - * @Date: 2022-12-31 + * @Date: 2022-12-31 * @Version: V1.0 */ public interface SysPackPermissionMapper extends BaseMapper { /** * 通过产品包id获取菜单id + * * @param packId * @return */ @@ -27,5 +28,5 @@ public interface SysPackPermissionMapper extends BaseMapper { * @param tenantIdList */ void deletePackPermByTenantIds(@Param("tenantIdList") List tenantIdList); - + } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPermissionDataRuleMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPermissionDataRuleMapper.java index 61a55a4..5adb417 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPermissionDataRuleMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPermissionDataRuleMapper.java @@ -1,11 +1,10 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.system.entity.SysPermissionDataRule; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; /** *

@@ -16,13 +15,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @since 2019-04-01 */ public interface SysPermissionDataRuleMapper extends BaseMapper { - - /** - * 根据用户名和权限id查询 - * @param username - * @param permissionId - * @return - */ - public List queryDataRuleIds(@Param("username") String username,@Param("permissionId") String permissionId); + + /** + * 根据用户名和权限id查询 + * + * @param username + * @param permissionId + * @return + */ + public List queryDataRuleIds(@Param("username") String username, @Param("permissionId") String permissionId); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java index cd88eee..f1e1293 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPermissionMapper.java @@ -1,15 +1,14 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import org.jeecg.modules.system.entity.SysPermission; import org.jeecg.modules.system.model.TreeModel; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; /** *

@@ -20,65 +19,73 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @since 2018-12-21 */ public interface SysPermissionMapper extends BaseMapper { - /** - * 通过父菜单ID查询子菜单 - * @param parentId - * @return - */ - public List queryListByParentId(@Param("parentId") String parentId); - - /** - * 根据用户查询用户权限 + /** + * 通过父菜单ID查询子菜单 + * + * @param parentId + * @return + */ + public List queryListByParentId(@Param("parentId") String parentId); + + /** + * 根据用户查询用户权限 + * * @param userId 用户ID * @return List - */ - public List queryByUser(@Param("userId") String userId); - - /** - * 修改菜单状态字段: 是否子节点 - * @param id 菜单id + */ + public List queryByUser(@Param("userId") String userId); + + /** + * 修改菜单状态字段: 是否子节点 + * + * @param id 菜单id * @param leaf 叶子节点 * @return int - */ - @Update("update sys_permission set is_leaf=#{leaf} where id = #{id}") - public int setMenuLeaf(@Param("id") String id,@Param("leaf") int leaf); + */ + @Update("update sys_permission set is_leaf=#{leaf} where id = #{id}") + public int setMenuLeaf(@Param("id") String id, @Param("leaf") int leaf); - /** - * 切换vue3菜单 - */ - @Update("alter table sys_permission rename to sys_permission_v2") - public void backupVue2Menu(); - @Update("alter table sys_permission_v3 rename to sys_permission") - public void changeVue3Menu(); - - /** - * 获取模糊匹配规则的数据权限URL + /** + * 切换vue3菜单 + */ + @Update("alter table sys_permission rename to sys_permission_v2") + public void backupVue2Menu(); + + @Update("alter table sys_permission_v3 rename to sys_permission") + public void changeVue3Menu(); + + /** + * 获取模糊匹配规则的数据权限URL + * * @return List - */ - @Select("SELECT url FROM sys_permission WHERE del_flag = 0 and menu_type = 2 and url like '%*%'") + */ + @Select("SELECT url FROM sys_permission WHERE del_flag = 0 and menu_type = 2 and url like '%*%'") public List queryPermissionUrlWithStar(); - /** - * 根据用户账号查询菜单权限 - * @param sysPermission - * @param username - * @return - */ - public int queryCountByUsername(@Param("username") String username, @Param("permission") SysPermission sysPermission); + /** + * 根据用户账号查询菜单权限 + * + * @param sysPermission + * @param username + * @return + */ + public int queryCountByUsername(@Param("username") String username, @Param("permission") SysPermission sysPermission); - /** - * 查询部门权限数据 - * @param departId - * @return - */ - List queryDepartPermissionList(@Param("departId") String departId); + /** + * 查询部门权限数据 + * + * @param departId + * @return + */ + List queryDepartPermissionList(@Param("departId") String departId); - /** - * 根据用户名称和test角色id查询权限 - * @return - */ - @InterceptorIgnore(tenantLine = "true") + /** + * 根据用户名称和test角色id查询权限 + * + * @return + */ + @InterceptorIgnore(tenantLine = "true") List queryPermissionByTestRoleId(); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPositionMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPositionMapper.java index aa21adb..3027f2d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPositionMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysPositionMapper.java @@ -18,6 +18,7 @@ public interface SysPositionMapper extends BaseMapper { /** * 通过用户id获取职位名称 + * * @param userId * @return */ @@ -25,6 +26,7 @@ public interface SysPositionMapper extends BaseMapper { /** * 通过职位id获取职位名称 + * * @param postList * @return */ @@ -32,6 +34,7 @@ public interface SysPositionMapper extends BaseMapper { /** * 根据职位名称获取职位id + * * @param name * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRoleIndexMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRoleIndexMapper.java index 206f7b7..42db2ea 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRoleIndexMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRoleIndexMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.system.entity.SysRoleIndex; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.system.entity.SysRoleIndex; /** * @Description: 角色首页配置 * @Author: jeecg-boot - * @Date: 2022-03-25 + * @Date: 2022-03-25 * @Version: V1.0 */ public interface SysRoleIndexMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java index 7fefb3b..846b0e3 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRoleMapper.java @@ -1,14 +1,13 @@ package org.jeecg.modules.system.mapper; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.jeecg.modules.system.entity.SysRole; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - import java.util.List; /** @@ -22,6 +21,7 @@ import java.util.List; public interface SysRoleMapper extends BaseMapper { /** * 查询全部的角色(不做租户隔离) + * * @param page * @param role * @return @@ -49,9 +49,10 @@ public interface SysRoleMapper extends BaseMapper { /** * 删除角色与用户关系 + * + * @param roleId * @Author scott * @Date 2019/12/13 16:12 - * @param roleId */ @Delete("delete from sys_user_role where role_id = #{roleId}") void deleteRoleUserRelation(@Param("roleId") String roleId); @@ -59,8 +60,9 @@ public interface SysRoleMapper extends BaseMapper { /** * 删除角色与权限关系 - * @Author scott + * * @param roleId + * @Author scott * @Date 2019/12/13 16:12 */ @Delete("delete from sys_role_permission where role_id = #{roleId}") @@ -68,6 +70,7 @@ public interface SysRoleMapper extends BaseMapper { /** * 根据角色id和当前租户判断当前角色是否存在这个租户中 + * * @param id * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRolePermissionMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRolePermissionMapper.java index 25c08d2..34407b9 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRolePermissionMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysRolePermissionMapper.java @@ -1,7 +1,7 @@ package org.jeecg.modules.system.mapper; -import org.jeecg.modules.system.entity.SysRolePermission; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.system.entity.SysRolePermission; /** *

diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantMapper.java index 2560e07..8bb2e50 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantMapper.java @@ -1,6 +1,5 @@ package org.jeecg.modules.system.mapper; -import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; @@ -24,30 +23,34 @@ public interface SysTenantMapper extends BaseMapper { */ @Select("select MAX(id) id FROM sys_tenant") Integer getMaxTenantId(); - + /** * 获取租户回收站的数据假删除 + * * @param page * @param sysTenant * @return */ List getRecycleBinPageList(@Param("page") Page page, @Param("sysTenant") SysTenant sysTenant); - + /** * 彻底删除租户 + * * @param tenantId */ Integer deleteByTenantId(@Param("tenantIds") List tenantId); /** * 租户还原 + * * @param list * @return */ - Integer revertTenantLogic(@Param("tenantIds")List list); + Integer revertTenantLogic(@Param("tenantIds") List list); /** * 用于统计 租户产品包的人员数量 + * * @param tenantId * @return */ @@ -55,6 +58,7 @@ public interface SysTenantMapper extends BaseMapper { /** * 查询人员是不是租户产品包的 超级管理员 + * * @param tenantId * @param userId * @return @@ -63,6 +67,7 @@ public interface SysTenantMapper extends BaseMapper { /** * 查询人员的产品包编码 + * * @param tenantId * @param userId * @return @@ -71,6 +76,7 @@ public interface SysTenantMapper extends BaseMapper { /** * 查询产品包关联的用户列表 + * * @param tenantId * @param packId * @param packUserStatus @@ -81,6 +87,7 @@ public interface SysTenantMapper extends BaseMapper { /** * 根据用户ID 查询部门 + * * @param userIdList * @return */ @@ -88,6 +95,7 @@ public interface SysTenantMapper extends BaseMapper { /** * 根据用户ID 查询职位 + * * @param userIdList * @return */ @@ -95,6 +103,7 @@ public interface SysTenantMapper extends BaseMapper { /** * 查询产品包关联的用户列表 + * * @param page * @param tenantId * @param packId @@ -106,6 +115,7 @@ public interface SysTenantMapper extends BaseMapper { /** * 根据租户ID 查询租户 + * * @param id * @return */ @@ -114,6 +124,7 @@ public interface SysTenantMapper extends BaseMapper { /** * 查看是否已经申请过了超级管理员 + * * @param userId * @param tenantId * @return @@ -122,6 +133,7 @@ public interface SysTenantMapper extends BaseMapper { /** * 租户是否存在 + * * @param tenantId * @return */ @@ -130,6 +142,7 @@ public interface SysTenantMapper extends BaseMapper { /** * 根据用户id获取租户 + * * @param userId * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantPackMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantPackMapper.java index a2d1e7a..d41d389 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantPackMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantPackMapper.java @@ -1,15 +1,15 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.system.entity.SysTenantPack; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; /** * @Description: 租户产品包 * @Author: jeecg-boot - * @Date: 2022-12-31 + * @Date: 2022-12-31 * @Version: V1.0 */ public interface SysTenantPackMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantPackUserMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantPackUserMapper.java index f9920a2..9dca3ca 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantPackUserMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysTenantPackUserMapper.java @@ -10,7 +10,7 @@ import java.util.List; /** * @Description: 租户产品包用户关系 * @Author: jeecg-boot - * @Date: 2023-02-16 + * @Date: 2023-02-16 * @Version: V1.0 */ public interface SysTenantPackUserMapper extends BaseMapper { @@ -18,15 +18,17 @@ public interface SysTenantPackUserMapper extends BaseMapper { /** * 查询租户下 特定角色的人员列表 + * * @param tenantId * @param packCodeList * @return */ @InterceptorIgnore(tenantLine = "true") - List queryTenantPackUserNameList(@Param("tenantId") Integer tenantId, @Param("packCodeList") List packCodeList); + List queryTenantPackUserNameList(@Param("tenantId") Integer tenantId, @Param("packCodeList") List packCodeList); /** * 判断当前用户在该租户下是否拥有管理员的权限 + * * @param userId * @param tenantId * @return @@ -35,12 +37,14 @@ public interface SysTenantPackUserMapper extends BaseMapper { /** * 根据租户id 删除租户产品包下的 用户 + * * @param tenantId */ void deletePackUserByTenantId(@Param("tenantId") Integer tenantId, @Param("userIds") List userIds); /** * 根据多个租户id 删除租户产品包下的 用户 + * * @param */ void deletePackUserByTenantIds(@Param("tenantIds") List tenantIds); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysThirdAccountMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysThirdAccountMapper.java index 395bb2b..2b298cb 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysThirdAccountMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysThirdAccountMapper.java @@ -19,13 +19,14 @@ public interface SysThirdAccountMapper extends BaseMapper { * 通过 sysUsername 集合批量查询 * * @param sysUsernameArr username集合 - * @param thirdType 第三方类型 + * @param thirdType 第三方类型 * @return */ List selectThirdIdsByUsername(@Param("sysUsernameArr") String[] sysUsernameArr, @Param("thirdType") String thirdType, @Param("tenantId") Integer tenantId); - + /** * 查询被绑定的用户 + * * @param tenantId * @param thirdType * @return diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysThirdAppConfigMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysThirdAppConfigMapper.java index 0c69daf..d917afd 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysThirdAppConfigMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysThirdAppConfigMapper.java @@ -9,13 +9,14 @@ import java.util.List; /** * @Description: 第三方配置表 * @Author: jeecg-boot - * @Date: 2023-02-03 + * @Date: 2023-02-03 * @Version: V1.0 */ -public interface SysThirdAppConfigMapper extends BaseMapper { +public interface SysThirdAppConfigMapper extends BaseMapper { /** * 根据租户id获取钉钉/企业微信配置 + * * @param tenantId * @return */ @@ -23,6 +24,7 @@ public interface SysThirdAppConfigMapper extends BaseMapper /** * 根据租户id和第三方类别获取第三方配置 + * * @param tenantId * @param thirdType * @return diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserAgentMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserAgentMapper.java index 346933b..58fe78c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserAgentMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserAgentMapper.java @@ -1,15 +1,12 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.system.entity.SysUserAgent; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.system.entity.SysUserAgent; /** * @Description: 用户代理人设置 * @Author: jeecg-boot - * @Date: 2019-04-17 + * @Date: 2019-04-17 * @Version: V1.0 */ public interface SysUserAgentMapper extends BaseMapper { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java index 0eb86f9..554edc7 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserDepartMapper.java @@ -1,101 +1,112 @@ package org.jeecg.modules.system.mapper; -import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUserDepart; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; /** * @Description: 用户部门mapper接口 * @author: jeecg-boot */ -public interface SysUserDepartMapper extends BaseMapper{ +public interface SysUserDepartMapper extends BaseMapper { /** * 通过用户id查询部门用户 + * * @param userId 用户id * @return List */ - List getUserDepartByUid(@Param("userId") String userId); + List getUserDepartByUid(@Param("userId") String userId); - /** - * 查询指定部门下的用户 并且支持用户真实姓名模糊查询 - * @param orgCode - * @param realname - * @return - */ - List queryDepartUserList(@Param("orgCode") String orgCode, @Param("realname") String realname); + /** + * 查询指定部门下的用户 并且支持用户真实姓名模糊查询 + * + * @param orgCode + * @param realname + * @return + */ + List queryDepartUserList(@Param("orgCode") String orgCode, @Param("realname") String realname); - /** - * 根据部门查询部门用户 - * @param page - * @param orgCode - * @param username - * @param realname - * @return - */ - IPage queryDepartUserPageList(Page page, @Param("orgCode") String orgCode, @Param("username") String username, @Param("realname") String realname); + /** + * 根据部门查询部门用户 + * + * @param page + * @param orgCode + * @param username + * @param realname + * @return + */ + IPage queryDepartUserPageList(Page page, @Param("orgCode") String orgCode, @Param("username") String username, @Param("realname") String realname); /** * 获取用户信息 + * * @param page * @param orgCode * @param keyword * @return */ - IPage getUserInformation(Page page, @Param("orgCode") String orgCode, @Param("keyword") String keyword,@Param("userId") String userId); + IPage getUserInformation(Page page, @Param("orgCode") String orgCode, @Param("keyword") String keyword, @Param("userId") String userId); - /** - * 获取用户信息 - * @param page - * @param orgCode - * @param keyword - * @return - */ - IPage getProcessUserList(Page page, @Param("orgCode") String orgCode, @Param("keyword") String keyword, @Param("tenantId") Integer tenantId, @Param("excludeUserIdList") List excludeUserIdList); + /** + * 获取用户信息 + * + * @param page + * @param orgCode + * @param keyword + * @return + */ + IPage getProcessUserList(Page page, @Param("orgCode") String orgCode, @Param("keyword") String keyword, @Param("tenantId") Integer tenantId, @Param("excludeUserIdList") List excludeUserIdList); - /** - * 获取租户下的部门通过前台传过来的部门id - * @param departIds - * @param tenantId - * @return - */ + /** + * 获取租户下的部门通过前台传过来的部门id + * + * @param departIds + * @param tenantId + * @return + */ List getTenantDepart(@Param("departIds") List departIds, @Param("tenantId") String tenantId); - /** - * 根据当前租户和用户id查询用户部门数据 - * @param userId - * @param tenantId - * @return - */ - List getTenantUserDepart(@Param("userId") String userId, @Param("tenantId") String tenantId); + /** + * 根据当前租户和用户id查询用户部门数据 + * + * @param userId + * @param tenantId + * @return + */ + List getTenantUserDepart(@Param("userId") String userId, @Param("tenantId") String tenantId); - /** - * 根据用户id和租户id,删除用户部门数据 - * @param userId - * @param tenantId - */ - void deleteUserDepart(@Param("userId") String userId, @Param("tenantId") String tenantId); + /** + * 根据用户id和租户id,删除用户部门数据 + * + * @param userId + * @param tenantId + */ + void deleteUserDepart(@Param("userId") String userId, @Param("tenantId") String tenantId); - /** - * 通过部门id和租户id获取用户 - * @param departId - * @param tenantId - * @return - */ + /** + * 通过部门id和租户id获取用户 + * + * @param departId + * @param tenantId + * @return + */ List getUsersByDepartTenantId(@Param("departId") String departId, @Param("tenantId") Integer tenantId); - /** - * 根据用户id和部门id获取数量,用于查看用户是否存在用户部门关系表中 - * @param userId - * @param departId - * @return - */ - @Select("SELECT COUNT(*) FROM sys_user_depart WHERE user_id = #{userId} AND dep_id = #{departId}") + /** + * 根据用户id和部门id获取数量,用于查看用户是否存在用户部门关系表中 + * + * @param userId + * @param departId + * @return + */ + @Select("SELECT COUNT(*) FROM sys_user_depart WHERE user_id = #{userId} AND dep_id = #{departId}") Long getCountByDepartIdAndUserId(String userId, String departId); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java index 092fbb2..13cec1b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java @@ -1,13 +1,13 @@ package org.jeecg.modules.system.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.jeecg.modules.system.entity.SysUser; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.system.model.SysUserSysDepartModel; import org.jeecg.modules.system.vo.SysUserDepVo; @@ -22,93 +22,102 @@ import java.util.List; * @since 2018-12-20 */ public interface SysUserMapper extends BaseMapper { - /** - * 通过用户账号查询用户信息 - * @param username - * @return - */ - public SysUser getUserByName(@Param("username") String username); - - /** - * 通过用户账号查询用户Id - * @param username - * @return - */ - public String getUserIdByName(@Param("username") String username); + /** + * 通过用户账号查询用户信息 + * + * @param username + * @return + */ + public SysUser getUserByName(@Param("username") String username); - /** - * 根据部门Id查询用户信息 - * @param page - * @param departId + /** + * 通过用户账号查询用户Id + * + * @param username + * @return + */ + public String getUserIdByName(@Param("username") String username); + + /** + * 根据部门Id查询用户信息 + * + * @param page + * @param departId * @param username 用户登录账户 - * @return - */ - IPage getUserByDepId(Page page, @Param("departId") String departId, @Param("username") String username); + * @return + */ + IPage getUserByDepId(Page page, @Param("departId") String departId, @Param("username") String username); - /** - * 根据部门和子部门下的所有用户账号 - * - * @param orgCode 部门编码 - * @return - */ - List getUserAccountsByDepCode(@Param("orgCode") String orgCode); + /** + * 根据部门和子部门下的所有用户账号 + * + * @param orgCode 部门编码 + * @return + */ + List getUserAccountsByDepCode(@Param("orgCode") String orgCode); - /** - * 根据用户Ids,查询用户所属部门名称信息 - * @param userIds - * @return - */ - List getDepNamesByUserIds(@Param("userIds")List userIds); + /** + * 根据用户Ids,查询用户所属部门名称信息 + * + * @param userIds + * @return + */ + List getDepNamesByUserIds(@Param("userIds") List userIds); - /** - * 根据部门Ids,查询部门下用户信息 - * @param page - * @param departIds + /** + * 根据部门Ids,查询部门下用户信息 + * + * @param page + * @param departIds + * @param username 用户登录账户 + * @return + */ + IPage getUserByDepIds(Page page, @Param("departIds") List departIds, @Param("username") String username); + + /** + * 根据角色Id查询用户信息 + * + * @param page + * @param roleId 角色id * @param username 用户登录账户 - * @return - */ - IPage getUserByDepIds(Page page, @Param("departIds") List departIds, @Param("username") String username); + * @return + */ + IPage getUserByRoleId(Page page, @Param("roleId") String roleId, @Param("username") String username, @Param("roleCode") String roleCode); - /** - * 根据角色Id查询用户信息 - * @param page - * @param roleId 角色id - * @param username 用户登录账户 - * @return - */ - IPage getUserByRoleId(Page page, @Param("roleId") String roleId, @Param("username") String username, @Param("roleCode") String roleCode); - - /** - * 根据用户名设置部门ID - * @param username - * @param orgCode - */ - void updateUserDepart(@Param("username") String username,@Param("orgCode") String orgCode, @Param("loginTenantId") Integer loginTenantId); - - /** - * 根据手机号查询用户信息 - * @param phone - * @return - */ - public SysUser getUserByPhone(@Param("phone") String phone); - - - /** - * 根据邮箱查询用户信息 - * @param email - * @return - */ - public SysUser getUserByEmail(@Param("email")String email); + /** + * 根据用户名设置部门ID + * + * @param username + * @param orgCode + */ + void updateUserDepart(@Param("username") String username, @Param("orgCode") String orgCode, @Param("loginTenantId") Integer loginTenantId); - /** - * 根据 orgCode 查询用户,包括子部门下的用户 - * - * @param page 分页对象, xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象) - * @param orgCode - * @param userParams 用户查询条件,可为空 - * @return - */ - List getUserByOrgCode(IPage page, @Param("orgCode") String orgCode, @Param("userParams") SysUser userParams); + /** + * 根据手机号查询用户信息 + * + * @param phone + * @return + */ + public SysUser getUserByPhone(@Param("phone") String phone); + + + /** + * 根据邮箱查询用户信息 + * + * @param email + * @return + */ + public SysUser getUserByEmail(@Param("email") String email); + + /** + * 根据 orgCode 查询用户,包括子部门下的用户 + * + * @param page 分页对象, xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象) + * @param orgCode + * @param userParams 用户查询条件,可为空 + * @return + */ + List getUserByOrgCode(IPage page, @Param("orgCode") String orgCode, @Param("userParams") SysUser userParams); /** @@ -122,104 +131,117 @@ public interface SysUserMapper extends BaseMapper { /** * 批量删除角色与用户关系 + * + * @param roleIdArray * @Author scott * @Date 2019/12/13 16:10 - * @param roleIdArray */ - void deleteBathRoleUserRelation(@Param("roleIdArray") String[] roleIdArray); + void deleteBathRoleUserRelation(@Param("roleIdArray") String[] roleIdArray); /** * 批量删除角色与权限关系 + * + * @param roleIdArray * @Author scott * @Date 2019/12/13 16:10 - * @param roleIdArray */ - void deleteBathRolePermissionRelation(@Param("roleIdArray") String[] roleIdArray); + void deleteBathRolePermissionRelation(@Param("roleIdArray") String[] roleIdArray); - /** - * 查询被逻辑删除的用户 + /** + * 查询被逻辑删除的用户 + * * @param wrapper * @return List - */ - List selectLogicDeleted(@Param(Constants.WRAPPER) Wrapper wrapper); + */ + List selectLogicDeleted(@Param(Constants.WRAPPER) Wrapper wrapper); - /** - * 还原被逻辑删除的用户 + /** + * 还原被逻辑删除的用户 + * * @param userIds 用户id * @param entity * @return int - */ - int revertLogicDeleted(@Param("userIds") List userIds, @Param("entity") SysUser entity); + */ + int revertLogicDeleted(@Param("userIds") List userIds, @Param("entity") SysUser entity); - /** - * 彻底删除被逻辑删除的用户 + /** + * 彻底删除被逻辑删除的用户 + * * @param userIds 多个用户id * @return int - */ - int deleteLogicDeleted(@Param("userIds") List userIds); + */ + int deleteLogicDeleted(@Param("userIds") List userIds); /** * 更新空字符串为null【此写法有sql注入风险,禁止随便用】 + * * @param fieldName * @return int */ @Deprecated int updateNullByEmptyString(@Param("fieldName") String fieldName); - - /** - * 根据部门Ids,查询部门下用户信息 - * @param departIds - * @param username 用户账户名称 - * @return - */ - List queryByDepIds(@Param("departIds")List departIds,@Param("username") String username); - /** - * 获取用户信息 - * @param page - * @param roleId - * @param keyword - * @param userIdList - * @return - */ - IPage selectUserListByRoleId(Page page, @Param("roleId") String roleId, @Param("keyword") String keyword, @Param("tenantId") Integer tenantId, @Param("excludeUserIdList") List excludeUserIdList); + /** + * 根据部门Ids,查询部门下用户信息 + * + * @param departIds + * @param username 用户账户名称 + * @return + */ + List queryByDepIds(@Param("departIds") List departIds, @Param("username") String username); + + /** + * 获取用户信息 + * + * @param page + * @param roleId + * @param keyword + * @param userIdList + * @return + */ + IPage selectUserListByRoleId(Page page, @Param("roleId") String roleId, @Param("keyword") String keyword, @Param("tenantId") Integer tenantId, @Param("excludeUserIdList") List excludeUserIdList); /** * 更新刪除状态和离职状态 - * @param userIds 存放用户id集合 + * + * @param userIds 存放用户id集合 * @param sysUser * @return boolean */ void updateStatusAndFlag(@Param("userIds") List userIds, @Param("sysUser") SysUser sysUser); - /** - * 获取租户下的离职列表信息 - * @param tenantId - * @return - */ - List getTenantQuitList(@Param("tenantId") Integer tenantId); - - /** - * 获取租户下的有效用户ids - * @param tenantId - * @return - */ - List getTenantUserIdList(@Param("tenantId") Integer tenantId); - - /** - * 根据部门id和租户id获取用户数据 - * @param departIds - * @param tenantId - * @return - */ - List getUserByDepartsTenantId(@Param("departIds") List departIds,@Param("tenantId") Integer tenantId); + /** + * 获取租户下的离职列表信息 + * + * @param tenantId + * @return + */ + List getTenantQuitList(@Param("tenantId") Integer tenantId); - /** - * 根据用户名和手机号获取用户 - * @param phone - * @param username - * @return - */ - @Select("select id,phone from sys_user where phone = #{phone} and username = #{username}") + /** + * 获取租户下的有效用户ids + * + * @param tenantId + * @return + */ + List getTenantUserIdList(@Param("tenantId") Integer tenantId); + + /** + * 根据部门id和租户id获取用户数据 + * + * @param departIds + * @param tenantId + * @return + */ + List getUserByDepartsTenantId(@Param("departIds") List departIds, @Param("tenantId") Integer tenantId); + + /** + * 根据用户名和手机号获取用户 + * + * @param phone + * @param username + * @return + */ + @Select("select id,phone from sys_user where phone = #{phone} and username = #{username}") SysUser getUserByNameAndPhone(@Param("phone") String phone, @Param("username") String username); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserPositionMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserPositionMapper.java index bc00e1b..185c5c4 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserPositionMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserPositionMapper.java @@ -1,27 +1,28 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - import com.baomidou.mybatisplus.annotation.InterceptorIgnore; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUserPosition; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Param; import org.jeecg.modules.system.vo.SysUserPositionVo; +import java.util.List; + /** * @Description: 用户职位关系表 * @Author: jeecg-boot - * @Date: 2023-02-14 + * @Date: 2023-02-14 * @Version: V1.0 */ public interface SysUserPositionMapper extends BaseMapper { /** * 获取职位用户列表 + * * @param page * @param positionId * @return @@ -30,6 +31,7 @@ public interface SysUserPositionMapper extends BaseMapper { /** * 获取成员是否存在职位中 + * * @param userId * @param positionId * @return @@ -39,6 +41,7 @@ public interface SysUserPositionMapper extends BaseMapper { /** * 通过职位id删除用户职位关系表 + * * @param positionId */ @Delete("DELETE FROM sys_user_position WHERE position_id = #{positionId} ") @@ -46,6 +49,7 @@ public interface SysUserPositionMapper extends BaseMapper { /** * 职位列表移除成员 + * * @param userIdList * @param positionId */ @@ -53,6 +57,7 @@ public interface SysUserPositionMapper extends BaseMapper { /** * 根据用户id查询职位id + * * @param userId * @return */ @@ -61,15 +66,17 @@ public interface SysUserPositionMapper extends BaseMapper { /** * 根据用户ID和租户ID获取职位id + * * @param userId * @param tenantId * @return */ @InterceptorIgnore(tenantLine = "true") - List getPositionIdByUserTenantId(@Param("userId")String userId, @Param("tenantId")Integer tenantId); + List getPositionIdByUserTenantId(@Param("userId") String userId, @Param("tenantId") Integer tenantId); /** * 根据用户id获取用户职位 + * * @param userIdList * @param tenantId * @return @@ -78,6 +85,7 @@ public interface SysUserPositionMapper extends BaseMapper { /** * 根据职位名称和租户id,删除用户职位关系表 + * * @param positionNames * @param tenantId * @param userId diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java index 81048cf..6b826c7 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserRoleMapper.java @@ -1,10 +1,11 @@ package org.jeecg.modules.system.mapper; -import java.util.List; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.jeecg.modules.system.entity.SysUserRole; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; /** *

@@ -18,26 +19,29 @@ public interface SysUserRoleMapper extends BaseMapper { /** * 通过用户账号查询角色集合 + * * @param username 用户账号名称 * @return List */ - @Select("select role_code from sys_role where id in (select role_id from sys_user_role where user_id = (select id from sys_user where username=#{username}))") - List getRoleByUserName(@Param("username") String username); - + @Select("select role_code from sys_role where id in (select role_id from sys_user_role where user_id = (select id from sys_user where username=#{username}))") + List getRoleByUserName(@Param("username") String username); + /** * 通过用户账号查询角色集合 + * * @param userId 用户id * @return List */ - @Select("select role_code from sys_role where id in (select role_id from sys_user_role where user_id = #{userId})") - List getRoleCodeByUserId(@Param("userId") String userId); + @Select("select role_code from sys_role where id in (select role_id from sys_user_role where user_id = #{userId})") + List getRoleCodeByUserId(@Param("userId") String userId); - /** + /** * 通过用户账号查询角色Id集合 + * * @param username 用户账号名称 * @return List */ - @Select("select id from sys_role where id in (select role_id from sys_user_role where user_id = (select id from sys_user where username=#{username}))") - List getRoleIdByUserName(@Param("username") String username); + @Select("select id from sys_role where id in (select role_id from sys_user_role where user_id = (select id from sys_user where username=#{username}))") + List getRoleIdByUserName(@Param("username") String username); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserTenantMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserTenantMapper.java index f31c640..0bb4043 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserTenantMapper.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserTenantMapper.java @@ -1,7 +1,6 @@ package org.jeecg.modules.system.mapper; -import java.util.List; - +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Param; @@ -10,28 +9,31 @@ import org.apache.ibatis.annotations.Update; import org.jeecg.modules.system.entity.SysTenant; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUserTenant; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.jeecg.modules.system.vo.SysUserTenantVo; import org.jeecg.modules.system.vo.thirdapp.JwUserDepartVo; +import java.util.List; + /** * @Description: sys_user_tenant_relation * @Author: jeecg-boot - * @Date: 2022-12-23 + * @Date: 2022-12-23 * @Version: V1.0 */ public interface SysUserTenantMapper extends BaseMapper { /** * 通过租户id获取数据 + * * @param page * @param userTenantId * @return */ - List getPageUserList(@Param("page") Page page,@Param("userTenantId") Integer userTenantId,@Param("user") SysUser user); + List getPageUserList(@Param("page") Page page, @Param("userTenantId") Integer userTenantId, @Param("user") SysUser user); /** * 根据租户id获取用户ids + * * @param tenantId * @return */ @@ -39,32 +41,36 @@ public interface SysUserTenantMapper extends BaseMapper { /** * 通过用户id获取租户ids + * * @param userId * @return */ List getTenantIdsByUserId(@Param("userId") String userId); - //============================================================================================================================== + /** * 通过用户id获取租户列表 + * * @param userId * @return */ List getTenantListByUserId(@Param("userId") String userId, @Param("userTenantStatus") List userTenantStatus); - + /** * 通过状态、当前登录人的用户名,租户id,查询用户id + * * @param tenantId * @param statusList * @param username * @return */ - List getUserIdsByCreateBy(@Param("tenantId") Integer tenantId, @Param("userTenantStatus") List statusList, @Param("username") String username); + List getUserIdsByCreateBy(@Param("tenantId") Integer tenantId, @Param("userTenantStatus") List statusList, @Param("username") String username); /** * 联查用户和租户审核状态 + * * @param page * @param status * @param tenantId @@ -74,6 +80,7 @@ public interface SysUserTenantMapper extends BaseMapper { /** * 根据用户id获取租户id,没有状态值(如获取租户已经存在,只不过是被拒绝或者审批中) + * * @param userId * @return */ @@ -90,6 +97,7 @@ public interface SysUserTenantMapper extends BaseMapper { /** * 取消离职 + * * @param userIds * @param tenantId */ @@ -97,6 +105,7 @@ public interface SysUserTenantMapper extends BaseMapper { /** * 判断当前用户是否已在该租户下面 + * * @param userId * @param tenantId */ @@ -104,6 +113,7 @@ public interface SysUserTenantMapper extends BaseMapper { /** * 查询未被注销的租户 + * * @param userId * @return */ @@ -111,15 +121,17 @@ public interface SysUserTenantMapper extends BaseMapper { /** * 根据用户id获取我的租户 + * * @param page * @param userId * @param userTenantStatus * @return */ - List getTenantPageListByUserId(@Param("page") Page page, @Param("userId") String userId, @Param("userTenantStatus") List userTenantStatus,@Param("sysUserTenantVo") SysUserTenantVo sysUserTenantVo); + List getTenantPageListByUserId(@Param("page") Page page, @Param("userId") String userId, @Param("userTenantStatus") List userTenantStatus, @Param("sysUserTenantVo") SysUserTenantVo sysUserTenantVo); /** * 同意加入租户 + * * @param userId * @param tenantId */ @@ -128,6 +140,7 @@ public interface SysUserTenantMapper extends BaseMapper { /** * 拒绝加入租户 + * * @param userId * @param tenantId */ @@ -159,9 +172,10 @@ public interface SysUserTenantMapper extends BaseMapper { * @return */ Long getUserCount(Integer tenantId, String tenantStatus); - + /** * 根据租户id和名称获取用户数据 + * * @param tenantId * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/AnnouncementSendModel.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/AnnouncementSendModel.java index c4870a5..7c7e073 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/AnnouncementSendModel.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/AnnouncementSendModel.java @@ -11,67 +11,89 @@ import java.io.Serializable; /** * @Description: 用户通告阅读标记表 * @Author: jeecg-boot - * @Date: 2019-02-21 + * @Date: 2019-02-21 * @Version: V1.0 */ @Data public class AnnouncementSendModel implements Serializable { private static final long serialVersionUID = 1L; - - /**id*/ - @TableId(type = IdType.ASSIGN_ID) - private java.lang.String id; - /**通告id*/ - private java.lang.String anntId; - /**用户id*/ - private java.lang.String userId; - /**标题*/ - private java.lang.String titile; - /**内容*/ - private java.lang.String msgContent; - /**发布人*/ - private java.lang.String sender; - /**优先级(L低,M中,H高)*/ - private java.lang.String priority; - /**阅读状态*/ - private java.lang.Integer readFlag; - /**发布时间*/ - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - private java.util.Date sendTime; - /**页数*/ - private java.lang.Integer pageNo; - /**大小*/ - private java.lang.Integer pageSize; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /** + * 通告id + */ + private java.lang.String anntId; + /** + * 用户id + */ + private java.lang.String userId; + /** + * 标题 + */ + private java.lang.String titile; + /** + * 内容 + */ + private java.lang.String msgContent; + /** + * 发布人 + */ + private java.lang.String sender; + /** + * 优先级(L低,M中,H高) + */ + private java.lang.String priority; + /** + * 阅读状态 + */ + private java.lang.Integer readFlag; + /** + * 发布时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date sendTime; + /** + * 页数 + */ + private java.lang.Integer pageNo; + /** + * 大小 + */ + private java.lang.Integer pageSize; /** * 消息类型1:通知公告2:系统消息 */ private java.lang.String msgCategory; - /** - * 业务id - */ - private java.lang.String busId; - /** - * 业务类型 - */ - private java.lang.String busType; - /** - * 打开方式 组件:component 路由:url - */ - private java.lang.String openType; - /** - * 组件/路由 地址 - */ - private java.lang.String openPage; + /** + * 业务id + */ + private java.lang.String busId; + /** + * 业务类型 + */ + private java.lang.String busType; + /** + * 打开方式 组件:component 路由:url + */ + private java.lang.String openType; + /** + * 组件/路由 地址 + */ + private java.lang.String openPage; - /** - * 业务类型查询(0.非bpm业务) - */ - private java.lang.String bizSource; + /** + * 业务类型查询(0.非bpm业务) + */ + private java.lang.String bizSource; - /** - * 摘要 - */ - private java.lang.String msgAbstract; + /** + * 摘要 + */ + private java.lang.String msgAbstract; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java index af15700..7e584ba 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/DepartIdModel.java @@ -1,19 +1,18 @@ package org.jeecg.modules.system.model; +import org.jeecg.modules.system.entity.SysDepart; + import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import org.jeecg.modules.system.entity.SysDepart; - /** *

* 部门表 封装树结构的部门的名称的实体类 *

- * - * @Author Steve - * @Since 2019-01-22 * + * @Author Steve + * @Since 2019-01-22 */ public class DepartIdModel implements Serializable { @@ -33,11 +32,12 @@ public class DepartIdModel implements Serializable { * 部门名称 */ private String title; - + List children = new ArrayList<>(); - + /** * 将SysDepartTreeModel的部分数据放在该对象当中 + * * @param treeModel * @return */ @@ -47,9 +47,10 @@ public class DepartIdModel implements Serializable { this.title = treeModel.getDepartName(); return this; } - + /** * 该方法为用户部门的实现类所使用 + * * @param sysDepart * @return */ @@ -58,7 +59,7 @@ public class DepartIdModel implements Serializable { this.value = sysDepart.getId(); this.title = sysDepart.getDepartName(); return this; - } + } public List getChildren() { return children; diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/DuplicateCheckVo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/DuplicateCheckVo.java index 2be55df..9ba3624 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/DuplicateCheckVo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/DuplicateCheckVo.java @@ -1,9 +1,10 @@ package org.jeecg.modules.system.model; -import java.io.Serializable; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.io.Serializable; + /** * @Title: DuplicateCheckVo * @Description: 重复校验VO @@ -12,32 +13,32 @@ import lombok.Data; * @Version V1.0 */ @Data -@Schema(description="重复校验数据模型") +@Schema(description = "重复校验数据模型") public class DuplicateCheckVo implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * 表名 - */ - @Schema(description="表名",name="tableName",example="sys_log") - private String tableName; - - /** - * 字段名 - */ - @Schema(description="字段名",name="fieldName",example="id") - private String fieldName; - - /** - * 字段值 - */ - @Schema(description="字段值",name="fieldVal",example="1000") - private String fieldVal; - - /** - * 数据ID - */ - @Schema(description="数据ID",name="dataId",example="2000") - private String dataId; + /** + * 表名 + */ + @Schema(description = "表名", name = "tableName", example = "sys_log") + private String tableName; + + /** + * 字段名 + */ + @Schema(description = "字段名", name = "fieldName", example = "id") + private String fieldName; + + /** + * 字段值 + */ + @Schema(description = "字段值", name = "fieldVal", example = "1000") + private String fieldVal; + + /** + * 数据ID + */ + @Schema(description = "数据ID", name = "dataId", example = "2000") + private String dataId; } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java index b50832e..1b973a2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysDepartTreeModel.java @@ -12,27 +12,33 @@ import java.util.Objects; *

* 部门表 存储树结构数据的实体类 *

- * + * * @Author Steve - * @Since 2019-01-22 + * @Since 2019-01-22 */ -public class SysDepartTreeModel implements Serializable{ - +public class SysDepartTreeModel implements Serializable { + private static final long serialVersionUID = 1L; - - /** 对应SysDepart中的id字段,前端数据树中的key*/ + + /** + * 对应SysDepart中的id字段,前端数据树中的key + */ private String key; - /** 对应SysDepart中的id字段,前端数据树中的value*/ + /** + * 对应SysDepart中的id字段,前端数据树中的value + */ private String value; - /** 对应depart_name字段,前端数据树中的title*/ + /** + * 对应depart_name字段,前端数据树中的title + */ private String title; private boolean isLeaf; // 以下所有字段均与SysDepart相同 - + private String id; private String parentId; @@ -46,7 +52,7 @@ public class SysDepartTreeModel implements Serializable{ private Integer departOrder; private String description; - + private String orgCategory; private String orgType; @@ -76,19 +82,22 @@ public class SysDepartTreeModel implements Serializable{ private Date updateTime; //update-begin---author:wangshuai ---date:20200308 for:[JTC-119]在部门管理菜单下设置部门负责人,新增字段部门负责人ids - /**部门负责人ids*/ + /** + * 部门负责人ids + */ private String directorUserIds; //update-end---author:wangshuai ---date:20200308 for:[JTC-119]在部门管理菜单下设置部门负责人,新增字段部门负责人ids - + private List children = new ArrayList<>(); /** * 将SysDepart对象转换成SysDepartTreeModel对象 + * * @param sysDepart */ - public SysDepartTreeModel(SysDepart sysDepart) { - this.key = sysDepart.getId(); + public SysDepartTreeModel(SysDepart sysDepart) { + this.key = sysDepart.getId(); this.value = sysDepart.getId(); this.title = sysDepart.getDepartName(); this.id = sysDepart.getId(); @@ -113,9 +122,9 @@ public class SysDepartTreeModel implements Serializable{ this.updateBy = sysDepart.getUpdateBy(); this.updateTime = sysDepart.getUpdateTime(); this.directorUserIds = sysDepart.getDirectorUserIds(); - if(0 == sysDepart.getIzLeaf()){ + if (0 == sysDepart.getIzLeaf()) { this.isLeaf = false; - }else{ + } else { this.isLeaf = true; } } @@ -125,40 +134,40 @@ public class SysDepartTreeModel implements Serializable{ } public void setIsLeaf(boolean isleaf) { - this.isLeaf = isleaf; + this.isLeaf = isleaf; } public String getKey() { - return key; - } + return key; + } - public void setKey(String key) { - this.key = key; - } + public void setKey(String key) { + this.key = key; + } - public String getValue() { - return value; - } + public String getValue() { + return value; + } - public void setValue(String value) { - this.value = value; - } + public void setValue(String value) { + this.value = value; + } - public String getTitle() { - return title; - } + public String getTitle() { + return title; + } - public void setTitle(String title) { - this.title = title; - } + public void setTitle(String title) { + this.title = title; + } - public String getId() { + public String getId() { return id; } @@ -171,8 +180,8 @@ public class SysDepartTreeModel implements Serializable{ } public void setChildren(List children) { - if (children==null){ - this.isLeaf=true; + if (children == null) { + this.isLeaf = true; } this.children = children; } @@ -196,16 +205,16 @@ public class SysDepartTreeModel implements Serializable{ public void setDepartName(String departName) { this.departName = departName; } - + public String getOrgCategory() { - return orgCategory; - } + return orgCategory; + } - public void setOrgCategory(String orgCategory) { - this.orgCategory = orgCategory; - } + public void setOrgCategory(String orgCategory) { + this.orgCategory = orgCategory; + } - public String getOrgType() { + public String getOrgType() { return orgType; } @@ -341,7 +350,8 @@ public class SysDepartTreeModel implements Serializable{ this.updateTime = updateTime; } - public SysDepartTreeModel() { } + public SysDepartTreeModel() { + } public String getDirectorUserIds() { return directorUserIds; @@ -357,11 +367,11 @@ public class SysDepartTreeModel implements Serializable{ @Override public boolean equals(Object o) { if (this == o) { - return true; - } + return true; + } if (o == null || getClass() != o.getClass()) { - return false; - } + return false; + } SysDepartTreeModel model = (SysDepartTreeModel) o; return Objects.equals(id, model.id) && Objects.equals(parentId, model.parentId) && @@ -387,7 +397,7 @@ public class SysDepartTreeModel implements Serializable{ Objects.equals(directorUserIds, model.directorUserIds) && Objects.equals(children, model.children); } - + /** * 重写hashCode方法 */ @@ -395,9 +405,9 @@ public class SysDepartTreeModel implements Serializable{ public int hashCode() { return Objects.hash(id, parentId, departName, departNameEn, departNameAbbr, - departOrder, description, orgCategory, orgType, orgCode, mobile, fax, address, - memo, status, delFlag, qywxIdentifier, createBy, createTime, updateBy, updateTime, - children,directorUserIds); + departOrder, description, orgCategory, orgType, orgCode, mobile, fax, address, + memo, status, delFlag, qywxIdentifier, createBy, createTime, updateBy, updateTime, + children, directorUserIds); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysDictTree.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysDictTree.java index fb7983a..53f7978 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysDictTree.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysDictTree.java @@ -1,16 +1,14 @@ package org.jeecg.modules.system.model; -import java.io.Serializable; -import java.util.Date; - -import org.jeecg.modules.system.entity.SysDict; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecg.modules.system.entity.SysDict; + +import java.io.Serializable; +import java.util.Date; /** *

@@ -28,9 +26,9 @@ public class SysDictTree implements Serializable { private static final long serialVersionUID = 1L; private String key; - - private String title; - + + private String title; + /** * id */ @@ -42,7 +40,7 @@ public class SysDictTree implements Serializable { * 默认为string类型 */ private Integer type; - + /** * 字典名称 */ @@ -82,15 +80,15 @@ public class SysDictTree implements Serializable { * 更新时间 */ private Date updateTime; - + public SysDictTree(SysDict node) { - this.id = node.getId(); - this.key = node.getId(); - this.title = node.getDictName(); - this.dictCode = node.getDictCode(); - this.description = node.getDescription(); - this.delFlag = node.getDelFlag(); - this.type = node.getType(); - } - + this.id = node.getId(); + this.key = node.getId(); + this.title = node.getDictName(); + this.dictCode = node.getDictCode(); + this.description = node.getDescription(); + this.delFlag = node.getDelFlag(); + this.type = node.getType(); + } + } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysLoginModel.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysLoginModel.java index 71e6787..d7d0446 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysLoginModel.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysLoginModel.java @@ -7,17 +7,17 @@ import io.swagger.v3.oas.annotations.media.Schema; * 登录表单 * * @Author scott - * @since 2019-01-18 + * @since 2019-01-18 */ -@Schema(description="登录对象") +@Schema(description = "登录对象") public class SysLoginModel { - @Schema(description = "账号") + @Schema(description = "账号") private String username; - @Schema(description = "密码") + @Schema(description = "密码") private String password; - @Schema(description = "验证码") + @Schema(description = "验证码") private String captcha; - @Schema(description = "验证码key") + @Schema(description = "验证码key") private String checkKey; public String getUsername() { @@ -44,12 +44,12 @@ public class SysLoginModel { this.captcha = captcha; } - public String getCheckKey() { - return checkKey; - } + public String getCheckKey() { + return checkKey; + } + + public void setCheckKey(String checkKey) { + this.checkKey = checkKey; + } - public void setCheckKey(String checkKey) { - this.checkKey = checkKey; - } - } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java index 9206c52..2e65206 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysPermissionTree.java @@ -1,10 +1,11 @@ package org.jeecg.modules.system.model; +import org.jeecg.modules.system.entity.SysPermission; + import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; -import org.jeecg.modules.system.entity.SysPermission; /** * @Description: 菜单树,封装树结构 @@ -12,418 +13,427 @@ import org.jeecg.modules.system.entity.SysPermission; */ public class SysPermissionTree implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * id - */ - private String id; + /** + * id + */ + private String id; - private String key; - private String title; + private String key; + private String title; - /** - * 父id - */ - private String parentId; + /** + * 父id + */ + private String parentId; - /** - * 菜单名称 - */ - private String name; + /** + * 菜单名称 + */ + private String name; - /** - * 菜单权限编码 - */ - private String perms; - /** - * 权限策略1显示2禁用 - */ - private String permsType; + /** + * 菜单权限编码 + */ + private String perms; + /** + * 权限策略1显示2禁用 + */ + private String permsType; - /** - * 菜单图标 - */ - private String icon; + /** + * 菜单图标 + */ + private String icon; - /** - * 组件 - */ - private String component; + /** + * 组件 + */ + private String component; - /** - * 组件名字 - */ - private String componentName; + /** + * 组件名字 + */ + private String componentName; - /** - * 跳转网页链接 - */ - private String url; - - /** - * 一级菜单跳转地址 - */ - private String redirect; + /** + * 跳转网页链接 + */ + private String url; - /** - * 菜单排序 - */ - private Double sortNo; + /** + * 一级菜单跳转地址 + */ + private String redirect; - /** - * 类型(0:一级菜单;1:子菜单 ;2:按钮权限) - */ - private Integer menuType; + /** + * 菜单排序 + */ + private Double sortNo; - /** - * 是否叶子节点: 1:是 0:不是 - */ - private boolean isLeaf; - - /** - * 是否路由菜单: 0:不是 1:是(默认值1) - */ - private boolean route; + /** + * 类型(0:一级菜单;1:子菜单 ;2:按钮权限) + */ + private Integer menuType; + + /** + * 是否叶子节点: 1:是 0:不是 + */ + private boolean isLeaf; + + /** + * 是否路由菜单: 0:不是 1:是(默认值1) + */ + private boolean route; - /** - * 是否路缓存页面: 0:不是 1:是(默认值1) - */ - private boolean keepAlive; + /** + * 是否路缓存页面: 0:不是 1:是(默认值1) + */ + private boolean keepAlive; - /** - * 描述 - */ - private String description; + /** + * 描述 + */ + private String description; - /** - * 删除状态 0正常 1已删除 - */ - private Integer delFlag; + /** + * 删除状态 0正常 1已删除 + */ + private Integer delFlag; - /** - * 创建人 - */ - private String createBy; + /** + * 创建人 + */ + private String createBy; - /** - * 创建时间 - */ - private Date createTime; + /** + * 创建时间 + */ + private Date createTime; - /** - * 更新人 - */ - private String updateBy; + /** + * 更新人 + */ + private String updateBy; - /** - * 更新时间 - */ - private Date updateTime; + /** + * 更新时间 + */ + private Date updateTime; - /**alwaysShow*/ + /** + * alwaysShow + */ private boolean alwaysShow; - /**是否隐藏路由菜单: 0否,1是(默认值0)*/ + /** + * 是否隐藏路由菜单: 0否,1是(默认值0) + */ private boolean hidden; - - /**按钮权限状态(0无效1有效)*/ - private java.lang.String status; - /*update_begin author:wuxianquan date:20190908 for:model增加字段 */ - /** 外链菜单打开方式 0/内部打开 1/外部打开 */ - private boolean internalOrExternal; - /*update_end author:wuxianquan date:20190908 for:model增加字段 */ + /** + * 按钮权限状态(0无效1有效) + */ + private java.lang.String status; - /*update_begin author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */ - /** - * 是否隐藏Tab: 0否,1是(默认值0) - */ - private boolean hideTab; - /*update_end author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */ + /*update_begin author:wuxianquan date:20190908 for:model增加字段 */ + /** + * 外链菜单打开方式 0/内部打开 1/外部打开 + */ + private boolean internalOrExternal; + /*update_end author:wuxianquan date:20190908 for:model增加字段 */ - public SysPermissionTree() { - } + /*update_begin author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */ + /** + * 是否隐藏Tab: 0否,1是(默认值0) + */ + private boolean hideTab; + /*update_end author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */ - public SysPermissionTree(SysPermission permission) { - this.key = permission.getId(); - this.id = permission.getId(); - this.perms = permission.getPerms(); - this.permsType = permission.getPermsType(); - this.component = permission.getComponent(); - this.componentName = permission.getComponentName(); - this.createBy = permission.getCreateBy(); - this.createTime = permission.getCreateTime(); - this.delFlag = permission.getDelFlag(); - this.description = permission.getDescription(); - this.icon = permission.getIcon(); - this.isLeaf = permission.isLeaf(); - this.menuType = permission.getMenuType(); - this.name = permission.getName(); - this.parentId = permission.getParentId(); - this.sortNo = permission.getSortNo(); - this.updateBy = permission.getUpdateBy(); - this.updateTime = permission.getUpdateTime(); - this.redirect = permission.getRedirect(); - this.url = permission.getUrl(); - this.hidden = permission.isHidden(); - this.route = permission.isRoute(); - this.keepAlive = permission.isKeepAlive(); - this.alwaysShow= permission.isAlwaysShow(); - /*update_begin author:wuxianquan date:20190908 for:赋值 */ - this.internalOrExternal = permission.isInternalOrExternal(); - /*update_end author:wuxianquan date:20190908 for:赋值 */ - this.title=permission.getName(); - /*update_end author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */ - this.hideTab = permission.isHideTab(); - /*update_end author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */ - if (!permission.isLeaf()) { - this.children = new ArrayList(); - } - this.status = permission.getStatus(); - } + public SysPermissionTree() { + } - public String getTitle() { - return title; - } + public SysPermissionTree(SysPermission permission) { + this.key = permission.getId(); + this.id = permission.getId(); + this.perms = permission.getPerms(); + this.permsType = permission.getPermsType(); + this.component = permission.getComponent(); + this.componentName = permission.getComponentName(); + this.createBy = permission.getCreateBy(); + this.createTime = permission.getCreateTime(); + this.delFlag = permission.getDelFlag(); + this.description = permission.getDescription(); + this.icon = permission.getIcon(); + this.isLeaf = permission.isLeaf(); + this.menuType = permission.getMenuType(); + this.name = permission.getName(); + this.parentId = permission.getParentId(); + this.sortNo = permission.getSortNo(); + this.updateBy = permission.getUpdateBy(); + this.updateTime = permission.getUpdateTime(); + this.redirect = permission.getRedirect(); + this.url = permission.getUrl(); + this.hidden = permission.isHidden(); + this.route = permission.isRoute(); + this.keepAlive = permission.isKeepAlive(); + this.alwaysShow = permission.isAlwaysShow(); + /*update_begin author:wuxianquan date:20190908 for:赋值 */ + this.internalOrExternal = permission.isInternalOrExternal(); + /*update_end author:wuxianquan date:20190908 for:赋值 */ + this.title = permission.getName(); + /*update_end author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */ + this.hideTab = permission.isHideTab(); + /*update_end author:liusq date:20230601 for:【issues/4986】model增加hideTab字段 */ + if (!permission.isLeaf()) { + this.children = new ArrayList(); + } + this.status = permission.getStatus(); + } - public void setTitle(String title) { - this.title = title; - } + public String getTitle() { + return title; + } - private List children; + public void setTitle(String title) { + this.title = title; + } - public boolean isLeaf() { - return isLeaf; - } + private List children; - public void setLeaf(boolean leaf) { - isLeaf = leaf; - } + public boolean isLeaf() { + return isLeaf; + } - public boolean isKeepAlive() { - return keepAlive; - } + public void setLeaf(boolean leaf) { + isLeaf = leaf; + } - public void setKeepAlive(boolean keepAlive) { - this.keepAlive = keepAlive; - } + public boolean isKeepAlive() { + return keepAlive; + } - public boolean isAlwaysShow() { - return alwaysShow; - } + public void setKeepAlive(boolean keepAlive) { + this.keepAlive = keepAlive; + } - public void setAlwaysShow(boolean alwaysShow) { - this.alwaysShow = alwaysShow; - } - public List getChildren() { - return children; - } + public boolean isAlwaysShow() { + return alwaysShow; + } - public void setChildren(List children) { - this.children = children; - } + public void setAlwaysShow(boolean alwaysShow) { + this.alwaysShow = alwaysShow; + } - public String getRedirect() { - return redirect; - } + public List getChildren() { + return children; + } - public void setRedirect(String redirect) { - this.redirect = redirect; - } + public void setChildren(List children) { + this.children = children; + } - public String getId() { - return id; - } + public String getRedirect() { + return redirect; + } - public void setId(String id) { - this.id = id; - } + public void setRedirect(String redirect) { + this.redirect = redirect; + } - public String getParentId() { - return parentId; - } + public String getId() { + return id; + } - public void setParentId(String parentId) { - this.parentId = parentId; - } + public void setId(String id) { + this.id = id; + } - public boolean isHidden() { - return hidden; - } + public String getParentId() { + return parentId; + } - public void setHidden(boolean hidden) { - this.hidden = hidden; - } + public void setParentId(String parentId) { + this.parentId = parentId; + } - public String getName() { - return name; - } + public boolean isHidden() { + return hidden; + } - public void setName(String name) { - this.name = name; - } + public void setHidden(boolean hidden) { + this.hidden = hidden; + } - public String getIcon() { - return icon; - } + public String getName() { + return name; + } - public void setIcon(String icon) { - this.icon = icon; - } + public void setName(String name) { + this.name = name; + } - public String getComponent() { - return component; - } + public String getIcon() { + return icon; + } - public void setComponent(String component) { - this.component = component; - } + public void setIcon(String icon) { + this.icon = icon; + } - public String getComponentName() { - return componentName; - } + public String getComponent() { + return component; + } - public void setComponentName(String componentName) { - this.componentName = componentName; - } + public void setComponent(String component) { + this.component = component; + } - public String getUrl() { - return url; - } + public String getComponentName() { + return componentName; + } - public void setUrl(String url) { - this.url = url; - } + public void setComponentName(String componentName) { + this.componentName = componentName; + } - public Double getSortNo() { - return sortNo; - } + public String getUrl() { + return url; + } - public void setSortNo(Double sortNo) { - this.sortNo = sortNo; - } + public void setUrl(String url) { + this.url = url; + } - public Integer getMenuType() { - return menuType; - } + public Double getSortNo() { + return sortNo; + } - public void setMenuType(Integer menuType) { - this.menuType = menuType; - } + public void setSortNo(Double sortNo) { + this.sortNo = sortNo; + } - public String getDescription() { - return description; - } + public Integer getMenuType() { + return menuType; + } - public void setDescription(String description) { - this.description = description; - } + public void setMenuType(Integer menuType) { + this.menuType = menuType; + } - public boolean isRoute() { - return route; - } + public String getDescription() { + return description; + } - public void setRoute(boolean route) { - this.route = route; - } + public void setDescription(String description) { + this.description = description; + } - public Integer getDelFlag() { - return delFlag; - } + public boolean isRoute() { + return route; + } - public void setDelFlag(Integer delFlag) { - this.delFlag = delFlag; - } + public void setRoute(boolean route) { + this.route = route; + } - public String getCreateBy() { - return createBy; - } + public Integer getDelFlag() { + return delFlag; + } - public void setCreateBy(String createBy) { - this.createBy = createBy; - } + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } - public Date getCreateTime() { - return createTime; - } + public String getCreateBy() { + return createBy; + } - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } + public void setCreateBy(String createBy) { + this.createBy = createBy; + } - public String getUpdateBy() { - return updateBy; - } + public Date getCreateTime() { + return createTime; + } - public void setUpdateBy(String updateBy) { - this.updateBy = updateBy; - } + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } - public Date getUpdateTime() { - return updateTime; - } + public String getUpdateBy() { + return updateBy; + } - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } - public String getKey() { - return key; - } + public Date getUpdateTime() { + return updateTime; + } - public void setKey(String key) { - this.key = key; - } + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } - public String getPerms() { - return perms; - } + public String getKey() { + return key; + } - public void setPerms(String perms) { - this.perms = perms; - } + public void setKey(String key) { + this.key = key; + } - public boolean getIsLeaf() { - return isLeaf; - } + public String getPerms() { + return perms; + } - public void setIsLeaf(boolean isLeaf) { - this.isLeaf = isLeaf; - } + public void setPerms(String perms) { + this.perms = perms; + } - public String getPermsType() { - return permsType; - } + public boolean getIsLeaf() { + return isLeaf; + } - public void setPermsType(String permsType) { - this.permsType = permsType; - } + public void setIsLeaf(boolean isLeaf) { + this.isLeaf = isLeaf; + } - public java.lang.String getStatus() { - return status; - } + public String getPermsType() { + return permsType; + } - public void setStatus(java.lang.String status) { - this.status = status; - } + public void setPermsType(String permsType) { + this.permsType = permsType; + } - /*update_begin author:wuxianquan date:20190908 for:get set方法 */ - public boolean isInternalOrExternal() { - return internalOrExternal; - } + public java.lang.String getStatus() { + return status; + } - public void setInternalOrExternal(boolean internalOrExternal) { - this.internalOrExternal = internalOrExternal; - } - /*update_end author:wuxianquan date:20190908 for:get set 方法 */ + public void setStatus(java.lang.String status) { + this.status = status; + } - public boolean isHideTab() { - return hideTab; - } + /*update_begin author:wuxianquan date:20190908 for:get set方法 */ + public boolean isInternalOrExternal() { + return internalOrExternal; + } - public void setHideTab(boolean hideTab) { - this.hideTab = hideTab; - } + public void setInternalOrExternal(boolean internalOrExternal) { + this.internalOrExternal = internalOrExternal; + } + /*update_end author:wuxianquan date:20190908 for:get set 方法 */ + + public boolean isHideTab() { + return hideTab; + } + + public void setHideTab(boolean hideTab) { + this.hideTab = hideTab; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysUserSysDepartModel.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysUserSysDepartModel.java index 65c0ddd..50b29b3 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysUserSysDepartModel.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/SysUserSysDepartModel.java @@ -1,8 +1,6 @@ package org.jeecg.modules.system.model; import lombok.Data; -import org.jeecg.modules.system.entity.SysDepart; -import org.jeecg.modules.system.entity.SysUser; /** * 包含 SysUser 和 SysDepart 的 Model diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/ThirdLoginModel.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/ThirdLoginModel.java index 4f6cc27..2970970 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/ThirdLoginModel.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/ThirdLoginModel.java @@ -6,6 +6,7 @@ import java.io.Serializable; /** * 第三方登录 信息存储 + * * @author: jeecg-boot */ @Data @@ -42,18 +43,19 @@ public class ThirdLoginModel implements Serializable { */ private String operateCode; - public ThirdLoginModel(){ + public ThirdLoginModel() { } /** * 构造器 + * * @param source * @param uuid * @param username * @param avatar */ - public ThirdLoginModel(String source,String uuid,String username,String avatar){ + public ThirdLoginModel(String source, String uuid, String username, String avatar) { this.source = source; this.uuid = uuid; this.username = username; @@ -62,10 +64,11 @@ public class ThirdLoginModel implements Serializable { /** * 获取登录账号名 + * * @return */ - public String getUserLoginAccount(){ - if(suffix==null){ + public String getUserLoginAccount() { + if (suffix == null) { return this.uuid; } return this.uuid + this.suffix; diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/TreeModel.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/TreeModel.java index c2da973..2e8491c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/TreeModel.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/TreeModel.java @@ -1,175 +1,176 @@ package org.jeecg.modules.system.model; +import org.jeecg.modules.system.entity.SysPermission; + import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.jeecg.modules.system.entity.SysPermission; - /** - * 树形列表用到 - * @author: jeecg-boot + * 树形列表用到 + * + * @author: jeecg-boot */ public class TreeModel implements Serializable { - - private static final long serialVersionUID = 4013193970046502756L; - private String key; - - private String title; - - private String slotTitle; - - private boolean isLeaf; - - private String icon; - - private Integer ruleFlag; - - private Map scopedSlots; - - public Map getScopedSlots() { - return scopedSlots; - } + private static final long serialVersionUID = 4013193970046502756L; - public void setScopedSlots(Map scopedSlots) { - this.scopedSlots = scopedSlots; - } + private String key; - public String getKey() { - return key; - } + private String title; - public void setKey(String key) { - this.key = key; - } + private String slotTitle; - public String getTitle() { - return title; - } + private boolean isLeaf; - public void setTitle(String title) { - this.title = title; - } + private String icon; - public boolean getIsLeaf() { - return isLeaf; - } + private Integer ruleFlag; - public void setIsLeaf(boolean isLeaf) { - this.isLeaf = isLeaf; - } + private Map scopedSlots; - public String getIcon() { - return icon; - } - - public void setIcon(String icon) { - this.icon = icon; - } - - private List children; - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - - public TreeModel() { - - } - - public TreeModel(SysPermission permission) { - this.key = permission.getId(); - this.icon = permission.getIcon(); - this.parentId = permission.getParentId(); - this.title = permission.getName(); - this.slotTitle = permission.getName(); - this.value = permission.getId(); - this.isLeaf = permission.isLeaf(); - this.label = permission.getName(); - if(!permission.isLeaf()) { - this.children = new ArrayList(); - } - } - - public TreeModel(String key,String parentId,String slotTitle,Integer ruleFlag,boolean isLeaf) { - this.key = key; - this.parentId = parentId; - this.ruleFlag=ruleFlag; - this.slotTitle = slotTitle; - Map map = new HashMap(5); - map.put("title", "hasDatarule"); - this.scopedSlots = map; - this.isLeaf = isLeaf; - this.value = key; - if(!isLeaf) { - this.children = new ArrayList(); - } + public Map getScopedSlots() { + return scopedSlots; } - - private String parentId; - - private String label; - - private String value; - - - public String getParentId() { - return parentId; - } - public void setParentId(String parentId) { - this.parentId = parentId; - } + public void setScopedSlots(Map scopedSlots) { + this.scopedSlots = scopedSlots; + } - /** - * @return the label - */ - public String getLabel() { - return label; - } + public String getKey() { + return key; + } - /** - * @param label the label to set - */ - public void setLabel(String label) { - this.label = label; - } + public void setKey(String key) { + this.key = key; + } - /** - * @return the value - */ - public String getValue() { - return value; - } + public String getTitle() { + return title; + } - /** - * @param value the value to set - */ - public void setValue(String value) { - this.value = value; - } + public void setTitle(String title) { + this.title = title; + } - public String getSlotTitle() { - return slotTitle; - } + public boolean getIsLeaf() { + return isLeaf; + } - public void setSlotTitle(String slotTitle) { - this.slotTitle = slotTitle; - } + public void setIsLeaf(boolean isLeaf) { + this.isLeaf = isLeaf; + } - public Integer getRuleFlag() { - return ruleFlag; - } + public String getIcon() { + return icon; + } - public void setRuleFlag(Integer ruleFlag) { - this.ruleFlag = ruleFlag; - } + public void setIcon(String icon) { + this.icon = icon; + } + + private List children; + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public TreeModel() { + + } + + public TreeModel(SysPermission permission) { + this.key = permission.getId(); + this.icon = permission.getIcon(); + this.parentId = permission.getParentId(); + this.title = permission.getName(); + this.slotTitle = permission.getName(); + this.value = permission.getId(); + this.isLeaf = permission.isLeaf(); + this.label = permission.getName(); + if (!permission.isLeaf()) { + this.children = new ArrayList(); + } + } + + public TreeModel(String key, String parentId, String slotTitle, Integer ruleFlag, boolean isLeaf) { + this.key = key; + this.parentId = parentId; + this.ruleFlag = ruleFlag; + this.slotTitle = slotTitle; + Map map = new HashMap(5); + map.put("title", "hasDatarule"); + this.scopedSlots = map; + this.isLeaf = isLeaf; + this.value = key; + if (!isLeaf) { + this.children = new ArrayList(); + } + } + + private String parentId; + + private String label; + + private String value; + + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + /** + * @return the label + */ + public String getLabel() { + return label; + } + + /** + * @param label the label to set + */ + public void setLabel(String label) { + this.label = label; + } + + /** + * @return the value + */ + public String getValue() { + return value; + } + + /** + * @param value the value to set + */ + public void setValue(String value) { + this.value = value; + } + + public String getSlotTitle() { + return slotTitle; + } + + public void setSlotTitle(String slotTitle) { + this.slotTitle = slotTitle; + } + + public Integer getRuleFlag() { + return ruleFlag; + } + + public void setRuleFlag(Integer ruleFlag) { + this.ruleFlag = ruleFlag; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java index e182d0e..c15a114 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/model/TreeSelectModel.java @@ -4,93 +4,94 @@ import java.io.Serializable; import java.util.List; /** - * 树形下拉框 - * @author: jeecg-boot + * 树形下拉框 + * + * @author: jeecg-boot */ public class TreeSelectModel implements Serializable { - private static final long serialVersionUID = 9016390975325574747L; + private static final long serialVersionUID = 9016390975325574747L; - private String key; - - private String title; - /** - * 是否叶子节点 - */ - private boolean isLeaf; - - private String icon; - - private String parentId; - - private String value; - - private String code; - - public String getValue() { - return value; - } + private String key; - public void setValue(String value) { - this.value = value; - } + private String title; + /** + * 是否叶子节点 + */ + private boolean isLeaf; - public String getParentId() { - return parentId; - } + private String icon; - public void setParentId(String parentId) { - this.parentId = parentId; - } + private String parentId; - public String getKey() { - return key; - } + private String value; - public void setKey(String key) { - this.key = key; - } + private String code; - public String getTitle() { - return title; - } + public String getValue() { + return value; + } - public void setTitle(String title) { - this.title = title; - } + public void setValue(String value) { + this.value = value; + } - public boolean isLeaf() { - return isLeaf; - } + public String getParentId() { + return parentId; + } - public void setLeaf(boolean isLeaf) { - this.isLeaf = isLeaf; - } + public void setParentId(String parentId) { + this.parentId = parentId; + } - public String getIcon() { - return icon; - } + public String getKey() { + return key; + } - public void setIcon(String icon) { - this.icon = icon; - } + public void setKey(String key) { + this.key = key; + } - public String getCode() { - return code; - } + public String getTitle() { + return title; + } - public void setCode(String code) { - this.code = code; - } - - private List children; + public void setTitle(String title) { + this.title = title; + } - public List getChildren() { - return children; - } + public boolean isLeaf() { + return isLeaf; + } - public void setChildren(List children) { - this.children = children; - } + public void setLeaf(boolean isLeaf) { + this.isLeaf = isLeaf; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + private List children; + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/rule/CategoryCodeRule.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/rule/CategoryCodeRule.java index 21d436b..d0f8b3f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/rule/CategoryCodeRule.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/rule/CategoryCodeRule.java @@ -1,7 +1,6 @@ package org.jeecg.modules.system.rule; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.handler.IFillRuleHandler; @@ -53,8 +52,8 @@ public class CategoryCodeRule implements IFillRuleHandler { //找同类 确定上一个最大的code值 SysCategoryMapper baseMapper = (SysCategoryMapper) SpringContextUtils.getBean("sysCategoryMapper"); //update-begin---author:wangshuai ---date:20230424 for:【issues/4846】开启saas多租户功能后,租户管理员在添加分类字典时,报错------------ - Page page = new Page<>(1,1); - List list = baseMapper.getMaxCategoryCodeByPage(page,categoryPid); + Page page = new Page<>(1, 1); + List list = baseMapper.getMaxCategoryCodeByPage(page, categoryPid); //update-end---author:wangshuai ---date:20230424 for:【issues/4846】开启saas多租户功能后,租户管理员在添加分类字典时,报错------------ if (list == null || list.size() == 0) { if (ROOT_PID_VALUE.equals(categoryPid)) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/rule/OrgCodeRule.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/rule/OrgCodeRule.java index 56c028f..7b0de12 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/rule/OrgCodeRule.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/rule/OrgCodeRule.java @@ -57,11 +57,11 @@ public class OrgCodeRule implements IFillRuleHandler { // 线判断数据库中的表是否为空,空则直接返回初始编码 //获取最大值code的部门信息 //update-begin---author:wangshuai ---date:20230211 for:[QQYUN-4209]租户隔离下部门新建不了------------ - Page page = new Page<>(1,1); - IPage pageList = sysDepartService.getMaxCodeDepart(page,""); + Page page = new Page<>(1, 1); + IPage pageList = sysDepartService.getMaxCodeDepart(page, ""); List records = pageList.getRecords(); - if (null==records || records.size()==0) { - //update-end---author:wangshuai ---date:20230211 for:[QQYUN-4209]租户隔离下部门新建不了------------ + if (null == records || records.size() == 0) { + //update-end---author:wangshuai ---date:20230211 for:[QQYUN-4209]租户隔离下部门新建不了------------ strArray[0] = YouBianCodeUtil.getNextYouBianCode(null); strArray[1] = "1"; return strArray; @@ -74,8 +74,8 @@ public class OrgCodeRule implements IFillRuleHandler { } else {//反之则查询出所有同级的部门,获取结果后有两种情况,有同级和没有同级 //获取自己部门最大值orgCode部门信息 //update-begin---author:wangshuai ---date:20230211 for:[QQYUN-4209]租户隔离下部门新建不了------------ - Page page = new Page<>(1,1); - IPage pageList = sysDepartService.getMaxCodeDepart(page,parentId); + Page page = new Page<>(1, 1); + IPage pageList = sysDepartService.getMaxCodeDepart(page, parentId); List records = pageList.getRecords(); // 查询出父级部门 SysDepart depart = sysDepartService.getDepartById(parentId); @@ -85,7 +85,7 @@ public class OrgCodeRule implements IFillRuleHandler { // 根据父级部门类型算出当前部门的类型 orgType = String.valueOf(Integer.valueOf(depart.getOrgType()) + 1); // 处理同级部门为null的情况 - if (null == records || records.size()==0) { + if (null == records || records.size() == 0) { // 直接生成当前的部门编码并返回 newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, null); } else { //处理有同级部门的情况 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/security/DictQueryBlackListHandler.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/security/DictQueryBlackListHandler.java index 56fada9..5e76aa1 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/security/DictQueryBlackListHandler.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/security/DictQueryBlackListHandler.java @@ -33,14 +33,14 @@ public class DictQueryBlackListHandler extends AbstractQueryBlackListHandler { //e.printStackTrace(); } dictCodeString = dictCodeString.trim(); - + // 无论什么场景 第二、三个元素一定是表的字段,直接add if (dictCodeString != null && dictCodeString.indexOf(SymbolConstant.COMMA) > 0) { String[] arr = dictCodeString.split(SymbolConstant.COMMA); if (arr.length != 3 && arr.length != 4) { return null; } - + //获取表名 String tableName = getTableName(arr[0]); QueryTable table = new QueryTable(tableName, ""); @@ -70,12 +70,12 @@ public class DictQueryBlackListHandler extends AbstractQueryBlackListHandler { String tableName = arr[0].trim(); //【20230814】解决使用参数tableName=sys_user t&复测,漏洞仍然存在 if (tableName.contains(".")) { - tableName = tableName.substring(tableName.indexOf(".")+1, tableName.length()).trim(); + tableName = tableName.substring(tableName.indexOf(".") + 1, tableName.length()).trim(); } if (tableName.contains(" ")) { tableName = tableName.substring(0, tableName.indexOf(" ")).trim(); } - + //【issues/4393】 sys_user , (sys_user), sys_user%20, %60sys_user%60 String reg = "\\s+|\\(|\\)|`"; return tableName.replaceAll(reg, ""); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java index e37e68b..867e740 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementSendService.java @@ -1,34 +1,33 @@ package org.jeecg.modules.system.service; -import java.util.List; - -import org.jeecg.modules.system.entity.SysAnnouncementSend; -import org.jeecg.modules.system.model.AnnouncementSendModel; - import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysAnnouncementSend; +import org.jeecg.modules.system.model.AnnouncementSendModel; /** * @Description: 用户通告阅读标记表 * @Author: jeecg-boot - * @Date: 2019-02-21 + * @Date: 2019-02-21 * @Version: V1.0 */ public interface ISysAnnouncementSendService extends IService { - /** - * 获取我的消息 - * @param announcementSendModel - * @param page 当前页数 - * @return - */ - public Page getMyAnnouncementSendPage(Page page,AnnouncementSendModel announcementSendModel); + /** + * 获取我的消息 + * + * @param announcementSendModel + * @param page 当前页数 + * @return + */ + public Page getMyAnnouncementSendPage(Page page, AnnouncementSendModel announcementSendModel); + + /** + * 根据消息发送记录ID获取消息内容 + * + * @return + */ + AnnouncementSendModel getOne(String sendId); - /** - * 根据消息发送记录ID获取消息内容 - * @return - */ - AnnouncementSendModel getOne(String sendId); - } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java index 6124045..fe1be38 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java @@ -1,6 +1,5 @@ package org.jeecg.modules.system.service; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.system.entity.SysAnnouncement; @@ -11,39 +10,43 @@ import java.util.List; /** * @Description: 系统通告表 * @Author: jeecg-boot - * @Date: 2019-01-02 + * @Date: 2019-01-02 * @Version: V1.0 */ public interface ISysAnnouncementService extends IService { /** * 保存系统通告 + * * @param sysAnnouncement */ - public void saveAnnouncement(SysAnnouncement sysAnnouncement); + public void saveAnnouncement(SysAnnouncement sysAnnouncement); /** * 修改系统通告 + * * @param sysAnnouncement * @return */ - public boolean upDateAnnouncement(SysAnnouncement sysAnnouncement); + public boolean upDateAnnouncement(SysAnnouncement sysAnnouncement); /** * 保存系统通告 - * @param title 标题 + * + * @param title 标题 * @param msgContent 信息内容 */ - public void saveSysAnnouncement(String title, String msgContent); + public void saveSysAnnouncement(String title, String msgContent); /** * 分页查询系统通告 - * @param page 当前页数 - * @param userId 用户id + * + * @param page 当前页数 + * @param userId 用户id * @param msgCategory 消息类型 * @return Page */ - public Page querySysCementPageByUserId(Page page, String userId, String msgCategory, Integer tenantId, Date beginDate); + public Page querySysCementPageByUserId(Page page, String userId, String msgCategory, Integer tenantId, Date beginDate); /** * 获取用户未读消息数量 @@ -55,11 +58,12 @@ public interface ISysAnnouncementService extends IService { /** - * 补全当前登录用户的消息阅读记录 + * 补全当前登录用户的消息阅读记录 + * * @作废无用 2023-09-19 */ @Deprecated - void completeAnnouncementSendInfo(); + void completeAnnouncementSendInfo(); /** * 补全所有用户的推送公告关系数据 @@ -68,7 +72,7 @@ public interface ISysAnnouncementService extends IService { * @param tenantId */ void batchInsertSysAnnouncementSend(String commentId, Integer tenantId); - + /** * 分页查询当前登录用户的消息, 并且标记哪些是未读消息 */ @@ -87,6 +91,7 @@ public interface ISysAnnouncementService extends IService { /** * 查询用户未阅读的通知公告 + * * @param userId * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java index 607d2c5..c72907b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java @@ -11,13 +11,15 @@ import java.util.Map; /** * @Description: 分类字典 * @Author: jeecg-boot - * @Date: 2019-05-29 + * @Date: 2019-05-29 * @Version: V1.0 */ public interface ISysCategoryService extends IService { - /**根节点父ID的值*/ - public static final String ROOT_PID_VALUE = "0"; + /** + * 根节点父ID的值 + */ + public static final String ROOT_PID_VALUE = "0"; /** * 存在子节点 @@ -26,76 +28,83 @@ public interface ISysCategoryService extends IService { /** * 添加分类字典 + * * @param sysCategory */ - void addSysCategory(SysCategory sysCategory); + void addSysCategory(SysCategory sysCategory); /** * 修改分类字典 + * * @param sysCategory */ - void updateSysCategory(SysCategory sysCategory); - - /** + void updateSysCategory(SysCategory sysCategory); + + /** * 根据父级编码加载分类字典的数据 - * @param pcode - * @return + * + * @param pcode + * @return * @throws JeecgBootException - */ - public List queryListByCode(String pcode) throws JeecgBootException; - - /** - * 根据pid查询子节点集合 - * @param pid - * @return - */ - public List queryListByPid(String pid); + */ + public List queryListByCode(String pcode) throws JeecgBootException; - /** - * 根据pid查询子节点集合,支持查询条件 - * @param pid - * @param condition - * @return - */ - public List queryListByPid(String pid, Map condition); + /** + * 根据pid查询子节点集合 + * + * @param pid + * @return + */ + public List queryListByPid(String pid); - /** - * 根据code查询id - * @param code - * @return - */ - public String queryIdByCode(String code); + /** + * 根据pid查询子节点集合,支持查询条件 + * + * @param pid + * @param condition + * @return + */ + public List queryListByPid(String pid, Map condition); - /** - * 删除节点时同时删除子节点及修改父级节点 - * @param ids - */ - void deleteSysCategory(String ids); + /** + * 根据code查询id + * + * @param code + * @return + */ + public String queryIdByCode(String code); - /** - * 分类字典控件数据回显[表单页面] - * - * @param ids - * @return - */ - List loadDictItem(String ids); + /** + * 删除节点时同时删除子节点及修改父级节点 + * + * @param ids + */ + void deleteSysCategory(String ids); - /** - * 分类字典控件数据回显[表单页面] - * - * @param ids - * @param delNotExist 是否移除不存在的项,设为false如果某个key不存在数据库中,则直接返回key本身 - * @return - */ - List loadDictItem(String ids, boolean delNotExist); + /** + * 分类字典控件数据回显[表单页面] + * + * @param ids + * @return + */ + List loadDictItem(String ids); - /** - * 【仅导入使用】分类字典控件反向翻译 - * - * @param names - * @param delNotExist 是否移除不存在的项,设为false如果某个key不存在数据库中,则直接返回key本身 - * @return - */ - List loadDictItemByNames(String names, boolean delNotExist); + /** + * 分类字典控件数据回显[表单页面] + * + * @param ids + * @param delNotExist 是否移除不存在的项,设为false如果某个key不存在数据库中,则直接返回key本身 + * @return + */ + List loadDictItem(String ids, boolean delNotExist); + + /** + * 【仅导入使用】分类字典控件反向翻译 + * + * @param names + * @param delNotExist 是否移除不存在的项,设为false如果某个key不存在数据库中,则直接返回key本身 + * @return + */ + List loadDictItemByNames(String names, boolean delNotExist); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCommentService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCommentService.java index 4c865d4..7235d11 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCommentService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysCommentService.java @@ -1,11 +1,11 @@ package org.jeecg.modules.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import jakarta.servlet.http.HttpServletRequest; import org.jeecg.modules.system.entity.SysComment; import org.jeecg.modules.system.vo.SysCommentFileVo; import org.jeecg.modules.system.vo.SysCommentVO; -import jakarta.servlet.http.HttpServletRequest; import java.util.List; /** @@ -56,6 +56,7 @@ public interface ISysCommentService extends IService { * @return */ List queryFormFileList(String tableName, String formDataId); + /** * app端 保存文件+评论 * diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDataLogService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDataLogService.java index 3886fc5..493b642 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDataLogService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDataLogService.java @@ -1,21 +1,21 @@ package org.jeecg.modules.system.service; -import org.jeecg.modules.system.entity.SysDataLog; - import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysDataLog; /** * @Description: 数据日志service接口 * @author: jeecg-boot */ public interface ISysDataLogService extends IService { - - /** - * 添加数据日志 - * @param tableName - * @param dataId - * @param dataContent - */ - public void addDataLog(String tableName, String dataId, String dataContent); + + /** + * 添加数据日志 + * + * @param tableName + * @param dataId + * @param dataContent + */ + public void addDataLog(String tableName, String dataId, String dataContent); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDataSourceService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDataSourceService.java index eab243c..a2d03e3 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDataSourceService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDataSourceService.java @@ -14,6 +14,7 @@ public interface ISysDataSourceService extends IService { /** * 添加数据源 + * * @param sysDataSource * @return */ @@ -21,6 +22,7 @@ public interface ISysDataSourceService extends IService { /** * 修改数据源 + * * @param sysDataSource * @return */ @@ -29,6 +31,7 @@ public interface ISysDataSourceService extends IService { /** * 删除数据源 + * * @param id * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartPermissionService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartPermissionService.java index 08ff1be..b6e4846 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartPermissionService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartPermissionService.java @@ -1,7 +1,7 @@ package org.jeecg.modules.system.service; -import org.jeecg.modules.system.entity.SysDepartPermission; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysDepartPermission; import org.jeecg.modules.system.entity.SysPermissionDataRule; import java.util.List; @@ -9,23 +9,25 @@ import java.util.List; /** * @Description: 部门权限表 * @Author: jeecg-boot - * @Date: 2020-02-11 + * @Date: 2020-02-11 * @Version: V1.0 */ public interface ISysDepartPermissionService extends IService { /** * 保存授权 将上次的权限和这次作比较 差异处理提高效率 + * * @param departId * @param permissionIds * @param lastPermissionIds */ - public void saveDepartPermission(String departId,String permissionIds,String lastPermissionIds); + public void saveDepartPermission(String departId, String permissionIds, String lastPermissionIds); /** * 根据部门id,菜单id获取数据规则 + * * @param permissionId 菜单id - * @param departId 部门id + * @param departId 部门id * @return */ - List getPermRuleListByDeptIdAndPermId(String departId,String permissionId); + List getPermRuleListByDeptIdAndPermId(String departId, String permissionId); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRolePermissionService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRolePermissionService.java index 29c488a..8b7a2da 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRolePermissionService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRolePermissionService.java @@ -1,20 +1,21 @@ package org.jeecg.modules.system.service; -import org.jeecg.modules.system.entity.SysDepartRolePermission; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysDepartRolePermission; /** * @Description: 部门角色权限 * @Author: jeecg-boot - * @Date: 2020-02-12 + * @Date: 2020-02-12 * @Version: V1.0 */ public interface ISysDepartRolePermissionService extends IService { /** * 保存授权 将上次的权限和这次作比较 差异处理提高效率 + * * @param roleId * @param permissionIds * @param lastPermissionIds */ - public void saveDeptRolePermission(String roleId,String permissionIds,String lastPermissionIds); + public void saveDeptRolePermission(String roleId, String permissionIds, String lastPermissionIds); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleService.java index a8568f9..3ba156e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleService.java @@ -1,20 +1,21 @@ package org.jeecg.modules.system.service; -import org.jeecg.modules.system.entity.SysDepartRole; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysDepartRole; import java.util.List; /** * @Description: 部门角色 * @Author: jeecg-boot - * @Date: 2020-02-12 + * @Date: 2020-02-12 * @Version: V1.0 */ public interface ISysDepartRoleService extends IService { /** * 根据用户id,部门id查询可授权所有部门角色 + * * @param orgCode * @param userId * @return diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleUserService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleUserService.java index 2c5ca6f..83dfcf8 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleUserService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartRoleUserService.java @@ -1,30 +1,32 @@ package org.jeecg.modules.system.service; -import org.jeecg.modules.system.entity.SysDepartRoleUser; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysDepartRoleUser; import java.util.List; /** * @Description: 部门角色人员信息 * @Author: jeecg-boot - * @Date: 2020-02-13 + * @Date: 2020-02-13 * @Version: V1.0 */ public interface ISysDepartRoleUserService extends IService { /** * 添加用户与部门关联 - * @param userId 用户id + * + * @param userId 用户id * @param newRoleId 新的角色id * @param oldRoleId 旧的角色id */ - void deptRoleUserAdd(String userId,String newRoleId,String oldRoleId); + void deptRoleUserAdd(String userId, String newRoleId, String oldRoleId); /** * 取消用户与部门关联,删除关联关系 + * * @param userIds * @param depId */ - void removeDeptRoleUser(List userIds,String depId); + void removeDeptRoleUser(List userIds, String depId); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java index 46ff917..ccf18a4 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java @@ -5,27 +5,26 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.system.entity.SysDepart; -import org.jeecg.modules.system.entity.SysUserDepart; import org.jeecg.modules.system.model.DepartIdModel; import org.jeecg.modules.system.model.SysDepartTreeModel; import org.jeecg.modules.system.vo.SysDepartExportVo; import org.jeecg.modules.system.vo.lowapp.ExportDepartVo; -import jakarta.servlet.http.HttpServletRequest; import java.util.List; /** *

* 部门表 服务实现类 *

- * + * * @Author:Steve - * @Since: 2019-01-22 + * @Since: 2019-01-22 */ -public interface ISysDepartService extends IService{ +public interface ISysDepartService extends IService { /** * 查询我的部门信息,并分节点进行显示 + * * @param departIds 部门id * @return */ @@ -33,6 +32,7 @@ public interface ISysDepartService extends IService{ /** * 查询所有部门信息,并分节点进行显示 + * * @return */ List queryTreeList(); @@ -40,6 +40,7 @@ public interface ISysDepartService extends IService{ /** * 查询所有部门信息,并分节点进行显示 + * * @param ids 多个部门id * @return */ @@ -47,54 +48,60 @@ public interface ISysDepartService extends IService{ /** * 查询所有部门DepartId信息,并分节点进行显示 + * * @return */ public List queryDepartIdTreeList(); /** * 保存部门数据 + * * @param sysDepart - * @param username 用户名 + * @param username 用户名 */ - void saveDepartData(SysDepart sysDepart,String username); + void saveDepartData(SysDepart sysDepart, String username); /** * 更新depart数据 + * * @param sysDepart - * @param username 用户名 + * @param username 用户名 * @return */ - Boolean updateDepartDataById(SysDepart sysDepart,String username); - + Boolean updateDepartDataById(SysDepart sysDepart, String username); + /** * 删除depart数据 * @param id * @return */ - /* boolean removeDepartDataById(String id); */ - + /* boolean removeDepartDataById(String id); */ + /** * 根据关键字搜索相关的部门数据 + * * @param keyWord * @param myDeptSearch - * @param departIds 多个部门id + * @param departIds 多个部门id * @return */ - List searchByKeyWord(String keyWord,String myDeptSearch,String departIds); - + List searchByKeyWord(String keyWord, String myDeptSearch, String departIds); + /** * 根据部门id删除并删除其可能存在的子级部门 + * * @param id * @return */ boolean delete(String id); - + /** * 查询SysDepart集合 + * * @param userId * @return */ - public List queryUserDeparts(String userId); + public List queryUserDeparts(String userId); /** * 根据用户名查询部门 @@ -103,7 +110,7 @@ public interface ISysDepartService extends IService{ * @return */ List queryDepartsByUsername(String username); - + /** * 根据用户ID查询部门 * @@ -112,15 +119,17 @@ public interface ISysDepartService extends IService{ */ List queryDepartsByUserId(String userId); - /** + /** * 根据部门id批量删除并删除其可能存在的子级部门 + * * @param ids 多个部门id * @return */ - void deleteBatchWithChildren(List ids); + void deleteBatchWithChildren(List ids); /** - * 根据部门Id查询,当前和下级所有部门IDS + * 根据部门Id查询,当前和下级所有部门IDS + * * @param departId * @return */ @@ -128,24 +137,29 @@ public interface ISysDepartService extends IService{ /** * 获取我的部门下级所有部门IDS + * * @param departIds 多个部门id * @return */ List getMySubDepIdsByDepId(String departIds); + /** * 根据关键字获取部门信息(通讯录) + * * @param keyWord 搜索词 * @return */ List queryTreeByKeyWord(String keyWord); + /** * 获取我的部门下级所有部门 - * @param parentId 父id - * @param ids 多个部门id + * + * @param parentId 父id + * @param ids 多个部门id * @param primaryKey 主键字段(id或者orgCode) * @return */ - List queryTreeListByPid(String parentId,String ids, String primaryKey); + List queryTreeListByPid(String parentId, String ids, String primaryKey); /** * 获取某个部门的所有父级部门的ID @@ -162,14 +176,18 @@ public interface ISysDepartService extends IService{ * @return JSONObject */ JSONObject queryAllParentIdByOrgCode(String orgCode); + /** * 获取公司信息 + * * @param orgCode 部门编码 * @return */ SysDepart queryCompByOrgCode(String orgCode); + /** * 获取下级部门 + * * @param pid * @return */ @@ -177,18 +195,21 @@ public interface ISysDepartService extends IService{ /** * 获取我的部门已加入的公司 + * * @return */ List getMyDepartList(); /** * 删除部门 + * * @param id */ void deleteDepart(String id); /** * 通讯录通过租户id查询部门数据 + * * @param parentId * @param tenantId * @param departName @@ -198,6 +219,7 @@ public interface ISysDepartService extends IService{ /** * 根据id查询部门信息 + * * @param parentId * @return */ @@ -205,6 +227,7 @@ public interface ISysDepartService extends IService{ /** * 根据id查询部门信息 + * * @param parentId * @return */ @@ -212,6 +235,7 @@ public interface ISysDepartService extends IService{ /** * 更新叶子节点 + * * @param id * @param izLeaf */ @@ -219,6 +243,7 @@ public interface ISysDepartService extends IService{ /** * 获取导出部门的数据 + * * @param tenantId * @return */ @@ -228,6 +253,7 @@ public interface ISysDepartService extends IService{ /** * 根据租户id导出部门 + * * @param tenantId * @return */ @@ -235,6 +261,7 @@ public interface ISysDepartService extends IService{ /** * 导出系统部门excel + * * @param listSysDeparts * @param errorMessageList */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java index 803b490..36c3db5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictItemService.java @@ -1,13 +1,13 @@ package org.jeecg.modules.system.service; -import org.jeecg.modules.system.entity.SysDictItem; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysDictItem; import java.util.List; /** *

- * 服务类 + * 服务类 *

* * @Author zhangweijian @@ -17,6 +17,7 @@ public interface ISysDictItemService extends IService { /** * 通过字典id查询字典项 + * * @param mainId 字典id * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictService.java index 0f0490e..ed89706 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDictService.java @@ -22,45 +22,49 @@ import java.util.Map; */ public interface ISysDictService extends IService { - /** - * 校验数据是否可用,不存在重复数据 - * - * @param duplicateCheckVo - * @return - */ - @Deprecated - public boolean duplicateCheckData(DuplicateCheckVo duplicateCheckVo); + /** + * 校验数据是否可用,不存在重复数据 + * + * @param duplicateCheckVo + * @return + */ + @Deprecated + public boolean duplicateCheckData(DuplicateCheckVo duplicateCheckVo); /** * 通过字典code获取字典数据 + * * @param code * @return */ public List queryDictItemsByCode(String code); - /** - * 查询有效的数据字典项 - * @param code - * @return - */ - List queryEnableDictItemsByCode(String code); + /** + * 查询有效的数据字典项 + * + * @param code + * @return + */ + List queryEnableDictItemsByCode(String code); - /** - * 通过多个字典code获取字典数据 - * - * @param dictCodeList - * @return key = 字典code,value=对应的字典选项 - */ - Map> queryDictItemsByCodeList(List dictCodeList); + /** + * 通过多个字典code获取字典数据 + * + * @param dictCodeList + * @return key = 字典code,value=对应的字典选项 + */ + Map> queryDictItemsByCodeList(List dictCodeList); /** * 登录加载系统字典 + * * @return */ - public Map> queryAllDictItems(); + public Map> queryAllDictItems(); /** * 查通过查询指定table的 text code 获取字典 + * * @param tableFilterSql * @param text * @param code @@ -71,6 +75,7 @@ public interface ISysDictService extends IService { /** * 通过查询指定table的 text code 获取字典(指定查询条件) + * * @param table * @param text * @param code @@ -78,26 +83,29 @@ public interface ISysDictService extends IService { * @return */ @Deprecated - public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql); + public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql); /** * 通过字典code及字典项的value获取字典文本 + * * @param code * @param key * @return */ public String queryDictTextByKey(String code, String key); - /** - * 可通过多个字典code查询翻译文本 - * @param dictCodeList 多个字典code - * @param keys 数据列表 - * @return - */ - Map> queryManyDictByKeys(List dictCodeList, List keys); + /** + * 可通过多个字典code查询翻译文本 + * + * @param dictCodeList 多个字典code + * @param keys 数据列表 + * @return + */ + Map> queryManyDictByKeys(List dictCodeList, List keys); /** * 通过查询指定table的 text code key 获取字典值 + * * @param table * @param text * @param code @@ -105,35 +113,38 @@ public interface ISysDictService extends IService { * @return */ @Deprecated - String queryTableDictTextByKey(String table, String text, String code, String key); + String queryTableDictTextByKey(String table, String text, String code, String key); - //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ - /** - * 通过查询指定table的 text code key 获取字典值,可批量查询 - * - * @param table - * @param text - * @param code - * @param keys - * @param dataSource 数据源 - * @return - */ - List queryTableDictTextByKeys(String table, String text, String code, List keys, String dataSource); - //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + + /** + * 通过查询指定table的 text code key 获取字典值,可批量查询 + * + * @param table + * @param text + * @param code + * @param keys + * @param dataSource 数据源 + * @return + */ + List queryTableDictTextByKeys(String table, String text, String code, List keys, String dataSource); + //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ /** * 通过查询指定table的 text code key 获取字典值,包含value + * * @param table 表名 * @param text * @param code * @param keys * @return */ - @Deprecated - List queryTableDictByKeys(String table, String text, String code, String keys); + @Deprecated + List queryTableDictByKeys(String table, String text, String code, String keys); /** * 通过查询指定table的 text code key 获取字典值,包含value + * * @param table * @param text * @param code @@ -141,8 +152,8 @@ public interface ISysDictService extends IService { * @param delNotExist * @return */ - @Deprecated - List queryTableDictByKeys(String table, String text, String code, String keys,boolean delNotExist); + @Deprecated + List queryTableDictByKeys(String table, String text, String code, String keys, boolean delNotExist); /** * 根据字典类型删除关联表中其对应的数据 @@ -154,6 +165,7 @@ public interface ISysDictService extends IService { /** * 添加一对多 + * * @param sysDict * @param sysDictItemList * @return Integer @@ -161,16 +173,18 @@ public interface ISysDictService extends IService { public Integer saveMain(SysDict sysDict, List sysDictItemList); /** - * 查询所有部门 作为字典信息 id -->value,departName -->text - * @return - */ - public List queryAllDepartBackDictModel(); + * 查询所有部门 作为字典信息 id -->value,departName -->text + * + * @return + */ + public List queryAllDepartBackDictModel(); - /** - * 查询所有用户 作为字典信息 username -->value,realname -->text - * @return - */ - public List queryAllUserBackDictModel(); + /** + * 查询所有用户 作为字典信息 username -->value,realname -->text + * + * @return + */ + public List queryAllUserBackDictModel(); // /** // * 通过关键字查询字典表 @@ -183,75 +197,84 @@ public interface ISysDictService extends IService { // @Deprecated // public List queryTableDictItems(String table, String text, String code,String keyword); - /** - * 查询字典表数据 只查询前10条 - * @param table - * @param text - * @param code - * @param keyword + /** + * 查询字典表数据 只查询前10条 + * + * @param table + * @param text + * @param code + * @param keyword * @param condition - * @param pageSize 每页条数 - * @return - */ - @Deprecated - public List queryLittleTableDictItems(String table, String text, String code, String condition, String keyword, int pageSize); + * @param pageSize 每页条数 + * @return + */ + @Deprecated + public List queryLittleTableDictItems(String table, String text, String code, String condition, String keyword, int pageSize); - /** - * 查询字典表所有数据 - * @param table - * @param text - * @param code - * @param condition - * @param keyword - * @return - */ - @Deprecated - public List queryAllTableDictItems(String table, String text, String code, String condition, String keyword); - /** - * 根据表名、显示字段名、存储字段名 查询树 - * @param table - * @param text - * @param code - * @param pidField - * @param pid - * @param hasChildField + /** + * 查询字典表所有数据 + * + * @param table + * @param text + * @param code + * @param condition + * @param keyword + * @return + */ + @Deprecated + public List queryAllTableDictItems(String table, String text, String code, String condition, String keyword); + + /** + * 根据表名、显示字段名、存储字段名 查询树 + * + * @param table + * @param text + * @param code + * @param pidField + * @param pid + * @param hasChildField * @param query - * @return - */ - @Deprecated - List queryTreeList(Map query,String table, String text, String code, String pidField,String pid,String hasChildField,int converIsLeafVal); + * @return + */ + @Deprecated + List queryTreeList(Map query, String table, String text, String code, String pidField, String pid, String hasChildField, int converIsLeafVal); - /** - * 真实删除 - * @param id - */ - public void deleteOneDictPhysically(String id); + /** + * 真实删除 + * + * @param id + */ + public void deleteOneDictPhysically(String id); - /** - * 修改delFlag - * @param delFlag - * @param id - */ - public void updateDictDelFlag(int delFlag,String id); + /** + * 修改delFlag + * + * @param delFlag + * @param id + */ + public void updateDictDelFlag(int delFlag, String id); - /** - * 查询被逻辑删除的数据 - * @return - */ - public List queryDeleteList(String tenantId); + /** + * 查询被逻辑删除的数据 + * + * @return + */ + public List queryDeleteList(String tenantId); - /** - * 分页查询 - * @param query - * @param pageSize - * @param pageNo - * @return - */ - @Deprecated - public List queryDictTablePageList(DictQuery query,int pageSize, int pageNo); + /** + * 分页查询 + * + * @param query + * @param pageSize + * @param pageNo + * @return + */ + @Deprecated + public List queryDictTablePageList(DictQuery query, int pageSize, int pageNo); /** * 获取字典数据 + * * @param dictCode 字典code * @param dictCode 表名,文本字段,code字段 | 举例:sys_user,realname,id * @return @@ -269,22 +292,25 @@ public interface ISysDictService extends IService { */ List loadDict(String dictCode, String keyword, Integer pageSize); - /** - * 根据应用id获取字典列表和详情 - * @param lowAppId - * @return - */ - List getDictListByLowAppId(String lowAppId); + /** + * 根据应用id获取字典列表和详情 + * + * @param lowAppId + * @return + */ + List getDictListByLowAppId(String lowAppId); - /** - * 创建字典 - * @param sysDictVo - */ - String addDictByLowAppId(SysDictVo sysDictVo); + /** + * 创建字典 + * + * @param sysDictVo + */ + String addDictByLowAppId(SysDictVo sysDictVo); - /** - * 编辑字典 - * @param sysDictVo - */ - void editDictByLowAppId(SysDictVo sysDictVo); + /** + * 编辑字典 + * + * @param sysDictVo + */ + void editDictByLowAppId(SysDictVo sysDictVo); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysGatewayRouteService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysGatewayRouteService.java index 51eec85..3c57033 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysGatewayRouteService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysGatewayRouteService.java @@ -7,25 +7,28 @@ import org.jeecg.modules.system.entity.SysGatewayRoute; /** * @Description: gateway路由管理 * @Author: jeecg-boot - * @Date: 2020-05-26 + * @Date: 2020-05-26 * @Version: V1.0 */ public interface ISysGatewayRouteService extends IService { /** * 添加所有的路由信息到redis + * * @param key */ - void addRoute2Redis(String key); + void addRoute2Redis(String key); /** * 删除路由 + * * @param id */ - void deleteById(String id); + void deleteById(String id); /** * 保存路由配置 + * * @param array */ void updateAll(JSONObject array); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysLogService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysLogService.java index 2d7238d..7fd97cb 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysLogService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysLogService.java @@ -1,13 +1,12 @@ package org.jeecg.modules.system.service; +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysLog; + import java.util.Date; import java.util.List; import java.util.Map; -import org.jeecg.modules.system.entity.SysLog; - -import com.baomidou.mybatisplus.extension.service.IService; - /** *

* 系统日志表 服务类 @@ -18,41 +17,45 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ISysLogService extends IService { - /** - * 清空所有日志记录 - */ - public void removeAll(); - - /** - * 获取系统总访问次数 - * - * @return Long - */ - Long findTotalVisitCount(); + /** + * 清空所有日志记录 + */ + public void removeAll(); - //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 - /** - * 获取系统今日访问次数 + /** + * 获取系统总访问次数 + * + * @return Long + */ + Long findTotalVisitCount(); + + //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + + /** + * 获取系统今日访问次数 + * * @param dayStart - * @param dayEnd - * @return Long - */ - Long findTodayVisitCount(Date dayStart, Date dayEnd); + * @param dayEnd + * @return Long + */ + Long findTodayVisitCount(Date dayStart, Date dayEnd); - /** - * 获取系统今日访问 IP数 - * @param dayStart 开始时间 - * @param dayEnd 结束时间 - * @return Long - */ - Long findTodayIp(Date dayStart, Date dayEnd); - //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 - - /** - * 首页:根据时间统计访问数量/ip数量 - * @param dayStart - * @param dayEnd - * @return - */ - List> findVisitCount(Date dayStart, Date dayEnd); + /** + * 获取系统今日访问 IP数 + * + * @param dayStart 开始时间 + * @param dayEnd 结束时间 + * @return Long + */ + Long findTodayIp(Date dayStart, Date dayEnd); + //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + + /** + * 首页:根据时间统计访问数量/ip数量 + * + * @param dayStart + * @param dayEnd + * @return + */ + List> findVisitCount(Date dayStart, Date dayEnd); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPackPermissionService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPackPermissionService.java index 18f7477..4453598 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPackPermissionService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPackPermissionService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.system.service; -import org.jeecg.modules.system.entity.SysPackPermission; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysPackPermission; /** * @Description: 产品包菜单关系表 * @Author: jeecg-boot - * @Date: 2022-12-31 + * @Date: 2022-12-31 * @Version: V1.0 */ public interface ISysPackPermissionService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPermissionDataRuleService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPermissionDataRuleService.java index 3e0a5d0..bbceb91 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPermissionDataRuleService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPermissionDataRuleService.java @@ -1,10 +1,9 @@ package org.jeecg.modules.system.service; -import java.util.List; - +import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.system.entity.SysPermissionDataRule; -import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; /** *

@@ -16,41 +15,45 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ISysPermissionDataRuleService extends IService { - /** - * 根据菜单id查询其对应的权限数据 - * - * @param permissionId + /** + * 根据菜单id查询其对应的权限数据 + * + * @param permissionId * @return List - */ - List getPermRuleListByPermId(String permissionId); + */ + List getPermRuleListByPermId(String permissionId); + + /** + * 根据页面传递的参数查询菜单权限数据 + * + * @param permRule + * @return + */ + List queryPermissionRule(SysPermissionDataRule permRule); + + + /** + * 根据菜单ID和用户名查找数据权限配置信息 + * + * @param permissionId + * @param username + * @return + */ + List queryPermissionDataRules(String username, String permissionId); + + /** + * 新增菜单权限配置 修改菜单rule_flag + * + * @param sysPermissionDataRule + */ + public void savePermissionDataRule(SysPermissionDataRule sysPermissionDataRule); + + /** + * 删除菜单权限配置 判断菜单还有无权限 + * + * @param dataRuleId + */ + public void deletePermissionDataRule(String dataRuleId); + - /** - * 根据页面传递的参数查询菜单权限数据 - * @param permRule - * @return - */ - List queryPermissionRule(SysPermissionDataRule permRule); - - - /** - * 根据菜单ID和用户名查找数据权限配置信息 - * @param permissionId - * @param username - * @return - */ - List queryPermissionDataRules(String username,String permissionId); - - /** - * 新增菜单权限配置 修改菜单rule_flag - * @param sysPermissionDataRule - */ - public void savePermissionDataRule(SysPermissionDataRule sysPermissionDataRule); - - /** - * 删除菜单权限配置 判断菜单还有无权限 - * @param dataRuleId - */ - public void deletePermissionDataRule(String dataRuleId); - - } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java index ae8650a..8c25241 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPermissionService.java @@ -1,13 +1,11 @@ package org.jeecg.modules.system.service; -import java.util.List; - -import org.apache.ibatis.annotations.Param; +import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.modules.system.entity.SysPermission; import org.jeecg.modules.system.model.TreeModel; -import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; /** *

@@ -21,92 +19,104 @@ public interface ISysPermissionService extends IService { /** * 切换vue3菜单 */ - public void switchVue3Menu(); - + public void switchVue3Menu(); + /** * 通过父id查询菜单 + * * @param parentId 父id * @return */ - public List queryListByParentId(String parentId); - - /** + public List queryListByParentId(String parentId); + + /** * 真实删除 + * * @param id 菜单id * @throws JeecgBootException */ - public void deletePermission(String id) throws JeecgBootException; - /** + public void deletePermission(String id) throws JeecgBootException; + + /** * 逻辑删除 + * * @param id 菜单id * @throws JeecgBootException */ - public void deletePermissionLogical(String id) throws JeecgBootException; + public void deletePermissionLogical(String id) throws JeecgBootException; /** * 添加菜单 + * * @param sysPermission SysPermission对象 * @throws JeecgBootException */ - public void addPermission(SysPermission sysPermission) throws JeecgBootException; + public void addPermission(SysPermission sysPermission) throws JeecgBootException; /** * 编辑菜单 + * * @param sysPermission SysPermission对象 * @throws JeecgBootException */ - public void editPermission(SysPermission sysPermission) throws JeecgBootException; + public void editPermission(SysPermission sysPermission) throws JeecgBootException; /** * 获取登录用户拥有的权限 + * * @param username 用户名 * @return */ - public List queryByUser(String username); - - /** - * 根据permissionId删除其关联的SysPermissionDataRule表中的数据 - * - * @param id - * @return - */ - public void deletePermRuleByPermId(String id); - - /** - * 查询出带有特殊符号的菜单地址的集合 - * @return - */ - public List queryPermissionUrlWithStar(); + public List queryByUser(String username); - /** - * 判断用户否拥有权限 - * @param username - * @param sysPermission - * @return - */ - public boolean hasPermission(String username, SysPermission sysPermission); + /** + * 根据permissionId删除其关联的SysPermissionDataRule表中的数据 + * + * @param id + * @return + */ + public void deletePermRuleByPermId(String id); - /** - * 根据用户和请求地址判断是否有此权限 - * @param username - * @param url - * @return - */ - public boolean hasPermission(String username, String url); + /** + * 查询出带有特殊符号的菜单地址的集合 + * + * @return + */ + public List queryPermissionUrlWithStar(); - /** - * 查询部门权限数据 - * @param departId - * @return - */ - List queryDepartPermissionList(String departId); + /** + * 判断用户否拥有权限 + * + * @param username + * @param sysPermission + * @return + */ + public boolean hasPermission(String username, SysPermission sysPermission); - /** - * 检测地址是否存在(聚合路由的情况下允许使用子菜单路径作为父菜单的路由地址) - * @param id - * @param url - * @param alwaysShow 是否是聚合路由 - * @return - */ - boolean checkPermDuplication(String id, String url,Boolean alwaysShow); + /** + * 根据用户和请求地址判断是否有此权限 + * + * @param username + * @param url + * @return + */ + public boolean hasPermission(String username, String url); + + /** + * 查询部门权限数据 + * + * @param departId + * @return + */ + List queryDepartPermissionList(String departId); + + /** + * 检测地址是否存在(聚合路由的情况下允许使用子菜单路径作为父菜单的路由地址) + * + * @param id + * @param url + * @param alwaysShow 是否是聚合路由 + * @return + */ + boolean checkPermDuplication(String id, String url, Boolean alwaysShow); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPositionService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPositionService.java index dd33dff..bf29f7c 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPositionService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysPositionService.java @@ -15,6 +15,7 @@ public interface ISysPositionService extends IService { /** * 通过code查询 + * * @param code 职务编码 * @return SysPosition */ @@ -22,6 +23,7 @@ public interface ISysPositionService extends IService { /** * 通过用户id获取职位名称列表 + * * @param userId * @return */ @@ -29,6 +31,7 @@ public interface ISysPositionService extends IService { /** * 获取职位名称 + * * @param postList * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRolePermissionService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRolePermissionService.java index 80d91a0..b04aacd 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRolePermissionService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRolePermissionService.java @@ -1,7 +1,7 @@ package org.jeecg.modules.system.service; -import org.jeecg.modules.system.entity.SysRolePermission; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysRolePermission; /** *

@@ -12,20 +12,22 @@ import com.baomidou.mybatisplus.extension.service.IService; * @since 2018-12-21 */ public interface ISysRolePermissionService extends IService { - - /** - * 保存授权/先删后增 - * @param roleId - * @param permissionIds - */ - public void saveRolePermission(String roleId,String permissionIds); - - /** - * 保存授权 将上次的权限和这次作比较 差异处理提高效率 - * @param roleId - * @param permissionIds - * @param lastPermissionIds - */ - public void saveRolePermission(String roleId,String permissionIds,String lastPermissionIds); + + /** + * 保存授权/先删后增 + * + * @param roleId + * @param permissionIds + */ + public void saveRolePermission(String roleId, String permissionIds); + + /** + * 保存授权 将上次的权限和这次作比较 差异处理提高效率 + * + * @param roleId + * @param permissionIds + * @param lastPermissionIds + */ + public void saveRolePermission(String roleId, String permissionIds, String lastPermissionIds); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRoleService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRoleService.java index a8c15b4..cd63d9f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRoleService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysRoleService.java @@ -1,17 +1,13 @@ package org.jeecg.modules.system.service; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.apache.ibatis.annotations.Param; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.system.entity.SysRole; -import org.jeecg.modules.system.entity.SysUser; import org.jeecgframework.poi.excel.entity.ImportParams; import org.springframework.web.multipart.MultipartFile; -import java.util.List; - /** *

* 角色表 服务类 @@ -23,6 +19,7 @@ import java.util.List; public interface ISysRoleService extends IService { /** * 查询全部的角色(不做租户隔离) + * * @param page * @param role * @return @@ -36,7 +33,7 @@ public interface ISysRoleService extends IService { * @return */ SysRole getRoleNoTenant(@Param("roleCode") String roleCode); - + /** * 导入 excel ,检查 roleCode 的唯一性 * @@ -49,6 +46,7 @@ public interface ISysRoleService extends IService { /** * 删除角色 + * * @param roleid * @return */ @@ -56,6 +54,7 @@ public interface ISysRoleService extends IService { /** * 批量删除角色 + * * @param roleids * @return */ @@ -63,6 +62,7 @@ public interface ISysRoleService extends IService { /** * 根据角色id和当前租户判断当前角色是否存在这个租户中 + * * @param id * @return */ @@ -70,7 +70,7 @@ public interface ISysRoleService extends IService { /** * 验证是否为admin角色 - * + * * @param ids */ void checkAdminRoleRejectDel(String ids); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantPackService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantPackService.java index 057a729..98a0061 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantPackService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantPackService.java @@ -1,7 +1,7 @@ package org.jeecg.modules.system.service; -import org.jeecg.modules.system.entity.SysTenantPack; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysTenantPack; import org.jeecg.modules.system.entity.SysTenantPackUser; import java.util.List; @@ -9,19 +9,21 @@ import java.util.List; /** * @Description: 租户产品包 * @Author: jeecg-boot - * @Date: 2022-12-31 + * @Date: 2022-12-31 * @Version: V1.0 */ public interface ISysTenantPackService extends IService { /** * 新增产品包并将菜单插入关系表 + * * @param sysTenantPack */ void addPackPermission(SysTenantPack sysTenantPack); /** * 设置菜单id + * * @param records * @return */ @@ -29,18 +31,21 @@ public interface ISysTenantPackService extends IService { /** * 编辑产品包并将菜单插入关系表 + * * @param sysTenantPack */ void editPackPermission(SysTenantPack sysTenantPack); /** * 删除租户产品包 + * * @param ids */ void deleteTenantPack(String ids); /** * 退出租户 + * * @param tenantId * @param s */ @@ -48,12 +53,14 @@ public interface ISysTenantPackService extends IService { /** * 创建租户的时候默认创建3个 产品包 + * * @param tenantId */ void addDefaultTenantPack(Integer tenantId); /** * 保存产品包 + * * @param sysTenantPack */ String saveOne(SysTenantPack sysTenantPack); @@ -61,20 +68,23 @@ public interface ISysTenantPackService extends IService { /** * 保存产品包和人员的关系 + * * @param sysTenantPackUser */ void savePackUser(SysTenantPackUser sysTenantPackUser); /** * 根据租户ID和编码查询 + * * @param tenantId * @param packCode * @return */ - SysTenantPack getSysTenantPack(Integer tenantId ,String packCode); - + SysTenantPack getSysTenantPack(Integer tenantId, String packCode); + /** * 添加由管理员创建的默认产品包 + * * @param id */ void addTenantDefaultPack(Integer id); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java index 035c69f..0fb87f7 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysTenantService.java @@ -47,6 +47,7 @@ public interface ISysTenantService extends IService { /** * 邀请用户加入租户,通过手机号 + * * @param ids * @param phone */ @@ -54,6 +55,7 @@ public interface ISysTenantService extends IService { /** * 请离用户(租户) + * * @param userIds * @param tenantId */ @@ -61,6 +63,7 @@ public interface ISysTenantService extends IService { /** * 添加租户,并将创建的用户加入关系表 + * * @param sysTenant * @param userId */ @@ -68,12 +71,14 @@ public interface ISysTenantService extends IService { /** * 保存租户 + * * @param sysTenant */ void saveTenant(SysTenant sysTenant); /** * 通过门牌号加入租户 + * * @param sysTenant * @param userId */ @@ -81,7 +86,7 @@ public interface ISysTenantService extends IService { /** * 统计一个人创建了多少个租户 - * + * * @param userId * @return */ @@ -89,6 +94,7 @@ public interface ISysTenantService extends IService { /** * 获取租户回收站的数据 + * * @param page * @param sysTenant * @return @@ -97,18 +103,21 @@ public interface ISysTenantService extends IService { /** * 彻底删除租户 + * * @param ids */ void deleteTenantLogic(String ids); /** * 还原租户 + * * @param ids */ void revertTenantLogic(String ids); /** * 退出租户 + * * @param userId * @param userId * @param username @@ -117,6 +126,7 @@ public interface ISysTenantService extends IService { /** * 变更租户拥有者 + * * @param userId * @param tenantId */ @@ -124,6 +134,7 @@ public interface ISysTenantService extends IService { /** * 邀请用户到租户。通过手机号匹配 + * * @param phone * @param departId * @return @@ -132,6 +143,7 @@ public interface ISysTenantService extends IService { /** * 进入应用组织页面 查询用户是否有 超级管理员的权限 + * * @param tenantId * @return */ @@ -140,6 +152,7 @@ public interface ISysTenantService extends IService { /** * 获取 租户产品包-3个默认admin的人员数量 + * * @param tenantId * @return */ @@ -147,6 +160,7 @@ public interface ISysTenantService extends IService { /** * 查询租户产品包信息 + * * @param model * @return */ @@ -154,18 +168,21 @@ public interface ISysTenantService extends IService { /** * 添加多个用户和产品包的关系数据 + * * @param sysTenantPackUser */ void addBatchTenantPackUser(SysTenantPackUser sysTenantPackUser); /** * 添加用户和产品包的关系数据 带日志记录的 + * * @param sysTenantPackUser */ void addTenantPackUser(SysTenantPackUser sysTenantPackUser); /** * 移除用户和产品包的关系数据 带日志记录的 + * * @param sysTenantPackUser */ void deleteTenantPackUser(SysTenantPackUser sysTenantPackUser); @@ -178,24 +195,28 @@ public interface ISysTenantService extends IService { /** * 个人 申请成为管理员 + * * @param sysTenantPackUser */ void doApplyTenantPackUser(SysTenantPackUser sysTenantPackUser); /** * 申请通过 成为管理员 + * * @param sysTenantPackUser */ void passApply(SysTenantPackUser sysTenantPackUser); /** * 拒绝申请 成为管理员 + * * @param sysTenantPackUser */ void deleteApply(SysTenantPackUser sysTenantPackUser); /** * 产品包用户列表 + * * @param tenantId * @param packId * @param status @@ -206,21 +227,22 @@ public interface ISysTenantService extends IService { /** * 查看是否已经申请过了管理员 + * * @return */ Long getApplySuperAdminCount(); /** * 发送同意或者拒绝消息 - * - * @param user - * @param content + * + * @param user + * @param content */ void sendMsgForAgreeAndRefuseJoin(SysUser user, String content); /** * 根据密码删除当前用户 - * + * * @param sysUser * @param tenantId */ @@ -228,6 +250,7 @@ public interface ISysTenantService extends IService { /** * 根据用户id获取租户信息 + * * @param userId * @return */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysThirdAccountService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysThirdAccountService.java index 86a74cb..df00e19 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysThirdAccountService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysThirdAccountService.java @@ -10,20 +10,22 @@ import java.util.List; /** * @Description: 第三方登录账号表 * @Author: jeecg-boot - * @Date: 2020-11-17 + * @Date: 2020-11-17 * @Version: V1.0 */ public interface ISysThirdAccountService extends IService { /** * 更新第三方账户信息 - * @param sysUser SysUser对象 + * + * @param sysUser SysUser对象 * @param thirdUserUuid 第三方id */ - void updateThirdUserId(SysUser sysUser,String thirdUserUuid); + void updateThirdUserId(SysUser sysUser, String thirdUserUuid); /** * 创建第三方用户 - * @param phone 手机号 + * + * @param phone 手机号 * @param thirdUserUuid 第三方id * @return SysUser */ @@ -31,6 +33,7 @@ public interface ISysThirdAccountService extends IService { /** * 根据本地userId查询数据 + * * @param sysUserId 用户id * @param thirdType 第三方登录类型 * @return SysThirdAccount @@ -39,8 +42,9 @@ public interface ISysThirdAccountService extends IService { /** * 根据第三方userId查询数据 + * * @param thirdUserId 第三方id - * @param thirdType 第三方登录类型 + * @param thirdType 第三方登录类型 * @return SysThirdAccount */ SysThirdAccount getOneByThirdUserId(String thirdUserId, String thirdType); @@ -65,6 +69,7 @@ public interface ISysThirdAccountService extends IService { /** * 绑定第三方账号(登录后根据用户id绑定第三方账号) + * * @param sysThirdAccount */ SysThirdAccount bindThirdAppAccountByUserId(SysThirdAccount sysThirdAccount); @@ -72,11 +77,12 @@ public interface ISysThirdAccountService extends IService { /** * 根据第三方 UUID和第三方类别获取第三方用户数据 + * * @param unionid * @param thirdType * @param tenantId * @param thirdUserId * @return */ - SysThirdAccount getOneByUuidAndThirdType(String unionid, String thirdType,Integer tenantId,String thirdUserId); + SysThirdAccount getOneByUuidAndThirdType(String unionid, String thirdType, Integer tenantId, String thirdUserId); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysThirdAppConfigService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysThirdAppConfigService.java index b35a18a..7076a2e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysThirdAppConfigService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysThirdAppConfigService.java @@ -8,13 +8,14 @@ import java.util.List; /** * @Description: 第三方配置表 * @Author: jeecg-boot - * @Date: 2023-02-03 + * @Date: 2023-02-03 * @Version: V1.0 */ -public interface ISysThirdAppConfigService extends IService{ +public interface ISysThirdAppConfigService extends IService { /** * 根据租户id获取钉钉/企业微信配置 + * * @param tenantId * @return */ @@ -22,6 +23,7 @@ public interface ISysThirdAppConfigService extends IService{ /** * 根据租户id和第三方类别获取第三方配置 + * * @param tenantId * @param thirdType * @return @@ -30,6 +32,7 @@ public interface ISysThirdAppConfigService extends IService{ /** * 根据应用key获取第三方表配置 + * * @param clientId */ List getThirdAppConfigByClientId(String clientId); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserAgentService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserAgentService.java index 10e2e82..0c2c98f 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserAgentService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserAgentService.java @@ -1,12 +1,12 @@ package org.jeecg.modules.system.service; -import org.jeecg.modules.system.entity.SysUserAgent; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysUserAgent; /** * @Description: 用户代理人设置 * @Author: jeecg-boot - * @Date: 2019-04-17 + * @Date: 2019-04-17 * @Version: V1.0 */ public interface ISysUserAgentService extends IService { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserDepartService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserDepartService.java index 197cd48..340b35d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserDepartService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserDepartService.java @@ -1,64 +1,68 @@ package org.jeecg.modules.system.service; -import java.util.List; - import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUserDepart; import org.jeecg.modules.system.model.DepartIdModel; - -import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; /** *

* SysUserDpeart用户组织机构service *

- * @Author ZhiLin * + * @Author ZhiLin */ public interface ISysUserDepartService extends IService { - - /** - * 根据指定用户id查询部门信息 - * @param userId - * @return - */ - List queryDepartIdsOfUser(String userId); - - /** - * 根据部门id查询用户信息 - * @param depId - * @return - */ - List queryUserByDepId(String depId); - /** - * 根据部门code,查询当前部门和下级部门的用户信息 - * @param depCode 部门code + /** + * 根据指定用户id查询部门信息 + * + * @param userId + * @return + */ + List queryDepartIdsOfUser(String userId); + + + /** + * 根据部门id查询用户信息 + * + * @param depId + * @return + */ + List queryUserByDepId(String depId); + + /** + * 根据部门code,查询当前部门和下级部门的用户信息 + * + * @param depCode 部门code * @param realname 真实姓名 * @return List - */ - List queryUserByDepCode(String depCode,String realname); + */ + List queryUserByDepCode(String depCode, String realname); - /** - * 用户组件数据查询 - * @param departId - * @param username - * @param pageSize - * @param pageNo + /** + * 用户组件数据查询 + * + * @param departId + * @param username + * @param pageSize + * @param pageNo * @param realname * @param id * @param isMultiTranslate 是否多字段翻译 - * @return - */ - IPage queryDepartUserPageList(String departId, String username, String realname, int pageSize, int pageNo,String id,String isMultiTranslate); + * @return + */ + IPage queryDepartUserPageList(String departId, String username, String realname, int pageSize, int pageNo, String id, String isMultiTranslate); /** * 获取用户信息 - * @param tenantId + * + * @param tenantId * @param departId * @param keyword * @param pageSize @@ -67,23 +71,25 @@ public interface ISysUserDepartService extends IService { */ IPage getUserInformation(Integer tenantId, String departId, String keyword, Integer pageSize, Integer pageNo); - /** - * 获取用户信息 - * @param tenantId - * @param departId - * @param roleId - * @param keyword - * @param pageSize - * @param pageNo - * @return - */ - IPage getUserInformation(Integer tenantId,String departId,String roleId, String keyword, Integer pageSize, Integer pageNo, String excludeUserIdList); + /** + * 获取用户信息 + * + * @param tenantId + * @param departId + * @param roleId + * @param keyword + * @param pageSize + * @param pageNo + * @return + */ + IPage getUserInformation(Integer tenantId, String departId, String roleId, String keyword, Integer pageSize, Integer pageNo, String excludeUserIdList); - /** - * 通过部门id和租户id获取多个用户 - * @param departId - * @param tenantId - * @return - */ - List getUsersByDepartTenantId(String departId,Integer tenantId); + /** + * 通过部门id和租户id获取多个用户 + * + * @param departId + * @param tenantId + * @return + */ + List getUsersByDepartTenantId(String departId, Integer tenantId); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserPositionService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserPositionService.java index d4e209f..c0c0cad 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserPositionService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserPositionService.java @@ -2,19 +2,21 @@ package org.jeecg.modules.system.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUserPosition; -import com.baomidou.mybatisplus.extension.service.IService; + /** * @Description: 用户职位关系表 * @Author: jeecg-boot - * @Date: 2023-02-14 + * @Date: 2023-02-14 * @Version: V1.0 */ public interface ISysUserPositionService extends IService { /** * 获取职位用户列表 + * * @param page * @param positionId * @return @@ -23,6 +25,7 @@ public interface ISysUserPositionService extends IService { /** * 添加成员到用户职位关系表 + * * @param userIds * @param positionId */ @@ -30,12 +33,14 @@ public interface ISysUserPositionService extends IService { /** * 通过职位id删除用户职位关系表 + * * @param positionId */ void removeByPositionId(String positionId); /** * 移除成员 + * * @param userIds * @param positionId */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java index e031449..6613936 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserRoleService.java @@ -1,10 +1,7 @@ package org.jeecg.modules.system.service; -import java.util.Map; - -import org.jeecg.modules.system.entity.SysUserRole; - import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.system.entity.SysUserRole; /** *

diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java index 373d140..6023f7a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import jakarta.servlet.http.HttpServletRequest; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.system.vo.SysUserCacheInfo; @@ -17,7 +18,6 @@ import org.jeecg.modules.system.vo.lowapp.UpdateDepartInfo; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.servlet.ModelAndView; -import jakarta.servlet.http.HttpServletRequest; import java.util.Collection; import java.util.List; import java.util.Map; @@ -33,120 +33,130 @@ import java.util.Set; */ public interface ISysUserService extends IService { - /** - * 查询用户数据列表 - * - * @param req - * @param queryWrapper - * @param pageSize - * @param pageNo - * @return - */ - Result> queryPageList(HttpServletRequest req, QueryWrapper queryWrapper, Integer pageSize, Integer pageNo); - - /** - * 重置密码 - * - * @param username - * @param oldpassword - * @param newpassword - * @param confirmpassword - * @return - */ - public Result resetPassword(String username, String oldpassword, String newpassword, String confirmpassword); + /** + * 查询用户数据列表 + * + * @param req + * @param queryWrapper + * @param pageSize + * @param pageNo + * @return + */ + Result> queryPageList(HttpServletRequest req, QueryWrapper queryWrapper, Integer pageSize, Integer pageNo); - /** - * 修改密码 - * - * @param sysUser - * @return - */ - public Result changePassword(SysUser sysUser); + /** + * 重置密码 + * + * @param username + * @param oldpassword + * @param newpassword + * @param confirmpassword + * @return + */ + public Result resetPassword(String username, String oldpassword, String newpassword, String confirmpassword); - /** - * 删除用户 - * @param userId - * @return - */ - public boolean deleteUser(String userId); + /** + * 修改密码 + * + * @param sysUser + * @return + */ + public Result changePassword(SysUser sysUser); - /** - * 批量删除用户 - * @param userIds - * @return - */ - public boolean deleteBatchUsers(String userIds); + /** + * 删除用户 + * + * @param userId + * @return + */ + public boolean deleteUser(String userId); + + /** + * 批量删除用户 + * + * @param userIds + * @return + */ + public boolean deleteBatchUsers(String userIds); /** * 根据用户名查询 + * * @param username 用户名 * @return SysUser */ - public SysUser getUserByName(String username); - - /** - * 添加用户和用户角色关系 - * @param user - * @param roles - */ - public void addUserWithRole(SysUser user, String roles); - - - /** - * 修改用户和用户角色关系 - * @param user - * @param roles - */ - public void editUserWithRole(SysUser user, String roles); + public SysUser getUserByName(String username); - /** - * 获取用户的授权角色 - * @param username - * @return - */ - public List getRole(String username); + /** + * 添加用户和用户角色关系 + * + * @param user + * @param roles + */ + public void addUserWithRole(SysUser user, String roles); - /** - * 获取根据登录用户的角色获取动态首页 - * - * @param username - * @param version 前端UI版本 - * @return - */ - public SysRoleIndex getDynamicIndexByUserRole(String username, String version); - - /** - * 查询用户信息包括 部门信息 - * @param username - * @return - */ - @Deprecated - public SysUserCacheInfo getCacheUser(String username); - /** - * 根据部门Id查询 - * @param page + /** + * 修改用户和用户角色关系 + * + * @param user + * @param roles + */ + public void editUserWithRole(SysUser user, String roles); + + /** + * 获取用户的授权角色 + * + * @param username + * @return + */ + public List getRole(String username); + + /** + * 获取根据登录用户的角色获取动态首页 + * + * @param username + * @param version 前端UI版本 + * @return + */ + public SysRoleIndex getDynamicIndexByUserRole(String username, String version); + + /** + * 查询用户信息包括 部门信息 + * + * @param username + * @return + */ + @Deprecated + public SysUserCacheInfo getCacheUser(String username); + + /** + * 根据部门Id查询 + * + * @param page * @param departId 部门id * @param username 用户账户名称 - * @return - */ - public IPage getUserByDepId(Page page, String departId, String username); + * @return + */ + public IPage getUserByDepId(Page page, String departId, String username); - /** - * 根据部门Ids查询 - * @param page - * @param departIds 部门id集合 - * @param username 用户账户名称 - * @return - */ - public IPage getUserByDepIds(Page page, List departIds, String username); + /** + * 根据部门Ids查询 + * + * @param page + * @param departIds 部门id集合 + * @param username 用户账户名称 + * @return + */ + public IPage getUserByDepIds(Page page, List departIds, String username); - /** - * 根据 userIds查询,查询用户所属部门的名称(多个部门名逗号隔开) - * @param userIds - * @return - */ - public Map getDepNamesByUserIds(List userIds); + /** + * 根据 userIds查询,查询用户所属部门的名称(多个部门名逗号隔开) + * + * @param userIds + * @return + */ + public Map getDepNamesByUserIds(List userIds); /** * 根据部门 Id 和 QueryWrapper 查询 @@ -158,288 +168,321 @@ public interface ISysUserService extends IService { */ //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 方法没有使用,注掉 // public IPage getUserByDepartIdAndQueryWrapper(Page page, String departId, QueryWrapper queryWrapper); - //update-end-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 方法没有使用,注掉 + //update-end-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 方法没有使用,注掉 - /** - * 根据 orgCode 查询用户,包括子部门下的用户 - * - * @param orgCode - * @param userParams 用户查询条件,可为空 - * @param page 分页参数 - * @return - */ - IPage queryUserByOrgCode(String orgCode, SysUser userParams, IPage page); + /** + * 根据 orgCode 查询用户,包括子部门下的用户 + * + * @param orgCode + * @param userParams 用户查询条件,可为空 + * @param page 分页参数 + * @return + */ + IPage queryUserByOrgCode(String orgCode, SysUser userParams, IPage page); - /** - * 根据角色Id查询 - * @param page - * @param roleId 角色id + /** + * 根据角色Id查询 + * + * @param page + * @param roleId 角色id * @param username 用户账户名称 - * @return - */ - public IPage getUserByRoleId(Page page, String roleId, String username,String roleCode); + * @return + */ + public IPage getUserByRoleId(Page page, String roleId, String username, String roleCode); - /** - * 通过用户名获取用户角色集合 - * - * @param username 用户名 - * @return 角色集合 - */ - Set getUserRolesSet(String username); - - /** - * 通过用户名获取用户角色集合 - * - * @param userId 用户id - * @return 角色集合 - */ - Set getUserRoleSetById(String userId); + /** + * 通过用户名获取用户角色集合 + * + * @param username 用户名 + * @return 角色集合 + */ + Set getUserRolesSet(String username); - /** - * 通过用户名获取用户权限集合 - * - * @param userId 用户id - * @return 权限集合 - */ - Set getUserPermissionsSet(String userId); - - /** - * 根据用户名设置部门ID - * @param username - * @param orgCode - */ - void updateUserDepart(String username,String orgCode,Integer loginTenantId); - - /** - * 根据手机号获取用户名和密码 + /** + * 通过用户名获取用户角色集合 + * + * @param userId 用户id + * @return 角色集合 + */ + Set getUserRoleSetById(String userId); + + /** + * 通过用户名获取用户权限集合 + * + * @param userId 用户id + * @return 权限集合 + */ + Set getUserPermissionsSet(String userId); + + /** + * 根据用户名设置部门ID + * + * @param username + * @param orgCode + */ + void updateUserDepart(String username, String orgCode, Integer loginTenantId); + + /** + * 根据手机号获取用户名和密码 + * * @param phone 手机号 * @return SysUser - */ - public SysUser getUserByPhone(String phone); + */ + public SysUser getUserByPhone(String phone); - /** - * 根据邮箱获取用户 + /** + * 根据邮箱获取用户 + * * @param email 邮箱 * @return SysUser */ - public SysUser getUserByEmail(String email); + public SysUser getUserByEmail(String email); - /** - * 添加用户和用户部门关系 - * @param user - * @param selectedParts - */ - void addUserWithDepart(SysUser user, String selectedParts); + /** + * 添加用户和用户部门关系 + * + * @param user + * @param selectedParts + */ + void addUserWithDepart(SysUser user, String selectedParts); - /** - * 编辑用户和用户部门关系 - * @param user - * @param departs - */ - void editUserWithDepart(SysUser user, String departs); - - /** - * 校验用户是否有效 - * @param sysUser - * @return - */ - Result checkUserIsEffective(SysUser sysUser); + /** + * 编辑用户和用户部门关系 + * + * @param user + * @param departs + */ + void editUserWithDepart(SysUser user, String departs); - /** - * 查询被逻辑删除的用户 + /** + * 校验用户是否有效 + * + * @param sysUser + * @return + */ + Result checkUserIsEffective(SysUser sysUser); + + /** + * 查询被逻辑删除的用户 + * * @return List - */ - List queryLogicDeleted(); + */ + List queryLogicDeleted(); - /** - * 查询被逻辑删除的用户(可拼装查询条件) + /** + * 查询被逻辑删除的用户(可拼装查询条件) + * * @param wrapper * @return List - */ - List queryLogicDeleted(LambdaQueryWrapper wrapper); + */ + List queryLogicDeleted(LambdaQueryWrapper wrapper); - /** - * 还原被逻辑删除的用户 - * @param userIds 存放用户id集合 + /** + * 还原被逻辑删除的用户 + * + * @param userIds 存放用户id集合 * @param updateEntity * @return boolean - */ - boolean revertLogicDeleted(List userIds, SysUser updateEntity); + */ + boolean revertLogicDeleted(List userIds, SysUser updateEntity); - /** - * 彻底删除被逻辑删除的用户 + /** + * 彻底删除被逻辑删除的用户 + * * @param userIds 存放用户id集合 * @return boolean - */ - boolean removeLogicDeleted(List userIds); + */ + boolean removeLogicDeleted(List userIds); /** * 更新手机号、邮箱空字符串为 null + * * @return boolean */ @Transactional(rollbackFor = Exception.class) boolean updateNullPhoneEmail(); - /** - * 保存第三方用户信息 - * @param sysUser - */ - void saveThirdUser(SysUser sysUser); + /** + * 保存第三方用户信息 + * + * @param sysUser + */ + void saveThirdUser(SysUser sysUser); - /** - * 根据部门Ids查询 - * @param departIds 部门id集合 - * @param username 用户账户名称 - * @return - */ - List queryByDepIds(List departIds, String username); + /** + * 根据部门Ids查询 + * + * @param departIds 部门id集合 + * @param username 用户账户名称 + * @return + */ + List queryByDepIds(List departIds, String username); - /** - * 保存用户 - * @param user 用户 - * @param selectedRoles 选择的角色id,多个以逗号隔开 - * @param selectedDeparts 选择的部门id,多个以逗号隔开 - * @param relTenantIds 多个租户id - */ - void saveUser(SysUser user, String selectedRoles, String selectedDeparts, String relTenantIds); + /** + * 保存用户 + * + * @param user 用户 + * @param selectedRoles 选择的角色id,多个以逗号隔开 + * @param selectedDeparts 选择的部门id,多个以逗号隔开 + * @param relTenantIds 多个租户id + */ + void saveUser(SysUser user, String selectedRoles, String selectedDeparts, String relTenantIds); - /** - * 编辑用户 - * @param user 用户 - * @param roles 选择的角色id,多个以逗号隔开 - * @param departs 选择的部门id,多个以逗号隔开 - * @param relTenantIds 多个租户id - */ - void editUser(SysUser user, String roles, String departs, String relTenantIds); + /** + * 编辑用户 + * + * @param user 用户 + * @param roles 选择的角色id,多个以逗号隔开 + * @param departs 选择的部门id,多个以逗号隔开 + * @param relTenantIds 多个租户id + */ + void editUser(SysUser user, String roles, String departs, String relTenantIds); - /** + /** * userId转为username + * * @param userIdList * @return List */ - List userIdToUsername(Collection userIdList); + List userIdToUsername(Collection userIdList); - /** - * 获取用户信息 字段信息是加密后的 【加密用户信息】 - * @param username - * @return - */ - LoginUser getEncodeUserInfo(String username); + /** + * 获取用户信息 字段信息是加密后的 【加密用户信息】 + * + * @param username + * @return + */ + LoginUser getEncodeUserInfo(String username); /** * 用户离职 + * * @param username */ void userQuit(String username); /** * 获取离职人员列表 - * @param tenantId 租户id + * + * @param tenantId 租户id * @return */ List getQuitList(Integer tenantId); /** * 更新刪除状态和离职状态 - * @param userIds 存放用户id集合 + * + * @param userIds 存放用户id集合 * @param sysUser * @return boolean */ void updateStatusAndFlag(List userIds, SysUser sysUser); - /** - * 设置登录租户 - * @param sysUser - * @return - */ - Result setLoginTenant(SysUser sysUser, JSONObject obj, String username, Result result); + /** + * 设置登录租户 + * + * @param sysUser + * @return + */ + Result setLoginTenant(SysUser sysUser, JSONObject obj, String username, Result result); - //--- author:taoyan date:20221231 for: QQYUN-3515【应用】应用下的组织机构管理功能,细节实现 --- - /** - * 批量编辑用户信息 - * @param json - */ - void batchEditUsers(JSONObject json); + //--- author:taoyan date:20221231 for: QQYUN-3515【应用】应用下的组织机构管理功能,细节实现 --- - /** - * 根据关键词查询用户和部门 - * @param keyword - * @return - */ - DepartAndUserInfo searchByKeyword(String keyword); + /** + * 批量编辑用户信息 + * + * @param json + */ + void batchEditUsers(JSONObject json); - /** - * 查询 部门修改的信息 - * @param departId - * @return - */ - UpdateDepartInfo getUpdateDepartInfo(String departId); + /** + * 根据关键词查询用户和部门 + * + * @param keyword + * @return + */ + DepartAndUserInfo searchByKeyword(String keyword); - /** - * 修改部门相关信息 - * @param updateDepartInfo - */ - void doUpdateDepartInfo(UpdateDepartInfo updateDepartInfo); + /** + * 查询 部门修改的信息 + * + * @param departId + * @return + */ + UpdateDepartInfo getUpdateDepartInfo(String departId); - /** - * 设置负责人 取消负责人 - * @param json - */ - void changeDepartChargePerson(JSONObject json); - //--- author:taoyan date:20221231 for: QQYUN-3515【应用】应用下的组织机构管理功能,细节实现 --- - - /** - * 编辑租户用户 - * @param sysUser - * @param tenantId - * @param departs - */ - void editTenantUser(SysUser sysUser, String tenantId, String departs, String roles); + /** + * 修改部门相关信息 + * + * @param updateDepartInfo + */ + void doUpdateDepartInfo(UpdateDepartInfo updateDepartInfo); - /** - * 修改用户账号状态 - * @param id 账号id - * @param status 账号状态 - */ - void updateStatus(String id, String status); + /** + * 设置负责人 取消负责人 + * + * @param json + */ + void changeDepartChargePerson(JSONObject json); + //--- author:taoyan date:20221231 for: QQYUN-3515【应用】应用下的组织机构管理功能,细节实现 --- - /** - * 导出应用下的用户Excel - * @param request - * @return - */ - ModelAndView exportAppUser(HttpServletRequest request); + /** + * 编辑租户用户 + * + * @param sysUser + * @param tenantId + * @param departs + */ + void editTenantUser(SysUser sysUser, String tenantId, String departs, String roles); - /** - * 导入应用下的用户 - * @param request - * @return - */ - Result importAppUser(HttpServletRequest request); + /** + * 修改用户账号状态 + * + * @param id 账号id + * @param status 账号状态 + */ + void updateStatus(String id, String status); - /** - * 验证用户是否为管理员 - * @param ids - */ - void checkUserAdminRejectDel(String ids); + /** + * 导出应用下的用户Excel + * + * @param request + * @return + */ + ModelAndView exportAppUser(HttpServletRequest request); - /** - * 修改手机号 - * - * @param json - * @param username - */ + /** + * 导入应用下的用户 + * + * @param request + * @return + */ + Result importAppUser(HttpServletRequest request); + + /** + * 验证用户是否为管理员 + * + * @param ids + */ + void checkUserAdminRejectDel(String ids); + + /** + * 修改手机号 + * + * @param json + * @param username + */ void changePhone(JSONObject json, String username); - /** - * 发送短信验证码 - * - * @param jsonObject - * @param username 用户名 - * @param ipAddress ip地址 - */ - void sendChangePhoneSms(JSONObject jsonObject, String username, String ipAddress); + /** + * 发送短信验证码 + * + * @param jsonObject + * @param username 用户名 + * @param ipAddress ip地址 + */ + void sendChangePhoneSms(JSONObject jsonObject, String username, String ipAddress); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserTenantService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserTenantService.java index 549cd74..865c22a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserTenantService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserTenantService.java @@ -2,10 +2,10 @@ package org.jeecg.modules.system.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.system.entity.SysTenant; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUserTenant; -import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.system.vo.SysUserTenantVo; import java.util.List; @@ -13,13 +13,14 @@ import java.util.List; /** * @Description: sys_user_tenant_relation * @Author: jeecg-boot - * @Date: 2022-12-23 + * @Date: 2022-12-23 * @Version: V1.0 */ public interface ISysUserTenantService extends IService { /** * 通过租户id获取数据 + * * @param page * @param userTenantId * @param user @@ -29,6 +30,7 @@ public interface ISysUserTenantService extends IService { /** * 设置租户id + * * @param records * @return */ @@ -36,6 +38,7 @@ public interface ISysUserTenantService extends IService { /** * 获取租户id获取用户ids + * * @param tenantId * @return */ @@ -43,21 +46,24 @@ public interface ISysUserTenantService extends IService { /** * 通过用户id获取租户ids + * * @param userId * @return */ List getTenantIdsByUserId(String userId); - + /** * 通过用户id获取租户列表 + * * @param userId * @param userTenantStatus * @return */ - List getTenantListByUserId(String userId, List userTenantStatus); - + List getTenantListByUserId(String userId, List userTenantStatus); + /** * 更新用户租户状态 + * * @param id * @param tenantId * @param userTenantStatus @@ -66,6 +72,7 @@ public interface ISysUserTenantService extends IService { /** * 联查用户和租户审核状态 + * * @param page * @param status 租户用户状态,默认为1正常 * @param user @@ -75,6 +82,7 @@ public interface ISysUserTenantService extends IService { /** * 取消离职 + * * @param userIds * @param tenantId */ @@ -82,6 +90,7 @@ public interface ISysUserTenantService extends IService { /** * 验证用户是否已存在 + * * @param userId * @param tenantId * @return @@ -97,10 +106,11 @@ public interface ISysUserTenantService extends IService { * @param sysUserTenantVo * @return */ - IPage getTenantPageListByUserId(Page page, String userId, List userTenantStatus,SysUserTenantVo sysUserTenantVo); + IPage getTenantPageListByUserId(Page page, String userId, List userTenantStatus, SysUserTenantVo sysUserTenantVo); /** * 同意加入租户 + * * @param userId * @param tenantId */ @@ -108,6 +118,7 @@ public interface ISysUserTenantService extends IService { /** * 拒绝加入租户 + * * @param userId * @param tenantId */ @@ -115,6 +126,7 @@ public interface ISysUserTenantService extends IService { /** * 根据用户id和租户id获取用户租户中间表信息 + * * @param userId * @param tenantId * @return @@ -123,6 +135,7 @@ public interface ISysUserTenantService extends IService { /** * 获取租户下的成员数量 + * * @param tenantId * @param tenantStatus * @return diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/IThirdAppService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/IThirdAppService.java index a51eca2..06ae573 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/IThirdAppService.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/IThirdAppService.java @@ -7,12 +7,14 @@ import java.util.List; /** * 第三方App对接 + * * @author: jeecg-boot */ public interface IThirdAppService { /** * 获取AccessToken + * * @return String */ String getAccessToken(); @@ -23,6 +25,7 @@ public interface IThirdAppService { * 同步逻辑:
* 1. 先判断是否同步过,有则修改,无则创建;
* 2. 本地没有但第三方App里有则删除第三方App里的。 + * * @param ids * @return 成功返回true */ @@ -45,8 +48,9 @@ public interface IThirdAppService { * 同步逻辑:先判断是否同步过,有则修改、无则创建
* 注意:同步人员的状态,比如离职、禁用、逻辑删除等。 * (特殊点:1、目前逻辑特意做的不删除用户,防止企业微信提前上线,用户已经存在,但是平台无此用户。 - * 企业微信支持禁用账号;钉钉不支持 - * 2、企业微信里面是手机号激活,只能用户自己改,不允许通过接口改) + * 企业微信支持禁用账号;钉钉不支持 + * 2、企业微信里面是手机号激活,只能用户自己改,不允许通过接口改) + * * @param ids * @return 成功返回空数组,失败返回错误信息 */ @@ -81,6 +85,7 @@ public interface IThirdAppService { /** * 发送消息 + * * @param message * @return boolean */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ImportFileServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ImportFileServiceImpl.java index fde2817..f2dd2e2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ImportFileServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ImportFileServiceImpl.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; /** * excel导入 实现类 + * * @author: jeecg-boot */ @Slf4j @@ -17,7 +18,7 @@ public class ImportFileServiceImpl implements ImportFileServiceI { @Value("${jeecg.path.upload}") private String upLoadPath; - @Value(value="${jeecg.uploadType}") + @Value(value = "${jeecg.uploadType}") private String uploadType; @Override diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementSendServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementSendServiceImpl.java index 7e84e71..a3b11b8 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementSendServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementSendServiceImpl.java @@ -1,39 +1,35 @@ package org.jeecg.modules.system.service.impl; -import java.util.List; - +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; - import org.jeecg.modules.system.entity.SysAnnouncementSend; import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper; import org.jeecg.modules.system.model.AnnouncementSendModel; import org.jeecg.modules.system.service.ISysAnnouncementSendService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 用户通告阅读标记表 * @Author: jeecg-boot - * @Date: 2019-02-21 + * @Date: 2019-02-21 * @Version: V1.0 */ @Service public class SysAnnouncementSendServiceImpl extends ServiceImpl implements ISysAnnouncementSendService { - @Resource - private SysAnnouncementSendMapper sysAnnouncementSendMapper; - - @Override - public Page getMyAnnouncementSendPage(Page page, - AnnouncementSendModel announcementSendModel) { - return page.setRecords(sysAnnouncementSendMapper.getMyAnnouncementSendList(page, announcementSendModel)); - } + @Resource + private SysAnnouncementSendMapper sysAnnouncementSendMapper; - @Override - public AnnouncementSendModel getOne(String sendId) { - return sysAnnouncementSendMapper.getOne(sendId); - } + @Override + public Page getMyAnnouncementSendPage(Page page, + AnnouncementSendModel announcementSendModel) { + return page.setRecords(sysAnnouncementSendMapper.getMyAnnouncementSendList(page, announcementSendModel)); + } + + @Override + public AnnouncementSendModel getOne(String sendId) { + return sysAnnouncementSendMapper.getOne(sendId); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java index c93b030..b8e20ed 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java @@ -3,12 +3,12 @@ package org.jeecg.modules.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.LoginUser; -import org.jeecg.common.util.DateRangeUtils; import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.mybatis.MybatisPlusSaasConfig; import org.jeecg.modules.system.entity.SysAnnouncement; @@ -23,7 +23,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import jakarta.annotation.Resource; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.SynchronousQueue; @@ -33,206 +32,208 @@ import java.util.concurrent.TimeUnit; /** * @Description: 系统通告表 * @Author: jeecg-boot - * @Date: 2019-01-02 + * @Date: 2019-01-02 * @Version: V1.0 */ @Service @Slf4j public class SysAnnouncementServiceImpl extends ServiceImpl implements ISysAnnouncementService { - /** - * 补数据改成后台模式 - */ - public static ExecutorService completeNoteThreadPool = new ThreadPoolExecutor(0, 1024, 60L, TimeUnit.SECONDS, new SynchronousQueue()); - - @Resource - private SysAnnouncementMapper sysAnnouncementMapper; - @Resource - private SysUserMapper sysUserMapper; - @Resource - private SysAnnouncementSendMapper sysAnnouncementSendMapper; - @Autowired - private ISysAnnouncementSendService sysAnnouncementSendService; - - @Transactional(rollbackFor = Exception.class) - @Override - public void saveAnnouncement(SysAnnouncement sysAnnouncement) { - if(sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) { - sysAnnouncementMapper.insert(sysAnnouncement); - }else { - // 1.插入通告表记录 - sysAnnouncementMapper.insert(sysAnnouncement); - // 2.插入用户通告阅读标记表记录 - String userId = sysAnnouncement.getUserIds(); + /** + * 补数据改成后台模式 + */ + public static ExecutorService completeNoteThreadPool = new ThreadPoolExecutor(0, 1024, 60L, TimeUnit.SECONDS, new SynchronousQueue()); + + @Resource + private SysAnnouncementMapper sysAnnouncementMapper; + @Resource + private SysUserMapper sysUserMapper; + @Resource + private SysAnnouncementSendMapper sysAnnouncementSendMapper; + @Autowired + private ISysAnnouncementSendService sysAnnouncementSendService; + + @Transactional(rollbackFor = Exception.class) + @Override + public void saveAnnouncement(SysAnnouncement sysAnnouncement) { + if (sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) { + sysAnnouncementMapper.insert(sysAnnouncement); + } else { + // 1.插入通告表记录 + sysAnnouncementMapper.insert(sysAnnouncement); + // 2.插入用户通告阅读标记表记录 + String userId = sysAnnouncement.getUserIds(); //update-begin-author:liusq---date:2023-10-31--for:[issues/5503]【公告】通知无法接收 - if(StringUtils.isNotBlank(userId) && userId.endsWith(",")){ - userId = userId.substring(0, (userId.length()-1)); - } - String[] userIds = userId.split(","); + if (StringUtils.isNotBlank(userId) && userId.endsWith(",")) { + userId = userId.substring(0, (userId.length() - 1)); + } + String[] userIds = userId.split(","); //update-end-author:liusq---date:2023-10-31--for:[issues/5503]【公告】通知无法接收 - String anntId = sysAnnouncement.getId(); - Date refDate = new Date(); - for(int i=0;i queryWrapper = new LambdaQueryWrapper(); - queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId); - queryWrapper.eq(SysAnnouncementSend::getUserId, userIds[i]); - List announcementSends=sysAnnouncementSendMapper.selectList(queryWrapper); - if(announcementSends.size()<=0) { - SysAnnouncementSend announcementSend = new SysAnnouncementSend(); - announcementSend.setAnntId(anntId); - announcementSend.setUserId(userIds[i]); - announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); - announcementSend.setReadTime(refDate); - sysAnnouncementSendMapper.insert(announcementSend); - } - } - // 3. 删除多余通知用户数据 - Collection delUserIds = Arrays.asList(userIds); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); - queryWrapper.notIn(SysAnnouncementSend::getUserId, delUserIds); - queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId); - sysAnnouncementSendMapper.delete(queryWrapper); - } - return true; - } + String anntId = sysAnnouncement.getId(); + Date refDate = new Date(); + for (int i = 0; i < userIds.length; i++) { + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + announcementSend.setAnntId(anntId); + announcementSend.setUserId(userIds[i]); + announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); + announcementSend.setReadTime(refDate); + sysAnnouncementSendMapper.insert(announcementSend); + } + } + } + + /** + * @功能:编辑消息信息 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public boolean upDateAnnouncement(SysAnnouncement sysAnnouncement) { + // 1.更新系统信息表数据 + sysAnnouncementMapper.updateById(sysAnnouncement); + String userId = sysAnnouncement.getUserIds(); + if (oConvertUtils.isNotEmpty(userId) && sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_UESR)) { + // 2.补充新的通知用户数据 + String[] userIds = userId.substring(0, (userId.length() - 1)).split(","); + String anntId = sysAnnouncement.getId(); + Date refDate = new Date(); + for (int i = 0; i < userIds.length; i++) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId); + queryWrapper.eq(SysAnnouncementSend::getUserId, userIds[i]); + List announcementSends = sysAnnouncementSendMapper.selectList(queryWrapper); + if (announcementSends.size() <= 0) { + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + announcementSend.setAnntId(anntId); + announcementSend.setUserId(userIds[i]); + announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); + announcementSend.setReadTime(refDate); + sysAnnouncementSendMapper.insert(announcementSend); + } + } + // 3. 删除多余通知用户数据 + Collection delUserIds = Arrays.asList(userIds); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.notIn(SysAnnouncementSend::getUserId, delUserIds); + queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId); + sysAnnouncementSendMapper.delete(queryWrapper); + } + return true; + } /** * 流程执行完成保存消息通知 - * @param title 标题 + * + * @param title 标题 * @param msgContent 信息内容 */ - @Override - public void saveSysAnnouncement(String title, String msgContent) { - SysAnnouncement announcement = new SysAnnouncement(); - announcement.setTitile(title); - announcement.setMsgContent(msgContent); - announcement.setSender("JEECG BOOT"); - announcement.setPriority(CommonConstant.PRIORITY_L); - announcement.setMsgType(CommonConstant.MSG_TYPE_ALL); - announcement.setSendStatus(CommonConstant.HAS_SEND); - announcement.setSendTime(new Date()); - announcement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); - sysAnnouncementMapper.insert(announcement); - } + @Override + public void saveSysAnnouncement(String title, String msgContent) { + SysAnnouncement announcement = new SysAnnouncement(); + announcement.setTitile(title); + announcement.setMsgContent(msgContent); + announcement.setSender("JEECG BOOT"); + announcement.setPriority(CommonConstant.PRIORITY_L); + announcement.setMsgType(CommonConstant.MSG_TYPE_ALL); + announcement.setSendStatus(CommonConstant.HAS_SEND); + announcement.setSendTime(new Date()); + announcement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + sysAnnouncementMapper.insert(announcement); + } - @Override - public Page querySysCementPageByUserId(Page page, String userId, String msgCategory, Integer tenantId, Date beginDate) { - if (page.getSize() == -1) { - return page.setRecords(sysAnnouncementMapper.querySysCementListByUserId(null, userId, msgCategory,tenantId,beginDate)); - } else { - return page.setRecords(sysAnnouncementMapper.querySysCementListByUserId(page, userId, msgCategory,tenantId,beginDate)); - } - } + @Override + public Page querySysCementPageByUserId(Page page, String userId, String msgCategory, Integer tenantId, Date beginDate) { + if (page.getSize() == -1) { + return page.setRecords(sysAnnouncementMapper.querySysCementListByUserId(null, userId, msgCategory, tenantId, beginDate)); + } else { + return page.setRecords(sysAnnouncementMapper.querySysCementListByUserId(page, userId, msgCategory, tenantId, beginDate)); + } + } - @Override - public Integer getUnreadMessageCountByUserId(String userId, Date beginDate) { - return sysAnnouncementMapper.getUnreadMessageCountByUserId(userId, beginDate); - } + @Override + public Integer getUnreadMessageCountByUserId(String userId, Date beginDate) { + return sysAnnouncementMapper.getUnreadMessageCountByUserId(userId, beginDate); + } - @Override - public void completeAnnouncementSendInfo() { - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String userId = sysUser.getId(); - List announcementIds = this.getNotSendedAnnouncementlist(userId); - List sysAnnouncementSendList = new ArrayList<>(); - if (!CollectionUtils.isEmpty(announcementIds)) { - for (String commentId : announcementIds) { - SysAnnouncementSend announcementSend = new SysAnnouncementSend(); - announcementSend.setAnntId(commentId); - announcementSend.setUserId(userId); - announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); - sysAnnouncementSendList.add(announcementSend); - } - } - if (!CollectionUtils.isEmpty(sysAnnouncementSendList)) { - sysAnnouncementSendService.saveBatch(sysAnnouncementSendList); - } - } + @Override + public void completeAnnouncementSendInfo() { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + List announcementIds = this.getNotSendedAnnouncementlist(userId); + List sysAnnouncementSendList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(announcementIds)) { + for (String commentId : announcementIds) { + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + announcementSend.setAnntId(commentId); + announcementSend.setUserId(userId); + announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); + sysAnnouncementSendList.add(announcementSend); + } + } + if (!CollectionUtils.isEmpty(sysAnnouncementSendList)) { + sysAnnouncementSendService.saveBatch(sysAnnouncementSendList); + } + } - @Override - public void batchInsertSysAnnouncementSend(String commentId, Integer tenantId) { - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && oConvertUtils.isNotEmpty(tenantId)) { - log.info("补全公告与用户的关系数据,租户ID = {}", tenantId); - } else { - tenantId = null; - } - - List userIdList = sysUserMapper.getTenantUserIdList(tenantId); - List sysAnnouncementSendList = new ArrayList<>(); - if (!CollectionUtils.isEmpty(userIdList)) { - for (String userId : userIdList) { - SysAnnouncementSend announcementSend = new SysAnnouncementSend(); - announcementSend.setAnntId(commentId); - announcementSend.setUserId(userId); - announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); - sysAnnouncementSendList.add(announcementSend); - } - } - if (!CollectionUtils.isEmpty(sysAnnouncementSendList)) { - log.info("补全公告与用户的关系数据,sysAnnouncementSendList size = {}", sysAnnouncementSendList.size()); - sysAnnouncementSendService.saveBatch(sysAnnouncementSendList); - } - } + @Override + public void batchInsertSysAnnouncementSend(String commentId, Integer tenantId) { + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL && oConvertUtils.isNotEmpty(tenantId)) { + log.info("补全公告与用户的关系数据,租户ID = {}", tenantId); + } else { + tenantId = null; + } - @Override - public List querySysMessageList(int pageSize, int pageNo, String fromUser, String starFlag, Date beginDate, Date endDate) { + List userIdList = sysUserMapper.getTenantUserIdList(tenantId); + List sysAnnouncementSendList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(userIdList)) { + for (String userId : userIdList) { + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + announcementSend.setAnntId(commentId); + announcementSend.setUserId(userId); + announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); + sysAnnouncementSendList.add(announcementSend); + } + } + if (!CollectionUtils.isEmpty(sysAnnouncementSendList)) { + log.info("补全公告与用户的关系数据,sysAnnouncementSendList size = {}", sysAnnouncementSendList.size()); + sysAnnouncementSendService.saveBatch(sysAnnouncementSendList); + } + } + + @Override + public List querySysMessageList(int pageSize, int pageNo, String fromUser, String starFlag, Date beginDate, Date endDate) { // //1. 补全send表的数据 // completeNoteThreadPool.execute(()->{ // completeAnnouncementSendInfo(); // }); - - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - log.info(" 获取登录人 LoginUser id: {}", sysUser.getId()); - Page page = new Page(pageNo,pageSize); - List list = baseMapper.queryAllMessageList(page, sysUser.getId(), fromUser, starFlag, beginDate, endDate); - return list; - } - @Override - public void updateReaded(List annoceIdList) { - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - sysAnnouncementSendMapper.updateReaded(sysUser.getId(), annoceIdList); - } + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + log.info(" 获取登录人 LoginUser id: {}", sysUser.getId()); + Page page = new Page(pageNo, pageSize); + List list = baseMapper.queryAllMessageList(page, sysUser.getId(), fromUser, starFlag, beginDate, endDate); + return list; + } - @Override - public void clearAllUnReadMessage() { - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - sysAnnouncementSendMapper.clearAllUnReadMessage(sysUser.getId()); - } + @Override + public void updateReaded(List annoceIdList) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + sysAnnouncementSendMapper.updateReaded(sysUser.getId(), annoceIdList); + } - /** - * 查询用户未读的通知公告,防止SQL注入写法调整 - * @param userId - * @return - */ + @Override + public void clearAllUnReadMessage() { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + sysAnnouncementSendMapper.clearAllUnReadMessage(sysUser.getId()); + } - @Override - public List getNotSendedAnnouncementlist(String userId) { - return sysAnnouncementMapper.getNotSendedAnnouncementlist(new Date(), userId); - } + /** + * 查询用户未读的通知公告,防止SQL注入写法调整 + * + * @param userId + * @return + */ + + @Override + public List getNotSendedAnnouncementlist(String userId) { + return sysAnnouncementMapper.getNotSendedAnnouncementlist(new Date(), userId); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java index 643f67b..9337b46 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java @@ -14,6 +14,7 @@ import freemarker.core.TemplateClassResolver; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.ObjectUtils; @@ -32,9 +33,6 @@ import org.jeecg.common.system.api.ISysBaseAPI; import org.jeecg.common.system.query.QueryCondition; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryRuleEnum; -import org.jeecg.common.system.vo.DictModel; -import org.jeecg.common.system.vo.LoginUser; -import org.jeecg.common.system.vo.SysPermissionDataRuleModel; import org.jeecg.common.system.vo.*; import org.jeecg.common.util.HTMLUtils; import org.jeecg.common.util.YouBianCodeUtil; @@ -63,7 +61,6 @@ import org.springframework.util.AntPathMatcher; import org.springframework.util.CollectionUtils; import org.springframework.util.PathMatcher; -import jakarta.annotation.Resource; import javax.sql.DataSource; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -77,200 +74,202 @@ import java.util.stream.Collectors; /** * @Description: 底层共通业务API,提供其他独立模块调用 * @Author: scott - * @Date:2019-4-20 + * @Date:2019-4-20 * @Version:V1.0 */ @Slf4j @Service public class SysBaseApiImpl implements ISysBaseAPI { - /** 当前系统数据库类型 */ - private static String DB_TYPE = ""; + /** + * 当前系统数据库类型 + */ + private static String DB_TYPE = ""; - @Autowired - private ISysMessageTemplateService sysMessageTemplateService; - @Resource - private SysUserMapper userMapper; - @Resource - private SysUserRoleMapper sysUserRoleMapper; - @Autowired - private ISysDepartService sysDepartService; - @Autowired - private ISysDictService sysDictService; - @Resource - private SysAnnouncementMapper sysAnnouncementMapper; - @Resource - private SysAnnouncementSendMapper sysAnnouncementSendMapper; - @Resource + @Autowired + private ISysMessageTemplateService sysMessageTemplateService; + @Resource + private SysUserMapper userMapper; + @Resource + private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private ISysDepartService sysDepartService; + @Autowired + private ISysDictService sysDictService; + @Resource + private SysAnnouncementMapper sysAnnouncementMapper; + @Resource + private SysAnnouncementSendMapper sysAnnouncementSendMapper; + @Resource private WebSocket webSocket; - @Resource - private SysRoleMapper roleMapper; - @Resource - private SysDepartMapper departMapper; - @Resource - private SysCategoryMapper categoryMapper; - @Autowired - private ISysDataSourceService dataSourceService; - @Autowired - private ISysUserDepartService sysUserDepartService; - @Resource - private SysPermissionMapper sysPermissionMapper; - @Autowired - private ISysPermissionDataRuleService sysPermissionDataRuleService; - @Autowired - private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; - @Autowired - private ThirdAppDingtalkServiceImpl dingtalkService; - @Autowired - ISysCategoryService sysCategoryService; - @Autowired - private ISysUserService sysUserService; - @Autowired - private ISysDataLogService sysDataLogService; - @Autowired - private ISysRoleService sysRoleService; - @Autowired - private ISysUserTenantService sysUserTenantService; + @Resource + private SysRoleMapper roleMapper; + @Resource + private SysDepartMapper departMapper; + @Resource + private SysCategoryMapper categoryMapper; + @Autowired + private ISysDataSourceService dataSourceService; + @Autowired + private ISysUserDepartService sysUserDepartService; + @Resource + private SysPermissionMapper sysPermissionMapper; + @Autowired + private ISysPermissionDataRuleService sysPermissionDataRuleService; + @Autowired + private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; + @Autowired + private ThirdAppDingtalkServiceImpl dingtalkService; + @Autowired + ISysCategoryService sysCategoryService; + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysDataLogService sysDataLogService; + @Autowired + private ISysRoleService sysRoleService; + @Autowired + private ISysUserTenantService sysUserTenantService; - @Autowired - private ISysUserRoleService sysUserRoleService; + @Autowired + private ISysUserRoleService sysUserRoleService; - @Autowired - private ISysUserPositionService sysUserPositionService; + @Autowired + private ISysUserPositionService sysUserPositionService; - @Autowired - private IDictTableWhiteListHandler dictTableWhiteListHandler; + @Autowired + private IDictTableWhiteListHandler dictTableWhiteListHandler; - @Override - //@SensitiveDecode - public LoginUser getUserByName(String username) { - //update-begin-author:taoyan date:2022-6-6 for: VUEN-1276 【v3流程图】测试bug 1、通过我发起的流程或者流程实例,查看历史,流程图预览问题 - if (oConvertUtils.isEmpty(username)) { - return null; - } - //update-end-author:taoyan date:2022-6-6 for: VUEN-1276 【v3流程图】测试bug 1、通过我发起的流程或者流程实例,查看历史,流程图预览问题 - LoginUser user = sysUserService.getEncodeUserInfo(username); + @Override + //@SensitiveDecode + public LoginUser getUserByName(String username) { + //update-begin-author:taoyan date:2022-6-6 for: VUEN-1276 【v3流程图】测试bug 1、通过我发起的流程或者流程实例,查看历史,流程图预览问题 + if (oConvertUtils.isEmpty(username)) { + return null; + } + //update-end-author:taoyan date:2022-6-6 for: VUEN-1276 【v3流程图】测试bug 1、通过我发起的流程或者流程实例,查看历史,流程图预览问题 + LoginUser user = sysUserService.getEncodeUserInfo(username); - //相同类中方法间调用时脱敏解密 Aop会失效,获取用户信息太重要,此处采用原生解密方法,不采用@SensitiveDecodeAble注解方式 - try { - SensitiveInfoUtil.handlerObject(user, false); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } + //相同类中方法间调用时脱敏解密 Aop会失效,获取用户信息太重要,此处采用原生解密方法,不采用@SensitiveDecodeAble注解方式 + try { + SensitiveInfoUtil.handlerObject(user, false); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } - return user; - } + return user; + } - @Override - @Cacheable(cacheNames= CommonConstant.SYS_USER_ID_MAPPING_CACHE, key="#username") - public String getUserIdByName(String username) { - if (oConvertUtils.isEmpty(username)) { - return null; - } - String userId = userMapper.getUserIdByName(username); - return userId; - } - + @Override + @Cacheable(cacheNames = CommonConstant.SYS_USER_ID_MAPPING_CACHE, key = "#username") + public String getUserIdByName(String username) { + if (oConvertUtils.isEmpty(username)) { + return null; + } + String userId = userMapper.getUserIdByName(username); + return userId; + } - @Override - public String translateDictFromTable(String table, String text, String code, String key) { - return sysDictService.queryTableDictTextByKey(table, text, code, key); - } - @Override - public String translateDict(String code, String key) { - return sysDictService.queryDictTextByKey(code, key); - } + @Override + public String translateDictFromTable(String table, String text, String code, String key) { + return sysDictService.queryTableDictTextByKey(table, text, code, key); + } - @Override - public List queryPermissionDataRule(String component, String requestPath, String username) { - List currentSyspermission = null; - if(oConvertUtils.isNotEmpty(component)) { - //1.通过注解属性pageComponent 获取菜单 - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysPermission::getDelFlag,0); - query.eq(SysPermission::getComponent, component); - currentSyspermission = sysPermissionMapper.selectList(query); - }else { - //1.直接通过前端请求地址查询菜单 - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysPermission::getMenuType,2); - query.eq(SysPermission::getDelFlag,0); - - //update-begin-author:taoyan date:2023-2-21 for: 解决参数顺序问题 - List allPossiblePaths = this.getOnlinePossiblePaths(requestPath); - log.info("获取的菜单地址= {}", allPossiblePaths.toString()); - if(allPossiblePaths.size()==1){ - query.eq(SysPermission::getUrl, requestPath); - }else{ - query.in(SysPermission::getUrl, allPossiblePaths); - } - //update-end-author:taoyan date:2023-2-21 for: 解决参数顺序问题 - - currentSyspermission = sysPermissionMapper.selectList(query); - //2.未找到 再通过自定义匹配URL 获取菜单 - if(currentSyspermission==null || currentSyspermission.size()==0) { - //通过自定义URL匹配规则 获取菜单(实现通过菜单配置数据权限规则,实际上针对获取数据接口进行数据规则控制) - String userMatchUrl = UrlMatchEnum.getMatchResultByUrl(requestPath); - LambdaQueryWrapper queryQserMatch = new LambdaQueryWrapper(); - // update-begin-author:taoyan date:20211027 for: online菜单如果配置成一级菜单 权限查询不到 取消menuType = 1 - //queryQserMatch.eq(SysPermission::getMenuType, 1); - // update-end-author:taoyan date:20211027 for: online菜单如果配置成一级菜单 权限查询不到 取消menuType = 1 - queryQserMatch.eq(SysPermission::getDelFlag, 0); - queryQserMatch.eq(SysPermission::getUrl, userMatchUrl); - if(oConvertUtils.isNotEmpty(userMatchUrl)){ - currentSyspermission = sysPermissionMapper.selectList(queryQserMatch); - } - } - //3.未找到 再通过正则匹配获取菜单 - if(currentSyspermission==null || currentSyspermission.size()==0) { - //通过正则匹配权限配置 - String regUrl = getRegexpUrl(requestPath); - if(regUrl!=null) { - currentSyspermission = sysPermissionMapper.selectList(new LambdaQueryWrapper().eq(SysPermission::getMenuType,2).eq(SysPermission::getUrl, regUrl).eq(SysPermission::getDelFlag,0)); - } - } - } - if(currentSyspermission!=null && currentSyspermission.size()>0){ - List dataRules = new ArrayList(); - for (SysPermission sysPermission : currentSyspermission) { - // update-begin--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 - List temp = sysPermissionDataRuleService.queryPermissionDataRules(username, sysPermission.getId()); - if(temp!=null && temp.size()>0) { - //dataRules.addAll(temp); - dataRules = oConvertUtils.entityListToModelList(temp,SysPermissionDataRuleModel.class); - } - // update-end--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 - } - return dataRules; - } - return null; - } + @Override + public String translateDict(String code, String key) { + return sysDictService.queryDictTextByKey(code, key); + } - /** - * 匹配前端传过来的地址 匹配成功返回正则地址 - * AntPathMatcher匹配地址 - *()* 匹配0个或多个字符 - *()**匹配0个或多个目录 - */ - private String getRegexpUrl(String url) { - List list = sysPermissionMapper.queryPermissionUrlWithStar(); - if(list!=null && list.size()>0) { - for (String p : list) { - PathMatcher matcher = new AntPathMatcher(); - if(matcher.match(p, url)) { - return p; - } - } - } - return null; - } + @Override + public List queryPermissionDataRule(String component, String requestPath, String username) { + List currentSyspermission = null; + if (oConvertUtils.isNotEmpty(component)) { + //1.通过注解属性pageComponent 获取菜单 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, 0); + query.eq(SysPermission::getComponent, component); + currentSyspermission = sysPermissionMapper.selectList(query); + } else { + //1.直接通过前端请求地址查询菜单 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getMenuType, 2); + query.eq(SysPermission::getDelFlag, 0); - @Override - public SysUserCacheInfo getCacheUser(String username) { - SysUserCacheInfo info = new SysUserCacheInfo(); - info.setOneDepart(true); - LoginUser user = this.getUserByName(username); + //update-begin-author:taoyan date:2023-2-21 for: 解决参数顺序问题 + List allPossiblePaths = this.getOnlinePossiblePaths(requestPath); + log.info("获取的菜单地址= {}", allPossiblePaths.toString()); + if (allPossiblePaths.size() == 1) { + query.eq(SysPermission::getUrl, requestPath); + } else { + query.in(SysPermission::getUrl, allPossiblePaths); + } + //update-end-author:taoyan date:2023-2-21 for: 解决参数顺序问题 + + currentSyspermission = sysPermissionMapper.selectList(query); + //2.未找到 再通过自定义匹配URL 获取菜单 + if (currentSyspermission == null || currentSyspermission.size() == 0) { + //通过自定义URL匹配规则 获取菜单(实现通过菜单配置数据权限规则,实际上针对获取数据接口进行数据规则控制) + String userMatchUrl = UrlMatchEnum.getMatchResultByUrl(requestPath); + LambdaQueryWrapper queryQserMatch = new LambdaQueryWrapper(); + // update-begin-author:taoyan date:20211027 for: online菜单如果配置成一级菜单 权限查询不到 取消menuType = 1 + //queryQserMatch.eq(SysPermission::getMenuType, 1); + // update-end-author:taoyan date:20211027 for: online菜单如果配置成一级菜单 权限查询不到 取消menuType = 1 + queryQserMatch.eq(SysPermission::getDelFlag, 0); + queryQserMatch.eq(SysPermission::getUrl, userMatchUrl); + if (oConvertUtils.isNotEmpty(userMatchUrl)) { + currentSyspermission = sysPermissionMapper.selectList(queryQserMatch); + } + } + //3.未找到 再通过正则匹配获取菜单 + if (currentSyspermission == null || currentSyspermission.size() == 0) { + //通过正则匹配权限配置 + String regUrl = getRegexpUrl(requestPath); + if (regUrl != null) { + currentSyspermission = sysPermissionMapper.selectList(new LambdaQueryWrapper().eq(SysPermission::getMenuType, 2).eq(SysPermission::getUrl, regUrl).eq(SysPermission::getDelFlag, 0)); + } + } + } + if (currentSyspermission != null && currentSyspermission.size() > 0) { + List dataRules = new ArrayList(); + for (SysPermission sysPermission : currentSyspermission) { + // update-begin--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 + List temp = sysPermissionDataRuleService.queryPermissionDataRules(username, sysPermission.getId()); + if (temp != null && temp.size() > 0) { + //dataRules.addAll(temp); + dataRules = oConvertUtils.entityListToModelList(temp, SysPermissionDataRuleModel.class); + } + // update-end--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 + } + return dataRules; + } + return null; + } + + /** + * 匹配前端传过来的地址 匹配成功返回正则地址 + * AntPathMatcher匹配地址 + * ()* 匹配0个或多个字符 + * ()**匹配0个或多个目录 + */ + private String getRegexpUrl(String url) { + List list = sysPermissionMapper.queryPermissionUrlWithStar(); + if (list != null && list.size() > 0) { + for (String p : list) { + PathMatcher matcher = new AntPathMatcher(); + if (matcher.match(p, url)) { + return p; + } + } + } + return null; + } + + @Override + public SysUserCacheInfo getCacheUser(String username) { + SysUserCacheInfo info = new SysUserCacheInfo(); + info.setOneDepart(true); + LoginUser user = this.getUserByName(username); // try { // //相同类中方法间调用时脱敏@SensitiveDecodeAble解密 Aop失效处理 @@ -279,508 +278,509 @@ public class SysBaseApiImpl implements ISysBaseAPI { // e.printStackTrace(); // } - if(user!=null) { - info.setSysUserId(user.getId()); - info.setSysUserCode(user.getUsername()); - info.setSysUserName(user.getRealname()); - info.setSysOrgCode(user.getOrgCode()); - info.setSysOrgId(user.getOrgId()); - info.setSysRoleCode(user.getRoleCode()); - }else{ - return null; - } - //多部门支持in查询 - List list = departMapper.queryUserDeparts(user.getId()); - List sysMultiOrgCode = new ArrayList(); - if(list==null || list.size()==0) { - //当前用户无部门 - //sysMultiOrgCode.add("0"); - }else if(list.size()==1) { - sysMultiOrgCode.add(list.get(0).getOrgCode()); - }else { - info.setOneDepart(false); - for (SysDepart dpt : list) { - sysMultiOrgCode.add(dpt.getOrgCode()); - } - } - info.setSysMultiOrgCode(sysMultiOrgCode); - return info; - } + if (user != null) { + info.setSysUserId(user.getId()); + info.setSysUserCode(user.getUsername()); + info.setSysUserName(user.getRealname()); + info.setSysOrgCode(user.getOrgCode()); + info.setSysOrgId(user.getOrgId()); + info.setSysRoleCode(user.getRoleCode()); + } else { + return null; + } + //多部门支持in查询 + List list = departMapper.queryUserDeparts(user.getId()); + List sysMultiOrgCode = new ArrayList(); + if (list == null || list.size() == 0) { + //当前用户无部门 + //sysMultiOrgCode.add("0"); + } else if (list.size() == 1) { + sysMultiOrgCode.add(list.get(0).getOrgCode()); + } else { + info.setOneDepart(false); + for (SysDepart dpt : list) { + sysMultiOrgCode.add(dpt.getOrgCode()); + } + } + info.setSysMultiOrgCode(sysMultiOrgCode); + return info; + } - @Override - public LoginUser getUserById(String id) { - if(oConvertUtils.isEmpty(id)) { - return null; - } - LoginUser loginUser = new LoginUser(); - SysUser sysUser = userMapper.selectById(id); - if(sysUser==null) { - return null; - } - BeanUtils.copyProperties(sysUser, loginUser); - //去掉用户敏感信息 - loginUser.setPassword(null); - loginUser.setRelTenantIds(null); - loginUser.setDepartIds(null); - return loginUser; - } + @Override + public LoginUser getUserById(String id) { + if (oConvertUtils.isEmpty(id)) { + return null; + } + LoginUser loginUser = new LoginUser(); + SysUser sysUser = userMapper.selectById(id); + if (sysUser == null) { + return null; + } + BeanUtils.copyProperties(sysUser, loginUser); + //去掉用户敏感信息 + loginUser.setPassword(null); + loginUser.setRelTenantIds(null); + loginUser.setDepartIds(null); + return loginUser; + } - @Override - public List getRolesByUsername(String username) { - return sysUserRoleMapper.getRoleByUserName(username); - } - - @Override - public List getRolesByUserId(String userId) { - return sysUserRoleMapper.getRoleCodeByUserId(userId); - } + @Override + public List getRolesByUsername(String username) { + return sysUserRoleMapper.getRoleByUserName(username); + } - @Override - public List getDepartIdsByUsername(String username) { - List list = sysDepartService.queryDepartsByUsername(username); - List result = new ArrayList<>(list.size()); - for (SysDepart depart : list) { - result.add(depart.getId()); - } - return result; - } - - @Override - public List getDepartIdsByUserId(String userId) { - return sysDepartService.queryDepartsByUserId(userId); - } + @Override + public List getRolesByUserId(String userId) { + return sysUserRoleMapper.getRoleCodeByUserId(userId); + } - @Override - public Set getDepartParentIdsByUsername(String username) { - List list = sysDepartService.queryDepartsByUsername(username); - Set result = new HashSet<>(list.size()); - for (SysDepart depart : list) { - result.add(depart.getParentId()); - } - return result; - } + @Override + public List getDepartIdsByUsername(String username) { + List list = sysDepartService.queryDepartsByUsername(username); + List result = new ArrayList<>(list.size()); + for (SysDepart depart : list) { + result.add(depart.getId()); + } + return result; + } - @Override - public Set getDepartParentIdsByDepIds(Set depIds) { - LambdaQueryWrapper departQuery = new LambdaQueryWrapper().in(SysDepart::getId, depIds); - List departList = departMapper.selectList(departQuery); + @Override + public List getDepartIdsByUserId(String userId) { + return sysDepartService.queryDepartsByUserId(userId); + } - if(CollectionUtils.isEmpty(departList)){ - return null; - } - Set parentIds = departList.stream() - .map(SysDepart::getParentId) - .collect(Collectors.toSet()); - return parentIds; - } + @Override + public Set getDepartParentIdsByUsername(String username) { + List list = sysDepartService.queryDepartsByUsername(username); + Set result = new HashSet<>(list.size()); + for (SysDepart depart : list) { + result.add(depart.getParentId()); + } + return result; + } - @Override - public List getDepartNamesByUsername(String username) { - List list = sysDepartService.queryDepartsByUsername(username); - List result = new ArrayList<>(list.size()); - for (SysDepart depart : list) { - result.add(depart.getDepartName()); - } - return result; - } + @Override + public Set getDepartParentIdsByDepIds(Set depIds) { + LambdaQueryWrapper departQuery = new LambdaQueryWrapper().in(SysDepart::getId, depIds); + List departList = departMapper.selectList(departQuery); - @Override - public DictModel getParentDepartId(String departId) { - SysDepart depart = departMapper.getParentDepartId(departId); - DictModel model = new DictModel(depart.getId(),depart.getParentId()); - return model; - } + if (CollectionUtils.isEmpty(departList)) { + return null; + } + Set parentIds = departList.stream() + .map(SysDepart::getParentId) + .collect(Collectors.toSet()); + return parentIds; + } - @Override - @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code", unless = "#result == null ") - public List queryDictItemsByCode(String code) { - return sysDictService.queryDictItemsByCode(code); - } + @Override + public List getDepartNamesByUsername(String username) { + List list = sysDepartService.queryDepartsByUsername(username); + List result = new ArrayList<>(list.size()); + for (SysDepart depart : list) { + result.add(depart.getDepartName()); + } + return result; + } - @Override - @Cacheable(value = CacheConstant.SYS_ENABLE_DICT_CACHE,key = "#code", unless = "#result == null ") - public List queryEnableDictItemsByCode(String code) { - return sysDictService.queryEnableDictItemsByCode(code); - } + @Override + public DictModel getParentDepartId(String departId) { + SysDepart depart = departMapper.getParentDepartId(departId); + DictModel model = new DictModel(depart.getId(), depart.getParentId()); + return model; + } - @Override - public List queryTableDictItemsByCode(String tableFilterSql, String text, String code) { - //【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799 - if(tableFilterSql.indexOf(SymbolConstant.SYS_VAR_PREFIX)>=0){ - tableFilterSql = QueryGenerator.getSqlRuleValue(tableFilterSql); - } - return sysDictService.queryTableDictItemsByCode(tableFilterSql, text, code); - } + @Override + @Cacheable(value = CacheConstant.SYS_DICT_CACHE, key = "#code", unless = "#result == null ") + public List queryDictItemsByCode(String code) { + return sysDictService.queryDictItemsByCode(code); + } - @Override - public List queryAllDepartBackDictModel() { - return sysDictService.queryAllDepartBackDictModel(); - } + @Override + @Cacheable(value = CacheConstant.SYS_ENABLE_DICT_CACHE, key = "#code", unless = "#result == null ") + public List queryEnableDictItemsByCode(String code) { + return sysDictService.queryEnableDictItemsByCode(code); + } - @Override - public void sendSysAnnouncement(MessageDTO message) { - this.sendSysAnnouncement(message.getFromUser(), - message.getToUser(), - message.getTitle(), - message.getContent(), - message.getCategory()); - try { - // 同步发送第三方APP消息 - wechatEnterpriseService.sendMessage(message, true); - dingtalkService.sendMessage(message, true); - } catch (Exception e) { - log.error("同步发送第三方APP消息失败!", e); - } - } + @Override + public List queryTableDictItemsByCode(String tableFilterSql, String text, String code) { + //【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799 + if (tableFilterSql.indexOf(SymbolConstant.SYS_VAR_PREFIX) >= 0) { + tableFilterSql = QueryGenerator.getSqlRuleValue(tableFilterSql); + } + return sysDictService.queryTableDictItemsByCode(tableFilterSql, text, code); + } - @Override - public void sendBusAnnouncement(BusMessageDTO message) { - sendBusAnnouncement(message.getFromUser(), - message.getToUser(), - message.getTitle(), - message.getContent(), - message.getCategory(), - message.getBusType(), - message.getBusId()); - try { - // 同步发送第三方APP消息 - wechatEnterpriseService.sendMessage(message, true); - dingtalkService.sendMessage(message, true); - } catch (Exception e) { - log.error("同步发送第三方APP消息失败!", e); - } - } + @Override + public List queryAllDepartBackDictModel() { + return sysDictService.queryAllDepartBackDictModel(); + } - @Override - public void sendTemplateAnnouncement(TemplateMessageDTO message) { - String templateCode = message.getTemplateCode(); - String title = message.getTitle(); - Map tmplateParam = message.getTemplateParam(); - String fromUser = message.getFromUser(); - String toUser = message.getToUser(); + @Override + public void sendSysAnnouncement(MessageDTO message) { + this.sendSysAnnouncement(message.getFromUser(), + message.getToUser(), + message.getTitle(), + message.getContent(), + message.getCategory()); + try { + // 同步发送第三方APP消息 + wechatEnterpriseService.sendMessage(message, true); + dingtalkService.sendMessage(message, true); + } catch (Exception e) { + log.error("同步发送第三方APP消息失败!", e); + } + } - List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); - if(sysSmsTemplates==null||sysSmsTemplates.size()==0){ - throw new JeecgBootException("消息模板不存在,模板编码:"+templateCode); - } - SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); - //模板标题 - title = title==null?sysSmsTemplate.getTemplateName():title; - //模板内容 - String content = sysSmsTemplate.getTemplateContent(); - if(tmplateParam!=null) { - for (Map.Entry entry : tmplateParam.entrySet()) { - String str = "${" + entry.getKey() + "}"; - if(oConvertUtils.isNotEmpty(title)){ - title = title.replace(str, entry.getValue()); - } - content = content.replace(str, entry.getValue()); - } - } - String mobileOpenUrl = null; - if(tmplateParam!=null && oConvertUtils.isNotEmpty(tmplateParam.get(CommonConstant.MSG_HREF_URL))){ - mobileOpenUrl = tmplateParam.get(CommonConstant.MSG_HREF_URL); - } - SysAnnouncement announcement = new SysAnnouncement(); - announcement.setTitile(title); - announcement.setMsgContent(content); - announcement.setSender(fromUser); - announcement.setPriority(CommonConstant.PRIORITY_M); - announcement.setMsgType(CommonConstant.MSG_TYPE_UESR); - announcement.setSendStatus(CommonConstant.HAS_SEND); - announcement.setSendTime(new Date()); - announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2); - announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); - sysAnnouncementMapper.insert(announcement); - // 2.插入用户通告阅读标记表记录 - String userId = toUser; - String[] userIds = userId.split(","); - String anntId = announcement.getId(); - for(int i=0;i tmplateParam = message.getTemplateParam(); + String fromUser = message.getFromUser(); + String toUser = message.getToUser(); - @Override - public void sendBusTemplateAnnouncement(BusTemplateMessageDTO message) { - String templateCode = message.getTemplateCode(); - String title = message.getTitle(); - Map tmplateParam = message.getTemplateParam(); - String fromUser = message.getFromUser(); - String toUser = message.getToUser(); - String busId = message.getBusId(); - String busType = message.getBusType(); + List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); + if (sysSmsTemplates == null || sysSmsTemplates.size() == 0) { + throw new JeecgBootException("消息模板不存在,模板编码:" + templateCode); + } + SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); + //模板标题 + title = title == null ? sysSmsTemplate.getTemplateName() : title; + //模板内容 + String content = sysSmsTemplate.getTemplateContent(); + if (tmplateParam != null) { + for (Map.Entry entry : tmplateParam.entrySet()) { + String str = "${" + entry.getKey() + "}"; + if (oConvertUtils.isNotEmpty(title)) { + title = title.replace(str, entry.getValue()); + } + content = content.replace(str, entry.getValue()); + } + } + String mobileOpenUrl = null; + if (tmplateParam != null && oConvertUtils.isNotEmpty(tmplateParam.get(CommonConstant.MSG_HREF_URL))) { + mobileOpenUrl = tmplateParam.get(CommonConstant.MSG_HREF_URL); + } + SysAnnouncement announcement = new SysAnnouncement(); + announcement.setTitile(title); + announcement.setMsgContent(content); + announcement.setSender(fromUser); + announcement.setPriority(CommonConstant.PRIORITY_M); + announcement.setMsgType(CommonConstant.MSG_TYPE_UESR); + announcement.setSendStatus(CommonConstant.HAS_SEND); + announcement.setSendTime(new Date()); + announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2); + announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); + sysAnnouncementMapper.insert(announcement); + // 2.插入用户通告阅读标记表记录 + String userId = toUser; + String[] userIds = userId.split(","); + String anntId = announcement.getId(); + for (int i = 0; i < userIds.length; i++) { + if (oConvertUtils.isNotEmpty(userIds[i])) { + SysUser sysUser = userMapper.getUserByName(userIds[i]); + if (sysUser == null) { + continue; + } + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + announcementSend.setAnntId(anntId); + announcementSend.setUserId(sysUser.getId()); + announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); + sysAnnouncementSendMapper.insert(announcementSend); + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); + obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId()); + obj.put(WebsocketConst.MSG_ID, announcement.getId()); + obj.put(WebsocketConst.MSG_TXT, announcement.getTitile()); + webSocket.sendMessage(sysUser.getId(), obj.toJSONString()); + } + } + try { + // 同步企业微信、钉钉的消息通知 + dingtalkService.sendActionCardMessage(announcement, mobileOpenUrl, true); + wechatEnterpriseService.sendTextCardMessage(announcement, true); + } catch (Exception e) { + log.error("同步发送第三方APP消息失败!", e); + } - List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); - if(sysSmsTemplates==null||sysSmsTemplates.size()==0){ - throw new JeecgBootException("消息模板不存在,模板编码:"+templateCode); - } - SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); - //模板标题 - title = title==null?sysSmsTemplate.getTemplateName():title; - //模板内容 - String content = sysSmsTemplate.getTemplateContent(); - if(tmplateParam!=null) { - for (Map.Entry entry : tmplateParam.entrySet()) { - String str = "${" + entry.getKey() + "}"; - if (entry.getValue() != null) { - title = title.replace(str, entry.getValue()); - content = content.replace(str, entry.getValue()); - } - } - } - SysAnnouncement announcement = new SysAnnouncement(); - announcement.setTitile(title); - announcement.setMsgContent(content); - announcement.setSender(fromUser); - announcement.setPriority(CommonConstant.PRIORITY_M); - announcement.setMsgType(CommonConstant.MSG_TYPE_UESR); - announcement.setSendStatus(CommonConstant.HAS_SEND); - announcement.setSendTime(new Date()); - - if(tmplateParam!=null && oConvertUtils.isNotEmpty(tmplateParam.get(CommonSendStatus.MSG_ABSTRACT_JSON))){ - announcement.setMsgAbstract(tmplateParam.get(CommonSendStatus.MSG_ABSTRACT_JSON)); - } - String mobileOpenUrl = null; - if(tmplateParam!=null && oConvertUtils.isNotEmpty(tmplateParam.get(CommonConstant.MSG_HREF_URL))){ - mobileOpenUrl = tmplateParam.get(CommonConstant.MSG_HREF_URL); - } - - announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2); - announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); - announcement.setBusId(busId); - announcement.setBusType(busType); - announcement.setOpenType(SysAnnmentTypeEnum.getByType(busType).getOpenType()); - announcement.setOpenPage(SysAnnmentTypeEnum.getByType(busType).getOpenPage()); - sysAnnouncementMapper.insert(announcement); - // 2.插入用户通告阅读标记表记录 - String userId = toUser; - String[] userIds = userId.split(","); - String anntId = announcement.getId(); - for(int i=0;i tmplateParam = message.getTemplateParam(); + String fromUser = message.getFromUser(); + String toUser = message.getToUser(); + String busId = message.getBusId(); + String busType = message.getBusType(); - @Override - public String parseTemplateByCode(TemplateDTO templateDTO) { - String templateCode = templateDTO.getTemplateCode(); - Map map = templateDTO.getTemplateParam(); - List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); - if(sysSmsTemplates==null||sysSmsTemplates.size()==0){ - throw new JeecgBootException("消息模板不存在,模板编码:"+templateCode); - } - SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); - //模板内容 - String content = sysSmsTemplate.getTemplateContent(); - if(map!=null) { - for (Map.Entry entry : map.entrySet()) { - String str = "${" + entry.getKey() + "}"; - content = content.replace(str, entry.getValue()); - } - } - return content; - } + List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); + if (sysSmsTemplates == null || sysSmsTemplates.size() == 0) { + throw new JeecgBootException("消息模板不存在,模板编码:" + templateCode); + } + SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); + //模板标题 + title = title == null ? sysSmsTemplate.getTemplateName() : title; + //模板内容 + String content = sysSmsTemplate.getTemplateContent(); + if (tmplateParam != null) { + for (Map.Entry entry : tmplateParam.entrySet()) { + String str = "${" + entry.getKey() + "}"; + if (entry.getValue() != null) { + title = title.replace(str, entry.getValue()); + content = content.replace(str, entry.getValue()); + } + } + } + SysAnnouncement announcement = new SysAnnouncement(); + announcement.setTitile(title); + announcement.setMsgContent(content); + announcement.setSender(fromUser); + announcement.setPriority(CommonConstant.PRIORITY_M); + announcement.setMsgType(CommonConstant.MSG_TYPE_UESR); + announcement.setSendStatus(CommonConstant.HAS_SEND); + announcement.setSendTime(new Date()); - @Override - public void updateSysAnnounReadFlag(String busType, String busId) { - SysAnnouncement announcement = sysAnnouncementMapper.selectOne(new QueryWrapper().eq("bus_type",busType).eq("bus_id",busId)); - if(announcement != null){ - LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); - String userId = sysUser.getId(); - LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); - updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); - updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); - updateWrapper.eq(SysAnnouncementSend::getAnntId,announcement.getId()); - updateWrapper.eq(SysAnnouncementSend::getUserId,userId); - //updateWrapper.last("where annt_id ='"+announcement.getId()+"' and user_id ='"+userId+"'"); - SysAnnouncementSend announcementSend = new SysAnnouncementSend(); - sysAnnouncementSendMapper.update(announcementSend, updateWrapper); - } - } + if (tmplateParam != null && oConvertUtils.isNotEmpty(tmplateParam.get(CommonSendStatus.MSG_ABSTRACT_JSON))) { + announcement.setMsgAbstract(tmplateParam.get(CommonSendStatus.MSG_ABSTRACT_JSON)); + } + String mobileOpenUrl = null; + if (tmplateParam != null && oConvertUtils.isNotEmpty(tmplateParam.get(CommonConstant.MSG_HREF_URL))) { + mobileOpenUrl = tmplateParam.get(CommonConstant.MSG_HREF_URL); + } - /** - * 获取数据库类型 - * @param dataSource - * @return - * @throws SQLException - */ - private String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException{ - if("".equals(DB_TYPE)) { - Connection connection = dataSource.getConnection(); - try { - DatabaseMetaData md = connection.getMetaData(); - String dbType = md.getDatabaseProductName().toLowerCase(); - if(dbType.indexOf(DataBaseConstant.DB_TYPE_MYSQL.toLowerCase())>=0) { - DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL; - }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_ORACLE.toLowerCase())>=0) { - DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE; - }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_SQLSERVER.toLowerCase())>=0||dbType.indexOf(DataBaseConstant.DB_TYPE_SQL_SERVER_BLANK)>=0) { - DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER; - }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_POSTGRESQL.toLowerCase())>=0) { - DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL; - }else if(dbType.indexOf(DataBaseConstant.DB_TYPE_MARIADB.toLowerCase())>=0) { - DB_TYPE = DataBaseConstant.DB_TYPE_MARIADB; - }else { - log.error("数据库类型:[" + dbType + "]不识别!"); - //throw new JeecgBootException("数据库类型:["+dbType+"]不识别!"); - } - } catch (Exception e) { - log.error(e.getMessage(), e); - }finally { - connection.close(); - } - } - return DB_TYPE; + announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2); + announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); + announcement.setBusId(busId); + announcement.setBusType(busType); + announcement.setOpenType(SysAnnmentTypeEnum.getByType(busType).getOpenType()); + announcement.setOpenPage(SysAnnmentTypeEnum.getByType(busType).getOpenPage()); + sysAnnouncementMapper.insert(announcement); + // 2.插入用户通告阅读标记表记录 + String userId = toUser; + String[] userIds = userId.split(","); + String anntId = announcement.getId(); + for (int i = 0; i < userIds.length; i++) { + if (oConvertUtils.isNotEmpty(userIds[i])) { + SysUser sysUser = userMapper.getUserByName(userIds[i]); + if (sysUser == null) { + continue; + } + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + announcementSend.setAnntId(anntId); + announcementSend.setUserId(sysUser.getId()); + announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); + sysAnnouncementSendMapper.insert(announcementSend); + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); + obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId()); + obj.put(WebsocketConst.MSG_ID, announcement.getId()); + obj.put(WebsocketConst.MSG_TXT, announcement.getTitile()); + webSocket.sendMessage(sysUser.getId(), obj.toJSONString()); + } + } + try { + // 钉钉的消息通知 + dingtalkService.sendActionCardMessage(announcement, mobileOpenUrl, true); + // 企业微信通知 + wechatEnterpriseService.sendTextCardMessage(announcement, true); + } catch (Exception e) { + log.error("同步发送第三方APP消息失败!", e); + } - } + } - @Override - public List queryAllDict() { - // 查询并排序 - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.orderByAsc("create_time"); - List dicts = sysDictService.list(queryWrapper); - // 封装成 model - List list = new ArrayList(); - for (SysDict dict : dicts) { - list.add(new DictModel(dict.getDictCode(), dict.getDictName())); - } + @Override + public String parseTemplateByCode(TemplateDTO templateDTO) { + String templateCode = templateDTO.getTemplateCode(); + Map map = templateDTO.getTemplateParam(); + List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); + if (sysSmsTemplates == null || sysSmsTemplates.size() == 0) { + throw new JeecgBootException("消息模板不存在,模板编码:" + templateCode); + } + SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); + //模板内容 + String content = sysSmsTemplate.getTemplateContent(); + if (map != null) { + for (Map.Entry entry : map.entrySet()) { + String str = "${" + entry.getKey() + "}"; + content = content.replace(str, entry.getValue()); + } + } + return content; + } - return list; - } + @Override + public void updateSysAnnounReadFlag(String busType, String busId) { + SysAnnouncement announcement = sysAnnouncementMapper.selectOne(new QueryWrapper().eq("bus_type", busType).eq("bus_id", busId)); + if (announcement != null) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); + updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); + updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); + updateWrapper.eq(SysAnnouncementSend::getAnntId, announcement.getId()); + updateWrapper.eq(SysAnnouncementSend::getUserId, userId); + //updateWrapper.last("where annt_id ='"+announcement.getId()+"' and user_id ='"+userId+"'"); + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + sysAnnouncementSendMapper.update(announcementSend, updateWrapper); + } + } - @Override - public List queryAllSysCategory() { - List ls = categoryMapper.selectList(null); - List res = oConvertUtils.entityListToModelList(ls,SysCategoryModel.class); - return res; - } + /** + * 获取数据库类型 + * + * @param dataSource + * @return + * @throws SQLException + */ + private String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException { + if ("".equals(DB_TYPE)) { + Connection connection = dataSource.getConnection(); + try { + DatabaseMetaData md = connection.getMetaData(); + String dbType = md.getDatabaseProductName().toLowerCase(); + if (dbType.indexOf(DataBaseConstant.DB_TYPE_MYSQL.toLowerCase()) >= 0) { + DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL; + } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_ORACLE.toLowerCase()) >= 0) { + DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE; + } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_SQLSERVER.toLowerCase()) >= 0 || dbType.indexOf(DataBaseConstant.DB_TYPE_SQL_SERVER_BLANK) >= 0) { + DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER; + } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_POSTGRESQL.toLowerCase()) >= 0) { + DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL; + } else if (dbType.indexOf(DataBaseConstant.DB_TYPE_MARIADB.toLowerCase()) >= 0) { + DB_TYPE = DataBaseConstant.DB_TYPE_MARIADB; + } else { + log.error("数据库类型:[" + dbType + "]不识别!"); + //throw new JeecgBootException("数据库类型:["+dbType+"]不识别!"); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } finally { + connection.close(); + } + } + return DB_TYPE; - @Override - public List queryFilterTableDictInfo(String table, String text, String code, String filterSql) { - return sysDictService.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql); - } + } - @Override - public List queryTableDictByKeys(String table, String text, String code, String[] keyArray) { - return sysDictService.queryTableDictByKeys(table,text,code,Joiner.on(",").join(keyArray)); - } + @Override + public List queryAllDict() { + // 查询并排序 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.orderByAsc("create_time"); + List dicts = sysDictService.list(queryWrapper); + // 封装成 model + List list = new ArrayList(); + for (SysDict dict : dicts) { + list.add(new DictModel(dict.getDictCode(), dict.getDictName())); + } - @Override - public List queryAllUserBackCombo() { - List list = new ArrayList(); - List userList = userMapper.selectList(new QueryWrapper().eq("status",1).eq("del_flag",0)); - for(SysUser user : userList){ - ComboModel model = new ComboModel(); - model.setTitle(user.getRealname()); - model.setId(user.getId()); - model.setUsername(user.getUsername()); - list.add(model); - } - return list; - } + return list; + } - @Override - public JSONObject queryAllUser(String userIds, Integer pageNo, Integer pageSize) { - JSONObject json = new JSONObject(); - QueryWrapper queryWrapper = new QueryWrapper().eq("status",1).eq("del_flag",0); - List list = new ArrayList(); - Page page = new Page(pageNo, pageSize); - IPage pageList = userMapper.selectPage(page, queryWrapper); - for(SysUser user : pageList.getRecords()){ - ComboModel model = new ComboModel(); - model.setUsername(user.getUsername()); - model.setTitle(user.getRealname()); - model.setId(user.getId()); - model.setEmail(user.getEmail()); - if(oConvertUtils.isNotEmpty(userIds)){ - String[] temp = userIds.split(","); - for(int i = 0; i queryAllSysCategory() { + List ls = categoryMapper.selectList(null); + List res = oConvertUtils.entityListToModelList(ls, SysCategoryModel.class); + return res; + } - @Override - public List queryAllRole() { - List list = new ArrayList(); - List roleList = roleMapper.selectList(new QueryWrapper()); - for(SysRole role : roleList){ - ComboModel model = new ComboModel(); - model.setTitle(role.getRoleName()); - model.setId(role.getId()); - list.add(model); - } - return list; - } + @Override + public List queryFilterTableDictInfo(String table, String text, String code, String filterSql) { + return sysDictService.queryTableDictItemsByCodeAndFilter(table, text, code, filterSql); + } + + @Override + public List queryTableDictByKeys(String table, String text, String code, String[] keyArray) { + return sysDictService.queryTableDictByKeys(table, text, code, Joiner.on(",").join(keyArray)); + } + + @Override + public List queryAllUserBackCombo() { + List list = new ArrayList(); + List userList = userMapper.selectList(new QueryWrapper().eq("status", 1).eq("del_flag", 0)); + for (SysUser user : userList) { + ComboModel model = new ComboModel(); + model.setTitle(user.getRealname()); + model.setId(user.getId()); + model.setUsername(user.getUsername()); + list.add(model); + } + return list; + } + + @Override + public JSONObject queryAllUser(String userIds, Integer pageNo, Integer pageSize) { + JSONObject json = new JSONObject(); + QueryWrapper queryWrapper = new QueryWrapper().eq("status", 1).eq("del_flag", 0); + List list = new ArrayList(); + Page page = new Page(pageNo, pageSize); + IPage pageList = userMapper.selectPage(page, queryWrapper); + for (SysUser user : pageList.getRecords()) { + ComboModel model = new ComboModel(); + model.setUsername(user.getUsername()); + model.setTitle(user.getRealname()); + model.setId(user.getId()); + model.setEmail(user.getEmail()); + if (oConvertUtils.isNotEmpty(userIds)) { + String[] temp = userIds.split(","); + for (int i = 0; i < temp.length; i++) { + if (temp[i].equals(user.getId())) { + model.setChecked(true); + } + } + } + list.add(model); + } + json.put("list", list); + json.put("total", pageList.getTotal()); + return json; + } + + @Override + public List queryAllRole() { + List list = new ArrayList(); + List roleList = roleMapper.selectList(new QueryWrapper()); + for (SysRole role : roleList) { + ComboModel model = new ComboModel(); + model.setTitle(role.getRoleName()); + model.setId(role.getId()); + list.add(model); + } + return list; + } @Override public List queryAllRole(String[] roleIds) { List list = new ArrayList(); List roleList = roleMapper.selectList(new QueryWrapper()); - for(SysRole role : roleList){ + for (SysRole role : roleList) { ComboModel model = new ComboModel(); model.setTitle(role.getRoleName()); model.setId(role.getId()); model.setRoleCode(role.getRoleCode()); - if(oConvertUtils.isNotEmpty(roleIds)) { + if (oConvertUtils.isNotEmpty(roleIds)) { for (int i = 0; i < roleIds.length; i++) { if (roleIds[i].equals(role.getId())) { model.setChecked(true); @@ -792,1034 +792,1052 @@ public class SysBaseApiImpl implements ISysBaseAPI { return list; } - @Override - public List getRoleIdsByUsername(String username) { - return sysUserRoleMapper.getRoleIdByUserName(username); - } + @Override + public List getRoleIdsByUsername(String username) { + return sysUserRoleMapper.getRoleIdByUserName(username); + } - @Override - public String getDepartIdsByOrgCode(String orgCode) { - return departMapper.queryDepartIdByOrgCode(orgCode); - } + @Override + public String getDepartIdsByOrgCode(String orgCode) { + return departMapper.queryDepartIdByOrgCode(orgCode); + } - @Override - public List getAllSysDepart() { - List departModelList = new ArrayList(); - List departList = departMapper.selectList(new QueryWrapper().eq("del_flag","0")); - for(SysDepart depart : departList){ - SysDepartModel model = new SysDepartModel(); - BeanUtils.copyProperties(depart,model); - departModelList.add(model); - } - return departModelList; - } + @Override + public List getAllSysDepart() { + List departModelList = new ArrayList(); + List departList = departMapper.selectList(new QueryWrapper().eq("del_flag", "0")); + for (SysDepart depart : departList) { + SysDepartModel model = new SysDepartModel(); + BeanUtils.copyProperties(depart, model); + departModelList.add(model); + } + return departModelList; + } - @Override - public DynamicDataSourceModel getDynamicDbSourceById(String dbSourceId) { - SysDataSource dbSource = dataSourceService.getById(dbSourceId); - if(dbSource!=null && StringUtils.isNotBlank(dbSource.getDbPassword())){ - String dbPassword = dbSource.getDbPassword(); - String decodedStr = SecurityUtil.jiemi(dbPassword); - dbSource.setDbPassword(decodedStr); - } - return new DynamicDataSourceModel(dbSource); - } + @Override + public DynamicDataSourceModel getDynamicDbSourceById(String dbSourceId) { + SysDataSource dbSource = dataSourceService.getById(dbSourceId); + if (dbSource != null && StringUtils.isNotBlank(dbSource.getDbPassword())) { + String dbPassword = dbSource.getDbPassword(); + String decodedStr = SecurityUtil.jiemi(dbPassword); + dbSource.setDbPassword(decodedStr); + } + return new DynamicDataSourceModel(dbSource); + } - @Override - public DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode) { - SysDataSource dbSource = dataSourceService.getOne(new LambdaQueryWrapper().eq(SysDataSource::getCode, dbSourceCode)); - if(dbSource!=null && StringUtils.isNotBlank(dbSource.getDbPassword())){ - String dbPassword = dbSource.getDbPassword(); - String decodedStr = SecurityUtil.jiemi(dbPassword); - dbSource.setDbPassword(decodedStr); - } - return new DynamicDataSourceModel(dbSource); - } + @Override + public DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode) { + SysDataSource dbSource = dataSourceService.getOne(new LambdaQueryWrapper().eq(SysDataSource::getCode, dbSourceCode)); + if (dbSource != null && StringUtils.isNotBlank(dbSource.getDbPassword())) { + String dbPassword = dbSource.getDbPassword(); + String decodedStr = SecurityUtil.jiemi(dbPassword); + dbSource.setDbPassword(decodedStr); + } + return new DynamicDataSourceModel(dbSource); + } - @Override - public List getDeptHeadByDepId(String deptId) { - QueryWrapper queryWrapper = new QueryWrapper().eq("status", 1).eq("del_flag", 0); - //支持逗号分割传递多个部门id - if (oConvertUtils.isNotEmpty(deptId) && deptId.contains(SymbolConstant.COMMA)) { - String[] vals = deptId.split(SymbolConstant.COMMA); - queryWrapper.and(andWrapper -> { - for (int i = 0; i < vals.length; i++) { - andWrapper.like("depart_ids", vals[i]); - andWrapper.or(); - } - }); - } else { - queryWrapper.like("depart_ids", deptId); - } - - List userList = userMapper.selectList(queryWrapper); - List list = new ArrayList<>(); - for(SysUser user : userList){ - list.add(user.getUsername()); - } - return list; - } + @Override + public List getDeptHeadByDepId(String deptId) { + QueryWrapper queryWrapper = new QueryWrapper().eq("status", 1).eq("del_flag", 0); + //支持逗号分割传递多个部门id + if (oConvertUtils.isNotEmpty(deptId) && deptId.contains(SymbolConstant.COMMA)) { + String[] vals = deptId.split(SymbolConstant.COMMA); + queryWrapper.and(andWrapper -> { + for (int i = 0; i < vals.length; i++) { + andWrapper.like("depart_ids", vals[i]); + andWrapper.or(); + } + }); + } else { + queryWrapper.like("depart_ids", deptId); + } - @Override - public void sendWebSocketMsg(String[] userIds, String cmd) { - JSONObject obj = new JSONObject(); - obj.put(WebsocketConst.MSG_CMD, cmd); - webSocket.sendMessage(userIds, obj.toJSONString()); - } + List userList = userMapper.selectList(queryWrapper); + List list = new ArrayList<>(); + for (SysUser user : userList) { + list.add(user.getUsername()); + } + return list; + } - @Override - public List queryAllUserByIds(String[] userIds) { - QueryWrapper queryWrapper = new QueryWrapper().eq("status",1).eq("del_flag",0); - queryWrapper.in("id",userIds); - List loginUsers = new ArrayList<>(); - List sysUsers = userMapper.selectList(queryWrapper); - for (SysUser user:sysUsers) { - UserAccountInfo loginUser=new UserAccountInfo(); - BeanUtils.copyProperties(user, loginUser); - loginUsers.add(loginUser); - } - return loginUsers; - } + @Override + public void sendWebSocketMsg(String[] userIds, String cmd) { + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, cmd); + webSocket.sendMessage(userIds, obj.toJSONString()); + } - /** - * 推送签到人员信息 - * @param userId - */ - @Override - public void meetingSignWebsocket(String userId) { - JSONObject obj = new JSONObject(); - obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_SIGN); - obj.put(WebsocketConst.MSG_USER_ID,userId); - //TODO 目前全部推送,后面修改 - webSocket.sendMessage(obj.toJSONString()); - } + @Override + public List queryAllUserByIds(String[] userIds) { + QueryWrapper queryWrapper = new QueryWrapper().eq("status", 1).eq("del_flag", 0); + queryWrapper.in("id", userIds); + List loginUsers = new ArrayList<>(); + List sysUsers = userMapper.selectList(queryWrapper); + for (SysUser user : sysUsers) { + UserAccountInfo loginUser = new UserAccountInfo(); + BeanUtils.copyProperties(user, loginUser); + loginUsers.add(loginUser); + } + return loginUsers; + } - @Override - public List queryUserByNames(String[] userNames) { - QueryWrapper queryWrapper = new QueryWrapper().eq("status",1).eq("del_flag",0); - queryWrapper.in("username",userNames); - List loginUsers = new ArrayList<>(); - List sysUsers = userMapper.selectList(queryWrapper); - for (SysUser user:sysUsers) { - UserAccountInfo loginUser=new UserAccountInfo(); - BeanUtils.copyProperties(user, loginUser); - loginUsers.add(loginUser); - } - return loginUsers; - } + /** + * 推送签到人员信息 + * + * @param userId + */ + @Override + public void meetingSignWebsocket(String userId) { + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_SIGN); + obj.put(WebsocketConst.MSG_USER_ID, userId); + //TODO 目前全部推送,后面修改 + webSocket.sendMessage(obj.toJSONString()); + } - @Override - public List queryUserBySuperQuery(String superQuery,String matchType) { - List result=new ArrayList<>(); - Map parameterMap=new HashMap<>(); - parameterMap.put("superQueryMatchType",new String[]{matchType}); - parameterMap.put("superQueryParams",new String[]{superQuery}); - SysUser sysUser=new SysUser(); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysUser, parameterMap); - List list= sysUserService.list(queryWrapper); - if(ObjectUtils.isNotEmpty(list)){ - - //update-begin-author:taoyan date:2023-5-19 for: QQYUN-5326【简流】获取组织人员 单/多 筛选条件 没有部门筛选 - String departKey = "depart"; - QueryCondition departCondition = null; - try { - String temp = URLDecoder.decode(superQuery, "UTF-8"); - List conditions = JSON.parseArray(temp, QueryCondition.class); - for(QueryCondition condition: conditions){ - if(departKey.equals(condition.getField())){ - departCondition = condition; - break; - } - } - } catch (UnsupportedEncodingException e) { - log.error("查询用户信息,查询条件json转化失败", e); - } - - for (SysUser user : list) { - JSONObject userJson = JSONObject.parseObject(JSONObject.toJSONString(user)); - List departList = sysDepartService.queryDepartsByUsername(user.getUsername()); - List departIds = null; - if(departList!=null && departList.size()>0){ - departIds = departList.stream().map(i->i.getId()).collect(Collectors.toList()); - List departNames = departList.stream().map(i->i.getDepartName()).collect(Collectors.toList()); - userJson.put(departKey, oConvertUtils.list2JSONArray(departIds)); - userJson.put(departKey+"_dictText", String.join(",", departNames)); - } - boolean flag = getDepartConditionResult(departCondition, departIds); - if(flag){ - result.add(userJson); - } - //update-end-author:taoyan date:2023-5-19 for: QQYUN-5326【简流】获取组织人员 单/多 筛选条件 没有部门筛选 - - } - } - return result; - } + @Override + public List queryUserByNames(String[] userNames) { + QueryWrapper queryWrapper = new QueryWrapper().eq("status", 1).eq("del_flag", 0); + queryWrapper.in("username", userNames); + List loginUsers = new ArrayList<>(); + List sysUsers = userMapper.selectList(queryWrapper); + for (SysUser user : sysUsers) { + UserAccountInfo loginUser = new UserAccountInfo(); + BeanUtils.copyProperties(user, loginUser); + loginUsers.add(loginUser); + } + return loginUsers; + } - /** - * 判断用户的部门是否满足条件 -等于/不等于/在--中/不在--中/为空/不为空 - * QQYUN-5326【简流】获取组织人员 单/多 筛选条件 没有部门筛选 - * @param departCondition - * @param departIds - * @return - */ - private boolean getDepartConditionResult(QueryCondition departCondition, List departIds){ - if(departCondition == null){ - return true; - } - QueryRuleEnum rule = QueryRuleEnum.getByValue(departCondition.getRule()); - String conditionVal = departCondition.getVal(); - if(rule == QueryRuleEnum.EMPTY){ - if(departIds==null || departIds.size()==0){ - return true; - } - }else if (rule == QueryRuleEnum.NOT_EMPTY){ - if(departIds!=null && departIds.size()>0){ - return true; - } - }else{ - if(oConvertUtils.isEmpty(conditionVal)){ - return false; - } - if(departIds==null || departIds.size()==0){ - return false; - } - List conditionList; - if(conditionVal.startsWith("[") && conditionVal.endsWith("]")){ - conditionList = JSONArray.parseArray(conditionVal, String.class); - }else{ - conditionList = new ArrayList(Arrays.asList(conditionVal.split(","))); - } - if(rule == QueryRuleEnum.EQ){ - if(oConvertUtils.isEqList(conditionList, departIds)){ - return true; - } - }else if(rule == QueryRuleEnum.NE){ - if(!oConvertUtils.isEqList(conditionList, departIds)){ - return true; - } - }else if(rule == QueryRuleEnum.IN){ - if(oConvertUtils.isInList(departIds, conditionList)){ - return true; - } - }else if(rule == QueryRuleEnum.NOT_IN){ - if(!oConvertUtils.isInList(departIds, conditionList)){ - return true; - } - } - } - return false; - } + @Override + public List queryUserBySuperQuery(String superQuery, String matchType) { + List result = new ArrayList<>(); + Map parameterMap = new HashMap<>(); + parameterMap.put("superQueryMatchType", new String[]{matchType}); + parameterMap.put("superQueryParams", new String[]{superQuery}); + SysUser sysUser = new SysUser(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysUser, parameterMap); + List list = sysUserService.list(queryWrapper); + if (ObjectUtils.isNotEmpty(list)) { - @Override - public JSONObject queryUserById(String id) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().eq(true, SysUser::getId, id); - SysUser sysUser = sysUserService.getOne(queryWrapper); - if (ObjectUtils.isNotEmpty(sysUser)) { - return JSONObject.parseObject(JSONObject.toJSONString(sysUser)); - } - return null; - } + //update-begin-author:taoyan date:2023-5-19 for: QQYUN-5326【简流】获取组织人员 单/多 筛选条件 没有部门筛选 + String departKey = "depart"; + QueryCondition departCondition = null; + try { + String temp = URLDecoder.decode(superQuery, "UTF-8"); + List conditions = JSON.parseArray(temp, QueryCondition.class); + for (QueryCondition condition : conditions) { + if (departKey.equals(condition.getField())) { + departCondition = condition; + break; + } + } + } catch (UnsupportedEncodingException e) { + log.error("查询用户信息,查询条件json转化失败", e); + } - @Override - public List queryDeptBySuperQuery(String superQuery,String matchType) { - List result=new ArrayList<>(); - Map parameterMap=new HashMap<>(); - parameterMap.put("superQueryMatchType",new String[]{matchType}); - parameterMap.put("superQueryParams",new String[]{superQuery}); - SysDepart sysDepart=new SysDepart(); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepart, parameterMap); - List list= sysDepartService.list(queryWrapper); - if(ObjectUtils.isNotEmpty(list)){ - for (SysDepart depart: list) { - result.add(JSONObject.parseObject(JSONObject.toJSONString(depart))); - } - } - return result; - } + for (SysUser user : list) { + JSONObject userJson = JSONObject.parseObject(JSONObject.toJSONString(user)); + List departList = sysDepartService.queryDepartsByUsername(user.getUsername()); + List departIds = null; + if (departList != null && departList.size() > 0) { + departIds = departList.stream().map(i -> i.getId()).collect(Collectors.toList()); + List departNames = departList.stream().map(i -> i.getDepartName()).collect(Collectors.toList()); + userJson.put(departKey, oConvertUtils.list2JSONArray(departIds)); + userJson.put(departKey + "_dictText", String.join(",", departNames)); + } + boolean flag = getDepartConditionResult(departCondition, departIds); + if (flag) { + result.add(userJson); + } + //update-end-author:taoyan date:2023-5-19 for: QQYUN-5326【简流】获取组织人员 单/多 筛选条件 没有部门筛选 - @Override - public List queryRoleBySuperQuery(String superQuery,String matchType) { - List result=new ArrayList<>(); - Map parameterMap=new HashMap<>(); - parameterMap.put("superQueryMatchType",new String[]{matchType}); - parameterMap.put("superQueryParams",new String[]{superQuery}); - SysRole sysDepart=new SysRole(); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepart, parameterMap); - List list= sysRoleService.list(queryWrapper); - if(ObjectUtils.isNotEmpty(list)){ - for (SysRole role: list) { - result.add(JSONObject.parseObject(JSONObject.toJSONString(role))); - } - } - return result; - } + } + } + return result; + } - @Override - public List selectUserIdByTenantId(String tenantId) { - QueryWrapper queryWrapper=new QueryWrapper(); - queryWrapper.select("user_id"); - queryWrapper.eq("tenant_id",tenantId); - return sysUserTenantService.listObjs(queryWrapper,e->e.toString()); - } + /** + * 判断用户的部门是否满足条件 -等于/不等于/在--中/不在--中/为空/不为空 + * QQYUN-5326【简流】获取组织人员 单/多 筛选条件 没有部门筛选 + * + * @param departCondition + * @param departIds + * @return + */ + private boolean getDepartConditionResult(QueryCondition departCondition, List departIds) { + if (departCondition == null) { + return true; + } + QueryRuleEnum rule = QueryRuleEnum.getByValue(departCondition.getRule()); + String conditionVal = departCondition.getVal(); + if (rule == QueryRuleEnum.EMPTY) { + if (departIds == null || departIds.size() == 0) { + return true; + } + } else if (rule == QueryRuleEnum.NOT_EMPTY) { + if (departIds != null && departIds.size() > 0) { + return true; + } + } else { + if (oConvertUtils.isEmpty(conditionVal)) { + return false; + } + if (departIds == null || departIds.size() == 0) { + return false; + } + List conditionList; + if (conditionVal.startsWith("[") && conditionVal.endsWith("]")) { + conditionList = JSONArray.parseArray(conditionVal, String.class); + } else { + conditionList = new ArrayList(Arrays.asList(conditionVal.split(","))); + } + if (rule == QueryRuleEnum.EQ) { + if (oConvertUtils.isEqList(conditionList, departIds)) { + return true; + } + } else if (rule == QueryRuleEnum.NE) { + if (!oConvertUtils.isEqList(conditionList, departIds)) { + return true; + } + } else if (rule == QueryRuleEnum.IN) { + if (oConvertUtils.isInList(departIds, conditionList)) { + return true; + } + } else if (rule == QueryRuleEnum.NOT_IN) { + if (!oConvertUtils.isInList(departIds, conditionList)) { + return true; + } + } + } + return false; + } - @Override - public SysDepartModel selectAllById(String id) { - SysDepart sysDepart = sysDepartService.getById(id); - SysDepartModel sysDepartModel = new SysDepartModel(); - BeanUtils.copyProperties(sysDepart,sysDepartModel); - return sysDepartModel; - } + @Override + public JSONObject queryUserById(String id) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(true, SysUser::getId, id); + SysUser sysUser = sysUserService.getOne(queryWrapper); + if (ObjectUtils.isNotEmpty(sysUser)) { + return JSONObject.parseObject(JSONObject.toJSONString(sysUser)); + } + return null; + } - @Override - public List queryDeptUsersByUserId(String userId) { - List userIds = new ArrayList<>(); - List userDepartList = sysUserDepartService.list(new QueryWrapper().eq("user_id",userId)); - if(userDepartList != null){ - //查找所属公司 - String orgCodes = ""; - StringBuilder orgCodesBuilder = new StringBuilder(); + @Override + public List queryDeptBySuperQuery(String superQuery, String matchType) { + List result = new ArrayList<>(); + Map parameterMap = new HashMap<>(); + parameterMap.put("superQueryMatchType", new String[]{matchType}); + parameterMap.put("superQueryParams", new String[]{superQuery}); + SysDepart sysDepart = new SysDepart(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepart, parameterMap); + List list = sysDepartService.list(queryWrapper); + if (ObjectUtils.isNotEmpty(list)) { + for (SysDepart depart : list) { + result.add(JSONObject.parseObject(JSONObject.toJSONString(depart))); + } + } + return result; + } + + @Override + public List queryRoleBySuperQuery(String superQuery, String matchType) { + List result = new ArrayList<>(); + Map parameterMap = new HashMap<>(); + parameterMap.put("superQueryMatchType", new String[]{matchType}); + parameterMap.put("superQueryParams", new String[]{superQuery}); + SysRole sysDepart = new SysRole(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepart, parameterMap); + List list = sysRoleService.list(queryWrapper); + if (ObjectUtils.isNotEmpty(list)) { + for (SysRole role : list) { + result.add(JSONObject.parseObject(JSONObject.toJSONString(role))); + } + } + return result; + } + + @Override + public List selectUserIdByTenantId(String tenantId) { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.select("user_id"); + queryWrapper.eq("tenant_id", tenantId); + return sysUserTenantService.listObjs(queryWrapper, e -> e.toString()); + } + + @Override + public SysDepartModel selectAllById(String id) { + SysDepart sysDepart = sysDepartService.getById(id); + SysDepartModel sysDepartModel = new SysDepartModel(); + BeanUtils.copyProperties(sysDepart, sysDepartModel); + return sysDepartModel; + } + + @Override + public List queryDeptUsersByUserId(String userId) { + List userIds = new ArrayList<>(); + List userDepartList = sysUserDepartService.list(new QueryWrapper().eq("user_id", userId)); + if (userDepartList != null) { + //查找所属公司 + String orgCodes = ""; + StringBuilder orgCodesBuilder = new StringBuilder(); orgCodesBuilder.append(orgCodes); - for(SysUserDepart userDepart : userDepartList){ - //查询所属公司编码 - SysDepart depart = sysDepartService.getById(userDepart.getDepId()); - int length = YouBianCodeUtil.ZHANWEI_LENGTH; - String compyOrgCode = ""; - if(depart != null && depart.getOrgCode() != null){ - compyOrgCode = depart.getOrgCode().substring(0,length); - if(orgCodes.indexOf(compyOrgCode) == -1){ + for (SysUserDepart userDepart : userDepartList) { + //查询所属公司编码 + SysDepart depart = sysDepartService.getById(userDepart.getDepId()); + int length = YouBianCodeUtil.ZHANWEI_LENGTH; + String compyOrgCode = ""; + if (depart != null && depart.getOrgCode() != null) { + compyOrgCode = depart.getOrgCode().substring(0, length); + if (orgCodes.indexOf(compyOrgCode) == -1) { orgCodesBuilder.append(SymbolConstant.COMMA).append(compyOrgCode); - } - } - } + } + } + } orgCodes = orgCodesBuilder.toString(); - if(oConvertUtils.isNotEmpty(orgCodes)){ - orgCodes = orgCodes.substring(1); - List listIds = departMapper.getSubDepIdsByOrgCodes(orgCodes.split(",")); - List userList = sysUserDepartService.list(new QueryWrapper().in("dep_id",listIds)); - for(SysUserDepart userDepart : userList){ - if(!userIds.contains(userDepart.getUserId())){ - userIds.add(userDepart.getUserId()); - } - } - } - } - return userIds; - } + if (oConvertUtils.isNotEmpty(orgCodes)) { + orgCodes = orgCodes.substring(1); + List listIds = departMapper.getSubDepIdsByOrgCodes(orgCodes.split(",")); + List userList = sysUserDepartService.list(new QueryWrapper().in("dep_id", listIds)); + for (SysUserDepart userDepart : userList) { + if (!userIds.contains(userDepart.getUserId())) { + userIds.add(userDepart.getUserId()); + } + } + } + } + return userIds; + } - /** - * 查询用户拥有的角色集合 - * @param username - * @return - */ - @Override - public Set getUserRoleSet(String username) { - // 查询用户拥有的角色集合 - List roles = sysUserRoleMapper.getRoleByUserName(username); - log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size())); - return new HashSet<>(roles); - } - - - /** - * 查询用户拥有的角色集合 - * @param useId - * @return - */ - @Override - public Set getUserRoleSetById(String useId) { - // 查询用户拥有的角色集合 - List roles = sysUserRoleMapper.getRoleCodeByUserId(useId); - log.info("-------通过数据库读取用户拥有的角色Rules------useId: " + useId + ",Roles size: " + (roles == null ? 0 : roles.size())); - return new HashSet<>(roles); - } + /** + * 查询用户拥有的角色集合 + * + * @param username + * @return + */ + @Override + public Set getUserRoleSet(String username) { + // 查询用户拥有的角色集合 + List roles = sysUserRoleMapper.getRoleByUserName(username); + log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size())); + return new HashSet<>(roles); + } - /** - * 查询用户拥有的权限集合 - * @param userId - * @return - */ - @Override - public Set getUserPermissionSet(String userId) { - Set permissionSet = new HashSet<>(); - List permissionList = sysPermissionMapper.queryByUser(userId); - //================= begin 开启租户的时候 如果没有test角色,默认加入test角色================ - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - if (permissionList == null) { - permissionList = new ArrayList<>(); - } - List testRoleList = sysPermissionMapper.queryPermissionByTestRoleId(); - permissionList.addAll(testRoleList); - } - //================= end 开启租户的时候 如果没有test角色,默认加入test角色================ - for (SysPermission po : permissionList) { + + /** + * 查询用户拥有的角色集合 + * + * @param useId + * @return + */ + @Override + public Set getUserRoleSetById(String useId) { + // 查询用户拥有的角色集合 + List roles = sysUserRoleMapper.getRoleCodeByUserId(useId); + log.info("-------通过数据库读取用户拥有的角色Rules------useId: " + useId + ",Roles size: " + (roles == null ? 0 : roles.size())); + return new HashSet<>(roles); + } + + /** + * 查询用户拥有的权限集合 + * + * @param userId + * @return + */ + @Override + public Set getUserPermissionSet(String userId) { + Set permissionSet = new HashSet<>(); + List permissionList = sysPermissionMapper.queryByUser(userId); + //================= begin 开启租户的时候 如果没有test角色,默认加入test角色================ + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + if (permissionList == null) { + permissionList = new ArrayList<>(); + } + List testRoleList = sysPermissionMapper.queryPermissionByTestRoleId(); + permissionList.addAll(testRoleList); + } + //================= end 开启租户的时候 如果没有test角色,默认加入test角色================ + for (SysPermission po : permissionList) { // // TODO URL规则有问题? // if (oConvertUtils.isNotEmpty(po.getUrl())) { // permissionSet.add(po.getUrl()); // } - if (oConvertUtils.isNotEmpty(po.getPerms())) { - permissionSet.add(po.getPerms()); - } - } - log.info("-------通过数据库读取用户拥有的权限Perms------userId: "+ userId+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) ); - return permissionSet; - } + if (oConvertUtils.isNotEmpty(po.getPerms())) { + permissionSet.add(po.getPerms()); + } + } + log.info("-------通过数据库读取用户拥有的权限Perms------userId: " + userId + ",Perms size: " + (permissionSet == null ? 0 : permissionSet.size())); + return permissionSet; + } - /** - * 判断online菜单是否有权限 - * @param onlineAuthDTO - * @return - */ - @Override - public boolean hasOnlineAuth(OnlineAuthDTO onlineAuthDTO) { - String username = onlineAuthDTO.getUsername(); - List possibleUrl = onlineAuthDTO.getPossibleUrl(); - String onlineFormUrl = onlineAuthDTO.getOnlineFormUrl(); - //查询菜单 - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysPermission::getDelFlag, 0); - query.in(SysPermission::getUrl, possibleUrl); - List permissionList = sysPermissionMapper.selectList(query); - if (permissionList == null || permissionList.size() == 0) { - //没有配置菜单 找online表单菜单地址 - SysPermission sysPermission = new SysPermission(); - sysPermission.setUrl(onlineFormUrl); - int count = sysPermissionMapper.queryCountByUsername(username, sysPermission); - if(count<=0){ - //update-begin---author:chenrui ---date:20240123 for:[QQYUN-7992]【online】工单申请下的online表单,未配置online表单开发菜单,操作报错无权限------------ - sysPermission.setUrl(onlineAuthDTO.getOnlineWorkOrderUrl()); - count = sysPermissionMapper.queryCountByUsername(username, sysPermission); - if(count<=0) { - return false; - } - //update-end---author:chenrui ---date:20240123 for:[QQYUN-7992]【online】工单申请下的online表单,未配置online表单开发菜单,操作报错无权限------------ - } - } else { - //找到菜单了 - boolean has = false; - for (SysPermission p : permissionList) { - int count = sysPermissionMapper.queryCountByUsername(username, p); - has = has || (count>0); - } - return has; - } - return true; - } + /** + * 判断online菜单是否有权限 + * + * @param onlineAuthDTO + * @return + */ + @Override + public boolean hasOnlineAuth(OnlineAuthDTO onlineAuthDTO) { + String username = onlineAuthDTO.getUsername(); + List possibleUrl = onlineAuthDTO.getPossibleUrl(); + String onlineFormUrl = onlineAuthDTO.getOnlineFormUrl(); + //查询菜单 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, 0); + query.in(SysPermission::getUrl, possibleUrl); + List permissionList = sysPermissionMapper.selectList(query); + if (permissionList == null || permissionList.size() == 0) { + //没有配置菜单 找online表单菜单地址 + SysPermission sysPermission = new SysPermission(); + sysPermission.setUrl(onlineFormUrl); + int count = sysPermissionMapper.queryCountByUsername(username, sysPermission); + if (count <= 0) { + //update-begin---author:chenrui ---date:20240123 for:[QQYUN-7992]【online】工单申请下的online表单,未配置online表单开发菜单,操作报错无权限------------ + sysPermission.setUrl(onlineAuthDTO.getOnlineWorkOrderUrl()); + count = sysPermissionMapper.queryCountByUsername(username, sysPermission); + if (count <= 0) { + return false; + } + //update-end---author:chenrui ---date:20240123 for:[QQYUN-7992]【online】工单申请下的online表单,未配置online表单开发菜单,操作报错无权限------------ + } + } else { + //找到菜单了 + boolean has = false; + for (SysPermission p : permissionList) { + int count = sysPermissionMapper.queryCountByUsername(username, p); + has = has || (count > 0); + } + return has; + } + return true; + } - /** - * 查询用户拥有的角色集合 common api 里面的接口实现 - * @param username - * @return - */ - @Override - public Set queryUserRoles(String username) { - return getUserRoleSet(username); - } + /** + * 查询用户拥有的角色集合 common api 里面的接口实现 + * + * @param username + * @return + */ + @Override + public Set queryUserRoles(String username) { + return getUserRoleSet(username); + } - @Override - public Set queryUserRolesById(String userId) { - return getUserRoleSetById(userId); - } + @Override + public Set queryUserRolesById(String userId) { + return getUserRoleSetById(userId); + } - /** - * 查询用户拥有的权限集合 common api 里面的接口实现 - * @param userId - * @return - */ - @Override - public Set queryUserAuths(String userId) { - return getUserPermissionSet(userId); - } + /** + * 查询用户拥有的权限集合 common api 里面的接口实现 + * + * @param userId + * @return + */ + @Override + public Set queryUserAuths(String userId) { + return getUserPermissionSet(userId); + } - /** - * 36根据多个用户账号(逗号分隔),查询返回多个用户信息 - * @param usernames - * @return - */ - @Override - public List queryUsersByUsernames(String usernames) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysUser::getUsername,usernames.split(",")); - return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class); - } + /** + * 36根据多个用户账号(逗号分隔),查询返回多个用户信息 + * + * @param usernames + * @return + */ + @Override + public List queryUsersByUsernames(String usernames) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysUser::getUsername, usernames.split(",")); + return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class); + } - @Override - public List queryUsersByIds(String ids) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysUser::getId,ids.split(",")); - return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class); - } + @Override + public List queryUsersByIds(String ids) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysUser::getId, ids.split(",")); + return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class); + } - /** - * 37根据多个部门编码(逗号分隔),查询返回多个部门信息 - * @param orgCodes - * @return - */ - @Override - public List queryDepartsByOrgcodes(String orgCodes) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysDepart::getOrgCode,orgCodes.split(",")); - return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class); - } + /** + * 37根据多个部门编码(逗号分隔),查询返回多个部门信息 + * + * @param orgCodes + * @return + */ + @Override + public List queryDepartsByOrgcodes(String orgCodes) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysDepart::getOrgCode, orgCodes.split(",")); + return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class); + } - @Override - public List queryDepartsByIds(String ids) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysDepart::getId,ids.split(",")); - return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class); - } + @Override + public List queryDepartsByIds(String ids) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysDepart::getId, ids.split(",")); + return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class); + } - /** - * 发消息 - * @param fromUser - * @param toUser - * @param title - * @param msgContent - * @param setMsgCategory - */ - private void sendSysAnnouncement(String fromUser, String toUser, String title, String msgContent, String setMsgCategory) { - SysAnnouncement announcement = new SysAnnouncement(); - announcement.setTitile(title); - announcement.setMsgContent(msgContent); - announcement.setSender(fromUser); - announcement.setPriority(CommonConstant.PRIORITY_M); - announcement.setMsgType(CommonConstant.MSG_TYPE_UESR); - announcement.setSendStatus(CommonConstant.HAS_SEND); - announcement.setSendTime(new Date()); - announcement.setMsgCategory(setMsgCategory); - announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); - sysAnnouncementMapper.insert(announcement); - // 2.插入用户通告阅读标记表记录 - String userId = toUser; - String[] userIds = userId.split(","); - String anntId = announcement.getId(); - for(int i=0;i getDeptUserByOrgCode(String orgCode) { - //1.获取公司信息 - SysDepart comp=sysDepartService.queryCompByOrgCode(orgCode); - if(comp!=null){ - //2.获取公司下级部门 - List departs=sysDepartService.queryDeptByPid(comp.getId()); - //3.获取部门下的人员信息 - List list=new ArrayList(); - //4.处理部门和下级用户数据 - for (SysDepart dept:departs) { - Map map=new HashMap(5); - //部门名称 - String departName = dept.getDepartName(); - //根据部门编码获取下级部门id - List listIds = departMapper.getSubDepIdsByDepId(dept.getId()); - //根据下级部门ids获取下级部门的所有用户 - List userList = sysUserDepartService.list(new QueryWrapper().in("dep_id",listIds)); - List userIds = new ArrayList<>(); - for(SysUserDepart userDepart : userList){ - if(!userIds.contains(userDepart.getUserId())){ - userIds.add(userDepart.getUserId()); - } - } - map.put("name",departName); - map.put("ids",userIds); - list.add(map); - } - return list; - } - return null; - } + log.info("Email Html Text:{}", htmlText); + emailHandle.sendMsg(email, title, htmlText); + } - /** - * 查询分类字典翻译 - * - * @param ids 分类字典表id - * @return - */ - @Override - public List loadCategoryDictItem(String ids) { - return sysCategoryService.loadDictItem(ids, false); - } + /** + * 获取公司下级部门和所有用户id信息 + * + * @param orgCode + * @return + */ + @Override + public List getDeptUserByOrgCode(String orgCode) { + //1.获取公司信息 + SysDepart comp = sysDepartService.queryCompByOrgCode(orgCode); + if (comp != null) { + //2.获取公司下级部门 + List departs = sysDepartService.queryDeptByPid(comp.getId()); + //3.获取部门下的人员信息 + List list = new ArrayList(); + //4.处理部门和下级用户数据 + for (SysDepart dept : departs) { + Map map = new HashMap(5); + //部门名称 + String departName = dept.getDepartName(); + //根据部门编码获取下级部门id + List listIds = departMapper.getSubDepIdsByDepId(dept.getId()); + //根据下级部门ids获取下级部门的所有用户 + List userList = sysUserDepartService.list(new QueryWrapper().in("dep_id", listIds)); + List userIds = new ArrayList<>(); + for (SysUserDepart userDepart : userList) { + if (!userIds.contains(userDepart.getUserId())) { + userIds.add(userDepart.getUserId()); + } + } + map.put("name", departName); + map.put("ids", userIds); + list.add(map); + } + return list; + } + return null; + } - @Override - public List loadCategoryDictItemByNames(String names, boolean delNotExist) { - return sysCategoryService.loadDictItemByNames(names, delNotExist); - } + /** + * 查询分类字典翻译 + * + * @param ids 分类字典表id + * @return + */ + @Override + public List loadCategoryDictItem(String ids) { + return sysCategoryService.loadDictItem(ids, false); + } - /** - * 根据字典code加载字典text - * - * @param dictCode 顺序:tableName,text,code - * @param keys 要查询的key - * @return - */ - @Override - public List loadDictItem(String dictCode, String keys) { - String[] params = dictCode.split(","); - return sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys, false); - } + @Override + public List loadCategoryDictItemByNames(String names, boolean delNotExist) { + return sysCategoryService.loadDictItemByNames(names, delNotExist); + } - @Override - public Map copyLowAppDict(String originalAppId, String appId, String tenantId) { - Map dictCodeMapping = new HashMap(); - List ls = sysDictService.getDictListByLowAppId(originalAppId); - for (SysDictVo vo : ls) { - vo.setId(null); - vo.setLowAppId(appId); - vo.setTenantId(oConvertUtils.getInt(tenantId, null)); - String newDictCode = sysDictService.addDictByLowAppId(vo); - dictCodeMapping.put(vo.getDictCode(), newDictCode); - } + /** + * 根据字典code加载字典text + * + * @param dictCode 顺序:tableName,text,code + * @param keys 要查询的key + * @return + */ + @Override + public List loadDictItem(String dictCode, String keys) { + String[] params = dictCode.split(","); + return sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys, false); + } - log.info(" --- 批量复制应用下的字典到新租户下 —— 原应用ID:{},新应用ID:{},新租户ID:{},字典个数:{} --- ", originalAppId, appId, tenantId, dictCodeMapping.size()); - return dictCodeMapping; - } + @Override + public Map copyLowAppDict(String originalAppId, String appId, String tenantId) { + Map dictCodeMapping = new HashMap(); + List ls = sysDictService.getDictListByLowAppId(originalAppId); + for (SysDictVo vo : ls) { + vo.setId(null); + vo.setLowAppId(appId); + vo.setTenantId(oConvertUtils.getInt(tenantId, null)); + String newDictCode = sysDictService.addDictByLowAppId(vo); + dictCodeMapping.put(vo.getDictCode(), newDictCode); + } - /** - * 根据字典code查询字典项 - * - * @param dictCode 顺序:tableName,text,code - * @param dictCode 要查询的key - * @return - */ - @Override - public List getDictItems(String dictCode) { - List ls = sysDictService.getDictItems(dictCode); - if (ls == null) { - ls = new ArrayList<>(); - } - return ls; - } + log.info(" --- 批量复制应用下的字典到新租户下 —— 原应用ID:{},新应用ID:{},新租户ID:{},字典个数:{} --- ", originalAppId, appId, tenantId, dictCodeMapping.size()); + return dictCodeMapping; + } - /** - * 根据多个字典code查询多个字典项 - * - * @param dictCodeList - * @return key = dictCode ; value=对应的字典项 - */ - @Override - public Map> getManyDictItems(List dictCodeList) { - return sysDictService.queryDictItemsByCodeList(dictCodeList); - } + /** + * 根据字典code查询字典项 + * + * @param dictCode 顺序:tableName,text,code + * @param dictCode 要查询的key + * @return + */ + @Override + public List getDictItems(String dictCode) { + List ls = sysDictService.getDictItems(dictCode); + if (ls == null) { + ls = new ArrayList<>(); + } + return ls; + } - /** - * 【下拉搜索】 - * 大数据量的字典表 走异步加载,即前端输入内容过滤数据 - * - * @param dictCode 字典code格式:table,text,code - * @param keyword 过滤关键字 - * @return - */ - @Override - public List loadDictItemByKeyword(String dictCode, String keyword, Integer pageSize) { - return sysDictService.loadDict(dictCode, keyword, pageSize); - } + /** + * 根据多个字典code查询多个字典项 + * + * @param dictCodeList + * @return key = dictCode ; value=对应的字典项 + */ + @Override + public Map> getManyDictItems(List dictCodeList) { + return sysDictService.queryDictItemsByCodeList(dictCodeList); + } - @Override - public Map> translateManyDict(String dictCodes, String keys) { - List dictCodeList = Arrays.asList(dictCodes.split(",")); - List values = Arrays.asList(keys.split(",")); - //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ - return sysDictService.queryManyDictByKeys(dictCodeList, values); - //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ - } + /** + * 【下拉搜索】 + * 大数据量的字典表 走异步加载,即前端输入内容过滤数据 + * + * @param dictCode 字典code格式:table,text,code + * @param keyword 过滤关键字 + * @return + */ + @Override + public List loadDictItemByKeyword(String dictCode, String keyword, Integer pageSize) { + return sysDictService.loadDict(dictCode, keyword, pageSize); + } - //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ - @Override - public List translateDictFromTableByKeys(String table, String text, String code, String keys, String dataSource) { - return sysDictService.queryTableDictTextByKeys(table, text, code, Arrays.asList(keys.split(",")), dataSource); - } - //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + @Override + public Map> translateManyDict(String dictCodes, String keys) { + List dictCodeList = Arrays.asList(dictCodes.split(",")); + List values = Arrays.asList(keys.split(",")); + //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + return sysDictService.queryManyDictByKeys(dictCodeList, values); + //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + } - //-------------------------------------流程节点发送模板消息----------------------------------------------- - @Autowired - private QywxSendMsgHandle qywxSendMsgHandle; + //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + @Override + public List translateDictFromTableByKeys(String table, String text, String code, String keys, String dataSource) { + return sysDictService.queryTableDictTextByKeys(table, text, code, Arrays.asList(keys.split(",")), dataSource); + } + //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ - @Autowired - private SystemSendMsgHandle systemSendMsgHandle; + //-------------------------------------流程节点发送模板消息----------------------------------------------- + @Autowired + private QywxSendMsgHandle qywxSendMsgHandle; - @Autowired - private EmailSendMsgHandle emailSendMsgHandle; + @Autowired + private SystemSendMsgHandle systemSendMsgHandle; - @Autowired - private DdSendMsgHandle ddSendMsgHandle; + @Autowired + private EmailSendMsgHandle emailSendMsgHandle; - @Override - public void sendTemplateMessage(MessageDTO message) { - String messageType = message.getType(); - log.debug(" 【万能通用】推送消息 messageType = {}", messageType); - //update-begin-author:taoyan date:2022-7-9 for: 将模板解析代码移至消息发送, 而不是调用的地方 - String templateCode = message.getTemplateCode(); - if(oConvertUtils.isNotEmpty(templateCode)){ - SysMessageTemplate templateEntity = getTemplateEntity(templateCode); - boolean isMarkdown = CommonConstant.MSG_TEMPLATE_TYPE_MD.equals(templateEntity.getTemplateType()); - String content = templateEntity.getTemplateContent(); - if(oConvertUtils.isNotEmpty(content) && null!=message.getData()){ - content = FreemarkerParseFactory.parseTemplateContent(content, message.getData(), isMarkdown); - } - message.setIsMarkdown(isMarkdown); - message.setContent(content); - } - if(oConvertUtils.isEmpty(message.getContent())){ - log.error("发送消息失败,消息内容为空!"); - throw new JeecgBootException("发送消息失败,消息内容为空!"); - } + @Autowired + private DdSendMsgHandle ddSendMsgHandle; - //update-end-author:taoyan date:2022-7-9 for: 将模板解析代码移至消息发送, 而不是调用的地方 - if(MessageTypeEnum.XT.getType().equals(messageType)){ - if (message.isMarkdown()) { - // 系统消息要解析Markdown - message.setContent(HTMLUtils.parseMarkdown(message.getContent())); - } - systemSendMsgHandle.sendMessage(message); - }else if(MessageTypeEnum.YJ.getType().equals(messageType)){ - if (message.isMarkdown()) { - // 邮件消息要解析Markdown - message.setContent(HTMLUtils.parseMarkdown(message.getContent())); - } - emailSendMsgHandle.sendMessage(message); - }else if(MessageTypeEnum.DD.getType().equals(messageType)){ - ddSendMsgHandle.sendMessage(message); - }else if(MessageTypeEnum.QYWX.getType().equals(messageType)){ - qywxSendMsgHandle.sendMessage(message); - } - } + @Override + public void sendTemplateMessage(MessageDTO message) { + String messageType = message.getType(); + log.debug(" 【万能通用】推送消息 messageType = {}", messageType); + //update-begin-author:taoyan date:2022-7-9 for: 将模板解析代码移至消息发送, 而不是调用的地方 + String templateCode = message.getTemplateCode(); + if (oConvertUtils.isNotEmpty(templateCode)) { + SysMessageTemplate templateEntity = getTemplateEntity(templateCode); + boolean isMarkdown = CommonConstant.MSG_TEMPLATE_TYPE_MD.equals(templateEntity.getTemplateType()); + String content = templateEntity.getTemplateContent(); + if (oConvertUtils.isNotEmpty(content) && null != message.getData()) { + content = FreemarkerParseFactory.parseTemplateContent(content, message.getData(), isMarkdown); + } + message.setIsMarkdown(isMarkdown); + message.setContent(content); + } + if (oConvertUtils.isEmpty(message.getContent())) { + log.error("发送消息失败,消息内容为空!"); + throw new JeecgBootException("发送消息失败,消息内容为空!"); + } - @Override - public String getTemplateContent(String code) { - List list = sysMessageTemplateService.selectByCode(code); - if(list==null || list.size()==0){ - return null; - } - return list.get(0).getTemplateContent(); - } + //update-end-author:taoyan date:2022-7-9 for: 将模板解析代码移至消息发送, 而不是调用的地方 + if (MessageTypeEnum.XT.getType().equals(messageType)) { + if (message.isMarkdown()) { + // 系统消息要解析Markdown + message.setContent(HTMLUtils.parseMarkdown(message.getContent())); + } + systemSendMsgHandle.sendMessage(message); + } else if (MessageTypeEnum.YJ.getType().equals(messageType)) { + if (message.isMarkdown()) { + // 邮件消息要解析Markdown + message.setContent(HTMLUtils.parseMarkdown(message.getContent())); + } + emailSendMsgHandle.sendMessage(message); + } else if (MessageTypeEnum.DD.getType().equals(messageType)) { + ddSendMsgHandle.sendMessage(message); + } else if (MessageTypeEnum.QYWX.getType().equals(messageType)) { + qywxSendMsgHandle.sendMessage(message); + } + } - /** - * 获取模板内容,解析markdown - * - * @param code - * @return - */ - public SysMessageTemplate getTemplateEntity(String code) { - List list = sysMessageTemplateService.selectByCode(code); - if (list == null || list.size() == 0) { - return null; - } - return list.get(0); - } + @Override + public String getTemplateContent(String code) { + List list = sysMessageTemplateService.selectByCode(code); + if (list == null || list.size() == 0) { + return null; + } + return list.get(0).getTemplateContent(); + } - //-------------------------------------流程节点发送模板消息----------------------------------------------- + /** + * 获取模板内容,解析markdown + * + * @param code + * @return + */ + public SysMessageTemplate getTemplateEntity(String code) { + List list = sysMessageTemplateService.selectByCode(code); + if (list == null || list.size() == 0) { + return null; + } + return list.get(0); + } - @Override - public void saveDataLog(DataLogDTO dataLogDto) { - try { - SysDataLog entity = new SysDataLog(); - entity.setDataTable(dataLogDto.getTableName()); - entity.setDataId(dataLogDto.getDataId()); - entity.setDataContent(dataLogDto.getContent()); - entity.setType(dataLogDto.getType()); - entity.setDataVersion("1"); - if (oConvertUtils.isNotEmpty(dataLogDto.getCreateName())) { - entity.setCreateBy(dataLogDto.getCreateName()); - } else { - entity.autoSetCreateName(); - } - sysDataLogService.save(entity); - } catch (Exception e) { - log.warn(e.getMessage(), e); - //e.printStackTrace(); - } - } + //-------------------------------------流程节点发送模板消息----------------------------------------------- + + @Override + public void saveDataLog(DataLogDTO dataLogDto) { + try { + SysDataLog entity = new SysDataLog(); + entity.setDataTable(dataLogDto.getTableName()); + entity.setDataId(dataLogDto.getDataId()); + entity.setDataContent(dataLogDto.getContent()); + entity.setType(dataLogDto.getType()); + entity.setDataVersion("1"); + if (oConvertUtils.isNotEmpty(dataLogDto.getCreateName())) { + entity.setCreateBy(dataLogDto.getCreateName()); + } else { + entity.autoSetCreateName(); + } + sysDataLogService.save(entity); + } catch (Exception e) { + log.warn(e.getMessage(), e); + //e.printStackTrace(); + } + } @Override public void updateAvatar(LoginUser loginUser) { - SysUser sysUser = new SysUser(); - // 创建UpdateWrapper对象 - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", loginUser.getId()); // 设置更新条件 - sysUser.setAvatar(loginUser.getAvatar()); // 设置要更新的字段 - sysUserService.update(sysUser, updateWrapper); + SysUser sysUser = new SysUser(); + // 创建UpdateWrapper对象 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", loginUser.getId()); // 设置更新条件 + sysUser.setAvatar(loginUser.getAvatar()); // 设置要更新的字段 + sysUserService.update(sysUser, updateWrapper); } - @Override - public void sendAppChatSocket(String userId) { - JSONObject obj = new JSONObject(); - obj.put(WebsocketConst.MSG_CMD, WebsocketConst.MSG_CHAT); - obj.put(WebsocketConst.MSG_USER_ID, userId); - webSocket.sendMessage(userId, obj.toJSONString()); - } + @Override + public void sendAppChatSocket(String userId) { + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.MSG_CHAT); + obj.put(WebsocketConst.MSG_USER_ID, userId); + webSocket.sendMessage(userId, obj.toJSONString()); + } - @Override - public String getRoleCodeById(String id) { - SysRole role = roleMapper.selectById(id); - if(role!=null){ - return role.getRoleCode(); - } - return null; - } + @Override + public String getRoleCodeById(String id) { + SysRole role = roleMapper.selectById(id); + if (role != null) { + return role.getRoleCode(); + } + return null; + } - @Override - public List queryRoleDictByCode(String roleCodes) { - if (oConvertUtils.isEmpty(roleCodes)) { - return new ArrayList<>(); - } - List codeList = Arrays.asList(roleCodes.split(",")); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysRole::getRoleCode, codeList); - List list = roleMapper.selectList(queryWrapper); - // 转换成SysRoleVo - return list.stream().map(sysRole -> { - DictModel model = new DictModel(); - model.setText(sysRole.getRoleName()); - model.setValue(sysRole.getRoleCode()); - return model; - }).collect(Collectors.toList()); - } + @Override + public List queryRoleDictByCode(String roleCodes) { + if (oConvertUtils.isEmpty(roleCodes)) { + return new ArrayList<>(); + } + List codeList = Arrays.asList(roleCodes.split(",")); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysRole::getRoleCode, codeList); + List list = roleMapper.selectList(queryWrapper); + // 转换成SysRoleVo + return list.stream().map(sysRole -> { + DictModel model = new DictModel(); + model.setText(sysRole.getRoleName()); + model.setValue(sysRole.getRoleCode()); + return model; + }).collect(Collectors.toList()); + } - @Override - public List queryUserIdsByDeptIds(List deptIds) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().select(SysUserDepart::getUserId).in(true,SysUserDepart::getDepId,deptIds); - return sysUserDepartService.listObjs(queryWrapper,e->e.toString()); - } - - @Override - public List queryUserAccountsByDeptIds(List deptIds) { - return departMapper.queryUserAccountByDepartIds(deptIds); - } + @Override + public List queryUserIdsByDeptIds(List deptIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().select(SysUserDepart::getUserId).in(true, SysUserDepart::getDepId, deptIds); + return sysUserDepartService.listObjs(queryWrapper, e -> e.toString()); + } - @Override - public List queryUserIdsByRoleds(List roleCodes) { - LambdaQueryWrapper query = new LambdaQueryWrapper() - .in(SysRole::getRoleCode, roleCodes); - List roleList = sysRoleService.list(query); - if(roleList!=null && roleList.size()>0){ - List idList = roleList.stream().map(role->role.getId()).collect(Collectors.toList()); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().select(SysUserRole::getUserId).in(true,SysUserRole::getRoleId, idList); - return sysUserRoleService.listObjs(queryWrapper,e->e.toString()); - } - return null; - } + @Override + public List queryUserAccountsByDeptIds(List deptIds) { + return departMapper.queryUserAccountByDepartIds(deptIds); + } - @Override - public List queryUserIdsByPositionIds(List positionIds) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().select(SysUserPosition::getUserId).in(true,SysUserPosition::getPositionId,positionIds); - return sysUserPositionService.listObjs(queryWrapper,e->e.toString()); - } + @Override + public List queryUserIdsByRoleds(List roleCodes) { + LambdaQueryWrapper query = new LambdaQueryWrapper() + .in(SysRole::getRoleCode, roleCodes); + List roleList = sysRoleService.list(query); + if (roleList != null && roleList.size() > 0) { + List idList = roleList.stream().map(role -> role.getId()).collect(Collectors.toList()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().select(SysUserRole::getUserId).in(true, SysUserRole::getRoleId, idList); + return sysUserRoleService.listObjs(queryWrapper, e -> e.toString()); + } + return null; + } - //update-begin-author:taoyan date:2023-2-21 for: 解决参数顺序问题 - /** - * 获取带参数的报表地址,因为多个参数可能顺序会变,所以要将参数顺序重排,获取所有可能的地址集合 - * 如下:参数顺序调整使用in查询,就能查询出菜单数据 - * /online/cgreport/1624393012494286850?name=1&age=16 - * /online/cgreport/1624393012494286850?age=16&name=1 - * @param path - * @return - */ - private List getOnlinePossiblePaths(String path){ - List result = new ArrayList<>(); - log.info(" path = "+ path); - if (path.indexOf("?") >= 0 && (path.contains("/online/cgreport/") || path.contains("/online/cgformList/") || path.contains("/online/graphreport/"))) { - //包含?说明有多个参数 - String[] pathArray = path.split("\\?"); - if(oConvertUtils.isNotEmpty(pathArray[1])){ - String[] params = pathArray[1].split("&"); - if(params.length==1){ - result.add(path); - }else{ - result = anm(pathArray[0], Arrays.asList(params)); - } - }else{ - result.add(path); - } - }else{ - result.add(path); - } - return result; - } + @Override + public List queryUserIdsByPositionIds(List positionIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().select(SysUserPosition::getUserId).in(true, SysUserPosition::getPositionId, positionIds); + return sysUserPositionService.listObjs(queryWrapper, e -> e.toString()); + } + + //update-begin-author:taoyan date:2023-2-21 for: 解决参数顺序问题 + + /** + * 获取带参数的报表地址,因为多个参数可能顺序会变,所以要将参数顺序重排,获取所有可能的地址集合 + * 如下:参数顺序调整使用in查询,就能查询出菜单数据 + * /online/cgreport/1624393012494286850?name=1&age=16 + * /online/cgreport/1624393012494286850?age=16&name=1 + * + * @param path + * @return + */ + private List getOnlinePossiblePaths(String path) { + List result = new ArrayList<>(); + log.info(" path = " + path); + if (path.indexOf("?") >= 0 && (path.contains("/online/cgreport/") || path.contains("/online/cgformList/") || path.contains("/online/graphreport/"))) { + //包含?说明有多个参数 + String[] pathArray = path.split("\\?"); + if (oConvertUtils.isNotEmpty(pathArray[1])) { + String[] params = pathArray[1].split("&"); + if (params.length == 1) { + result.add(path); + } else { + result = anm(pathArray[0], Arrays.asList(params)); + } + } else { + result.add(path); + } + } else { + result.add(path); + } + return result; + } - /** - * 获取数组元素的 不同排列 a(n,m) - * @param list - * @return - */ - private List anm(String baseUrl, List list) { - int len = list.size(); - int[] destArray = new int[len]; - for (int i = 0; i < len; i++) { - destArray[i] = i; - } - int[] temp = new int[len]; - List result = new ArrayList<>(); - while (temp[0] < len) { - temp[temp.length - 1]++; - for (int i = temp.length - 1; i > 0; i--) { - if (temp[i] == len) { - temp[i] = 0; - temp[i - 1]++; - } - } - int[] tt = temp.clone(); - Arrays.sort(tt); - if (!Arrays.equals(tt, destArray)) { - continue; - } - String str = ""; - for (int i = 0; i < len; i++) { - if(i>0){ - str += "&"; - } - str += list.get(temp[i]); - } - result.add(baseUrl+"?"+str); - } - return result; - } - //update-end-author:taoyan date:2023-2-21 for: 解决参数顺序问题 + /** + * 获取数组元素的 不同排列 a(n,m) + * + * @param list + * @return + */ + private List anm(String baseUrl, List list) { + int len = list.size(); + int[] destArray = new int[len]; + for (int i = 0; i < len; i++) { + destArray[i] = i; + } + int[] temp = new int[len]; + List result = new ArrayList<>(); + while (temp[0] < len) { + temp[temp.length - 1]++; + for (int i = temp.length - 1; i > 0; i--) { + if (temp[i] == len) { + temp[i] = 0; + temp[i - 1]++; + } + } + int[] tt = temp.clone(); + Arrays.sort(tt); + if (!Arrays.equals(tt, destArray)) { + continue; + } + String str = ""; + for (int i = 0; i < len; i++) { + if (i > 0) { + str += "&"; + } + str += list.get(temp[i]); + } + result.add(baseUrl + "?" + str); + } + return result; + } + //update-end-author:taoyan date:2023-2-21 for: 解决参数顺序问题 - @Override - public List getUserAccountsByDepCode(String orgCode) { - return userMapper.getUserAccountsByDepCode(orgCode); - } + @Override + public List getUserAccountsByDepCode(String orgCode) { + return userMapper.getUserAccountsByDepCode(orgCode); + } - @Override - public boolean dictTableWhiteListCheckBySql(String selectSql) { - return dictTableWhiteListHandler.isPassBySql(selectSql); - } + @Override + public boolean dictTableWhiteListCheckBySql(String selectSql) { + return dictTableWhiteListHandler.isPassBySql(selectSql); + } - @Override - public boolean dictTableWhiteListCheckByDict(String tableOrDictCode, String... fields) { - if (fields == null || fields.length == 0) { - return dictTableWhiteListHandler.isPassByDict(tableOrDictCode); - } else { - return dictTableWhiteListHandler.isPassByDict(tableOrDictCode, fields); - } - } + @Override + public boolean dictTableWhiteListCheckByDict(String tableOrDictCode, String... fields) { + if (fields == null || fields.length == 0) { + return dictTableWhiteListHandler.isPassByDict(tableOrDictCode); + } else { + return dictTableWhiteListHandler.isPassByDict(tableOrDictCode, fields); + } + } } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java index c007d8a..9cd3570 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java @@ -23,230 +23,233 @@ import java.util.stream.Collectors; /** * @Description: 分类字典 * @Author: jeecg-boot - * @Date: 2019-05-29 + * @Date: 2019-05-29 * @Version: V1.0 */ @Service public class SysCategoryServiceImpl extends ServiceImpl implements ISysCategoryService { - @Override - public void addSysCategory(SysCategory sysCategory) { - String categoryCode = ""; - String categoryPid = ISysCategoryService.ROOT_PID_VALUE; - String parentCode = null; - if(oConvertUtils.isNotEmpty(sysCategory.getPid())){ - categoryPid = sysCategory.getPid(); + @Override + public void addSysCategory(SysCategory sysCategory) { + String categoryCode = ""; + String categoryPid = ISysCategoryService.ROOT_PID_VALUE; + String parentCode = null; + if (oConvertUtils.isNotEmpty(sysCategory.getPid())) { + categoryPid = sysCategory.getPid(); - //PID 不是根节点 说明需要设置父节点 hasChild 为1 - if(!ISysCategoryService.ROOT_PID_VALUE.equals(categoryPid)){ - SysCategory parent = baseMapper.selectById(categoryPid); - parentCode = parent.getCode(); - if(parent!=null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())){ - parent.setHasChild(ISysCategoryService.HAS_CHILD); - baseMapper.updateById(parent); - } - } - } - //update-begin--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 - JSONObject formData = new JSONObject(); - formData.put("pid",categoryPid); - categoryCode = (String) FillRuleUtil.executeRule(FillRuleConstant.CATEGORY,formData); - //update-end--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 - sysCategory.setCode(categoryCode); - sysCategory.setPid(categoryPid); - baseMapper.insert(sysCategory); - } - - @Override - public void updateSysCategory(SysCategory sysCategory) { - if(oConvertUtils.isEmpty(sysCategory.getPid())){ - sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE); - }else{ - //如果当前节点父ID不为空 则设置父节点的hasChild 为1 - SysCategory parent = baseMapper.selectById(sysCategory.getPid()); - if(parent!=null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())){ - parent.setHasChild(ISysCategoryService.HAS_CHILD); - baseMapper.updateById(parent); - } - } - baseMapper.updateById(sysCategory); - } + //PID 不是根节点 说明需要设置父节点 hasChild 为1 + if (!ISysCategoryService.ROOT_PID_VALUE.equals(categoryPid)) { + SysCategory parent = baseMapper.selectById(categoryPid); + parentCode = parent.getCode(); + if (parent != null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())) { + parent.setHasChild(ISysCategoryService.HAS_CHILD); + baseMapper.updateById(parent); + } + } + } + //update-begin--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 + JSONObject formData = new JSONObject(); + formData.put("pid", categoryPid); + categoryCode = (String) FillRuleUtil.executeRule(FillRuleConstant.CATEGORY, formData); + //update-end--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 + sysCategory.setCode(categoryCode); + sysCategory.setPid(categoryPid); + baseMapper.insert(sysCategory); + } - @Override - public List queryListByCode(String pcode) throws JeecgBootException{ - String pid = ROOT_PID_VALUE; - if(oConvertUtils.isNotEmpty(pcode)) { - List list = baseMapper.selectList(new LambdaQueryWrapper().eq(SysCategory::getCode, pcode)); - if(list==null || list.size() ==0) { - throw new JeecgBootException("该编码【"+pcode+"】不存在,请核实!"); - } - if(list.size()>1) { - throw new JeecgBootException("该编码【"+pcode+"】存在多个,请核实!"); - } - pid = list.get(0).getId(); - } - return baseMapper.queryListByPid(pid,null); - } + @Override + public void updateSysCategory(SysCategory sysCategory) { + if (oConvertUtils.isEmpty(sysCategory.getPid())) { + sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE); + } else { + //如果当前节点父ID不为空 则设置父节点的hasChild 为1 + SysCategory parent = baseMapper.selectById(sysCategory.getPid()); + if (parent != null && !ISysCategoryService.HAS_CHILD.equals(parent.getHasChild())) { + parent.setHasChild(ISysCategoryService.HAS_CHILD); + baseMapper.updateById(parent); + } + } + baseMapper.updateById(sysCategory); + } - @Override - public List queryListByPid(String pid) { - if(oConvertUtils.isEmpty(pid)) { - pid = ROOT_PID_VALUE; - } - return baseMapper.queryListByPid(pid,null); - } + @Override + public List queryListByCode(String pcode) throws JeecgBootException { + String pid = ROOT_PID_VALUE; + if (oConvertUtils.isNotEmpty(pcode)) { + List list = baseMapper.selectList(new LambdaQueryWrapper().eq(SysCategory::getCode, pcode)); + if (list == null || list.size() == 0) { + throw new JeecgBootException("该编码【" + pcode + "】不存在,请核实!"); + } + if (list.size() > 1) { + throw new JeecgBootException("该编码【" + pcode + "】存在多个,请核实!"); + } + pid = list.get(0).getId(); + } + return baseMapper.queryListByPid(pid, null); + } - @Override - public List queryListByPid(String pid, Map condition) { - if(oConvertUtils.isEmpty(pid)) { - pid = ROOT_PID_VALUE; - } - return baseMapper.queryListByPid(pid,condition); - } + @Override + public List queryListByPid(String pid) { + if (oConvertUtils.isEmpty(pid)) { + pid = ROOT_PID_VALUE; + } + return baseMapper.queryListByPid(pid, null); + } - @Override - public String queryIdByCode(String code) { - return baseMapper.queryIdByCode(code); - } + @Override + public List queryListByPid(String pid, Map condition) { + if (oConvertUtils.isEmpty(pid)) { + pid = ROOT_PID_VALUE; + } + return baseMapper.queryListByPid(pid, condition); + } - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteSysCategory(String ids) { - String allIds = this.queryTreeChildIds(ids); - String pids = this.queryTreePids(ids); - //1.删除时将节点下所有子节点一并删除 - this.baseMapper.deleteBatchIds(Arrays.asList(allIds.split(","))); - //2.将父节点中已经没有下级的节点,修改为没有子节点 - if(oConvertUtils.isNotEmpty(pids)){ - LambdaUpdateWrapper updateWrapper = new UpdateWrapper() - .lambda() - .in(SysCategory::getId,Arrays.asList(pids.split(","))) - .set(SysCategory::getHasChild,"0"); - this.update(updateWrapper); - } - } + @Override + public String queryIdByCode(String code) { + return baseMapper.queryIdByCode(code); + } - /** - * 查询节点下所有子节点 - * @param ids - * @return - */ - private String queryTreeChildIds(String ids) { - //获取id数组 - String[] idArr = ids.split(","); - StringBuffer sb = new StringBuffer(); - for (String pidVal : idArr) { - if(pidVal != null){ - if(!sb.toString().contains(pidVal)){ - if(sb.toString().length() > 0){ - sb.append(","); - } - sb.append(pidVal); - this.getTreeChildIds(pidVal,sb); - } - } - } - return sb.toString(); - } + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteSysCategory(String ids) { + String allIds = this.queryTreeChildIds(ids); + String pids = this.queryTreePids(ids); + //1.删除时将节点下所有子节点一并删除 + this.baseMapper.deleteBatchIds(Arrays.asList(allIds.split(","))); + //2.将父节点中已经没有下级的节点,修改为没有子节点 + if (oConvertUtils.isNotEmpty(pids)) { + LambdaUpdateWrapper updateWrapper = new UpdateWrapper() + .lambda() + .in(SysCategory::getId, Arrays.asList(pids.split(","))) + .set(SysCategory::getHasChild, "0"); + this.update(updateWrapper); + } + } - /** - * 查询需修改标识的父节点ids - * @param ids - * @return - */ - private String queryTreePids(String ids) { - StringBuffer sb = new StringBuffer(); - //获取id数组 - String[] idArr = ids.split(","); - for (String id : idArr) { - if(id != null){ - SysCategory category = this.baseMapper.selectById(id); - //根据id查询pid值 - String metaPid = category.getPid(); - //查询此节点上一级是否还有其他子节点 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysCategory::getPid,metaPid); - queryWrapper.notIn(SysCategory::getId,Arrays.asList(idArr)); - List dataList = this.baseMapper.selectList(queryWrapper); - boolean flag = (dataList == null || dataList.size()==0) && !Arrays.asList(idArr).contains(metaPid) + /** + * 查询节点下所有子节点 + * + * @param ids + * @return + */ + private String queryTreeChildIds(String ids) { + //获取id数组 + String[] idArr = ids.split(","); + StringBuffer sb = new StringBuffer(); + for (String pidVal : idArr) { + if (pidVal != null) { + if (!sb.toString().contains(pidVal)) { + if (sb.toString().length() > 0) { + sb.append(","); + } + sb.append(pidVal); + this.getTreeChildIds(pidVal, sb); + } + } + } + return sb.toString(); + } + + /** + * 查询需修改标识的父节点ids + * + * @param ids + * @return + */ + private String queryTreePids(String ids) { + StringBuffer sb = new StringBuffer(); + //获取id数组 + String[] idArr = ids.split(","); + for (String id : idArr) { + if (id != null) { + SysCategory category = this.baseMapper.selectById(id); + //根据id查询pid值 + String metaPid = category.getPid(); + //查询此节点上一级是否还有其他子节点 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysCategory::getPid, metaPid); + queryWrapper.notIn(SysCategory::getId, Arrays.asList(idArr)); + List dataList = this.baseMapper.selectList(queryWrapper); + boolean flag = (dataList == null || dataList.size() == 0) && !Arrays.asList(idArr).contains(metaPid) && !sb.toString().contains(metaPid); - if(flag){ - //如果当前节点原本有子节点 现在木有了,更新状态 - sb.append(metaPid).append(","); - } - } - } - if(sb.toString().endsWith(SymbolConstant.COMMA)){ - sb = sb.deleteCharAt(sb.length() - 1); - } - return sb.toString(); - } + if (flag) { + //如果当前节点原本有子节点 现在木有了,更新状态 + sb.append(metaPid).append(","); + } + } + } + if (sb.toString().endsWith(SymbolConstant.COMMA)) { + sb = sb.deleteCharAt(sb.length() - 1); + } + return sb.toString(); + } - /** - * 递归 根据父id获取子节点id - * @param pidVal - * @param sb - * @return - */ - private StringBuffer getTreeChildIds(String pidVal,StringBuffer sb){ - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysCategory::getPid,pidVal); - List dataList = baseMapper.selectList(queryWrapper); - if(dataList != null && dataList.size()>0){ - for(SysCategory category : dataList) { - if(!sb.toString().contains(category.getId())){ - sb.append(",").append(category.getId()); - } - this.getTreeChildIds(category.getId(), sb); - } - } - return sb; - } + /** + * 递归 根据父id获取子节点id + * + * @param pidVal + * @param sb + * @return + */ + private StringBuffer getTreeChildIds(String pidVal, StringBuffer sb) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysCategory::getPid, pidVal); + List dataList = baseMapper.selectList(queryWrapper); + if (dataList != null && dataList.size() > 0) { + for (SysCategory category : dataList) { + if (!sb.toString().contains(category.getId())) { + sb.append(",").append(category.getId()); + } + this.getTreeChildIds(category.getId(), sb); + } + } + return sb; + } - @Override - public List loadDictItem(String ids) { - return this.loadDictItem(ids, true); - } + @Override + public List loadDictItem(String ids) { + return this.loadDictItem(ids, true); + } - @Override - public List loadDictItem(String ids, boolean delNotExist) { - String[] idArray = ids.split(","); - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(SysCategory::getId, Arrays.asList(idArray)); - // 查询数据 - List list = super.list(query); - // 取出name并返回 - List textList; - // update-begin--author:sunjianlei--date:20210514--for:新增delNotExist参数,设为false不删除数据库里不存在的key ---- - if (delNotExist) { - textList = list.stream().map(SysCategory::getName).collect(Collectors.toList()); - } else { - textList = new ArrayList<>(); - for (String id : idArray) { - List res = list.stream().filter(i -> id.equals(i.getId())).collect(Collectors.toList()); - textList.add(res.size() > 0 ? res.get(0).getName() : id); - } - } - // update-end--author:sunjianlei--date:20210514--for:新增delNotExist参数,设为false不删除数据库里不存在的key ---- - return textList; - } + @Override + public List loadDictItem(String ids, boolean delNotExist) { + String[] idArray = ids.split(","); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysCategory::getId, Arrays.asList(idArray)); + // 查询数据 + List list = super.list(query); + // 取出name并返回 + List textList; + // update-begin--author:sunjianlei--date:20210514--for:新增delNotExist参数,设为false不删除数据库里不存在的key ---- + if (delNotExist) { + textList = list.stream().map(SysCategory::getName).collect(Collectors.toList()); + } else { + textList = new ArrayList<>(); + for (String id : idArray) { + List res = list.stream().filter(i -> id.equals(i.getId())).collect(Collectors.toList()); + textList.add(res.size() > 0 ? res.get(0).getName() : id); + } + } + // update-end--author:sunjianlei--date:20210514--for:新增delNotExist参数,设为false不删除数据库里不存在的key ---- + return textList; + } - @Override - public List loadDictItemByNames(String names, boolean delNotExist) { - List nameList = Arrays.asList(names.split(SymbolConstant.COMMA)); - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.select(SysCategory::getId, SysCategory::getName); - query.in(SysCategory::getName, nameList); - // 查询数据 - List list = super.list(query); - // 取出id并返回 - return nameList.stream().map(name -> { - SysCategory res = list.stream().filter(i -> name.equals(i.getName())).findFirst().orElse(null); - if (res == null) { - return delNotExist ? null : name; - } - return res.getId(); - }).filter(Objects::nonNull).collect(Collectors.toList()); - } + @Override + public List loadDictItemByNames(String names, boolean delNotExist) { + List nameList = Arrays.asList(names.split(SymbolConstant.COMMA)); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.select(SysCategory::getId, SysCategory::getName); + query.in(SysCategory::getName, nameList); + // 查询数据 + List list = super.list(query); + // 取出id并返回 + return nameList.stream().map(name -> { + SysCategory res = list.stream().filter(i -> name.equals(i.getName())).findFirst().orElse(null); + if (res == null) { + return delNotExist ? null : name; + } + return res.getId(); + }).filter(Objects::nonNull).collect(Collectors.toList()); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCommentServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCommentServiceImpl.java index 4316bdf..4e4999e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCommentServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysCommentServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.servlet.http.HttpServletRequest; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.config.TenantContext; import org.jeecg.common.constant.CommonConstant; @@ -32,7 +33,6 @@ import org.springframework.util.FileCopyUtils; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; -import jakarta.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.util.*; @@ -79,33 +79,33 @@ public class SysCommentServiceImpl extends ServiceImpl list = this.baseMapper.queryCommentList(tableName, dataId); // 获取评论相关人员 Set personSet = new HashSet<>(); - if(list!=null && list.size()>0){ - for(SysCommentVO vo: list){ - if(oConvertUtils.isNotEmpty(vo.getFromUserId())){ - personSet.add(vo.getFromUserId()); + if (list != null && list.size() > 0) { + for (SysCommentVO vo : list) { + if (oConvertUtils.isNotEmpty(vo.getFromUserId())) { + personSet.add(vo.getFromUserId()); } - if(oConvertUtils.isNotEmpty(vo.getToUserId())){ + if (oConvertUtils.isNotEmpty(vo.getToUserId())) { personSet.add(vo.getToUserId()); } } } - if(personSet.size()>0){ + if (personSet.size() > 0) { //获取用户信息 Map userAvatarMap = queryUserAvatar(personSet); - for(SysCommentVO vo: list){ + for (SysCommentVO vo : list) { String formId = vo.getFromUserId(); String toId = vo.getToUserId(); // 设置头像、用户名 - if(oConvertUtils.isNotEmpty(formId)){ + if (oConvertUtils.isNotEmpty(formId)) { UserAvatar fromUser = userAvatarMap.get(formId); - if(fromUser!=null){ + if (fromUser != null) { vo.setFromUserId_dictText(fromUser.getRealname()); vo.setFromUserAvatar(fromUser.getAvatar()); } } - if(oConvertUtils.isNotEmpty(toId)){ + if (oConvertUtils.isNotEmpty(toId)) { UserAvatar toUser = userAvatarMap.get(toId); - if(toUser!=null){ + if (toUser != null) { vo.setToUserId_dictText(toUser.getRealname()); vo.setToUserAvatar(toUser.getAvatar()); } @@ -118,10 +118,10 @@ public class SysCommentServiceImpl extends ServiceImpl data = new HashMap<>(); data.put(CommonConstant.NOTICE_MSG_BUS_TYPE, "comment"); JSONObject params = new JSONObject(); @@ -287,7 +288,7 @@ public class SysCommentServiceImpl extends ServiceImpl queryUserAvatar(Set idSet){ + private Map queryUserAvatar(Set idSet) { List list = this.baseMapper.queryUserAvatarList(idSet); Map map = new HashMap<>(); - if(list!=null && list.size()>0){ - for(UserAvatar user: list){ + if (list != null && list.size() > 0) { + for (UserAvatar user : list) { map.put(user.getId(), user); } } return map; } - + } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDataLogServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDataLogServiceImpl.java index 8e253e0..1743ac6 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDataLogServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDataLogServiceImpl.java @@ -1,38 +1,38 @@ package org.jeecg.modules.system.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.system.entity.SysDataLog; import org.jeecg.modules.system.mapper.SysDataLogMapper; import org.jeecg.modules.system.service.ISysDataLogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /** * @Description: 系统数据日志实现类 * @author: jeecg-boot */ @Service -public class SysDataLogServiceImpl extends ServiceImpl implements ISysDataLogService { - @Autowired - private SysDataLogMapper logMapper; +public class SysDataLogServiceImpl extends ServiceImpl implements ISysDataLogService { + @Autowired + private SysDataLogMapper logMapper; - /** - * 添加数据日志 - */ - @Override - public void addDataLog(String tableName, String dataId, String dataContent) { - String versionNumber = "0"; - String dataVersion = logMapper.queryMaxDataVer(tableName, dataId); - if(dataVersion != null ) { - versionNumber = String.valueOf(Integer.parseInt(dataVersion)+1); - } - SysDataLog log = new SysDataLog(); - log.setDataTable(tableName); - log.setDataId(dataId); - log.setDataContent(dataContent); - log.setDataVersion(versionNumber); - log.autoSetCreateName(); - this.save(log); - } + /** + * 添加数据日志 + */ + @Override + public void addDataLog(String tableName, String dataId, String dataContent) { + String versionNumber = "0"; + String dataVersion = logMapper.queryMaxDataVer(tableName, dataId); + if (dataVersion != null) { + versionNumber = String.valueOf(Integer.parseInt(dataVersion) + 1); + } + SysDataLog log = new SysDataLog(); + log.setDataTable(tableName); + log.setDataId(dataId); + log.setDataContent(dataContent); + log.setDataVersion(versionNumber); + log.autoSetCreateName(); + this.save(log); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDataSourceServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDataSourceServiceImpl.java index d0853c5..6dd8b00 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDataSourceServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDataSourceServiceImpl.java @@ -65,10 +65,10 @@ public class SysDataSourceServiceImpl extends ServiceImpl add = getDiff(lastPermissionIds,permissionIds); - if(add!=null && add.size()>0) { + List add = getDiff(lastPermissionIds, permissionIds); + if (add != null && add.size() > 0) { List list = new ArrayList(); for (String p : add) { - if(oConvertUtils.isNotEmpty(p)) { + if (oConvertUtils.isNotEmpty(p)) { SysDepartPermission rolepms = new SysDepartPermission(departId, p); list.add(rolepms); } @@ -54,22 +53,22 @@ public class SysDepartPermissionServiceImpl extends ServiceImpl delete = getDiff(permissionIds,lastPermissionIds); - if(delete!=null && delete.size()>0) { + List delete = getDiff(permissionIds, lastPermissionIds); + if (delete != null && delete.size() > 0) { for (String permissionId : delete) { //2.1 删除部门对应的权限 this.remove(new QueryWrapper().lambda() .eq(SysDepartPermission::getDepartId, departId) .eq(SysDepartPermission::getPermissionId, permissionId)); //2.2 删除部门权限时,删除部门角色中已授权的权限 - List sysDepartRoleList = sysDepartRoleMapper.selectList(new LambdaQueryWrapper().eq(SysDepartRole::getDepartId,departId)); + List sysDepartRoleList = sysDepartRoleMapper.selectList(new LambdaQueryWrapper().eq(SysDepartRole::getDepartId, departId)); List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); - if(roleIds != null && roleIds.size()>0){ + if (roleIds != null && roleIds.size() > 0) { departRolePermissionMapper.delete(new LambdaQueryWrapper() - .eq(SysDepartRolePermission::getPermissionId,permissionId) - //update-begin-author:liusq---date:2023-10-08--for: [issue/#5339]部门管理下部门赋权代码逻辑缺少判断条件 - .in(SysDepartRolePermission::getRoleId,roleIds) - //update-end-author:liusq---date:2023-10-08--for: [issue/#5339]部门管理下部门赋权代码逻辑缺少判断条件 + .eq(SysDepartRolePermission::getPermissionId, permissionId) + //update-begin-author:liusq---date:2023-10-08--for: [issue/#5339]部门管理下部门赋权代码逻辑缺少判断条件 + .in(SysDepartRolePermission::getRoleId, roleIds) + //update-end-author:liusq---date:2023-10-08--for: [issue/#5339]部门管理下部门赋权代码逻辑缺少判断条件 ); } } @@ -79,28 +78,29 @@ public class SysDepartPermissionServiceImpl extends ServiceImpl getPermRuleListByDeptIdAndPermId(String departId, String permissionId) { SysDepartPermission departPermission = this.getOne(new QueryWrapper().lambda().eq(SysDepartPermission::getDepartId, departId).eq(SysDepartPermission::getPermissionId, permissionId)); - if(departPermission != null && oConvertUtils.isNotEmpty(departPermission.getDataRuleIds())){ + if (departPermission != null && oConvertUtils.isNotEmpty(departPermission.getDataRuleIds())) { LambdaQueryWrapper query = new LambdaQueryWrapper(); query.in(SysPermissionDataRule::getId, Arrays.asList(departPermission.getDataRuleIds().split(","))); query.orderByDesc(SysPermissionDataRule::getCreateTime); List permRuleList = this.ruleMapper.selectList(query); return permRuleList; - }else{ + } else { return null; } } /** * 从diff中找出main中没有的元素 + * * @param main * @param diff * @return */ - private List getDiff(String main,String diff){ - if(oConvertUtils.isEmpty(diff)) { + private List getDiff(String main, String diff) { + if (oConvertUtils.isEmpty(diff)) { return null; } - if(oConvertUtils.isEmpty(main)) { + if (oConvertUtils.isEmpty(main)) { return Arrays.asList(diff.split(",")); } @@ -112,7 +112,7 @@ public class SysDepartPermissionServiceImpl extends ServiceImpl res = new ArrayList(); for (String key : diffArr) { - if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { + if (oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { res.add(key); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java index 6a5a71d..10fc31e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java @@ -1,6 +1,8 @@ package org.jeecg.modules.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.servlet.http.HttpServletRequest; import org.jeecg.common.util.IpUtils; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.oConvertUtils; @@ -9,15 +11,12 @@ import org.jeecg.modules.system.mapper.SysDepartRolePermissionMapper; import org.jeecg.modules.system.service.ISysDepartRolePermissionService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - -import jakarta.servlet.http.HttpServletRequest; import java.util.*; /** * @Description: 部门角色权限 * @Author: jeecg-boot - * @Date: 2020-02-12 + * @Date: 2020-02-12 * @Version: V1.0 */ @Service @@ -34,11 +33,11 @@ public class SysDepartRolePermissionServiceImpl extends ServiceImpl add = getDiff(lastPermissionIds,permissionIds); - if(add!=null && add.size()>0) { + List add = getDiff(lastPermissionIds, permissionIds); + if (add != null && add.size() > 0) { List list = new ArrayList(); for (String p : add) { - if(oConvertUtils.isNotEmpty(p)) { + if (oConvertUtils.isNotEmpty(p)) { SysDepartRolePermission rolepms = new SysDepartRolePermission(roleId, p); rolepms.setOperateDate(new Date()); rolepms.setOperateIp(ip); @@ -48,8 +47,8 @@ public class SysDepartRolePermissionServiceImpl extends ServiceImpl delete = getDiff(permissionIds,lastPermissionIds); - if(delete!=null && delete.size()>0) { + List delete = getDiff(permissionIds, lastPermissionIds); + if (delete != null && delete.size() > 0) { for (String permissionId : delete) { this.remove(new QueryWrapper().lambda().eq(SysDepartRolePermission::getRoleId, roleId).eq(SysDepartRolePermission::getPermissionId, permissionId)); } @@ -58,15 +57,16 @@ public class SysDepartRolePermissionServiceImpl extends ServiceImpl getDiff(String main, String diff){ - if(oConvertUtils.isEmpty(diff)) { + private List getDiff(String main, String diff) { + if (oConvertUtils.isEmpty(diff)) { return null; } - if(oConvertUtils.isEmpty(main)) { + if (oConvertUtils.isEmpty(main)) { return Arrays.asList(diff.split(",")); } @@ -78,7 +78,7 @@ public class SysDepartRolePermissionServiceImpl extends ServiceImpl res = new ArrayList(); for (String key : diffArr) { - if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { + if (oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { res.add(key); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleServiceImpl.java index 73d969d..443efcb 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleServiceImpl.java @@ -1,18 +1,17 @@ package org.jeecg.modules.system.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.system.entity.SysDepartRole; import org.jeecg.modules.system.mapper.SysDepartRoleMapper; import org.jeecg.modules.system.service.ISysDepartRoleService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - import java.util.List; /** * @Description: 部门角色 * @Author: jeecg-boot - * @Date: 2020-02-12 + * @Date: 2020-02-12 * @Version: V1.0 */ @Service @@ -20,6 +19,6 @@ public class SysDepartRoleServiceImpl extends ServiceImpl queryDeptRoleByDeptAndUser(String orgCode, String userId) { - return this.baseMapper.queryDeptRoleByDeptAndUser(orgCode,userId); + return this.baseMapper.queryDeptRoleByDeptAndUser(orgCode, userId); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleUserServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleUserServiceImpl.java index bf49e3a..0f25bd5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleUserServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartRoleUserServiceImpl.java @@ -1,6 +1,7 @@ package org.jeecg.modules.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysDepartRole; import org.jeecg.modules.system.entity.SysDepartRoleUser; @@ -9,8 +10,6 @@ import org.jeecg.modules.system.mapper.SysDepartRoleUserMapper; import org.jeecg.modules.system.service.ISysDepartRoleUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; import java.util.*; @@ -19,7 +18,7 @@ import java.util.stream.Collectors; /** * @Description: 部门角色人员信息 * @Author: jeecg-boot - * @Date: 2020-02-13 + * @Date: 2020-02-13 * @Version: V1.0 */ @Service @@ -29,19 +28,19 @@ public class SysDepartRoleUserServiceImpl extends ServiceImpl add = getDiff(oldRoleId,newRoleId); - if(add!=null && add.size()>0) { + List add = getDiff(oldRoleId, newRoleId); + if (add != null && add.size() > 0) { List list = new ArrayList<>(); for (String roleId : add) { - if(oConvertUtils.isNotEmpty(roleId)) { + if (oConvertUtils.isNotEmpty(roleId)) { SysDepartRoleUser rolepms = new SysDepartRoleUser(userId, roleId); list.add(rolepms); } } this.saveBatch(list); } - List remove = getDiff(newRoleId,oldRoleId); - if(remove!=null && remove.size()>0) { + List remove = getDiff(newRoleId, oldRoleId); + if (remove != null && remove.size() > 0) { for (String roleId : remove) { this.remove(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, userId).eq(SysDepartRoleUser::getDroleId, roleId)); } @@ -51,12 +50,12 @@ public class SysDepartRoleUserServiceImpl extends ServiceImpl userIds, String depId) { - for(String userId : userIds){ - List sysDepartRoleList = sysDepartRoleMapper.selectList(new QueryWrapper().eq("depart_id",depId)); + for (String userId : userIds) { + List sysDepartRoleList = sysDepartRoleMapper.selectList(new QueryWrapper().eq("depart_id", depId)); List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); - if(roleIds != null && roleIds.size()>0){ + if (roleIds != null && roleIds.size() > 0) { QueryWrapper query = new QueryWrapper<>(); - query.eq("user_id",userId).in("drole_id",roleIds); + query.eq("user_id", userId).in("drole_id", roleIds); this.remove(query); } } @@ -64,15 +63,16 @@ public class SysDepartRoleUserServiceImpl extends ServiceImpl getDiff(String main, String diff){ - if(oConvertUtils.isEmpty(diff)) { + private List getDiff(String main, String diff) { + if (oConvertUtils.isEmpty(diff)) { return null; } - if(oConvertUtils.isEmpty(main)) { + if (oConvertUtils.isEmpty(main)) { return Arrays.asList(diff.split(",")); } @@ -84,7 +84,7 @@ public class SysDepartRoleUserServiceImpl extends ServiceImpl res = new ArrayList(); for (String key : diffArr) { - if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { + if (oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { res.add(key); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java index 5a3b414..24d4e57 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java @@ -43,533 +43,540 @@ import java.util.stream.Collectors; *

* 部门表 服务实现类 *

- * + * * @Author Steve * @Since 2019-01-22 */ @Service public class SysDepartServiceImpl extends ServiceImpl implements ISysDepartService { - @Autowired - private SysUserDepartMapper userDepartMapper; - @Autowired - private SysDepartRoleMapper sysDepartRoleMapper; - @Autowired - private SysDepartPermissionMapper departPermissionMapper; - @Autowired - private SysDepartRolePermissionMapper departRolePermissionMapper; - @Autowired - private SysDepartRoleUserMapper departRoleUserMapper; - @Autowired - private SysUserMapper sysUserMapper; - @Autowired - private SysDepartMapper departMapper; + @Autowired + private SysUserDepartMapper userDepartMapper; + @Autowired + private SysDepartRoleMapper sysDepartRoleMapper; + @Autowired + private SysDepartPermissionMapper departPermissionMapper; + @Autowired + private SysDepartRolePermissionMapper departRolePermissionMapper; + @Autowired + private SysDepartRoleUserMapper departRoleUserMapper; + @Autowired + private SysUserMapper sysUserMapper; + @Autowired + private SysDepartMapper departMapper; - @Override - public List queryMyDeptTreeList(String departIds) { - //根据部门id获取所负责部门 - LambdaQueryWrapper query = new LambdaQueryWrapper(); - String[] codeArr = this.getMyDeptParentOrgCode(departIds); - //update-begin---author:wangshuai---date:2023-12-01---for:【QQYUN-7320】查询部门没数据,导致报错空指针--- - if(ArrayUtil.isEmpty(codeArr)){ - return null; - } - //update-end---author:wangshuai---date:2023-12-01---for:【QQYUN-7320】查询部门没数据,导致报错空指针--- - for(int i=0;i listDepts = this.list(query); - for(int i=0;i listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(listDepts); - return listResult; - } + @Override + public List queryMyDeptTreeList(String departIds) { + //根据部门id获取所负责部门 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + String[] codeArr = this.getMyDeptParentOrgCode(departIds); + //update-begin---author:wangshuai---date:2023-12-01---for:【QQYUN-7320】查询部门没数据,导致报错空指针--- + if (ArrayUtil.isEmpty(codeArr)) { + return null; + } + //update-end---author:wangshuai---date:2023-12-01---for:【QQYUN-7320】查询部门没数据,导致报错空指针--- + for (int i = 0; i < codeArr.length; i++) { + query.or().likeRight(SysDepart::getOrgCode, codeArr[i]); + } + query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); - /** - * queryTreeList 对应 queryTreeList 查询所有的部门数据,以树结构形式响应给前端 - */ - @Override - //@Cacheable(value = CacheConstant.SYS_DEPARTS_CACHE) - public List queryTreeList() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - query.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); - query.orderByAsc(SysDepart::getDepartOrder); - List list = this.list(query); + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的 SASS 控制 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + query.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + + query.orderByAsc(SysDepart::getDepartOrder); + //将父节点ParentId设为null + List listDepts = this.list(query); + for (int i = 0; i < codeArr.length; i++) { + for (SysDepart dept : listDepts) { + if (dept.getOrgCode().equals(codeArr[i])) { + dept.setParentId(null); + } + } + } + // 调用wrapTreeDataToTreeList方法生成树状数据 + List listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(listDepts); + return listResult; + } + + /** + * queryTreeList 对应 queryTreeList 查询所有的部门数据,以树结构形式响应给前端 + */ + @Override + //@Cacheable(value = CacheConstant.SYS_DEPARTS_CACHE) + public List queryTreeList() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + query.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); + query.orderByAsc(SysDepart::getDepartOrder); + List list = this.list(query); //update-begin---author:wangshuai ---date:20220307 for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理 - //设置用户id,让前台显示 + //设置用户id,让前台显示 this.setUserIdsByDepList(list); //update-begin---author:wangshuai ---date:20220307 for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理 - // 调用wrapTreeDataToTreeList方法生成树状数据 - List listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list); - return listResult; - } + // 调用wrapTreeDataToTreeList方法生成树状数据 + List listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list); + return listResult; + } - /** - * queryTreeList 根据部门id查询,前端回显调用 - */ - @Override - public List queryTreeList(String ids) { - List listResult=new ArrayList<>(); - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); - if(oConvertUtils.isNotEmpty(ids)){ - query.in(true,SysDepart::getId,ids.split(",")); - } - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - query.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - query.orderByAsc(SysDepart::getDepartOrder); - List list= this.list(query); - for (SysDepart depart : list) { - listResult.add(new SysDepartTreeModel(depart)); - } - return listResult; + /** + * queryTreeList 根据部门id查询,前端回显调用 + */ + @Override + public List queryTreeList(String ids) { + List listResult = new ArrayList<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); + if (oConvertUtils.isNotEmpty(ids)) { + query.in(true, SysDepart::getId, ids.split(",")); + } + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + query.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + query.orderByAsc(SysDepart::getDepartOrder); + List list = this.list(query); + for (SysDepart depart : list) { + listResult.add(new SysDepartTreeModel(depart)); + } + return listResult; - } + } - //@Cacheable(value = CacheConstant.SYS_DEPART_IDS_CACHE) - @Override - public List queryDepartIdTreeList() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - query.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - query.orderByAsc(SysDepart::getDepartOrder); - List list = this.list(query); - // 调用wrapTreeDataToTreeList方法生成树状数据 - List listResult = FindsDepartsChildrenUtil.wrapTreeDataToDepartIdTreeList(list); - return listResult; - } + //@Cacheable(value = CacheConstant.SYS_DEPART_IDS_CACHE) + @Override + public List queryDepartIdTreeList() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + query.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + query.orderByAsc(SysDepart::getDepartOrder); + List list = this.list(query); + // 调用wrapTreeDataToTreeList方法生成树状数据 + List listResult = FindsDepartsChildrenUtil.wrapTreeDataToDepartIdTreeList(list); + return listResult; + } - /** - * saveDepartData 对应 add 保存用户在页面添加的新的部门对象数据 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void saveDepartData(SysDepart sysDepart, String username) { - if (sysDepart != null && username != null) { - //update-begin---author:wangshuai ---date:20230216 for:[QQYUN-4163]给部门表加个是否有子节点------------ - if (oConvertUtils.isEmpty(sysDepart.getParentId())) { - sysDepart.setParentId(""); - }else{ - //将父部门的设成不是叶子结点 - departMapper.setMainLeaf(sysDepart.getParentId(),CommonConstant.NOT_LEAF); - } - //update-end---author:wangshuai ---date:20230216 for:[QQYUN-4163]给部门表加个是否有子节点------------ - //String s = UUID.randomUUID().toString().replace("-", ""); - sysDepart.setId(IdWorker.getIdStr(sysDepart)); - // 先判断该对象有无父级ID,有则意味着不是最高级,否则意味着是最高级 - // 获取父级ID - String parentId = sysDepart.getParentId(); - //update-begin--Author:baihailong Date:20191209 for:部门编码规则生成器做成公用配置 - JSONObject formData = new JSONObject(); - formData.put("parentId",parentId); - String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART,formData); - //update-end--Author:baihailong Date:20191209 for:部门编码规则生成器做成公用配置 - sysDepart.setOrgCode(codeArray[0]); - String orgType = codeArray[1]; - sysDepart.setOrgType(String.valueOf(orgType)); - sysDepart.setCreateTime(new Date()); - sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); - //新添加的部门是叶子节点 - sysDepart.setIzLeaf(CommonConstant.IS_LEAF); - // 【QQYUN-7172】数据库默认值兼容 - if (oConvertUtils.isEmpty(sysDepart.getOrgCategory())) { - if (oConvertUtils.isEmpty(sysDepart.getParentId())) { - sysDepart.setOrgCategory("1"); - } else { - sysDepart.setOrgCategory("2"); - } - } - this.save(sysDepart); + /** + * saveDepartData 对应 add 保存用户在页面添加的新的部门对象数据 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void saveDepartData(SysDepart sysDepart, String username) { + if (sysDepart != null && username != null) { + //update-begin---author:wangshuai ---date:20230216 for:[QQYUN-4163]给部门表加个是否有子节点------------ + if (oConvertUtils.isEmpty(sysDepart.getParentId())) { + sysDepart.setParentId(""); + } else { + //将父部门的设成不是叶子结点 + departMapper.setMainLeaf(sysDepart.getParentId(), CommonConstant.NOT_LEAF); + } + //update-end---author:wangshuai ---date:20230216 for:[QQYUN-4163]给部门表加个是否有子节点------------ + //String s = UUID.randomUUID().toString().replace("-", ""); + sysDepart.setId(IdWorker.getIdStr(sysDepart)); + // 先判断该对象有无父级ID,有则意味着不是最高级,否则意味着是最高级 + // 获取父级ID + String parentId = sysDepart.getParentId(); + //update-begin--Author:baihailong Date:20191209 for:部门编码规则生成器做成公用配置 + JSONObject formData = new JSONObject(); + formData.put("parentId", parentId); + String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART, formData); + //update-end--Author:baihailong Date:20191209 for:部门编码规则生成器做成公用配置 + sysDepart.setOrgCode(codeArray[0]); + String orgType = codeArray[1]; + sysDepart.setOrgType(String.valueOf(orgType)); + sysDepart.setCreateTime(new Date()); + sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + //新添加的部门是叶子节点 + sysDepart.setIzLeaf(CommonConstant.IS_LEAF); + // 【QQYUN-7172】数据库默认值兼容 + if (oConvertUtils.isEmpty(sysDepart.getOrgCategory())) { + if (oConvertUtils.isEmpty(sysDepart.getParentId())) { + sysDepart.setOrgCategory("1"); + } else { + sysDepart.setOrgCategory("2"); + } + } + this.save(sysDepart); //update-begin---author:wangshuai ---date:20220307 for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理 - //新增部门的时候新增负责部门 - if(oConvertUtils.isNotEmpty(sysDepart.getDirectorUserIds())){ - this.addDepartByUserIds(sysDepart,sysDepart.getDirectorUserIds()); + //新增部门的时候新增负责部门 + if (oConvertUtils.isNotEmpty(sysDepart.getDirectorUserIds())) { + this.addDepartByUserIds(sysDepart, sysDepart.getDirectorUserIds()); } //update-end---author:wangshuai ---date:20220307 for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理 - } + } - } - - /** - * saveDepartData 的调用方法,生成部门编码和部门类型(作废逻辑) - * @deprecated - * @param parentId - * @return - */ - private String[] generateOrgCode(String parentId) { - //update-begin--Author:Steve Date:20190201 for:组织机构添加数据代码调整 - LambdaQueryWrapper query = new LambdaQueryWrapper(); - LambdaQueryWrapper query1 = new LambdaQueryWrapper(); - String[] strArray = new String[2]; - // 创建一个List集合,存储查询返回的所有SysDepart对象 - List departList = new ArrayList<>(); - // 定义新编码字符串 - String newOrgCode = ""; - // 定义旧编码字符串 - String oldOrgCode = ""; - // 定义部门类型 - String orgType = ""; - // 如果是最高级,则查询出同级的org_code, 调用工具类生成编码并返回 - if (StringUtil.isNullOrEmpty(parentId)) { - // 线判断数据库中的表是否为空,空则直接返回初始编码 - query1.eq(SysDepart::getParentId, "").or().isNull(SysDepart::getParentId); - query1.orderByDesc(SysDepart::getOrgCode); - departList = this.list(query1); - if(departList == null || departList.size() == 0) { - strArray[0] = YouBianCodeUtil.getNextYouBianCode(null); - strArray[1] = "1"; - return strArray; - }else { - SysDepart depart = departList.get(0); - oldOrgCode = depart.getOrgCode(); - orgType = depart.getOrgType(); - newOrgCode = YouBianCodeUtil.getNextYouBianCode(oldOrgCode); - } - } else { // 反之则查询出所有同级的部门,获取结果后有两种情况,有同级和没有同级 - // 封装查询同级的条件 - query.eq(SysDepart::getParentId, parentId); - // 降序排序 - query.orderByDesc(SysDepart::getOrgCode); - // 查询出同级部门的集合 - List parentList = this.list(query); - // 查询出父级部门 - SysDepart depart = this.getById(parentId); - // 获取父级部门的Code - String parentCode = depart.getOrgCode(); - // 根据父级部门类型算出当前部门的类型 - orgType = String.valueOf(Integer.valueOf(depart.getOrgType()) + 1); - // 处理同级部门为null的情况 - if (parentList == null || parentList.size() == 0) { - // 直接生成当前的部门编码并返回 - newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, null); - } else { //处理有同级部门的情况 - // 获取同级部门的编码,利用工具类 - String subCode = parentList.get(0).getOrgCode(); - // 返回生成的当前部门编码 - newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, subCode); - } - } - // 返回最终封装了部门编码和部门类型的数组 - strArray[0] = newOrgCode; - strArray[1] = orgType; - return strArray; - //update-end--Author:Steve Date:20190201 for:组织机构添加数据代码调整 - } + } - - /** - * removeDepartDataById 对应 delete方法 根据ID删除相关部门数据 - * - */ - /* - * @Override - * - * @Transactional public boolean removeDepartDataById(String id) { - * System.out.println("要删除的ID 为=============================>>>>>"+id); boolean - * flag = this.removeById(id); return flag; } - */ + /** + * saveDepartData 的调用方法,生成部门编码和部门类型(作废逻辑) + * + * @param parentId + * @return + * @deprecated + */ + private String[] generateOrgCode(String parentId) { + //update-begin--Author:Steve Date:20190201 for:组织机构添加数据代码调整 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query1 = new LambdaQueryWrapper(); + String[] strArray = new String[2]; + // 创建一个List集合,存储查询返回的所有SysDepart对象 + List departList = new ArrayList<>(); + // 定义新编码字符串 + String newOrgCode = ""; + // 定义旧编码字符串 + String oldOrgCode = ""; + // 定义部门类型 + String orgType = ""; + // 如果是最高级,则查询出同级的org_code, 调用工具类生成编码并返回 + if (StringUtil.isNullOrEmpty(parentId)) { + // 线判断数据库中的表是否为空,空则直接返回初始编码 + query1.eq(SysDepart::getParentId, "").or().isNull(SysDepart::getParentId); + query1.orderByDesc(SysDepart::getOrgCode); + departList = this.list(query1); + if (departList == null || departList.size() == 0) { + strArray[0] = YouBianCodeUtil.getNextYouBianCode(null); + strArray[1] = "1"; + return strArray; + } else { + SysDepart depart = departList.get(0); + oldOrgCode = depart.getOrgCode(); + orgType = depart.getOrgType(); + newOrgCode = YouBianCodeUtil.getNextYouBianCode(oldOrgCode); + } + } else { // 反之则查询出所有同级的部门,获取结果后有两种情况,有同级和没有同级 + // 封装查询同级的条件 + query.eq(SysDepart::getParentId, parentId); + // 降序排序 + query.orderByDesc(SysDepart::getOrgCode); + // 查询出同级部门的集合 + List parentList = this.list(query); + // 查询出父级部门 + SysDepart depart = this.getById(parentId); + // 获取父级部门的Code + String parentCode = depart.getOrgCode(); + // 根据父级部门类型算出当前部门的类型 + orgType = String.valueOf(Integer.valueOf(depart.getOrgType()) + 1); + // 处理同级部门为null的情况 + if (parentList == null || parentList.size() == 0) { + // 直接生成当前的部门编码并返回 + newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, null); + } else { //处理有同级部门的情况 + // 获取同级部门的编码,利用工具类 + String subCode = parentList.get(0).getOrgCode(); + // 返回生成的当前部门编码 + newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, subCode); + } + } + // 返回最终封装了部门编码和部门类型的数组 + strArray[0] = newOrgCode; + strArray[1] = orgType; + return strArray; + //update-end--Author:Steve Date:20190201 for:组织机构添加数据代码调整 + } - /** - * updateDepartDataById 对应 edit 根据部门主键来更新对应的部门数据 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public Boolean updateDepartDataById(SysDepart sysDepart, String username) { - if (sysDepart != null && username != null) { - sysDepart.setUpdateTime(new Date()); - sysDepart.setUpdateBy(username); - this.updateById(sysDepart); + + /** + * removeDepartDataById 对应 delete方法 根据ID删除相关部门数据 + * + */ + /* + * @Override + * + * @Transactional public boolean removeDepartDataById(String id) { + * System.out.println("要删除的ID 为=============================>>>>>"+id); boolean + * flag = this.removeById(id); return flag; } + */ + + /** + * updateDepartDataById 对应 edit 根据部门主键来更新对应的部门数据 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateDepartDataById(SysDepart sysDepart, String username) { + if (sysDepart != null && username != null) { + sysDepart.setUpdateTime(new Date()); + sysDepart.setUpdateBy(username); + this.updateById(sysDepart); //update-begin---author:wangshuai ---date:20220307 for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理 - //修改部门管理的时候,修改负责部门 + //修改部门管理的时候,修改负责部门 this.updateChargeDepart(sysDepart); //update-begin---author:wangshuai ---date:20220307 for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理 - return true; - } else { - return false; - } + return true; + } else { + return false; + } - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteBatchWithChildren(List ids) { - //存放子级的id - List idList = new ArrayList(); - //存放父级的id - List parentIdList = new ArrayList<>(); - for(String id: ids) { - idList.add(id); - //此步骤是为了删除子级 - this.checkChildrenExists(id, idList); - //update-begin---author:wangshuai ---date:20230712 for:【QQYUN-5757】批量删除部门时未正确置为叶子节点 ------------ - SysDepart depart = this.getDepartById(id); - if (oConvertUtils.isNotEmpty(depart.getParentId())) { - if (!parentIdList.contains(depart.getParentId())) { - parentIdList.add(depart.getParentId()); - } - } - //update-end---author:wangshuai ---date:20230712 for:【QQYUN-5757】批量删除部门时未正确置为叶子节点 ------------ - } - this.removeByIds(idList); - //update-begin---author:wangshuai ---date:20230712 for:【QQYUN-5757】批量删除部门时未正确置为叶子节点 ------------ - //再删除前需要获取父级id,不然会一直为空 - this.setParentDepartIzLeaf(parentIdList); - //update-end---author:wangshuai ---date:20230712 for:【QQYUN-5757】批量删除部门时未正确置为叶子节点 ------------ - //根据部门id获取部门角色id - List roleIdList = new ArrayList<>(); - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.select(SysDepartRole::getId).in(SysDepartRole::getDepartId, idList); - List depRoleList = sysDepartRoleMapper.selectList(query); - for(SysDepartRole deptRole : depRoleList){ - roleIdList.add(deptRole.getId()); - } - //根据部门id删除用户与部门关系 - userDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getDepId,idList)); - //根据部门id删除部门授权 - departPermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartPermission::getDepartId,idList)); - //根据部门id删除部门角色 - sysDepartRoleMapper.delete(new LambdaQueryWrapper().in(SysDepartRole::getDepartId,idList)); - if(roleIdList != null && roleIdList.size()>0){ - //根据角色id删除部门角色授权 - departRolePermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartRolePermission::getRoleId,roleIdList)); - //根据角色id删除部门角色用户信息 - departRoleUserMapper.delete(new LambdaQueryWrapper().in(SysDepartRoleUser::getDroleId,roleIdList)); - } - } + } - @Override - public List getSubDepIdsByDepId(String departId) { - return this.baseMapper.getSubDepIdsByDepId(departId); - } + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteBatchWithChildren(List ids) { + //存放子级的id + List idList = new ArrayList(); + //存放父级的id + List parentIdList = new ArrayList<>(); + for (String id : ids) { + idList.add(id); + //此步骤是为了删除子级 + this.checkChildrenExists(id, idList); + //update-begin---author:wangshuai ---date:20230712 for:【QQYUN-5757】批量删除部门时未正确置为叶子节点 ------------ + SysDepart depart = this.getDepartById(id); + if (oConvertUtils.isNotEmpty(depart.getParentId())) { + if (!parentIdList.contains(depart.getParentId())) { + parentIdList.add(depart.getParentId()); + } + } + //update-end---author:wangshuai ---date:20230712 for:【QQYUN-5757】批量删除部门时未正确置为叶子节点 ------------ + } + this.removeByIds(idList); + //update-begin---author:wangshuai ---date:20230712 for:【QQYUN-5757】批量删除部门时未正确置为叶子节点 ------------ + //再删除前需要获取父级id,不然会一直为空 + this.setParentDepartIzLeaf(parentIdList); + //update-end---author:wangshuai ---date:20230712 for:【QQYUN-5757】批量删除部门时未正确置为叶子节点 ------------ + //根据部门id获取部门角色id + List roleIdList = new ArrayList<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.select(SysDepartRole::getId).in(SysDepartRole::getDepartId, idList); + List depRoleList = sysDepartRoleMapper.selectList(query); + for (SysDepartRole deptRole : depRoleList) { + roleIdList.add(deptRole.getId()); + } + //根据部门id删除用户与部门关系 + userDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getDepId, idList)); + //根据部门id删除部门授权 + departPermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartPermission::getDepartId, idList)); + //根据部门id删除部门角色 + sysDepartRoleMapper.delete(new LambdaQueryWrapper().in(SysDepartRole::getDepartId, idList)); + if (roleIdList != null && roleIdList.size() > 0) { + //根据角色id删除部门角色授权 + departRolePermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartRolePermission::getRoleId, roleIdList)); + //根据角色id删除部门角色用户信息 + departRoleUserMapper.delete(new LambdaQueryWrapper().in(SysDepartRoleUser::getDroleId, roleIdList)); + } + } - @Override - public List getMySubDepIdsByDepId(String departIds) { - //根据部门id获取所负责部门 - String[] codeArr = this.getMyDeptParentOrgCode(departIds); - if(codeArr==null || codeArr.length==0){ - return null; - } - return this.baseMapper.getSubDepIdsByOrgCodes(codeArr); - } + @Override + public List getSubDepIdsByDepId(String departId) { + return this.baseMapper.getSubDepIdsByDepId(departId); + } - /** - *

- * 根据关键字搜索相关的部门数据 - *

- */ - @Override - public List searchByKeyWord(String keyWord,String myDeptSearch,String departIds) { - LambdaQueryWrapper query = new LambdaQueryWrapper(); - List newList = new ArrayList<>(); - //myDeptSearch不为空时为我的部门搜索,只搜索所负责部门 - if(!StringUtil.isNullOrEmpty(myDeptSearch)){ - //departIds 为空普通用户或没有管理部门 - if(StringUtil.isNullOrEmpty(departIds)){ - return newList; - } - //根据部门id获取所负责部门 - String[] codeArr = this.getMyDeptParentOrgCode(departIds); - //update-begin-author:taoyan date:20220104 for:/issues/3311 当用户属于两个部门的时候,且这两个部门没有上下级关系,我的部门-部门名称查询条件模糊搜索失效! - if (codeArr != null && codeArr.length > 0) { - query.nested(i -> { - for (String s : codeArr) { - i.or().likeRight(SysDepart::getOrgCode, s); - } - }); - } - //update-end-author:taoyan date:20220104 for:/issues/3311 当用户属于两个部门的时候,且这两个部门没有上下级关系,我的部门-部门名称查询条件模糊搜索失效! - query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); - } - query.like(SysDepart::getDepartName, keyWord); - //update-begin--Author:huangzhilin Date:20140417 for:[bugfree号]组织机构搜索回显优化-------------------- - SysDepartTreeModel model = new SysDepartTreeModel(); - List departList = this.list(query); - if(departList.size() > 0) { - for(SysDepart depart : departList) { - model = new SysDepartTreeModel(depart); - model.setChildren(null); - //update-end--Author:huangzhilin Date:20140417 for:[bugfree号]组织机构搜索功回显优化---------------------- - newList.add(model); - } - return newList; - } - return null; - } + @Override + public List getMySubDepIdsByDepId(String departIds) { + //根据部门id获取所负责部门 + String[] codeArr = this.getMyDeptParentOrgCode(departIds); + if (codeArr == null || codeArr.length == 0) { + return null; + } + return this.baseMapper.getSubDepIdsByOrgCodes(codeArr); + } - /** - * 根据部门id删除并且删除其可能存在的子级任何部门 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public boolean delete(String id) { - List idList = new ArrayList<>(); - idList.add(id); - this.checkChildrenExists(id, idList); - //清空部门树内存 - //FindsDepartsChildrenUtil.clearDepartIdModel(); - boolean ok = this.removeByIds(idList); - //根据部门id获取部门角色id - List roleIdList = new ArrayList<>(); - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.select(SysDepartRole::getId).in(SysDepartRole::getDepartId, idList); - List depRoleList = sysDepartRoleMapper.selectList(query); - for(SysDepartRole deptRole : depRoleList){ - roleIdList.add(deptRole.getId()); - } - //根据部门id删除用户与部门关系 - userDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getDepId,idList)); - //根据部门id删除部门授权 - departPermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartPermission::getDepartId,idList)); - //根据部门id删除部门角色 - sysDepartRoleMapper.delete(new LambdaQueryWrapper().in(SysDepartRole::getDepartId,idList)); - if(roleIdList != null && roleIdList.size()>0){ - //根据角色id删除部门角色授权 - departRolePermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartRolePermission::getRoleId,roleIdList)); - //根据角色id删除部门角色用户信息 - departRoleUserMapper.delete(new LambdaQueryWrapper().in(SysDepartRoleUser::getDroleId,roleIdList)); - } - return ok; - } - - /** - * delete 方法调用 - * @param id - * @param idList - */ - private void checkChildrenExists(String id, List idList) { - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysDepart::getParentId,id); - List departList = this.list(query); - if(departList != null && departList.size() > 0) { - for(SysDepart depart : departList) { - idList.add(depart.getId()); - this.checkChildrenExists(depart.getId(), idList); - } - } - } + /** + *

+ * 根据关键字搜索相关的部门数据 + *

+ */ + @Override + public List searchByKeyWord(String keyWord, String myDeptSearch, String departIds) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List newList = new ArrayList<>(); + //myDeptSearch不为空时为我的部门搜索,只搜索所负责部门 + if (!StringUtil.isNullOrEmpty(myDeptSearch)) { + //departIds 为空普通用户或没有管理部门 + if (StringUtil.isNullOrEmpty(departIds)) { + return newList; + } + //根据部门id获取所负责部门 + String[] codeArr = this.getMyDeptParentOrgCode(departIds); + //update-begin-author:taoyan date:20220104 for:/issues/3311 当用户属于两个部门的时候,且这两个部门没有上下级关系,我的部门-部门名称查询条件模糊搜索失效! + if (codeArr != null && codeArr.length > 0) { + query.nested(i -> { + for (String s : codeArr) { + i.or().likeRight(SysDepart::getOrgCode, s); + } + }); + } + //update-end-author:taoyan date:20220104 for:/issues/3311 当用户属于两个部门的时候,且这两个部门没有上下级关系,我的部门-部门名称查询条件模糊搜索失效! + query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); + } + query.like(SysDepart::getDepartName, keyWord); + //update-begin--Author:huangzhilin Date:20140417 for:[bugfree号]组织机构搜索回显优化-------------------- + SysDepartTreeModel model = new SysDepartTreeModel(); + List departList = this.list(query); + if (departList.size() > 0) { + for (SysDepart depart : departList) { + model = new SysDepartTreeModel(depart); + model.setChildren(null); + //update-end--Author:huangzhilin Date:20140417 for:[bugfree号]组织机构搜索功回显优化---------------------- + newList.add(model); + } + return newList; + } + return null; + } - @Override - public List queryUserDeparts(String userId) { - return baseMapper.queryUserDeparts(userId); - } + /** + * 根据部门id删除并且删除其可能存在的子级任何部门 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean delete(String id) { + List idList = new ArrayList<>(); + idList.add(id); + this.checkChildrenExists(id, idList); + //清空部门树内存 + //FindsDepartsChildrenUtil.clearDepartIdModel(); + boolean ok = this.removeByIds(idList); + //根据部门id获取部门角色id + List roleIdList = new ArrayList<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.select(SysDepartRole::getId).in(SysDepartRole::getDepartId, idList); + List depRoleList = sysDepartRoleMapper.selectList(query); + for (SysDepartRole deptRole : depRoleList) { + roleIdList.add(deptRole.getId()); + } + //根据部门id删除用户与部门关系 + userDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getDepId, idList)); + //根据部门id删除部门授权 + departPermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartPermission::getDepartId, idList)); + //根据部门id删除部门角色 + sysDepartRoleMapper.delete(new LambdaQueryWrapper().in(SysDepartRole::getDepartId, idList)); + if (roleIdList != null && roleIdList.size() > 0) { + //根据角色id删除部门角色授权 + departRolePermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartRolePermission::getRoleId, roleIdList)); + //根据角色id删除部门角色用户信息 + departRoleUserMapper.delete(new LambdaQueryWrapper().in(SysDepartRoleUser::getDroleId, roleIdList)); + } + return ok; + } - @Override - public List queryDepartsByUsername(String username) { - return baseMapper.queryDepartsByUsername(username); - } - - @Override - public List queryDepartsByUserId(String userId) { - List list = baseMapper.queryDepartsByUserId(userId); - return list; - } + /** + * delete 方法调用 + * + * @param id + * @param idList + */ + private void checkChildrenExists(String id, List idList) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysDepart::getParentId, id); + List departList = this.list(query); + if (departList != null && departList.size() > 0) { + for (SysDepart depart : departList) { + idList.add(depart.getId()); + this.checkChildrenExists(depart.getId(), idList); + } + } + } - /** - * 根据用户所负责部门ids获取父级部门编码 - * @param departIds - * @return - */ - private String[] getMyDeptParentOrgCode(String departIds){ - //根据部门id查询所负责部门 - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); - if(oConvertUtils.isNotEmpty(departIds)){ - query.in(SysDepart::getId, Arrays.asList(departIds.split(","))); - } - - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - query.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - query.orderByAsc(SysDepart::getOrgCode); - List list = this.list(query); - //查找根部门 - if(list == null || list.size()==0){ - return null; - } - String orgCode = this.getMyDeptParentNode(list); - String[] codeArr = orgCode.split(","); - return codeArr; - } + @Override + public List queryUserDeparts(String userId) { + return baseMapper.queryUserDeparts(userId); + } - /** - * 获取负责部门父节点 - * @param list - * @return - */ - private String getMyDeptParentNode(List list){ - Map map = new HashMap(5); - //1.先将同一公司归类 - for(SysDepart dept : list){ - String code = dept.getOrgCode().substring(0,3); - if(map.containsKey(code)){ - String mapCode = map.get(code)+","+dept.getOrgCode(); - map.put(code,mapCode); - }else{ - map.put(code,dept.getOrgCode()); - } - } - StringBuffer parentOrgCode = new StringBuffer(); - //2.获取同一公司的根节点 - for(String str : map.values()){ - String[] arrStr = str.split(","); - parentOrgCode.append(",").append(this.getMinLengthNode(arrStr)); - } - return parentOrgCode.substring(1); - } + @Override + public List queryDepartsByUsername(String username) { + return baseMapper.queryDepartsByUsername(username); + } - /** - * 获取同一公司中部门编码长度最小的部门 - * @param str - * @return - */ - private String getMinLengthNode(String[] str){ - int min =str[0].length(); - StringBuilder orgCodeBuilder = new StringBuilder(str[0]); - for(int i =1;i queryDepartsByUserId(String userId) { + List list = baseMapper.queryDepartsByUserId(userId); + return list; + } + + /** + * 根据用户所负责部门ids获取父级部门编码 + * + * @param departIds + * @return + */ + private String[] getMyDeptParentOrgCode(String departIds) { + //根据部门id查询所负责部门 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); + if (oConvertUtils.isNotEmpty(departIds)) { + query.in(SysDepart::getId, Arrays.asList(departIds.split(","))); + } + + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + query.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + query.orderByAsc(SysDepart::getOrgCode); + List list = this.list(query); + //查找根部门 + if (list == null || list.size() == 0) { + return null; + } + String orgCode = this.getMyDeptParentNode(list); + String[] codeArr = orgCode.split(","); + return codeArr; + } + + /** + * 获取负责部门父节点 + * + * @param list + * @return + */ + private String getMyDeptParentNode(List list) { + Map map = new HashMap(5); + //1.先将同一公司归类 + for (SysDepart dept : list) { + String code = dept.getOrgCode().substring(0, 3); + if (map.containsKey(code)) { + String mapCode = map.get(code) + "," + dept.getOrgCode(); + map.put(code, mapCode); + } else { + map.put(code, dept.getOrgCode()); + } + } + StringBuffer parentOrgCode = new StringBuffer(); + //2.获取同一公司的根节点 + for (String str : map.values()) { + String[] arrStr = str.split(","); + parentOrgCode.append(",").append(this.getMinLengthNode(arrStr)); + } + return parentOrgCode.substring(1); + } + + /** + * 获取同一公司中部门编码长度最小的部门 + * + * @param str + * @return + */ + private String getMinLengthNode(String[] str) { + int min = str[0].length(); + StringBuilder orgCodeBuilder = new StringBuilder(str[0]); + for (int i = 1; i < str.length; i++) { + if (str[i].length() <= min) { + min = str[i].length(); orgCodeBuilder.append(SymbolConstant.COMMA).append(str[i]); - } - } - return orgCodeBuilder.toString(); - } + } + } + return orgCodeBuilder.toString(); + } + /** * 获取部门树信息根据关键字 + * * @param keyWord * @return */ @@ -581,170 +588,177 @@ public class SysDepartServiceImpl extends ServiceImpl list = this.list(query); // 调用wrapTreeDataToTreeList方法生成树状数据 List listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list); - List treelist =new ArrayList<>(); - if(StringUtils.isNotBlank(keyWord)){ - this.getTreeByKeyWord(keyWord,listResult,treelist); - }else{ + List treelist = new ArrayList<>(); + if (StringUtils.isNotBlank(keyWord)) { + this.getTreeByKeyWord(keyWord, listResult, treelist); + } else { return listResult; } return treelist; } - /** - * 根据parentId查询部门树 - * @param parentId - * @param ids 前端回显传递 - * @param primaryKey 主键字段(id或者orgCode) - * @return - */ - @Override - public List queryTreeListByPid(String parentId,String ids, String primaryKey) { - Consumer> square = i -> { - if (oConvertUtils.isNotEmpty(ids)) { - if (CommonConstant.DEPART_KEY_ORG_CODE.equals(primaryKey)) { - i.in(SysDepart::getOrgCode, ids.split(SymbolConstant.COMMA)); - } else { - i.in(SysDepart::getId, ids.split(SymbolConstant.COMMA)); - } - } else { - if(oConvertUtils.isEmpty(parentId)){ - i.and(q->q.isNull(true,SysDepart::getParentId).or().eq(true,SysDepart::getParentId,"")); - }else{ - i.eq(true,SysDepart::getParentId,parentId); - } - } - }; - LambdaQueryWrapper lqw=new LambdaQueryWrapper<>(); - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的 SASS 控制 - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - lqw.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); - } - //------------------------------------------------------------------------------------------------ - lqw.eq(true,SysDepart::getDelFlag,CommonConstant.DEL_FLAG_0.toString()); - lqw.func(square); + /** + * 根据parentId查询部门树 + * + * @param parentId + * @param ids 前端回显传递 + * @param primaryKey 主键字段(id或者orgCode) + * @return + */ + @Override + public List queryTreeListByPid(String parentId, String ids, String primaryKey) { + Consumer> square = i -> { + if (oConvertUtils.isNotEmpty(ids)) { + if (CommonConstant.DEPART_KEY_ORG_CODE.equals(primaryKey)) { + i.in(SysDepart::getOrgCode, ids.split(SymbolConstant.COMMA)); + } else { + i.in(SysDepart::getId, ids.split(SymbolConstant.COMMA)); + } + } else { + if (oConvertUtils.isEmpty(parentId)) { + i.and(q -> q.isNull(true, SysDepart::getParentId).or().eq(true, SysDepart::getParentId, "")); + } else { + i.eq(true, SysDepart::getParentId, parentId); + } + } + }; + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的 SASS 控制 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + lqw.eq(SysDepart::getTenantId, oConvertUtils.getInt(TenantContext.getTenant(), 0)); + } + //------------------------------------------------------------------------------------------------ + lqw.eq(true, SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); + lqw.func(square); //update-begin---author:wangshuai ---date:20220527 for:[VUEN-1143]排序不对,vue3和2应该都有问题,应该按照升序排------------ - lqw.orderByAsc(SysDepart::getDepartOrder); + lqw.orderByAsc(SysDepart::getDepartOrder); //update-end---author:wangshuai ---date:20220527 for:[VUEN-1143]排序不对,vue3和2应该都有问题,应该按照升序排-------------- - List list = list(lqw); + List list = list(lqw); //update-begin---author:wangshuai ---date:20220316 for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理 //设置用户id,让前台显示 this.setUserIdsByDepList(list); //update-end---author:wangshuai ---date:20220316 for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理 - List records = new ArrayList<>(); - for (int i = 0; i < list.size(); i++) { - SysDepart depart = list.get(i); + List records = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + SysDepart depart = list.get(i); SysDepartTreeModel treeModel = new SysDepartTreeModel(depart); //TODO 异步树加载key拼接__+时间戳,以便于每次展开节点会刷新数据 - //treeModel.setKey(treeModel.getKey()+"__"+System.currentTimeMillis()); + //treeModel.setKey(treeModel.getKey()+"__"+System.currentTimeMillis()); records.add(treeModel); } - return records; - } + return records; + } - @Override - public JSONObject queryAllParentIdByDepartId(String departId) { - JSONObject result = new JSONObject(); - for (String id : departId.split(SymbolConstant.COMMA)) { - JSONObject all = this.queryAllParentId("id", id); - result.put(id, all); - } - return result; - } + @Override + public JSONObject queryAllParentIdByDepartId(String departId) { + JSONObject result = new JSONObject(); + for (String id : departId.split(SymbolConstant.COMMA)) { + JSONObject all = this.queryAllParentId("id", id); + result.put(id, all); + } + return result; + } - @Override - public JSONObject queryAllParentIdByOrgCode(String orgCode) { - JSONObject result = new JSONObject(); - for (String code : orgCode.split(SymbolConstant.COMMA)) { - JSONObject all = this.queryAllParentId("org_code", code); - result.put(code, all); - } - return result; - } + @Override + public JSONObject queryAllParentIdByOrgCode(String orgCode) { + JSONObject result = new JSONObject(); + for (String code : orgCode.split(SymbolConstant.COMMA)) { + JSONObject all = this.queryAllParentId("org_code", code); + result.put(code, all); + } + return result; + } - /** - * 查询某个部门的所有父ID信息 - * - * @param fieldName 字段名 - * @param value 值 - */ - private JSONObject queryAllParentId(String fieldName, String value) { - JSONObject data = new JSONObject(); - // 父ID集合,有序 - data.put("parentIds", new JSONArray()); - // 父ID的部门数据,key是id,value是数据 - data.put("parentMap", new JSONObject()); - this.queryAllParentIdRecursion(fieldName, value, data); - return data; - } - - /** - * 递归调用查询父部门接口 - */ - private void queryAllParentIdRecursion(String fieldName, String value, JSONObject data) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq(fieldName, value); - SysDepart depart = super.getOne(queryWrapper); - if (depart != null) { - data.getJSONArray("parentIds").add(0, depart.getId()); - data.getJSONObject("parentMap").put(depart.getId(), depart); - if (oConvertUtils.isNotEmpty(depart.getParentId())) { - this.queryAllParentIdRecursion("id", depart.getParentId(), data); - } - } - } - - @Override - public SysDepart queryCompByOrgCode(String orgCode) { - int length = YouBianCodeUtil.ZHANWEI_LENGTH; - String compyOrgCode = orgCode.substring(0,length); - return this.baseMapper.queryCompByOrgCode(compyOrgCode); - } - /** - * 根据id查询下级部门 - * @param pid - * @return - */ - @Override - public List queryDeptByPid(String pid) { - return this.baseMapper.queryDeptByPid(pid); - } - /** - * 根据关键字筛选部门信息 - * @param keyWord - * @return + /** + * 查询某个部门的所有父ID信息 + * + * @param fieldName 字段名 + * @param value 值 */ - public void getTreeByKeyWord(String keyWord,List allResult,List newResult){ - for (SysDepartTreeModel model:allResult) { - if (model.getDepartName().contains(keyWord)){ - newResult.add(model); - continue; - }else if(model.getChildren()!=null){ - getTreeByKeyWord(keyWord,model.getChildren(),newResult); + private JSONObject queryAllParentId(String fieldName, String value) { + JSONObject data = new JSONObject(); + // 父ID集合,有序 + data.put("parentIds", new JSONArray()); + // 父ID的部门数据,key是id,value是数据 + data.put("parentMap", new JSONObject()); + this.queryAllParentIdRecursion(fieldName, value, data); + return data; + } + + /** + * 递归调用查询父部门接口 + */ + private void queryAllParentIdRecursion(String fieldName, String value, JSONObject data) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(fieldName, value); + SysDepart depart = super.getOne(queryWrapper); + if (depart != null) { + data.getJSONArray("parentIds").add(0, depart.getId()); + data.getJSONObject("parentMap").put(depart.getId(), depart); + if (oConvertUtils.isNotEmpty(depart.getParentId())) { + this.queryAllParentIdRecursion("id", depart.getParentId(), data); } } } - + + @Override + public SysDepart queryCompByOrgCode(String orgCode) { + int length = YouBianCodeUtil.ZHANWEI_LENGTH; + String compyOrgCode = orgCode.substring(0, length); + return this.baseMapper.queryCompByOrgCode(compyOrgCode); + } + + /** + * 根据id查询下级部门 + * + * @param pid + * @return + */ + @Override + public List queryDeptByPid(String pid) { + return this.baseMapper.queryDeptByPid(pid); + } + + /** + * 根据关键字筛选部门信息 + * + * @param keyWord + * @return + */ + public void getTreeByKeyWord(String keyWord, List allResult, List newResult) { + for (SysDepartTreeModel model : allResult) { + if (model.getDepartName().contains(keyWord)) { + newResult.add(model); + continue; + } else if (model.getChildren() != null) { + getTreeByKeyWord(keyWord, model.getChildren(), newResult); + } + } + } + //update-begin---author:wangshuai ---date:20200308 for:[JTC-119]在部门管理菜单下设置部门负责人,新增方法添加部门负责人、删除负责部门负责人、查询部门对应的负责人 + /** * 通过用户id设置负责部门 + * * @param sysDepart SysDepart部门对象 - * @param userIds 多个负责用户id + * @param userIds 多个负责用户id */ public void addDepartByUserIds(SysDepart sysDepart, String userIds) { //获取部门id,保存到用户 String departId = sysDepart.getId(); //循环用户id String[] userIdArray = userIds.split(","); - for (String userId:userIdArray) { + for (String userId : userIdArray) { //查询用户表增加负责部门 SysUser sysUser = sysUserMapper.selectById(userId); //如果部门id不为空,那么就需要拼接 - if(oConvertUtils.isNotEmpty(sysUser.getDepartIds())){ - if(!sysUser.getDepartIds().contains(departId)) { + if (oConvertUtils.isNotEmpty(sysUser.getDepartIds())) { + if (!sysUser.getDepartIds().contains(departId)) { sysUser.setDepartIds(sysUser.getDepartIds() + "," + departId); } - }else{ + } else { sysUser.setDepartIds(departId); } //设置身份为上级 @@ -755,14 +769,15 @@ public class SysDepartServiceImpl extends ServiceImpl userDepartList = userDepartMapper.getUserDepartByUid(userId); boolean isExistDepId = userDepartList.stream().anyMatch(item -> departId.equals(item.getDepId())); //如果不存在需要设置所属部门 - if(!isExistDepId){ - userDepartMapper.insert(new SysUserDepart(userId,departId)); + if (!isExistDepId) { + userDepartMapper.insert(new SysUserDepart(userId, departId)); } } } - + /** * 修改用户负责部门 + * * @param sysDepart SysDepart对象 */ private void updateChargeDepart(SysDepart sysDepart) { @@ -772,47 +787,48 @@ public class SysDepartServiceImpl extends ServiceImpl userIdList = Arrays.stream(oldDirectorIds.split(",")).filter(item -> !directorIds.contains(item)).collect(Collectors.toList()); - for (String userId:userIdList){ - this.deleteChargeDepId(departId,userId); + for (String userId : userIdList) { + this.deleteChargeDepId(departId, userId); } //找到原来负责部门的用户id与新的负责部门用户id,进行新增 String addUserIds = Arrays.stream(directorIds.split(",")).filter(item -> !oldDirectorIds.contains(item)).collect(Collectors.joining(",")); - if(oConvertUtils.isNotEmpty(addUserIds)){ - this.addDepartByUserIds(sysDepart,addUserIds); + if (oConvertUtils.isNotEmpty(addUserIds)) { + this.addDepartByUserIds(sysDepart, addUserIds); } } } /** * 删除用户负责部门 + * * @param departId 部门id - * @param userId 用户id + * @param userId 用户id */ - private void deleteChargeDepId(String departId,String userId){ + private void deleteChargeDepId(String departId, String userId) { //先查询负责部门的用户id,因为负责部门的id使用逗号拼接起来的 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.like(SysUser::getDepartIds,departId); + query.like(SysUser::getDepartIds, departId); //删除全部的情况下用户id不存在 - if(oConvertUtils.isNotEmpty(userId)){ - query.eq(SysUser::getId,userId); + if (oConvertUtils.isNotEmpty(userId)) { + query.eq(SysUser::getId, userId); } List userList = sysUserMapper.selectList(query); - for (SysUser sysUser:userList) { + for (SysUser sysUser : userList) { //将不存在的部门id删除掉 String departIds = sysUser.getDepartIds(); List list = new ArrayList<>(Arrays.asList(departIds.split(","))); list.remove(departId); //删除之后再将新的id用逗号拼接起来进行更新 - String newDepartIds = String.join(",",list); + String newDepartIds = String.join(",", list); sysUser.setDepartIds(newDepartIds); sysUserMapper.updateById(sysUser); } @@ -820,32 +836,33 @@ public class SysDepartServiceImpl extends ServiceImpl departList) { //查询负责部门不为空的情况 - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.isNotNull(SysUser::getDepartIds); List users = sysUserMapper.selectList(query); - Map map = new HashMap(5); + Map map = new HashMap(5); //先循环一遍找到不同的负责部门id - for (SysUser user:users) { + for (SysUser user : users) { String departIds = user.getDepartIds(); String[] departIdArray = departIds.split(","); - for (String departId:departIdArray) { + for (String departId : departIdArray) { //mao中包含部门key,负责用户直接拼接 - if(map.containsKey(departId)){ + if (map.containsKey(departId)) { String userIds = map.get(departId) + "," + user.getId(); - map.put(departId,userIds); - }else{ - map.put(departId,user.getId()); + map.put(departId, userIds); + } else { + map.put(departId, user.getId()); } } } //循环部门集合找到部门id对应的负责用户 - for (SysDepart sysDepart:departList) { - if(map.containsKey(sysDepart.getId())){ - sysDepart.setDirectorUserIds(map.get(sysDepart.getId()).toString()); + for (SysDepart sysDepart : departList) { + if (map.containsKey(sysDepart.getId())) { + sysDepart.setDirectorUserIds(map.get(sysDepart.getId()).toString()); } } } @@ -853,6 +870,7 @@ public class SysDepartServiceImpl extends ServiceImpl query = new LambdaQueryWrapper() - .eq(SysUserDepart::getDepId, id); - this.userDepartMapper.delete(query); - } + @Override + public void deleteDepart(String id) { + //删除部门设置父级的叶子结点 + this.setIzLeaf(id); + this.delete(id); + //删除部门用户关系表 + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysUserDepart::getDepId, id); + this.userDepartMapper.delete(query); + } - @Override - public List queryBookDepTreeSync(String parentId, Integer tenantId, String departName) { - List list = departMapper.queryBookDepTreeSync(parentId,tenantId,departName); - List records = new ArrayList<>(); - for (int i = 0; i < list.size(); i++) { - SysDepart depart = list.get(i); - SysDepartTreeModel treeModel = new SysDepartTreeModel(depart); - records.add(treeModel); - } - return records; - } + @Override + public List queryBookDepTreeSync(String parentId, Integer tenantId, String departName) { + List list = departMapper.queryBookDepTreeSync(parentId, tenantId, departName); + List records = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + SysDepart depart = list.get(i); + SysDepartTreeModel treeModel = new SysDepartTreeModel(depart); + records.add(treeModel); + } + return records; + } - @Override - public SysDepart getDepartById(String id) { - return departMapper.getDepartById(id); - } + @Override + public SysDepart getDepartById(String id) { + return departMapper.getDepartById(id); + } - @Override - public IPage getMaxCodeDepart(Page page, String parentId) { - return page.setRecords(departMapper.getMaxCodeDepart(page,parentId)); - } + @Override + public IPage getMaxCodeDepart(Page page, String parentId) { + return page.setRecords(departMapper.getMaxCodeDepart(page, parentId)); + } - @Override - public void updateIzLeaf(String id, Integer izLeaf) { - departMapper.setMainLeaf(id,izLeaf); - } + @Override + public void updateIzLeaf(String id, Integer izLeaf) { + departMapper.setMainLeaf(id, izLeaf); + } - /** - * 设置父级节点是否存在叶子结点 - * @param id - */ - private void setIzLeaf(String id) { - SysDepart depart = this.getDepartById(id); - String parentId = depart.getParentId(); - if(oConvertUtils.isNotEmpty(parentId)){ - Long count = this.count(new QueryWrapper().lambda().eq(SysDepart::getParentId, parentId)); - if(count == 1){ - //若父节点无其他子节点,则该父节点是叶子节点 - departMapper.setMainLeaf(parentId, CommonConstant.IS_LEAF); - } - } - } + /** + * 设置父级节点是否存在叶子结点 + * + * @param id + */ + private void setIzLeaf(String id) { + SysDepart depart = this.getDepartById(id); + String parentId = depart.getParentId(); + if (oConvertUtils.isNotEmpty(parentId)) { + Long count = this.count(new QueryWrapper().lambda().eq(SysDepart::getParentId, parentId)); + if (count == 1) { + //若父节点无其他子节点,则该父节点是叶子节点 + departMapper.setMainLeaf(parentId, CommonConstant.IS_LEAF); + } + } + } - //========================begin 零代码下部门与人员导出 ================================================================== + //========================begin 零代码下部门与人员导出 ================================================================== - @Override - public List getExcelDepart(int tenantId) { - //获取父级部门 - List parentDepart = departMapper.getDepartList("",tenantId); - //子部门 - List childrenDepart = new ArrayList<>(); - //把一级部门名称放在里面 - List exportDepartVoList = new ArrayList<>(); - //存放部门一级id避免重复 - List departIdList = new ArrayList<>(); - for (ExportDepartVo departVo:parentDepart) { - departIdList.add(departVo.getId()); - departVo.setDepartNameUrl(departVo.getDepartName()); - exportDepartVoList.add(departVo); - //创建路径 - List path = new ArrayList<>(); - path.add(departVo.getDepartName()); - //创建子部门路径 - findPath(departVo, path, tenantId,childrenDepart,departIdList); - path.clear(); - } - exportDepartVoList.addAll(childrenDepart); - childrenDepart.clear(); - departIdList.clear(); - return exportDepartVoList; - } + @Override + public List getExcelDepart(int tenantId) { + //获取父级部门 + List parentDepart = departMapper.getDepartList("", tenantId); + //子部门 + List childrenDepart = new ArrayList<>(); + //把一级部门名称放在里面 + List exportDepartVoList = new ArrayList<>(); + //存放部门一级id避免重复 + List departIdList = new ArrayList<>(); + for (ExportDepartVo departVo : parentDepart) { + departIdList.add(departVo.getId()); + departVo.setDepartNameUrl(departVo.getDepartName()); + exportDepartVoList.add(departVo); + //创建路径 + List path = new ArrayList<>(); + path.add(departVo.getDepartName()); + //创建子部门路径 + findPath(departVo, path, tenantId, childrenDepart, departIdList); + path.clear(); + } + exportDepartVoList.addAll(childrenDepart); + childrenDepart.clear(); + departIdList.clear(); + return exportDepartVoList; + } - /** - * 寻找部门路径 - * @param departVo 部门vo - * @param path 部门路径 - * @param tenantId 租户id - * @param childrenDepart 子部门 - * @param departIdList 部门id集合 - */ - private void findPath(ExportDepartVo departVo, List path,Integer tenantId,List childrenDepart,List departIdList) { - //获取租户id和部门父id获取的部门数据 - List departList = departMapper.getDepartList(departVo.getId(), tenantId); - //部门为空判断 - if (departList == null || departList.size() <= 0) { - if(!departIdList.contains(departVo.getId())){ - departVo.setDepartNameUrl(String.join(SymbolConstant.SINGLE_SLASH,path)); - childrenDepart.add(departVo); - } - return; - } + /** + * 寻找部门路径 + * + * @param departVo 部门vo + * @param path 部门路径 + * @param tenantId 租户id + * @param childrenDepart 子部门 + * @param departIdList 部门id集合 + */ + private void findPath(ExportDepartVo departVo, List path, Integer tenantId, List childrenDepart, List departIdList) { + //获取租户id和部门父id获取的部门数据 + List departList = departMapper.getDepartList(departVo.getId(), tenantId); + //部门为空判断 + if (departList == null || departList.size() <= 0) { + if (!departIdList.contains(departVo.getId())) { + departVo.setDepartNameUrl(String.join(SymbolConstant.SINGLE_SLASH, path)); + childrenDepart.add(departVo); + } + return; + } - for (int i = 0; i < departList.size(); i++) { - ExportDepartVo exportDepartVo = departList.get(i); - //存放子级路径 - List cPath = new ArrayList<>(); - cPath.addAll(path); - cPath.add(exportDepartVo.getDepartName()); - if(!departIdList.contains(departVo.getId())){ - departIdList.add(departVo.getId()); - departVo.setDepartNameUrl(String.join(SymbolConstant.SINGLE_SLASH,path)); - childrenDepart.add(departVo); - } - findPath(exportDepartVo,cPath ,tenantId, childrenDepart,departIdList); - } - } - //========================end 零代码下部门与人员导出 ================================================================== + for (int i = 0; i < departList.size(); i++) { + ExportDepartVo exportDepartVo = departList.get(i); + //存放子级路径 + List cPath = new ArrayList<>(); + cPath.addAll(path); + cPath.add(exportDepartVo.getDepartName()); + if (!departIdList.contains(departVo.getId())) { + departIdList.add(departVo.getId()); + departVo.setDepartNameUrl(String.join(SymbolConstant.SINGLE_SLASH, path)); + childrenDepart.add(departVo); + } + findPath(exportDepartVo, cPath, tenantId, childrenDepart, departIdList); + } + } + //========================end 零代码下部门与人员导出 ================================================================== - //========================begin 零代码下部门与人员导入 ================================================================== - @Override - public void importExcel(List listSysDeparts, List errorMessageList) { - int num = 0; - int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - - //部门路径排序 - Collections.sort(listSysDeparts, new Comparator() { - @Override - public int compare(ExportDepartVo o1, ExportDepartVo o2) { - if(oConvertUtils.isNotEmpty(o1.getDepartNameUrl()) && oConvertUtils.isNotEmpty(o2.getDepartNameUrl())){ - int oldLength = o1.getDepartNameUrl().split(SymbolConstant.SINGLE_SLASH).length; - int newLength = o2.getDepartNameUrl().split(SymbolConstant.SINGLE_SLASH).length; - return oldLength - newLength; - }else{ - return 0; - } - } - }); - //存放部门数据的map - Map departMap = new HashMap<>(); - //循环第二遍导入数据 - for (ExportDepartVo exportDepartVo : listSysDeparts) { - SysDepart sysDepart = new SysDepart(); - // orgCode编码长度 - int codeLength = YouBianCodeUtil.ZHANWEI_LENGTH; - Boolean izExport = false; - try { - izExport = this.addDepartByName(exportDepartVo.getDepartNameUrl(),exportDepartVo.getDepartName(),sysDepart,errorMessageList,tenantId,departMap,num); - } catch (Exception e) { - //没有查找到parentDept - } - //没有错误的时候才会导入数据 - if(izExport){ - sysDepart.setOrgType(sysDepart.getOrgCode().length()/codeLength+""); - sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); - sysDepart.setOrgCategory("1"); - sysDepart.setTenantId(tenantId); - ImportExcelUtil.importDateSaveOne(sysDepart, ISysDepartService.class, errorMessageList, num, CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE); - departMap.put(exportDepartVo.getDepartNameUrl(),sysDepart); - } - num++; - } - } + //========================begin 零代码下部门与人员导入 ================================================================== + @Override + public void importExcel(List listSysDeparts, List errorMessageList) { + int num = 0; + int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - /** - * 添加部门 - * @param departNameUrl 部门路径 - * @param departName 部门名称 - * @param sysDepart 部门类 - * @param errorMessageList 错误集合 - * @param tenantId 租户id - * @param departMap 部门数组。避免存在部门信息再次查询 key 存放部门路径 value 存放部门对象 - * @param num 判断第几行有错误信息 - */ - private Boolean addDepartByName(String departNameUrl,String departName,SysDepart sysDepart,List errorMessageList,Integer tenantId,Map departMap, int num) { - int lineNumber = num + 1; - if(oConvertUtils.isEmpty(departNameUrl) && oConvertUtils.isEmpty(departName)){ - //部门路径为空 - errorMessageList.add("第 " + lineNumber + " 行:记录部门路径或者部门名称为空禁止导入"); - return false; - } - //获取部门名称路径 - String name = ""; - if(departNameUrl.contains(SymbolConstant.SINGLE_SLASH)){ - //获取分割的部门名称 - name = departNameUrl.substring(departNameUrl.lastIndexOf(SymbolConstant.SINGLE_SLASH)+1); - }else{ - name = departNameUrl; - } - - if(!name.equals(departName)){ - //部门名称已存在 - errorMessageList.add("第 " + lineNumber + " 行:记录部门路径:”"+departNameUrl+"“"+"和部门名称:“"+departName+"“不一致,请检查!"); - return false; - }else{ - String parentId = ""; - //判断是否包含“/” - if(departNameUrl.contains(SymbolConstant.SINGLE_SLASH)){ - //获取最后一个斜杠之前的路径 - String departNames = departNameUrl.substring(0,departNameUrl.lastIndexOf(SymbolConstant.SINGLE_SLASH)); - //判断是否已经包含部门路径 - if(departMap.containsKey(departNames)){ - SysDepart depart = departMap.get(departNames); - if(null != depart){ - parentId = depart.getId(); - } - }else{ - //分割斜杠路径,查看数据库中是否存在此路径 - String[] departNameUrls = departNameUrl.split(SymbolConstant.SINGLE_SLASH); - String departUrlName = departNameUrls[0]; - //判断是否为最后一位 - int count = 0; - SysDepart depart = new SysDepart(); - depart.setId(""); - String parentIdByName = this.getDepartListByName(departUrlName,tenantId,depart,departNameUrls,count,departNameUrls.length-1,name,departMap); - //如果parentId不为空 - if(oConvertUtils.isNotEmpty(parentIdByName)){ - parentId = parentIdByName; - }else{ - //部门名称已存在 - errorMessageList.add("第 " + lineNumber + " 行:记录部门名称“"+departName+"”上级不存在,请检查!"); - return false; - } - } - } - //查询部门名称是否已存在 - SysDepart parentDept = null; - //update-begin---author:wangshuai ---date:20230721 for:一个租户部门名称可能有多个------------ - List sysDepartList = departMapper.getDepartByName(departName,tenantId,parentId); - if(CollectionUtil.isNotEmpty(sysDepartList)){ - parentDept = sysDepartList.get(0); - } - //update-end---author:wangshuai ---date:20230721 for:一个租户部门名称可能有多个------------ - if(null != parentDept) { - //部门名称已存在 - errorMessageList.add("第 " + lineNumber + " 行:记录部门名称“"+departName+"”已存在,请检查!"); - return false; - }else{ - Page page = new Page<>(1,1); - //需要获取父级id,查看父级是否已经存在 - //获取一级部门的最大orgCode - List records = departMapper.getMaxCodeDepart(page, parentId); - String newOrgCode = ""; - if(CollectionUtil.isNotEmpty(records)){ - newOrgCode = YouBianCodeUtil.getNextYouBianCode(records.get(0).getOrgCode()); - }else{ - //查询父id - if(oConvertUtils.isNotEmpty(parentId)){ - SysDepart departById = departMapper.getDepartById(parentId); - newOrgCode = YouBianCodeUtil.getSubYouBianCode(departById.getOrgCode(), null); - }else{ - newOrgCode = YouBianCodeUtil.getNextYouBianCode(null); - } - } - if(oConvertUtils.isNotEmpty(parentId)){ - this.updateIzLeaf(parentId,CommonConstant.NOT_LEAF); - sysDepart.setParentId(parentId); - } - sysDepart.setOrgCode(newOrgCode); - sysDepart.setDepartName(departName); - return true; - } - - } - } + //部门路径排序 + Collections.sort(listSysDeparts, new Comparator() { + @Override + public int compare(ExportDepartVo o1, ExportDepartVo o2) { + if (oConvertUtils.isNotEmpty(o1.getDepartNameUrl()) && oConvertUtils.isNotEmpty(o2.getDepartNameUrl())) { + int oldLength = o1.getDepartNameUrl().split(SymbolConstant.SINGLE_SLASH).length; + int newLength = o2.getDepartNameUrl().split(SymbolConstant.SINGLE_SLASH).length; + return oldLength - newLength; + } else { + return 0; + } + } + }); + //存放部门数据的map + Map departMap = new HashMap<>(); + //循环第二遍导入数据 + for (ExportDepartVo exportDepartVo : listSysDeparts) { + SysDepart sysDepart = new SysDepart(); + // orgCode编码长度 + int codeLength = YouBianCodeUtil.ZHANWEI_LENGTH; + Boolean izExport = false; + try { + izExport = this.addDepartByName(exportDepartVo.getDepartNameUrl(), exportDepartVo.getDepartName(), sysDepart, errorMessageList, tenantId, departMap, num); + } catch (Exception e) { + //没有查找到parentDept + } + //没有错误的时候才会导入数据 + if (izExport) { + sysDepart.setOrgType(sysDepart.getOrgCode().length() / codeLength + ""); + sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + sysDepart.setOrgCategory("1"); + sysDepart.setTenantId(tenantId); + ImportExcelUtil.importDateSaveOne(sysDepart, ISysDepartService.class, errorMessageList, num, CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE); + departMap.put(exportDepartVo.getDepartNameUrl(), sysDepart); + } + num++; + } + } - /** - * 获取部门名称url(下级) - * @param departName 部门名称 - * @param tenantId 租户id - * @param sysDepart 部门对象 - * @param count 部门路径下标 - * @param departNameUrls 部门路径 - * @param departNum 部门路径的数量 - * @param name 部门路径的数量 - * @param departMap 存放部门的数据 key 存放部门路径 value 存放部门对象 - */ - private String getDepartListByName(String departName, Integer tenantId, SysDepart sysDepart,String[] departNameUrls, int count, int departNum,String name,Map departMap) { - //递归查找下一级 - //update-begin---author:wangshuai ---date:20230721 for:一个租户部门名称可能有多个------------ - SysDepart parentDept = null; - List departList = departMapper.getDepartByName(departName,tenantId,sysDepart.getId()); - if(CollectionUtil.isNotEmpty(departList)){ - parentDept = departList.get(0); - } - //update-end---author:wangshuai ---date:20230721 for:一个租户部门名称可能有多个------------ - //判断是否包含/ - if(oConvertUtils.isNotEmpty(name)){ - name = name + SymbolConstant.SINGLE_SLASH + departName; - }else{ - name = departName; - } - if(null != parentDept){ - //如果名称路径key不再在,添加一个,避免再次查询 - if(!departMap.containsKey(name)){ - departMap.put(name,parentDept); - } - //查询出来的部门名称和部门路径中的部门名称作比较,如果不存在直接返回空 - if(parentDept.getDepartName().equals(departNameUrls[count])){ - count = count + 1; - //数量和部门数量相等说明已经到最后一位了,直接返回部门id - if(count == departNum){ - return parentDept.getId(); - }else{ - return this.getDepartListByName(departNameUrls[count],tenantId,parentDept,departNameUrls,count,departNum,name,departMap); - } - }else{ - return ""; - } - }else{ - return ""; - } - } - //========================end 零代码下部门与人员导入 ================================================================== + /** + * 添加部门 + * + * @param departNameUrl 部门路径 + * @param departName 部门名称 + * @param sysDepart 部门类 + * @param errorMessageList 错误集合 + * @param tenantId 租户id + * @param departMap 部门数组。避免存在部门信息再次查询 key 存放部门路径 value 存放部门对象 + * @param num 判断第几行有错误信息 + */ + private Boolean addDepartByName(String departNameUrl, String departName, SysDepart sysDepart, List errorMessageList, Integer tenantId, Map departMap, int num) { + int lineNumber = num + 1; + if (oConvertUtils.isEmpty(departNameUrl) && oConvertUtils.isEmpty(departName)) { + //部门路径为空 + errorMessageList.add("第 " + lineNumber + " 行:记录部门路径或者部门名称为空禁止导入"); + return false; + } + //获取部门名称路径 + String name = ""; + if (departNameUrl.contains(SymbolConstant.SINGLE_SLASH)) { + //获取分割的部门名称 + name = departNameUrl.substring(departNameUrl.lastIndexOf(SymbolConstant.SINGLE_SLASH) + 1); + } else { + name = departNameUrl; + } - /** - * 清空部门id - * - * @param parentIdList - */ - private void setParentDepartIzLeaf(List parentIdList) { - if (CollectionUtil.isNotEmpty(parentIdList)) { - for (String parentId : parentIdList) { - //查询父级id没有子级的时候跟新为叶子节点 - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysDepart::getParentId, parentId); - Long count = departMapper.selectCount(query); - //当子级都不存在时,设置当前部门为叶子节点 - if (count == 0) { - departMapper.setMainLeaf(parentId, CommonConstant.IS_LEAF); - } - } - } - } + if (!name.equals(departName)) { + //部门名称已存在 + errorMessageList.add("第 " + lineNumber + " 行:记录部门路径:”" + departNameUrl + "“" + "和部门名称:“" + departName + "“不一致,请检查!"); + return false; + } else { + String parentId = ""; + //判断是否包含“/” + if (departNameUrl.contains(SymbolConstant.SINGLE_SLASH)) { + //获取最后一个斜杠之前的路径 + String departNames = departNameUrl.substring(0, departNameUrl.lastIndexOf(SymbolConstant.SINGLE_SLASH)); + //判断是否已经包含部门路径 + if (departMap.containsKey(departNames)) { + SysDepart depart = departMap.get(departNames); + if (null != depart) { + parentId = depart.getId(); + } + } else { + //分割斜杠路径,查看数据库中是否存在此路径 + String[] departNameUrls = departNameUrl.split(SymbolConstant.SINGLE_SLASH); + String departUrlName = departNameUrls[0]; + //判断是否为最后一位 + int count = 0; + SysDepart depart = new SysDepart(); + depart.setId(""); + String parentIdByName = this.getDepartListByName(departUrlName, tenantId, depart, departNameUrls, count, departNameUrls.length - 1, name, departMap); + //如果parentId不为空 + if (oConvertUtils.isNotEmpty(parentIdByName)) { + parentId = parentIdByName; + } else { + //部门名称已存在 + errorMessageList.add("第 " + lineNumber + " 行:记录部门名称“" + departName + "”上级不存在,请检查!"); + return false; + } + } + } + //查询部门名称是否已存在 + SysDepart parentDept = null; + //update-begin---author:wangshuai ---date:20230721 for:一个租户部门名称可能有多个------------ + List sysDepartList = departMapper.getDepartByName(departName, tenantId, parentId); + if (CollectionUtil.isNotEmpty(sysDepartList)) { + parentDept = sysDepartList.get(0); + } + //update-end---author:wangshuai ---date:20230721 for:一个租户部门名称可能有多个------------ + if (null != parentDept) { + //部门名称已存在 + errorMessageList.add("第 " + lineNumber + " 行:记录部门名称“" + departName + "”已存在,请检查!"); + return false; + } else { + Page page = new Page<>(1, 1); + //需要获取父级id,查看父级是否已经存在 + //获取一级部门的最大orgCode + List records = departMapper.getMaxCodeDepart(page, parentId); + String newOrgCode = ""; + if (CollectionUtil.isNotEmpty(records)) { + newOrgCode = YouBianCodeUtil.getNextYouBianCode(records.get(0).getOrgCode()); + } else { + //查询父id + if (oConvertUtils.isNotEmpty(parentId)) { + SysDepart departById = departMapper.getDepartById(parentId); + newOrgCode = YouBianCodeUtil.getSubYouBianCode(departById.getOrgCode(), null); + } else { + newOrgCode = YouBianCodeUtil.getNextYouBianCode(null); + } + } + if (oConvertUtils.isNotEmpty(parentId)) { + this.updateIzLeaf(parentId, CommonConstant.NOT_LEAF); + sysDepart.setParentId(parentId); + } + sysDepart.setOrgCode(newOrgCode); + sysDepart.setDepartName(departName); + return true; + } - //========================begin 系统下部门与人员导入 ================================================================== - /** - * 系统部门导出 - * @param tenantId - * @return - */ - @Override - public List getExportDepart(Integer tenantId) { - //获取父级部门 - List parentDepart = departMapper.getSysDepartList("", tenantId); - //子部门 - List childrenDepart = new ArrayList<>(); - //把一级部门名称放在里面 - List exportDepartVoList = new ArrayList<>(); - //存放部门一级id避免重复 - List departIdList = new ArrayList<>(); - for (SysDepartExportVo sysDepart : parentDepart) { - //step 1.添加第一级部门 - departIdList.add(sysDepart.getId()); - sysDepart.setDepartNameUrl(sysDepart.getDepartName()); - exportDepartVoList.add(sysDepart); - //step 2.添加自己部门路径,用/分离 - //创建路径 - List path = new ArrayList<>(); - path.add(sysDepart.getDepartName()); - //创建子部门路径 - findSysDepartPath(sysDepart, path, tenantId, childrenDepart, departIdList); - path.clear(); - } - exportDepartVoList.addAll(childrenDepart); - childrenDepart.clear(); - departIdList.clear(); - return exportDepartVoList; - } + } + } - /** - * 系统部门导入 - * @param listSysDeparts - * @param errorMessageList - */ - @Override - public void importSysDepart(List listSysDeparts, List errorMessageList) { - int num = 0; - int tenantId = 0; - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - } - //部门路径排序 - Collections.sort(listSysDeparts, new Comparator() { - @Override - public int compare(SysDepartExportVo o1, SysDepartExportVo o2) { - if(oConvertUtils.isNotEmpty(o1.getDepartNameUrl()) && oConvertUtils.isNotEmpty(o2.getDepartNameUrl())){ - int oldLength = o1.getDepartNameUrl().split(SymbolConstant.SINGLE_SLASH).length; - int newLength = o2.getDepartNameUrl().split(SymbolConstant.SINGLE_SLASH).length; - return oldLength - newLength; - }else{ - return 0; - } - } - }); - //存放部门数据的map - Map departMap = new HashMap<>(); - // orgCode编码长度 - int codeLength = YouBianCodeUtil.ZHANWEI_LENGTH; - //循环第二遍导入数据 - for (SysDepartExportVo departExportVo : listSysDeparts) { - SysDepart sysDepart = new SysDepart(); - boolean izExport = false; - try { - izExport = this.addDepartByName(departExportVo.getDepartNameUrl(),departExportVo.getDepartName(),sysDepart,errorMessageList,tenantId,departMap,num); - } catch (Exception e) { - //没有查找到parentDept - } - //没有错误的时候才会导入数据 - if(izExport){ - if(oConvertUtils.isNotEmpty(departExportVo.getOrgCode())){ - SysDepart depart = this.baseMapper.queryCompByOrgCode(departExportVo.getOrgCode()); - if(null != depart){ - if(oConvertUtils.isNotEmpty(sysDepart.getParentId())){ - //更新上级部门为叶子节点 - this.updateIzLeaf(sysDepart.getParentId(),CommonConstant.IS_LEAF); - } - //部门名称已存在 - errorMessageList.add("第 " + num + " 行:记录部门名称“"+departExportVo.getDepartName()+"”部门编码重复,请检查!"); - continue; - } - String departNameUrl = departExportVo.getDepartNameUrl(); - //包含/说明是多级 - if(departNameUrl.contains(SymbolConstant.SINGLE_SLASH)){ - //判断添加部门的规则是否和生成的一致 - if(!sysDepart.getOrgCode().equals(departExportVo.getOrgCode())){ - if(oConvertUtils.isNotEmpty(sysDepart.getParentId())){ - //更新上级部门为叶子节点 - this.updateIzLeaf(sysDepart.getParentId(),CommonConstant.IS_LEAF); - } - //部门名称已存在 - errorMessageList.add("第 " + num + " 行:记录部门名称“"+departExportVo.getDepartName()+"”部门编码规则不匹配,请检查!"); - continue; - } - } - sysDepart.setOrgCode(departExportVo.getOrgCode()); - if(oConvertUtils.isNotEmpty(sysDepart.getParentId())){ - //上级 - sysDepart.setOrgType("2"); - }else{ - //下级 - sysDepart.setOrgType("1"); - } - }else{ - sysDepart.setOrgType(sysDepart.getOrgCode().length()/codeLength+""); - } - sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); - sysDepart.setDepartNameEn(departExportVo.getDepartNameEn()); - sysDepart.setDepartOrder(departExportVo.getDepartOrder()); - sysDepart.setOrgCategory(oConvertUtils.getString(departExportVo.getOrgCategory(),"1")); - sysDepart.setMobile(departExportVo.getMobile()); - sysDepart.setFax(departExportVo.getFax()); - sysDepart.setAddress(departExportVo.getAddress()); - sysDepart.setMemo(departExportVo.getMemo()); - ImportExcelUtil.importDateSaveOne(sysDepart, ISysDepartService.class, errorMessageList, num, CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE); - departMap.put(departExportVo.getDepartNameUrl(),sysDepart); - } - num++; - } - } + /** + * 获取部门名称url(下级) + * + * @param departName 部门名称 + * @param tenantId 租户id + * @param sysDepart 部门对象 + * @param count 部门路径下标 + * @param departNameUrls 部门路径 + * @param departNum 部门路径的数量 + * @param name 部门路径的数量 + * @param departMap 存放部门的数据 key 存放部门路径 value 存放部门对象 + */ + private String getDepartListByName(String departName, Integer tenantId, SysDepart sysDepart, String[] departNameUrls, int count, int departNum, String name, Map departMap) { + //递归查找下一级 + //update-begin---author:wangshuai ---date:20230721 for:一个租户部门名称可能有多个------------ + SysDepart parentDept = null; + List departList = departMapper.getDepartByName(departName, tenantId, sysDepart.getId()); + if (CollectionUtil.isNotEmpty(departList)) { + parentDept = departList.get(0); + } + //update-end---author:wangshuai ---date:20230721 for:一个租户部门名称可能有多个------------ + //判断是否包含/ + if (oConvertUtils.isNotEmpty(name)) { + name = name + SymbolConstant.SINGLE_SLASH + departName; + } else { + name = departName; + } + if (null != parentDept) { + //如果名称路径key不再在,添加一个,避免再次查询 + if (!departMap.containsKey(name)) { + departMap.put(name, parentDept); + } + //查询出来的部门名称和部门路径中的部门名称作比较,如果不存在直接返回空 + if (parentDept.getDepartName().equals(departNameUrls[count])) { + count = count + 1; + //数量和部门数量相等说明已经到最后一位了,直接返回部门id + if (count == departNum) { + return parentDept.getId(); + } else { + return this.getDepartListByName(departNameUrls[count], tenantId, parentDept, departNameUrls, count, departNum, name, departMap); + } + } else { + return ""; + } + } else { + return ""; + } + } + //========================end 零代码下部门与人员导入 ================================================================== - /** - * 寻找部门路径 - * - * @param departVo 部门vo - * @param path 部门路径 - * @param tenantId 租户id - * @param childrenDepart 子部门 - * @param departIdList 部门id集合 - */ - private void findSysDepartPath(SysDepartExportVo departVo, List path, Integer tenantId, List childrenDepart, List departIdList) { - //step 1.查询子部门的数据 - //获取租户id和部门父id获取的部门数据 - List departList = departMapper.getSysDepartList(departVo.getId(), tenantId); - //部门为空判断 - if (departList == null || departList.size() <= 0) { - //判断最后一个子部门是否已拼接 - if (!departIdList.contains(departVo.getId())) { - departVo.setDepartNameUrl(String.join(SymbolConstant.SINGLE_SLASH, path)); - childrenDepart.add(departVo); - } - return; - } + /** + * 清空部门id + * + * @param parentIdList + */ + private void setParentDepartIzLeaf(List parentIdList) { + if (CollectionUtil.isNotEmpty(parentIdList)) { + for (String parentId : parentIdList) { + //查询父级id没有子级的时候跟新为叶子节点 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysDepart::getParentId, parentId); + Long count = departMapper.selectCount(query); + //当子级都不存在时,设置当前部门为叶子节点 + if (count == 0) { + departMapper.setMainLeaf(parentId, CommonConstant.IS_LEAF); + } + } + } + } - for (SysDepartExportVo exportDepartVo : departList) { - //存放子级路径 - List cPath = new ArrayList<>(path); - cPath.add(exportDepartVo.getDepartName()); - //step 2.拼接子部门路径 - if (!departIdList.contains(departVo.getId())) { - departIdList.add(departVo.getId()); - departVo.setDepartNameUrl(String.join(SymbolConstant.SINGLE_SLASH, path)); - childrenDepart.add(departVo); - } - //step 3.递归查询子路径,直到找不到为止 - findSysDepartPath(exportDepartVo, cPath, tenantId, childrenDepart, departIdList); - } - } - //========================end 系统下部门与人员导入 ================================================================== + //========================begin 系统下部门与人员导入 ================================================================== + + /** + * 系统部门导出 + * + * @param tenantId + * @return + */ + @Override + public List getExportDepart(Integer tenantId) { + //获取父级部门 + List parentDepart = departMapper.getSysDepartList("", tenantId); + //子部门 + List childrenDepart = new ArrayList<>(); + //把一级部门名称放在里面 + List exportDepartVoList = new ArrayList<>(); + //存放部门一级id避免重复 + List departIdList = new ArrayList<>(); + for (SysDepartExportVo sysDepart : parentDepart) { + //step 1.添加第一级部门 + departIdList.add(sysDepart.getId()); + sysDepart.setDepartNameUrl(sysDepart.getDepartName()); + exportDepartVoList.add(sysDepart); + //step 2.添加自己部门路径,用/分离 + //创建路径 + List path = new ArrayList<>(); + path.add(sysDepart.getDepartName()); + //创建子部门路径 + findSysDepartPath(sysDepart, path, tenantId, childrenDepart, departIdList); + path.clear(); + } + exportDepartVoList.addAll(childrenDepart); + childrenDepart.clear(); + departIdList.clear(); + return exportDepartVoList; + } + + /** + * 系统部门导入 + * + * @param listSysDeparts + * @param errorMessageList + */ + @Override + public void importSysDepart(List listSysDeparts, List errorMessageList) { + int num = 0; + int tenantId = 0; + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + } + //部门路径排序 + Collections.sort(listSysDeparts, new Comparator() { + @Override + public int compare(SysDepartExportVo o1, SysDepartExportVo o2) { + if (oConvertUtils.isNotEmpty(o1.getDepartNameUrl()) && oConvertUtils.isNotEmpty(o2.getDepartNameUrl())) { + int oldLength = o1.getDepartNameUrl().split(SymbolConstant.SINGLE_SLASH).length; + int newLength = o2.getDepartNameUrl().split(SymbolConstant.SINGLE_SLASH).length; + return oldLength - newLength; + } else { + return 0; + } + } + }); + //存放部门数据的map + Map departMap = new HashMap<>(); + // orgCode编码长度 + int codeLength = YouBianCodeUtil.ZHANWEI_LENGTH; + //循环第二遍导入数据 + for (SysDepartExportVo departExportVo : listSysDeparts) { + SysDepart sysDepart = new SysDepart(); + boolean izExport = false; + try { + izExport = this.addDepartByName(departExportVo.getDepartNameUrl(), departExportVo.getDepartName(), sysDepart, errorMessageList, tenantId, departMap, num); + } catch (Exception e) { + //没有查找到parentDept + } + //没有错误的时候才会导入数据 + if (izExport) { + if (oConvertUtils.isNotEmpty(departExportVo.getOrgCode())) { + SysDepart depart = this.baseMapper.queryCompByOrgCode(departExportVo.getOrgCode()); + if (null != depart) { + if (oConvertUtils.isNotEmpty(sysDepart.getParentId())) { + //更新上级部门为叶子节点 + this.updateIzLeaf(sysDepart.getParentId(), CommonConstant.IS_LEAF); + } + //部门名称已存在 + errorMessageList.add("第 " + num + " 行:记录部门名称“" + departExportVo.getDepartName() + "”部门编码重复,请检查!"); + continue; + } + String departNameUrl = departExportVo.getDepartNameUrl(); + //包含/说明是多级 + if (departNameUrl.contains(SymbolConstant.SINGLE_SLASH)) { + //判断添加部门的规则是否和生成的一致 + if (!sysDepart.getOrgCode().equals(departExportVo.getOrgCode())) { + if (oConvertUtils.isNotEmpty(sysDepart.getParentId())) { + //更新上级部门为叶子节点 + this.updateIzLeaf(sysDepart.getParentId(), CommonConstant.IS_LEAF); + } + //部门名称已存在 + errorMessageList.add("第 " + num + " 行:记录部门名称“" + departExportVo.getDepartName() + "”部门编码规则不匹配,请检查!"); + continue; + } + } + sysDepart.setOrgCode(departExportVo.getOrgCode()); + if (oConvertUtils.isNotEmpty(sysDepart.getParentId())) { + //上级 + sysDepart.setOrgType("2"); + } else { + //下级 + sysDepart.setOrgType("1"); + } + } else { + sysDepart.setOrgType(sysDepart.getOrgCode().length() / codeLength + ""); + } + sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + sysDepart.setDepartNameEn(departExportVo.getDepartNameEn()); + sysDepart.setDepartOrder(departExportVo.getDepartOrder()); + sysDepart.setOrgCategory(oConvertUtils.getString(departExportVo.getOrgCategory(), "1")); + sysDepart.setMobile(departExportVo.getMobile()); + sysDepart.setFax(departExportVo.getFax()); + sysDepart.setAddress(departExportVo.getAddress()); + sysDepart.setMemo(departExportVo.getMemo()); + ImportExcelUtil.importDateSaveOne(sysDepart, ISysDepartService.class, errorMessageList, num, CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE); + departMap.put(departExportVo.getDepartNameUrl(), sysDepart); + } + num++; + } + } + + /** + * 寻找部门路径 + * + * @param departVo 部门vo + * @param path 部门路径 + * @param tenantId 租户id + * @param childrenDepart 子部门 + * @param departIdList 部门id集合 + */ + private void findSysDepartPath(SysDepartExportVo departVo, List path, Integer tenantId, List childrenDepart, List departIdList) { + //step 1.查询子部门的数据 + //获取租户id和部门父id获取的部门数据 + List departList = departMapper.getSysDepartList(departVo.getId(), tenantId); + //部门为空判断 + if (departList == null || departList.size() <= 0) { + //判断最后一个子部门是否已拼接 + if (!departIdList.contains(departVo.getId())) { + departVo.setDepartNameUrl(String.join(SymbolConstant.SINGLE_SLASH, path)); + childrenDepart.add(departVo); + } + return; + } + + for (SysDepartExportVo exportDepartVo : departList) { + //存放子级路径 + List cPath = new ArrayList<>(path); + cPath.add(exportDepartVo.getDepartName()); + //step 2.拼接子部门路径 + if (!departIdList.contains(departVo.getId())) { + departIdList.add(departVo.getId()); + departVo.setDepartNameUrl(String.join(SymbolConstant.SINGLE_SLASH, path)); + childrenDepart.add(departVo); + } + //step 3.递归查询子路径,直到找不到为止 + findSysDepartPath(exportDepartVo, cPath, tenantId, childrenDepart, departIdList); + } + } + //========================end 系统下部门与人员导入 ================================================================== } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictItemServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictItemServiceImpl.java index 33184a9..24d1202 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictItemServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictItemServiceImpl.java @@ -1,9 +1,9 @@ package org.jeecg.modules.system.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.system.entity.SysDictItem; import org.jeecg.modules.system.mapper.SysDictItemMapper; import org.jeecg.modules.system.service.ISysDictItemService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java index a049121..b6c4dc6 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java @@ -62,398 +62,403 @@ public class SysDictServiceImpl extends ServiceImpl impl private SysDictMapper sysDictMapper; @Autowired private SysDictItemMapper sysDictItemMapper; - @Autowired - private DictQueryBlackListHandler dictQueryBlackListHandler; + @Autowired + private DictQueryBlackListHandler dictQueryBlackListHandler; - @Lazy - @Autowired - private ISysBaseAPI sysBaseAPI; - @Lazy - @Autowired - private RedisUtil redisUtil; + @Lazy + @Autowired + private ISysBaseAPI sysBaseAPI; + @Lazy + @Autowired + private RedisUtil redisUtil; - @Override - public boolean duplicateCheckData(DuplicateCheckVo duplicateCheckVo) { - Long count = null; + @Override + public boolean duplicateCheckData(DuplicateCheckVo duplicateCheckVo) { + Long count = null; - // 1.针对采用 ${}写法的表名和字段进行转义和check - String table = SqlInjectionUtil.getSqlInjectTableName(duplicateCheckVo.getTableName()); - String fieldName = SqlInjectionUtil.getSqlInjectField(duplicateCheckVo.getFieldName()); - duplicateCheckVo.setTableName(table); - duplicateCheckVo.setFieldName(fieldName); - - // 2.SQL注入check(只限制非法串改数据库) - //关联表字典(举例:sys_user,realname,id) - SqlInjectionUtil.filterContentMulti(table, fieldName); + // 1.针对采用 ${}写法的表名和字段进行转义和check + String table = SqlInjectionUtil.getSqlInjectTableName(duplicateCheckVo.getTableName()); + String fieldName = SqlInjectionUtil.getSqlInjectField(duplicateCheckVo.getFieldName()); + duplicateCheckVo.setTableName(table); + duplicateCheckVo.setFieldName(fieldName); - String checkSql = table + SymbolConstant.COMMA + fieldName + SymbolConstant.COMMA; - // 【QQYUN-6533】表字典白名单check - sysBaseAPI.dictTableWhiteListCheckByDict(table, fieldName); - // 3.表字典黑名单check - dictQueryBlackListHandler.isPass(checkSql); + // 2.SQL注入check(只限制非法串改数据库) + //关联表字典(举例:sys_user,realname,id) + SqlInjectionUtil.filterContentMulti(table, fieldName); - // 4.执行SQL 查询是否存在值 - try{ - if (StringUtils.isNotBlank(duplicateCheckVo.getDataId())) { - // [1].编辑页面校验 - count = sysDictMapper.duplicateCheckCountSql(duplicateCheckVo); - } else { - // [2].添加页面校验 - count = sysDictMapper.duplicateCheckCountSqlNoDataId(duplicateCheckVo); - } - }catch(MyBatisSystemException e){ - log.error(e.getMessage(), e); - String errorCause = "查询异常,请检查唯一校验的配置!"; - throw new JeecgBootException(errorCause); - } + String checkSql = table + SymbolConstant.COMMA + fieldName + SymbolConstant.COMMA; + // 【QQYUN-6533】表字典白名单check + sysBaseAPI.dictTableWhiteListCheckByDict(table, fieldName); + // 3.表字典黑名单check + dictQueryBlackListHandler.isPass(checkSql); - // 4.返回结果 - if (count == null || count == 0) { - // 该值可用 - return true; - } else { - // 该值不可用 - log.info("该值不可用,系统中已存在!"); - return false; - } - } + // 4.执行SQL 查询是否存在值 + try { + if (StringUtils.isNotBlank(duplicateCheckVo.getDataId())) { + // [1].编辑页面校验 + count = sysDictMapper.duplicateCheckCountSql(duplicateCheckVo); + } else { + // [2].添加页面校验 + count = sysDictMapper.duplicateCheckCountSqlNoDataId(duplicateCheckVo); + } + } catch (MyBatisSystemException e) { + log.error(e.getMessage(), e); + String errorCause = "查询异常,请检查唯一校验的配置!"; + throw new JeecgBootException(errorCause); + } + + // 4.返回结果 + if (count == null || count == 0) { + // 该值可用 + return true; + } else { + // 该值不可用 + log.info("该值不可用,系统中已存在!"); + return false; + } + } - /** - * 通过查询指定code 获取字典 - * @param code - * @return - */ - @Override - @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code", unless = "#result == null ") - public List queryDictItemsByCode(String code) { - log.debug("无缓存dictCache的时候调用这里!"); - return sysDictMapper.queryDictItemsByCode(code); - } + /** + * 通过查询指定code 获取字典 + * + * @param code + * @return + */ + @Override + @Cacheable(value = CacheConstant.SYS_DICT_CACHE, key = "#code", unless = "#result == null ") + public List queryDictItemsByCode(String code) { + log.debug("无缓存dictCache的时候调用这里!"); + return sysDictMapper.queryDictItemsByCode(code); + } - @Override - @Cacheable(value = CacheConstant.SYS_ENABLE_DICT_CACHE,key = "#code", unless = "#result == null ") - public List queryEnableDictItemsByCode(String code) { - log.debug("无缓存dictCache的时候调用这里!"); - return sysDictMapper.queryEnableDictItemsByCode(code); - } + @Override + @Cacheable(value = CacheConstant.SYS_ENABLE_DICT_CACHE, key = "#code", unless = "#result == null ") + public List queryEnableDictItemsByCode(String code) { + log.debug("无缓存dictCache的时候调用这里!"); + return sysDictMapper.queryEnableDictItemsByCode(code); + } - @Override - public Map> queryDictItemsByCodeList(List dictCodeList) { - List list = sysDictMapper.queryDictItemsByCodeList(dictCodeList); - Map> dictMap = new HashMap(5); - for (DictModelMany dict : list) { - List dictItemList = dictMap.computeIfAbsent(dict.getDictCode(), i -> new ArrayList<>()); - - //update-begin-author:taoyan date:2023-4-28 for: QQYUN-5183【简流】多字段拼接-多选框、下拉框 等需要翻译的字段 - //dict.setDictCode(null); - //update-end-author:taoyan date:2023-4-28 for: QQYUN-5183【简流】多字段拼接-多选框、下拉框 等需要翻译的字段 - - dictItemList.add(new DictModel(dict.getValue(), dict.getText(), dict.getColor())); - } - return dictMap; - } + @Override + public Map> queryDictItemsByCodeList(List dictCodeList) { + List list = sysDictMapper.queryDictItemsByCodeList(dictCodeList); + Map> dictMap = new HashMap(5); + for (DictModelMany dict : list) { + List dictItemList = dictMap.computeIfAbsent(dict.getDictCode(), i -> new ArrayList<>()); - @Override - public Map> queryAllDictItems() { - log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); - long start = System.currentTimeMillis(); - Map> sysAllDictItems = new HashMap(5); - List tenantIds = null; - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - tenantIds = new ArrayList<>(); - tenantIds.add(0); - if (TenantContext.getTenant() != null) { - tenantIds.add(oConvertUtils.getInt(TenantContext.getTenant())); - } - } - //------------------------------------------------------------------------------------------------ - List sysDictItemList = sysDictMapper.queryAllDictItems(tenantIds); - // 使用groupingBy根据dictCode分组 - sysAllDictItems = sysDictItemList.stream() - .collect(Collectors.groupingBy(DictModelMany::getDictCode, - Collectors.mapping(d -> new DictModel(d.getValue(), d.getText(), d.getColor()), Collectors.toList()))); - log.info(" >>> 1 获取系统字典项耗时(SQL):" + (System.currentTimeMillis() - start) + "毫秒"); + //update-begin-author:taoyan date:2023-4-28 for: QQYUN-5183【简流】多字段拼接-多选框、下拉框 等需要翻译的字段 + //dict.setDictCode(null); + //update-end-author:taoyan date:2023-4-28 for: QQYUN-5183【简流】多字段拼接-多选框、下拉框 等需要翻译的字段 - Map> enumRes = ResourceUtil.getEnumDictData(); - sysAllDictItems.putAll(enumRes); - log.info(" >>> 2 获取系统字典项耗时(Enum):" + (System.currentTimeMillis() - start) + "毫秒"); - - log.info(" >>> end 获取系统字典库总耗时:" + (System.currentTimeMillis() - start) + "毫秒"); - log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); + dictItemList.add(new DictModel(dict.getValue(), dict.getText(), dict.getColor())); + } + return dictMap; + } - //log.info("-------登录加载系统字典-----" + sysAllDictItems.toString()); - return sysAllDictItems; - } + @Override + public Map> queryAllDictItems() { + log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); + long start = System.currentTimeMillis(); + Map> sysAllDictItems = new HashMap(5); + List tenantIds = null; + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + tenantIds = new ArrayList<>(); + tenantIds.add(0); + if (TenantContext.getTenant() != null) { + tenantIds.add(oConvertUtils.getInt(TenantContext.getTenant())); + } + } + //------------------------------------------------------------------------------------------------ + List sysDictItemList = sysDictMapper.queryAllDictItems(tenantIds); + // 使用groupingBy根据dictCode分组 + sysAllDictItems = sysDictItemList.stream() + .collect(Collectors.groupingBy(DictModelMany::getDictCode, + Collectors.mapping(d -> new DictModel(d.getValue(), d.getText(), d.getColor()), Collectors.toList()))); + log.info(" >>> 1 获取系统字典项耗时(SQL):" + (System.currentTimeMillis() - start) + "毫秒"); - /** - * 通过查询指定code 获取字典值text - * @param code - * @param key - * @return - */ + Map> enumRes = ResourceUtil.getEnumDictData(); + sysAllDictItems.putAll(enumRes); + log.info(" >>> 2 获取系统字典项耗时(Enum):" + (System.currentTimeMillis() - start) + "毫秒"); - @Override - @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code+':'+#key", unless = "#result == null ") - public String queryDictTextByKey(String code, String key) { - log.debug("无缓存dictText的时候调用这里!"); - return sysDictMapper.queryDictTextByKey(code, key); - } + log.info(" >>> end 获取系统字典库总耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); - @Override - public Map> queryManyDictByKeys(List dictCodeList, List keys) { - List list = sysDictMapper.queryManyDictByKeys(dictCodeList, keys); - Map> dictMap = new HashMap(5); - for (DictModelMany dict : list) { - List dictItemList = dictMap.computeIfAbsent(dict.getDictCode(), i -> new ArrayList<>()); - dictItemList.add(new DictModel(dict.getValue(), dict.getText())); - } - //update-begin-author:taoyan date:2022-7-8 for: 系统字典数据应该包括自定义的java类-枚举 - Map> enumRes = ResourceUtil.queryManyDictByKeys(dictCodeList, keys); - dictMap.putAll(enumRes); - //update-end-author:taoyan date:2022-7-8 for: 系统字典数据应该包括自定义的java类-枚举 - return dictMap; - } + //log.info("-------登录加载系统字典-----" + sysAllDictItems.toString()); + return sysAllDictItems; + } - /** - * 通过查询指定table的 text code 获取字典 - * dictTableCache采用redis缓存有效期10分钟 - * @param tableFilterSql - * @param text - * @param code - * @return - */ - @Override - @Deprecated - public List queryTableDictItemsByCode(String tableFilterSql, String text, String code) { - log.debug("无缓存dictTableList的时候调用这里!"); - String str = tableFilterSql+","+text+","+code; - // 【QQYUN-6533】表字典白名单check - sysBaseAPI.dictTableWhiteListCheckByDict(tableFilterSql, text, code); - // 1.表字典黑名单check - if(!dictQueryBlackListHandler.isPass(str)){ - log.error(dictQueryBlackListHandler.getError()); - return null; - } + /** + * 通过查询指定code 获取字典值text + * + * @param code + * @param key + * @return + */ - // 2.分割SQL获取表名和条件 - String table = null; - String filterSql = null; - if(tableFilterSql.toLowerCase().indexOf(DataBaseConstant.SQL_WHERE)>0){ - String[] arr = tableFilterSql.split(" (?i)where "); - table = arr[0]; - filterSql = oConvertUtils.getString(arr[1], null); - }else{ - table = tableFilterSql; - } - - // 3.SQL注入check - SqlInjectionUtil.filterContentMulti(table, text, code); - SqlInjectionUtil.specialFilterContentForDictSql(filterSql); - - // 4.针对采用 ${}写法的表名和字段进行转义和check - table = SqlInjectionUtil.getSqlInjectTableName(table); - text = SqlInjectionUtil.getSqlInjectField(text); - code = SqlInjectionUtil.getSqlInjectField(code); - - //return sysDictMapper.queryTableDictItemsByCode(tableFilterSql,text,code); - table = table.toLowerCase(); - return sysDictMapper.queryTableDictWithFilter(table,text,code,filterSql); - } + @Override + @Cacheable(value = CacheConstant.SYS_DICT_CACHE, key = "#code+':'+#key", unless = "#result == null ") + public String queryDictTextByKey(String code, String key) { + log.debug("无缓存dictText的时候调用这里!"); + return sysDictMapper.queryDictTextByKey(code, key); + } - @Override - public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql) { - log.debug("无缓存dictTableList的时候调用这里!"); + @Override + public Map> queryManyDictByKeys(List dictCodeList, List keys) { + List list = sysDictMapper.queryManyDictByKeys(dictCodeList, keys); + Map> dictMap = new HashMap(5); + for (DictModelMany dict : list) { + List dictItemList = dictMap.computeIfAbsent(dict.getDictCode(), i -> new ArrayList<>()); + dictItemList.add(new DictModel(dict.getValue(), dict.getText())); + } + //update-begin-author:taoyan date:2022-7-8 for: 系统字典数据应该包括自定义的java类-枚举 + Map> enumRes = ResourceUtil.queryManyDictByKeys(dictCodeList, keys); + dictMap.putAll(enumRes); + //update-end-author:taoyan date:2022-7-8 for: 系统字典数据应该包括自定义的java类-枚举 + return dictMap; + } - // 1.SQL注入校验(只限制非法串改数据库) - SqlInjectionUtil.specialFilterContentForDictSql(table); - SqlInjectionUtil.filterContentMulti(text, code); - SqlInjectionUtil.specialFilterContentForDictSql(filterSql); - - String str = table+","+text+","+code; - // 【QQYUN-6533】表字典白名单check - sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); - // 2.表字典黑名单 Check - if(!dictQueryBlackListHandler.isPass(str)){ - log.error(dictQueryBlackListHandler.getError()); - return null; - } + /** + * 通过查询指定table的 text code 获取字典 + * dictTableCache采用redis缓存有效期10分钟 + * + * @param tableFilterSql + * @param text + * @param code + * @return + */ + @Override + @Deprecated + public List queryTableDictItemsByCode(String tableFilterSql, String text, String code) { + log.debug("无缓存dictTableList的时候调用这里!"); + String str = tableFilterSql + "," + text + "," + code; + // 【QQYUN-6533】表字典白名单check + sysBaseAPI.dictTableWhiteListCheckByDict(tableFilterSql, text, code); + // 1.表字典黑名单check + if (!dictQueryBlackListHandler.isPass(str)) { + log.error(dictQueryBlackListHandler.getError()); + return null; + } - // 3.针对采用 ${}写法的表名和字段进行转义和check - table = SqlInjectionUtil.getSqlInjectTableName(table); - text = SqlInjectionUtil.getSqlInjectField(text); - code = SqlInjectionUtil.getSqlInjectField(code); - table = table.toLowerCase(); - return sysDictMapper.queryTableDictWithFilter(table,text,code,filterSql); - } - - /** - * 通过查询指定table的 text code 获取字典值text - * dictTableCache采用redis缓存有效期10分钟 - * @param table - * @param text - * @param code - * @param key - * @return - */ - @Override - @Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE, unless = "#result == null ") - public String queryTableDictTextByKey(String table,String text,String code, String key) { - log.debug("无缓存dictTable的时候调用这里!"); - - String str = table+","+text+","+code; - // 【QQYUN-6533】表字典白名单check - sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); - // 1.表字典黑名单check - if(!dictQueryBlackListHandler.isPass(str)){ - log.error(dictQueryBlackListHandler.getError()); - return null; - } - // 2.sql注入check - SqlInjectionUtil.filterContentMulti(table, text, code, key); + // 2.分割SQL获取表名和条件 + String table = null; + String filterSql = null; + if (tableFilterSql.toLowerCase().indexOf(DataBaseConstant.SQL_WHERE) > 0) { + String[] arr = tableFilterSql.split(" (?i)where "); + table = arr[0]; + filterSql = oConvertUtils.getString(arr[1], null); + } else { + table = tableFilterSql; + } - // 3.针对采用 ${}写法的表名和字段进行转义和check - table = SqlInjectionUtil.getSqlInjectTableName(table); - text = SqlInjectionUtil.getSqlInjectField(text); - code = SqlInjectionUtil.getSqlInjectField(code); - - List dictModeList = sysDictMapper.queryTableDictByKeysAndFilterSql(table, text, code, null, Arrays.asList(key)); - if(CollectionUtils.isEmpty(dictModeList)){ - return null; - }else{ - return dictModeList.get(0).getText(); - } - - //此方法删除(20230902) - //return sysDictMapper.queryTableDictTextByKey(table,text,code,key); - } + // 3.SQL注入check + SqlInjectionUtil.filterContentMulti(table, text, code); + SqlInjectionUtil.specialFilterContentForDictSql(filterSql); - @Override - public List queryTableDictTextByKeys(String table, String text, String code, List codeValues, String dataSource) { - String str = table+","+text+","+code; - //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ - // 是否自定义数据源 - boolean isCustomDataSource = oConvertUtils.isNotEmpty(dataSource); - // 如果是自定义数据源就不检查表字典白名单 - if (!isCustomDataSource) { - // 【QQYUN-6533】表字典白名单check - sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); - // 1.表字典黑名单check - if (!dictQueryBlackListHandler.isPass(str)) { - log.error(dictQueryBlackListHandler.getError()); - return null; - } - } - //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + // 4.针对采用 ${}写法的表名和字段进行转义和check + table = SqlInjectionUtil.getSqlInjectTableName(table); + text = SqlInjectionUtil.getSqlInjectField(text); + code = SqlInjectionUtil.getSqlInjectField(code); - // 2.分割SQL获取表名和条件 - String filterSql = null; - if(table.toLowerCase().indexOf(DataBaseConstant.SQL_WHERE)>0){ - String[] arr = table.split(" (?i)where "); - table = arr[0]; - filterSql = arr[1]; - } - - // 3.SQL注入check - SqlInjectionUtil.filterContentMulti(table, text, code); - SqlInjectionUtil.specialFilterContentForDictSql(filterSql); + //return sysDictMapper.queryTableDictItemsByCode(tableFilterSql,text,code); + table = table.toLowerCase(); + return sysDictMapper.queryTableDictWithFilter(table, text, code, filterSql); + } - // 4.针对采用 ${}写法的表名和字段进行转义和check - table = SqlInjectionUtil.getSqlInjectTableName(table); - text = SqlInjectionUtil.getSqlInjectField(text); - code = SqlInjectionUtil.getSqlInjectField(code); + @Override + public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql) { + log.debug("无缓存dictTableList的时候调用这里!"); - //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + // 1.SQL注入校验(只限制非法串改数据库) + SqlInjectionUtil.specialFilterContentForDictSql(table); + SqlInjectionUtil.filterContentMulti(text, code); + SqlInjectionUtil.specialFilterContentForDictSql(filterSql); + + String str = table + "," + text + "," + code; + // 【QQYUN-6533】表字典白名单check + sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); + // 2.表字典黑名单 Check + if (!dictQueryBlackListHandler.isPass(str)) { + log.error(dictQueryBlackListHandler.getError()); + return null; + } + + // 3.针对采用 ${}写法的表名和字段进行转义和check + table = SqlInjectionUtil.getSqlInjectTableName(table); + text = SqlInjectionUtil.getSqlInjectField(text); + code = SqlInjectionUtil.getSqlInjectField(code); + table = table.toLowerCase(); + return sysDictMapper.queryTableDictWithFilter(table, text, code, filterSql); + } + + /** + * 通过查询指定table的 text code 获取字典值text + * dictTableCache采用redis缓存有效期10分钟 + * + * @param table + * @param text + * @param code + * @param key + * @return + */ + @Override + @Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE, unless = "#result == null ") + public String queryTableDictTextByKey(String table, String text, String code, String key) { + log.debug("无缓存dictTable的时候调用这里!"); + + String str = table + "," + text + "," + code; + // 【QQYUN-6533】表字典白名单check + sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); + // 1.表字典黑名单check + if (!dictQueryBlackListHandler.isPass(str)) { + log.error(dictQueryBlackListHandler.getError()); + return null; + } + // 2.sql注入check + SqlInjectionUtil.filterContentMulti(table, text, code, key); + + // 3.针对采用 ${}写法的表名和字段进行转义和check + table = SqlInjectionUtil.getSqlInjectTableName(table); + text = SqlInjectionUtil.getSqlInjectField(text); + code = SqlInjectionUtil.getSqlInjectField(code); + + List dictModeList = sysDictMapper.queryTableDictByKeysAndFilterSql(table, text, code, null, Arrays.asList(key)); + if (CollectionUtils.isEmpty(dictModeList)) { + return null; + } else { + return dictModeList.get(0).getText(); + } + + //此方法删除(20230902) + //return sysDictMapper.queryTableDictTextByKey(table,text,code,key); + } + + @Override + public List queryTableDictTextByKeys(String table, String text, String code, List codeValues, String dataSource) { + String str = table + "," + text + "," + code; + //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + // 是否自定义数据源 + boolean isCustomDataSource = oConvertUtils.isNotEmpty(dataSource); + // 如果是自定义数据源就不检查表字典白名单 + if (!isCustomDataSource) { + // 【QQYUN-6533】表字典白名单check + sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); + // 1.表字典黑名单check + if (!dictQueryBlackListHandler.isPass(str)) { + log.error(dictQueryBlackListHandler.getError()); + return null; + } + } + //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + + // 2.分割SQL获取表名和条件 + String filterSql = null; + if (table.toLowerCase().indexOf(DataBaseConstant.SQL_WHERE) > 0) { + String[] arr = table.split(" (?i)where "); + table = arr[0]; + filterSql = arr[1]; + } + + // 3.SQL注入check + SqlInjectionUtil.filterContentMulti(table, text, code); + SqlInjectionUtil.specialFilterContentForDictSql(filterSql); + + // 4.针对采用 ${}写法的表名和字段进行转义和check + table = SqlInjectionUtil.getSqlInjectTableName(table); + text = SqlInjectionUtil.getSqlInjectField(text); + code = SqlInjectionUtil.getSqlInjectField(code); + + //update-begin---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ // 切换为字典表的数据源 if (isCustomDataSource) { DynamicDataSourceContextHolder.push(dataSource); } - List restData = sysDictMapper.queryTableDictByKeysAndFilterSql(table, text, code, filterSql, codeValues); - // 清理自定义的数据源 - if (isCustomDataSource) { - DynamicDataSourceContextHolder.clear(); - } - return restData; - //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ - //update-end-author:taoyan date:20220113 for: @dict注解支持 dicttable 设置where条件 - } + List restData = sysDictMapper.queryTableDictByKeysAndFilterSql(table, text, code, filterSql, codeValues); + // 清理自定义的数据源 + if (isCustomDataSource) { + DynamicDataSourceContextHolder.clear(); + } + return restData; + //update-end---author:chenrui ---date:20231221 for:[issues/#5643]解决分布式下表字典跨库无法查询问题------------ + //update-end-author:taoyan date:20220113 for: @dict注解支持 dicttable 设置where条件 + } - @Override - public List queryTableDictByKeys(String table, String text, String code, String keys) { - String str = table+","+text+","+code; - // 【QQYUN-6533】表字典白名单check - sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); - // 1.表字典黑名单check - if(!dictQueryBlackListHandler.isPass(str)){ - log.error(dictQueryBlackListHandler.getError()); - return null; - } - - return this.queryTableDictByKeys(table, text, code, keys, true); - } + @Override + public List queryTableDictByKeys(String table, String text, String code, String keys) { + String str = table + "," + text + "," + code; + // 【QQYUN-6533】表字典白名单check + sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); + // 1.表字典黑名单check + if (!dictQueryBlackListHandler.isPass(str)) { + log.error(dictQueryBlackListHandler.getError()); + return null; + } - /** - * 通过查询指定table的 text code 获取字典,包含text和value - * dictTableCache采用redis缓存有效期10分钟 - * @param table - * @param text - * @param code - * @param codeValuesStr (逗号分隔) - * @param delNotExist 是否移除不存在的项,默认为true,设为false如果某个key不存在数据库中,则直接返回key本身 - * @return - */ - @Override - public List queryTableDictByKeys(String table, String text, String code, String codeValuesStr, boolean delNotExist) { - if(oConvertUtils.isEmpty(codeValuesStr)){ - return null; - } + return this.queryTableDictByKeys(table, text, code, keys, true); + } - //1.分割sql获取表名 和 条件sql - String filterSql = null; - if(table.toLowerCase().indexOf("where")!=-1){ - String[] arr = table.split(" (?i)where "); - table = arr[0]; - filterSql = arr[1]; - } + /** + * 通过查询指定table的 text code 获取字典,包含text和value + * dictTableCache采用redis缓存有效期10分钟 + * + * @param table + * @param text + * @param code + * @param codeValuesStr (逗号分隔) + * @param delNotExist 是否移除不存在的项,默认为true,设为false如果某个key不存在数据库中,则直接返回key本身 + * @return + */ + @Override + public List queryTableDictByKeys(String table, String text, String code, String codeValuesStr, boolean delNotExist) { + if (oConvertUtils.isEmpty(codeValuesStr)) { + return null; + } - // 2.SQL注入check - SqlInjectionUtil.filterContentMulti(table, text, code); - SqlInjectionUtil.specialFilterContentForDictSql(filterSql); + //1.分割sql获取表名 和 条件sql + String filterSql = null; + if (table.toLowerCase().indexOf("where") != -1) { + String[] arr = table.split(" (?i)where "); + table = arr[0]; + filterSql = arr[1]; + } - String str = table+","+text+","+code; - // 【QQYUN-6533】表字典白名单check - sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); - // 3.表字典黑名单check - if(!dictQueryBlackListHandler.isPass(str)){ - log.error(dictQueryBlackListHandler.getError()); - return null; - } - - // 4.针对采用 ${}写法的表名和字段进行转义和check - table = SqlInjectionUtil.getSqlInjectTableName(table); - text = SqlInjectionUtil.getSqlInjectField(text); - code = SqlInjectionUtil.getSqlInjectField(code); - - //字典条件值 - String[] codeValues = codeValuesStr.split(","); - // 5.查询字典数据 - List dicts = sysDictMapper.queryTableDictByKeysAndFilterSql(SqlInjectionUtil.getSqlInjectTableName(table), - SqlInjectionUtil.getSqlInjectField(text), SqlInjectionUtil.getSqlInjectField(code), filterSql, Arrays.asList(codeValues)); - - List texts = new ArrayList<>(dicts.size()); - // 6.查询出来的顺序可能是乱的,需要排个序 - for (String conditionalVal : codeValues) { - List res = dicts.stream().filter(i -> conditionalVal.equals(i.getValue())).collect(Collectors.toList()); - if (res.size() > 0) { - texts.add(res.get(0).getText()); - } else if (!delNotExist) { - texts.add(conditionalVal); - } - } - return texts; - } + // 2.SQL注入check + SqlInjectionUtil.filterContentMulti(table, text, code); + SqlInjectionUtil.specialFilterContentForDictSql(filterSql); + + String str = table + "," + text + "," + code; + // 【QQYUN-6533】表字典白名单check + sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); + // 3.表字典黑名单check + if (!dictQueryBlackListHandler.isPass(str)) { + log.error(dictQueryBlackListHandler.getError()); + return null; + } + + // 4.针对采用 ${}写法的表名和字段进行转义和check + table = SqlInjectionUtil.getSqlInjectTableName(table); + text = SqlInjectionUtil.getSqlInjectField(text); + code = SqlInjectionUtil.getSqlInjectField(code); + + //字典条件值 + String[] codeValues = codeValuesStr.split(","); + // 5.查询字典数据 + List dicts = sysDictMapper.queryTableDictByKeysAndFilterSql(SqlInjectionUtil.getSqlInjectTableName(table), + SqlInjectionUtil.getSqlInjectField(text), SqlInjectionUtil.getSqlInjectField(code), filterSql, Arrays.asList(codeValues)); + + List texts = new ArrayList<>(dicts.size()); + // 6.查询出来的顺序可能是乱的,需要排个序 + for (String conditionalVal : codeValues) { + List res = dicts.stream().filter(i -> conditionalVal.equals(i.getValue())).collect(Collectors.toList()); + if (res.size() > 0) { + texts.add(res.get(0).getText()); + } else if (!delNotExist) { + texts.add(conditionalVal); + } + } + return texts; + } /** * 根据字典类型id删除关联表中其对应的数据 @@ -461,116 +466,116 @@ public class SysDictServiceImpl extends ServiceImpl impl @Override public boolean deleteByDictId(SysDict sysDict) { sysDict.setDelFlag(CommonConstant.DEL_FLAG_1); - return this.updateById(sysDict); + return this.updateById(sysDict); } @Override @Transactional(rollbackFor = Exception.class) public Integer saveMain(SysDict sysDict, List sysDictItemList) { - int insert=0; - try{ - insert = sysDictMapper.insert(sysDict); - if (sysDictItemList != null) { - for (SysDictItem entity : sysDictItemList) { + int insert = 0; + try { + insert = sysDictMapper.insert(sysDict); + if (sysDictItemList != null) { + for (SysDictItem entity : sysDictItemList) { //update-begin---author:wangshuai ---date:20220211 for:[JTC-1168]如果字典项值为空,则字典项忽略导入------------ - if(oConvertUtils.isEmpty(entity.getItemValue())){ - return -1; + if (oConvertUtils.isEmpty(entity.getItemValue())) { + return -1; } //update-end---author:wangshuai ---date:20220211 for:[JTC-1168]如果字典项值为空,则字典项忽略导入------------ - entity.setDictId(sysDict.getId()); - entity.setStatus(1); - sysDictItemMapper.insert(entity); - } - } - }catch(Exception e){ - return insert; - } - return insert; + entity.setDictId(sysDict.getId()); + entity.setStatus(1); + sysDictItemMapper.insert(entity); + } + } + } catch (Exception e) { + return insert; + } + return insert; } - @Override - public List queryAllDepartBackDictModel() { - return baseMapper.queryAllDepartBackDictModel(); - } + @Override + public List queryAllDepartBackDictModel() { + return baseMapper.queryAllDepartBackDictModel(); + } + + @Override + public List queryAllUserBackDictModel() { + return baseMapper.queryAllUserBackDictModel(); + } - @Override - public List queryAllUserBackDictModel() { - return baseMapper.queryAllUserBackDictModel(); - } - // @Override // public List queryTableDictItems(String table, String text, String code, String keyword) { // return baseMapper.queryTableDictItems(table, text, code, "%"+keyword+"%"); // } - @Override - public List queryLittleTableDictItems(String tableSql, String text, String code, String condition, String keyword, int pageSize) { - Page page = new Page(1, pageSize); - page.setSearchCount(false); - - //为了防止sql(jeecg提供了防注入的方法,可以在拼接 SQL 语句时自动对参数进行转义,避免SQL注入攻击) - // 1. 针对采用 ${}写法的表名和字段进行转义和check - String table = SqlInjectionUtil.getSqlInjectTableName(CommonUtils.getTableNameByTableSql(tableSql)); - text = SqlInjectionUtil.getSqlInjectField(text); - code = SqlInjectionUtil.getSqlInjectField(code); + @Override + public List queryLittleTableDictItems(String tableSql, String text, String code, String condition, String keyword, int pageSize) { + Page page = new Page(1, pageSize); + page.setSearchCount(false); - // 2. 查询条件SQL (获取条件sql方法含sql注入校验) - String filterSql = getFilterSql(tableSql, text, code, condition, keyword); - - // 3. 返回表字典数据 - IPage pageList = baseMapper.queryPageTableDictWithFilter(page, table, text, code, filterSql); - return pageList.getRecords(); - } + //为了防止sql(jeecg提供了防注入的方法,可以在拼接 SQL 语句时自动对参数进行转义,避免SQL注入攻击) + // 1. 针对采用 ${}写法的表名和字段进行转义和check + String table = SqlInjectionUtil.getSqlInjectTableName(CommonUtils.getTableNameByTableSql(tableSql)); + text = SqlInjectionUtil.getSqlInjectField(text); + code = SqlInjectionUtil.getSqlInjectField(code); - /** - * 获取条件语句 (下拉搜索组件 支持传入排序信息 查询排序) - * - * @param text - * @param code - * @param condition - * @param keyword - * @return - */ - private String getFilterSql(String tableSql, String text, String code, String condition, String keyword){ - String filterSql = ""; - String keywordSql = null; - String sqlWhere = "where "; - String sqlAnd = " and "; - - //【JTC-631】判断如果 table 携带了 where 条件,那么就使用 and 查询,防止报错 - boolean tableHasWhere = tableSql.toLowerCase().contains(sqlWhere); + // 2. 查询条件SQL (获取条件sql方法含sql注入校验) + String filterSql = getFilterSql(tableSql, text, code, condition, keyword); + + // 3. 返回表字典数据 + IPage pageList = baseMapper.queryPageTableDictWithFilter(page, table, text, code, filterSql); + return pageList.getRecords(); + } + + /** + * 获取条件语句 (下拉搜索组件 支持传入排序信息 查询排序) + * + * @param text + * @param code + * @param condition + * @param keyword + * @return + */ + private String getFilterSql(String tableSql, String text, String code, String condition, String keyword) { + String filterSql = ""; + String keywordSql = null; + String sqlWhere = "where "; + String sqlAnd = " and "; + + //【JTC-631】判断如果 table 携带了 where 条件,那么就使用 and 查询,防止报错 + boolean tableHasWhere = tableSql.toLowerCase().contains(sqlWhere); if (tableHasWhere) { - sqlWhere = CommonUtils.getFilterSqlByTableSql(tableSql); - } + sqlWhere = CommonUtils.getFilterSqlByTableSql(tableSql); + } - // 下拉搜索组件 支持传入排序信息 查询排序 - String orderField = "", orderType = ""; - if (oConvertUtils.isNotEmpty(keyword)) { - // 关键字里面如果写入了 排序信息 xxxxx[orderby:create_time,desc] - String orderKey = "[orderby"; - if (keyword.indexOf(orderKey) >= 0 && keyword.endsWith("]")) { - String orderInfo = keyword.substring(keyword.indexOf(orderKey) + orderKey.length() + 1, keyword.length() - 1); - keyword = keyword.substring(0, keyword.indexOf(orderKey)); - String[] orderInfoArray = orderInfo.split(SymbolConstant.COMMA); - orderField = orderInfoArray[0]; - orderType = orderInfoArray[1]; - } + // 下拉搜索组件 支持传入排序信息 查询排序 + String orderField = "", orderType = ""; + if (oConvertUtils.isNotEmpty(keyword)) { + // 关键字里面如果写入了 排序信息 xxxxx[orderby:create_time,desc] + String orderKey = "[orderby"; + if (keyword.indexOf(orderKey) >= 0 && keyword.endsWith("]")) { + String orderInfo = keyword.substring(keyword.indexOf(orderKey) + orderKey.length() + 1, keyword.length() - 1); + keyword = keyword.substring(0, keyword.indexOf(orderKey)); + String[] orderInfoArray = orderInfo.split(SymbolConstant.COMMA); + orderField = orderInfoArray[0]; + orderType = orderInfoArray[1]; + } - if (oConvertUtils.isNotEmpty(keyword)) { - // 判断是否是多选 - if (keyword.contains(SymbolConstant.COMMA)) { - //update-begin--author:scott--date:20220105--for:JTC-529【表单设计器】 编辑页面报错,in参数采用双引号导致 ---- - String inKeywords = "'" + String.join("','", keyword.split(",")) + "'"; - //update-end--author:scott--date:20220105--for:JTC-529【表单设计器】 编辑页面报错,in参数采用双引号导致---- - keywordSql = "(" + text + " in (" + inKeywords + ") or " + code + " in (" + inKeywords + "))"; - } else { - keywordSql = "("+text + " like '%"+keyword+"%' or "+ code + " like '%"+keyword+"%')"; - } - } - } - - //下拉搜索组件 支持传入排序信息 查询排序 - //update-begin---author:chenrui ---date:20240327 for:[QQYUN-8514]Online表单中 下拉搜索框 搜索时报sql错误,生成的SQL多了一个 “and" ------------ + if (oConvertUtils.isNotEmpty(keyword)) { + // 判断是否是多选 + if (keyword.contains(SymbolConstant.COMMA)) { + //update-begin--author:scott--date:20220105--for:JTC-529【表单设计器】 编辑页面报错,in参数采用双引号导致 ---- + String inKeywords = "'" + String.join("','", keyword.split(",")) + "'"; + //update-end--author:scott--date:20220105--for:JTC-529【表单设计器】 编辑页面报错,in参数采用双引号导致---- + keywordSql = "(" + text + " in (" + inKeywords + ") or " + code + " in (" + inKeywords + "))"; + } else { + keywordSql = "(" + text + " like '%" + keyword + "%' or " + code + " like '%" + keyword + "%')"; + } + } + } + + //下拉搜索组件 支持传入排序信息 查询排序 + //update-begin---author:chenrui ---date:20240327 for:[QQYUN-8514]Online表单中 下拉搜索框 搜索时报sql错误,生成的SQL多了一个 “and" ------------ if (oConvertUtils.isNotEmpty(condition) && oConvertUtils.isNotEmpty(keywordSql)) { filterSql += sqlWhere + (tableHasWhere ? sqlAnd : " ") + condition + sqlAnd + keywordSql; } else if (oConvertUtils.isNotEmpty(condition)) { @@ -580,305 +585,308 @@ public class SysDictServiceImpl extends ServiceImpl impl } else if (tableHasWhere) { filterSql += sqlWhere; } - //update-end---author:chenrui ---date:20240327 for:[QQYUN-8514]Online表单中 下拉搜索框 搜索时报sql错误,生成的SQL多了一个 “and" ------------ - // 增加排序逻辑 - if (oConvertUtils.isNotEmpty(orderField)) { - filterSql += " order by " + orderField + " " + orderType; - } + //update-end---author:chenrui ---date:20240327 for:[QQYUN-8514]Online表单中 下拉搜索框 搜索时报sql错误,生成的SQL多了一个 “and" ------------ + // 增加排序逻辑 + if (oConvertUtils.isNotEmpty(orderField)) { + filterSql += " order by " + orderField + " " + orderType; + } - // 处理返回条件 - // 1.1 返回条件SQL(去掉开头的 where ) - final String wherePrefix = "(?i)where "; // (?i) 表示不区分大小写 - String filterSqlString = filterSql.trim().replaceAll(wherePrefix, ""); - // 1.2 条件SQL进行漏洞 check - SqlInjectionUtil.specialFilterContentForDictSql(filterSqlString); - // 1.3 判断如何返回条件是 order by开头则前面拼上 1=1 - if (oConvertUtils.isNotEmpty(filterSqlString) && filterSqlString.trim().toUpperCase().startsWith("ORDER")) { - filterSqlString = " 1=1 " + filterSqlString; - } - return filterSqlString; - } - - - @Override - public List queryAllTableDictItems(String table, String text, String code, String condition, String keyword) { - // 1.获取条件sql - String filterSql = getFilterSql(table, text, code, condition, keyword); + // 处理返回条件 + // 1.1 返回条件SQL(去掉开头的 where ) + final String wherePrefix = "(?i)where "; // (?i) 表示不区分大小写 + String filterSqlString = filterSql.trim().replaceAll(wherePrefix, ""); + // 1.2 条件SQL进行漏洞 check + SqlInjectionUtil.specialFilterContentForDictSql(filterSqlString); + // 1.3 判断如何返回条件是 order by开头则前面拼上 1=1 + if (oConvertUtils.isNotEmpty(filterSqlString) && filterSqlString.trim().toUpperCase().startsWith("ORDER")) { + filterSqlString = " 1=1 " + filterSqlString; + } + return filterSqlString; + } - // 为了防止sql(jeecg提供了防注入的方法,可以在拼接 SQL 语句时自动对参数进行转义,避免SQL注入攻击) - // 2.针对采用 ${}写法的表名和字段进行转义和check - table = SqlInjectionUtil.getSqlInjectTableName(table); - text = SqlInjectionUtil.getSqlInjectField(text); - code = SqlInjectionUtil.getSqlInjectField(code); - - List ls = baseMapper.queryTableDictWithFilter(table, text, code, filterSql); - return ls; - } - @Override - public List queryTreeList(Map query, String table, String text, String code, String pidField, String pid, String hasChildField, int converIsLeafVal) { - //为了防止sql(jeecg提供了防注入的方法,可以在拼接 SQL 语句时自动对参数进行转义,避免SQL注入攻击) - // 1.针对采用 ${}写法的表名和字段进行转义和check - table = SqlInjectionUtil.getSqlInjectTableName(table); - text = SqlInjectionUtil.getSqlInjectField(text); - code = SqlInjectionUtil.getSqlInjectField(code); - pidField = SqlInjectionUtil.getSqlInjectField(pidField); - hasChildField = SqlInjectionUtil.getSqlInjectField(hasChildField); + @Override + public List queryAllTableDictItems(String table, String text, String code, String condition, String keyword) { + // 1.获取条件sql + String filterSql = getFilterSql(table, text, code, condition, keyword); - if(oConvertUtils.isEmpty(text) || oConvertUtils.isEmpty(code)){ - log.warn("text={},code={}", text, code); - log.warn("加载树字典参数有误,text和code不允许为空!"); - return null; - } - - // 2.检测最终SQL是否存在SQL注入风险 - String dictCode = table + "," + text + "," + code; - SqlInjectionUtil.filterContentMulti(dictCode); + // 为了防止sql(jeecg提供了防注入的方法,可以在拼接 SQL 语句时自动对参数进行转义,避免SQL注入攻击) + // 2.针对采用 ${}写法的表名和字段进行转义和check + table = SqlInjectionUtil.getSqlInjectTableName(table); + text = SqlInjectionUtil.getSqlInjectField(text); + code = SqlInjectionUtil.getSqlInjectField(code); - // 【QQYUN-6533】表字典白名单check - sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); - // 3.表字典SQL表名黑名单 Check - if(!dictQueryBlackListHandler.isPass(dictCode)){ - log.error("Sql异常:{}", dictQueryBlackListHandler.getError()); - return null; - } - // 4.检测查询条件是否存在SQL注入 - Map queryParams = null; - if (query != null) { - queryParams = new HashMap<>(5); - for (Map.Entry searchItem : query.entrySet()) { - String fieldName = searchItem.getKey(); - queryParams.put(SqlInjectionUtil.getSqlInjectField(fieldName), searchItem.getValue()); - } - } - - return baseMapper.queryTreeList(queryParams, table, text, code, pidField, pid, hasChildField, converIsLeafVal); - } + List ls = baseMapper.queryTableDictWithFilter(table, text, code, filterSql); + return ls; + } - @Override - public void deleteOneDictPhysically(String id) { - this.baseMapper.deleteOneById(id); - this.sysDictItemMapper.delete(new LambdaQueryWrapper().eq(SysDictItem::getDictId,id)); - } + @Override + public List queryTreeList(Map query, String table, String text, String code, String pidField, String pid, String hasChildField, int converIsLeafVal) { + //为了防止sql(jeecg提供了防注入的方法,可以在拼接 SQL 语句时自动对参数进行转义,避免SQL注入攻击) + // 1.针对采用 ${}写法的表名和字段进行转义和check + table = SqlInjectionUtil.getSqlInjectTableName(table); + text = SqlInjectionUtil.getSqlInjectField(text); + code = SqlInjectionUtil.getSqlInjectField(code); + pidField = SqlInjectionUtil.getSqlInjectField(pidField); + hasChildField = SqlInjectionUtil.getSqlInjectField(hasChildField); - @Override - public void updateDictDelFlag(int delFlag, String id) { - baseMapper.updateDictDelFlag(delFlag,id); - } + if (oConvertUtils.isEmpty(text) || oConvertUtils.isEmpty(code)) { + log.warn("text={},code={}", text, code); + log.warn("加载树字典参数有误,text和code不允许为空!"); + return null; + } - @Override - public List queryDeleteList(String tenantId) { - //update-begin---author:wangshuai---date:2024-02-27---for:【QQYUN-8340】回收站查找软删除记录时,没有判断是否启用多租户,造成可以查找并回收其他租户的数据 #5907--- - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - if(oConvertUtils.isEmpty(tenantId)){ - return new ArrayList<>(); - } - return baseMapper.queryDeleteListBtTenantId(oConvertUtils.getInt(tenantId)); - } - //update-end---author:wangshuai---date:2024-02-27---for:【QQYUN-8340】回收站查找软删除记录时,没有判断是否启用多租户,造成可以查找并回收其他租户的数据 #5907--- - return baseMapper.queryDeleteList(); - } + // 2.检测最终SQL是否存在SQL注入风险 + String dictCode = table + "," + text + "," + code; + SqlInjectionUtil.filterContentMulti(dictCode); - @Override - public List queryDictTablePageList(DictQuery query, int pageSize, int pageNo) { - Page page = new Page(pageNo,pageSize,false); - - //为了防止sql(jeecg提供了防注入的方法,可以在拼接 SQL 语句时自动对参数进行转义,避免SQL注入攻击) - // 1. 针对采用 ${}写法的表名和字段进行转义和check - String table = SqlInjectionUtil.getSqlInjectTableName(query.getTable()); - String text = SqlInjectionUtil.getSqlInjectTableName(query.getText()); - String code = SqlInjectionUtil.getSqlInjectTableName(query.getCode()); - query.setCode(table); - query.setTable(text); - query.setText(code); - - String dictCode = table+","+text+","+code; - // 【QQYUN-6533】表字典白名单check - sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); - // 2.表字典黑名单check - if(!dictQueryBlackListHandler.isPass(dictCode)){ - log.error(dictQueryBlackListHandler.getError()); - return null; - } - - // 3.SQL注入check - SqlInjectionUtil.filterContentMulti(dictCode); - - Page pageList = baseMapper.queryDictTablePageList(page, query); - return pageList.getRecords(); - } + // 【QQYUN-6533】表字典白名单check + sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); + // 3.表字典SQL表名黑名单 Check + if (!dictQueryBlackListHandler.isPass(dictCode)) { + log.error("Sql异常:{}", dictQueryBlackListHandler.getError()); + return null; + } + // 4.检测查询条件是否存在SQL注入 + Map queryParams = null; + if (query != null) { + queryParams = new HashMap<>(5); + for (Map.Entry searchItem : query.entrySet()) { + String fieldName = searchItem.getKey(); + queryParams.put(SqlInjectionUtil.getSqlInjectField(fieldName), searchItem.getValue()); + } + } - @Override - public List getDictItems(String dictCode) { - List ls; - if (dictCode.contains(SymbolConstant.COMMA)) { - //关联表字典(举例:sys_user,realname,id) - String[] params = dictCode.split(","); - if (params.length < 3) { - // 字典Code格式不正确 - return null; - } - - if (params.length == 4) { - ls = this.queryTableDictItemsByCodeAndFilter(params[0], params[1], params[2], params[3]); - } else if (params.length == 3) { - ls = this.queryTableDictItemsByCode(params[0], params[1], params[2]); - } else { - // 字典Code格式不正确 - return null; - } - } else { - //字典表 - ls = this.queryDictItemsByCode(dictCode); - } - //update-begin-author:taoyan date:2022-8-30 for: 字典获取可以获取枚举类的数据 - if (ls == null || ls.size() == 0) { - Map> map = ResourceUtil.getEnumDictData(); - if (map.containsKey(dictCode)) { - return map.get(dictCode); - } - } - //update-end-author:taoyan date:2022-8-30 for: 字典获取可以获取枚举类的数据 - return ls; - } + return baseMapper.queryTreeList(queryParams, table, text, code, pidField, pid, hasChildField, converIsLeafVal); + } - @Override - public List loadDict(String dictCode, String keyword, Integer pageSize) { - // 【QQYUN-6533】表字典白名单check - sysBaseAPI.dictTableWhiteListCheckByDict(dictCode); - // 1.表字典黑名单check - if(!dictQueryBlackListHandler.isPass(dictCode)){ - log.error(dictQueryBlackListHandler.getError()); - return null; - } - - // 2.字典SQL注入风险check - SqlInjectionUtil.specialFilterContentForDictSql(dictCode); + @Override + public void deleteOneDictPhysically(String id) { + this.baseMapper.deleteOneById(id); + this.sysDictItemMapper.delete(new LambdaQueryWrapper().eq(SysDictItem::getDictId, id)); + } - if (dictCode.contains(SymbolConstant.COMMA)) { - //update-begin-author:taoyan date:20210329 for: 下拉搜索不支持表名后加查询条件 - String[] params = dictCode.split(","); - String condition = null; - if (params.length != 3 && params.length != 4) { - // 字典Code格式不正确 - return null; - } else if (params.length == 4) { - condition = params[3]; - // update-begin-author:taoyan date:20220314 for: online表单下拉搜索框表字典配置#{sys_org_code}报错 #3500 - if(condition.indexOf(SymbolConstant.SYS_VAR_PREFIX)>=0){ - condition = QueryGenerator.getSqlRuleValue(condition); - } - // update-end-author:taoyan date:20220314 for: online表单下拉搜索框表字典配置#{sys_org_code}报错 #3500 - } + @Override + public void updateDictDelFlag(int delFlag, String id) { + baseMapper.updateDictDelFlag(delFlag, id); + } - // 字典Code格式不正确 [表名为空] - if(oConvertUtils.isEmpty(params[0])){ - return null; - } - List ls; - if (pageSize != null) { - ls = this.queryLittleTableDictItems(params[0], params[1], params[2], condition, keyword, pageSize); - } else { - ls = this.queryAllTableDictItems(params[0], params[1], params[2], condition, keyword); - } - //update-end-author:taoyan date:20210329 for: 下拉搜索不支持表名后加查询条件 - return ls; - } else { - // 字典Code格式不正确 - return null; - } - } + @Override + public List queryDeleteList(String tenantId) { + //update-begin---author:wangshuai---date:2024-02-27---for:【QQYUN-8340】回收站查找软删除记录时,没有判断是否启用多租户,造成可以查找并回收其他租户的数据 #5907--- + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + if (oConvertUtils.isEmpty(tenantId)) { + return new ArrayList<>(); + } + return baseMapper.queryDeleteListBtTenantId(oConvertUtils.getInt(tenantId)); + } + //update-end---author:wangshuai---date:2024-02-27---for:【QQYUN-8340】回收站查找软删除记录时,没有判断是否启用多租户,造成可以查找并回收其他租户的数据 #5907--- + return baseMapper.queryDeleteList(); + } - @Override - public List getDictListByLowAppId(String lowAppId) { - int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - List list = baseMapper.getDictListByLowAppId(lowAppId,tenantId); - //查询字典下面的字典项 - List dictVoList = new ArrayList<>(); - for (SysDict dict:list) { - SysDictVo dictVo = new SysDictVo(); - BeanUtils.copyProperties(dict,dictVo); - List sysDictItems = sysDictItemMapper.selectItemsByMainId(dict.getId()); - dictVo.setDictItemsList(sysDictItems); - dictVoList.add(dictVo); - } - return dictVoList; - } + @Override + public List queryDictTablePageList(DictQuery query, int pageSize, int pageNo) { + Page page = new Page(pageNo, pageSize, false); - @Override - public String addDictByLowAppId(SysDictVo sysDictVo) { - String[] dictResult = this.addDict(sysDictVo.getDictName(),sysDictVo.getLowAppId(),sysDictVo.getTenantId()); - String id = dictResult[0]; - String code = dictResult[1]; - this.addDictItem(id,sysDictVo.getDictItemsList()); - return code; - } + //为了防止sql(jeecg提供了防注入的方法,可以在拼接 SQL 语句时自动对参数进行转义,避免SQL注入攻击) + // 1. 针对采用 ${}写法的表名和字段进行转义和check + String table = SqlInjectionUtil.getSqlInjectTableName(query.getTable()); + String text = SqlInjectionUtil.getSqlInjectTableName(query.getText()); + String code = SqlInjectionUtil.getSqlInjectTableName(query.getCode()); + query.setCode(table); + query.setTable(text); + query.setText(code); - @Override - public void editDictByLowAppId(SysDictVo sysDictVo) { - String id = sysDictVo.getId(); - SysDict dict = baseMapper.selectById(id); - if(null == dict){ - throw new JeecgBootException("字典数据不存在"); - } - //判断应用id和数据库中的是否一致,不一致不让修改 - if(!dict.getLowAppId().equals(sysDictVo.getLowAppId())){ - throw new JeecgBootException("字典数据不存在"); - } - SysDict sysDict = new SysDict(); - sysDict.setDictName(sysDictVo.getDictName()); - sysDict.setId(id); - baseMapper.updateById(sysDict); - this.updateDictItem(id,sysDictVo.getDictItemsList()); - // 删除字典缓存 - redisUtil.removeAll(CacheConstant.SYS_DICT_CACHE + "::" + dict.getDictCode()); - } + String dictCode = table + "," + text + "," + code; + // 【QQYUN-6533】表字典白名单check + sysBaseAPI.dictTableWhiteListCheckByDict(table, text, code); + // 2.表字典黑名单check + if (!dictQueryBlackListHandler.isPass(dictCode)) { + log.error(dictQueryBlackListHandler.getError()); + return null; + } - /** - * 添加字典 - * @param dictName - */ - private String[] addDict(String dictName,String lowAppId, Integer tenantId) { - SysDict dict = new SysDict(); - dict.setDictName(dictName); - dict.setDictCode(RandomUtil.randomString(10)); - dict.setDelFlag(Integer.valueOf(CommonConstant.STATUS_0)); - dict.setLowAppId(lowAppId); - dict.setTenantId(tenantId); - baseMapper.insert(dict); - String[] dictResult = new String[]{dict.getId(), dict.getDictCode()}; - return dictResult; - } + // 3.SQL注入check + SqlInjectionUtil.filterContentMulti(dictCode); - /** - * 添加字典子项 - * @param id - * @param dictItemList - */ - private void addDictItem(String id,List dictItemList) { - if(null!=dictItemList && dictItemList.size()>0){ - for (SysDictItem dictItem:dictItemList) { - SysDictItem sysDictItem = new SysDictItem(); - BeanUtils.copyProperties(dictItem,sysDictItem); - sysDictItem.setDictId(id); - sysDictItem.setId(""); - sysDictItem.setStatus(Integer.valueOf(CommonConstant.STATUS_1)); - sysDictItemMapper.insert(sysDictItem); - } - } - } + Page pageList = baseMapper.queryDictTablePageList(page, query); + return pageList.getRecords(); + } - /** - * 更新字典子项 - * @param id - * @param dictItemList - */ - private void updateDictItem(String id,List dictItemList){ - //先删除在新增 因为排序可能不一致 - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysDictItem::getDictId,id); - sysDictItemMapper.delete(query); - //新增子项 - this.addDictItem(id,dictItemList); - } + @Override + public List getDictItems(String dictCode) { + List ls; + if (dictCode.contains(SymbolConstant.COMMA)) { + //关联表字典(举例:sys_user,realname,id) + String[] params = dictCode.split(","); + if (params.length < 3) { + // 字典Code格式不正确 + return null; + } + + if (params.length == 4) { + ls = this.queryTableDictItemsByCodeAndFilter(params[0], params[1], params[2], params[3]); + } else if (params.length == 3) { + ls = this.queryTableDictItemsByCode(params[0], params[1], params[2]); + } else { + // 字典Code格式不正确 + return null; + } + } else { + //字典表 + ls = this.queryDictItemsByCode(dictCode); + } + //update-begin-author:taoyan date:2022-8-30 for: 字典获取可以获取枚举类的数据 + if (ls == null || ls.size() == 0) { + Map> map = ResourceUtil.getEnumDictData(); + if (map.containsKey(dictCode)) { + return map.get(dictCode); + } + } + //update-end-author:taoyan date:2022-8-30 for: 字典获取可以获取枚举类的数据 + return ls; + } + + @Override + public List loadDict(String dictCode, String keyword, Integer pageSize) { + // 【QQYUN-6533】表字典白名单check + sysBaseAPI.dictTableWhiteListCheckByDict(dictCode); + // 1.表字典黑名单check + if (!dictQueryBlackListHandler.isPass(dictCode)) { + log.error(dictQueryBlackListHandler.getError()); + return null; + } + + // 2.字典SQL注入风险check + SqlInjectionUtil.specialFilterContentForDictSql(dictCode); + + if (dictCode.contains(SymbolConstant.COMMA)) { + //update-begin-author:taoyan date:20210329 for: 下拉搜索不支持表名后加查询条件 + String[] params = dictCode.split(","); + String condition = null; + if (params.length != 3 && params.length != 4) { + // 字典Code格式不正确 + return null; + } else if (params.length == 4) { + condition = params[3]; + // update-begin-author:taoyan date:20220314 for: online表单下拉搜索框表字典配置#{sys_org_code}报错 #3500 + if (condition.indexOf(SymbolConstant.SYS_VAR_PREFIX) >= 0) { + condition = QueryGenerator.getSqlRuleValue(condition); + } + // update-end-author:taoyan date:20220314 for: online表单下拉搜索框表字典配置#{sys_org_code}报错 #3500 + } + + // 字典Code格式不正确 [表名为空] + if (oConvertUtils.isEmpty(params[0])) { + return null; + } + List ls; + if (pageSize != null) { + ls = this.queryLittleTableDictItems(params[0], params[1], params[2], condition, keyword, pageSize); + } else { + ls = this.queryAllTableDictItems(params[0], params[1], params[2], condition, keyword); + } + //update-end-author:taoyan date:20210329 for: 下拉搜索不支持表名后加查询条件 + return ls; + } else { + // 字典Code格式不正确 + return null; + } + } + + @Override + public List getDictListByLowAppId(String lowAppId) { + int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + List list = baseMapper.getDictListByLowAppId(lowAppId, tenantId); + //查询字典下面的字典项 + List dictVoList = new ArrayList<>(); + for (SysDict dict : list) { + SysDictVo dictVo = new SysDictVo(); + BeanUtils.copyProperties(dict, dictVo); + List sysDictItems = sysDictItemMapper.selectItemsByMainId(dict.getId()); + dictVo.setDictItemsList(sysDictItems); + dictVoList.add(dictVo); + } + return dictVoList; + } + + @Override + public String addDictByLowAppId(SysDictVo sysDictVo) { + String[] dictResult = this.addDict(sysDictVo.getDictName(), sysDictVo.getLowAppId(), sysDictVo.getTenantId()); + String id = dictResult[0]; + String code = dictResult[1]; + this.addDictItem(id, sysDictVo.getDictItemsList()); + return code; + } + + @Override + public void editDictByLowAppId(SysDictVo sysDictVo) { + String id = sysDictVo.getId(); + SysDict dict = baseMapper.selectById(id); + if (null == dict) { + throw new JeecgBootException("字典数据不存在"); + } + //判断应用id和数据库中的是否一致,不一致不让修改 + if (!dict.getLowAppId().equals(sysDictVo.getLowAppId())) { + throw new JeecgBootException("字典数据不存在"); + } + SysDict sysDict = new SysDict(); + sysDict.setDictName(sysDictVo.getDictName()); + sysDict.setId(id); + baseMapper.updateById(sysDict); + this.updateDictItem(id, sysDictVo.getDictItemsList()); + // 删除字典缓存 + redisUtil.removeAll(CacheConstant.SYS_DICT_CACHE + "::" + dict.getDictCode()); + } + + /** + * 添加字典 + * + * @param dictName + */ + private String[] addDict(String dictName, String lowAppId, Integer tenantId) { + SysDict dict = new SysDict(); + dict.setDictName(dictName); + dict.setDictCode(RandomUtil.randomString(10)); + dict.setDelFlag(Integer.valueOf(CommonConstant.STATUS_0)); + dict.setLowAppId(lowAppId); + dict.setTenantId(tenantId); + baseMapper.insert(dict); + String[] dictResult = new String[]{dict.getId(), dict.getDictCode()}; + return dictResult; + } + + /** + * 添加字典子项 + * + * @param id + * @param dictItemList + */ + private void addDictItem(String id, List dictItemList) { + if (null != dictItemList && dictItemList.size() > 0) { + for (SysDictItem dictItem : dictItemList) { + SysDictItem sysDictItem = new SysDictItem(); + BeanUtils.copyProperties(dictItem, sysDictItem); + sysDictItem.setDictId(id); + sysDictItem.setId(""); + sysDictItem.setStatus(Integer.valueOf(CommonConstant.STATUS_1)); + sysDictItemMapper.insert(sysDictItem); + } + } + } + + /** + * 更新字典子项 + * + * @param id + * @param dictItemList + */ + private void updateDictItem(String id, List dictItemList) { + //先删除在新增 因为排序可能不一致 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysDictItem::getDictId, id); + sysDictItemMapper.delete(query); + //新增子项 + this.addDictItem(id, dictItemList); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java index 1853103..97b2228 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysGatewayRouteServiceImpl.java @@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.base.BaseMap; import org.jeecg.common.constant.CacheConstant; -import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.GlobalConstants; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysGatewayRoute; @@ -19,9 +18,7 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * @Description: gateway路由管理 @@ -59,9 +56,9 @@ public class SysGatewayRouteServiceImpl extends ServiceImpl @@ -26,37 +24,37 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @Service public class SysLogServiceImpl extends ServiceImpl implements ISysLogService { - @Resource - private SysLogMapper sysLogMapper; - - /** - * @功能:清空所有日志记录 - */ - @Override - public void removeAll() { - sysLogMapper.removeAll(); - } + @Resource + private SysLogMapper sysLogMapper; - @Override - public Long findTotalVisitCount() { - return sysLogMapper.findTotalVisitCount(); - } + /** + * @功能:清空所有日志记录 + */ + @Override + public void removeAll() { + sysLogMapper.removeAll(); + } - //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 - @Override - public Long findTodayVisitCount(Date dayStart, Date dayEnd) { - return sysLogMapper.findTodayVisitCount(dayStart,dayEnd); - } + @Override + public Long findTotalVisitCount() { + return sysLogMapper.findTotalVisitCount(); + } - @Override - public Long findTodayIp(Date dayStart, Date dayEnd) { - return sysLogMapper.findTodayIp(dayStart,dayEnd); - } - //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + @Override + public Long findTodayVisitCount(Date dayStart, Date dayEnd) { + return sysLogMapper.findTodayVisitCount(dayStart, dayEnd); + } - @Override - public List> findVisitCount(Date dayStart, Date dayEnd) { - DbType dbType = CommonUtils.getDatabaseTypeEnum(); - return sysLogMapper.findVisitCount(dayStart, dayEnd,dbType.getDb()); - } + @Override + public Long findTodayIp(Date dayStart, Date dayEnd) { + return sysLogMapper.findTodayIp(dayStart, dayEnd); + } + //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + + @Override + public List> findVisitCount(Date dayStart, Date dayEnd) { + DbType dbType = CommonUtils.getDatabaseTypeEnum(); + return sysLogMapper.findVisitCount(dayStart, dayEnd, dbType.getDb()); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPackPermissionServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPackPermissionServiceImpl.java index e8f2169..698d49e 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPackPermissionServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPackPermissionServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.system.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.system.entity.SysPackPermission; import org.jeecg.modules.system.mapper.SysPackPermissionMapper; import org.jeecg.modules.system.service.ISysPackPermissionService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 产品包菜单关系表 * @Author: jeecg-boot - * @Date: 2022-12-31 + * @Date: 2022-12-31 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionDataRuleImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionDataRuleImpl.java index 304e61c..6a5b522 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionDataRuleImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionDataRuleImpl.java @@ -1,11 +1,9 @@ package org.jeecg.modules.system.service.impl; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; - import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.oConvertUtils; @@ -17,9 +15,9 @@ import org.jeecg.modules.system.service.ISysPermissionDataRuleService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** *

@@ -31,87 +29,87 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; */ @Service public class SysPermissionDataRuleImpl extends ServiceImpl - implements ISysPermissionDataRuleService { + implements ISysPermissionDataRuleService { - @Resource - private SysPermissionMapper sysPermissionMapper; + @Resource + private SysPermissionMapper sysPermissionMapper; - /** - * 根据菜单id查询其对应的权限数据 - */ - @Override - public List getPermRuleListByPermId(String permissionId) { - LambdaQueryWrapper query = new LambdaQueryWrapper(); - query.eq(SysPermissionDataRule::getPermissionId, permissionId); - query.orderByDesc(SysPermissionDataRule::getCreateTime); - List permRuleList = this.list(query); - return permRuleList; - } + /** + * 根据菜单id查询其对应的权限数据 + */ + @Override + public List getPermRuleListByPermId(String permissionId) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermissionDataRule::getPermissionId, permissionId); + query.orderByDesc(SysPermissionDataRule::getCreateTime); + List permRuleList = this.list(query); + return permRuleList; + } - /** - * 根据前端传递的权限名称和权限值参数来查询权限数据 - */ - @Override - public List queryPermissionRule(SysPermissionDataRule permRule) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(permRule, null); - return this.list(queryWrapper); - } + /** + * 根据前端传递的权限名称和权限值参数来查询权限数据 + */ + @Override + public List queryPermissionRule(SysPermissionDataRule permRule) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(permRule, null); + return this.list(queryWrapper); + } - @Override - public List queryPermissionDataRules(String username,String permissionId) { - List idsList = this.baseMapper.queryDataRuleIds(username, permissionId); - //update-begin--Author:scott Date:20191119 for:数据权限失效问题处理-------------------- - if(idsList==null || idsList.size()==0) { - return null; - } - //update-end--Author:scott Date:20191119 for:数据权限失效问题处理-------------------- - Set set = new HashSet(); - for (String ids : idsList) { - if(oConvertUtils.isEmpty(ids)) { - continue; - } - String[] arr = ids.split(","); - for (String id : arr) { - if(oConvertUtils.isNotEmpty(id) && !set.contains(id)) { - set.add(id); - } - } - } - if(set.size()==0) { - return null; - } - return this.baseMapper.selectList(new QueryWrapper().in("id", set).eq("status",CommonConstant.STATUS_1)); - } + @Override + public List queryPermissionDataRules(String username, String permissionId) { + List idsList = this.baseMapper.queryDataRuleIds(username, permissionId); + //update-begin--Author:scott Date:20191119 for:数据权限失效问题处理-------------------- + if (idsList == null || idsList.size() == 0) { + return null; + } + //update-end--Author:scott Date:20191119 for:数据权限失效问题处理-------------------- + Set set = new HashSet(); + for (String ids : idsList) { + if (oConvertUtils.isEmpty(ids)) { + continue; + } + String[] arr = ids.split(","); + for (String id : arr) { + if (oConvertUtils.isNotEmpty(id) && !set.contains(id)) { + set.add(id); + } + } + } + if (set.size() == 0) { + return null; + } + return this.baseMapper.selectList(new QueryWrapper().in("id", set).eq("status", CommonConstant.STATUS_1)); + } - @Override - @Transactional(rollbackFor = Exception.class) - public void savePermissionDataRule(SysPermissionDataRule sysPermissionDataRule) { - this.save(sysPermissionDataRule); - SysPermission permission = sysPermissionMapper.selectById(sysPermissionDataRule.getPermissionId()); + @Override + @Transactional(rollbackFor = Exception.class) + public void savePermissionDataRule(SysPermissionDataRule sysPermissionDataRule) { + this.save(sysPermissionDataRule); + SysPermission permission = sysPermissionMapper.selectById(sysPermissionDataRule.getPermissionId()); boolean flag = permission != null && (permission.getRuleFlag() == null || permission.getRuleFlag().equals(CommonConstant.RULE_FLAG_0)); - if(flag) { - permission.setRuleFlag(CommonConstant.RULE_FLAG_1); - sysPermissionMapper.updateById(permission); - } - } + if (flag) { + permission.setRuleFlag(CommonConstant.RULE_FLAG_1); + sysPermissionMapper.updateById(permission); + } + } - @Override - @Transactional(rollbackFor = Exception.class) - public void deletePermissionDataRule(String dataRuleId) { - SysPermissionDataRule dataRule = this.baseMapper.selectById(dataRuleId); - if(dataRule!=null) { - this.removeById(dataRuleId); - Long count = this.baseMapper.selectCount(new LambdaQueryWrapper().eq(SysPermissionDataRule::getPermissionId, dataRule.getPermissionId())); - //注:同一个事务中删除后再查询是会认为数据已被删除的 若事务回滚上述删除无效 - if(count==null || count==0) { - SysPermission permission = sysPermissionMapper.selectById(dataRule.getPermissionId()); - if(permission!=null && permission.getRuleFlag().equals(CommonConstant.RULE_FLAG_1)) { - permission.setRuleFlag(CommonConstant.RULE_FLAG_0); - sysPermissionMapper.updateById(permission); - } - } - } - - } + @Override + @Transactional(rollbackFor = Exception.class) + public void deletePermissionDataRule(String dataRuleId) { + SysPermissionDataRule dataRule = this.baseMapper.selectById(dataRuleId); + if (dataRule != null) { + this.removeById(dataRuleId); + Long count = this.baseMapper.selectCount(new LambdaQueryWrapper().eq(SysPermissionDataRule::getPermissionId, dataRule.getPermissionId())); + //注:同一个事务中删除后再查询是会认为数据已被删除的 若事务回滚上述删除无效 + if (count == null || count == 0) { + SysPermission permission = sysPermissionMapper.selectById(dataRule.getPermissionId()); + if (permission != null && permission.getRuleFlag().equals(CommonConstant.RULE_FLAG_1)) { + permission.setRuleFlag(CommonConstant.RULE_FLAG_0); + sysPermissionMapper.updateById(permission); + } + } + } + + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java index 3f1c6a1..7057d53 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPermissionServiceImpl.java @@ -3,6 +3,7 @@ package org.jeecg.modules.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; import org.jeecg.common.constant.CacheConstant; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.exception.JeecgBootException; @@ -25,7 +26,6 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import jakarta.annotation.Resource; import java.util.*; /** @@ -39,276 +39,276 @@ import java.util.*; @Service public class SysPermissionServiceImpl extends ServiceImpl implements ISysPermissionService { - @Resource - private SysPermissionMapper sysPermissionMapper; - - @Resource - private ISysPermissionDataRuleService permissionDataRuleService; + @Resource + private SysPermissionMapper sysPermissionMapper; - @Resource - private SysRolePermissionMapper sysRolePermissionMapper; + @Resource + private ISysPermissionDataRuleService permissionDataRuleService; - @Resource - private SysDepartPermissionMapper sysDepartPermissionMapper; + @Resource + private SysRolePermissionMapper sysRolePermissionMapper; - @Resource - private SysDepartRolePermissionMapper sysDepartRolePermissionMapper; + @Resource + private SysDepartPermissionMapper sysDepartPermissionMapper; - @Autowired - private ISysRoleIndexService roleIndexService; + @Resource + private SysDepartRolePermissionMapper sysDepartRolePermissionMapper; - @Override - public void switchVue3Menu() { - sysPermissionMapper.backupVue2Menu(); - sysPermissionMapper.changeVue3Menu(); - } + @Autowired + private ISysRoleIndexService roleIndexService; - @Override - public List queryListByParentId(String parentId) { - return sysPermissionMapper.queryListByParentId(parentId); - } + @Override + public void switchVue3Menu() { + sysPermissionMapper.backupVue2Menu(); + sysPermissionMapper.changeVue3Menu(); + } - /** - * 真实删除 - */ - @Override - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true) - public void deletePermission(String id) throws JeecgBootException { - SysPermission sysPermission = this.getById(id); - if(sysPermission==null) { - throw new JeecgBootException("未找到菜单信息"); - } - String pid = sysPermission.getParentId(); - if(oConvertUtils.isNotEmpty(pid)) { - Long count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, pid)); - if(count==1) { - //若父节点无其他子节点,则该父节点是叶子节点 - this.sysPermissionMapper.setMenuLeaf(pid, 1); - } - } - sysPermissionMapper.deleteById(id); - // 该节点可能是子节点但也可能是其它节点的父节点,所以需要级联删除 - this.removeChildrenBy(sysPermission.getId()); - //关联删除 - Map map = new HashMap(5); - map.put("permission_id",id); - //删除数据规则 - this.deletePermRuleByPermId(id); - //删除角色授权表 - sysRolePermissionMapper.deleteByMap(map); - //删除部门权限表 - sysDepartPermissionMapper.deleteByMap(map); - //删除部门角色授权 - sysDepartRolePermissionMapper.deleteByMap(map); - } - - /** - * 根据父id删除其关联的子节点数据 - * - * @return - */ - public void removeChildrenBy(String parentId) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - // 封装查询条件parentId为主键, - query.eq(SysPermission::getParentId, parentId); - // 查出该主键下的所有子级 - List permissionList = this.list(query); - if (permissionList != null && permissionList.size() > 0) { + @Override + public List queryListByParentId(String parentId) { + return sysPermissionMapper.queryListByParentId(parentId); + } + + /** + * 真实删除 + */ + @Override + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE, allEntries = true) + public void deletePermission(String id) throws JeecgBootException { + SysPermission sysPermission = this.getById(id); + if (sysPermission == null) { + throw new JeecgBootException("未找到菜单信息"); + } + String pid = sysPermission.getParentId(); + if (oConvertUtils.isNotEmpty(pid)) { + Long count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, pid)); + if (count == 1) { + //若父节点无其他子节点,则该父节点是叶子节点 + this.sysPermissionMapper.setMenuLeaf(pid, 1); + } + } + sysPermissionMapper.deleteById(id); + // 该节点可能是子节点但也可能是其它节点的父节点,所以需要级联删除 + this.removeChildrenBy(sysPermission.getId()); + //关联删除 + Map map = new HashMap(5); + map.put("permission_id", id); + //删除数据规则 + this.deletePermRuleByPermId(id); + //删除角色授权表 + sysRolePermissionMapper.deleteByMap(map); + //删除部门权限表 + sysDepartPermissionMapper.deleteByMap(map); + //删除部门角色授权 + sysDepartRolePermissionMapper.deleteByMap(map); + } + + /** + * 根据父id删除其关联的子节点数据 + * + * @return + */ + public void removeChildrenBy(String parentId) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + // 封装查询条件parentId为主键, + query.eq(SysPermission::getParentId, parentId); + // 查出该主键下的所有子级 + List permissionList = this.list(query); + if (permissionList != null && permissionList.size() > 0) { // id - String id = ""; + String id = ""; // 查出的子级数量 - Long num = Long.valueOf(0); - // 如果查出的集合不为空, 则先删除所有 - this.remove(query); - // 再遍历刚才查出的集合, 根据每个对象,查找其是否仍有子级 - for (int i = 0, len = permissionList.size(); i < len; i++) { - id = permissionList.get(i).getId(); - Map map = new HashMap(5); - map.put("permission_id",id); - //删除数据规则 - this.deletePermRuleByPermId(id); - //删除角色授权表 - sysRolePermissionMapper.deleteByMap(map); - //删除部门权限表 - sysDepartPermissionMapper.deleteByMap(map); - //删除部门角色授权 - sysDepartRolePermissionMapper.deleteByMap(map); - num = this.count(new LambdaQueryWrapper().eq(SysPermission::getParentId, id)); - // 如果有, 则递归 - if (num > 0) { - this.removeChildrenBy(id); - } - } - } - } - - /** - * 逻辑删除 - */ - @Override - @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true) - //@CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true,condition="#sysPermission.menuType==2") - public void deletePermissionLogical(String id) throws JeecgBootException { - SysPermission sysPermission = this.getById(id); - if(sysPermission==null) { - throw new JeecgBootException("未找到菜单信息"); - } - String pid = sysPermission.getParentId(); - Long count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, pid)); - if(count==1) { - //若父节点无其他子节点,则该父节点是叶子节点 - this.sysPermissionMapper.setMenuLeaf(pid, 1); - } - sysPermission.setDelFlag(1); - this.updateById(sysPermission); - } + Long num = Long.valueOf(0); + // 如果查出的集合不为空, 则先删除所有 + this.remove(query); + // 再遍历刚才查出的集合, 根据每个对象,查找其是否仍有子级 + for (int i = 0, len = permissionList.size(); i < len; i++) { + id = permissionList.get(i).getId(); + Map map = new HashMap(5); + map.put("permission_id", id); + //删除数据规则 + this.deletePermRuleByPermId(id); + //删除角色授权表 + sysRolePermissionMapper.deleteByMap(map); + //删除部门权限表 + sysDepartPermissionMapper.deleteByMap(map); + //删除部门角色授权 + sysDepartRolePermissionMapper.deleteByMap(map); + num = this.count(new LambdaQueryWrapper().eq(SysPermission::getParentId, id)); + // 如果有, 则递归 + if (num > 0) { + this.removeChildrenBy(id); + } + } + } + } - @Override - @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true) - public void addPermission(SysPermission sysPermission) throws JeecgBootException { - //---------------------------------------------------------------------- - //判断是否是一级菜单,是的话清空父菜单 - if(CommonConstant.MENU_TYPE_0.equals(sysPermission.getMenuType())) { - sysPermission.setParentId(null); - } - //---------------------------------------------------------------------- - String pid = sysPermission.getParentId(); - if(oConvertUtils.isNotEmpty(pid)) { - //设置父节点不为叶子节点 - this.sysPermissionMapper.setMenuLeaf(pid, 0); - } - sysPermission.setCreateTime(new Date()); - sysPermission.setDelFlag(0); - sysPermission.setLeaf(true); - this.save(sysPermission); - } + /** + * 逻辑删除 + */ + @Override + @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE, allEntries = true) + //@CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true,condition="#sysPermission.menuType==2") + public void deletePermissionLogical(String id) throws JeecgBootException { + SysPermission sysPermission = this.getById(id); + if (sysPermission == null) { + throw new JeecgBootException("未找到菜单信息"); + } + String pid = sysPermission.getParentId(); + Long count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, pid)); + if (count == 1) { + //若父节点无其他子节点,则该父节点是叶子节点 + this.sysPermissionMapper.setMenuLeaf(pid, 1); + } + sysPermission.setDelFlag(1); + this.updateById(sysPermission); + } - @Override - @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true) - public void editPermission(SysPermission sysPermission) throws JeecgBootException { - SysPermission p = this.getById(sysPermission.getId()); - //TODO 该节点判断是否还有子节点 - if(p==null) { - throw new JeecgBootException("未找到菜单信息"); - }else { - sysPermission.setUpdateTime(new Date()); - //---------------------------------------------------------------------- - //Step1.判断是否是一级菜单,是的话清空父菜单ID - if(CommonConstant.MENU_TYPE_0.equals(sysPermission.getMenuType())) { - sysPermission.setParentId(""); - } - //Step2.判断菜单下级是否有菜单,无则设置为叶子节点 - Long count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, sysPermission.getId())); - if(count==0) { - sysPermission.setLeaf(true); - } - //---------------------------------------------------------------------- - this.updateById(sysPermission); - - //如果当前菜单的父菜单变了,则需要修改新父菜单和老父菜单的,叶子节点状态 - String pid = sysPermission.getParentId(); - boolean flag = (oConvertUtils.isNotEmpty(pid) && !pid.equals(p.getParentId())) || oConvertUtils.isEmpty(pid)&&oConvertUtils.isNotEmpty(p.getParentId()); + @Override + @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE, allEntries = true) + public void addPermission(SysPermission sysPermission) throws JeecgBootException { + //---------------------------------------------------------------------- + //判断是否是一级菜单,是的话清空父菜单 + if (CommonConstant.MENU_TYPE_0.equals(sysPermission.getMenuType())) { + sysPermission.setParentId(null); + } + //---------------------------------------------------------------------- + String pid = sysPermission.getParentId(); + if (oConvertUtils.isNotEmpty(pid)) { + //设置父节点不为叶子节点 + this.sysPermissionMapper.setMenuLeaf(pid, 0); + } + sysPermission.setCreateTime(new Date()); + sysPermission.setDelFlag(0); + sysPermission.setLeaf(true); + this.save(sysPermission); + } + + @Override + @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE, allEntries = true) + public void editPermission(SysPermission sysPermission) throws JeecgBootException { + SysPermission p = this.getById(sysPermission.getId()); + //TODO 该节点判断是否还有子节点 + if (p == null) { + throw new JeecgBootException("未找到菜单信息"); + } else { + sysPermission.setUpdateTime(new Date()); + //---------------------------------------------------------------------- + //Step1.判断是否是一级菜单,是的话清空父菜单ID + if (CommonConstant.MENU_TYPE_0.equals(sysPermission.getMenuType())) { + sysPermission.setParentId(""); + } + //Step2.判断菜单下级是否有菜单,无则设置为叶子节点 + Long count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, sysPermission.getId())); + if (count == 0) { + sysPermission.setLeaf(true); + } + //---------------------------------------------------------------------- + this.updateById(sysPermission); + + //如果当前菜单的父菜单变了,则需要修改新父菜单和老父菜单的,叶子节点状态 + String pid = sysPermission.getParentId(); + boolean flag = (oConvertUtils.isNotEmpty(pid) && !pid.equals(p.getParentId())) || oConvertUtils.isEmpty(pid) && oConvertUtils.isNotEmpty(p.getParentId()); if (flag) { - //a.设置新的父菜单不为叶子节点 - this.sysPermissionMapper.setMenuLeaf(pid, 0); - //b.判断老的菜单下是否还有其他子菜单,没有的话则设置为叶子节点 - Long cc = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, p.getParentId())); - if(cc==0) { - if(oConvertUtils.isNotEmpty(p.getParentId())) { - this.sysPermissionMapper.setMenuLeaf(p.getParentId(), 1); - } - } - - } + //a.设置新的父菜单不为叶子节点 + this.sysPermissionMapper.setMenuLeaf(pid, 0); + //b.判断老的菜单下是否还有其他子菜单,没有的话则设置为叶子节点 + Long cc = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, p.getParentId())); + if (cc == 0) { + if (oConvertUtils.isNotEmpty(p.getParentId())) { + this.sysPermissionMapper.setMenuLeaf(p.getParentId(), 1); + } + } - // 同步更改默认菜单 - SysRoleIndex defIndexCfg = this.roleIndexService.queryDefaultIndex(); - boolean isDefIndex = defIndexCfg.getUrl().equals(p.getUrl()); - if (isDefIndex) { - this.roleIndexService.updateDefaultIndex(sysPermission.getUrl(), sysPermission.getComponent(), sysPermission.isRoute()); - } + } - } - - } + // 同步更改默认菜单 + SysRoleIndex defIndexCfg = this.roleIndexService.queryDefaultIndex(); + boolean isDefIndex = defIndexCfg.getUrl().equals(p.getUrl()); + if (isDefIndex) { + this.roleIndexService.updateDefaultIndex(sysPermission.getUrl(), sysPermission.getComponent(), sysPermission.isRoute()); + } - @Override - public List queryByUser(String userId) { - List permissionList = this.sysPermissionMapper.queryByUser(userId); - //================= begin 开启租户的时候 如果没有test角色,默认加入test角色================ - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - if (permissionList == null) { - permissionList = new ArrayList<>(); - } - List testRoleList = sysPermissionMapper.queryPermissionByTestRoleId(); - //update-begin-author:liusq date:20230427 for: [QQYUN-5168]【vue3】为什么出现两个菜单 菜单根据id去重 - for (SysPermission permission: testRoleList) { - boolean hasPerm = permissionList.stream().anyMatch(a->a.getId().equals(permission.getId())); - if(!hasPerm){ - permissionList.add(permission); - } - } - //update-end-author:liusq date:20230427 for: [QQYUN-5168]【vue3】为什么出现两个菜单 菜单根据id去重 - } - //================= end 开启租户的时候 如果没有test角色,默认加入test角色================ - return permissionList; - } + } - /** - * 根据permissionId删除其关联的SysPermissionDataRule表中的数据 - */ - @Override - public void deletePermRuleByPermId(String id) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysPermissionDataRule::getPermissionId, id); - Long countValue = this.permissionDataRuleService.count(query); - if(countValue > 0) { - this.permissionDataRuleService.remove(query); - } - } + } - /** - * 获取模糊匹配规则的数据权限URL - */ - @Override - @Cacheable(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE) - public List queryPermissionUrlWithStar() { - return this.baseMapper.queryPermissionUrlWithStar(); - } + @Override + public List queryByUser(String userId) { + List permissionList = this.sysPermissionMapper.queryByUser(userId); + //================= begin 开启租户的时候 如果没有test角色,默认加入test角色================ + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + if (permissionList == null) { + permissionList = new ArrayList<>(); + } + List testRoleList = sysPermissionMapper.queryPermissionByTestRoleId(); + //update-begin-author:liusq date:20230427 for: [QQYUN-5168]【vue3】为什么出现两个菜单 菜单根据id去重 + for (SysPermission permission : testRoleList) { + boolean hasPerm = permissionList.stream().anyMatch(a -> a.getId().equals(permission.getId())); + if (!hasPerm) { + permissionList.add(permission); + } + } + //update-end-author:liusq date:20230427 for: [QQYUN-5168]【vue3】为什么出现两个菜单 菜单根据id去重 + } + //================= end 开启租户的时候 如果没有test角色,默认加入test角色================ + return permissionList; + } - @Override - public boolean hasPermission(String username, SysPermission sysPermission) { - int count = baseMapper.queryCountByUsername(username,sysPermission); - if(count>0){ - return true; - }else{ - return false; - } - } + /** + * 根据permissionId删除其关联的SysPermissionDataRule表中的数据 + */ + @Override + public void deletePermRuleByPermId(String id) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysPermissionDataRule::getPermissionId, id); + Long countValue = this.permissionDataRuleService.count(query); + if (countValue > 0) { + this.permissionDataRuleService.remove(query); + } + } - @Override - public boolean hasPermission(String username, String url) { - SysPermission sysPermission = new SysPermission(); - sysPermission.setUrl(url); - int count = baseMapper.queryCountByUsername(username,sysPermission); - if(count>0){ - return true; - }else{ - return false; - } - } + /** + * 获取模糊匹配规则的数据权限URL + */ + @Override + @Cacheable(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE) + public List queryPermissionUrlWithStar() { + return this.baseMapper.queryPermissionUrlWithStar(); + } - @Override - public List queryDepartPermissionList(String departId) { - return sysPermissionMapper.queryDepartPermissionList(departId); - } + @Override + public boolean hasPermission(String username, SysPermission sysPermission) { + int count = baseMapper.queryCountByUsername(username, sysPermission); + if (count > 0) { + return true; + } else { + return false; + } + } - @Override - public boolean checkPermDuplication(String id, String url,Boolean alwaysShow) { - QueryWrapper qw=new QueryWrapper(); - qw.lambda().eq(true,SysPermission::getUrl,url).ne(oConvertUtils.isNotEmpty(id),SysPermission::getId,id).eq(true,SysPermission::isAlwaysShow,alwaysShow); - return count(qw)==0; - } + @Override + public boolean hasPermission(String username, String url) { + SysPermission sysPermission = new SysPermission(); + sysPermission.setUrl(url); + int count = baseMapper.queryCountByUsername(username, sysPermission); + if (count > 0) { + return true; + } else { + return false; + } + } + + @Override + public List queryDepartPermissionList(String departId) { + return sysPermissionMapper.queryDepartPermissionList(departId); + } + + @Override + public boolean checkPermDuplication(String id, String url, Boolean alwaysShow) { + QueryWrapper qw = new QueryWrapper(); + qw.lambda().eq(true, SysPermission::getUrl, url).ne(oConvertUtils.isNotEmpty(id), SysPermission::getId, id).eq(true, SysPermission::isAlwaysShow, alwaysShow); + return count(qw) == 0; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPositionServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPositionServiceImpl.java index ce38f82..d82a251 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPositionServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysPositionServiceImpl.java @@ -35,7 +35,7 @@ public class SysPositionServiceImpl extends ServiceImpl postList) { List positionNameList = this.baseMapper.getPositionName(postList); - if (null != positionNameList && positionNameList.size()>0) { + if (null != positionNameList && positionNameList.size() > 0) { return positionNameList.stream().map(SysPosition::getName).collect(Collectors.joining(SymbolConstant.COMMA)); } return ""; diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java index 35f4c64..9506f0d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRolePermissionServiceImpl.java @@ -1,21 +1,18 @@ package org.jeecg.modules.system.service.impl; -import java.util.*; - +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.servlet.http.HttpServletRequest; import org.jeecg.common.util.IpUtils; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysRolePermission; import org.jeecg.modules.system.mapper.SysRolePermissionMapper; import org.jeecg.modules.system.service.ISysRolePermissionService; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - import org.springframework.stereotype.Service; -import jakarta.servlet.http.HttpServletRequest; +import java.util.*; /** *

@@ -28,92 +25,93 @@ import jakarta.servlet.http.HttpServletRequest; @Service public class SysRolePermissionServiceImpl extends ServiceImpl implements ISysRolePermissionService { - @Override - public void saveRolePermission(String roleId, String permissionIds) { - String ip = ""; - try { - //获取request - HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); - //获取IP地址 - ip = IpUtils.getIpAddr(request); - } catch (Exception e) { - ip = "127.0.0.1"; - } - LambdaQueryWrapper query = new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId); - this.remove(query); - List list = new ArrayList(); + @Override + public void saveRolePermission(String roleId, String permissionIds) { + String ip = ""; + try { + //获取request + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + //获取IP地址 + ip = IpUtils.getIpAddr(request); + } catch (Exception e) { + ip = "127.0.0.1"; + } + LambdaQueryWrapper query = new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId); + this.remove(query); + List list = new ArrayList(); String[] arr = permissionIds.split(","); - for (String p : arr) { - if(oConvertUtils.isNotEmpty(p)) { - SysRolePermission rolepms = new SysRolePermission(roleId, p); - rolepms.setOperateDate(new Date()); - rolepms.setOperateIp(ip); - list.add(rolepms); - } - } - this.saveBatch(list); - } + for (String p : arr) { + if (oConvertUtils.isNotEmpty(p)) { + SysRolePermission rolepms = new SysRolePermission(roleId, p); + rolepms.setOperateDate(new Date()); + rolepms.setOperateIp(ip); + list.add(rolepms); + } + } + this.saveBatch(list); + } - @Override - public void saveRolePermission(String roleId, String permissionIds, String lastPermissionIds) { - String ip = ""; - try { - //获取request - HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); - //获取IP地址 - ip = IpUtils.getIpAddr(request); - } catch (Exception e) { - ip = "127.0.0.1"; - } - List add = getDiff(lastPermissionIds,permissionIds); - if(add!=null && add.size()>0) { - List list = new ArrayList(); - for (String p : add) { - if(oConvertUtils.isNotEmpty(p)) { - SysRolePermission rolepms = new SysRolePermission(roleId, p); - rolepms.setOperateDate(new Date()); - rolepms.setOperateIp(ip); - list.add(rolepms); - } - } - this.saveBatch(list); - } - - List delete = getDiff(permissionIds,lastPermissionIds); - if(delete!=null && delete.size()>0) { - for (String permissionId : delete) { - this.remove(new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId).eq(SysRolePermission::getPermissionId, permissionId)); - } - } - } - - /** - * 从diff中找出main中没有的元素 - * @param main - * @param diff - * @return - */ - private List getDiff(String main,String diff){ - if(oConvertUtils.isEmpty(diff)) { - return null; - } - if(oConvertUtils.isEmpty(main)) { - return Arrays.asList(diff.split(",")); - } - - String[] mainArr = main.split(","); - String[] diffArr = diff.split(","); - Map map = new HashMap(5); - for (String string : mainArr) { - map.put(string, 1); - } - List res = new ArrayList(); - for (String key : diffArr) { - if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { - res.add(key); - } - } - return res; - } + @Override + public void saveRolePermission(String roleId, String permissionIds, String lastPermissionIds) { + String ip = ""; + try { + //获取request + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + //获取IP地址 + ip = IpUtils.getIpAddr(request); + } catch (Exception e) { + ip = "127.0.0.1"; + } + List add = getDiff(lastPermissionIds, permissionIds); + if (add != null && add.size() > 0) { + List list = new ArrayList(); + for (String p : add) { + if (oConvertUtils.isNotEmpty(p)) { + SysRolePermission rolepms = new SysRolePermission(roleId, p); + rolepms.setOperateDate(new Date()); + rolepms.setOperateIp(ip); + list.add(rolepms); + } + } + this.saveBatch(list); + } + + List delete = getDiff(permissionIds, lastPermissionIds); + if (delete != null && delete.size() > 0) { + for (String permissionId : delete) { + this.remove(new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId).eq(SysRolePermission::getPermissionId, permissionId)); + } + } + } + + /** + * 从diff中找出main中没有的元素 + * + * @param main + * @param diff + * @return + */ + private List getDiff(String main, String diff) { + if (oConvertUtils.isEmpty(diff)) { + return null; + } + if (oConvertUtils.isEmpty(main)) { + return Arrays.asList(diff.split(",")); + } + + String[] mainArr = main.split(","); + String[] diffArr = diff.split(","); + Map map = new HashMap(5); + for (String string : mainArr) { + map.put(string, 1); + } + List res = new ArrayList(); + for (String key : diffArr) { + if (oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { + res.add(key); + } + } + return res; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRoleServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRoleServiceImpl.java index f7b4e46..dac88e8 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRoleServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysRoleServiceImpl.java @@ -38,10 +38,10 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Autowired SysUserMapper sysUserMapper; - + @Override public Page listAllSysRole(Page page, SysRole role) { - return page.setRecords(sysRoleMapper.listAllSysRole(page,role)); + return page.setRecords(sysRoleMapper.listAllSysRole(page, role)); } @Override @@ -57,9 +57,9 @@ public class SysRoleServiceImpl extends ServiceImpl impl // 去除 listSysRoles 中重复的数据 for (int i = 0; i < listSysRoles.size(); i++) { - String roleCodeI =((SysRole)listSysRoles.get(i)).getRoleCode(); + String roleCodeI = ((SysRole) listSysRoles.get(i)).getRoleCode(); for (int j = i + 1; j < listSysRoles.size(); j++) { - String roleCodeJ =((SysRole)listSysRoles.get(j)).getRoleCode(); + String roleCodeJ = ((SysRole) listSysRoles.get(j)).getRoleCode(); // 发现重复数据 if (roleCodeI.equals(roleCodeJ)) { errorStrs.add("第 " + (j + 1) + " 行的 roleCode 值:" + roleCodeI + " 已存在,忽略导入"); @@ -69,12 +69,12 @@ public class SysRoleServiceImpl extends ServiceImpl impl } } // 去掉 sql 中的重复数据 - Integer errorLines=0; - Integer successLines=0; + Integer errorLines = 0; + Integer successLines = 0; List list = ImportExcelUtil.importDateSave(listSysRoles, ISysRoleService.class, errorStrs, CommonConstant.SQL_INDEX_UNIQ_SYS_ROLE_CODE); - errorLines+=list.size(); - successLines+=(listSysRoles.size()-errorLines); - return ImportExcelUtil.imporReturnRes(errorLines,successLines,list); + errorLines += list.size(); + successLines += (listSysRoles.size() - errorLines); + return ImportExcelUtil.imporReturnRes(errorLines, successLines, list); } @Override @@ -103,16 +103,16 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Override public Long getRoleCountByTenantId(String id, Integer tenantId) { - return sysRoleMapper.getRoleCountByTenantId(id,tenantId); + return sysRoleMapper.getRoleCountByTenantId(id, tenantId); } @Override public void checkAdminRoleRejectDel(String ids) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(SysRole::getId,Arrays.asList(ids.split(SymbolConstant.COMMA))); - query.eq(SysRole::getRoleCode,"admin"); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysRole::getId, Arrays.asList(ids.split(SymbolConstant.COMMA))); + query.eq(SysRole::getRoleCode, "admin"); Long adminRoleCount = sysRoleMapper.selectCount(query); - if(adminRoleCount>0){ + if (adminRoleCount > 0) { throw new JeecgBootException("admin角色,不允许删除!"); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantPackServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantPackServiceImpl.java index e3123be..5b6fab2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantPackServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantPackServiceImpl.java @@ -1,6 +1,7 @@ package org.jeecg.modules.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.shiro.SecurityUtils; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.constant.TenantConstant; @@ -9,7 +10,6 @@ import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.aop.TenantLog; import org.jeecg.modules.system.entity.SysPackPermission; -import org.jeecg.modules.system.entity.SysTenant; import org.jeecg.modules.system.entity.SysTenantPack; import org.jeecg.modules.system.entity.SysTenantPackUser; import org.jeecg.modules.system.mapper.SysPackPermissionMapper; @@ -20,11 +20,8 @@ import org.jeecg.modules.system.service.ISysTenantPackService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; -import javax.sql.DataSource; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -116,7 +113,7 @@ public class SysTenantPackServiceImpl extends ServiceImpl query = new LambdaQueryWrapper<>(); - query.eq(SysTenantPack::getTenantId,tenantId); + query.eq(SysTenantPack::getTenantId, tenantId); query.eq(SysTenantPack::getPackCode, TenantConstant.SUPER_ADMIN); SysTenantPack sysTenantPackSuperAdmin = currentService.getOne(query); String packId = ""; - if(null == sysTenantPackSuperAdmin){ + if (null == sysTenantPackSuperAdmin) { packId = currentService.saveOne(superAdminPack); - }else{ + } else { packId = sysTenantPackSuperAdmin.getId(); } //step.1.2 补充人员与套餐包的关系数据 @@ -151,27 +148,27 @@ public class SysTenantPackServiceImpl extends ServiceImpl list = baseMapper.selectList(query); - if(list!=null && list.size()>0){ + if (list != null && list.size() > 0) { SysTenantPack pack = list.get(0); - if(pack!=null && pack.getId()!=null){ + if (pack != null && pack.getId() != null) { return pack; } } @@ -234,27 +231,28 @@ public class SysTenantPackServiceImpl extends ServiceImpl query = new LambdaQueryWrapper<>(); - query.eq(SysTenantPack::getPackType,"default"); + query.eq(SysTenantPack::getPackType, "default"); List sysTenantPacks = sysTenantPackMapper.selectList(query); - for (SysTenantPack sysTenantPack: sysTenantPacks) { + for (SysTenantPack sysTenantPack : sysTenantPacks) { SysTenantPack pack = new SysTenantPack(); - BeanUtils.copyProperties(sysTenantPack,pack); + BeanUtils.copyProperties(sysTenantPack, pack); pack.setTenantId(tenantId); pack.setPackType("custom"); pack.setId(""); sysTenantPackMapper.insert(pack); List permissionsByPackId = sysPackPermissionMapper.getPermissionsByPackId(sysTenantPack.getId()); - for (String permission:permissionsByPackId) { + for (String permission : permissionsByPackId) { SysPackPermission packPermission = new SysPackPermission(); packPermission.setPackId(pack.getId()); packPermission.setPermissionId(permission); sysPackPermissionMapper.insert(packPermission); - } + } } } /** * 删除产品包下面的用户 + * * @param packId */ private void deletePackUser(String packId) { diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java index 75501f8..10fe3e1 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java @@ -15,6 +15,7 @@ import org.jeecg.common.config.TenantContext; import org.jeecg.common.constant.CacheConstant; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.SymbolConstant; +import org.jeecg.common.constant.enums.SysAnnmentTypeEnum; import org.jeecg.common.exception.JeecgBootBizTipException; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.api.ISysBaseAPI; @@ -22,7 +23,6 @@ import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.PasswordUtil; import org.jeecg.common.util.SpringContextUtils; -import org.jeecg.common.constant.enums.SysAnnmentTypeEnum; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.aop.TenantLog; import org.jeecg.modules.system.entity.*; @@ -61,22 +61,22 @@ public class SysTenantServiceImpl extends ServiceImpl queryEffectiveTenant(Collection idList) { - if(oConvertUtils.listIsEmpty(idList)){ + if (oConvertUtils.listIsEmpty(idList)) { return null; } - + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SysTenant::getId, idList); queryWrapper.eq(SysTenant::getStatus, Integer.valueOf(CommonConstant.STATUS_1)); @@ -87,8 +87,8 @@ public class SysTenantServiceImpl extends ServiceImpl query = new LambdaQueryWrapper<>(); - query.eq(SysUserTenant::getTenantId,id); - query.eq(SysUserTenant::getStatus,CommonConstant.STATUS_1); + query.eq(SysUserTenant::getTenantId, id); + query.eq(SysUserTenant::getStatus, CommonConstant.STATUS_1); // 查找出已被关联的用户数量 return userTenantMapper.selectCount(query); } @@ -100,28 +100,28 @@ public class SysTenantServiceImpl extends ServiceImpl query = new LambdaQueryWrapper<>(); - query.eq(SysUserTenant::getTenantId,tenantId); - query.eq(SysUserTenant::getUserId,userId); + query.eq(SysUserTenant::getTenantId, tenantId); + query.eq(SysUserTenant::getUserId, userId); userTenantMapper.delete(query); //update-end---author:wangshuai ---date:20221223 for:[QQYUN-3371]租户逻辑改造,改成关系表------------ } //租户移除用户,直接删除用户租户产品包 - sysTenantPackUserMapper.deletePackUserByTenantId(Integer.valueOf(tenantId),Arrays.asList(userIds.split(SymbolConstant.COMMA))); + sysTenantPackUserMapper.deletePackUserByTenantId(Integer.valueOf(tenantId), Arrays.asList(userIds.split(SymbolConstant.COMMA))); } @Override - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) public Integer saveTenantJoinUser(SysTenant sysTenant, String userId) { //添加租户 this.saveTenant(sysTenant); - + // 添加租户产品包 Integer tenantId = sysTenant.getId(); sysTenantPackService.addDefaultTenantPack(tenantId); - + //添加租户到关系表 return tenantId; } @Override - public void saveTenant(SysTenant sysTenant){ + public void saveTenant(SysTenant sysTenant) { //获取租户id sysTenant.setId(this.tenantIdGenerate()); sysTenant.setHouseNumber(RandomUtil.randomStringUpper(6)); @@ -175,34 +175,34 @@ public class SysTenantServiceImpl extends ServiceImpl query = new LambdaQueryWrapper<>(); - query.eq(SysTenant::getHouseNumber,sysTenant.getHouseNumber()); + query.eq(SysTenant::getHouseNumber, sysTenant.getHouseNumber()); SysTenant one = this.getOne(query); //需要返回租户id(用于前台更新缓存),返回0则代表当前租户门牌号不存在 - if(null == one){ + if (null == one) { return 0; - }else{ + } else { LambdaQueryWrapper relationQuery = new LambdaQueryWrapper<>(); - relationQuery.eq(SysUserTenant::getTenantId,one.getId()); - relationQuery.eq(SysUserTenant::getUserId,userId); + relationQuery.eq(SysUserTenant::getTenantId, one.getId()); + relationQuery.eq(SysUserTenant::getUserId, userId); SysUserTenant relation = userTenantMapper.selectOne(relationQuery); - if(relation != null){ + if (relation != null) { String msg = ""; - if(CommonConstant.USER_TENANT_UNDER_REVIEW.equals(relation.getStatus())){ + if (CommonConstant.USER_TENANT_UNDER_REVIEW.equals(relation.getStatus())) { msg = ",状态:审核中"; - }else if(CommonConstant.USER_TENANT_REFUSE.equals(relation.getStatus())){ + } else if (CommonConstant.USER_TENANT_REFUSE.equals(relation.getStatus())) { throw new JeecgBootBizTipException("管理员已拒绝您加入租户,请联系租户管理员"); - }else if(CommonConstant.USER_TENANT_QUIT.equals(relation.getStatus())){ + } else if (CommonConstant.USER_TENANT_QUIT.equals(relation.getStatus())) { msg = ",状态:已离职"; } - throw new JeecgBootBizTipException("您已是该租户成员"+msg); + throw new JeecgBootBizTipException("您已是该租户成员" + msg); } //用户加入门牌号审核中状态 SysUserTenant tenant = new SysUserTenant(); @@ -224,16 +224,16 @@ public class SysTenantServiceImpl extends ServiceImpl getRecycleBinPageList(Page page, SysTenant sysTenant) { - return page.setRecords(tenantMapper.getRecycleBinPageList(page,sysTenant)); + return page.setRecords(tenantMapper.getRecycleBinPageList(page, sysTenant)); } @Override - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) public void deleteTenantLogic(String ids) { String[] idArray = ids.split(SymbolConstant.COMMA); List list = new ArrayList<>(); //转成int类型 - for (String id:idArray) { + for (String id : idArray) { list.add(Integer.valueOf(id)); } //删除租户 @@ -254,7 +254,7 @@ public class SysTenantServiceImpl extends ServiceImpl list = new ArrayList<>(); //转成int类型 - for (String id:idArray) { + for (String id : idArray) { list.add(Integer.valueOf(id)); } //还原租户 @@ -263,11 +263,12 @@ public class SysTenantServiceImpl extends ServiceImpl= 1000){ - return maxTenantId + 1; - }else{ - return 1000; - } - } - } + public int tenantIdGenerate() { + synchronized (this) { + //获取最大值id + //update-begin---author:wangshuai ---date:20230424 for:数据库没有租户的时候,如果为空的话会报错sql返回类型不匹配------------ + int maxTenantId = oConvertUtils.getInt(tenantMapper.getMaxTenantId(), 0); + //update-end---author:wangshuai ---date:20230424 for:数据库没有租户的时候,如果为空的话会报错sql返回类型不匹配------------ + if (maxTenantId >= 1000) { + return maxTenantId + 1; + } else { + return 1000; + } + } + } @Override @@ -329,7 +331,7 @@ public class SysTenantServiceImpl extends ServiceImpl query = new LambdaQueryWrapper<>(); - query.eq(SysUserTenant::getUserId,userByName.getId()); - query.eq(SysUserTenant::getTenantId,tenantId); + query.eq(SysUserTenant::getUserId, userByName.getId()); + query.eq(SysUserTenant::getTenantId, tenantId); SysUserTenant userTenant = new SysUserTenant(); userTenant.setStatus(CommonConstant.USER_TENANT_QUIT); - userTenantMapper.update(userTenant,query); + userTenantMapper.update(userTenant, query); //update-end---author:wangshuai ---date:20230705 for:旧拥有者退出后,需要将就拥有者的用户租户关系改成已离职------------ //离职流程 this.leveUserProcess(userId, String.valueOf(tenantId)); @@ -379,7 +381,7 @@ public class SysTenantServiceImpl extends ServiceImpl packCodeList = baseMapper.queryUserPackCode(tenantId, userId); - if(packCodeList==null || packCodeList.size()==0){ + if (packCodeList == null || packCodeList.size() == 0) { //如果没有数据 判断租户创建人是不是当前用户 - if(sysTenant.getCreateBy().equals(sysUser.getUsername())){ + if (sysTenant.getCreateBy().equals(sysUser.getUsername())) { sysTenantPackService.addDefaultTenantPack(tenantId); superAdmin = true; - }else{ + } else { superAdmin = false; } } - if(superAdmin == false){ + if (superAdmin == false) { List packCountList = baseMapper.queryTenantPackUserCount(tenantId); info.setPackCountList(packCountList); } @@ -474,7 +476,7 @@ public class SysTenantServiceImpl extends ServiceImpl getTenantPackUserList(Integer tenantId, String packId, Integer packUserStatus){ + private List getTenantPackUserList(Integer tenantId, String packId, Integer packUserStatus) { // 查询用户 List userList = baseMapper.queryPackUserList(tenantId, packId, packUserStatus); - if(userList!=null && userList.size()>0){ - List userIdList = userList.stream().map(i->i.getId()).collect(Collectors.toList()); + if (userList != null && userList.size() > 0) { + List userIdList = userList.stream().map(i -> i.getId()).collect(Collectors.toList()); // 部门 List depList = baseMapper.queryUserDepartList(userIdList); // 职位 TODO // 遍历用户 往用户中添加 部门信息和职位信息 - for(TenantPackUser user: userList){ - for(UserDepart dep: depList){ - if(user.getId().equals(dep.getUserId())){ + for (TenantPackUser user : userList) { + for (UserDepart dep : depList) { + if (user.getId().equals(dep.getUserId())) { user.addDepart(dep.getDepartName()); } } @@ -578,7 +581,7 @@ public class SysTenantServiceImpl extends ServiceImpl query = new LambdaQueryWrapper() @@ -586,7 +589,7 @@ public class SysTenantServiceImpl extends ServiceImpl 给相关管理员 发送通知消息 @@ -596,10 +599,11 @@ public class SysTenantServiceImpl extends ServiceImpl data = new HashMap<>(); messageDTO.setData(data); @@ -623,9 +627,10 @@ public class SysTenantServiceImpl extends ServiceImpl data = new HashMap<>(); @@ -648,10 +653,11 @@ public class SysTenantServiceImpl extends ServiceImpl data = new HashMap<>(); messageDTO.setData(data); @@ -672,12 +678,13 @@ public class SysTenantServiceImpl extends ServiceImpl data = new HashMap<>(); @@ -709,18 +716,18 @@ public class SysTenantServiceImpl extends ServiceImpl queryTenantPackUserList(String tenantId, String packId,Integer status, Page page) { + public IPage queryTenantPackUserList(String tenantId, String packId, Integer status, Page page) { // 查询用户 - List userList = baseMapper.queryTenantPackUserList(page,tenantId, packId,status); + List userList = baseMapper.queryTenantPackUserList(page, tenantId, packId, status); // 获取产品包下用户部门和职位 userList = getPackUserPositionAndDepart(userList); return page.setRecords(userList); @@ -755,12 +762,13 @@ public class SysTenantServiceImpl extends ServiceImpl getPackUserPositionAndDepart(List userList) { - if(userList!=null && userList.size()>0){ - List userIdList = userList.stream().map(i->i.getId()).collect(Collectors.toList()); + if (userList != null && userList.size() > 0) { + List userIdList = userList.stream().map(i -> i.getId()).collect(Collectors.toList()); // 部门 List depList = baseMapper.queryUserDepartList(userIdList); // 职位 @@ -787,31 +795,33 @@ public class SysTenantServiceImpl extends ServiceImpl tenantIdsByUserId = userTenantMapper.getTenantIdsByUserId(userId); - if(CollectionUtils.isNotEmpty(tenantIdsByUserId) && tenantIdsByUserId.size()>0){ + if (CollectionUtils.isNotEmpty(tenantIdsByUserId) && tenantIdsByUserId.size() > 0) { throw new JeecgBootException("用户尚有未退出的组织,无法删除!"); } //step3 当天创建的用户和创建人可以删除 SysUser sysUserData = userService.getById(userId); - if(!sysUserData.getCreateBy().equals(user.getUsername())){ + if (!sysUserData.getCreateBy().equals(user.getUsername())) { throw new JeecgBootException("您不是该用户的创建人,无法删除!"); } Date createTime = sysUserData.getCreateTime(); boolean sameDay = DateUtils.isSameDay(createTime, new Date()); - if(!sameDay){ - throw new JeecgBootException("用户不是今天创建的,无法删除!"); + if (!sameDay) { + throw new JeecgBootException("用户不是今天创建的,无法删除!"); } //step4 验证密码 String passwordEncode = PasswordUtil.encrypt(sysUserData.getUsername(), password, sysUserData.getSalt()); - if(!passwordEncode.equals(sysUserData.getPassword())){ + if (!passwordEncode.equals(sysUserData.getPassword())) { throw new JeecgBootException("您输入的密码不正确,无法删除该用户!"); } //step5 逻辑删除用户 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysThirdAccountServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysThirdAccountServiceImpl.java index a33ddcc..9d42ada 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysThirdAccountServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysThirdAccountServiceImpl.java @@ -35,63 +35,63 @@ import java.util.List; /** * @Description: 第三方登录账号表 * @Author: jeecg-boot - * @Date: 2020-11-17 + * @Date: 2020-11-17 * @Version: V1.0 */ @Service @Slf4j public class SysThirdAccountServiceImpl extends ServiceImpl implements ISysThirdAccountService { - + @Autowired - private SysThirdAccountMapper sysThirdAccountMapper; - + private SysThirdAccountMapper sysThirdAccountMapper; + @Autowired private SysUserMapper sysUserMapper; @Autowired private SysRoleMapper sysRoleMapper; @Autowired private SysUserRoleMapper sysUserRoleMapper; - + @Value("${justauth.type.DINGTALK.client-id:}") - private String dingTalkClientId; + private String dingTalkClientId; @Value("${justauth.type.DINGTALK.client-secret:}") private String dingTalkClientSecret; - + @Override - public void updateThirdUserId(SysUser sysUser,String thirdUserUuid) { + public void updateThirdUserId(SysUser sysUser, String thirdUserUuid) { //修改第三方登录账户表使其进行添加用户id LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysThirdAccount::getThirdUserUuid,thirdUserUuid); + query.eq(SysThirdAccount::getThirdUserUuid, thirdUserUuid); //扫码登录更新用户创建的时候存的是默认租户,更新的时候也需要根据默认租户来查询,同一个公司下UUID是一样的,不同应用需要区分租户。 - query.eq(SysThirdAccount::getTenantId,CommonConstant.TENANT_ID_DEFAULT_VALUE); + query.eq(SysThirdAccount::getTenantId, CommonConstant.TENANT_ID_DEFAULT_VALUE); SysThirdAccount account = sysThirdAccountMapper.selectOne(query); SysThirdAccount sysThirdAccount = new SysThirdAccount(); sysThirdAccount.setSysUserId(sysUser.getId()); //根据当前用户id和登录方式查询第三方登录表 LambdaQueryWrapper thirdQuery = new LambdaQueryWrapper<>(); - thirdQuery.eq(SysThirdAccount::getSysUserId,sysUser.getId()); - thirdQuery.eq(SysThirdAccount::getThirdType,account.getThirdType()); - thirdQuery.eq(SysThirdAccount::getThirdUserUuid,thirdUserUuid); - thirdQuery.eq(SysThirdAccount::getTenantId,CommonConstant.TENANT_ID_DEFAULT_VALUE); + thirdQuery.eq(SysThirdAccount::getSysUserId, sysUser.getId()); + thirdQuery.eq(SysThirdAccount::getThirdType, account.getThirdType()); + thirdQuery.eq(SysThirdAccount::getThirdUserUuid, thirdUserUuid); + thirdQuery.eq(SysThirdAccount::getTenantId, CommonConstant.TENANT_ID_DEFAULT_VALUE); SysThirdAccount sysThirdAccounts = sysThirdAccountMapper.selectOne(thirdQuery); - if(sysThirdAccounts!=null){ + if (sysThirdAccounts != null) { sysThirdAccount.setThirdUserId(sysThirdAccounts.getThirdUserId()); sysThirdAccountMapper.deleteById(sysThirdAccounts.getId()); } //更新用户账户表sys_user_id - sysThirdAccountMapper.update(sysThirdAccount,query); + sysThirdAccountMapper.update(sysThirdAccount, query); } - + @Override public SysUser createUser(String phone, String thirdUserUuid, Integer tenantId) { - //先查询第三方,获取登录方式 + //先查询第三方,获取登录方式 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysThirdAccount::getThirdUserUuid,thirdUserUuid); - query.eq(SysThirdAccount::getTenantId,tenantId); + query.eq(SysThirdAccount::getThirdUserUuid, thirdUserUuid); + query.eq(SysThirdAccount::getTenantId, tenantId); SysThirdAccount account = sysThirdAccountMapper.selectOne(query); //通过用户名查询数据库是否已存在 SysUser userByName = sysUserMapper.getUserByName(thirdUserUuid); - if(null!=userByName){ + if (null != userByName) { //如果账号存在的话,则自动加上一个时间戳 String format = DateUtils.yyyymmddhhmmss.get().format(new Date()); thirdUserUuid = thirdUserUuid + format; @@ -115,10 +115,10 @@ public class SysThirdAccountServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - log.info("getSysUserId: {} ,getThirdType: {}",sysUserId,thirdType); + log.info("getSysUserId: {} ,getThirdType: {}", sysUserId, thirdType); queryWrapper.eq(SysThirdAccount::getSysUserId, sysUserId); queryWrapper.eq(SysThirdAccount::getThirdType, thirdType); return super.getOne(queryWrapper); @@ -153,7 +153,7 @@ public class SysThirdAccountServiceImpl extends ServiceImpl listThirdUserIdByUsername(String[] sysUsernameArr, String thirdType, Integer tenantId) { - return sysThirdAccountMapper.selectThirdIdsByUsername(sysUsernameArr, thirdType,tenantId); + return sysThirdAccountMapper.selectThirdIdsByUsername(sysUsernameArr, thirdType, tenantId); } @Override @@ -168,16 +168,16 @@ public class SysThirdAccountServiceImpl extends ServiceImpl getUserIdRes = JdtUserAPI.getUseridByUnionid(tlm.getUuid(), accessToken.getAccessToken()); if (getUserIdRes.isSuccess()) { user.setThirdUserId(getUserIdRes.getResult()); - }else{ + } else { user.setThirdUserId(tlm.getUuid()); } - //=============end 判断如果是钉钉的情况下,需要将第三方的用户id查询出来,发送模板的时候有用========== - }else{ + //=============end 判断如果是钉钉的情况下,需要将第三方的用户id查询出来,发送模板的时候有用========== + } else { user.setThirdUserId(tlm.getUuid()); } //update-end---author:wangshuai ---date:20230306 for:判断如果是钉钉的情况下,需要将第三方的用户id查询出来,发送模板的时候有用------------ @@ -192,34 +192,34 @@ public class SysThirdAccountServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysThirdAccount::getThirdType, thirdType); //update-begin---author:wangshuai---date:2023-12-04---for: 如果第三方用户id为空那么就不走第三方用户查询逻辑,因为扫码登录third_user_id是唯一的,没有重复的情况--- - if(oConvertUtils.isNotEmpty(thirdUserId)){ - queryWrapper.and((wrapper) ->wrapper.eq(SysThirdAccount::getThirdUserUuid,unionid).or().eq(SysThirdAccount::getThirdUserId,thirdUserId)); - }else{ + if (oConvertUtils.isNotEmpty(thirdUserId)) { + queryWrapper.and((wrapper) -> wrapper.eq(SysThirdAccount::getThirdUserUuid, unionid).or().eq(SysThirdAccount::getThirdUserId, thirdUserId)); + } else { queryWrapper.eq(SysThirdAccount::getThirdUserUuid, unionid); } //update-end---author:wangshuai---date:2023-12-04---for:如果第三方用户id为空那么就不走第三方用户查询逻辑,因为扫码登录third_user_id是唯一的,没有重复的情况--- diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysThirdAppConfigServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysThirdAppConfigServiceImpl.java index b7cf0cc..61f0702 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysThirdAppConfigServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysThirdAppConfigServiceImpl.java @@ -14,7 +14,7 @@ import java.util.List; /** * @Description: 第三方配置表 * @Author: jeecg-boot - * @Date: 2023-02-03 + * @Date: 2023-02-03 * @Version: V1.0 */ @Service @@ -31,13 +31,13 @@ public class SysThirdAppConfigServiceImpl extends ServiceImpl getThirdAppConfigByClientId(String clientId) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysThirdAppConfig::getClientId,clientId); + query.eq(SysThirdAppConfig::getClientId, clientId); List sysThirdAppConfigs = configMapper.selectList(query); return sysThirdAppConfigs; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserAgentServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserAgentServiceImpl.java index d46c057..e040f7a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserAgentServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserAgentServiceImpl.java @@ -1,16 +1,15 @@ package org.jeecg.modules.system.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.system.entity.SysUserAgent; import org.jeecg.modules.system.mapper.SysUserAgentMapper; import org.jeecg.modules.system.service.ISysUserAgentService; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** * @Description: 用户代理人设置 * @Author: jeecg-boot - * @Date: 2019-04-17 + * @Date: 2019-04-17 * @Version: V1.0 */ @Service diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.java index 0f452bb..97456f9 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserDepartServiceImpl.java @@ -31,194 +31,194 @@ import java.util.*; import java.util.stream.Collectors; /** - *

+ *

* 用户部门表实现类 *

+ * * @Author ZhiLin - *@since 2019-02-22 + * @since 2019-02-22 */ @Service public class SysUserDepartServiceImpl extends ServiceImpl implements ISysUserDepartService { - @Autowired - private ISysDepartService sysDepartService; - @Lazy - @Autowired - private ISysUserService sysUserService; - @Autowired - private SysUserMapper sysUserMapper; - @Autowired + @Autowired + private ISysDepartService sysDepartService; + @Lazy + @Autowired + private ISysUserService sysUserService; + @Autowired + private SysUserMapper sysUserMapper; + @Autowired private SysUserTenantMapper userTenantMapper; - - /** - * 根据用户id查询部门信息 - */ - @Override - public List queryDepartIdsOfUser(String userId) { - LambdaQueryWrapper queryUserDep = new LambdaQueryWrapper(); - LambdaQueryWrapper queryDep = new LambdaQueryWrapper(); - try { + + /** + * 根据用户id查询部门信息 + */ + @Override + public List queryDepartIdsOfUser(String userId) { + LambdaQueryWrapper queryUserDep = new LambdaQueryWrapper(); + LambdaQueryWrapper queryDep = new LambdaQueryWrapper(); + try { queryUserDep.eq(SysUserDepart::getUserId, userId); - List depIdList = new ArrayList<>(); - List depIdModelList = new ArrayList<>(); - List userDepList = this.list(queryUserDep); - if(userDepList != null && userDepList.size() > 0) { - for(SysUserDepart userDepart : userDepList) { - depIdList.add(userDepart.getDepId()); - } + List depIdList = new ArrayList<>(); + List depIdModelList = new ArrayList<>(); + List userDepList = this.list(queryUserDep); + if (userDepList != null && userDepList.size() > 0) { + for (SysUserDepart userDepart : userDepList) { + depIdList.add(userDepart.getDepId()); + } - //update-begin---author:wangshuai ---date:20230112 for:判断是否开启租户saas模式,开启需要根据当前租户查询------------ - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - queryDep.eq(SysDepart::getTenantId,tenantId); - } - //update-end---author:wangshuai ---date:20230112 for:判断是否开启租户saas模式,开启需要根据当前租户查询------------ - - queryDep.in(SysDepart::getId, depIdList); - List depList = sysDepartService.list(queryDep); - //jeecg-boot/issues/3906 - if(depList != null && depList.size() > 0) { - for(SysDepart depart : depList) { - depIdModelList.add(new DepartIdModel().convertByUserDepart(depart)); - } - } - return depIdModelList; - } - }catch(Exception e) { - e.fillInStackTrace(); - } - return null; - - - } + //update-begin---author:wangshuai ---date:20230112 for:判断是否开启租户saas模式,开启需要根据当前租户查询------------ + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + queryDep.eq(SysDepart::getTenantId, tenantId); + } + //update-end---author:wangshuai ---date:20230112 for:判断是否开启租户saas模式,开启需要根据当前租户查询------------ + + queryDep.in(SysDepart::getId, depIdList); + List depList = sysDepartService.list(queryDep); + //jeecg-boot/issues/3906 + if (depList != null && depList.size() > 0) { + for (SysDepart depart : depList) { + depIdModelList.add(new DepartIdModel().convertByUserDepart(depart)); + } + } + return depIdModelList; + } + } catch (Exception e) { + e.fillInStackTrace(); + } + return null; - /** - * 根据部门id查询用户信息 - */ - @Override - public List queryUserByDepId(String depId) { - LambdaQueryWrapper queryUserDep = new LambdaQueryWrapper(); - queryUserDep.eq(SysUserDepart::getDepId, depId); - List userIdList = new ArrayList<>(); - List uDepList = this.list(queryUserDep); - if(uDepList != null && uDepList.size() > 0) { - for(SysUserDepart uDep : uDepList) { - userIdList.add(uDep.getUserId()); - } - List userList = (List) sysUserMapper.selectBatchIds(userIdList); - //update-begin-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 - for (SysUser sysUser : userList) { - sysUser.setSalt(""); - sysUser.setPassword(""); - } - //update-end-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 - return userList; - } - return new ArrayList(); - } + } - /** - * 根据部门code,查询当前部门和下级部门的 用户信息 - */ - @Override - public List queryUserByDepCode(String depCode,String realname) { - //update-begin-author:taoyan date:20210422 for: 根据部门选择用户接口代码优化 - if(oConvertUtils.isNotEmpty(realname)){ - realname = realname.trim(); - } - List userList = this.baseMapper.queryDepartUserList(depCode, realname); - Map map = new HashMap(5); - for (SysUser sysUser : userList) { - // 返回的用户数据去掉密码信息 - sysUser.setSalt(""); - sysUser.setPassword(""); - map.put(sysUser.getId(), sysUser); - } - return new ArrayList(map.values()); - //update-end-author:taoyan date:20210422 for: 根据部门选择用户接口代码优化 - } + /** + * 根据部门id查询用户信息 + */ + @Override + public List queryUserByDepId(String depId) { + LambdaQueryWrapper queryUserDep = new LambdaQueryWrapper(); + queryUserDep.eq(SysUserDepart::getDepId, depId); + List userIdList = new ArrayList<>(); + List uDepList = this.list(queryUserDep); + if (uDepList != null && uDepList.size() > 0) { + for (SysUserDepart uDep : uDepList) { + userIdList.add(uDep.getUserId()); + } + List userList = (List) sysUserMapper.selectBatchIds(userIdList); + //update-begin-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 + for (SysUser sysUser : userList) { + sysUser.setSalt(""); + sysUser.setPassword(""); + } + //update-end-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 + return userList; + } + return new ArrayList(); + } - /** - * - * @param departId - * @param username - * @param realname - * @param pageSize - * @param pageNo - * @param id - * @param isMultiTranslate 是否多字段翻译 - * @return - */ - @Override - public IPage queryDepartUserPageList(String departId, String username, String realname, int pageSize, int pageNo,String id,String isMultiTranslate) { - IPage pageList = null; - // 部门ID不存在 直接查询用户表即可 - Page page = new Page(pageNo, pageSize); - if(oConvertUtils.isEmpty(departId)){ - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + /** + * 根据部门code,查询当前部门和下级部门的 用户信息 + */ + @Override + public List queryUserByDepCode(String depCode, String realname) { + //update-begin-author:taoyan date:20210422 for: 根据部门选择用户接口代码优化 + if (oConvertUtils.isNotEmpty(realname)) { + realname = realname.trim(); + } + List userList = this.baseMapper.queryDepartUserList(depCode, realname); + Map map = new HashMap(5); + for (SysUser sysUser : userList) { + // 返回的用户数据去掉密码信息 + sysUser.setSalt(""); + sysUser.setPassword(""); + map.put(sysUser.getId(), sysUser); + } + return new ArrayList(map.values()); + //update-end-author:taoyan date:20210422 for: 根据部门选择用户接口代码优化 + + } + + /** + * @param departId + * @param username + * @param realname + * @param pageSize + * @param pageNo + * @param id + * @param isMultiTranslate 是否多字段翻译 + * @return + */ + @Override + public IPage queryDepartUserPageList(String departId, String username, String realname, int pageSize, int pageNo, String id, String isMultiTranslate) { + IPage pageList = null; + // 部门ID不存在 直接查询用户表即可 + Page page = new Page(pageNo, pageSize); + if (oConvertUtils.isEmpty(departId)) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); //update-begin---author:wangshuai ---date:20220104 for:[JTC-297]已冻结用户仍可设置为代理人------------ - query.eq(SysUser::getStatus,Integer.parseInt(CommonConstant.STATUS_1)); + query.eq(SysUser::getStatus, Integer.parseInt(CommonConstant.STATUS_1)); //update-end---author:wangshuai ---date:20220104 for:[JTC-297]已冻结用户仍可设置为代理人------------ - //update-begin---author:liusq ---date:20231215 for:逗号分割多个用户翻译问题------------ - if(oConvertUtils.isNotEmpty(username)){ - String COMMA = ","; - if(oConvertUtils.isNotEmpty(isMultiTranslate) && username.contains(COMMA)){ - String[] usernameArr = username.split(COMMA); - query.in(SysUser::getUsername,usernameArr); - }else { - query.like(SysUser::getUsername, username); - } - } - //update-end---author:liusq ---date:20231215 for:逗号分割多个用户翻译问题------------ + //update-begin---author:liusq ---date:20231215 for:逗号分割多个用户翻译问题------------ + if (oConvertUtils.isNotEmpty(username)) { + String COMMA = ","; + if (oConvertUtils.isNotEmpty(isMultiTranslate) && username.contains(COMMA)) { + String[] usernameArr = username.split(COMMA); + query.in(SysUser::getUsername, usernameArr); + } else { + query.like(SysUser::getUsername, username); + } + } + //update-end---author:liusq ---date:20231215 for:逗号分割多个用户翻译问题------------ //update-begin---author:wangshuai ---date:20220608 for:[VUEN-1238]邮箱回复时,发送到显示的为用户id------------ - if(oConvertUtils.isNotEmpty(id)){ + if (oConvertUtils.isNotEmpty(id)) { query.eq(SysUser::getId, id); } //update-end---author:wangshuai ---date:20220608 for:[VUEN-1238]邮箱回复时,发送到显示的为用户id------------ //update-begin---author:wangshuai ---date:20220902 for:[VUEN-2121]临时用户不能直接显示------------ - query.ne(SysUser::getUsername,"_reserve_user_external"); + query.ne(SysUser::getUsername, "_reserve_user_external"); //update-end---author:wangshuai ---date:20220902 for:[VUEN-2121]临时用户不能直接显示------------ - //------------------------------------------------------------------------------------------------ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - String tenantId = oConvertUtils.getString(TenantContext.getTenant(), "0"); + //------------------------------------------------------------------------------------------------ + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + String tenantId = oConvertUtils.getString(TenantContext.getTenant(), "0"); //update-begin---author:wangshuai ---date:20221223 for:[QQYUN-3371]租户逻辑改造,改成关系表------------ - List userIdList = userTenantMapper.getUserIdsByTenantId(Integer.valueOf(tenantId)); - if(null!=userIdList && userIdList.size()>0){ - query.in(SysUser::getId,userIdList); + List userIdList = userTenantMapper.getUserIdsByTenantId(Integer.valueOf(tenantId)); + if (null != userIdList && userIdList.size() > 0) { + query.in(SysUser::getId, userIdList); } //update-end---author:wangshuai ---date:20221223 for:[QQYUN-3371]租户逻辑改造,改成关系表------------ - } - //------------------------------------------------------------------------------------------------ - pageList = sysUserMapper.selectPage(page, query); - }else{ - // 有部门ID 需要走自定义sql - SysDepart sysDepart = sysDepartService.getById(departId); - pageList = this.baseMapper.queryDepartUserPageList(page, sysDepart.getOrgCode(), username, realname); - } - List userList = pageList.getRecords(); - if(userList!=null && userList.size()>0){ - List userIds = userList.stream().map(SysUser::getId).collect(Collectors.toList()); - Map map = new HashMap(5); - if(userIds!=null && userIds.size()>0){ - // 查部门名称 - Map useDepNames = this.getDepNamesByUserIds(userIds); - userList.forEach(item->{ - //TODO 临时借用这个字段用于页面展示 - item.setOrgCodeTxt(useDepNames.get(item.getId())); - item.setSalt(""); - item.setPassword(""); - // 去重 - map.put(item.getId(), item); - }); - } - pageList.setRecords(new ArrayList(map.values())); - } - return pageList; - } + } + //------------------------------------------------------------------------------------------------ + pageList = sysUserMapper.selectPage(page, query); + } else { + // 有部门ID 需要走自定义sql + SysDepart sysDepart = sysDepartService.getById(departId); + pageList = this.baseMapper.queryDepartUserPageList(page, sysDepart.getOrgCode(), username, realname); + } + List userList = pageList.getRecords(); + if (userList != null && userList.size() > 0) { + List userIds = userList.stream().map(SysUser::getId).collect(Collectors.toList()); + Map map = new HashMap(5); + if (userIds != null && userIds.size() > 0) { + // 查部门名称 + Map useDepNames = this.getDepNamesByUserIds(userIds); + userList.forEach(item -> { + //TODO 临时借用这个字段用于页面展示 + item.setOrgCodeTxt(useDepNames.get(item.getId())); + item.setSalt(""); + item.setPassword(""); + // 去重 + map.put(item.getId(), item); + }); + } + pageList.setRecords(new ArrayList(map.values())); + } + return pageList; + } @Override public IPage getUserInformation(Integer tenantId, String departId, String keyword, Integer pageSize, Integer pageNo) { @@ -226,121 +226,122 @@ public class SysUserDepartServiceImpl extends ServiceImpl page = new Page<>(pageNo, pageSize); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - if(oConvertUtils.isEmpty(departId)){ + if (oConvertUtils.isEmpty(departId)) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysUser::getStatus,Integer.parseInt(CommonConstant.STATUS_1)); - query.ne(SysUser::getUsername,"_reserve_user_external"); + query.eq(SysUser::getStatus, Integer.parseInt(CommonConstant.STATUS_1)); + query.ne(SysUser::getUsername, "_reserve_user_external"); + + // 支持租户隔离 + if (tenantId != null) { + List userIds = userTenantMapper.getUserIdsByTenantId(tenantId); + if (oConvertUtils.listIsNotEmpty(userIds)) { + query.in(SysUser::getId, userIds); + } else { + query.eq(SysUser::getId, "通过租户ID查不到用户"); + } + } - // 支持租户隔离 - if (tenantId != null) { - List userIds = userTenantMapper.getUserIdsByTenantId(tenantId); - if(oConvertUtils.listIsNotEmpty(userIds)){ - query.in(SysUser::getId, userIds); - }else{ - query.eq(SysUser::getId,"通过租户ID查不到用户"); - } - } - //排除自己 - query.ne(SysUser::getId,sysUser.getId()); - if(StringUtils.isNotEmpty(keyword)){ - //这个语法可以将or用括号包起来,避免数据查不到 - query.and((wrapper) -> wrapper.like(SysUser::getUsername, keyword).or().like(SysUser::getRealname,keyword)); - } + query.ne(SysUser::getId, sysUser.getId()); + if (StringUtils.isNotEmpty(keyword)) { + //这个语法可以将or用括号包起来,避免数据查不到 + query.and((wrapper) -> wrapper.like(SysUser::getUsername, keyword).or().like(SysUser::getRealname, keyword)); + } pageList = sysUserMapper.selectPage(page, query); - }else{ + } else { // 有部门ID 需要走自定义sql SysDepart sysDepart = sysDepartService.getById(departId); //update-begin---author:wangshuai ---date:20220908 for:部门排除自己------------ - pageList = this.baseMapper.getUserInformation(page, sysDepart.getOrgCode(), keyword,sysUser.getId()); + pageList = this.baseMapper.getUserInformation(page, sysDepart.getOrgCode(), keyword, sysUser.getId()); //update-end---author:wangshuai ---date:20220908 for:部门排除自己-------------- } return pageList; } - @Override - public IPage getUserInformation(Integer tenantId, String departId,String roleId, String keyword, Integer pageSize, Integer pageNo, String excludeUserIdList) { - IPage pageList = null; - // 部门ID不存在 直接查询用户表即可 - Page page = new Page<>(pageNo, pageSize); - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - - List userIdList = new ArrayList<>(); - if(oConvertUtils.isNotEmpty(excludeUserIdList)){ - userIdList = Arrays.asList(excludeUserIdList.split(SymbolConstant.COMMA)); - } - if(oConvertUtils.isNotEmpty(departId)){ - // 有部门ID 需要走自定义sql - SysDepart sysDepart = sysDepartService.getById(departId); - //update-begin-author:taoyan date:2023-1-3 for: 用户选择组件 加载用户需要根据租户ID过滤 - //update-begin---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- - //update-begin---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- - pageList = this.baseMapper.getProcessUserList(page, sysDepart.getOrgCode(), keyword, tenantId, userIdList); - //update-end---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- - } else if (oConvertUtils.isNotEmpty(roleId)) { - //update-begin---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- - pageList = this.sysUserMapper.selectUserListByRoleId(page, roleId, keyword, tenantId,userIdList); - //update-end---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- - //update-end-author:taoyan date:2023-1-3 for: 用户选择组件 加载用户需要根据租户ID过滤 - } else{ - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysUser::getStatus,Integer.parseInt(CommonConstant.STATUS_1)); - query.ne(SysUser::getUsername,"_reserve_user_external"); - //update-begin---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- - if(oConvertUtils.isNotEmpty(excludeUserIdList)){ - query.notIn(SysUser::getId,Arrays.asList(excludeUserIdList.split(SymbolConstant.COMMA))); - } - //update-end---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- - // 支持租户隔离 - if (tenantId != null) { - List userIds = userTenantMapper.getUserIdsByTenantId(tenantId); - if(oConvertUtils.listIsNotEmpty(userIds)){ - query.in(SysUser::getId, userIds); - }else{ - query.eq(SysUser::getId,"通过租户ID查不到用户"); - } - } - - if(StringUtils.isNotEmpty(keyword)){ - //这个语法可以将or用括号包起来,避免数据查不到 - query.and((wrapper) -> wrapper.like(SysUser::getUsername, keyword).or().like(SysUser::getRealname,keyword)); - } - pageList = sysUserMapper.selectPage(page, query); - } - // 批量查询用户的所属部门 - // step.1 先拿到全部的 useids - // step.2 通过 useids,一次性查询用户的所属部门名字 - List userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList()); - if (userIds.size() > 0) { - Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); - pageList.getRecords().forEach(item -> item.setOrgCodeTxt(useDepNames.get(item.getId()))); - } - return pageList; - } + @Override + public IPage getUserInformation(Integer tenantId, String departId, String roleId, String keyword, Integer pageSize, Integer pageNo, String excludeUserIdList) { + IPage pageList = null; + // 部门ID不存在 直接查询用户表即可 + Page page = new Page<>(pageNo, pageSize); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - @Override - public List getUsersByDepartTenantId(String departId, Integer tenantId) { - return baseMapper.getUsersByDepartTenantId(departId,tenantId); - } + List userIdList = new ArrayList<>(); + if (oConvertUtils.isNotEmpty(excludeUserIdList)) { + userIdList = Arrays.asList(excludeUserIdList.split(SymbolConstant.COMMA)); + } + if (oConvertUtils.isNotEmpty(departId)) { + // 有部门ID 需要走自定义sql + SysDepart sysDepart = sysDepartService.getById(departId); + //update-begin-author:taoyan date:2023-1-3 for: 用户选择组件 加载用户需要根据租户ID过滤 + //update-begin---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- + //update-begin---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- + pageList = this.baseMapper.getProcessUserList(page, sysDepart.getOrgCode(), keyword, tenantId, userIdList); + //update-end---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- + } else if (oConvertUtils.isNotEmpty(roleId)) { + //update-begin---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- + pageList = this.sysUserMapper.selectUserListByRoleId(page, roleId, keyword, tenantId, userIdList); + //update-end---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- + //update-end-author:taoyan date:2023-1-3 for: 用户选择组件 加载用户需要根据租户ID过滤 + } else { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysUser::getStatus, Integer.parseInt(CommonConstant.STATUS_1)); + query.ne(SysUser::getUsername, "_reserve_user_external"); + //update-begin---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- + if (oConvertUtils.isNotEmpty(excludeUserIdList)) { + query.notIn(SysUser::getId, Arrays.asList(excludeUserIdList.split(SymbolConstant.COMMA))); + } + //update-end---author:wangshuai---date:2024-02-02---for:【QQYUN-8239】用户角色,添加用户 返回2页数据,实际只显示一页--- + // 支持租户隔离 + if (tenantId != null) { + List userIds = userTenantMapper.getUserIdsByTenantId(tenantId); + if (oConvertUtils.listIsNotEmpty(userIds)) { + query.in(SysUser::getId, userIds); + } else { + query.eq(SysUser::getId, "通过租户ID查不到用户"); + } + } - /** - * 升级SpringBoot2.6.6,不允许循环依赖 - * @param userIds - * @return - */ - private Map getDepNamesByUserIds(List userIds) { - List list = sysUserMapper.getDepNamesByUserIds(userIds); + if (StringUtils.isNotEmpty(keyword)) { + //这个语法可以将or用括号包起来,避免数据查不到 + query.and((wrapper) -> wrapper.like(SysUser::getUsername, keyword).or().like(SysUser::getRealname, keyword)); + } + pageList = sysUserMapper.selectPage(page, query); + } + // 批量查询用户的所属部门 + // step.1 先拿到全部的 useids + // step.2 通过 useids,一次性查询用户的所属部门名字 + List userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList()); + if (userIds.size() > 0) { + Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); + pageList.getRecords().forEach(item -> item.setOrgCodeTxt(useDepNames.get(item.getId()))); + } + return pageList; + } - Map res = new HashMap(5); - list.forEach(item -> { - if (res.get(item.getUserId()) == null) { - res.put(item.getUserId(), item.getDepartName()); - } else { - res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName()); - } - } - ); - return res; - } + @Override + public List getUsersByDepartTenantId(String departId, Integer tenantId) { + return baseMapper.getUsersByDepartTenantId(departId, tenantId); + } + + /** + * 升级SpringBoot2.6.6,不允许循环依赖 + * + * @param userIds + * @return + */ + private Map getDepNamesByUserIds(List userIds) { + List list = sysUserMapper.getDepNamesByUserIds(userIds); + + Map res = new HashMap(5); + list.forEach(item -> { + if (res.get(item.getUserId()) == null) { + res.put(item.getUserId(), item.getDepartName()); + } else { + res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName()); + } + } + ); + return res; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserPositionServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserPositionServiceImpl.java index 7278467..e03c253 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserPositionServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserPositionServiceImpl.java @@ -2,23 +2,22 @@ package org.jeecg.modules.system.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.system.entity.SysPosition; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.entity.SysUserPosition; import org.jeecg.modules.system.mapper.SysUserMapper; import org.jeecg.modules.system.mapper.SysUserPositionMapper; import org.jeecg.modules.system.service.ISysUserPositionService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.Arrays; +import java.util.List; import java.util.stream.Collectors; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.beans.factory.annotation.Autowired; - /** * @Description: 用户职位关系表 * @Author: jeecg-boot @@ -75,7 +74,7 @@ public class SysUserPositionServiceImpl extends ServiceImpl * 用户角色表 服务实现类 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java index e3f43ff..d6e1419 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java @@ -12,6 +12,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.ObjectUtils; @@ -55,19 +57,15 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.jetbrains.annotations.Nullable; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -83,89 +81,89 @@ import java.util.stream.Collectors; @Service @Slf4j public class SysUserServiceImpl extends ServiceImpl implements ISysUserService { - - @Autowired - private SysUserMapper userMapper; - @Autowired - private SysPermissionMapper sysPermissionMapper; - @Autowired - private SysUserRoleMapper sysUserRoleMapper; - @Autowired - private SysUserDepartMapper sysUserDepartMapper; - @Autowired - private SysDepartMapper sysDepartMapper; - @Autowired - private SysRoleMapper sysRoleMapper; - @Autowired - private SysDepartRoleUserMapper departRoleUserMapper; - @Autowired - private SysDepartRoleMapper sysDepartRoleMapper; - @Resource - private BaseCommonService baseCommonService; - @Autowired - private SysThirdAccountMapper sysThirdAccountMapper; - @Autowired + + @Autowired + private SysUserMapper userMapper; + @Autowired + private SysPermissionMapper sysPermissionMapper; + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private SysUserDepartMapper sysUserDepartMapper; + @Autowired + private SysDepartMapper sysDepartMapper; + @Autowired + private SysRoleMapper sysRoleMapper; + @Autowired + private SysDepartRoleUserMapper departRoleUserMapper; + @Autowired + private SysDepartRoleMapper sysDepartRoleMapper; + @Resource + private BaseCommonService baseCommonService; + @Autowired + private SysThirdAccountMapper sysThirdAccountMapper; + @Autowired ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; - @Autowired + @Autowired ThirdAppDingtalkServiceImpl dingtalkService; - @Autowired + @Autowired ISysRoleIndexService sysRoleIndexService; - @Autowired + @Autowired SysTenantMapper sysTenantMapper; - @Autowired + @Autowired private SysUserTenantMapper relationMapper; - @Autowired + @Autowired private SysUserTenantMapper userTenantMapper; - @Autowired - private SysUserPositionMapper sysUserPositionMapper; - @Autowired - private SysPositionMapper sysPositionMapper; - @Autowired - private SystemSendMsgHandle systemSendMsgHandle; - - @Autowired - private ISysThirdAccountService sysThirdAccountService; + @Autowired + private SysUserPositionMapper sysUserPositionMapper; + @Autowired + private SysPositionMapper sysPositionMapper; + @Autowired + private SystemSendMsgHandle systemSendMsgHandle; - @Autowired - private RedisUtil redisUtil; - - @Override - public Result> queryPageList(HttpServletRequest req, QueryWrapper queryWrapper, Integer pageSize, Integer pageNo) { - Result> result = new Result>(); - //update-begin-Author:wangshuai--Date:20211119--for:【vue3】通过部门id查询用户,通过code查询id - //部门ID - String departId = req.getParameter("departId"); - if (oConvertUtils.isNotEmpty(departId)) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysUserDepart::getDepId, departId); - List list = sysUserDepartMapper.selectList(query); - List userIds = list.stream().map(SysUserDepart::getUserId).collect(Collectors.toList()); - //update-begin---author:wangshuai ---date:20220322 for:[issues/I4XTYB]查询用户时,当部门id 下没有分配用户时接口报错------------ - if (oConvertUtils.listIsNotEmpty(userIds)) { - queryWrapper.in("id", userIds); - } else { - return Result.OK(); - } - //update-end---author:wangshuai ---date:20220322 for:[issues/I4XTYB]查询用户时,当部门id 下没有分配用户时接口报错------------ - } - //用户ID - String code = req.getParameter("code"); - if (oConvertUtils.isNotEmpty(code)) { - queryWrapper.in("id", Arrays.asList(code.split(","))); - pageSize = code.split(",").length; - } - //update-end-Author:wangshuai--Date:20211119--for:【vue3】通过部门id查询用户,通过code查询id + @Autowired + private ISysThirdAccountService sysThirdAccountService; - //update-begin-author:taoyan--date:20220104--for: JTC-372 【用户冻结问题】 online授权、用户组件,选择用户都能看到被冻结的用户 - String status = req.getParameter("status"); - if (oConvertUtils.isNotEmpty(status)) { - queryWrapper.eq("status", Integer.parseInt(status)); - } - //update-end-author:taoyan--date:20220104--for: JTC-372 【用户冻结问题】 online授权、用户组件,选择用户都能看到被冻结的用户 + @Autowired + private RedisUtil redisUtil; - //update-begin---author:wangshuai---date:2024-03-08---for:【QQYUN-8110】在线通讯录支持设置权限(只能看分配的技术支持)--- - String tenantId = TokenUtils.getTenantIdByRequest(req); - String lowAppId = TokenUtils.getLowAppIdByRequest(req); + @Override + public Result> queryPageList(HttpServletRequest req, QueryWrapper queryWrapper, Integer pageSize, Integer pageNo) { + Result> result = new Result>(); + //update-begin-Author:wangshuai--Date:20211119--for:【vue3】通过部门id查询用户,通过code查询id + //部门ID + String departId = req.getParameter("departId"); + if (oConvertUtils.isNotEmpty(departId)) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysUserDepart::getDepId, departId); + List list = sysUserDepartMapper.selectList(query); + List userIds = list.stream().map(SysUserDepart::getUserId).collect(Collectors.toList()); + //update-begin---author:wangshuai ---date:20220322 for:[issues/I4XTYB]查询用户时,当部门id 下没有分配用户时接口报错------------ + if (oConvertUtils.listIsNotEmpty(userIds)) { + queryWrapper.in("id", userIds); + } else { + return Result.OK(); + } + //update-end---author:wangshuai ---date:20220322 for:[issues/I4XTYB]查询用户时,当部门id 下没有分配用户时接口报错------------ + } + //用户ID + String code = req.getParameter("code"); + if (oConvertUtils.isNotEmpty(code)) { + queryWrapper.in("id", Arrays.asList(code.split(","))); + pageSize = code.split(",").length; + } + //update-end-Author:wangshuai--Date:20211119--for:【vue3】通过部门id查询用户,通过code查询id + + //update-begin-author:taoyan--date:20220104--for: JTC-372 【用户冻结问题】 online授权、用户组件,选择用户都能看到被冻结的用户 + String status = req.getParameter("status"); + if (oConvertUtils.isNotEmpty(status)) { + queryWrapper.eq("status", Integer.parseInt(status)); + } + //update-end-author:taoyan--date:20220104--for: JTC-372 【用户冻结问题】 online授权、用户组件,选择用户都能看到被冻结的用户 + + //update-begin---author:wangshuai---date:2024-03-08---for:【QQYUN-8110】在线通讯录支持设置权限(只能看分配的技术支持)--- + String tenantId = TokenUtils.getTenantIdByRequest(req); + String lowAppId = TokenUtils.getLowAppIdByRequest(req); // Object bean = ResourceUtil.getImplementationClass(DataEnhanceEnum.getClassPath(tenantId,lowAppId)); // if(null != bean){ // UserFilterEnhance userEnhanceService = (UserFilterEnhance) bean; @@ -175,63 +173,64 @@ public class SysUserServiceImpl extends ServiceImpl impl // queryWrapper.in("id", userIds); // } // } - //update-end---author:wangshuai---date:2024-03-08---for:【QQYUN-8110】在线通讯录支持设置权限(只能看分配的技术支持)--- - - //TODO 外部模拟登陆临时账号,列表不显示 - queryWrapper.ne("username", "_reserve_user_external"); - Page page = new Page(pageNo, pageSize); - IPage pageList = this.page(page, queryWrapper); + //update-end---author:wangshuai---date:2024-03-08---for:【QQYUN-8110】在线通讯录支持设置权限(只能看分配的技术支持)--- - //批量查询用户的所属部门 - //step.1 先拿到全部的 useids - //step.2 通过 useids,一次性查询用户的所属部门名字 - List userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList()); - if (userIds != null && userIds.size() > 0) { - Map useDepNames = this.getDepNamesByUserIds(userIds); - pageList.getRecords().forEach(item -> { - item.setOrgCodeTxt(useDepNames.get(item.getId())); - //查询用户的租户ids - List list = userTenantMapper.getTenantIdsByUserId(item.getId()); - if (oConvertUtils.isNotEmpty(list)) { - item.setRelTenantIds(StringUtils.join(list.toArray(), SymbolConstant.COMMA)); - } else { - item.setRelTenantIds(""); - } - Integer posTenantId = null; - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - posTenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);; - } - //查询用户职位关系表(获取租户下面的) - //update-begin---author:wangshuai---date:2023-11-15---for:【QQYUN-7028】用户职务保存后未回显--- - List positionList = sysUserPositionMapper.getPositionIdByUserTenantId(item.getId(),posTenantId); - //update-end---author:wangshuai---date:2023-11-15---for:【QQYUN-7028】用户职务保存后未回显--- - //update-end---author:wangshuai ---date:20230228 for:[QQYUN-4354]加入更多字段:当前加入时间应该取当前租户的/职位也是当前租户下的------------ - item.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA)); - - //update-begin---author:wangshuai---date:2023-10-08---for:【QQYUN-6668】钉钉部门和用户同步,我怎么知道哪些用户是双向绑定成功的--- - //是否根据租户隔离(敲敲云用户列表专用,用于展示是否同步钉钉) - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - //查询账号表是否已同步钉钉 - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysThirdAccount::getSysUserId,item.getId()); - query.eq(SysThirdAccount::getTenantId, tenantId); - //目前只有同步钉钉 - query.eq(SysThirdAccount::getThirdType, MessageTypeEnum.DD.getType()); - //不为空代表已同步钉钉 - List account = sysThirdAccountService.list(query); - if(CollectionUtil.isNotEmpty(account)){ - item.setIzBindThird(true); - } - } - //update-end---author:wangshuai---date:2023-10-08---for:【QQYUN-6668】钉钉部门和用户同步,我怎么知道哪些用户是双向绑定成功的--- - }); - } + //TODO 外部模拟登陆临时账号,列表不显示 + queryWrapper.ne("username", "_reserve_user_external"); + Page page = new Page(pageNo, pageSize); + IPage pageList = this.page(page, queryWrapper); - result.setSuccess(true); - result.setResult(pageList); - //log.info(pageList.toString()); - return result; - } + //批量查询用户的所属部门 + //step.1 先拿到全部的 useids + //step.2 通过 useids,一次性查询用户的所属部门名字 + List userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList()); + if (userIds != null && userIds.size() > 0) { + Map useDepNames = this.getDepNamesByUserIds(userIds); + pageList.getRecords().forEach(item -> { + item.setOrgCodeTxt(useDepNames.get(item.getId())); + //查询用户的租户ids + List list = userTenantMapper.getTenantIdsByUserId(item.getId()); + if (oConvertUtils.isNotEmpty(list)) { + item.setRelTenantIds(StringUtils.join(list.toArray(), SymbolConstant.COMMA)); + } else { + item.setRelTenantIds(""); + } + Integer posTenantId = null; + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + posTenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + ; + } + //查询用户职位关系表(获取租户下面的) + //update-begin---author:wangshuai---date:2023-11-15---for:【QQYUN-7028】用户职务保存后未回显--- + List positionList = sysUserPositionMapper.getPositionIdByUserTenantId(item.getId(), posTenantId); + //update-end---author:wangshuai---date:2023-11-15---for:【QQYUN-7028】用户职务保存后未回显--- + //update-end---author:wangshuai ---date:20230228 for:[QQYUN-4354]加入更多字段:当前加入时间应该取当前租户的/职位也是当前租户下的------------ + item.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA)); + + //update-begin---author:wangshuai---date:2023-10-08---for:【QQYUN-6668】钉钉部门和用户同步,我怎么知道哪些用户是双向绑定成功的--- + //是否根据租户隔离(敲敲云用户列表专用,用于展示是否同步钉钉) + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + //查询账号表是否已同步钉钉 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysThirdAccount::getSysUserId, item.getId()); + query.eq(SysThirdAccount::getTenantId, tenantId); + //目前只有同步钉钉 + query.eq(SysThirdAccount::getThirdType, MessageTypeEnum.DD.getType()); + //不为空代表已同步钉钉 + List account = sysThirdAccountService.list(query); + if (CollectionUtil.isNotEmpty(account)) { + item.setIzBindThird(true); + } + } + //update-end---author:wangshuai---date:2023-10-08---for:【QQYUN-6668】钉钉部门和用户同步,我怎么知道哪些用户是双向绑定成功的--- + }); + } + + result.setSuccess(true); + result.setResult(pageList); + //log.info(pageList.toString()); + return result; + } @Override @@ -266,256 +265,260 @@ public class SysUserServiceImpl extends ServiceImpl impl } @Override - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) - @Transactional(rollbackFor = Exception.class) - public boolean deleteUser(String userId) { - //update-begin---author:wangshuai---date:2024-01-16---for:【QQYUN-7974】admin用户禁止删除--- - //1.验证当前用户是管理员账号 admin - //验证用户是否为管理员 - this.checkUserAdminRejectDel(userId); - //update-end---author:wangshuai---date:2024-01-16---for:【QQYUN-7974】admin用户禁止删除--- - - //2.删除用户 - this.removeById(userId); - return false; - } + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) + @Transactional(rollbackFor = Exception.class) + public boolean deleteUser(String userId) { + //update-begin---author:wangshuai---date:2024-01-16---for:【QQYUN-7974】admin用户禁止删除--- + //1.验证当前用户是管理员账号 admin + //验证用户是否为管理员 + this.checkUserAdminRejectDel(userId); + //update-end---author:wangshuai---date:2024-01-16---for:【QQYUN-7974】admin用户禁止删除--- - @Override - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) - @Transactional(rollbackFor = Exception.class) - public boolean deleteBatchUsers(String userIds) { - //1.验证当前用户是管理员账号 admin - this.checkUserAdminRejectDel(userIds); - //2.删除用户 - this.removeByIds(Arrays.asList(userIds.split(","))); - return false; - } + //2.删除用户 + this.removeById(userId); + return false; + } - @Override - public SysUser getUserByName(String username) { - SysUser sysUser = userMapper.getUserByName(username); - //查询用户的租户ids - if(sysUser!=null){ - List list = userTenantMapper.getTenantIdsByUserId(sysUser.getId()); - if (oConvertUtils.isNotEmpty(list)) { - sysUser.setRelTenantIds(StringUtils.join(list.toArray(), SymbolConstant.COMMA)); - } else { - sysUser.setRelTenantIds(""); - } - } - return sysUser; - } - - - @Override - @Transactional(rollbackFor = Exception.class) - public void addUserWithRole(SysUser user, String roles) { - this.save(user); - if(oConvertUtils.isNotEmpty(roles)) { - String[] arr = roles.split(","); - for (String roleId : arr) { - SysUserRole userRole = new SysUserRole(user.getId(), roleId); - sysUserRoleMapper.insert(userRole); - } - } - } + @Override + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) + @Transactional(rollbackFor = Exception.class) + public boolean deleteBatchUsers(String userIds) { + //1.验证当前用户是管理员账号 admin + this.checkUserAdminRejectDel(userIds); + //2.删除用户 + this.removeByIds(Arrays.asList(userIds.split(","))); + return false; + } - @Override - @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, allEntries=true) - @Transactional(rollbackFor = Exception.class) - public void editUserWithRole(SysUser user, String roles) { - this.updateById(user); - //先删后加 - sysUserRoleMapper.delete(new QueryWrapper().lambda().eq(SysUserRole::getUserId, user.getId())); - if(oConvertUtils.isNotEmpty(roles)) { - String[] arr = roles.split(","); - for (String roleId : arr) { - SysUserRole userRole = new SysUserRole(user.getId(), roleId); - sysUserRoleMapper.insert(userRole); - } - } - } + @Override + public SysUser getUserByName(String username) { + SysUser sysUser = userMapper.getUserByName(username); + //查询用户的租户ids + if (sysUser != null) { + List list = userTenantMapper.getTenantIdsByUserId(sysUser.getId()); + if (oConvertUtils.isNotEmpty(list)) { + sysUser.setRelTenantIds(StringUtils.join(list.toArray(), SymbolConstant.COMMA)); + } else { + sysUser.setRelTenantIds(""); + } + } + return sysUser; + } - @Override - public List getRole(String username) { - return sysUserRoleMapper.getRoleByUserName(username); - } + @Override + @Transactional(rollbackFor = Exception.class) + public void addUserWithRole(SysUser user, String roles) { + this.save(user); + if (oConvertUtils.isNotEmpty(roles)) { + String[] arr = roles.split(","); + for (String roleId : arr) { + SysUserRole userRole = new SysUserRole(user.getId(), roleId); + sysUserRoleMapper.insert(userRole); + } + } + } - /** - * 获取动态首页路由配置 - * - * @param username - * @param version - * @return - */ - @Override - public SysRoleIndex getDynamicIndexByUserRole(String username, String version) { - List roles = sysUserRoleMapper.getRoleByUserName(username); - String componentUrl = RoleIndexConfigEnum.getIndexByRoles(roles); - SysRoleIndex roleIndex = new SysRoleIndex(componentUrl); - boolean isV3 = CommonConstant.VERSION_V3.equals(version); - //只有 X-Version=v3 的时候,才读取sys_role_index表获取角色首页配置 - if (isV3 && CollectionUtils.isNotEmpty(roles)) { - LambdaQueryWrapper routeIndexQuery = new LambdaQueryWrapper<>(); - //用户所有角色 - routeIndexQuery.in(SysRoleIndex::getRoleCode, roles); - //角色首页状态0:未开启 1:开启 - routeIndexQuery.eq(SysRoleIndex::getStatus, CommonConstant.STATUS_1); - //优先级正序排序 - routeIndexQuery.orderByAsc(SysRoleIndex::getPriority); - List list = sysRoleIndexService.list(routeIndexQuery); - if (CollectionUtils.isNotEmpty(list)) { - roleIndex = list.get(0); - } - } + @Override + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) + @Transactional(rollbackFor = Exception.class) + public void editUserWithRole(SysUser user, String roles) { + this.updateById(user); + //先删后加 + sysUserRoleMapper.delete(new QueryWrapper().lambda().eq(SysUserRole::getUserId, user.getId())); + if (oConvertUtils.isNotEmpty(roles)) { + String[] arr = roles.split(","); + for (String roleId : arr) { + SysUserRole userRole = new SysUserRole(user.getId(), roleId); + sysUserRoleMapper.insert(userRole); + } + } + } - if (oConvertUtils.isEmpty(roleIndex.getComponent())) { - if (isV3) { - // 如果角色没有配置首页,则使用默认首页 - return sysRoleIndexService.queryDefaultIndex(); - } else { - // 非v3返回null - return null; - } - } - return roleIndex; - } - /** - * 通过用户名获取用户角色集合 - * @param username 用户名 + @Override + public List getRole(String username) { + return sysUserRoleMapper.getRoleByUserName(username); + } + + /** + * 获取动态首页路由配置 + * + * @param username + * @param version + * @return + */ + @Override + public SysRoleIndex getDynamicIndexByUserRole(String username, String version) { + List roles = sysUserRoleMapper.getRoleByUserName(username); + String componentUrl = RoleIndexConfigEnum.getIndexByRoles(roles); + SysRoleIndex roleIndex = new SysRoleIndex(componentUrl); + boolean isV3 = CommonConstant.VERSION_V3.equals(version); + //只有 X-Version=v3 的时候,才读取sys_role_index表获取角色首页配置 + if (isV3 && CollectionUtils.isNotEmpty(roles)) { + LambdaQueryWrapper routeIndexQuery = new LambdaQueryWrapper<>(); + //用户所有角色 + routeIndexQuery.in(SysRoleIndex::getRoleCode, roles); + //角色首页状态0:未开启 1:开启 + routeIndexQuery.eq(SysRoleIndex::getStatus, CommonConstant.STATUS_1); + //优先级正序排序 + routeIndexQuery.orderByAsc(SysRoleIndex::getPriority); + List list = sysRoleIndexService.list(routeIndexQuery); + if (CollectionUtils.isNotEmpty(list)) { + roleIndex = list.get(0); + } + } + + if (oConvertUtils.isEmpty(roleIndex.getComponent())) { + if (isV3) { + // 如果角色没有配置首页,则使用默认首页 + return sysRoleIndexService.queryDefaultIndex(); + } else { + // 非v3返回null + return null; + } + } + return roleIndex; + } + + /** + * 通过用户名获取用户角色集合 + * + * @param username 用户名 * @return 角色集合 - */ - @Override - public Set getUserRolesSet(String username) { - // 查询用户拥有的角色集合 - List roles = sysUserRoleMapper.getRoleByUserName(username); - log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size())); - return new HashSet<>(roles); - } - - /** - * 通过用户名获取用户角色集合 - * @param userId 用户ID - * @return 角色集合 - */ - @Override - public Set getUserRoleSetById(String userId) { - // 查询用户拥有的角色集合 - List roles = sysUserRoleMapper.getRoleCodeByUserId(userId); - log.info("-------通过数据库读取用户拥有的角色Rules------userId: " + userId + ",Roles size: " + (roles == null ? 0 : roles.size())); - return new HashSet<>(roles); - } + */ + @Override + public Set getUserRolesSet(String username) { + // 查询用户拥有的角色集合 + List roles = sysUserRoleMapper.getRoleByUserName(username); + log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size())); + return new HashSet<>(roles); + } - /** - * 通过用户名获取用户权限集合 - * - * @param userId 用户ID - * @return 权限集合 - */ - @Override - public Set getUserPermissionsSet(String userId) { - Set permissionSet = new HashSet<>(); - List permissionList = sysPermissionMapper.queryByUser(userId); - //================= begin 开启租户的时候 如果没有test角色,默认加入test角色================ - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - if (permissionList == null) { - permissionList = new ArrayList<>(); - } - List testRoleList = sysPermissionMapper.queryPermissionByTestRoleId(); - permissionList.addAll(testRoleList); - } - //================= end 开启租户的时候 如果没有test角色,默认加入test角色================ - for (SysPermission po : permissionList) { + /** + * 通过用户名获取用户角色集合 + * + * @param userId 用户ID + * @return 角色集合 + */ + @Override + public Set getUserRoleSetById(String userId) { + // 查询用户拥有的角色集合 + List roles = sysUserRoleMapper.getRoleCodeByUserId(userId); + log.info("-------通过数据库读取用户拥有的角色Rules------userId: " + userId + ",Roles size: " + (roles == null ? 0 : roles.size())); + return new HashSet<>(roles); + } + + /** + * 通过用户名获取用户权限集合 + * + * @param userId 用户ID + * @return 权限集合 + */ + @Override + public Set getUserPermissionsSet(String userId) { + Set permissionSet = new HashSet<>(); + List permissionList = sysPermissionMapper.queryByUser(userId); + //================= begin 开启租户的时候 如果没有test角色,默认加入test角色================ + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + if (permissionList == null) { + permissionList = new ArrayList<>(); + } + List testRoleList = sysPermissionMapper.queryPermissionByTestRoleId(); + permissionList.addAll(testRoleList); + } + //================= end 开启租户的时候 如果没有test角色,默认加入test角色================ + for (SysPermission po : permissionList) { // // TODO URL规则有问题? // if (oConvertUtils.isNotEmpty(po.getUrl())) { // permissionSet.add(po.getUrl()); // } - if (oConvertUtils.isNotEmpty(po.getPerms())) { - permissionSet.add(po.getPerms()); - } - } - log.info("-------通过数据库读取用户拥有的权限Perms------userId: "+ userId+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) ); - return permissionSet; - } + if (oConvertUtils.isNotEmpty(po.getPerms())) { + permissionSet.add(po.getPerms()); + } + } + log.info("-------通过数据库读取用户拥有的权限Perms------userId: " + userId + ",Perms size: " + (permissionSet == null ? 0 : permissionSet.size())); + return permissionSet; + } - /** - * 升级SpringBoot2.6.6,不允许循环依赖 - * @author:qinfeng - * @update: 2022-04-07 - * @param username - * @return - */ - @Override - public SysUserCacheInfo getCacheUser(String username) { - SysUserCacheInfo info = new SysUserCacheInfo(); - info.setOneDepart(true); - if(oConvertUtils.isEmpty(username)) { - return null; - } + /** + * 升级SpringBoot2.6.6,不允许循环依赖 + * + * @param username + * @return + * @author:qinfeng + * @update: 2022-04-07 + */ + @Override + public SysUserCacheInfo getCacheUser(String username) { + SysUserCacheInfo info = new SysUserCacheInfo(); + info.setOneDepart(true); + if (oConvertUtils.isEmpty(username)) { + return null; + } - //查询用户信息 - SysUser sysUser = userMapper.getUserByName(username); - if(sysUser!=null) { - info.setSysUserCode(sysUser.getUsername()); - info.setSysUserName(sysUser.getRealname()); - info.setSysOrgCode(sysUser.getOrgCode()); - } - - //多部门支持in查询 - List list = sysDepartMapper.queryUserDeparts(sysUser.getId()); - List sysMultiOrgCode = new ArrayList(); - if(list==null || list.size()==0) { - //当前用户无部门 - //sysMultiOrgCode.add("0"); - }else if(list.size()==1) { - sysMultiOrgCode.add(list.get(0).getOrgCode()); - }else { - info.setOneDepart(false); - for (SysDepart dpt : list) { - sysMultiOrgCode.add(dpt.getOrgCode()); - } - } - info.setSysMultiOrgCode(sysMultiOrgCode); - - return info; - } + //查询用户信息 + SysUser sysUser = userMapper.getUserByName(username); + if (sysUser != null) { + info.setSysUserCode(sysUser.getUsername()); + info.setSysUserName(sysUser.getRealname()); + info.setSysOrgCode(sysUser.getOrgCode()); + } + + //多部门支持in查询 + List list = sysDepartMapper.queryUserDeparts(sysUser.getId()); + List sysMultiOrgCode = new ArrayList(); + if (list == null || list.size() == 0) { + //当前用户无部门 + //sysMultiOrgCode.add("0"); + } else if (list.size() == 1) { + sysMultiOrgCode.add(list.get(0).getOrgCode()); + } else { + info.setOneDepart(false); + for (SysDepart dpt : list) { + sysMultiOrgCode.add(dpt.getOrgCode()); + } + } + info.setSysMultiOrgCode(sysMultiOrgCode); + + return info; + } /** * 根据部门Id查询 + * * @param page * @param departId 部门id * @param username 用户账户名称 * @return */ - @Override - public IPage getUserByDepId(Page page, String departId, String username) { - return userMapper.getUserByDepId(page, departId,username); - } + @Override + public IPage getUserByDepId(Page page, String departId, String username) { + return userMapper.getUserByDepId(page, departId, username); + } - @Override - public IPage getUserByDepIds(Page page, List departIds, String username) { - return userMapper.getUserByDepIds(page, departIds,username); - } + @Override + public IPage getUserByDepIds(Page page, List departIds, String username) { + return userMapper.getUserByDepIds(page, departIds, username); + } - @Override - public Map getDepNamesByUserIds(List userIds) { - List list = this.baseMapper.getDepNamesByUserIds(userIds); + @Override + public Map getDepNamesByUserIds(List userIds) { + List list = this.baseMapper.getDepNamesByUserIds(userIds); - Map res = new HashMap(5); - list.forEach(item -> { - if (res.get(item.getUserId()) == null) { - res.put(item.getUserId(), item.getDepartName()); - } else { - res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName()); - } - } - ); - return res; - } + Map res = new HashMap(5); + list.forEach(item -> { + if (res.get(item.getUserId()) == null) { + res.put(item.getUserId(), item.getDepartName()); + } else { + res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName()); + } + } + ); + return res; + } - //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 方法没有使用,注掉 + //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 方法没有使用,注掉 /* @Override public IPage getUserByDepartIdAndQueryWrapper(Page page, String departId, QueryWrapper queryWrapper) { LambdaQueryWrapper lambdaQueryWrapper = queryWrapper.lambda(); @@ -525,153 +528,155 @@ public class SysUserServiceImpl extends ServiceImpl impl return userMapper.selectPage(page, lambdaQueryWrapper); }*/ - //update-end-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 方法没有使用,注掉 + //update-end-author:taoyan date:2022-9-13 for: VUEN-2245【漏洞】发现新漏洞待处理20220906 ----sql注入 方法没有使用,注掉 - @Override - public IPage queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) { - List list = baseMapper.getUserByOrgCode(page, orgCode, userParams); - //根据部门orgCode查询部门,需要将职位id进行传递 - for (SysUserSysDepartModel model:list) { - List positionList = sysUserPositionMapper.getPositionIdByUserId(model.getId()); - model.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA)); - } - Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams); + @Override + public IPage queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) { + List list = baseMapper.getUserByOrgCode(page, orgCode, userParams); + //根据部门orgCode查询部门,需要将职位id进行传递 + for (SysUserSysDepartModel model : list) { + List positionList = sysUserPositionMapper.getPositionIdByUserId(model.getId()); + model.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA)); + } + Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams); - IPage result = new Page<>(page.getCurrent(), page.getSize(), total); - result.setRecords(list); + IPage result = new Page<>(page.getCurrent(), page.getSize(), total); + result.setRecords(list); - return result; - } + return result; + } /** * 根据角色Id查询 + * * @param page - * @param roleId 角色id + * @param roleId 角色id * @param username 用户账户名称 * @return */ - @Override - public IPage getUserByRoleId(Page page, String roleId, String username,String roleCode) { - //update-begin---author:wangshuai ---date:20230220 for:[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------ - IPage userRoleList = userMapper.getUserByRoleId(page, roleId, username,roleCode); - List records = userRoleList.getRecords(); - if (null != records && records.size() > 0) { - List userIds = records.stream().map(SysUser::getId).collect(Collectors.toList()); - Map useDepNames = this.getDepNamesByUserIds(userIds); - for (SysUser sysUser : userRoleList.getRecords()) { - //设置部门 - sysUser.setOrgCodeTxt(useDepNames.get(sysUser.getId())); - //设置用户职位id - this.userPositionId(sysUser); - } - } - return userRoleList; - //update-end---author:wangshuai ---date:20230220 for:[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------ - } + @Override + public IPage getUserByRoleId(Page page, String roleId, String username, String roleCode) { + //update-begin---author:wangshuai ---date:20230220 for:[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------ + IPage userRoleList = userMapper.getUserByRoleId(page, roleId, username, roleCode); + List records = userRoleList.getRecords(); + if (null != records && records.size() > 0) { + List userIds = records.stream().map(SysUser::getId).collect(Collectors.toList()); + Map useDepNames = this.getDepNamesByUserIds(userIds); + for (SysUser sysUser : userRoleList.getRecords()) { + //设置部门 + sysUser.setOrgCodeTxt(useDepNames.get(sysUser.getId())); + //设置用户职位id + this.userPositionId(sysUser); + } + } + return userRoleList; + //update-end---author:wangshuai ---date:20230220 for:[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------ + } - @Override - @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, key="#username") - public void updateUserDepart(String username,String orgCode,Integer loginTenantId) { - baseMapper.updateUserDepart(username, orgCode,loginTenantId); - } + @Override + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, key = "#username") + public void updateUserDepart(String username, String orgCode, Integer loginTenantId) { + baseMapper.updateUserDepart(username, orgCode, loginTenantId); + } - @Override - public SysUser getUserByPhone(String phone) { - return userMapper.getUserByPhone(phone); - } + @Override + public SysUser getUserByPhone(String phone) { + return userMapper.getUserByPhone(phone); + } - @Override - public SysUser getUserByEmail(String email) { - return userMapper.getUserByEmail(email); - } + @Override + public SysUser getUserByEmail(String email) { + return userMapper.getUserByEmail(email); + } - @Override - @Transactional(rollbackFor = Exception.class) - public void addUserWithDepart(SysUser user, String selectedParts) { + @Override + @Transactional(rollbackFor = Exception.class) + public void addUserWithDepart(SysUser user, String selectedParts) { // this.save(user); //保存角色的时候已经添加过一次了 - if(oConvertUtils.isNotEmpty(selectedParts)) { - String[] arr = selectedParts.split(","); - for (String deaprtId : arr) { - SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId); - sysUserDepartMapper.insert(userDeaprt); - } - } - } + if (oConvertUtils.isNotEmpty(selectedParts)) { + String[] arr = selectedParts.split(","); + for (String deaprtId : arr) { + SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId); + sysUserDepartMapper.insert(userDeaprt); + } + } + } - @Override - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) - public void editUserWithDepart(SysUser user, String departs) { + @Override + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) + public void editUserWithDepart(SysUser user, String departs) { //更新角色的时候已经更新了一次了,可以再跟新一次 - this.updateById(user); - String[] arr = {}; - if(oConvertUtils.isNotEmpty(departs)){ - arr = departs.split(","); - } - //查询已关联部门 - List userDepartList = sysUserDepartMapper.selectList(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); - if(userDepartList != null && userDepartList.size()>0){ - for(SysUserDepart depart : userDepartList ){ - //修改已关联部门删除部门用户角色关系 - if(!Arrays.asList(arr).contains(depart.getDepId())){ - List sysDepartRoleList = sysDepartRoleMapper.selectList( - new QueryWrapper().lambda().eq(SysDepartRole::getDepartId,depart.getDepId())); - List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); - if(roleIds != null && roleIds.size()>0){ - departRoleUserMapper.delete(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) - .in(SysDepartRoleUser::getDroleId,roleIds)); - } - } - } - } - //先删后加 - sysUserDepartMapper.delete(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); - if(oConvertUtils.isNotEmpty(departs)) { - for (String departId : arr) { - SysUserDepart userDepart = new SysUserDepart(user.getId(), departId); - sysUserDepartMapper.insert(userDepart); - } - } - } + this.updateById(user); + String[] arr = {}; + if (oConvertUtils.isNotEmpty(departs)) { + arr = departs.split(","); + } + //查询已关联部门 + List userDepartList = sysUserDepartMapper.selectList(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); + if (userDepartList != null && userDepartList.size() > 0) { + for (SysUserDepart depart : userDepartList) { + //修改已关联部门删除部门用户角色关系 + if (!Arrays.asList(arr).contains(depart.getDepId())) { + List sysDepartRoleList = sysDepartRoleMapper.selectList( + new QueryWrapper().lambda().eq(SysDepartRole::getDepartId, depart.getDepId())); + List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + if (roleIds != null && roleIds.size() > 0) { + departRoleUserMapper.delete(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) + .in(SysDepartRoleUser::getDroleId, roleIds)); + } + } + } + } + //先删后加 + sysUserDepartMapper.delete(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); + if (oConvertUtils.isNotEmpty(departs)) { + for (String departId : arr) { + SysUserDepart userDepart = new SysUserDepart(user.getId(), departId); + sysUserDepartMapper.insert(userDepart); + } + } + } - /** - * 校验用户是否有效 - * @param sysUser - * @return - */ - @Override - public Result checkUserIsEffective(SysUser sysUser) { - Result result = new Result(); - //情况1:根据用户信息查询,该用户不存在 - if (sysUser == null) { - result.error500("该用户不存在,请注册"); - baseCommonService.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null); - return result; - } - //情况2:根据用户信息查询,该用户已注销 - //update-begin---author:王帅 Date:20200601 for:if条件永远为falsebug------------ - if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) { - //update-end---author:王帅 Date:20200601 for:if条件永远为falsebug------------ - baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null); - result.error500("该用户已注销"); - return result; - } - //情况3:根据用户信息查询,该用户已冻结 - if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) { - baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null); - result.error500("该用户已冻结"); - return result; - } - return result; - } + /** + * 校验用户是否有效 + * + * @param sysUser + * @return + */ + @Override + public Result checkUserIsEffective(SysUser sysUser) { + Result result = new Result(); + //情况1:根据用户信息查询,该用户不存在 + if (sysUser == null) { + result.error500("该用户不存在,请注册"); + baseCommonService.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null); + return result; + } + //情况2:根据用户信息查询,该用户已注销 + //update-begin---author:王帅 Date:20200601 for:if条件永远为falsebug------------ + if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) { + //update-end---author:王帅 Date:20200601 for:if条件永远为falsebug------------ + baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null); + result.error500("该用户已注销"); + return result; + } + //情况3:根据用户信息查询,该用户已冻结 + if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) { + baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null); + result.error500("该用户已冻结"); + return result; + } + return result; + } - @Override - public List queryLogicDeleted() { + @Override + public List queryLogicDeleted() { //update-begin---author:wangshuai ---date:20221116 for:回收站查询未离职的------------ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.ne(SysUser::getStatus, CommonConstant.USER_QUIT); @@ -679,45 +684,45 @@ public class SysUserServiceImpl extends ServiceImpl impl //update-end---author:wangshuai ---date:20221116 for:回收站查询未离职的-------------- } - @Override - public List queryLogicDeleted(LambdaQueryWrapper wrapper) { - if (wrapper == null) { - wrapper = new LambdaQueryWrapper<>(); - } - wrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_1); - return userMapper.selectLogicDeleted(wrapper); - } + @Override + public List queryLogicDeleted(LambdaQueryWrapper wrapper) { + if (wrapper == null) { + wrapper = new LambdaQueryWrapper<>(); + } + wrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_1); + return userMapper.selectLogicDeleted(wrapper); + } - @Override - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) - public boolean revertLogicDeleted(List userIds, SysUser updateEntity) { - return userMapper.revertLogicDeleted(userIds, updateEntity) > 0; - } + @Override + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) + public boolean revertLogicDeleted(List userIds, SysUser updateEntity) { + return userMapper.revertLogicDeleted(userIds, updateEntity) > 0; + } - @Override - @Transactional(rollbackFor = Exception.class) - public boolean removeLogicDeleted(List userIds) { - // 1. 删除用户 - int line = userMapper.deleteLogicDeleted(userIds); - // 2. 删除用户部门关系 - line += sysUserDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getUserId, userIds)); - //3. 删除用户角色关系 - line += sysUserRoleMapper.delete(new LambdaQueryWrapper().in(SysUserRole::getUserId, userIds)); - //4.同步删除第三方App的用户 - try { - dingtalkService.removeThirdAppUser(userIds); - wechatEnterpriseService.removeThirdAppUser(userIds); - } catch (Exception e) { - log.error("同步删除第三方App的用户失败:", e); - } - //5. 删除第三方用户表(因为第4步需要用到第三方用户表,所以在他之后删) - line += sysThirdAccountMapper.delete(new LambdaQueryWrapper().in(SysThirdAccount::getSysUserId, userIds)); + @Override + @Transactional(rollbackFor = Exception.class) + public boolean removeLogicDeleted(List userIds) { + // 1. 删除用户 + int line = userMapper.deleteLogicDeleted(userIds); + // 2. 删除用户部门关系 + line += sysUserDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getUserId, userIds)); + //3. 删除用户角色关系 + line += sysUserRoleMapper.delete(new LambdaQueryWrapper().in(SysUserRole::getUserId, userIds)); + //4.同步删除第三方App的用户 + try { + dingtalkService.removeThirdAppUser(userIds); + wechatEnterpriseService.removeThirdAppUser(userIds); + } catch (Exception e) { + log.error("同步删除第三方App的用户失败:", e); + } + //5. 删除第三方用户表(因为第4步需要用到第三方用户表,所以在他之后删) + line += sysThirdAccountMapper.delete(new LambdaQueryWrapper().in(SysThirdAccount::getSysUserId, userIds)); - //6. 删除租户用户中间表的数据 - line += userTenantMapper.delete(new LambdaQueryWrapper().in(SysUserTenant::getUserId,userIds)); - - return line != 0; - } + //6. 删除租户用户中间表的数据 + line += userTenantMapper.delete(new LambdaQueryWrapper().in(SysUserTenant::getUserId, userIds)); + + return line != 0; + } @Override @Transactional(rollbackFor = Exception.class) @@ -727,164 +732,164 @@ public class SysUserServiceImpl extends ServiceImpl impl return true; } - @Override - public void saveThirdUser(SysUser sysUser) { - //保存用户 - String userid = UUIDGenerator.generate(); - sysUser.setId(userid); - baseMapper.insert(sysUser); - //获取第三方角色 - SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper().eq(SysRole::getRoleCode, "third_role")); - //保存用户角色 - SysUserRole userRole = new SysUserRole(); - userRole.setRoleId(sysRole.getId()); - userRole.setUserId(userid); - sysUserRoleMapper.insert(userRole); - } - - @Override - public List queryByDepIds(List departIds, String username) { - return userMapper.queryByDepIds(departIds,username); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void saveUser(SysUser user, String selectedRoles, String selectedDeparts, String relTenantIds) { - //step.1 保存用户 - this.save(user); - //获取用户保存前台传过来的租户id并添加到租户 - this.saveUserTenant(user.getId(),relTenantIds); - //step.2 保存角色 - if(oConvertUtils.isNotEmpty(selectedRoles)) { - String[] arr = selectedRoles.split(","); - for (String roleId : arr) { - SysUserRole userRole = new SysUserRole(user.getId(), roleId); - sysUserRoleMapper.insert(userRole); - } - } - - //step.3 保存所属部门 - if(oConvertUtils.isNotEmpty(selectedDeparts)) { - String[] arr = selectedDeparts.split(","); - for (String deaprtId : arr) { - SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId); - sysUserDepartMapper.insert(userDeaprt); - } - } - - //step.4 保存职位 - this.saveUserPosition(user.getId(),user.getPost()); - } - - @Override - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) - public void editUser(SysUser user, String roles, String departs, String relTenantIds) { - //获取用户编辑前台传过来的租户id - this.editUserTenants(user.getId(),relTenantIds); - //step.1 修改用户基础信息 - this.updateById(user); - //step.2 修改角色 - //处理用户角色 先删后加 - sysUserRoleMapper.delete(new QueryWrapper().lambda().eq(SysUserRole::getUserId, user.getId())); - if(oConvertUtils.isNotEmpty(roles)) { - String[] arr = roles.split(","); - for (String roleId : arr) { - SysUserRole userRole = new SysUserRole(user.getId(), roleId); - sysUserRoleMapper.insert(userRole); - } - } - - //step.3 修改部门 - String[] arr = {}; - if(oConvertUtils.isNotEmpty(departs)){ - arr = departs.split(","); - } - //查询已关联部门 - List userDepartList = sysUserDepartMapper.selectList(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); - if(userDepartList != null && userDepartList.size()>0){ - for(SysUserDepart depart : userDepartList ){ - //修改已关联部门删除部门用户角色关系 - if(!Arrays.asList(arr).contains(depart.getDepId())){ - List sysDepartRoleList = sysDepartRoleMapper.selectList( - new QueryWrapper().lambda().eq(SysDepartRole::getDepartId,depart.getDepId())); - List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); - if(roleIds != null && roleIds.size()>0){ - departRoleUserMapper.delete(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) - .in(SysDepartRoleUser::getDroleId,roleIds)); - } - } - } - } - //先删后加 - sysUserDepartMapper.delete(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); - if(oConvertUtils.isNotEmpty(departs)) { - for (String departId : arr) { - SysUserDepart userDepart = new SysUserDepart(user.getId(), departId); - sysUserDepartMapper.insert(userDepart); - } - } - //step.4 修改手机号和邮箱 - // 更新手机号、邮箱空字符串为 null - userMapper.updateNullByEmptyString("email"); - userMapper.updateNullByEmptyString("phone"); - - //step.5 修改职位 - this.editUserPosition(user.getId(),user.getPost()); - } - - @Override - public List userIdToUsername(Collection userIdList) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysUser::getId, userIdList); - List userList = super.list(queryWrapper); - return userList.stream().map(SysUser::getUsername).collect(Collectors.toList()); - } - - @Override - @Cacheable(cacheNames= CacheConstant.SYS_USERS_CACHE, key="#username") - @SensitiveEncode - public LoginUser getEncodeUserInfo(String username){ - if(oConvertUtils.isEmpty(username)) { - return null; - } - LoginUser loginUser = new LoginUser(); - SysUser sysUser = userMapper.getUserByName(username); - //查询用户的租户ids - this.setUserTenantIds(sysUser); - //设置职位id - this.userPositionId(sysUser); - if(sysUser==null) { - return null; - } - BeanUtils.copyProperties(sysUser, loginUser); - // 查询当前登录用户的部门id - loginUser.setOrgId(this.getDepartIdByOrCode(sysUser.getOrgCode())); - // 查询当前登录用户的角色code(多个逗号分割) - loginUser.setRoleCode(this.getJoinRoleCodeByUserId(sysUser.getId())); - return loginUser; - } + @Override + public void saveThirdUser(SysUser sysUser) { + //保存用户 + String userid = UUIDGenerator.generate(); + sysUser.setId(userid); + baseMapper.insert(sysUser); + //获取第三方角色 + SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper().eq(SysRole::getRoleCode, "third_role")); + //保存用户角色 + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(sysRole.getId()); + userRole.setUserId(userid); + sysUserRoleMapper.insert(userRole); + } @Override - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) + public List queryByDepIds(List departIds, String username) { + return userMapper.queryByDepIds(departIds, username); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveUser(SysUser user, String selectedRoles, String selectedDeparts, String relTenantIds) { + //step.1 保存用户 + this.save(user); + //获取用户保存前台传过来的租户id并添加到租户 + this.saveUserTenant(user.getId(), relTenantIds); + //step.2 保存角色 + if (oConvertUtils.isNotEmpty(selectedRoles)) { + String[] arr = selectedRoles.split(","); + for (String roleId : arr) { + SysUserRole userRole = new SysUserRole(user.getId(), roleId); + sysUserRoleMapper.insert(userRole); + } + } + + //step.3 保存所属部门 + if (oConvertUtils.isNotEmpty(selectedDeparts)) { + String[] arr = selectedDeparts.split(","); + for (String deaprtId : arr) { + SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId); + sysUserDepartMapper.insert(userDeaprt); + } + } + + //step.4 保存职位 + this.saveUserPosition(user.getId(), user.getPost()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) + public void editUser(SysUser user, String roles, String departs, String relTenantIds) { + //获取用户编辑前台传过来的租户id + this.editUserTenants(user.getId(), relTenantIds); + //step.1 修改用户基础信息 + this.updateById(user); + //step.2 修改角色 + //处理用户角色 先删后加 + sysUserRoleMapper.delete(new QueryWrapper().lambda().eq(SysUserRole::getUserId, user.getId())); + if (oConvertUtils.isNotEmpty(roles)) { + String[] arr = roles.split(","); + for (String roleId : arr) { + SysUserRole userRole = new SysUserRole(user.getId(), roleId); + sysUserRoleMapper.insert(userRole); + } + } + + //step.3 修改部门 + String[] arr = {}; + if (oConvertUtils.isNotEmpty(departs)) { + arr = departs.split(","); + } + //查询已关联部门 + List userDepartList = sysUserDepartMapper.selectList(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); + if (userDepartList != null && userDepartList.size() > 0) { + for (SysUserDepart depart : userDepartList) { + //修改已关联部门删除部门用户角色关系 + if (!Arrays.asList(arr).contains(depart.getDepId())) { + List sysDepartRoleList = sysDepartRoleMapper.selectList( + new QueryWrapper().lambda().eq(SysDepartRole::getDepartId, depart.getDepId())); + List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + if (roleIds != null && roleIds.size() > 0) { + departRoleUserMapper.delete(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) + .in(SysDepartRoleUser::getDroleId, roleIds)); + } + } + } + } + //先删后加 + sysUserDepartMapper.delete(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); + if (oConvertUtils.isNotEmpty(departs)) { + for (String departId : arr) { + SysUserDepart userDepart = new SysUserDepart(user.getId(), departId); + sysUserDepartMapper.insert(userDepart); + } + } + //step.4 修改手机号和邮箱 + // 更新手机号、邮箱空字符串为 null + userMapper.updateNullByEmptyString("email"); + userMapper.updateNullByEmptyString("phone"); + + //step.5 修改职位 + this.editUserPosition(user.getId(), user.getPost()); + } + + @Override + public List userIdToUsername(Collection userIdList) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysUser::getId, userIdList); + List userList = super.list(queryWrapper); + return userList.stream().map(SysUser::getUsername).collect(Collectors.toList()); + } + + @Override + @Cacheable(cacheNames = CacheConstant.SYS_USERS_CACHE, key = "#username") + @SensitiveEncode + public LoginUser getEncodeUserInfo(String username) { + if (oConvertUtils.isEmpty(username)) { + return null; + } + LoginUser loginUser = new LoginUser(); + SysUser sysUser = userMapper.getUserByName(username); + //查询用户的租户ids + this.setUserTenantIds(sysUser); + //设置职位id + this.userPositionId(sysUser); + if (sysUser == null) { + return null; + } + BeanUtils.copyProperties(sysUser, loginUser); + // 查询当前登录用户的部门id + loginUser.setOrgId(this.getDepartIdByOrCode(sysUser.getOrgCode())); + // 查询当前登录用户的角色code(多个逗号分割) + loginUser.setRoleCode(this.getJoinRoleCodeByUserId(sysUser.getId())); + return loginUser; + } + + @Override + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) @Transactional(rollbackFor = Exception.class) public void userQuit(String username) { SysUser sysUser = userMapper.getUserByName(username); - if(null == sysUser){ + if (null == sysUser) { throw new JeecgBootException("离职失败,该用户已不存在"); } - //update-begin---author:wangshuai ---date:20230111 for:[QQYUN-3951]租户用户离职重构------------ - int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - //更新用户租户表的状态为离职状态 - if(tenantId==0){ - throw new JeecgBootException("离职失败,租户不存在"); - } - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysUserTenant::getUserId,sysUser.getId()); - query.eq(SysUserTenant::getTenantId,tenantId); - SysUserTenant userTenant = new SysUserTenant(); - userTenant.setStatus(CommonConstant.USER_TENANT_QUIT); - userTenantMapper.update(userTenant,query); + //update-begin---author:wangshuai ---date:20230111 for:[QQYUN-3951]租户用户离职重构------------ + int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + //更新用户租户表的状态为离职状态 + if (tenantId == 0) { + throw new JeecgBootException("离职失败,租户不存在"); + } + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysUserTenant::getUserId, sysUser.getId()); + query.eq(SysUserTenant::getTenantId, tenantId); + SysUserTenant userTenant = new SysUserTenant(); + userTenant.setStatus(CommonConstant.USER_TENANT_QUIT); + userTenantMapper.update(userTenant, query); } @Override @@ -894,24 +899,25 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public void updateStatusAndFlag(List userIds, SysUser sysUser) { - userMapper.updateStatusAndFlag(userIds,sysUser); + userMapper.updateStatusAndFlag(userIds, sysUser); } - /** - * 设置登录租户 - * @param sysUser - * @return - */ - @Override - public Result setLoginTenant(SysUser sysUser, JSONObject obj, String username, Result result){ - // update-begin--Author:sunjianlei Date:20210802 for:获取用户租户信息 - //用户有哪些租户 + /** + * 设置登录租户 + * + * @param sysUser + * @return + */ + @Override + public Result setLoginTenant(SysUser sysUser, JSONObject obj, String username, Result result) { + // update-begin--Author:sunjianlei Date:20210802 for:获取用户租户信息 + //用户有哪些租户 // List tenantList = null; //update-begin---author:wangshuai ---date:20221223 for:[QQYUN-3371]租户逻辑改造,改成关系表------------ - //update-begin---author:wangshuai ---date:20230427 for:【QQYUN-5270】名下租户全部退出后,再次登录出现租户冻结------------ - List tenantList = relationMapper.getTenantNoCancel(sysUser.getId()); - obj.put("tenantList", tenantList); - //update-end---author:wangshuai ---date:20230427 for:【QQYUN-5270】名下租户全部退出后,再次登录出现租户冻结------------ + //update-begin---author:wangshuai ---date:20230427 for:【QQYUN-5270】名下租户全部退出后,再次登录出现租户冻结------------ + List tenantList = relationMapper.getTenantNoCancel(sysUser.getId()); + obj.put("tenantList", tenantList); + //update-end---author:wangshuai ---date:20230427 for:【QQYUN-5270】名下租户全部退出后,再次登录出现租户冻结------------ // if (null!=tenantIdList && tenantIdList.size()>0) { // //update-end---author:wangshuai ---date:20221223 for:[QQYUN-3371]租户逻辑改造,改成关系表-------------- // //------------------------------------------------------------------------------------- @@ -929,52 +935,54 @@ public class SysUserServiceImpl extends ServiceImpl impl // } // } //update-end---author:wangshuai ---date:20221223 for:[QQYUN-3371]租户逻辑改造,改成关系表-------------- - // update-end--Author:sunjianlei Date:20210802 for:获取用户租户信息 + // update-end--Author:sunjianlei Date:20210802 for:获取用户租户信息 - //登录会话租户ID,有效性重置 - if (tenantList != null && tenantList.size() > 0) { - if (tenantList.size() == 1) { - sysUser.setLoginTenantId(tenantList.get(0).getId()); - } else { - List listAfterFilter = tenantList.stream().filter(s -> s.getId().equals(sysUser.getLoginTenantId())).collect(Collectors.toList()); - if (listAfterFilter == null || listAfterFilter.size() == 0) { - //如果上次登录租户ID,在用户拥有的租户集合里面没有了,则随机取用户拥有的第一个租户ID - sysUser.setLoginTenantId(tenantList.get(0).getId()); - } - } - } else { - //无租户的时候,设置为 0 - sysUser.setLoginTenantId(0); - } - //设置用户登录缓存租户 - this.updateUserDepart(username, null,sysUser.getLoginTenantId()); - log.info(" 登录接口用户的租户ID = {}", sysUser.getLoginTenantId()); - if(sysUser.getLoginTenantId()!=null){ - //登录的时候需要手工设置下会话中的租户ID,不然登录接口无法通过租户隔离查询到数据 - TenantContext.setTenant(sysUser.getLoginTenantId()+""); - } - return null; - } + //登录会话租户ID,有效性重置 + if (tenantList != null && tenantList.size() > 0) { + if (tenantList.size() == 1) { + sysUser.setLoginTenantId(tenantList.get(0).getId()); + } else { + List listAfterFilter = tenantList.stream().filter(s -> s.getId().equals(sysUser.getLoginTenantId())).collect(Collectors.toList()); + if (listAfterFilter == null || listAfterFilter.size() == 0) { + //如果上次登录租户ID,在用户拥有的租户集合里面没有了,则随机取用户拥有的第一个租户ID + sysUser.setLoginTenantId(tenantList.get(0).getId()); + } + } + } else { + //无租户的时候,设置为 0 + sysUser.setLoginTenantId(0); + } + //设置用户登录缓存租户 + this.updateUserDepart(username, null, sysUser.getLoginTenantId()); + log.info(" 登录接口用户的租户ID = {}", sysUser.getLoginTenantId()); + if (sysUser.getLoginTenantId() != null) { + //登录的时候需要手工设置下会话中的租户ID,不然登录接口无法通过租户隔离查询到数据 + TenantContext.setTenant(sysUser.getLoginTenantId() + ""); + } + return null; + } /** * 获取租户id + * * @param sysUser */ private void setUserTenantIds(SysUser sysUser) { - if(ObjectUtils.isNotEmpty(sysUser)) { - List list = relationMapper.getTenantIdsNoStatus(sysUser.getId()); - if(null!=list && list.size()>0){ - sysUser.setRelTenantIds(StringUtils.join(list.toArray(), ",")); - }else{ - sysUser.setRelTenantIds(""); - } - } + if (ObjectUtils.isNotEmpty(sysUser)) { + List list = relationMapper.getTenantIdsNoStatus(sysUser.getId()); + if (null != list && list.size() > 0) { + sysUser.setRelTenantIds(StringUtils.join(list.toArray(), ",")); + } else { + sysUser.setRelTenantIds(""); + } + } } /** * 保存租户 + * * @param userId * @param relTenantIds */ @@ -986,40 +994,41 @@ public class SysUserServiceImpl extends ServiceImpl impl relation.setUserId(userId); relation.setTenantId(Integer.valueOf(tenantId)); relation.setStatus(CommonConstant.STATUS_1); - - LambdaQueryWrapper sysUserTenantQueryWrapper = new LambdaQueryWrapper() - .eq(SysUserTenant::getUserId, userId) - .eq(SysUserTenant::getTenantId,Integer.valueOf(tenantId)); - SysUserTenant tenantPresent = relationMapper.selectOne(sysUserTenantQueryWrapper); - if (tenantPresent != null) { - tenantPresent.setStatus(CommonConstant.STATUS_1); - relationMapper.updateById(tenantPresent); - }else{ - relationMapper.insert(relation); - } + + LambdaQueryWrapper sysUserTenantQueryWrapper = new LambdaQueryWrapper() + .eq(SysUserTenant::getUserId, userId) + .eq(SysUserTenant::getTenantId, Integer.valueOf(tenantId)); + SysUserTenant tenantPresent = relationMapper.selectOne(sysUserTenantQueryWrapper); + if (tenantPresent != null) { + tenantPresent.setStatus(CommonConstant.STATUS_1); + relationMapper.updateById(tenantPresent); + } else { + relationMapper.insert(relation); + } } - }else{ - //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - //update-begin---author:wangshuai ---date:20230220 for:判断当前用户是否在当前租户里面,如果不存在在新增------------ - String tenantId = TenantContext.getTenant(); - if(oConvertUtils.isNotEmpty(tenantId)){ - Integer count = relationMapper.userTenantIzExist(userId, Integer.parseInt(tenantId)); - if(count == 0){ - SysUserTenant relation = new SysUserTenant(); - relation.setUserId(userId); - relation.setTenantId(Integer.parseInt(tenantId)); - relation.setStatus(CommonConstant.STATUS_1); - relationMapper.insert(relation); - } - } - //update-end---author:wangshuai ---date:20230220 for:判断当前用户是否在当前租户里面,如果不存在在新增------------ - } - } + } else { + //是否开启系统管理模块的多租户数据隔离【SAAS多租户模式】 + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + //update-begin---author:wangshuai ---date:20230220 for:判断当前用户是否在当前租户里面,如果不存在在新增------------ + String tenantId = TenantContext.getTenant(); + if (oConvertUtils.isNotEmpty(tenantId)) { + Integer count = relationMapper.userTenantIzExist(userId, Integer.parseInt(tenantId)); + if (count == 0) { + SysUserTenant relation = new SysUserTenant(); + relation.setUserId(userId); + relation.setTenantId(Integer.parseInt(tenantId)); + relation.setStatus(CommonConstant.STATUS_1); + relationMapper.insert(relation); + } + } + //update-end---author:wangshuai ---date:20230220 for:判断当前用户是否在当前租户里面,如果不存在在新增------------ + } + } } /** * 编辑租户 + * * @param userId * @param relTenantIds */ @@ -1027,7 +1036,7 @@ public class SysUserServiceImpl extends ServiceImpl impl LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysUserTenant::getUserId, userId); //数据库的租户id - List oldTenantIds = relationMapper.getTenantIdsByUserId(userId); + List oldTenantIds = relationMapper.getTenantIdsByUserId(userId); //如果传过来的租户id为空,那么就删除租户 if (oConvertUtils.isEmpty(relTenantIds) && CollectionUtils.isNotEmpty(oldTenantIds)) { this.deleteTenantByUserId(userId, null); @@ -1035,992 +1044,999 @@ public class SysUserServiceImpl extends ServiceImpl impl //如果传过来的租户id不为空但是数据库的租户id为空,那么就新增 this.saveUserTenant(userId, relTenantIds); } else { - //都不为空,需要比较,进行添加或删除 - if(oConvertUtils.isNotEmpty(relTenantIds) && CollectionUtils.isNotEmpty(oldTenantIds)){ - //找到新的租户id与原来的租户id不同之处,进行删除 - String[] relTenantIdArray = relTenantIds.split(SymbolConstant.COMMA); - List relTenantIdList = Arrays.asList(relTenantIdArray); - - List deleteTenantIdList = oldTenantIds.stream().filter(item -> !relTenantIdList.contains(item.toString())).collect(Collectors.toList()); - for (Integer tenantId : deleteTenantIdList) { - this.deleteTenantByUserId(userId, tenantId); - } - //找到原来租户的用户id与新的租户id不同之处,进行新增 - String tenantIds = relTenantIdList.stream().filter(item -> !oldTenantIds.contains(Integer.valueOf(item))).collect(Collectors.joining(",")); - this.saveUserTenant(userId, tenantIds); - } + //都不为空,需要比较,进行添加或删除 + if (oConvertUtils.isNotEmpty(relTenantIds) && CollectionUtils.isNotEmpty(oldTenantIds)) { + //找到新的租户id与原来的租户id不同之处,进行删除 + String[] relTenantIdArray = relTenantIds.split(SymbolConstant.COMMA); + List relTenantIdList = Arrays.asList(relTenantIdArray); + + List deleteTenantIdList = oldTenantIds.stream().filter(item -> !relTenantIdList.contains(item.toString())).collect(Collectors.toList()); + for (Integer tenantId : deleteTenantIdList) { + this.deleteTenantByUserId(userId, tenantId); + } + //找到原来租户的用户id与新的租户id不同之处,进行新增 + String tenantIds = relTenantIdList.stream().filter(item -> !oldTenantIds.contains(Integer.valueOf(item))).collect(Collectors.joining(",")); + this.saveUserTenant(userId, tenantIds); + } } } /** * 删除租户通过用户id + * * @param tenantId * @param userId */ - private void deleteTenantByUserId(String userId,Integer tenantId){ + private void deleteTenantByUserId(String userId, Integer tenantId) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysUserTenant::getUserId, userId); - if(oConvertUtils.isNotEmpty(tenantId)){ + if (oConvertUtils.isNotEmpty(tenantId)) { query.eq(SysUserTenant::getTenantId, tenantId); } relationMapper.delete(query); } + @Override + public void batchEditUsers(JSONObject json) { + String userIds = json.getString("userIds"); + List idList = JSONArray.parseArray(userIds, String.class); + //部门 + String selecteddeparts = json.getString("selecteddeparts"); + //职位 + String post = json.getString("post"); + //工作地点? 没有这个字段 + String workAddress = json.getString("workAddress"); + //批量修改用户职位 + if (oConvertUtils.isNotEmpty(post)) { + //update-begin---author:wangshuai ---date:20230220 for:[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------ + //修改职位用户关系表 + for (String userId : idList) { + this.editUserPosition(userId, post); + } + //update-end---author:wangshuai ---date:20230220 for:[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------ + } + if (oConvertUtils.isNotEmpty(selecteddeparts)) { + //查询当前租户的部门列表 + Integer currentTenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); + LambdaQueryWrapper departQuery = new LambdaQueryWrapper() + .eq(SysDepart::getTenantId, currentTenantId); + List departList = sysDepartMapper.selectList(departQuery); + if (departList == null || departList.size() == 0) { + log.error("batchEditUsers 根据租户ID没有找到部门>" + currentTenantId); + return; + } + List departIdList = new ArrayList(); + for (SysDepart depart : departList) { + if (depart != null) { + String id = depart.getId(); + if (oConvertUtils.isNotEmpty(id)) { + departIdList.add(id); + } + } + } + //删除人员的部门关联 + LambdaQueryWrapper query = new LambdaQueryWrapper() + .in(SysUserDepart::getUserId, idList) + .in(SysUserDepart::getDepId, departIdList); + sysUserDepartMapper.delete(query); - @Override - public void batchEditUsers(JSONObject json) { - String userIds = json.getString("userIds"); - List idList = JSONArray.parseArray(userIds, String.class); - //部门 - String selecteddeparts = json.getString("selecteddeparts"); - //职位 - String post = json.getString("post"); - //工作地点? 没有这个字段 - String workAddress = json.getString("workAddress"); - //批量修改用户职位 - if(oConvertUtils.isNotEmpty(post)) { - //update-begin---author:wangshuai ---date:20230220 for:[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------ - //修改职位用户关系表 - for (String userId:idList) { - this.editUserPosition(userId,post); - } - //update-end---author:wangshuai ---date:20230220 for:[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------ - } - if(oConvertUtils.isNotEmpty(selecteddeparts)) { - //查询当前租户的部门列表 - Integer currentTenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - LambdaQueryWrapper departQuery = new LambdaQueryWrapper() - .eq(SysDepart::getTenantId, currentTenantId); - List departList = sysDepartMapper.selectList(departQuery); - if(departList==null || departList.size()==0){ - log.error("batchEditUsers 根据租户ID没有找到部门>"+currentTenantId); - return; - } - List departIdList = new ArrayList(); - for(SysDepart depart: departList){ - if(depart!=null){ - String id = depart.getId(); - if(oConvertUtils.isNotEmpty(id)){ - departIdList.add(id); - } - } - } - //删除人员的部门关联 - LambdaQueryWrapper query = new LambdaQueryWrapper() - .in(SysUserDepart::getUserId, idList) - .in(SysUserDepart::getDepId, departIdList); - sysUserDepartMapper.delete(query); - - String[] arr = selecteddeparts.split(","); - - //再新增 - for (String deaprtId : arr) { - for(String userId: idList){ - SysUserDepart userDepart = new SysUserDepart(userId, deaprtId); - sysUserDepartMapper.insert(userDepart); - } - } - } - } + String[] arr = selecteddeparts.split(","); - @Override - public DepartAndUserInfo searchByKeyword(String keyword) { - DepartAndUserInfo departAndUserInfo = new DepartAndUserInfo(); - if(oConvertUtils.isNotEmpty(keyword)){ - LambdaQueryWrapper query1 = new LambdaQueryWrapper() - .like(SysUser::getRealname, keyword); - String str = oConvertUtils.getString(TenantContext.getTenant(), "0"); - Integer tenantId = Integer.valueOf(str); - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - List userIds = userTenantMapper.getUserIdsByTenantId(tenantId); - if (oConvertUtils.listIsNotEmpty(userIds)) { - query1.in(SysUser::getId, userIds); - }else{ - query1.eq(SysUser::getId, ""); - } - } - List list1 = this.baseMapper.selectList(query1); - if(list1!=null && list1.size()>0){ - List userList = list1.stream().map(v -> new UserAvatar(v)).collect(Collectors.toList()); - departAndUserInfo.setUserList(userList); - } + //再新增 + for (String deaprtId : arr) { + for (String userId : idList) { + SysUserDepart userDepart = new SysUserDepart(userId, deaprtId); + sysUserDepartMapper.insert(userDepart); + } + } + } + } - LambdaQueryWrapper query2 = new LambdaQueryWrapper() - .like(SysDepart::getDepartName, keyword); - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ - query2.eq(SysDepart::getTenantId, tenantId); - } - List list2 = sysDepartMapper.selectList(query2); - if(list2!=null && list2.size()>0){ - List departList = new ArrayList<>(); - for(SysDepart depart: list2){ - List orgName = new ArrayList<>(); - List orgId = new ArrayList<>(); - getParentDepart(depart, orgName, orgId); - DepartInfo departInfo = new DepartInfo(); - departInfo.setId(depart.getId()); - departInfo.setOrgId(orgId); - departInfo.setOrgName(orgName); - departList.add(departInfo); - } - departAndUserInfo.setDepartList(departList); - } - } - return departAndUserInfo; - } + @Override + public DepartAndUserInfo searchByKeyword(String keyword) { + DepartAndUserInfo departAndUserInfo = new DepartAndUserInfo(); + if (oConvertUtils.isNotEmpty(keyword)) { + LambdaQueryWrapper query1 = new LambdaQueryWrapper() + .like(SysUser::getRealname, keyword); + String str = oConvertUtils.getString(TenantContext.getTenant(), "0"); + Integer tenantId = Integer.valueOf(str); + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + List userIds = userTenantMapper.getUserIdsByTenantId(tenantId); + if (oConvertUtils.listIsNotEmpty(userIds)) { + query1.in(SysUser::getId, userIds); + } else { + query1.eq(SysUser::getId, ""); + } + } + List list1 = this.baseMapper.selectList(query1); + if (list1 != null && list1.size() > 0) { + List userList = list1.stream().map(v -> new UserAvatar(v)).collect(Collectors.toList()); + departAndUserInfo.setUserList(userList); + } - @Override - public UpdateDepartInfo getUpdateDepartInfo(String departId) { - SysDepart depart = sysDepartMapper.selectById(departId); - if(depart!=null){ - UpdateDepartInfo info = new UpdateDepartInfo(depart); - List subList = sysDepartMapper.queryDeptByPid(departId); - if(subList!=null && subList.size()>0){ - info.setHasSub(true); - } - //获取部门负责人信息 - LambdaQueryWrapper query = new LambdaQueryWrapper() - .eq(SysUser::getUserIdentity, 2) - .like(SysUser::getDepartIds, depart.getId()); - List userList = this.baseMapper.selectList(query); - if(userList!=null && userList.size()>0){ - List idList = userList.stream().map(i -> i.getId()).collect(Collectors.toList()); - info.setChargePersonList(idList); - } - return info; - } - return null; - } + LambdaQueryWrapper query2 = new LambdaQueryWrapper() + .like(SysDepart::getDepartName, keyword); + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + query2.eq(SysDepart::getTenantId, tenantId); + } + List list2 = sysDepartMapper.selectList(query2); + if (list2 != null && list2.size() > 0) { + List departList = new ArrayList<>(); + for (SysDepart depart : list2) { + List orgName = new ArrayList<>(); + List orgId = new ArrayList<>(); + getParentDepart(depart, orgName, orgId); + DepartInfo departInfo = new DepartInfo(); + departInfo.setId(depart.getId()); + departInfo.setOrgId(orgId); + departInfo.setOrgName(orgName); + departList.add(departInfo); + } + departAndUserInfo.setDepartList(departList); + } + } + return departAndUserInfo; + } - @Override - public void doUpdateDepartInfo(UpdateDepartInfo info) { - String departId = info.getDepartId(); - SysDepart depart = sysDepartMapper.selectById(departId); - if(depart!=null){ - //修改部门信息-上级和部门名称 - if(!depart.getParentId().equals(info.getParentId())){ - String pid = info.getParentId(); - SysDepart parentDepart = sysDepartMapper.selectById(pid); - if(parentDepart!=null){ - String orgCode = getNextOrgCode(pid); - depart.setOrgCode(orgCode); - depart.setParentId(pid); - } - } - depart.setDepartName(info.getDepartName()); - sysDepartMapper.updateById(depart); - //先查询这个部门的负责人 - List departChargeUsers = queryDepartChargePersons(departId); - List departChargeUserIdList = departChargeUsers.stream().map(i -> i.getId()).collect(Collectors.toList()); - //修改部门负责人 - List userIdList = info.getChargePersonList(); - if(userIdList!=null && userIdList.size()>0){ - for(String userId: userIdList){ - SysUser user = this.baseMapper.selectById(userId); - if(user!=null){ - departChargeUserIdList.remove(user.getId()); - user.setUserIdentity(2); - String departIds = user.getDepartIds(); - if(oConvertUtils.isEmpty(departIds)){ - user.setDepartIds(departId); - }else{ - List list = new ArrayList(Arrays.asList(departIds.split(","))); - if(list.indexOf(departId)>=0){ - continue; - }else{ - list.add(departId); - String newDepartIds = String.join(",", list); - user.setDepartIds(newDepartIds); - } - } - this.baseMapper.updateById(user); - } - } - //update-begin---author:wangshuai ---date:20230303 for:部门负责人不能被删除------------ - this.removeDepartmentManager(departChargeUserIdList,departChargeUsers,departId); - }else{ - if(CollectionUtil.isNotEmpty(departChargeUsers)){ - //前端传过来用户列表id为空,说明数据库的负责部门人员均需要删除 - this.removeDepartmentManager(departChargeUserIdList,departChargeUsers,departId); - } - //update-end---author:wangshuai ---date:20230303 for:部门负责人不能被删除------------ - - } - } - } + @Override + public UpdateDepartInfo getUpdateDepartInfo(String departId) { + SysDepart depart = sysDepartMapper.selectById(departId); + if (depart != null) { + UpdateDepartInfo info = new UpdateDepartInfo(depart); + List subList = sysDepartMapper.queryDeptByPid(departId); + if (subList != null && subList.size() > 0) { + info.setHasSub(true); + } + //获取部门负责人信息 + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysUser::getUserIdentity, 2) + .like(SysUser::getDepartIds, depart.getId()); + List userList = this.baseMapper.selectList(query); + if (userList != null && userList.size() > 0) { + List idList = userList.stream().map(i -> i.getId()).collect(Collectors.toList()); + info.setChargePersonList(idList); + } + return info; + } + return null; + } - private List queryDepartChargePersons(String departId){ - List result = new ArrayList<>(); - //update-begin---author:wangshuai ---date:20230303 for:部门负责人不能被删除------------ - LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); - userQuery.like(SysUser::getDepartIds,departId); - List userList = userMapper.selectList(userQuery); - if(userList!=null && userList.size()>0){ - for(SysUser user: userList){ - Integer identity = user.getUserIdentity(); - String deps = user.getDepartIds(); - if(identity!=null && identity==2){ - if(oConvertUtils.isNotEmpty(deps)){ - if(deps.indexOf(departId)>=0){ - result.add(user); - } - //update-end---author:wangshuai ---date:20230303 for:部门负责人不能被删除------------ - } - } - } - } - return result; - } - - /** - * 变更父级部门 修改编码 - * @param parentId - * @return - */ - private String getNextOrgCode(String parentId){ - JSONObject formData = new JSONObject(); - formData.put("parentId",parentId); - String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART, formData); - return codeArray[0]; - } + @Override + public void doUpdateDepartInfo(UpdateDepartInfo info) { + String departId = info.getDepartId(); + SysDepart depart = sysDepartMapper.selectById(departId); + if (depart != null) { + //修改部门信息-上级和部门名称 + if (!depart.getParentId().equals(info.getParentId())) { + String pid = info.getParentId(); + SysDepart parentDepart = sysDepartMapper.selectById(pid); + if (parentDepart != null) { + String orgCode = getNextOrgCode(pid); + depart.setOrgCode(orgCode); + depart.setParentId(pid); + } + } + depart.setDepartName(info.getDepartName()); + sysDepartMapper.updateById(depart); + //先查询这个部门的负责人 + List departChargeUsers = queryDepartChargePersons(departId); + List departChargeUserIdList = departChargeUsers.stream().map(i -> i.getId()).collect(Collectors.toList()); + //修改部门负责人 + List userIdList = info.getChargePersonList(); + if (userIdList != null && userIdList.size() > 0) { + for (String userId : userIdList) { + SysUser user = this.baseMapper.selectById(userId); + if (user != null) { + departChargeUserIdList.remove(user.getId()); + user.setUserIdentity(2); + String departIds = user.getDepartIds(); + if (oConvertUtils.isEmpty(departIds)) { + user.setDepartIds(departId); + } else { + List list = new ArrayList(Arrays.asList(departIds.split(","))); + if (list.indexOf(departId) >= 0) { + continue; + } else { + list.add(departId); + String newDepartIds = String.join(",", list); + user.setDepartIds(newDepartIds); + } + } + this.baseMapper.updateById(user); + } + } + //update-begin---author:wangshuai ---date:20230303 for:部门负责人不能被删除------------ + this.removeDepartmentManager(departChargeUserIdList, departChargeUsers, departId); + } else { + if (CollectionUtil.isNotEmpty(departChargeUsers)) { + //前端传过来用户列表id为空,说明数据库的负责部门人员均需要删除 + this.removeDepartmentManager(departChargeUserIdList, departChargeUsers, departId); + } + //update-end---author:wangshuai ---date:20230303 for:部门负责人不能被删除------------ - @Override - public void changeDepartChargePerson(JSONObject json) { - String userId = json.getString("userId"); - String departId = json.getString("departId"); - boolean status = json.getBoolean("status"); - SysUser user = this.getById(userId); - if(user!=null){ - String ids = user.getDepartIds(); - if(status==true){ - //设置部门负责人 - if(oConvertUtils.isEmpty(ids)){ - //设置为上级 - user.setUserIdentity(CommonConstant.USER_IDENTITY_2); - user.setDepartIds(departId); - }else{ - List list = new ArrayList(Arrays.asList(ids.split(","))); - if(list.indexOf(departId)>=0){ - //啥也不干 - }else{ - list.add(departId); - String newIds = String.join(",", list); - //设置为上级 - user.setUserIdentity(CommonConstant.USER_IDENTITY_2); - user.setDepartIds(newIds); - } - } - }else{ - // 取消负责人 - if(oConvertUtils.isNotEmpty(ids)){ - List list = new ArrayList(); - for(String temp: ids.split(",")){ - if(oConvertUtils.isEmpty(temp)){ - continue; - } - if(!temp.equals(departId)){ - list.add(temp); - } - } - String newIds = ""; - if(list.size()>0){ - newIds = String.join(",", list); - }else{ - //负责部门为空时,说明已经是普通用户 - user.setUserIdentity(CommonConstant.USER_IDENTITY_1); - } - user.setDepartIds(newIds); - } - } - this.updateById(user); - } - } + } + } + } - /** - * 找上级部门 - * @param depart - * @param orgName - * @param orgId - */ - private void getParentDepart(SysDepart depart, List orgName, List orgId){ - String pid = depart.getParentId(); - orgName.add(0, depart.getDepartName()); - orgId.add(0, depart.getId()); - if(oConvertUtils.isNotEmpty(pid)){ - SysDepart temp = sysDepartMapper.selectById(pid); - getParentDepart(temp, orgName, orgId); - } - } - - @Override - @Transactional(rollbackFor = Exception.class) - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) - public void editTenantUser(SysUser sysUser, String tenantId, String departs, String roles) { - SysUser user = new SysUser(); - user.setWorkNo(sysUser.getWorkNo()); - user.setId(sysUser.getId()); - this.updateById(user); - //update-begin---author:wangshuai ---date:20230424 for:【QQYUN-5251】人员与部门:部门删除不掉------------ - if(oConvertUtils.isEmpty(departs)){ - //直接删除用户下的的租户部门 - sysUserDepartMapper.deleteUserDepart(user.getId(),tenantId); - }else{ - //修改租户用户下的部门 - this.updateTenantDepart(user, tenantId, departs); - } - //update-end---author:wangshuai ---date:20230424 for:【QQYUN-5251】人员与部门:部门删除不掉------------ - //修改用户下的职位 - this.editUserPosition(sysUser.getId(),sysUser.getPost()); - } + private List queryDepartChargePersons(String departId) { + List result = new ArrayList<>(); + //update-begin---author:wangshuai ---date:20230303 for:部门负责人不能被删除------------ + LambdaQueryWrapper userQuery = new LambdaQueryWrapper<>(); + userQuery.like(SysUser::getDepartIds, departId); + List userList = userMapper.selectList(userQuery); + if (userList != null && userList.size() > 0) { + for (SysUser user : userList) { + Integer identity = user.getUserIdentity(); + String deps = user.getDepartIds(); + if (identity != null && identity == 2) { + if (oConvertUtils.isNotEmpty(deps)) { + if (deps.indexOf(departId) >= 0) { + result.add(user); + } + //update-end---author:wangshuai ---date:20230303 for:部门负责人不能被删除------------ + } + } + } + } + return result; + } - /** - * 修改账号状态 - * @param id 账号id - * @param status 账号状态 - */ - @Override - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) - public void updateStatus(String id, String status) { - userMapper.update(new SysUser().setStatus(Integer.parseInt(status)), - new UpdateWrapper().lambda().eq(SysUser::getId,id)); - } + /** + * 变更父级部门 修改编码 + * + * @param parentId + * @return + */ + private String getNextOrgCode(String parentId) { + JSONObject formData = new JSONObject(); + formData.put("parentId", parentId); + String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART, formData); + return codeArray[0]; + } - /** - * 修改租户下的部门 - * @param departs - */ - public void updateTenantDepart(SysUser user, String tenantId, String departs) { - List departList = new ArrayList<>(); - long startTime = System.currentTimeMillis(); - if (oConvertUtils.isNotEmpty(departs)) { - //获取当前租户下的部门id,根据前台 - departList = sysUserDepartMapper.getTenantDepart(Arrays.asList(departs.split(SymbolConstant.COMMA)), tenantId); - } - long endTime = System.currentTimeMillis(); - System.out.println("查询用户部门用时:" + (endTime - startTime) + "ms"); - //查询当前租户下部门和用户已关联的部门 - List userDepartList = sysUserDepartMapper.getTenantUserDepart(user.getId(), tenantId); - if (userDepartList != null && userDepartList.size() > 0 && departList.size() > 0) { - for (SysUserDepart depart : userDepartList) { - //修改已关联部门删除部门用户角色关系 - if (!departList.contains(depart.getDepId())) { - List sysDepartRoleList = sysDepartRoleMapper.selectList( - new QueryWrapper().lambda().eq(SysDepartRole::getDepartId, depart.getDepId())); - List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); - if (roleIds.size() > 0) { - departRoleUserMapper.delete(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) - .in(SysDepartRoleUser::getDroleId, roleIds)); - } - } - } - } - long endTime1 = System.currentTimeMillis(); - System.out.println("修改部门角色用时:" + (endTime1 - startTime) + "ms"); - - if (departList.size() > 0) { - //删除用户下的部门 - sysUserDepartMapper.deleteUserDepart(user.getId(), tenantId); - for (String departId : departList) { - //添加部门 - SysUserDepart userDepart = new SysUserDepart(user.getId(), departId); - sysUserDepartMapper.insert(userDepart); - } - } - long endTime2 = System.currentTimeMillis(); - System.out.println("修改用户部门用时:" + (endTime2 - startTime) + "ms"); - } + @Override + public void changeDepartChargePerson(JSONObject json) { + String userId = json.getString("userId"); + String departId = json.getString("departId"); + boolean status = json.getBoolean("status"); + SysUser user = this.getById(userId); + if (user != null) { + String ids = user.getDepartIds(); + if (status == true) { + //设置部门负责人 + if (oConvertUtils.isEmpty(ids)) { + //设置为上级 + user.setUserIdentity(CommonConstant.USER_IDENTITY_2); + user.setDepartIds(departId); + } else { + List list = new ArrayList(Arrays.asList(ids.split(","))); + if (list.indexOf(departId) >= 0) { + //啥也不干 + } else { + list.add(departId); + String newIds = String.join(",", list); + //设置为上级 + user.setUserIdentity(CommonConstant.USER_IDENTITY_2); + user.setDepartIds(newIds); + } + } + } else { + // 取消负责人 + if (oConvertUtils.isNotEmpty(ids)) { + List list = new ArrayList(); + for (String temp : ids.split(",")) { + if (oConvertUtils.isEmpty(temp)) { + continue; + } + if (!temp.equals(departId)) { + list.add(temp); + } + } + String newIds = ""; + if (list.size() > 0) { + newIds = String.join(",", list); + } else { + //负责部门为空时,说明已经是普通用户 + user.setUserIdentity(CommonConstant.USER_IDENTITY_1); + } + user.setDepartIds(newIds); + } + } + this.updateById(user); + } + } - /** - * 保存用户职位 - * - * @param userId - * @param positionIds - */ - private void saveUserPosition(String userId, String positionIds) { - if (oConvertUtils.isNotEmpty(positionIds)) { - String[] positionIdArray = positionIds.split(SymbolConstant.COMMA); - for (String postId : positionIdArray) { - SysUserPosition userPosition = new SysUserPosition(); - userPosition.setUserId(userId); - userPosition.setPositionId(postId); - sysUserPositionMapper.insert(userPosition); - } - } - } + /** + * 找上级部门 + * + * @param depart + * @param orgName + * @param orgId + */ + private void getParentDepart(SysDepart depart, List orgName, List orgId) { + String pid = depart.getParentId(); + orgName.add(0, depart.getDepartName()); + orgId.add(0, depart.getId()); + if (oConvertUtils.isNotEmpty(pid)) { + SysDepart temp = sysDepartMapper.selectById(pid); + getParentDepart(temp, orgName, orgId); + } + } - /** - * 编辑用户职位 - * - * @param userId - * @param positionIds - */ - private void editUserPosition(String userId, String positionIds) { - //先删除 - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysUserPosition::getUserId, userId); - sysUserPositionMapper.delete(query); - //后新增数据 - this.saveUserPosition(userId, positionIds); - } + @Override + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) + public void editTenantUser(SysUser sysUser, String tenantId, String departs, String roles) { + SysUser user = new SysUser(); + user.setWorkNo(sysUser.getWorkNo()); + user.setId(sysUser.getId()); + this.updateById(user); + //update-begin---author:wangshuai ---date:20230424 for:【QQYUN-5251】人员与部门:部门删除不掉------------ + if (oConvertUtils.isEmpty(departs)) { + //直接删除用户下的的租户部门 + sysUserDepartMapper.deleteUserDepart(user.getId(), tenantId); + } else { + //修改租户用户下的部门 + this.updateTenantDepart(user, tenantId, departs); + } + //update-end---author:wangshuai ---date:20230424 for:【QQYUN-5251】人员与部门:部门删除不掉------------ + //修改用户下的职位 + this.editUserPosition(sysUser.getId(), sysUser.getPost()); + } - /** - * 设置用户职位id(已逗号拼接起来) - * @param sysUser - */ - private void userPositionId(SysUser sysUser) { - if(null != sysUser){ - List positionList = sysUserPositionMapper.getPositionIdByUserId(sysUser.getId()); - sysUser.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA)); - } - } + /** + * 修改账号状态 + * + * @param id 账号id + * @param status 账号状态 + */ + @Override + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) + public void updateStatus(String id, String status) { + userMapper.update(new SysUser().setStatus(Integer.parseInt(status)), + new UpdateWrapper().lambda().eq(SysUser::getId, id)); + } - /** - * 查询用户当前登录部门的id - * - * @param orgCode - */ - private @Nullable String getDepartIdByOrCode(String orgCode) { - if (oConvertUtils.isEmpty(orgCode)) { - return null; - } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysDepart::getOrgCode, orgCode); - queryWrapper.select(SysDepart::getId); - SysDepart depart = sysDepartMapper.selectOne(queryWrapper); - if (depart == null || oConvertUtils.isEmpty(depart.getId())) { - return null; - } - return depart.getId(); - } + /** + * 修改租户下的部门 + * + * @param departs + */ + public void updateTenantDepart(SysUser user, String tenantId, String departs) { + List departList = new ArrayList<>(); + long startTime = System.currentTimeMillis(); + if (oConvertUtils.isNotEmpty(departs)) { + //获取当前租户下的部门id,根据前台 + departList = sysUserDepartMapper.getTenantDepart(Arrays.asList(departs.split(SymbolConstant.COMMA)), tenantId); + } + long endTime = System.currentTimeMillis(); + System.out.println("查询用户部门用时:" + (endTime - startTime) + "ms"); + //查询当前租户下部门和用户已关联的部门 + List userDepartList = sysUserDepartMapper.getTenantUserDepart(user.getId(), tenantId); + if (userDepartList != null && userDepartList.size() > 0 && departList.size() > 0) { + for (SysUserDepart depart : userDepartList) { + //修改已关联部门删除部门用户角色关系 + if (!departList.contains(depart.getDepId())) { + List sysDepartRoleList = sysDepartRoleMapper.selectList( + new QueryWrapper().lambda().eq(SysDepartRole::getDepartId, depart.getDepId())); + List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + if (roleIds.size() > 0) { + departRoleUserMapper.delete(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) + .in(SysDepartRoleUser::getDroleId, roleIds)); + } + } + } + } + long endTime1 = System.currentTimeMillis(); + System.out.println("修改部门角色用时:" + (endTime1 - startTime) + "ms"); - /** - * 查询用户的角色code(多个逗号分割) - * - * @param userId - */ - private @Nullable String getJoinRoleCodeByUserId(String userId) { - if (oConvertUtils.isEmpty(userId)) { - return null; - } - // 判断是否开启saas模式,根据租户id过滤 - Integer tenantId = null; - if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { - // 开启了但是没有租户ID,默认-1,使其查询不到任何数据 - tenantId = oConvertUtils.getInt(TenantContext.getTenant(), -1); - } - List roleList = sysRoleMapper.getRoleCodeListByUserId(userId, tenantId); - if (CollectionUtils.isEmpty(roleList)) { - return null; - } - return roleList.stream().map(SysRole::getRoleCode).collect(Collectors.joining(SymbolConstant.COMMA)); - } + if (departList.size() > 0) { + //删除用户下的部门 + sysUserDepartMapper.deleteUserDepart(user.getId(), tenantId); + for (String departId : departList) { + //添加部门 + SysUserDepart userDepart = new SysUserDepart(user.getId(), departId); + sysUserDepartMapper.insert(userDepart); + } + } + long endTime2 = System.currentTimeMillis(); + System.out.println("修改用户部门用时:" + (endTime2 - startTime) + "ms"); + } - /** - * 移除部门负责人 - * @param departChargeUserIdList - * @param departChargeUsers - * @param departId - */ - private void removeDepartmentManager(List departChargeUserIdList, List departChargeUsers, String departId){ - //移除部门负责人 - for(String chargeUserId: departChargeUserIdList){ - for(SysUser chargeUser: departChargeUsers){ - if(chargeUser.getId().equals(chargeUserId)){ - String departIds = chargeUser.getDepartIds(); - List list = new ArrayList(Arrays.asList(departIds.split(","))); - list.remove(departId); - String newDepartIds = String.join(",", list); - chargeUser.setDepartIds(newDepartIds); - this.baseMapper.updateById(chargeUser); - break; - } - } - } - } + /** + * 保存用户职位 + * + * @param userId + * @param positionIds + */ + private void saveUserPosition(String userId, String positionIds) { + if (oConvertUtils.isNotEmpty(positionIds)) { + String[] positionIdArray = positionIds.split(SymbolConstant.COMMA); + for (String postId : positionIdArray) { + SysUserPosition userPosition = new SysUserPosition(); + userPosition.setUserId(userId); + userPosition.setPositionId(postId); + sysUserPositionMapper.insert(userPosition); + } + } + } - //======================================= begin 用户与部门 用户列表导出 ========================================= - @Override - public ModelAndView exportAppUser(HttpServletRequest request) { - Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant()); - // Step.1 组装查询条件,导出选中的部门id数据 - String departIds = request.getParameter("departIds"); - List list = new ArrayList<>(); - if(oConvertUtils.isNotEmpty(departIds)){ - list = Arrays.asList(departIds.split(SymbolConstant.COMMA)); - } - //查询用户数据 - List userList = userMapper.getUserByDepartsTenantId(list, tenantId); - //获取部门名称 - List userDepVos = sysDepartMapper.getUserDepartByTenantUserId(userList, tenantId); - //获取职位 - List positionVos = sysUserPositionMapper.getPositionIdByUsersTenantId(userList, tenantId); - // step2 根据用户id进行分类 - //循环用户数据将数据整合导出 - List exportUserVoList = new ArrayList<>(); - for (SysUser sysUser : userList) { - AppExportUserVo exportUserVo = new AppExportUserVo(); - BeanUtils.copyProperties(sysUser, exportUserVo); - String departNames = userDepVos.stream().filter(item -> item.getUserId().equals(sysUser.getId())) - .map(SysUserDepVo::getDepartName).collect(Collectors.joining(SymbolConstant.SEMICOLON)); - exportUserVo.setDepart(departNames); - String posNames = positionVos.stream().filter(item -> item.getUserId().equals(sysUser.getId())).map(SysUserPositionVo::getName).collect(Collectors.joining(SymbolConstant.SEMICOLON)); - exportUserVo.setPosition(posNames); - exportUserVoList.add(exportUserVo); - } - //step3 封装导出excel参数 - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "用户列表"); - mv.addObject(NormalExcelConstants.CLASS, AppExportUserVo.class); - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - ExportParams exportParams = new ExportParams("导入规则:\n" + - "1、存在用户编号时,数据会根据用户编号进行匹配,匹配成功后只会更新职位和工号;\n" + - "2、不存在用户编号时,支持手机号、邮箱、姓名、部们、职位、工号导入,其中手机号必填;\n" + - "3、上下级部门用英文字符 / 连接,如 财务部/财务一部,多个部门或者职位用英文字符 ; 进行连接,如 财务部;研发部", "导出人:" + user.getRealname(), "导出信息"); - mv.addObject(NormalExcelConstants.PARAMS, exportParams); - mv.addObject(NormalExcelConstants.DATA_LIST, exportUserVoList); - return mv; - } + /** + * 编辑用户职位 + * + * @param userId + * @param positionIds + */ + private void editUserPosition(String userId, String positionIds) { + //先删除 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysUserPosition::getUserId, userId); + sysUserPositionMapper.delete(query); + //后新增数据 + this.saveUserPosition(userId, positionIds); + } - //======================================= end 用户与部门 用户列表导出 ========================================= + /** + * 设置用户职位id(已逗号拼接起来) + * + * @param sysUser + */ + private void userPositionId(SysUser sysUser) { + if (null != sysUser) { + List positionList = sysUserPositionMapper.getPositionIdByUserId(sysUser.getId()); + sysUser.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA)); + } + } - //======================================= begin 用户与部门 用户列表导入 ========================================= - @Override - public Result importAppUser(HttpServletRequest request) { - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); - Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant()); - SysTenant sysTenant = sysTenantMapper.selectById(tenantId); - // 错误信息 - List errorMessage = new ArrayList<>(); - int successLines = 0, errorLines = 0; - for (Map.Entry entity : fileMap.entrySet()) { - MultipartFile file = entity.getValue(); - ImportParams params = new ImportParams(); - params.setTitleRows(2); - params.setHeadRows(1); - params.setNeedSave(true); - //存放职位的map;key为名称 value为职位id。避免多次导入和查询 - Map positionMap = new HashMap<>(); - //存放部门的map;key为名称 value为SysDepart对象。避免多次导入和查询 - Map departMap = new HashMap<>(); - try { - List listSysUsers = ExcelImportUtil.importExcel(file.getInputStream(), AppExportUserVo.class, params); - for (int i = 0; i < listSysUsers.size(); i++) { - //记录现在是多少行 - int lineNumber = i + 1; - //记录是编辑还是添加 - boolean isEdit = false; - AppExportUserVo sysUserExcel = listSysUsers.get(i); - String id = sysUserExcel.getId(); - String workNo = sysUserExcel.getWorkNo(); - String email = sysUserExcel.getEmail(); - String phone = sysUserExcel.getPhone(); - String realname = sysUserExcel.getRealname(); - String depart = sysUserExcel.getDepart(); - String position = sysUserExcel.getPosition(); - SysUser sysUser = new SysUser(); - //判断id是否存在,如果存在的话就是更新 - if (oConvertUtils.isNotEmpty(id)) { - SysUser user = userMapper.selectById(id); - if (null == user) { - errorLines++; - errorMessage.add("第 " + lineNumber + " 行:用户不存在,请查看编号是否已修改,忽略导入。"); - continue; - } - isEdit = true; - sysUser.setId(id); - } else { - //处理租户中是否已存在,用户是否已存在,已存在的用户直接更新 - isEdit = false; - } - if (oConvertUtils.isNotEmpty(workNo)) { - sysUser.setWorkNo(workNo); - } - try { - if (isEdit) { - userMapper.updateById(sysUser); - } else { - if (oConvertUtils.isEmpty(phone)) { - errorMessage.add("第 " + lineNumber + " 行:手机号为空,忽略导入。"); - errorLines++; - continue; - } - SysUser userByPhone = userMapper.getUserByPhone(phone); - if (null != userByPhone) { - //查看看是否已经存在此租户中,存在禁止导入,否则直接更新即可 - Integer tenantCount = userTenantMapper.userTenantIzExist(userByPhone.getId(), tenantId); - if (tenantCount > 0) { - errorMessage.add("第 " + lineNumber + " 行:成员已存在该组织中,如果列表中不存在,请确认该成员是否在审核中或者已离职,忽略导入。"); - errorLines++; - continue; - } - sysUser.setId(userByPhone.getId()); - userMapper.updateById(sysUser); - this.addUserTenant(sysUser.getId(), tenantId, userByPhone.getUsername(),sysTenant.getName()); - } else { - // 密码默认为 “租户门牌号+手机号” - String password = sysTenant.getHouseNumber()+phone; - String salt = oConvertUtils.randomGen(8); - sysUser.setSalt(salt); - // 密码加密加盐 - String passwordEncode = PasswordUtil.encrypt(phone, password, salt); - sysUser.setPassword(passwordEncode); - sysUser.setUsername(phone); - sysUser.setRealname(oConvertUtils.getString(realname,phone)); - sysUser.setEmail(email); - sysUser.setPhone(phone); - sysUser.setStatus(CommonConstant.DEL_FLAG_1); - sysUser.setDelFlag(CommonConstant.DEL_FLAG_0); - sysUser.setCreateTime(new Date()); - userMapper.insert(sysUser); - this.addUserTenant(sysUser.getId(), tenantId, sysUser.getUsername(),sysTenant.getName()); - } - } - //新增或编辑职位 - if (oConvertUtils.isNotEmpty(position)) { - this.addOrEditPosition(sysUser.getId(), position, isEdit, tenantId, positionMap); - } - //新增的时候才可以添加部门 - if (!isEdit) { - //新增或编辑部门 - this.addOrEditDepart(sysUser.getId(), depart, tenantId, departMap); - } - successLines++; - } catch (Exception e) { - errorLines++; - String message = e.getMessage().toLowerCase(); + /** + * 查询用户当前登录部门的id + * + * @param orgCode + */ + private @Nullable String getDepartIdByOrCode(String orgCode) { + if (oConvertUtils.isEmpty(orgCode)) { + return null; + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysDepart::getOrgCode, orgCode); + queryWrapper.select(SysDepart::getId); + SysDepart depart = sysDepartMapper.selectOne(queryWrapper); + if (depart == null || oConvertUtils.isEmpty(depart.getId())) { + return null; + } + return depart.getId(); + } - // 通过索引名判断出错信息 - if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_USERNAME)) { - errorMessage.add("第 " + lineNumber + " 行:用户名已经存在,忽略导入。"); - } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_WORK_NO)) { - errorMessage.add("第 " + lineNumber + " 行:工号已经存在,忽略导入。"); - } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_PHONE)) { - errorMessage.add("第 " + lineNumber + " 行:手机号已经存在,忽略导入。"); - } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_EMAIL)) { - errorMessage.add("第 " + lineNumber + " 行:电子邮件已经存在,忽略导入。"); - } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER)) { - errorMessage.add("第 " + lineNumber + " 行:违反表唯一性约束。"); - } else { - errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); - log.error(e.getMessage(), e); - } - } - } - } catch (Exception e) { - errorMessage.add("发生异常:" + e.getMessage()); - log.error(e.getMessage(), e); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - log.error(e.getMessage(), e); - } - } - } - try { - return ImportExcelUtil.imporReturnRes(errorLines, successLines, errorMessage); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } + /** + * 查询用户的角色code(多个逗号分割) + * + * @param userId + */ + private @Nullable String getJoinRoleCodeByUserId(String userId) { + if (oConvertUtils.isEmpty(userId)) { + return null; + } + // 判断是否开启saas模式,根据租户id过滤 + Integer tenantId = null; + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { + // 开启了但是没有租户ID,默认-1,使其查询不到任何数据 + tenantId = oConvertUtils.getInt(TenantContext.getTenant(), -1); + } + List roleList = sysRoleMapper.getRoleCodeListByUserId(userId, tenantId); + if (CollectionUtils.isEmpty(roleList)) { + return null; + } + return roleList.stream().map(SysRole::getRoleCode).collect(Collectors.joining(SymbolConstant.COMMA)); + } - /** - * 新增或者编辑职位 - * - * @param userId 用户id - * @param position 职位名称 已/拼接 - * @param isEdit 新增或编辑 - * @param positionMap 职位map key为name,value为职位id - */ - private void addOrEditPosition(String userId, String position, Boolean isEdit, Integer tenantId, Map positionMap) { - Page page = new Page<>(1, 1); - String[] positions = position.split(SymbolConstant.SEMICOLON); - List positionList = Arrays.asList(positions); - positionList = positionList.stream().distinct().collect(Collectors.toList()); - //删除当前租户下的职位,根据职位名称、租户id、用户id - sysUserPositionMapper.deleteUserPosByNameAndTenantId(positionList, tenantId, userId); - //循环需要添加或修改的数据 - for (String pos : positionList) { - String posId = ""; - if (positionMap.containsKey(pos)) { - posId = positionMap.get(pos); - } else { - List namePage = sysPositionMapper.getPositionIdByName(pos, tenantId, page); - if (CollectionUtil.isNotEmpty(namePage)) { - posId = namePage.get(0); - positionMap.put(pos, posId); - } - } + /** + * 移除部门负责人 + * + * @param departChargeUserIdList + * @param departChargeUsers + * @param departId + */ + private void removeDepartmentManager(List departChargeUserIdList, List departChargeUsers, String departId) { + //移除部门负责人 + for (String chargeUserId : departChargeUserIdList) { + for (SysUser chargeUser : departChargeUsers) { + if (chargeUser.getId().equals(chargeUserId)) { + String departIds = chargeUser.getDepartIds(); + List list = new ArrayList(Arrays.asList(departIds.split(","))); + list.remove(departId); + String newDepartIds = String.join(",", list); + chargeUser.setDepartIds(newDepartIds); + this.baseMapper.updateById(chargeUser); + break; + } + } + } + } - //职位id不为空直接新增 - if (oConvertUtils.isNotEmpty(posId)) { - this.addSysUserPosition(userId, posId); - continue; - } + //======================================= begin 用户与部门 用户列表导出 ========================================= + @Override + public ModelAndView exportAppUser(HttpServletRequest request) { + Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant()); + // Step.1 组装查询条件,导出选中的部门id数据 + String departIds = request.getParameter("departIds"); + List list = new ArrayList<>(); + if (oConvertUtils.isNotEmpty(departIds)) { + list = Arrays.asList(departIds.split(SymbolConstant.COMMA)); + } + //查询用户数据 + List userList = userMapper.getUserByDepartsTenantId(list, tenantId); + //获取部门名称 + List userDepVos = sysDepartMapper.getUserDepartByTenantUserId(userList, tenantId); + //获取职位 + List positionVos = sysUserPositionMapper.getPositionIdByUsersTenantId(userList, tenantId); + // step2 根据用户id进行分类 + //循环用户数据将数据整合导出 + List exportUserVoList = new ArrayList<>(); + for (SysUser sysUser : userList) { + AppExportUserVo exportUserVo = new AppExportUserVo(); + BeanUtils.copyProperties(sysUser, exportUserVo); + String departNames = userDepVos.stream().filter(item -> item.getUserId().equals(sysUser.getId())) + .map(SysUserDepVo::getDepartName).collect(Collectors.joining(SymbolConstant.SEMICOLON)); + exportUserVo.setDepart(departNames); + String posNames = positionVos.stream().filter(item -> item.getUserId().equals(sysUser.getId())).map(SysUserPositionVo::getName).collect(Collectors.joining(SymbolConstant.SEMICOLON)); + exportUserVo.setPosition(posNames); + exportUserVoList.add(exportUserVo); + } + //step3 封装导出excel参数 + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "用户列表"); + mv.addObject(NormalExcelConstants.CLASS, AppExportUserVo.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + ExportParams exportParams = new ExportParams("导入规则:\n" + + "1、存在用户编号时,数据会根据用户编号进行匹配,匹配成功后只会更新职位和工号;\n" + + "2、不存在用户编号时,支持手机号、邮箱、姓名、部们、职位、工号导入,其中手机号必填;\n" + + "3、上下级部门用英文字符 / 连接,如 财务部/财务一部,多个部门或者职位用英文字符 ; 进行连接,如 财务部;研发部", "导出人:" + user.getRealname(), "导出信息"); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + mv.addObject(NormalExcelConstants.DATA_LIST, exportUserVoList); + return mv; + } - //不是编辑的情况下职位才会新增 - if (!isEdit) { - //新增职位和用户职位关系 - SysPosition sysPosition = new SysPosition(); - sysPosition.setName(pos); - sysPosition.setCode(RandomUtil.randomString(10)); - sysPosition.setTenantId(tenantId); - sysPositionMapper.insert(sysPosition); - positionMap.put(pos, sysPosition.getId()); - this.addSysUserPosition(userId, sysPosition.getId()); - } - } - } + //======================================= end 用户与部门 用户列表导出 ========================================= - /** - * 添加用户职位 - */ - private void addSysUserPosition(String userId, String positionId) { - Long count = sysUserPositionMapper.getUserPositionCount(userId, positionId); - if(count == 0){ - SysUserPosition userPosition = new SysUserPosition(); - userPosition.setUserId(userId); - userPosition.setPositionId(positionId); - sysUserPositionMapper.insert(userPosition); - } - } + //======================================= begin 用户与部门 用户列表导入 ========================================= + @Override + public Result importAppUser(HttpServletRequest request) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant()); + SysTenant sysTenant = sysTenantMapper.selectById(tenantId); + // 错误信息 + List errorMessage = new ArrayList<>(); + int successLines = 0, errorLines = 0; + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + //存放职位的map;key为名称 value为职位id。避免多次导入和查询 + Map positionMap = new HashMap<>(); + //存放部门的map;key为名称 value为SysDepart对象。避免多次导入和查询 + Map departMap = new HashMap<>(); + try { + List listSysUsers = ExcelImportUtil.importExcel(file.getInputStream(), AppExportUserVo.class, params); + for (int i = 0; i < listSysUsers.size(); i++) { + //记录现在是多少行 + int lineNumber = i + 1; + //记录是编辑还是添加 + boolean isEdit = false; + AppExportUserVo sysUserExcel = listSysUsers.get(i); + String id = sysUserExcel.getId(); + String workNo = sysUserExcel.getWorkNo(); + String email = sysUserExcel.getEmail(); + String phone = sysUserExcel.getPhone(); + String realname = sysUserExcel.getRealname(); + String depart = sysUserExcel.getDepart(); + String position = sysUserExcel.getPosition(); + SysUser sysUser = new SysUser(); + //判断id是否存在,如果存在的话就是更新 + if (oConvertUtils.isNotEmpty(id)) { + SysUser user = userMapper.selectById(id); + if (null == user) { + errorLines++; + errorMessage.add("第 " + lineNumber + " 行:用户不存在,请查看编号是否已修改,忽略导入。"); + continue; + } + isEdit = true; + sysUser.setId(id); + } else { + //处理租户中是否已存在,用户是否已存在,已存在的用户直接更新 + isEdit = false; + } + if (oConvertUtils.isNotEmpty(workNo)) { + sysUser.setWorkNo(workNo); + } + try { + if (isEdit) { + userMapper.updateById(sysUser); + } else { + if (oConvertUtils.isEmpty(phone)) { + errorMessage.add("第 " + lineNumber + " 行:手机号为空,忽略导入。"); + errorLines++; + continue; + } + SysUser userByPhone = userMapper.getUserByPhone(phone); + if (null != userByPhone) { + //查看看是否已经存在此租户中,存在禁止导入,否则直接更新即可 + Integer tenantCount = userTenantMapper.userTenantIzExist(userByPhone.getId(), tenantId); + if (tenantCount > 0) { + errorMessage.add("第 " + lineNumber + " 行:成员已存在该组织中,如果列表中不存在,请确认该成员是否在审核中或者已离职,忽略导入。"); + errorLines++; + continue; + } + sysUser.setId(userByPhone.getId()); + userMapper.updateById(sysUser); + this.addUserTenant(sysUser.getId(), tenantId, userByPhone.getUsername(), sysTenant.getName()); + } else { + // 密码默认为 “租户门牌号+手机号” + String password = sysTenant.getHouseNumber() + phone; + String salt = oConvertUtils.randomGen(8); + sysUser.setSalt(salt); + // 密码加密加盐 + String passwordEncode = PasswordUtil.encrypt(phone, password, salt); + sysUser.setPassword(passwordEncode); + sysUser.setUsername(phone); + sysUser.setRealname(oConvertUtils.getString(realname, phone)); + sysUser.setEmail(email); + sysUser.setPhone(phone); + sysUser.setStatus(CommonConstant.DEL_FLAG_1); + sysUser.setDelFlag(CommonConstant.DEL_FLAG_0); + sysUser.setCreateTime(new Date()); + userMapper.insert(sysUser); + this.addUserTenant(sysUser.getId(), tenantId, sysUser.getUsername(), sysTenant.getName()); + } + } + //新增或编辑职位 + if (oConvertUtils.isNotEmpty(position)) { + this.addOrEditPosition(sysUser.getId(), position, isEdit, tenantId, positionMap); + } + //新增的时候才可以添加部门 + if (!isEdit) { + //新增或编辑部门 + this.addOrEditDepart(sysUser.getId(), depart, tenantId, departMap); + } + successLines++; + } catch (Exception e) { + errorLines++; + String message = e.getMessage().toLowerCase(); - /** - * 新增或编辑部门 - * - * @param userId 用户id - * @param depart 部门名称 - * @param tenantId 租户id - * @param departMap 存放部门的map;key为名称 value为SysDepart对象。 - */ - private void addOrEditDepart(String userId, String depart, Integer tenantId, Map departMap) { - //批量将部门和用户信息建立关联关系 - if (StringUtils.isNotEmpty(depart)) { - Page page = new Page<>(1, 1); - //多个部门分离开 - String[] departNames = depart.split(SymbolConstant.SEMICOLON); - List departNameList = Arrays.asList(departNames); - departNameList = departNameList.stream().distinct().collect(Collectors.toList()); - //部门id - String parentId = ""; - for (String departName : departNameList) { - String[] names = departName.split(SymbolConstant.SINGLE_SLASH); - //部门名称拼接 - String nameStr = ""; - for (int i = 0; i < names.length; i++) { - String name = names[i]; - //拼接name - if (oConvertUtils.isNotEmpty(nameStr)) { - nameStr = nameStr + SymbolConstant.SINGLE_SLASH + name; - } else { - nameStr = name; - } - SysDepart sysDepart = null; - //判断map中是否存在该部门名称 - if (departMap.containsKey(nameStr)) { - sysDepart = departMap.get(nameStr); - } else { - //不存在需要去查询 - List departPageByName = sysDepartMapper.getDepartPageByName(page, name, tenantId, parentId); - //部门为空需要新增部门 - if (CollectionUtil.isEmpty(departPageByName)) { - JSONObject formData = new JSONObject(); - formData.put("parentId", parentId); - String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART, formData); - sysDepart = new SysDepart(); - sysDepart.setParentId(parentId); - sysDepart.setOrgCode(codeArray[0]); - sysDepart.setOrgType(codeArray[1]); - sysDepart.setTenantId(tenantId); - sysDepart.setDepartName(name); - sysDepart.setIzLeaf(CommonConstant.IS_LEAF); - sysDepart.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); - sysDepart.setStatus(CommonConstant.STATUS_1); - sysDepartMapper.insert(sysDepart); - } else { - sysDepart = departPageByName.get(0); - } - //父级id不为空那么就将父级部门改成不是叶子节点 - if (oConvertUtils.isNotEmpty(parentId)) { - sysDepartMapper.setMainLeaf(parentId, CommonConstant.NOT_LEAF); - } - parentId = sysDepart.getId(); - departMap.put(nameStr, sysDepart); - } - //最后一位新增部门用户关系表 - if (i == names.length - 1) { - Long count = sysUserDepartMapper.getCountByDepartIdAndUserId(userId, sysDepart.getId()); - if(count == 0){ - SysUserDepart userDepart = new SysUserDepart(userId, sysDepart.getId()); - sysUserDepartMapper.insert(userDepart); - } - } - } - } - } + // 通过索引名判断出错信息 + if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_USERNAME)) { + errorMessage.add("第 " + lineNumber + " 行:用户名已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_WORK_NO)) { + errorMessage.add("第 " + lineNumber + " 行:工号已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_PHONE)) { + errorMessage.add("第 " + lineNumber + " 行:手机号已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_EMAIL)) { + errorMessage.add("第 " + lineNumber + " 行:电子邮件已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER)) { + errorMessage.add("第 " + lineNumber + " 行:违反表唯一性约束。"); + } else { + errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); + log.error(e.getMessage(), e); + } + } + } + } catch (Exception e) { + errorMessage.add("发生异常:" + e.getMessage()); + log.error(e.getMessage(), e); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + } + try { + return ImportExcelUtil.imporReturnRes(errorLines, successLines, errorMessage); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } - } + /** + * 新增或者编辑职位 + * + * @param userId 用户id + * @param position 职位名称 已/拼接 + * @param isEdit 新增或编辑 + * @param positionMap 职位map key为name,value为职位id + */ + private void addOrEditPosition(String userId, String position, Boolean isEdit, Integer tenantId, Map positionMap) { + Page page = new Page<>(1, 1); + String[] positions = position.split(SymbolConstant.SEMICOLON); + List positionList = Arrays.asList(positions); + positionList = positionList.stream().distinct().collect(Collectors.toList()); + //删除当前租户下的职位,根据职位名称、租户id、用户id + sysUserPositionMapper.deleteUserPosByNameAndTenantId(positionList, tenantId, userId); + //循环需要添加或修改的数据 + for (String pos : positionList) { + String posId = ""; + if (positionMap.containsKey(pos)) { + posId = positionMap.get(pos); + } else { + List namePage = sysPositionMapper.getPositionIdByName(pos, tenantId, page); + if (CollectionUtil.isNotEmpty(namePage)) { + posId = namePage.get(0); + positionMap.put(pos, posId); + } + } - /** - * 添加用户租户 - * - * @param userId - * @param tenantId - * @param invitedUsername 被邀请人的账号 - * @param tenantName 租户名称 - */ - private void addUserTenant(String userId, Integer tenantId, String invitedUsername, String tenantName) { - SysUserTenant userTenant = new SysUserTenant(); - userTenant.setTenantId(tenantId); - userTenant.setUserId(userId); - userTenant.setStatus(CommonConstant.USER_TENANT_INVITE); - userTenantMapper.insert(userTenant); - //update-begin---author:wangshuai ---date:20230710 for:【QQYUN-5731】导入用户时,没有提醒------------ - //发送系统消息通知 - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - MessageDTO messageDTO = new MessageDTO(); - String title = sysUser.getRealname() + " 邀请您加入 " + tenantName + "。"; - messageDTO.setTitle(title); - Map data = new HashMap<>(); - //update-begin---author:wangshuai---date:2024-03-11---for:【QQYUN-8425】用户导入成功后 消息提醒 跳转至同意页面--- - data.put(CommonConstant.NOTICE_MSG_BUS_TYPE, SysAnnmentTypeEnum.TENANT_INVITE.getType()); - //update-end---author:wangshuai---date:2024-03-11---for:【QQYUN-8425】用户导入成功后 消息提醒 跳转至同意页面--- - messageDTO.setData(data); - messageDTO.setContent(title); - messageDTO.setToUser(invitedUsername); - messageDTO.setFromUser("system"); - systemSendMsgHandle.sendMessage(messageDTO); - //update-end---author:wangshuai ---date:20230710 for:【QQYUN-5731】导入用户时,没有提醒------------ - } - //======================================= end 用户与部门 用户列表导入 ========================================= - - @Override - public void checkUserAdminRejectDel(String userIds) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(SysUser::getId,Arrays.asList(userIds.split(SymbolConstant.COMMA))); - query.eq(SysUser::getUsername,"admin"); - Long adminRoleCount = this.baseMapper.selectCount(query); - //大于0说明存在管理员用户,不允许删除 - if(adminRoleCount>0){ - throw new JeecgBootException("admin用户,不允许删除!"); - } - } + //职位id不为空直接新增 + if (oConvertUtils.isNotEmpty(posId)) { + this.addSysUserPosition(userId, posId); + continue; + } - @Override - public void changePhone(JSONObject json, String username) { - String smscode = json.getString("smscode"); - String phone = json.getString("phone"); - String type = json.getString("type"); - if(oConvertUtils.isEmpty(phone)){ - throw new JeecgBootException("请填写原手机号!"); - } - if(oConvertUtils.isEmpty(smscode)){ - throw new JeecgBootException("请填写验证码!"); - } - //step1 验证原手机号是否和当前用户匹配 - SysUser sysUser = userMapper.getUserByNameAndPhone(phone,username); - if (null == sysUser){ - throw new JeecgBootException("原手机号不匹配,无法修改密码!"); - } - //step2 根据类型判断是验证原手机号的验证码还是新手机号的验证码 - //验证原手机号 - if(CommonConstant.VERIFY_ORIGINAL_PHONE.equals(type)){ - this.verifyPhone(phone, smscode); - }else if(CommonConstant.UPDATE_PHONE.equals(type)){ - //修改手机号 - String newPhone = json.getString("newPhone"); - //需要验证新手机号和原手机号是否一致,一致不让修改 - if(newPhone.equals(phone)){ - throw new JeecgBootException("新手机号与原手机号一致,无法修改!"); - } - this.verifyPhone(newPhone, smscode); - //step3 新手机号验证码验证成功之后即可修改手机号 - sysUser.setPhone(newPhone); - userMapper.updateById(sysUser); - } - } - - /** - * 验证手机号 - * - * @param phone - * @param smsCode - * @return - */ - public void verifyPhone(String phone, String smsCode){ - String phoneKey = CommonConstant.CHANGE_PHONE_REDIS_KEY_PRE + phone; - Object phoneCode = redisUtil.get(phoneKey); - if(null == phoneCode){ - throw new JeecgBootException("验证码失效,请重新发送验证码!"); - } - if(!smsCode.equals(phoneCode.toString())) { - throw new JeecgBootException("短信验证码不匹配!"); - } - //验证完成之后清空手机验证码 - redisUtil.removeAll(phoneKey); - } - - @Override - public void sendChangePhoneSms(JSONObject jsonObject, String username, String ipAddress) { - String type = jsonObject.getString("type"); - String phone = jsonObject.getString("phone"); - if(oConvertUtils.isEmpty(phone)){ - throw new JeecgBootException("请填写手机号!"); - } - //step1 根据类型判断是发送旧手机号验证码还是新的手机号验证码 - if(CommonConstant.VERIFY_ORIGINAL_PHONE.equals(type)){ - //step2 旧手机号验证码需要验证手机号是否匹配 - SysUser sysUser = userMapper.getUserByNameAndPhone(phone, username); - if(null == sysUser){ - throw new JeecgBootException("旧手机号不匹配,无法修改手机号!"); - } - }else if(CommonConstant.UPDATE_PHONE.equals(type)){ - //step3 新手机号需要验证手机号码是否已注册过 - SysUser userByPhone = userMapper.getUserByPhone(phone); - if(null != userByPhone){ - throw new JeecgBootException("手机号已被注册,请尝试其他手机号!"); - } - } - //step4 发送短信验证码 - this.sendPhoneSms(phone, ipAddress); - } + //不是编辑的情况下职位才会新增 + if (!isEdit) { + //新增职位和用户职位关系 + SysPosition sysPosition = new SysPosition(); + sysPosition.setName(pos); + sysPosition.setCode(RandomUtil.randomString(10)); + sysPosition.setTenantId(tenantId); + sysPositionMapper.insert(sysPosition); + positionMap.put(pos, sysPosition.getId()); + this.addSysUserPosition(userId, sysPosition.getId()); + } + } + } - /** - * 发送短信验证码 - * @param phone - */ - private void sendPhoneSms(String phone, String clientIp) { - String redisKey = CommonConstant.CHANGE_PHONE_REDIS_KEY_PRE+phone; - Object object = redisUtil.get(redisKey); + /** + * 添加用户职位 + */ + private void addSysUserPosition(String userId, String positionId) { + Long count = sysUserPositionMapper.getUserPositionCount(userId, positionId); + if (count == 0) { + SysUserPosition userPosition = new SysUserPosition(); + userPosition.setUserId(userId); + userPosition.setPositionId(positionId); + sysUserPositionMapper.insert(userPosition); + } + } - if (object != null) { - throw new JeecgBootException("验证码10分钟内,仍然有效!"); - } + /** + * 新增或编辑部门 + * + * @param userId 用户id + * @param depart 部门名称 + * @param tenantId 租户id + * @param departMap 存放部门的map;key为名称 value为SysDepart对象。 + */ + private void addOrEditDepart(String userId, String depart, Integer tenantId, Map departMap) { + //批量将部门和用户信息建立关联关系 + if (StringUtils.isNotEmpty(depart)) { + Page page = new Page<>(1, 1); + //多个部门分离开 + String[] departNames = depart.split(SymbolConstant.SEMICOLON); + List departNameList = Arrays.asList(departNames); + departNameList = departNameList.stream().distinct().collect(Collectors.toList()); + //部门id + String parentId = ""; + for (String departName : departNameList) { + String[] names = departName.split(SymbolConstant.SINGLE_SLASH); + //部门名称拼接 + String nameStr = ""; + for (int i = 0; i < names.length; i++) { + String name = names[i]; + //拼接name + if (oConvertUtils.isNotEmpty(nameStr)) { + nameStr = nameStr + SymbolConstant.SINGLE_SLASH + name; + } else { + nameStr = name; + } + SysDepart sysDepart = null; + //判断map中是否存在该部门名称 + if (departMap.containsKey(nameStr)) { + sysDepart = departMap.get(nameStr); + } else { + //不存在需要去查询 + List departPageByName = sysDepartMapper.getDepartPageByName(page, name, tenantId, parentId); + //部门为空需要新增部门 + if (CollectionUtil.isEmpty(departPageByName)) { + JSONObject formData = new JSONObject(); + formData.put("parentId", parentId); + String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART, formData); + sysDepart = new SysDepart(); + sysDepart.setParentId(parentId); + sysDepart.setOrgCode(codeArray[0]); + sysDepart.setOrgType(codeArray[1]); + sysDepart.setTenantId(tenantId); + sysDepart.setDepartName(name); + sysDepart.setIzLeaf(CommonConstant.IS_LEAF); + sysDepart.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); + sysDepart.setStatus(CommonConstant.STATUS_1); + sysDepartMapper.insert(sysDepart); + } else { + sysDepart = departPageByName.get(0); + } + //父级id不为空那么就将父级部门改成不是叶子节点 + if (oConvertUtils.isNotEmpty(parentId)) { + sysDepartMapper.setMainLeaf(parentId, CommonConstant.NOT_LEAF); + } + parentId = sysDepart.getId(); + departMap.put(nameStr, sysDepart); + } + //最后一位新增部门用户关系表 + if (i == names.length - 1) { + Long count = sysUserDepartMapper.getCountByDepartIdAndUserId(userId, sysDepart.getId()); + if (count == 0) { + SysUserDepart userDepart = new SysUserDepart(userId, sysDepart.getId()); + sysUserDepartMapper.insert(userDepart); + } + } + } + } + } - //增加 check防止恶意刷短信接口 - if(!DySmsLimit.canSendSms(clientIp)){ - log.warn("--------[警告] IP地址:{}, 短信接口请求太多-------", clientIp); - throw new JeecgBootException("短信接口请求太多,请稍后再试!", CommonConstant.PHONE_SMS_FAIL_CODE); - } - - //随机数 - String captcha = RandomUtil.randomNumbers(6); - JSONObject obj = new JSONObject(); - obj.put("code", captcha); - try { - boolean sendSmsSuccess = DySmsHelper.sendSms(phone, obj, DySmsEnum.LOGIN_TEMPLATE_CODE); - if(!sendSmsSuccess){ - throw new JeecgBootException("短信验证码发送失败,请稍后重试!"); - } - //验证码10分钟内有效 - redisUtil.set(redisKey, captcha, 600); - } catch (ClientException e) { - log.error(e.getMessage(),e); - throw new JeecgBootException("短信接口未配置,请联系管理员!"); - } - } + } + + /** + * 添加用户租户 + * + * @param userId + * @param tenantId + * @param invitedUsername 被邀请人的账号 + * @param tenantName 租户名称 + */ + private void addUserTenant(String userId, Integer tenantId, String invitedUsername, String tenantName) { + SysUserTenant userTenant = new SysUserTenant(); + userTenant.setTenantId(tenantId); + userTenant.setUserId(userId); + userTenant.setStatus(CommonConstant.USER_TENANT_INVITE); + userTenantMapper.insert(userTenant); + //update-begin---author:wangshuai ---date:20230710 for:【QQYUN-5731】导入用户时,没有提醒------------ + //发送系统消息通知 + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + MessageDTO messageDTO = new MessageDTO(); + String title = sysUser.getRealname() + " 邀请您加入 " + tenantName + "。"; + messageDTO.setTitle(title); + Map data = new HashMap<>(); + //update-begin---author:wangshuai---date:2024-03-11---for:【QQYUN-8425】用户导入成功后 消息提醒 跳转至同意页面--- + data.put(CommonConstant.NOTICE_MSG_BUS_TYPE, SysAnnmentTypeEnum.TENANT_INVITE.getType()); + //update-end---author:wangshuai---date:2024-03-11---for:【QQYUN-8425】用户导入成功后 消息提醒 跳转至同意页面--- + messageDTO.setData(data); + messageDTO.setContent(title); + messageDTO.setToUser(invitedUsername); + messageDTO.setFromUser("system"); + systemSendMsgHandle.sendMessage(messageDTO); + //update-end---author:wangshuai ---date:20230710 for:【QQYUN-5731】导入用户时,没有提醒------------ + } + //======================================= end 用户与部门 用户列表导入 ========================================= + + @Override + public void checkUserAdminRejectDel(String userIds) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysUser::getId, Arrays.asList(userIds.split(SymbolConstant.COMMA))); + query.eq(SysUser::getUsername, "admin"); + Long adminRoleCount = this.baseMapper.selectCount(query); + //大于0说明存在管理员用户,不允许删除 + if (adminRoleCount > 0) { + throw new JeecgBootException("admin用户,不允许删除!"); + } + } + + @Override + public void changePhone(JSONObject json, String username) { + String smscode = json.getString("smscode"); + String phone = json.getString("phone"); + String type = json.getString("type"); + if (oConvertUtils.isEmpty(phone)) { + throw new JeecgBootException("请填写原手机号!"); + } + if (oConvertUtils.isEmpty(smscode)) { + throw new JeecgBootException("请填写验证码!"); + } + //step1 验证原手机号是否和当前用户匹配 + SysUser sysUser = userMapper.getUserByNameAndPhone(phone, username); + if (null == sysUser) { + throw new JeecgBootException("原手机号不匹配,无法修改密码!"); + } + //step2 根据类型判断是验证原手机号的验证码还是新手机号的验证码 + //验证原手机号 + if (CommonConstant.VERIFY_ORIGINAL_PHONE.equals(type)) { + this.verifyPhone(phone, smscode); + } else if (CommonConstant.UPDATE_PHONE.equals(type)) { + //修改手机号 + String newPhone = json.getString("newPhone"); + //需要验证新手机号和原手机号是否一致,一致不让修改 + if (newPhone.equals(phone)) { + throw new JeecgBootException("新手机号与原手机号一致,无法修改!"); + } + this.verifyPhone(newPhone, smscode); + //step3 新手机号验证码验证成功之后即可修改手机号 + sysUser.setPhone(newPhone); + userMapper.updateById(sysUser); + } + } + + /** + * 验证手机号 + * + * @param phone + * @param smsCode + * @return + */ + public void verifyPhone(String phone, String smsCode) { + String phoneKey = CommonConstant.CHANGE_PHONE_REDIS_KEY_PRE + phone; + Object phoneCode = redisUtil.get(phoneKey); + if (null == phoneCode) { + throw new JeecgBootException("验证码失效,请重新发送验证码!"); + } + if (!smsCode.equals(phoneCode.toString())) { + throw new JeecgBootException("短信验证码不匹配!"); + } + //验证完成之后清空手机验证码 + redisUtil.removeAll(phoneKey); + } + + @Override + public void sendChangePhoneSms(JSONObject jsonObject, String username, String ipAddress) { + String type = jsonObject.getString("type"); + String phone = jsonObject.getString("phone"); + if (oConvertUtils.isEmpty(phone)) { + throw new JeecgBootException("请填写手机号!"); + } + //step1 根据类型判断是发送旧手机号验证码还是新的手机号验证码 + if (CommonConstant.VERIFY_ORIGINAL_PHONE.equals(type)) { + //step2 旧手机号验证码需要验证手机号是否匹配 + SysUser sysUser = userMapper.getUserByNameAndPhone(phone, username); + if (null == sysUser) { + throw new JeecgBootException("旧手机号不匹配,无法修改手机号!"); + } + } else if (CommonConstant.UPDATE_PHONE.equals(type)) { + //step3 新手机号需要验证手机号码是否已注册过 + SysUser userByPhone = userMapper.getUserByPhone(phone); + if (null != userByPhone) { + throw new JeecgBootException("手机号已被注册,请尝试其他手机号!"); + } + } + //step4 发送短信验证码 + this.sendPhoneSms(phone, ipAddress); + } + + /** + * 发送短信验证码 + * + * @param phone + */ + private void sendPhoneSms(String phone, String clientIp) { + String redisKey = CommonConstant.CHANGE_PHONE_REDIS_KEY_PRE + phone; + Object object = redisUtil.get(redisKey); + + if (object != null) { + throw new JeecgBootException("验证码10分钟内,仍然有效!"); + } + + //增加 check防止恶意刷短信接口 + if (!DySmsLimit.canSendSms(clientIp)) { + log.warn("--------[警告] IP地址:{}, 短信接口请求太多-------", clientIp); + throw new JeecgBootException("短信接口请求太多,请稍后再试!", CommonConstant.PHONE_SMS_FAIL_CODE); + } + + //随机数 + String captcha = RandomUtil.randomNumbers(6); + JSONObject obj = new JSONObject(); + obj.put("code", captcha); + try { + boolean sendSmsSuccess = DySmsHelper.sendSms(phone, obj, DySmsEnum.LOGIN_TEMPLATE_CODE); + if (!sendSmsSuccess) { + throw new JeecgBootException("短信验证码发送失败,请稍后重试!"); + } + //验证码10分钟内有效 + redisUtil.set(redisKey, captcha, 600); + } catch (ClientException e) { + log.error(e.getMessage(), e); + throw new JeecgBootException("短信接口未配置,请联系管理员!"); + } + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserTenantServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserTenantServiceImpl.java index 0177ef6..637fe0d 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserTenantServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserTenantServiceImpl.java @@ -3,13 +3,11 @@ package org.jeecg.modules.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang.StringUtils; -import org.apache.shiro.SecurityUtils; import org.jeecg.common.constant.CacheConstant; -import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.exception.JeecgBootException; -import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.CommonUtils; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysTenant; @@ -22,13 +20,9 @@ import org.jeecg.modules.system.mapper.SysUserTenantMapper; import org.jeecg.modules.system.service.ISysUserTenantService; import org.jeecg.modules.system.vo.SysUserDepVo; import org.jeecg.modules.system.vo.SysUserTenantVo; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; @@ -39,7 +33,7 @@ import java.util.stream.Collectors; /** * @Description: sys_user_tenant_relation * @Author: jeecg-boot - * @Date: 2022-12-23 + * @Date: 2022-12-23 * @Version: V1.0 */ @Service @@ -47,7 +41,7 @@ public class SysUserTenantServiceImpl extends ServiceImpl getPageUserList(Page page, Integer userTenantId, SysUser user) { - return page.setRecords(userTenantMapper.getPageUserList(page,userTenantId,user)); + return page.setRecords(userTenantMapper.getPageUserList(page, userTenantId, user)); } @Override public List setUserTenantIds(List records) { - if(null == records || records.size() == 0){ + if (null == records || records.size() == 0) { return records; } - for (SysUser sysUser:records) { + for (SysUser sysUser : records) { //查询租户id List list = userTenantMapper.getTenantIdsByUserId(sysUser.getId()); - if(oConvertUtils.isNotEmpty(list)){ + if (oConvertUtils.isNotEmpty(list)) { sysUser.setRelTenantIds(StringUtils.join(list.toArray(), SymbolConstant.COMMA)); - }else{ + } else { sysUser.setRelTenantIds(""); } } @@ -128,7 +122,7 @@ public class SysUserTenantServiceImpl extends ServiceImpl positionList = userPositionMapper.getPositionIdByUserId(item.getId()); - item.setPost(CommonUtils.getSplitText(positionList,SymbolConstant.COMMA)); + item.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA)); }); } return page.setRecords(tenantPageList); @@ -155,7 +149,7 @@ public class SysUserTenantServiceImpl extends ServiceImpl userIds, Integer tenantId) { userTenantMapper.putCancelQuit(userIds, tenantId); @@ -163,32 +157,32 @@ public class SysUserTenantServiceImpl extends ServiceImpl getTenantPageListByUserId(Page page, String userId, List userTenantStatus,SysUserTenantVo sysUserTenantVo) { - return page.setRecords(userTenantMapper.getTenantPageListByUserId(page,userId,userTenantStatus,sysUserTenantVo)); + public IPage getTenantPageListByUserId(Page page, String userId, List userTenantStatus, SysUserTenantVo sysUserTenantVo) { + return page.setRecords(userTenantMapper.getTenantPageListByUserId(page, userId, userTenantStatus, sysUserTenantVo)); } - @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) @Override public void agreeJoinTenant(String userId, Integer tenantId) { - userTenantMapper.agreeJoinTenant(userId,tenantId); + userTenantMapper.agreeJoinTenant(userId, tenantId); } @Override public void refuseJoinTenant(String userId, Integer tenantId) { - userTenantMapper.refuseJoinTenant(userId,tenantId); + userTenantMapper.refuseJoinTenant(userId, tenantId); } @Override public SysUserTenant getUserTenantByTenantId(String userId, Integer tenantId) { - return userTenantMapper.getUserTenantByTenantId(userId,tenantId); + return userTenantMapper.getUserTenantByTenantId(userId, tenantId); } @Override public Long getUserCount(Integer tenantId, String tenantStatus) { - return userTenantMapper.getUserCount(tenantId,tenantStatus); + return userTenantMapper.getUserCount(tenantId, tenantStatus); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java index 7cf5ff6..e7818e3 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppDingtalkServiceImpl.java @@ -30,7 +30,10 @@ import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.constant.enums.MessageTypeEnum; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.util.JwtUtil; -import org.jeecg.common.util.*; +import org.jeecg.common.util.PasswordUtil; +import org.jeecg.common.util.RestUtil; +import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.JeecgBaseConfig; import org.jeecg.config.mybatis.MybatisPlusSaasConfig; import org.jeecg.modules.system.entity.*; @@ -54,6 +57,7 @@ import java.util.stream.Collectors; /** * 第三方App对接:钉钉实现类 + * * @author: jeecg-boot */ @Slf4j @@ -90,7 +94,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { public String getAccessToken() { //update-begin---author:wangshuai ---date:20230224 for:[QQYUN-3440]新建企业微信和钉钉配置表,通过租户模式隔离------------ SysThirdAppConfig config = getDingThirdAppConfig(); - if(null != config){ + if (null != config) { return getTenantAccessToken(config); } log.warn("租户下未配置钉钉"); @@ -157,6 +161,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { /** * 递归同步部门到本地 + * * @param sysDepartsTree * @param departments * @param parent @@ -222,7 +227,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { // return syncInfo; // } - public void syncDepartmentToLocalRecursion(List departmentTreeList, String sysParentId, String username, SyncInfoVo syncInfo, String accessToken,Boolean syncUser,Integer tenantId) { + public void syncDepartmentToLocalRecursion(List departmentTreeList, String sysParentId, String username, SyncInfoVo syncInfo, String accessToken, Boolean syncUser, Integer tenantId) { if (departmentTreeList != null && departmentTreeList.size() != 0) { // 记录已经同步过的用户id,当有多个部门的情况时,只同步一次 @@ -231,7 +236,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); // 根据 source_identifier 字段查询 //update-begin---author:wangshuai---date:2024-04-10---for:【issues/6017】钉钉同步部门时没有最顶层的部门名,同步用户时,用户没有部门信息--- - queryWrapper.and(item -> item.eq(SysDepart::getId, departmentTree.getSource_identifier()).or().eq(SysDepart::getDingIdentifier,departmentTree.getDept_id())); + queryWrapper.and(item -> item.eq(SysDepart::getId, departmentTree.getSource_identifier()).or().eq(SysDepart::getDingIdentifier, departmentTree.getDept_id())); //update-end---author:wangshuai---date:2024-04-10---for:【issues/6017】钉钉同步部门时没有最顶层的部门名,同步用户时,用户没有部门信息--- SysDepart sysDepart = sysDepartService.getOne(queryWrapper); if (sysDepart != null) { @@ -240,7 +245,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { if (sysParentId != null) { updateSysDepart.setParentId(sysParentId); //更新父级部门不是叶子结点 - sysDepartService.updateIzLeaf(sysParentId,CommonConstant.NOT_LEAF); + sysDepartService.updateIzLeaf(sysParentId, CommonConstant.NOT_LEAF); } try { sysDepartService.updateDepartDataById(updateSysDepart, username); @@ -251,11 +256,11 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { } if (departmentTree.hasChildren()) { // 紧接着同步子级 - this.syncDepartmentToLocalRecursion(departmentTree.getChildren(), updateSysDepart.getId(), username, syncInfo, accessToken,syncUser,tenantId); + this.syncDepartmentToLocalRecursion(departmentTree.getChildren(), updateSysDepart.getId(), username, syncInfo, accessToken, syncUser, tenantId); } //判断是否需要同步用户 - if(syncUser){ - this.addDepartUser(updateSysDepart.getId(),departmentTree.getDept_id(), accessToken, syncInfo, syncedUserIdSet,tenantId); + if (syncUser) { + this.addDepartUser(updateSysDepart.getId(), departmentTree.getDept_id(), accessToken, syncInfo, syncedUserIdSet, tenantId); } } else { // 执行新增操作 @@ -269,7 +274,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { newSysDepart.setOrgCategory("1"); } try { - if(oConvertUtils.isEmpty(departmentTree.getParent_id())){ + if (oConvertUtils.isEmpty(departmentTree.getParent_id())) { newSysDepart.setDingIdentifier(departmentTree.getDept_id().toString()); } newSysDepart.setTenantId(tenantId); @@ -279,7 +284,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { updateDtDepart.setDept_id(departmentTree.getDept_id()); updateDtDepart.setSource_identifier(newSysDepart.getId()); //为空说明是最顶级部门,最顶级部门不允许修改操作 - if(oConvertUtils.isNotEmpty(newSysDepart.getParentId())){ + if (oConvertUtils.isNotEmpty(newSysDepart.getParentId())) { Response response = JdtDepartmentAPI.update(updateDtDepart, accessToken); if (!response.isSuccess()) { throw new RuntimeException(response.getErrmsg()); @@ -288,15 +293,15 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { String str = String.format("部门 %s 创建成功!", newSysDepart.getDepartName()); syncInfo.addSuccessInfo(str); //判断是否需要同步用户 - if(syncUser){ - this.addDepartUser(newSysDepart.getId(),departmentTree.getDept_id(), accessToken, syncInfo, syncedUserIdSet,tenantId); + if (syncUser) { + this.addDepartUser(newSysDepart.getId(), departmentTree.getDept_id(), accessToken, syncInfo, syncedUserIdSet, tenantId); } } catch (Exception e) { this.syncDepartCollectErrInfo(e, departmentTree, syncInfo); } // 紧接着同步子级 if (departmentTree.hasChildren()) { - this.syncDepartmentToLocalRecursion(departmentTree.getChildren(), newSysDepart.getId(), username, syncInfo, accessToken,syncUser,tenantId); + this.syncDepartmentToLocalRecursion(departmentTree.getChildren(), newSysDepart.getId(), username, syncInfo, accessToken, syncUser, tenantId); } } } @@ -517,7 +522,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { sysThirdAccount.setThirdType(THIRD_TYPE); } sysThirdAccount.setThirdUserId(user.getUserid()); - if(oConvertUtils.isEmpty(sysThirdAccount.getRealname())){ + if (oConvertUtils.isEmpty(sysThirdAccount.getRealname())) { sysThirdAccount.setRealname(user.getName()); } sysThirdAccountService.saveOrUpdate(sysThirdAccount); @@ -546,11 +551,11 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { if (e instanceof DuplicateKeyException) { msg = e.getCause().getMessage(); String emailUniq = "uniq_sys_user_email"; - if(msg.contains(emailUniq)){ + if (msg.contains(emailUniq)) { msg = "邮箱重复,请更换邮箱"; } - String workNoUniq="uniq_sys_user_work_no"; - if(msg.contains(workNoUniq)){ + String workNoUniq = "uniq_sys_user_work_no"; + if (msg.contains(workNoUniq)) { msg = "工号重复,请更换工号"; } } else { @@ -584,7 +589,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { //update-begin---author:wangshuai ---date:20230220 for:[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------ //获取用户职位名称 List positionList = sysPositionService.getPositionList(sysUser.getId()); - if(null != positionList && positionList.size()>0){ + if (null != positionList && positionList.size() > 0) { String positionName = positionList.stream().map(SysPosition::getName).collect(Collectors.joining(SymbolConstant.COMMA)); user.setTitle(positionName); } @@ -628,10 +633,10 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { // 密码默认为为手机号加门牌号,随机加盐 String password = "", salt = oConvertUtils.randomGen(8); int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); - if(tenantId>0){ + if (tenantId > 0) { SysTenant tenant = tenantMapper.selectById(tenantId); - password = tenant.getHouseNumber()+dtUser.getMobile(); - }else{ + password = tenant.getHouseNumber() + dtUser.getMobile(); + } else { password = dtUser.getMobile(); } String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt); @@ -651,7 +656,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { BeanUtils.copyProperties(oldSysUser, sysUser); sysUser.setTelephone(dtUser.getTelephone()); //如果真实姓名为空的情况下,才会改真实姓名 - if(oConvertUtils.isEmpty(oldSysUser.getRealname())){ + if (oConvertUtils.isEmpty(oldSysUser.getRealname())) { sysUser.setRealname(dtUser.getName()); } // 因为唯一键约束的原因,如果原数据和旧数据相同,就不更新 @@ -809,6 +814,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { /** * 发送Markdown消息 + * * @param message * @param verifyConfig * @return @@ -833,7 +839,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { String[] toUsers = message.getToUser().split(","); // 通过第三方账号表查询出第三方userId int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), CommonConstant.TENANT_ID_DEFAULT_VALUE); - List thirdAccountList = sysThirdAccountService.listThirdUserIdByUsername(toUsers, THIRD_TYPE,tenantId); + List thirdAccountList = sysThirdAccountService.listThirdUserIdByUsername(toUsers, THIRD_TYPE, tenantId); List dtUserIds = thirdAccountList.stream().map(SysThirdAccount::getThirdUserId).collect(Collectors.toList()); mdMessage.setUserid_list(dtUserIds); } @@ -896,7 +902,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { * 发送卡片消息(SysAnnouncement定制) * * @param announcement - * @param ddMobileUrl 钉钉打开网页地址 + * @param ddMobileUrl 钉钉打开网页地址 * @param verifyConfig 是否验证配置(未启用的APP会拒绝发送) * @return */ @@ -926,7 +932,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { } else { emptySuffix = "空"; } - + String markdown = "### " + announcement.getTitile() + "\n" + emptySuffix; log.info("钉钉推送参数, markdown: {}", markdown); ActionCardMessage actionCard = new ActionCardMessage(markdown); @@ -938,7 +944,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { baseUrl = RestUtil.getBaseUrl(); } catch (Exception e) { log.warn(e.getMessage()); - baseUrl = jeecgBaseConfig.getDomainUrl().getPc(); + baseUrl = jeecgBaseConfig.getDomainUrl().getPc(); //e.printStackTrace(); } @@ -951,7 +957,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { } actionCard.setSingle_url(ddSingleUrl); log.info("获取钉钉打开网页地址,最终地址 ddSingleUrl: {}", ddSingleUrl); - + Message actionCardMessage = new Message<>(agentId, actionCard); if (CommonConstant.MSG_TYPE_ALL.equals(announcement.getMsgType())) { actionCardMessage.setTo_all_user(true); @@ -960,20 +966,20 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { // 将userId转为username String[] userIds = null; String userId = announcement.getUserIds(); - if(oConvertUtils.isNotEmpty(userId)){ + if (oConvertUtils.isNotEmpty(userId)) { userIds = userId.substring(0, (userId.length() - 1)).split(","); - }else{ + } else { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysAnnouncementSend::getAnntId, announcement.getId()); SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendMapper.selectOne(queryWrapper); - userIds = new String[] {sysAnnouncementSend.getUserId()}; + userIds = new String[]{sysAnnouncementSend.getUserId()}; } - if(userIds!=null){ + if (userIds != null) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SysUser::getId, userIds); List userList = userMapper.selectList(queryWrapper); - String[] usernameList = userList.stream().map(SysUser::getUsername).toArray(String[] :: new); + String[] usernameList = userList.stream().map(SysUser::getUsername).toArray(String[]::new); // 通过第三方账号表查询出第三方userId int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), CommonConstant.TENANT_ID_DEFAULT_VALUE); @@ -989,7 +995,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { /** * OAuth2登录,成功返回登录的SysUser,失败返回null */ - public SysUser oauth2Login(String authCode,Integer tenantId) { + public SysUser oauth2Login(String authCode, Integer tenantId) { this.tenantIzExist(tenantId); //update-begin---author:wangshuai ---date:20230224 for:[QQYUN-3440]新建企业微信和钉钉配置表,通过租户模式隔离------------ SysThirdAppConfig dtConfig = configMapper.getThirdConfigByThirdType(tenantId, MessageTypeEnum.DD.getType()); @@ -1026,11 +1032,11 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { queryWrapper.eq(SysThirdAccount::getThirdType, THIRD_TYPE); queryWrapper.eq(SysThirdAccount::getTenantId, tenantId); //update-begin---author:wangshuai---date:2023-12-04---for: auth登录需要联查一下--- - queryWrapper.and((wrapper)->wrapper.eq(SysThirdAccount::getThirdUserUuid,appUserId).or().eq(SysThirdAccount::getThirdUserId,appUserId)); + queryWrapper.and((wrapper) -> wrapper.eq(SysThirdAccount::getThirdUserUuid, appUserId).or().eq(SysThirdAccount::getThirdUserId, appUserId)); //update-end---author:wangshuai---date:2023-12-04---for: auth登录需要联查一下--- SysThirdAccount thirdAccount = sysThirdAccountService.getOne(queryWrapper); if (thirdAccount != null) { - return this.getSysUserByThird(thirdAccount, null, appUserId, accessToken,tenantId); + return this.getSysUserByThird(thirdAccount, null, appUserId, accessToken, tenantId); } else { // 直接创建新账号 User appUser = JdtUserAPI.getUserById(appUserId, accessToken).getResult(); @@ -1038,8 +1044,8 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { //应该存uuid ThirdLoginModel tlm = new ThirdLoginModel(THIRD_TYPE, appUser.getUnionid(), appUser.getName(), appUser.getAvatar()); //update-end---author:wangshuai ---date:20230328 for:[QQYUN-4883]钉钉auth登录同一个租户下有同一个用户id------------ - thirdAccount = sysThirdAccountService.saveThirdUser(tlm,tenantId); - return this.getSysUserByThird(thirdAccount, appUser, null, null,tenantId); + thirdAccount = sysThirdAccountService.saveThirdUser(tlm, tenantId); + return this.getSysUserByThird(thirdAccount, appUser, null, null, tenantId); } } return null; @@ -1078,7 +1084,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { return sysUser; } else { // 没有就走创建逻辑 - return sysThirdAccountService.createUser(appUser.getMobile(), appUser.getUnionid(),tenantId); + return sysThirdAccountService.createUser(appUser.getMobile(), appUser.getUnionid(), tenantId); } } @@ -1088,21 +1094,23 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { /** * 根据类型和租户id获取钉钉配置 + * * @return */ - private SysThirdAppConfig getDingThirdAppConfig(){ + private SysThirdAppConfig getDingThirdAppConfig() { int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); this.tenantIzExist(tenantId); - return configMapper.getThirdConfigByThirdType(tenantId,MessageTypeEnum.DD.getType()); + return configMapper.getThirdConfigByThirdType(tenantId, MessageTypeEnum.DD.getType()); } /** * 获取钉钉accessToken + * * @param config * @return */ private String getTenantAccessToken(SysThirdAppConfig config) { - if(null == config){ + if (null == config) { return null; } AccessToken accessToken = JdtBaseAPI.getAccessToken(config.getClientId(), config.getClientSecret()); @@ -1115,20 +1123,21 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { /** * 添加或保存用户租户 + * * @param userId * @param isUpdate 是否是新增 */ - private void createUserTenant(String userId,Boolean isUpdate){ - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ + private void createUserTenant(String userId, Boolean isUpdate) { + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); //判断当前用户是否已在该租户下面 Integer count = userTenantMapper.userTenantIzExist(userId, tenantId); //count 为0 新增租户用户,否则不用新增 - if(count == 0){ + if (count == 0) { SysUserTenant userTenant = new SysUserTenant(); userTenant.setTenantId(tenantId); userTenant.setUserId(userId); - userTenant.setStatus(isUpdate?CommonConstant.USER_TENANT_UNDER_REVIEW:CommonConstant.USER_TENANT_NORMAL); + userTenant.setStatus(isUpdate ? CommonConstant.USER_TENANT_UNDER_REVIEW : CommonConstant.USER_TENANT_NORMAL); userTenantMapper.insert(userTenant); } } @@ -1136,6 +1145,7 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { /** * 同步用户和部门 + * * @return */ public SyncInfoVo syncThirdAppDepartmentUserToLocal() { @@ -1151,15 +1161,16 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { List departmentTreeList = JdtDepartmentTreeVo.listToTree(departments); int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); // 递归同步部门 - this.syncDepartmentToLocalRecursion(departmentTreeList, null, username, syncInfo, accessToken,true,tenantId); + this.syncDepartmentToLocalRecursion(departmentTreeList, null, username, syncInfo, accessToken, true, tenantId); return syncInfo; } /** * 添加用户及用户部门关系 - * @param departId 部门id - * @param dingDepartId 钉钉部门id + * + * @param departId 部门id + * @param dingDepartId 钉钉部门id * @param accessToken * @param syncInfo * @param syncedUserIdSet @@ -1170,12 +1181,12 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { for (User user : userList) { if (syncedUserIdSet.contains(user.getUserid())) { //需要同步用户部门 - this.syncAddOrUpdateUserDepart(user.getUserid(),departId); + this.syncAddOrUpdateUserDepart(user.getUserid(), departId); continue; } syncedUserIdSet.add(user.getUserid()); SysUser userByPhone = userMapper.getUserByPhone(user.getMobile()); - SysThirdAccount sysThirdAccount = sysThirdAccountService.getOneByUuidAndThirdType(user.getUnionid(), THIRD_TYPE,tenantId,user.getUserid()); + SysThirdAccount sysThirdAccount = sysThirdAccountService.getOneByUuidAndThirdType(user.getUnionid(), THIRD_TYPE, tenantId, user.getUserid()); if (null != userByPhone) { // 循环到此说明用户匹配成功,进行更新操作 SysUser updateSysUser = this.dtUserToSysUser(user, userByPhone); @@ -1189,9 +1200,9 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { //第三方账号关系表 this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), user, tenantId); //创建当前租户 - this.createUserTenant(updateSysUser.getId(),true); + this.createUserTenant(updateSysUser.getId(), true); //需要同步用户部门 - this.syncAddOrUpdateUserDepart(updateSysUser.getId(),departId); + this.syncAddOrUpdateUserDepart(updateSysUser.getId(), departId); } else { // 如果没有匹配到用户,则走创建逻辑 SysUser newSysUser = this.dtUserToSysUser(user); @@ -1203,29 +1214,30 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { this.syncUserCollectErrInfo(e, user, syncInfo); } //第三方账号关系表 - this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), user,tenantId); + this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), user, tenantId); //创建当前租户 - this.createUserTenant(newSysUser.getId(),false); + this.createUserTenant(newSysUser.getId(), false); //需要同步用户部门 - this.syncAddOrUpdateUserDepart(newSysUser.getId(),departId); + this.syncAddOrUpdateUserDepart(newSysUser.getId(), departId); } } } /** * 通过用户id和部门id新增用户部门关系表 + * * @param userId * @param departId */ private void syncAddOrUpdateUserDepart(String userId, String departId) { //查询用户是否在部门里面 LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysUserDepart::getDepId,departId); - query.eq(SysUserDepart::getUserId,userId); + query.eq(SysUserDepart::getDepId, departId); + query.eq(SysUserDepart::getUserId, userId); long count = sysUserDepartService.count(query); - if(count == 0){ + if (count == 0) { //不存在,则新增部门用户关系 - SysUserDepart sysUserDepart = new SysUserDepart(null,userId,departId); + SysUserDepart sysUserDepart = new SysUserDepart(null, userId, departId); sysUserDepartService.save(sysUserDepart); } } @@ -1234,12 +1246,13 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService { /** * 验证租户是否存在 + * * @param tenantId */ - public void tenantIzExist(Integer tenantId){ - if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){ + public void tenantIzExist(Integer tenantId) { + if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) { Long count = tenantMapper.tenantIzExist(tenantId); - if(ObjectUtil.isEmpty(count) || 0 == count){ + if (ObjectUtil.isEmpty(count) || 0 == count) { throw new JeecgBootException("租户ID:" + tenantId + "无效,平台中不存在!"); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java index 02cda71..0fc5901 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java @@ -58,6 +58,7 @@ import java.util.stream.Collectors; /** * 第三方App对接:企业微信实现类 + * * @author: jeecg-boot */ @Slf4j @@ -88,8 +89,8 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { private SysThirdAccountMapper sysThirdAccountMapper; @Autowired private SysTenantMapper tenantMapper; - - + + /** * errcode */ @@ -115,7 +116,9 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { return null; } - /** 获取APPToken,新版企业微信的秘钥是分开的 */ + /** + * 获取APPToken,新版企业微信的秘钥是分开的 + */ public String getAppAccessToken(SysThirdAppConfig config) { //update-begin---author:wangshuai ---date:20230224 for:[QQYUN-3440]新建企业微信和钉钉配置表,通过租户模式隔离------------ String corpId = config.getClientId(); @@ -123,7 +126,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { // 如果没有配置APP秘钥,就说明是老企业,可以通用秘钥 if (oConvertUtils.isEmpty(secret)) { secret = config.getClientSecret(); - //update-end---author:wangshuai ---date:20230224 for:[QQYUN-3440]新建企业微信和钉钉配置表,通过租户模式隔离------------ + //update-end---author:wangshuai ---date:20230224 for:[QQYUN-3440]新建企业微信和钉钉配置表,通过租户模式隔离------------ } AccessToken accessToken = JwAccessTokenAPI.getAccessToken(corpId, secret); @@ -164,6 +167,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { /** * 递归删除部门以及子部门,由于企业微信不允许删除带有成员和子部门的部门,所以需要递归删除下子部门,然后把部门成员移动端根部门下 + * * @param children * @param accessToken * @param ifLocal @@ -208,6 +212,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { /** * 递归同步部门到第三方APP + * * @param sysDepartsTree * @param departments * @param parent @@ -248,7 +253,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { } } - public SyncInfoVo syncThirdAppDepartmentToLocal(Integer tenantId, Map map) { + public SyncInfoVo syncThirdAppDepartmentToLocal(Integer tenantId, Map map) { SyncInfoVo syncInfo = new SyncInfoVo(); String accessToken = this.getAccessToken(); if (accessToken == null) { @@ -272,7 +277,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { /** * 递归同步部门到本地 */ - private void syncDepartmentToLocalRecursion(List departmentTreeList, String sysParentId, String username, SyncInfoVo syncInfo,Integer tenantId, Map map) { + private void syncDepartmentToLocalRecursion(List departmentTreeList, String sysParentId, String username, SyncInfoVo syncInfo, Integer tenantId, Map map) { if (departmentTreeList != null && departmentTreeList.size() != 0) { for (JwDepartmentTreeVo departmentTree : departmentTreeList) { String depId = departmentTree.getId(); @@ -286,14 +291,14 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { SysDepart updateSysDepart = this.qwDepartmentToSysDepart(departmentTree, sysDepart); //update-begin---author:wangshuai---date:2024-04-10---for:【issues/6017】企业微信同步部门时没有最顶层的部门名,同步用户时,用户没有部门信息--- if (sysParentId != null && !"0".equals(sysParentId)) { - //update-end---author:wangshuai---date:2024-04-10---for:【issues/6017】企业微信同步部门时没有最顶层的部门名,同步用户时,用户没有部门信息--- + //update-end---author:wangshuai---date:2024-04-10---for:【issues/6017】企业微信同步部门时没有最顶层的部门名,同步用户时,用户没有部门信息--- updateSysDepart.setParentId(sysParentId); } try { sysDepartService.updateDepartDataById(updateSysDepart, username); String str = String.format("部门 %s 更新成功!", updateSysDepart.getDepartName()); syncInfo.addSuccessInfo(str); - map.put(depId,updateSysDepart.getId()); + map.put(depId, updateSysDepart.getId()); } catch (Exception e) { this.syncDepartCollectErrInfo(e, departmentTree, syncInfo); } @@ -317,7 +322,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { sysDepartService.saveDepartData(newSysDepart, username); String str = String.format("部门 %s 创建成功!", newSysDepart.getDepartName()); syncInfo.addSuccessInfo(str); - map.put(depId,newSysDepart.getId()); + map.put(depId, newSysDepart.getId()); } catch (Exception e) { this.syncDepartCollectErrInfo(e, departmentTree, syncInfo); } @@ -379,12 +384,12 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { // 新版企业微信调整了API,现在只能通过userid来判断是否同步过了 // String phone = sysUser.getPhone(); // if (!(oConvertUtils.isEmpty(phone) || phone.equals(qwUserTemp.getMobile()))) { - // 手机号匹配失败,再尝试用username匹配 - String username = sysUser.getUsername(); - if (!(oConvertUtils.isEmpty(username) || username.equals(qwUserTemp.getUserid()))) { - // username 匹配失败,直接跳到下一次循环继续 - continue; - } + // 手机号匹配失败,再尝试用username匹配 + String username = sysUser.getUsername(); + if (!(oConvertUtils.isEmpty(username) || username.equals(qwUserTemp.getUserid()))) { + // username 匹配失败,直接跳到下一次循环继续 + continue; + } // } } // 循环到此说明用户匹配成功,进行更新操作 @@ -392,7 +397,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { int errCode = JwUserAPI.updateUser(qwUser, accessToken); // 收集错误信息 this.syncUserCollectErrInfo(errCode, sysUser, syncInfo); - this.thirdAccountSaveOrUpdate(sysThirdAccount, sysUser.getId(), qwUser.getUserid(),qwUser.getName(), null); + this.thirdAccountSaveOrUpdate(sysThirdAccount, sysUser.getId(), qwUser.getUserid(), qwUser.getName(), null); // 更新完成,直接跳到下一次外部循环继续 continue for1; } @@ -402,7 +407,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { // 收集错误信息 boolean apiSuccess = this.syncUserCollectErrInfo(errCode, sysUser, syncInfo); if (apiSuccess) { - this.thirdAccountSaveOrUpdate(sysThirdAccount, sysUser.getId(), qwUser.getUserid(),qwUser.getName(), null); + this.thirdAccountSaveOrUpdate(sysThirdAccount, sysUser.getId(), qwUser.getUserid(), qwUser.getName(), null); } } return syncInfo; @@ -480,7 +485,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { sysThirdAccount.setStatus(1); sysThirdAccount.setDelFlag(0); sysThirdAccount.setThirdType(THIRD_TYPE); - if(oConvertUtils.isNotEmpty(tenantId)){ + if (oConvertUtils.isNotEmpty(tenantId)) { sysThirdAccount.setTenantId(tenantId); } } @@ -605,7 +610,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { // 职务翻译 //update-begin---author:wangshuai ---date:20230220 for:[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------ List positionList = sysPositionService.getPositionList(sysUser.getId()); - if(null != positionList && positionList.size()>0){ + if (null != positionList && positionList.size() > 0) { String positionName = positionList.stream().map(SysPosition::getName).collect(Collectors.joining(SymbolConstant.COMMA)); user.setPosition(positionName); } @@ -866,13 +871,13 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { // 将userId转为username String userId = announcement.getUserIds(); String[] userIds = null; - if(oConvertUtils.isNotEmpty(userId)){ + if (oConvertUtils.isNotEmpty(userId)) { userIds = userId.substring(0, (userId.length() - 1)).split(","); - }else{ + } else { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysAnnouncementSend::getAnntId, announcement.getId()); SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendMapper.selectOne(queryWrapper); - userIds = new String[] {sysAnnouncementSend.getUserId()}; + userIds = new String[]{sysAnnouncementSend.getUserId()}; } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -885,7 +890,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { textCard.setTouser(this.getTouser(usernameString, isToAll)); TextCardEntity entity = new TextCardEntity(); entity.setTitle(announcement.getTitile()); - entity.setDescription(oConvertUtils.getString(announcement.getMsgAbstract(),"空")); + entity.setDescription(oConvertUtils.getString(announcement.getMsgAbstract(), "空")); String baseUrl = null; //优先通过请求获取basepath,获取不到读取 jeecg.domainUrl.pc @@ -893,7 +898,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { baseUrl = RestUtil.getBaseUrl(); } catch (Exception e) { log.warn(e.getMessage()); - baseUrl = jeecgBaseConfig.getDomainUrl().getPc(); + baseUrl = jeecgBaseConfig.getDomainUrl().getPc(); //e.printStackTrace(); } @@ -909,7 +914,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { String[] toUsers = origin.split(","); // 通过第三方账号表查询出第三方userId int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), CommonConstant.TENANT_ID_DEFAULT_VALUE); - List thirdAccountList = sysThirdAccountService.listThirdUserIdByUsername(toUsers, THIRD_TYPE,tenantId); + List thirdAccountList = sysThirdAccountService.listThirdUserIdByUsername(toUsers, THIRD_TYPE, tenantId); List toUserList = thirdAccountList.stream().map(SysThirdAccount::getThirdUserId).collect(Collectors.toList()); // 多个接收者用‘|’分隔 return String.join("|", toUserList); @@ -922,17 +927,17 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { * @param code * @return */ - public Map getUserIdByThirdCode(String code, String accessToken) { + public Map getUserIdByThirdCode(String code, String accessToken) { JSONObject response = JwUserAPI.getUserInfoByCode(code, accessToken); if (response != null) { - Map map = new HashMap<>(5); + Map map = new HashMap<>(5); log.info("response: " + response.toJSONString()); if (response.getIntValue(ERR_CODE) == 0) { //将userTicket也返回,用于获取手机号 String userTicket = response.getString("user_ticket"); String appUserId = response.getString("UserId"); - map.put("userTicket",userTicket); - map.put("appUserId",appUserId); + map.put("userTicket", userTicket); + map.put("appUserId", appUserId); return map; } } @@ -942,9 +947,9 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { /** * OAuth2登录,成功返回登录的SysUser,失败返回null */ - public SysUser oauth2Login(String code,Integer tenantId) { + public SysUser oauth2Login(String code, Integer tenantId) { Long count = tenantMapper.tenantIzExist(tenantId); - if(ObjectUtil.isEmpty(count) || 0 == count){ + if (ObjectUtil.isEmpty(count) || 0 == count) { throw new JeecgBootException("租户不存在!"); } //update-begin---author:wangshuai ---date:20230224 for:[QQYUN-3440]新建企业微信和钉钉配置表,通过租户模式隔离------------ @@ -954,7 +959,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { if (accessToken == null) { return null; } - Map map = this.getUserIdByThirdCode(code, accessToken); + Map map = this.getUserIdByThirdCode(code, accessToken); if (null != map) { //企业微信需要通过userTicket获取用户信息 String appUserId = map.get("appUserId"); @@ -966,7 +971,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { queryWrapper.eq(SysThirdAccount::getTenantId, tenantId); SysThirdAccount thirdAccount = sysThirdAccountService.getOne(queryWrapper); if (thirdAccount != null) { - return this.getSysUserByThird(thirdAccount, null, appUserId, accessToken, userTicket,tenantId); + return this.getSysUserByThird(thirdAccount, null, appUserId, accessToken, userTicket, tenantId); } else { throw new JeecgBootException("该用户尚未同步,请同步后再次登录!"); } @@ -981,10 +986,10 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { * @param appUser * @param appUserId * @param accessToken - * @param userTicket 获取访问用户敏感信息 + * @param userTicket 获取访问用户敏感信息 * @return */ - private SysUser getSysUserByThird(SysThirdAccount thirdAccount, User appUser, String appUserId, String accessToken, String userTicket,Integer tenantId) { + private SysUser getSysUserByThird(SysThirdAccount thirdAccount, User appUser, String appUserId, String accessToken, String userTicket, Integer tenantId) { String sysUserId = thirdAccount.getSysUserId(); if (oConvertUtils.isNotEmpty(sysUserId)) { return userMapper.selectById(sysUserId); @@ -1005,7 +1010,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { return sysUser; } else { // 没有就走创建逻辑 - return sysThirdAccountService.createUser(appUser.getMobile(), appUser.getUserid(),tenantId); + return sysThirdAccountService.createUser(appUser.getMobile(), appUser.getUserid(), tenantId); } } @@ -1013,31 +1018,33 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { /** * 根据类型和租户id获取企业微信配置 + * * @return */ - private SysThirdAppConfig getWeChatThirdAppConfig(){ + private SysThirdAppConfig getWeChatThirdAppConfig() { int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0); return configMapper.getThirdConfigByThirdType(tenantId, MessageTypeEnum.QYWX.getType()); } /** * 获取企业微信第三方用户信息 + * * @param userTicket * @param accessToken * @return */ - private User getUserByUserTicket(String userTicket, String accessToken){ + private User getUserByUserTicket(String userTicket, String accessToken) { Map map = new HashMap<>(5); - map.put("user_ticket",userTicket); + map.put("user_ticket", userTicket); //建立连接 CloseableHttpClient httpClient = null; CloseableHttpResponse httpResponse = null; try { httpClient = HttpClients.createDefault(); - HttpPost httpPost = new HttpPost("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token="+accessToken); + HttpPost httpPost = new HttpPost("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=" + accessToken); RequestConfig requestConfig = RequestConfig.custom() - .setConnectTimeout(10000).setConnectionRequestTimeout(10000).setSocketTimeout(10000) - .build(); + .setConnectTimeout(10000).setConnectionRequestTimeout(10000).setSocketTimeout(10000) + .build(); httpPost.setConfig(requestConfig); httpPost.setEntity(new StringEntity(JSONObject.toJSONString(map), ContentType.create("application/json", "utf-8"))); httpResponse = httpClient.execute(httpPost); @@ -1046,7 +1053,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { String result = EntityUtils.toString(entity); JSONObject jsonObject = JSONObject.parseObject(result); Integer errcode = jsonObject.getInteger("errcode"); - if(0 == errcode){ + if (0 == errcode) { return JSONObject.toJavaObject(jsonObject, User.class); } } catch (IOException e) { @@ -1057,6 +1064,7 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { /** * 获取企业微信绑定的用户信息 + * * @return */ public JwSysUserDepartVo getThirdUserByWechat(Integer tenantId) { @@ -1069,8 +1077,8 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { //获取当前租户下的用户 List userList = sysUserTenantMapper.getUsersByTenantIdAndName(tenantId); // 获取企业微信所有的用户(只能获取userid) - List qwUsers = JwUserAPI.getUsersByDepartid("1","1",null,accessToken); - if(oConvertUtils.isEmpty(qwUsers)){ + List qwUsers = JwUserAPI.getUsersByDepartid("1", "1", null, accessToken); + if (oConvertUtils.isEmpty(qwUsers)) { throw new JeecgBootException("企业微信下没查询到用户!"); } List userIds = new ArrayList<>(); @@ -1080,22 +1088,23 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { User user = qwUsers.get(i); String userId = qwUsers.get(i).getUserid(); //保证用户唯一 - if(!userIds.contains(userId)){ + if (!userIds.contains(userId)) { //step2 查看是否已经同步过了,同步过的不做处理 - SysThirdAccount oneBySysUserId = sysThirdAccountService.getOneByUuidAndThirdType(userId, THIRD_TYPE,tenantId, userId); - if(null != oneBySysUserId){ + SysThirdAccount oneBySysUserId = sysThirdAccountService.getOneByUuidAndThirdType(userId, THIRD_TYPE, tenantId, userId); + if (null != oneBySysUserId) { userIds.add(qwUsers.get(i).getUserid()); - userList = userList.stream().filter(item -> !item.getUserId().equals(oneBySysUserId.getSysUserId())).collect(Collectors.toList());; + userList = userList.stream().filter(item -> !item.getUserId().equals(oneBySysUserId.getSysUserId())).collect(Collectors.toList()); + ; continue; } AtomicBoolean excludeUser = new AtomicBoolean(false); - if(ObjectUtil.isNotEmpty(qwUsers)){ + if (ObjectUtil.isNotEmpty(qwUsers)) { //step3 通过名称匹配敲敲云 - userList.forEach(item ->{ - if(item.getRealName().equals(user.getName())){ + userList.forEach(item -> { + if (item.getRealName().equals(user.getName())) { item.setWechatUserId(user.getUserid()); item.setWechatRealName(user.getName()); - if(ObjectUtil.isNotEmpty(user.getDepartment())){ + if (ObjectUtil.isNotEmpty(user.getDepartment())) { item.setWechatDepartId(Arrays.toString(user.getDepartment())); } excludeUser.set(true); @@ -1103,11 +1112,11 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { }); userIds.add(user.getUserid()); } - if(!excludeUser.get()){ + if (!excludeUser.get()) { JwUserDepartVo userDepartVo = new JwUserDepartVo(); userDepartVo.setWechatRealName(user.getName()); userDepartVo.setWechatUserId(user.getUserid()); - if(ObjectUtil.isNotEmpty(user.getDepartment())){ + if (ObjectUtil.isNotEmpty(user.getDepartment())) { userDepartVo.setWechatDepartId(Arrays.toString(user.getDepartment())); } userWechatList.add(userDepartVo); @@ -1122,13 +1131,14 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { /** * 同步企业微信和部门 + * * @param jwUserDepartJson * @return */ public SyncInfoVo syncWechatEnterpriseDepartAndUserToLocal(String jwUserDepartJson, Integer tenantId) { //step 1 同步部门 //存放部门id的map - Map idsMap = new HashMap<>(); + Map idsMap = new HashMap<>(); SyncInfoVo syncInfoVo = this.syncThirdAppDepartmentToLocal(tenantId, idsMap); //step 2 同步用户及用户部门 this.syncDepartAndUser(syncInfoVo, tenantId, idsMap, jwUserDepartJson); @@ -1138,9 +1148,10 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { /** * 同步用户和部门 - * @param syncInfoVo 存放错误信息的日志 - * @param tenantId 租户id - * @param idsMap 部门id集合 key为企业微信的id value 为系统部门的id + * + * @param syncInfoVo 存放错误信息的日志 + * @param tenantId 租户id + * @param idsMap 部门id集合 key为企业微信的id value 为系统部门的id * @param jwUserDepartJson */ private void syncDepartAndUser(SyncInfoVo syncInfoVo, Integer tenantId, Map idsMap, String jwUserDepartJson) { @@ -1172,29 +1183,29 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { if (null != sysUser) { sysUserId = sysUser.getId(); //如果真实姓名为空的情况下,才会改真实姓名 - if(oConvertUtils.isEmpty(sysUser.getRealname())){ + if (oConvertUtils.isEmpty(sysUser.getRealname())) { sysUser.setRealname(wechatRealName); //更新用户 userMapper.updateById(sysUser); } String str = String.format("用户 %s(%s) 更新成功!", sysUser.getRealname(), sysUser.getUsername()); syncInfoVo.addSuccessInfo(str); - }else{ - syncInfoVo.addFailInfo("企业微信用户 "+wechatRealName+" 对应的组织用户没有匹配到!"); - continue; + } else { + syncInfoVo.addFailInfo("企业微信用户 " + wechatRealName + " 对应的组织用户没有匹配到!"); + continue; } } if (oConvertUtils.isNotEmpty(sysUserId)) { //step 2 新增租户用户表 - this.createUserTenant(sysUserId,false,tenantId); + this.createUserTenant(sysUserId, false, tenantId); //step 3 新建或更新第三方账号表 SysThirdAccount sysThirdAccount = sysThirdAccountService.getOneByUuidAndThirdType(wechatUserId, THIRD_TYPE, tenantId, wechatUserId); - this.thirdAccountSaveOrUpdate(sysThirdAccount,sysUserId,wechatUserId,wechatRealName,tenantId); + this.thirdAccountSaveOrUpdate(sysThirdAccount, sysUserId, wechatUserId, wechatRealName, tenantId); //step 4 新建或更新用户部门关系表 - if(oConvertUtils.isNotEmpty(wechatDepartId)){ + if (oConvertUtils.isNotEmpty(wechatDepartId)) { String wechatDepartIds = wechatDepartId.toString(); String[] departIds = wechatDepartIds.substring(1, wechatDepartIds.length() - 1).split(","); - this.userDepartSaveOrUpdate(idsMap,sysUserId,departIds); + this.userDepartSaveOrUpdate(idsMap, sysUserId, departIds); } } } @@ -1203,14 +1214,14 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { } } - + /** * 保存用户 * - * @param username 用户名 + * @param username 用户名 * @param wechatRealName 企业微信用户真实姓名 - * @param syncInfo 存放成功或失败的信息 - * @param wechatUserId wechatUserId 企业微信对应的id + * @param syncInfo 存放成功或失败的信息 + * @param wechatUserId wechatUserId 企业微信对应的id * @return */ private String saveUser(String username, String wechatRealName, SyncInfoVo syncInfo, String wechatUserId) { @@ -1268,29 +1279,30 @@ public class ThirdAppWechatEnterpriseServiceImpl implements IThirdAppService { /** * 新建或更新用户部门关系表 - * @param idsMap 部门id集合 key为企业微信的id value 为系统部门的id + * + * @param idsMap 部门id集合 key为企业微信的id value 为系统部门的id * @param sysUserId 系统对应的用户id */ private void userDepartSaveOrUpdate(Map idsMap, String sysUserId, String[] departIds) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(SysUserDepart::getUserId,sysUserId); - for (String departId:departIds) { + query.eq(SysUserDepart::getUserId, sysUserId); + for (String departId : departIds) { departId = departId.trim(); - if(idsMap.containsKey(departId)){ + if (idsMap.containsKey(departId)) { String value = idsMap.get(departId); //查询用户是否在部门里面 - query.eq(SysUserDepart::getDepId,value); + query.eq(SysUserDepart::getDepId, value); long count = sysUserDepartService.count(query); - if(count == 0){ + if (count == 0) { //不存在,则新增部门用户关系 - SysUserDepart sysUserDepart = new SysUserDepart(null,sysUserId,value); + SysUserDepart sysUserDepart = new SysUserDepart(null, sysUserId, value); sysUserDepartService.save(sysUserDepart); } - } + } } } public List getThirdUserBindByWechat(int tenantId) { - return sysThirdAccountMapper.getThirdUserBindByWechat(tenantId,THIRD_TYPE); + return sysThirdAccountMapper.getThirdUserBindByWechat(tenantId, THIRD_TYPE); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/FindsDepartsChildrenUtil.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/FindsDepartsChildrenUtil.java index 4bf73bf..e91f545 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/FindsDepartsChildrenUtil.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/FindsDepartsChildrenUtil.java @@ -1,30 +1,27 @@ package org.jeecg.modules.system.util; -import org.jeecg.common.constant.CommonConstant; -import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.model.DepartIdModel; import org.jeecg.modules.system.model.SysDepartTreeModel; -import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.List; /** - *

+ *

* 对应部门的表,处理并查找树级数据 - *

- * + *

+ * * @Author: Steve * @Date: 2019-01-22 */ public class FindsDepartsChildrenUtil { - //部门树信息-树结构 - //private static List sysDepartTreeList = new ArrayList(); - - //部门树id-树结构 + //部门树信息-树结构 + //private static List sysDepartTreeList = new ArrayList(); + + //部门树id-树结构 //private static List idList = new ArrayList<>(); @@ -35,7 +32,7 @@ public class FindsDepartsChildrenUtil { public static List wrapTreeDataToTreeList(List recordList) { // 在该方法每请求一次,都要对全局list集合进行一次清理 //idList.clear(); - List idList = new ArrayList(); + List idList = new ArrayList(); List records = new ArrayList<>(); for (int i = 0; i < recordList.size(); i++) { SysDepart depart = recordList.get(i); @@ -48,6 +45,7 @@ public class FindsDepartsChildrenUtil { /** * 获取 DepartIdModel + * * @param recordList * @return */ @@ -80,24 +78,24 @@ public class FindsDepartsChildrenUtil { departIdList.add(departIdModel); } } - getGrandChildren(treeList,recordList,departIdList); - + getGrandChildren(treeList, recordList, departIdList); + //idList = departIdList; return treeList; } /** * queryTreeList的子方法====3==== - *该方法是找到顶级父类下的所有子节点集合并封装到TreeList集合 + * 该方法是找到顶级父类下的所有子节点集合并封装到TreeList集合 */ - private static void getGrandChildren(List treeList,List recordList,List idList) { + private static void getGrandChildren(List treeList, List recordList, List idList) { for (int i = 0; i < treeList.size(); i++) { SysDepartTreeModel model = treeList.get(i); DepartIdModel idModel = idList.get(i); for (int i1 = 0; i1 < recordList.size(); i1++) { SysDepartTreeModel m = recordList.get(i1); - if (m.getParentId()!=null && m.getParentId().equals(model.getId())) { + if (m.getParentId() != null && m.getParentId().equals(model.getId())) { model.getChildren().add(m); DepartIdModel dim = new DepartIdModel().convert(m); idModel.getChildren().add(dim); @@ -107,7 +105,7 @@ public class FindsDepartsChildrenUtil { } } - + /** * queryTreeList的子方法 ====4==== @@ -120,7 +118,7 @@ public class FindsDepartsChildrenUtil { if (model.getChildren().size() == 0) { model.setChildren(null); model.setIsLeaf(true); - }else{ + } else { setEmptyChildrenAsNull(model.getChildren()); model.setIsLeaf(false); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/PermissionDataUtil.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/PermissionDataUtil.java index 8346037..fe5dfa0 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/PermissionDataUtil.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/PermissionDataUtil.java @@ -31,109 +31,111 @@ public class PermissionDataUtil { */ private static final String VUE_SUFFIX = ".vue"; - /** - * 智能处理错误数据,简化用户失误操作 - * - * @param permission - */ - public static SysPermission intelligentProcessData(SysPermission permission) { - if (permission == null) { - return null; - } + /** + * 智能处理错误数据,简化用户失误操作 + * + * @param permission + */ + public static SysPermission intelligentProcessData(SysPermission permission) { + if (permission == null) { + return null; + } - // 组件 - if (oConvertUtils.isNotEmpty(permission.getComponent())) { - String component = permission.getComponent(); - if (component.startsWith(SymbolConstant.SINGLE_SLASH)) { - component = component.substring(1); - } - if (component.startsWith(PATH_VIEWS)) { - component = component.replaceFirst(PATH_VIEWS, ""); - } - if (component.startsWith(PATH_SRC_VIEWS)) { - component = component.replaceFirst(PATH_SRC_VIEWS, ""); - } - if (component.endsWith(VUE_SUFFIX)) { - component = component.replace(VUE_SUFFIX, ""); - } - permission.setComponent(component); - } - - // 请求URL - if (oConvertUtils.isNotEmpty(permission.getUrl())) { - String url = permission.getUrl(); - if (url.endsWith(VUE_SUFFIX)) { - url = url.replace(VUE_SUFFIX, ""); - } - if (!url.startsWith(CommonConstant.STR_HTTP) && !url.startsWith(SymbolConstant.SINGLE_SLASH)&&!url.trim().startsWith(SymbolConstant.DOUBLE_LEFT_CURLY_BRACKET)) { - url = SymbolConstant.SINGLE_SLASH + url; - } - permission.setUrl(url); - } - - // 一级菜单默认组件 - if (0 == permission.getMenuType() && oConvertUtils.isEmpty(permission.getComponent())) { - // 一级菜单默认组件 - permission.setComponent("layouts/RouteView"); - } - return permission; - } - - /** - * 如果没有index页面 需要new 一个放到list中 - * @param metaList - */ - public static void addIndexPage(List metaList) { - boolean hasIndexMenu = false; - SysRoleIndex defIndexCfg = PermissionDataUtil.getDefIndexConfig(); - for (SysPermission sysPermission : metaList) { - if(defIndexCfg.getUrl().equals(sysPermission.getUrl())) { - hasIndexMenu = true; - break; - } - } - if(!hasIndexMenu) { - metaList.add(0,new SysPermission(true)); - } - } + // 组件 + if (oConvertUtils.isNotEmpty(permission.getComponent())) { + String component = permission.getComponent(); + if (component.startsWith(SymbolConstant.SINGLE_SLASH)) { + component = component.substring(1); + } + if (component.startsWith(PATH_VIEWS)) { + component = component.replaceFirst(PATH_VIEWS, ""); + } + if (component.startsWith(PATH_SRC_VIEWS)) { + component = component.replaceFirst(PATH_SRC_VIEWS, ""); + } + if (component.endsWith(VUE_SUFFIX)) { + component = component.replace(VUE_SUFFIX, ""); + } + permission.setComponent(component); + } - /** - * 判断是否授权首页 - * @param metaList - * @return - */ - public static boolean hasIndexPage(List metaList, SysRoleIndex defIndexCfg){ - boolean hasIndexMenu = false; - for (SysPermission sysPermission : metaList) { - if(defIndexCfg.getUrl().equals(sysPermission.getUrl())) { - hasIndexMenu = true; - break; - } - } - return hasIndexMenu; - } + // 请求URL + if (oConvertUtils.isNotEmpty(permission.getUrl())) { + String url = permission.getUrl(); + if (url.endsWith(VUE_SUFFIX)) { + url = url.replace(VUE_SUFFIX, ""); + } + if (!url.startsWith(CommonConstant.STR_HTTP) && !url.startsWith(SymbolConstant.SINGLE_SLASH) && !url.trim().startsWith(SymbolConstant.DOUBLE_LEFT_CURLY_BRACKET)) { + url = SymbolConstant.SINGLE_SLASH + url; + } + permission.setUrl(url); + } - /** - * 通过id判断是否授权某个页面 - * - * @param metaList - * @return - */ - public static boolean hasMenuById(List metaList, String id) { - for (SysPermission sysPermission : metaList) { - if (id.equals(sysPermission.getId())) { - return true; - } - } - return false; - } + // 一级菜单默认组件 + if (0 == permission.getMenuType() && oConvertUtils.isEmpty(permission.getComponent())) { + // 一级菜单默认组件 + permission.setComponent("layouts/RouteView"); + } + return permission; + } - /** - * 获取默认首页配置 - */ - public static SysRoleIndex getDefIndexConfig() { - ISysRoleIndexService sysRoleIndexService = SpringContextUtils.getBean(ISysRoleIndexService.class); - return sysRoleIndexService.queryDefaultIndex(); - } + /** + * 如果没有index页面 需要new 一个放到list中 + * + * @param metaList + */ + public static void addIndexPage(List metaList) { + boolean hasIndexMenu = false; + SysRoleIndex defIndexCfg = PermissionDataUtil.getDefIndexConfig(); + for (SysPermission sysPermission : metaList) { + if (defIndexCfg.getUrl().equals(sysPermission.getUrl())) { + hasIndexMenu = true; + break; + } + } + if (!hasIndexMenu) { + metaList.add(0, new SysPermission(true)); + } + } + + /** + * 判断是否授权首页 + * + * @param metaList + * @return + */ + public static boolean hasIndexPage(List metaList, SysRoleIndex defIndexCfg) { + boolean hasIndexMenu = false; + for (SysPermission sysPermission : metaList) { + if (defIndexCfg.getUrl().equals(sysPermission.getUrl())) { + hasIndexMenu = true; + break; + } + } + return hasIndexMenu; + } + + /** + * 通过id判断是否授权某个页面 + * + * @param metaList + * @return + */ + public static boolean hasMenuById(List metaList, String id) { + for (SysPermission sysPermission : metaList) { + if (id.equals(sysPermission.getId())) { + return true; + } + } + return false; + } + + /** + * 获取默认首页配置 + */ + public static SysRoleIndex getDefIndexConfig() { + ISysRoleIndexService sysRoleIndexService = SpringContextUtils.getBean(ISysRoleIndexService.class); + return sysRoleIndexService.queryDefaultIndex(); + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java index 33344c0..1f0c380 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/RandImageUtil.java @@ -1,7 +1,8 @@ package org.jeecg.modules.system.util; -import javax.imageio.ImageIO; import jakarta.servlet.http.HttpServletResponse; + +import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; @@ -13,6 +14,7 @@ import java.util.Random; /** * 登录验证码工具类 + * * @author: jeecg-boot */ public class RandImageUtil { @@ -50,6 +52,7 @@ public class RandImageUtil { /** * 直接通过response 返回图片 + * * @param response * @param resultCode * @throws IOException @@ -62,6 +65,7 @@ public class RandImageUtil { /** * 生成base64字符串 + * * @param resultCode * @return * @throws IOException @@ -82,10 +86,10 @@ public class RandImageUtil { //写到指定位置 //ImageIO.write(bufferedImage, "png", new File("")); - return BASE64_PRE+base64; + return BASE64_PRE + base64; } - private static BufferedImage getImageBuffer(String resultCode){ + private static BufferedImage getImageBuffer(String resultCode) { // 在内存中创建图象 final BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/SecurityUtil.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/SecurityUtil.java index 4c74047..7d6f8d4 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/SecurityUtil.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/SecurityUtil.java @@ -11,36 +11,44 @@ import cn.hutool.crypto.symmetric.SymmetricCrypto; * @date: 2020年09月07日 14:26 */ public class SecurityUtil { - /**加密key*/ + /** + * 加密key + */ private static String key = "JEECGBOOT1423670"; //---AES加密---------begin--------- - /**加密 + + /** + * 加密 + * * @param content * @return */ public static String jiami(String content) { - SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes()); - String encryptResultStr = aes.encryptHex(content); - return encryptResultStr; + SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes()); + String encryptResultStr = aes.encryptHex(content); + return encryptResultStr; } - /**解密 + /** + * 解密 + * * @param encryptResultStr * @return */ - public static String jiemi(String encryptResultStr){ + public static String jiemi(String encryptResultStr) { SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes()); //解密为字符串 String decryptResult = aes.decryptStr(encryptResultStr, CharsetUtil.CHARSET_UTF_8); - return decryptResult; + return decryptResult; } //---AES加密---------end--------- + /** * 主函数 */ public static void main(String[] args) { - String content="test1111"; + String content = "test1111"; String encrypt = jiami(content); System.out.println(encrypt); //构建 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/XssUtils.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/XssUtils.java index 1fbb380..32e9c91 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/XssUtils.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/util/XssUtils.java @@ -12,30 +12,30 @@ import java.util.regex.Pattern; public class XssUtils { private static Pattern[] patterns = new Pattern[]{ - //Script fragments - Pattern.compile("", Pattern.CASE_INSENSITIVE), - //src='...' - Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), - Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), - //script tags - Pattern.compile("", Pattern.CASE_INSENSITIVE), - Pattern.compile("", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), - //eval(...) - Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), - //expression(...) - Pattern.compile("e­xpression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), - //javascript:... - Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE), - //vbscript:... - Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE), - //onload(...)=... - Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), + //Script fragments + Pattern.compile("", Pattern.CASE_INSENSITIVE), + //src='...' + Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), + Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), + //script tags + Pattern.compile("", Pattern.CASE_INSENSITIVE), + Pattern.compile("", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), + //eval(...) + Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), + //expression(...) + Pattern.compile("e­xpression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), + //javascript:... + Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE), + //vbscript:... + Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE), + //onload(...)=... + Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), }; public static String scriptXss(String value) { if (value != null) { value = value.replaceAll(" ", ""); - for(Pattern scriptPattern: patterns){ + for (Pattern scriptPattern : patterns) { value = scriptPattern.matcher(value).replaceAll(""); } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysCommentVO.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysCommentVO.java index 5388ce0..e00fa85 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysCommentVO.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysCommentVO.java @@ -58,7 +58,7 @@ public class SysCommentVO implements Serializable { */ @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") private String toUserId; - + /** * 评论id(允许为空,不为空时,则为回复) */ @@ -83,7 +83,7 @@ public class SysCommentVO implements Serializable { * 被回复消息人的头像 */ private String toUserAvatar; - + public SysCommentVO() { } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysDepartExportVo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysDepartExportVo.java index d647697..89a49f6 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysDepartExportVo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysDepartExportVo.java @@ -1,46 +1,71 @@ package org.jeecg.modules.system.vo; import lombok.Data; -import org.jeecg.common.aspect.annotation.Dict; import org.jeecgframework.poi.excel.annotation.Excel; @Data public class SysDepartExportVo { - /**部门路径*/ - @Excel(name="部门路径",width=50) + /** + * 部门路径 + */ + @Excel(name = "部门路径", width = 50) private String departNameUrl; - /**机构/部门名称*/ - @Excel(name="部门名称",width=50) + /** + * 机构/部门名称 + */ + @Excel(name = "部门名称", width = 50) private String departName; - /**id*/ + /** + * id + */ private String id; - /**父级id*/ + /** + * 父级id + */ private String parentId; - /**英文名*/ - @Excel(name="英文名",width=15) + /** + * 英文名 + */ + @Excel(name = "英文名", width = 15) private String departNameEn; - /**排序*/ - @Excel(name="排序",width=15) + /** + * 排序 + */ + @Excel(name = "排序", width = 15) private Integer departOrder; - /**描述*/ - @Excel(name="描述",width=15) + /** + * 描述 + */ + @Excel(name = "描述", width = 15) private String description; - /**机构类别 1=公司,2=组织机构,3=岗位*/ - @Excel(name="机构类别",width=15,dicCode="org_category") + /** + * 机构类别 1=公司,2=组织机构,3=岗位 + */ + @Excel(name = "机构类别", width = 15, dicCode = "org_category") private String orgCategory; - /**机构编码*/ - @Excel(name="机构编码",width=15) + /** + * 机构编码 + */ + @Excel(name = "机构编码", width = 15) private String orgCode; - /**手机号*/ - @Excel(name="手机号",width=15) + /** + * 手机号 + */ + @Excel(name = "手机号", width = 15) private String mobile; - /**传真*/ - @Excel(name="传真",width=15) + /** + * 传真 + */ + @Excel(name = "传真", width = 15) private String fax; - /**地址*/ - @Excel(name="地址",width=15) + /** + * 地址 + */ + @Excel(name = "地址", width = 15) private String address; - /**备注*/ - @Excel(name="备注",width=15) + /** + * 备注 + */ + @Excel(name = "备注", width = 15) private String memo; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysDepartUsersVO.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysDepartUsersVO.java index 79d201a..8bd9353 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysDepartUsersVO.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysDepartUsersVO.java @@ -1,32 +1,37 @@ package org.jeecg.modules.system.vo; +import lombok.Data; + import java.io.Serializable; import java.util.List; -import lombok.Data; - /** * @Description: 系统部门VO * @author: jeecg-boot */ @Data -public class SysDepartUsersVO implements Serializable{ - private static final long serialVersionUID = 1L; - - /**部门id*/ - private String depId; - /**对应的用户id集合*/ - private List userIdList; - public SysDepartUsersVO(String depId, List userIdList) { - super(); - this.depId = depId; - this.userIdList = userIdList; - } +public class SysDepartUsersVO implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 部门id + */ + private String depId; + /** + * 对应的用户id集合 + */ + private List userIdList; + + public SysDepartUsersVO(String depId, List userIdList) { + super(); + this.depId = depId; + this.userIdList = userIdList; + } //update-begin--Author:kangxiaolin Date:20190908 for:[512][部门管理]点击添加已有用户失败修复-------------------- - public SysDepartUsersVO(){ + public SysDepartUsersVO() { - } + } //update-begin--Author:kangxiaolin Date:20190908 for:[512][部门管理]点击添加已有用户失败修复-------------------- } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserOnlineVO.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserOnlineVO.java index cb5654b..d15dad6 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserOnlineVO.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserOnlineVO.java @@ -1,16 +1,13 @@ package org.jeecg.modules.system.vo; -import java.util.Date; - +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; import org.jeecg.common.aspect.annotation.Dict; import org.springframework.format.annotation.DateTimeFormat; -import com.fasterxml.jackson.annotation.JsonFormat; - -import lombok.Data; +import java.util.Date; /** - * * @Author: chenli * @Date: 2020-06-07 * @Version: V1.0 diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserPositionVo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserPositionVo.java index 90894ca..091c9d9 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserPositionVo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserPositionVo.java @@ -3,20 +3,25 @@ package org.jeecg.modules.system.vo; import lombok.Data; /** -* @Description: 用户职位实体类 -* -* @author: wangshuai -* @date: 2023/6/14 16:41 -*/ + * @Description: 用户职位实体类 + * @author: wangshuai + * @date: 2023/6/14 16:41 + */ @Data public class SysUserPositionVo { - - /**职位id*/ + + /** + * 职位id + */ private String id; - /**职务名称*/ + /** + * 职务名称 + */ private String name; - - /**用户id*/ + + /** + * 用户id + */ private String userId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserRoleVO.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserRoleVO.java index a914792..700f9ab 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserRoleVO.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserRoleVO.java @@ -10,22 +10,26 @@ import java.util.List; * @author: jeecg-boot */ @Data -public class SysUserRoleVO implements Serializable{ - private static final long serialVersionUID = 1L; +public class SysUserRoleVO implements Serializable { + private static final long serialVersionUID = 1L; - /**部门id*/ - private String roleId; - /**对应的用户id集合*/ - private List userIdList; + /** + * 部门id + */ + private String roleId; + /** + * 对应的用户id集合 + */ + private List userIdList; - public SysUserRoleVO() { - super(); - } + public SysUserRoleVO() { + super(); + } - public SysUserRoleVO(String roleId, List userIdList) { - super(); - this.roleId = roleId; - this.userIdList = userIdList; - } + public SysUserRoleVO(String roleId, List userIdList) { + super(); + this.roleId = roleId; + this.userIdList = userIdList; + } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserTenantVo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserTenantVo.java index d5393c7..7ad50c5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserTenantVo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/SysUserTenantVo.java @@ -30,26 +30,26 @@ public class SysUserTenantVo { * 工号 */ private String workNo; - + /** * 邮箱 */ - private String email; - + private String email; + /** * 手机号 */ - private String phone; - + private String phone; + /** * 头像 */ - private String avatar; - + private String avatar; + /** * 职位 */ - @Dict(dictTable ="sys_position",dicText = "name",dicCode = "id") + @Dict(dictTable = "sys_position", dicText = "name", dicCode = "id") private String post; /** @@ -97,7 +97,7 @@ public class SysUserTenantVo { */ @Dict(dicCode = "trade") private String trade; - + /** * 门牌号 */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/UserAvatar.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/UserAvatar.java index d8c55f8..25da24b 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/UserAvatar.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/UserAvatar.java @@ -4,23 +4,25 @@ import lombok.Data; import org.jeecg.modules.system.entity.SysUser; /** - * 用户名和头像信息 + * 用户名和头像信息 + * * @Author taoYan * @Date 2022/8/8 17:06 **/ @Data public class UserAvatar { - + private String id; - + private String realname; - + private String avatar; - - public UserAvatar(){ - + + public UserAvatar() { + } - public UserAvatar(SysUser sysUser){ + + public UserAvatar(SysUser sysUser) { this.id = sysUser.getId(); this.realname = sysUser.getRealname(); this.avatar = sysUser.getAvatar(); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/AppExportUserVo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/AppExportUserVo.java index 0544334..4f4dccc 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/AppExportUserVo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/AppExportUserVo.java @@ -6,43 +6,58 @@ import org.jeecgframework.poi.excel.annotation.Excel; import java.util.Date; /** -* @Description: 应用用户与部门 用户导出/导入实体类 -* -* @author: wangshuai -* @date: 2023/6/14 16:42 -*/ + * @Description: 应用用户与部门 用户导出/导入实体类 + * @author: wangshuai + * @date: 2023/6/14 16:42 + */ @Data public class AppExportUserVo { - /**用户编号*/ - @Excel(name="用户编号",width=30) + /** + * 用户编号 + */ + @Excel(name = "用户编号", width = 30) private String id; - /**姓名*/ - @Excel(name="姓名",width=30) + /** + * 姓名 + */ + @Excel(name = "姓名", width = 30) private String realname; - - /**职位*/ - @Excel(name = "职位",width = 30) + + /** + * 职位 + */ + @Excel(name = "职位", width = 30) private String position; - /**部门*/ - @Excel(name = "部门",width = 30) + /** + * 部门 + */ + @Excel(name = "部门", width = 30) private String depart; - /**工号*/ - @Excel(name = "工号",width = 30) + /** + * 工号 + */ + @Excel(name = "工号", width = 30) private String workNo; - - /**手机号*/ - @Excel(name = "手机号",width = 30) + + /** + * 手机号 + */ + @Excel(name = "手机号", width = 30) private String phone; - - /**邮箱*/ - @Excel(name = "邮箱",width = 30) + + /** + * 邮箱 + */ + @Excel(name = "邮箱", width = 30) private String email; - /**加入时间*/ - @Excel(name = "加入时间",width = 30, format = "yyyy-MM-dd") + /** + * 加入时间 + */ + @Excel(name = "加入时间", width = 30, format = "yyyy-MM-dd") private Date createTime; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/DepartAndUserInfo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/DepartAndUserInfo.java index 7d45f4a..c59bdb1 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/DepartAndUserInfo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/DepartAndUserInfo.java @@ -9,15 +9,16 @@ import java.util.List; /** * 用户或者部门的信息 * 用于 成员与部门 的搜索 + * * @Author taoYan * @Date 2022/12/30 10:47 **/ @Data public class DepartAndUserInfo implements Serializable { private static final long serialVersionUID = 1L; - + List userList; - + List departList; - + } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/ExportDepartVo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/ExportDepartVo.java index 4164be6..3ad6ff9 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/ExportDepartVo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/ExportDepartVo.java @@ -5,14 +5,22 @@ import org.jeecgframework.poi.excel.annotation.Excel; @Data public class ExportDepartVo { - /**部门路径*/ - @Excel(name="部门路径",width=50) + /** + * 部门路径 + */ + @Excel(name = "部门路径", width = 50) private String departNameUrl; - /**机构/部门名称*/ - @Excel(name="部门名称",width=50) + /** + * 机构/部门名称 + */ + @Excel(name = "部门名称", width = 50) private String departName; - /**id*/ + /** + * id + */ private String id; - /**父级id*/ + /** + * 父级id + */ private String parentId; } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/SysDictVo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/SysDictVo.java index c9dfdf7..5382f71 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/SysDictVo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/SysDictVo.java @@ -3,7 +3,6 @@ package org.jeecg.modules.system.vo.lowapp; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; -import org.jeecg.modules.system.entity.SysDict; import org.jeecg.modules.system.entity.SysDictItem; import java.util.List; @@ -30,7 +29,7 @@ public class SysDictVo { * 应用id */ private String lowAppId; - + /** * 租户ID */ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/UpdateDepartInfo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/UpdateDepartInfo.java index 7f48342..6fd87cc 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/UpdateDepartInfo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/lowapp/UpdateDepartInfo.java @@ -11,20 +11,20 @@ import java.util.List; **/ @Data public class UpdateDepartInfo { - + private String departId; - + private String departName; - + private String parentId; - + private Boolean hasSub; - - public UpdateDepartInfo(){ - + + public UpdateDepartInfo() { + } - public UpdateDepartInfo(SysDepart depart){ + public UpdateDepartInfo(SysDepart depart) { this.departId = depart.getId(); this.departName = depart.getDepartName(); this.parentId = depart.getParentId(); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantDepartAuthInfo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantDepartAuthInfo.java index 70349ab..85b8c21 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantDepartAuthInfo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantDepartAuthInfo.java @@ -7,6 +7,7 @@ import java.util.List; /** * 进入租户组织页面 查询租户信息及操作权限 + * * @Author taoYan * @Date 2023/2/16 16:18 **/ @@ -32,5 +33,5 @@ public class TenantDepartAuthInfo { * 租户产品包 编码(这个编码只有3个admin产品包有,便于区分) */ private List packCodes; - + } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackAuth.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackAuth.java index 234ef94..4384cf2 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackAuth.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackAuth.java @@ -4,6 +4,7 @@ import lombok.Data; /** * 租户产品包 关联权限详情 + * * @Author taoYan * @Date 2023/2/16 21:02 **/ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackModel.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackModel.java index 9198bcc..b2d6beb 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackModel.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackModel.java @@ -6,7 +6,8 @@ import java.util.List; /** * 租户产品包信息 - * 包括+ 用户信息 + 权限信息 + * 包括+ 用户信息 + 权限信息 + * * @Author taoYan * @Date 2023/2/16 21:01 **/ @@ -46,11 +47,11 @@ public class TenantPackModel { * 状态 正常状态1 申请状态0 */ private Integer packUserStatus; - - public Integer getPackUserStatus(){ - if(packUserStatus==null){ + + public Integer getPackUserStatus() { + if (packUserStatus == null) { return 1; } - return packUserStatus; + return packUserStatus; } } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackUser.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackUser.java index 684cb84..42bfa70 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackUser.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackUser.java @@ -7,6 +7,7 @@ import java.util.Set; /** * 用户产品包 关联的用户信息 + * * @Author taoYan * @Date 2023/2/16 21:02 **/ @@ -16,13 +17,13 @@ public class TenantPackUser { * 用户ID */ private String id; - + private String username; - + private String realname; - + private String avatar; - + private String phone; /** @@ -44,17 +45,17 @@ public class TenantPackUser { * 租户产品包ID */ private String packId; - - public void addDepart(String name){ - if(departNames==null){ + + public void addDepart(String name) { + if (departNames == null) { departNames = new HashSet<>(); } departNames.add(name); } - public void addPosition(String name){ - if(positionNames==null){ + public void addPosition(String name) { + if (positionNames == null) { positionNames = new HashSet<>(); } positionNames.add(name); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackUserCount.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackUserCount.java index 6b8b2d7..52506c0 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackUserCount.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/TenantPackUserCount.java @@ -4,6 +4,7 @@ import lombok.Data; /** * 用于统计 租户产品包的人员数量 + * * @Author taoYan * @Date 2023/2/16 15:59 **/ @@ -19,5 +20,5 @@ public class TenantPackUserCount { * 用户数量 */ private String userCount; - + } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/UserDepart.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/UserDepart.java index 4ba9e37..11ca756 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/UserDepart.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/UserDepart.java @@ -4,6 +4,7 @@ import lombok.Data; /** * 用户与部门信息 + * * @Author taoYan * @Date 2023/2/17 10:10 **/ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/UserPosition.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/UserPosition.java index d4a1d8b..936fca4 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/UserPosition.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/tenant/UserPosition.java @@ -4,6 +4,7 @@ import lombok.Data; /** * 用户与职位信息 + * * @Author taoYan * @Date 2023/2/17 10:10 **/ diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JdtDepartmentTreeVo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JdtDepartmentTreeVo.java index 9726ca8..54f2517 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JdtDepartmentTreeVo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JdtDepartmentTreeVo.java @@ -52,7 +52,7 @@ public class JdtDepartmentTreeVo extends Department { Optional departmentOptional = allDepartment.stream().filter(item -> item.getParent_id() == null).findAny(); Department department = new Department(); //判断是否找到数据 - if(departmentOptional.isPresent()){ + if (departmentOptional.isPresent()) { department = departmentOptional.get(); } getChildrenRecursion(treeList, allDepartment); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JwDepartmentTreeVo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JwDepartmentTreeVo.java index d7d3de1..81d4ec5 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JwDepartmentTreeVo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JwDepartmentTreeVo.java @@ -52,7 +52,7 @@ public class JwDepartmentTreeVo extends Department { Optional departmentOptional = allDepartment.stream().filter(item -> "0".equals(item.getParentid())).findAny(); Department department = new Department(); //判断是否找到数据 - if(departmentOptional.isPresent()){ + if (departmentOptional.isPresent()) { department = departmentOptional.get(); } getChildrenRecursion(treeList, allDepartment); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JwUserDepartVo.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JwUserDepartVo.java index defb472..1715662 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JwUserDepartVo.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/system/vo/thirdapp/JwUserDepartVo.java @@ -3,14 +3,13 @@ package org.jeecg.modules.system.vo.thirdapp; import lombok.Data; /** -* @Description: 企业微信用户同步工具类 -* -* @author: wangshuai -* @date: 2023/11/28 18:17 -*/ + * @Description: 企业微信用户同步工具类 + * @author: wangshuai + * @date: 2023/11/28 18:17 + */ @Data public class JwUserDepartVo { - + /** * 用户id */