pull/8/head
Yin 3 months ago
parent e4261ae2ef
commit 6d9a5088f8

@ -8,8 +8,28 @@ import java.lang.annotation.Target;
/**
*
*/
/**
* @APPLoginUserAPP
* @Target(ElementType.PARAMETER) APP
* @Retention(RetentionPolicy.RUNTIME) 使 APP
*/
// @Target 注解用于明确此自定义注解可以应用的元素类型,这里指定为 ElementType.PARAMETER表明它只能被用在方法参数上
// 以便在代码中清晰地标识出哪些参数承载了 APP 登录用户的相关信息,方便后续统一处理与 APP 登录用户相关的业务逻辑。
@Target(ElementType.PARAMETER)
// @Retention 注解用来定义注解的保留期限和可见性阶段,将其设置为 RetentionPolicy.RUNTIME表示该注解在程序运行期间依然有效且可被获取
// 这对于在运行时根据是否存在该注解以及其相关属性(若有定义)来动态地执行如权限判断、数据筛选等和 APP 登录用户紧密相关的操作是非常关键的。
@Retention(RetentionPolicy.RUNTIME)
// 定义了 @APPLoginUser 这个注解,当前它没有定义任何成员变量(属性),不过如果业务需要,可以后续添加属性来传递更多关于 APP 登录用户的详细情况,
// 例如 APP 用户的登录来源、所属平台版本等信息,以更好地适配复杂的业务场景和多样化的处理需求。
public @interface APPLoginUser {
}

@ -5,9 +5,31 @@ import java.lang.annotation.*;
/**
* Token
*/
/**
* @IgnoreAuthToken
* @Target(ElementType.METHOD) Token
* @Retention(RetentionPolicy.RUNTIME) Token访访
* @Documented JavaDoc便便Token
*/
// @Target 注解用于指定此自定义注解能够应用的元素类型,这里将其设置为 ElementType.METHOD限定了 @IgnoreAuth 注解只能被放置在方法声明处,
// 以此清晰地标识出哪些具体的方法需要忽略Token验证操作便于代码的阅读者和维护者快速知晓方法的特殊验证要求。
@Target(ElementType.METHOD)
// @Retention 注解规定了注解的保留策略,此处设为 RetentionPolicy.RUNTIME表明该注解在程序运行时依然可以被获取到
// 借助Java的反射机制在运行期间可以检查方法上是否存在这个注解进而依据其存在与否来决定是否执行Token验证逻辑使其能够灵活地控制方法的验证行为。
@Retention(RetentionPolicy.RUNTIME)
// @Documented 注解的作用是让这个自定义注解在生成JavaDoc文档时被包含进去使得在查看文档时能够看到哪些方法使用了该注解
// 有助于开发人员理解方法在验证方面的特殊处理情况,增强代码文档化程度,方便团队成员之间对代码功能尤其是涉及验证逻辑部分的沟通和理解。
@Documented
// 定义了 @IgnoreAuth 这个注解当前它没有定义自身的成员变量属性不过若业务场景有更复杂的需求例如可以添加属性来指定忽略Token验证的具体条件、适用范围等信息以更精细地控制验证的忽略情况。
public @interface IgnoreAuth {
}

@ -8,8 +8,25 @@ import java.lang.annotation.Target;
/**
*
*/
/**
* @LoginUserJavaWeb
* 便
* @Target ElementType.PARAMETER @Retention RetentionPolicy.RUNTIME
*
*/
// @Target 注解用于指定该自定义注解可以应用的目标元素类型,这里指定为 ElementType.PARAMETER表示此注解只能用于方法参数上
// 意味着它可以标记那些在方法中接收登录用户信息的参数,以便框架或者其他相关代码能识别并处理这些参数。
@Target(ElementType.PARAMETER)
// @Retention 注解用于定义该注解的保留策略,即规定注解在什么阶段是可见可用的,这里设置为 RetentionPolicy.RUNTIME表示在运行时该注解信息仍然保留
// 可以通过Java的反射机制在运行期间获取到该注解及其属性值等信息常用于根据注解来动态执行一些业务逻辑的场景。
@Retention(RetentionPolicy.RUNTIME)
// 定义了一个名为 @LoginUser 的注解,此注解本身没有定义成员变量(属性),如果后续有需要,也可以添加属性来传递更多关于登录用户相关的配置信息等,比如用户角色、权限级别等相关限定信息。
public @interface LoginUser {
}

@ -5,19 +5,61 @@ import java.util.List;
import java.util.Map;
/**
*
*
*
*/
public interface CommonDao{
/**
* params
* params Map<String, Object>
*
* List<String>
* @param params
* @return
*/
List<String> getOption(Map<String, Object> params);
/**
* params Map
* params Map<String, Object>
* Map<String, Object>
* @param params
* @return Map
*/
Map<String, Object> getFollowByOption(Map<String, Object> params);
/**
* getFollowByOption params List<String>
* params
* @param params
* @return
*/
List<String> getFollowByOption2(Map<String, Object> params);
/**
* sh
* params
* @param params
*/
void sh(Map<String, Object> params);
/**
* params
* params Map<String, Object>
* int
* @param params
* @return
*/
int remindCount(Map<String, Object> params);
/**
* params selectCal
* Map<String, Object>
* @param params
* @return Map
*/
Map<String, Object> selectCal(Map<String, Object> params);
/**
tableName
@ -25,26 +67,77 @@ public interface CommonDao{
condition1Value 1
average
* */
/**
* paramstableNamecondition1 condition1Value
* average Map<String, Object>
* params
* @param params
* @return Map
*/
Map<String, Object> queryScore(Map<String, Object> params);
/**
* params
* Map<String, Object> List<Map<String, Object>> Map
*
* @param params
* @return Map
*/
List<Map<String, Object>> selectGroup(Map<String, Object> params);
List<Map<String, Object>> selectValue(Map<String, Object> params);
/**
* params
* Map<String, Object> List<Map<String, Object>> Map
*
* @param params
* @return Map
*/
List<Map<String, Object>> selectValue(Map<String, Object> params);
/**
* chartBoth
* params
* Map<String, Object> List<Map<String, Object>>
* Map
* @param params
* @return
*/
List<Map<String, Object>> chartBoth(Map<String, Object> params);
/**
* chartBoth
* params Map<String, Object> List<Map<String, Object>>
* Map
* @param params
* @return
*/
List<Map<String, Object>> chartOne(Map<String, Object> params);
/**
*
*/
/**
*
*
*/
/**
*
* @param params
* @return
*/
/**
*
* params Map<String, Object>
*
* List<Map<String, Object>> Map
* 便
* @param params
* @return Map
*/
List<Map<String, Object>> newSelectGroupSum(Map<String, Object> params);
/**
@ -52,6 +145,16 @@ public interface CommonDao{
* @param params
* @return
*/
/**
*
* paramsMap<String, Object>
* params
* List<Map<String, Object>> Map
* 使
* @param params
* @return Map
*/
List<Map<String, Object>> newSelectGroupCount(Map<String, Object> params);
@ -60,6 +163,16 @@ public interface CommonDao{
* @param params
* @return
*/
/**
*
* Map<String, Object> params
*
* List<Map<String, Object>> Map
* 便
* @param params
* @return Map
*/
List<Map<String, Object>> newSelectDateGroupSum(Map<String, Object> params);
/**
@ -67,6 +180,15 @@ public interface CommonDao{
* @param params
* @return
*/
/**
*
* Map<String, Object> params params
* List<Map<String, Object>> Map
* 便使
* @param params
* @return Map
*/
List<Map<String, Object>> newSelectDateGroupCount(Map<String, Object> params);
/**
@ -74,6 +196,22 @@ public interface CommonDao{
* @param params
* @return
*/
/**
*
*
* int
*/
/**
*
* Map<String, Object> params
* params
*
* int
* @param params
* @return
*/
int plusCloumNumber(Map<String, Object> params);
/**
@ -81,6 +219,15 @@ public interface CommonDao{
* @param params
* @return
*/
/**
*
* Map<String, Object> params
* params
* int
* @param params
* @return
*/
int reduceCloumNumber(Map<String, Object> params);
/**
@ -88,6 +235,15 @@ public interface CommonDao{
* @param params
* @return
*/
/**
*
* Map<String, Object> params params
*
* int
* @param params
* @return
*/
int updateCloumValue(Map<String, Object> params);
@ -138,6 +294,24 @@ public interface CommonDao{
* @param params
* @return
*/
/**
*
*
* Map<String, Object> 便
*/
/**
*
* Map<String, Object> params
*
*
* List<Map<String, Object>> Map
*
*
* @param params
* @return Map
*/
List<Map<String, Object>> barSum(Map<String, Object> params);
/**
@ -145,6 +319,17 @@ public interface CommonDao{
* @param params
* @return
*/
/**
*
* Map<String, Object> params params
*
* List<Map<String, Object>> Map
*
*
* @param params
* @return Map便
*/
List<Map<String, Object>> barCount(Map<String, Object> params);

@ -4,49 +4,76 @@ package com.entity;
/**
*
*/
// 定义了一个名为EIException的自定义异常类它继承自RuntimeException这意味着它属于运行时异常
// 在程序运行期间出现问题时可以抛出该异常,并且不需要在方法声明中显式地使用 throws 关键字来声明可能抛出此异常,方便处理运行阶段突发的错误情况。
public class EIException extends RuntimeException {
// 序列化版本号,用于在对象序列化和反序列化过程中保证版本的一致性和兼容性。
// 此处定义为1L一般在类结构没有发生改变的情况下保持不变若类的成员变量等结构有变动可能需要相应地更新该版本号。
private static final long serialVersionUID = 1L;
private String msg;
private int code = 500;
public EIException(String msg) {
// 用于存储异常的详细描述信息也就是具体的错误消息内容通过不同的构造方法进行赋值后续可通过对应的get方法获取该消息以知晓具体的异常原因。
private String msg;
// 用于表示该异常对应的错误代码默认值被初始化为500可用于在系统中区分不同类型的异常情况
// 例如在与前端交互或者日志记录时,依据这个代码能快速定位和辨别具体的异常类别,进而采取相应的处理措施。
private int code = 500;
// 构造方法接受一个字符串类型的msg参数用于创建EIException异常实例。
// 此构造方法调用父类RuntimeException的构造函数将传入的msg传递给父类同时将该msg赋值给当前类的msg属性
// 便于后续获取具体的异常消息,适用于只需简单传递异常消息的场景。
public EIException(String msg) {
super(msg);
this.msg = msg;
}
// 构造方法接受一个字符串类型的msg参数和一个Throwable类型的e参数。
// 它调用父类RuntimeException的对应构造函数把msg和e传递给父类并且将msg赋值给当前类的msg属性
// 这样既能传递详细的异常消息又能关联引发当前异常的其他异常通过e传入有助于在异常链中追溯异常产生的根源。
public EIException(String msg, Throwable e) {
super(msg, e);
this.msg = msg;
}
// 构造方法接受一个字符串类型的msg参数和一个整型的code参数。
// 调用父类RuntimeException的构造函数传递msg然后将msg赋值给当前类的msg属性同时将传入的code赋值给当前类的code属性
// 以此创建一个带有自定义错误代码的异常实例,方便更精准地标识异常类型,除传递异常消息外,通过错误代码可做进一步的区分和处理。
public EIException(String msg, int code) {
super(msg);
this.msg = msg;
this.code = code;
}
// 构造方法接受一个字符串类型的msg参数、一个整型的code参数以及一个Throwable类型的e参数。
// 调用父类RuntimeException的对应构造函数传递msg、e给父类同时将msg赋值给当前类的msg属性把code赋值给当前类的code属性
// 综合了传递异常消息、设置自定义错误代码以及关联引发异常的其他异常等功能,提供了一种较为全面的异常创建方式。
public EIException(String msg, int code, Throwable e) {
super(msg, e);
this.msg = msg;
this.code = code;
}
// 获取异常消息的方法外部代码可以调用此方法来获取在创建EIException实例时设置的异常消息内容从而了解具体的异常详情。
public String getMsg() {
return msg;
}
// 设置异常消息的方法,可用于在某些特定场景下(虽然相对不常见)动态修改异常消息的内容,比如根据后续的业务逻辑调整异常提示信息等。
public void setMsg(String msg) {
this.msg = msg;
}
// 获取异常对应的错误代码的方法外部代码通过调用此方法能获取当前EIException实例所代表的异常对应的错误代码
// 便于根据该代码实施不同的错误处理逻辑,例如向客户端返回不同的错误提示等操作。
public int getCode() {
return code;
}
// 设置异常对应的错误代码的方法,可用于在需要根据运行时条件等因素动态调整错误代码的情况下,对错误代码进行重新设定。
public void setCode(int code) {
this.code = code;
}
}

@ -23,52 +23,112 @@ import com.utils.R;
/**
* (Token)
*/
/**
* TokenHandlerInterceptorWeb
* Token访访
* Spring@Component便Spring
*
* @IgnoreAuthToken
*/
// 使用@Component注解将该类标记为Spring框架中的一个组件意味着Spring容器会对其进行管理
// 可以自动扫描并实例化这个类使其能够在整个Web应用的请求处理流程中发挥作用参与到权限验证等相关环节。
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
// 定义了一个公共的静态常量字符串用于表示在请求头中存放Token的键名方便在整个类中统一使用该名称来获取请求头中的Token信息保持代码的一致性和可读性。
public static final String LOGIN_TOKEN_KEY = "Token";
// 使用@Autowired注解进行依赖注入将TokenService的实例注入到当前类中
// TokenService大概率是用于处理与Token相关的业务逻辑比如验证Token的有效性、解析Token获取用户信息等操作以此来辅助完成权限验证的功能。
@Autowired
private TokenService tokenService;
/**
* HandlerInterceptor
* truefalse
*
* @param request HttpServletRequest
* @param response HttpServletResponse
* @param handler
* @throws Exception Token
* @return truefalse
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 获取当前请求的Servlet路径用于后续判断请求是否属于特定的不需要进行权限验证的路径通过与已知的特定路径进行对比来决定是否直接放行请求。
String servletPath = request.getServletPath();
// 判断请求路径是否为字典表相关页面("/dictionary/page")、文件上传("/file/upload")或者用户注册("/yonghu/register")路径,
// 如果是这些特定的路径之一则直接放行请求不需要进行后续的权限验证操作返回true表示允许请求继续执行后续的业务逻辑。
if("/dictionary/page".equals(request.getServletPath()) || "/file/upload".equals(request.getServletPath()) || "/yonghu/register".equals(request.getServletPath()) ){//请求路径是字典表或者文件上传 直接放行
return true;
}
//支持跨域请求
// 设置跨域请求相关的响应头信息,以下这些设置用于支持浏览器的跨域请求操作,使得不同域名下的前端应用能够正常访问当前后端服务提供的接口。
// 设置允许的请求方法这里允许POST、GET、OPTIONS、DELETE等常见的请求方法进行跨域请求告知浏览器本服务端支持这些跨域请求方式。
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
// 设置跨域请求的缓存时间单位这里设置为3600秒意味着在这个时间段内浏览器对于相同的跨域请求可以直接使用缓存结果减少不必要的重复请求提高性能。
response.setHeader("Access-Control-Max-Age", "3600");
// 设置是否允许跨域请求携带凭证如Cookie等这里设置为true表示允许跨域请求携带相关凭证信息方便进行基于用户登录状态等的跨域交互。
response.setHeader("Access-Control-Allow-Credentials", "true");
// 设置允许的请求头信息这里列举了一系列常见的请求头以及本应用中用于权限验证等相关的特定请求头如Token等告知浏览器跨域请求时可以携带这些请求头信息
// 以便服务端能够正确获取到相关的请求参数进行后续的业务处理,比如验证权限、获取请求来源等操作。
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
// 设置允许的跨域请求来源通过获取请求头中的Origin信息并设置到响应头中允许来自该来源的跨域请求实现了根据实际请求来源动态配置跨域允许的功能。
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
// 声明一个IgnoreAuth类型的注解变量用于后续判断被拦截的请求对应的方法上是否标注了 @IgnoreAuth 注解,
// 如果标注了该注解,则意味着该方法对应的请求不需要进行权限验证,可直接放行。
IgnoreAuth annotation;
// 判断handler对象是否是HandlerMethod类型HandlerMethod表示的是一个被Spring MVC解析后的处理请求的方法对象
// 如果是这种类型,说明可以获取到方法上的注解信息,进而判断是否有 @IgnoreAuth 注解;如果不是这种类型,说明可能不是常规的方法处理请求,直接放行请求。
if (handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
} else {
return true;
}
//从header中获取token
// 从请求的Header中获取名为Token的信息该Token是后续进行权限验证的关键依据会传递给注入的TokenService进行有效性验证等相关操作
// 以此来判断当前请求是否来自合法的、已登录并有权限的用户。
String token = request.getHeader(LOGIN_TOKEN_KEY);
/**
*
*/
// 判断当前请求对应的方法上是否标注了 @IgnoreAuth 注解,如果 annotation 不为空,说明该方法被标记为无需进行权限验证,
// 那么直接放行该请求,允许其继续执行后续的业务逻辑,返回 true 表示放行。
if(annotation!=null) {
return true;
}
// 声明一个 TokenEntity 类型的变量 tokenEntity并初始化为 null后续会根据获取到的 token 信息尝试从 tokenService 中获取对应的 Token 实体信息,
// TokenEntity 大概率包含了与用户登录状态、权限等相关的属性比如用户ID、角色、所属表名、用户名等用于进一步判断用户的合法性及权限情况。
TokenEntity tokenEntity = null;
// 检查从请求头中获取到的 token 字符串是否不为空(通过 StringUtils.isNotBlank 方法判断),如果不为空,说明请求携带了 Token 信息,
// 则调用注入的 tokenService 的 getTokenEntity 方法,尝试根据这个 token 去获取对应的 Token 实体对象,以便后续进行更多的验证及用户信息设置操作。
if(StringUtils.isNotBlank(token)) {
tokenEntity = tokenService.getTokenEntity(token);
}
// 判断获取到的 TokenEntity 是否不为空,若不为空,说明通过 Token 验证成功获取到了对应的用户相关信息,
// 此时将用户的关键信息如用户ID、角色、表名、用户名等设置到当前请求的 Session 中,方便在后续的请求处理过程中可以直接从 Session 里获取这些用户信息,
// 例如在其他业务逻辑中用于权限判断、数据筛选等操作,设置完相关信息后,放行该请求,返回 true 表示允许请求继续执行后续的业务逻辑。
if(tokenEntity != null) {
request.getSession().setAttribute("userId", tokenEntity.getUserid());
request.getSession().setAttribute("role", tokenEntity.getRole());
@ -76,19 +136,34 @@ public class AuthorizationInterceptor implements HandlerInterceptor {
request.getSession().setAttribute("username", tokenEntity.getUsername());
return true;
}
// 创建一个 PrintWriter 对象,用于向客户端(通常是浏览器)输出响应内容,这里后续会输出一个表示未登录的错误提示信息,以 JSON 格式返回给客户端,告知用户需要先登录才能访问相应资源。
PrintWriter writer = null;
// 设置响应的字符编码为 "UTF-8",确保返回给客户端的中文等字符信息能够正确显示,避免出现乱码问题,这是处理响应内容编码的常见设置。
response.setCharacterEncoding("UTF-8");
// 设置响应的内容类型为 "application/json; charset=utf-8",表明返回给客户端的数据格式是 JSON 格式,并且字符编码采用 "UTF-8"
// 这样客户端(如前端应用中的 JavaScript 代码等)在接收到响应后可以按照 JSON 格式进行解析处理,获取到相应的错误提示信息。
response.setContentType("application/json; charset=utf-8");
try {
// 获取响应的输出流对象 writer用于向客户端写入响应内容通过调用 response.getWriter() 方法来获取,后续可以使用这个 writer 对象输出相应的 JSON 格式的错误提示信息。
writer = response.getWriter();
// 使用 JSONObject.toJSONString 方法将一个表示错误信息的对象(通过 R.error(401, "请先登录") 创建,推测 R 是一个用于统一封装返回结果的工具类)转换为 JSON 字符串,
// 然后通过 writer.print 方法将这个 JSON 字符串输出到客户端,向用户提示需要先登录,这里的错误码 401 通常代表未授权(在 HTTP 状态码语义中常用于表示需要用户认证的情况)。
writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
} finally {
// 在 finally 块中进行资源释放操作,判断 writer 对象是否不为空,如果不为空,说明之前成功获取到了输出流对象,
// 则调用 writer.close() 方法关闭输出流,释放相关资源,避免出现资源泄漏等问题,确保程序的稳定性和性能。
if(writer != null){
writer.close();
}
}
// 此处原本可能是要抛出一个自定义的 EIException 异常来表示未登录情况(从注释掉的代码推测),异常信息为 "请先登录",错误码为 401
// 不过当前代码采用了直接向客户端返回 JSON 格式错误提示信息并返回 false 来拦截请求的方式,而不是抛出异常(可能基于不同的错误处理策略考虑)。
// throw new EIException("请先登录", 401);
// 返回 false表示拦截该请求不允许其继续执行后续的业务逻辑因为前面验证发现用户未登录没有合法的权限访问相应资源通过返回 false 来阻断请求的进一步处理。
return false;
}
}

@ -7,25 +7,61 @@ import com.baomidou.mybatisplus.enums.IEnum;
/**
* IEnum spring-mybatis.xml typeEnumsPackage
*/
/**
* enum IEnum
* 便使 spring-mybatis.xml typeEnumsPackage
* 使便使
*/
// 定义了一个名为 TypeEnum 的枚举类型,它实现了 IEnum 接口,意味着该枚举需要遵循 IEnum 接口定义的规范来实现相关方法,
// 通常这样做是为了在某些框架(如 MyBatis 等)中能更方便地进行枚举类型的处理,例如数据库字段与枚举值的映射等操作。
public enum TypeEnum implements IEnum {
// 定义了枚举的第一个常量 DISABLED其对应的值为 0描述信息为 "禁用"
// 在业务场景中可以用于表示某个对象处于禁用状态,比如用户账号禁用、功能模块禁用等情况,通过这个枚举常量可以清晰地传达该状态含义以及对应的数值表示。
DISABLED(0, "禁用"),
// 定义了枚举的第二个常量 NORMAL其对应的值为 1描述信息为 "正常"
// 同样在业务中可用于表示正常可用的状态,像用户账号正常、系统功能正常运行等情况,方便通过统一的枚举类型来区分不同的业务状态。
NORMAL(1, "正常");
// 定义了一个私有 final 类型的整型变量 value用于存储当前枚举常量对应的整数值
// 这个值在构造函数中进行初始化,并且在后续通过实现 IEnum 接口的 getValue 方法返回,可用于与数据库字段等进行值的映射操作。
private final int value;
// 定义了一个私有 final 类型的字符串变量 desc用于存储当前枚举常量对应的中文描述信息
// 方便在需要展示给用户或者在代码中以更直观的方式体现该枚举常量含义时使用,例如在生成 JSON 数据返回给前端时展示对应的中文描述。
private final String desc;
// 枚举类型的构造函数,用于初始化每个枚举常量的 value 和 desc 属性,
// 通过传入的参数来为当前枚举常量赋予对应的整数值和中文描述,确保每个枚举常量都有明确的数值表示和含义描述。
TypeEnum(final int value, final String desc) {
this.value = value;
this.desc = desc;
}
// 实现 IEnum 接口中定义的 getValue 方法该方法要求返回一个可序列化Serializable的值
// 在这里返回的就是当前枚举常量对应的整数值this.value这个值可以在一些数据持久化、数据传输等场景下作为具体的枚举值进行传递和存储
// 例如在将枚举类型数据保存到数据库字段时,会调用这个方法获取对应的数值进行存储。
@Override
public Serializable getValue() {
return this.value;
}
// Jackson 注解为 JsonValue 返回中文 json 描述
// 使用了 Jackson 框架相关的注解(虽然这里没明确写出具体是哪个 Jackson 注解但从注释“Jackson 注解为 JsonValue 返回中文 json 描述”可推测),
// 作用是在将该枚举类型转换为 JSON 数据时,调用这个 getDesc 方法返回当前枚举常量对应的中文描述信息this.desc
// 使得前端接收到的 JSON 数据中对于该枚举类型的表示是更友好、易读的中文描述,而不是默认的枚举常量名称或者其他不直观的表示形式,增强了数据展示的友好性和可读性。
public String getDesc() {
return this.desc;
}
}

@ -4,79 +4,151 @@ import java.util.List;
import java.util.Map;
public interface CommonService {
// 以下这些方法声明所在的类(推测是某个数据访问相关的接口或者抽象类等,需结合完整代码上下文判断),定义了一系列用于不同数据操作的方法,
// 通过接收不同的参数来控制具体的操作逻辑,并返回相应类型的数据结果(或无返回值用于执行某些操作),以满足业务中多样化的数据处理需求。
// 获取选项的方法接收一个名为params的参数其类型是Map<String, Object>
// 该参数用于传递一些配置信息、查询条件等内容(具体键值对含义取决于业务场景),
// 方法返回一个List<String>类型的结果,即返回一个字符串列表,列表中的元素代表符合条件的选项内容,
// 例如可能是下拉框选项、可选择的配置项等,具体取决于该方法在业务中的实际用途。
List<String> getOption(Map<String, Object> params);
// 根据选项相关参数获取关注信息的方法接收一个Map<String, Object>类型的params参数
// 此参数包含了用于确定关注信息查询范围、筛选条件等的各种配置信息(具体根据业务逻辑而定),
// 返回值是一个Map<String, Object>类型,意味着返回的是一个键值对形式的映射,其中键表示关注信息的不同属性,值则对应各属性的具体内容,
// 比如可以是某个用户关注的对象信息、对应权限等相关内容,由业务场景来决定具体返回的数据结构。
Map<String, Object> getFollowByOption(Map<String, Object> params);
// 执行某个操作从方法名sh较难直接明确具体操作内容需结合业务场景确定的方法
// 接收一个Map<String, Object>类型的params参数该参数用于传递控制此操作执行的各种条件、配置等相关信息
// 此方法无返回值,说明该操作可能主要用于对数据进行修改、更新、执行特定业务逻辑等操作,而不需要返回具体的数据结果。
void sh(Map<String, Object> params);
// 用于统计提醒相关数量的方法接收一个Map<String, Object>类型的params参数
// 这个参数中包含了确定统计提醒数量范围、类型等条件的各种键值对信息(具体由业务逻辑规定),
// 方法返回一个整型int数值代表符合给定参数条件下统计得出的提醒数量
// 例如可以是未读提醒数量、特定时间段内的提醒数量等,取决于业务对提醒数量统计的具体要求。
int remindCount(Map<String, Object> params);
// 根据传入参数进行选择计算selectCal具体计算逻辑由业务场景定义的方法
// 接收Map<String, Object>类型的params参数该参数用于传递计算所需的输入数据、计算规则、相关配置等信息
// 返回一个Map<String, Object>类型的结果,即返回一个键值对形式的映射,其中键可以表示计算结果的不同属性,值则是对应属性的具体数值或内容,
// 比如可以是经过某种数学运算、业务规则计算后得到的汇总数据、比率等结果信息。
Map<String, Object> selectCal(Map<String, Object> params);
// 用于获取图表相关综合数据的方法接收一个Map<String, Object>类型的params参数
// 该参数包含了确定图表数据查询条件、涉及的数据范围、图表类型相关配置等信息(具体取决于业务中图表展示的需求),
// 返回值是一个List<Map<String, Object>>类型的列表列表中的每个Map<String, Object>元素代表图表的一部分数据信息,
// 例如可以是图表的系列数据、坐标轴数据等不同部分的数据集合整体构成用于生成完整图表的数据基础具体每个Map的结构和内容由业务逻辑决定。
List<Map<String, Object>> chartBoth(Map<String, Object> params);
// 获取图表相关某一方面数据相对chartBoth可能是更单一维度的数据具体取决于业务逻辑的方法
// 同样接收Map<String, Object>类型的params参数该参数用于控制具体的数据查询条件、范围等信息
// 返回一个List<Map<String, Object>>类型的列表其中每个Map<String, Object>元素包含了此次查询得到的图表某一相关部分的数据,
// 比如可能是图表中某一个数据系列的数据,用于在构建图表时填充相应的部分,具体内容由业务场景中图表的设计和需求来决定。
List<Map<String, Object>> chartOne(Map<String, Object> params);
// 执行分组查询操作的方法接收Map<String, Object>类型的params参数
// 该参数包含了分组依据的字段、查询的数据表、筛选条件等用于控制分组查询的相关信息(具体由业务逻辑规定),
// 返回一个List<Map<String, Object>>类型的列表列表中的每个Map<String, Object>表示一组分组查询后的结果信息,
// 例如可以包含分组字段以及对应分组下的其他相关数据等内容,方便后续对分组数据进行处理、展示或进一步分析等操作。
List<Map<String, Object>> selectGroup(Map<String, Object> params);
// 根据传入参数进行按值查询selectValue具体按什么值以及查询逻辑取决于业务场景的方法
// 接收Map<String, Object>类型的params参数该参数用于传递按值查询所需的条件、要查询的值相关信息、数据表信息等内容
// 返回一个List<Map<String, Object>>类型的列表其中每个Map<String, Object>对应按值查询后的一组结果信息,
// 其具体的键值对内容表示按值查询相关的属性及对应的值,由具体业务逻辑决定,例如可以是符合特定数值条件的数据记录集合等情况。
List<Map<String, Object>> selectValue(Map<String, Object> params);
/**
tableName
condition1 1
condition1Value 1
average
* */
* Map<String, Object>params
*
* params
* - tableName
* - condition11ID使
* - condition1Value1condition1使condition1IDID
* - averagetruefalse
*
* Map<String, Object>便
*/
Map<String, Object> queryScore(Map<String, Object> params);
/**
*
*/
/**
*
* @param params
* @return
*
* params
*/
/**
*
* paramsMap<String, Object>
*
* List<Map<String, Object>>Map<String, Object>
* 便
*/
List<Map<String, Object>> newSelectGroupSum(Map<String, Object> params);
/**
*
* @param params
* @return
*
* Map<String, Object>params
* List<Map<String, Object>>Map<String, Object>
* 便使
*/
List<Map<String, Object>> newSelectGroupCount(Map<String, Object> params);
/**
*
* @param params
* @return
*
* Map<String, Object>params
*
* List<Map<String, Object>>Map
* 便
*/
List<Map<String, Object>> newSelectDateGroupSum(Map<String, Object> params);
/**
*
* @param params
* @return
*
* Map<String, Object>params
*
* List<Map<String, Object>>Map
* 便
*/
List<Map<String, Object>> newSelectDateGroupCount(Map<String, Object> params);
/**
*
* @param params
* @return
*
* Map<String, Object>params
*
* int
*/
int plusCloumNumber(Map<String, Object> params);
/**
*
* @param params
* @return
*
* Map<String, Object>params
* params
* int
*/
int reduceCloumNumber(Map<String, Object> params);
/**
*
* @param params
* @return
*
* Map<String, Object>paramsparams
*
* int
*/
int updateCloumValue(Map<String, Object> params);
@ -123,17 +195,35 @@ public interface CommonService {
--
*/
/**
*
* params
* 便
*/
/**
*
* @param params
* @return
*
* Map<String, Object>params
*
*
* List<Map<String, Object>>Map
*
* 便
*/
List<Map<String, Object>> barSum(Map<String, Object> params);
/**
*
* @param params
* @return
*
* Map<String, Object>params
*
* List<Map<String, Object>>Map
*
*
*/
List<Map<String, Object>> barCount(Map<String, Object> params);
}

@ -17,17 +17,41 @@ import com.service.CommonService;
* @author
* @date
*/
/**
* CommonService
* CommonDao访
*
*
* @author 便
* @date
*/
// 使用@Service注解将该类标记为Spring框架中的一个服务层组件并且指定了其在容器中的bean名称为"commonService"
// 方便在其他组件中通过该名称进行依赖注入来使用这个服务类所提供的功能。
@Service("commonService")
public class CommonServiceImpl implements CommonService {
// 使用@Autowired注解进行依赖注入将CommonDao接口的某个实现类实例注入到当前类中
// 这样就能通过这个实例调用CommonDao中定义的数据访问方法实现与数据库等数据源的交互操作完成具体业务逻辑对数据的需求。
@Autowired
private CommonDao commonDao;
/**
* CommonServicegetOption
* Map<String, Object>paramsparams
* commonDaogetOptionparamsList<String>
*
*/
@Override
public List<String> getOption(Map<String, Object> params) {
return commonDao.getOption(params);
}
/**
* CommonServicegetFollowByOption
* Map<String, Object>params
* commonDaogetFollowByOptionparamsMap<String, Object>
*
*/
@Override
public Map<String, Object> getFollowByOption(Map<String, Object> params) {
return commonDao.getFollowByOption(params);
@ -40,50 +64,126 @@ public class CommonServiceImpl implements CommonService {
condition1Value 1
average
* */
/**
*
* commonDao访commonDao
* 访
*
* params
*
* queryScoreparams
* - tableName
* - condition11ID使
* - condition1Value1condition1使condition1IDID
* - averagetruefalse
*/
/**
* commonDaoqueryScore
* Map<String, Object>params
* Map<String, Object>
* 便
*/
public Map<String, Object> queryScore(Map<String, Object> params){
return commonDao.queryScore(params);
}
/**
* sh
* commonDaoshMap<String, Object>params
* commonDaosh
*/
@Override
public void sh(Map<String, Object> params) {
commonDao.sh(params);
commonDao.sh(params);
}
/**
* commonDaoremindCount
* Map<String, Object>params
* int
*/
@Override
public int remindCount(Map<String, Object> params) {
return commonDao.remindCount(params);
}
/**
* selectCal
* commonDaoselectCalMap<String, Object>params
* Map<String, Object>
* selectCal
*/
@Override
public Map<String, Object> selectCal(Map<String, Object> params) {
return commonDao.selectCal(params);
}
/**
* commonDaoselectGroup
* Map<String, Object>params
* List<Map<String, Object>>Map<String, Object>
* 便selectGroup
*/
@Override
public List<Map<String, Object>> selectGroup(Map<String, Object> params) {
return commonDao.selectGroup(params);
}
/**
* selectValue
* commonDaoselectValueMap<String, Object>params
* List<Map<String, Object>>Map<String, Object>
*
*/
@Override
public List<Map<String, Object>> selectValue(Map<String, Object> params) {
return commonDao.selectValue(params);
}
/**
* commonDaochartBoth
* Map<String, Object>params
* List<Map<String, Object>>Map<String, Object>
* Map
*/
@Override
public List<Map<String, Object>> chartBoth(Map<String, Object> params) {
return commonDao.chartBoth(params);
}
/**
* chartBoth
* commonDaochartOneMap<String, Object>params
* List<Map<String, Object>>Map<String, Object>
*
*/
@Override
public List<Map<String, Object>> chartOne(Map<String, Object> params) {
return commonDao.chartOne(params);
}
/**
*
* commonDaoparams访commonDao
* 访
* params
*/
/**
*
* @param params
* @return
*
* Map<String, Object>params
*
* commonDaonewSelectGroupSumparamsList<Map<String, Object>>
* Map<String, Object>便
*/
@Override
public List<Map<String, Object>> newSelectGroupSum(Map<String, Object> params) {
@ -91,20 +191,26 @@ public class CommonServiceImpl implements CommonService {
}
/**
*
* @param params
* @return
*
* Map<String, Object>params
*
* commonDaonewSelectGroupCountparamsList<Map<String, Object>>
* Map<String, Object>便使
*/
@Override
public List<Map<String, Object>> newSelectGroupCount(Map<String, Object> params) {
return commonDao.newSelectGroupCount(params);
}
/**
*
* @param params
* @return
*
* Map<String, Object>params
*
* commonDaonewSelectDateGroupSumparamsList<Map<String, Object>>
* Map便
*/
@Override
public List<Map<String, Object>> newSelectDateGroupSum(Map<String, Object> params) {
@ -113,28 +219,56 @@ public class CommonServiceImpl implements CommonService {
/**
*
* @param params
* @return
*
* Map<String, Object>params
*
* commonDaonewSelectDateGroupCountparamsList<Map<String, Object>>
* Map便
*/
@Override
public List<Map<String, Object>> newSelectDateGroupCount(Map<String, Object> params) {
return commonDao.newSelectDateGroupCount(params);
}
/**
*
* Map<String, Object>params
*
* commonDaoplusCloumNumberparamsint
*/
@Override
public int plusCloumNumber(Map<String, Object> params) {
return commonDao.plusCloumNumber(params);
}
/**
*
* Map<String, Object>params
* params
* commonDaoreduceCloumNumberparamsint
*
*/
@Override
public int reduceCloumNumber(Map<String, Object> params) {
return commonDao.reduceCloumNumber(params);
}
/**
*
* Map<String, Object>paramsparams
*
* commonDaoupdateCloumValueparamsint
*
*/
@Override
public int updateCloumValue(Map<String, Object> params) {
return commonDao.updateCloumValue(params);
}
/**
*
* --
@ -176,22 +310,41 @@ public class CommonServiceImpl implements CommonService {
--
--
*/
/**
*
* @param params
* @return
* commonDao
* commonDao
* params
*
*/
/**
*
* Map<String, Object>params
*
*
* commonDaobarSumparamsList<Map<String, Object>>
* Map
* 便
*/
public List<Map<String, Object>> barSum(Map<String, Object> params){
return commonDao.barSum(params);
}
/**
*
* @param params
* @return
*
* Map<String, Object>params
*
* commonDaobarCountparamsList<Map<String, Object>>
* Map
*
*/
public List<Map<String, Object>> barCount(Map<String, Object> params){
return commonDao.barCount(params);
}
}

@ -22,29 +22,60 @@ import com.utils.Query;
*
* @author
*/
/**
* UsersService
* ServiceImplUsersDaoUsersEntity便使
*
* @author 便
*/
// 使用@Service注解将该类标记为Spring框架中的一个服务层组件并且指定了其在容器中的bean名称为"userService"
// 这样其他组件就可以通过该名称在Spring容器中获取到此服务类的实例进而使用它所提供的各种方法来处理业务逻辑。
@Service("userService")
public class UsersServiceImpl extends ServiceImpl<UsersDao, UsersEntity> implements UsersService {
/**
* UsersServicequeryPage
* Map<String, Object>params
* this.selectPagePage<UsersEntity>page使paramsQuery
* EntityWrapper<UsersEntity>
* pagePageUtils便便
*/
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<UsersEntity> page = this.selectPage(
new Query<UsersEntity>(params).getPage(),
new EntityWrapper<UsersEntity>()
);
return new PageUtils(page);
new Query<UsersEntity>(params).getPage(),
new EntityWrapper<UsersEntity>()
);
return new PageUtils(page);
}
/**
* UsersServiceselectListViewWrapper<UsersEntity>
* Wrapper<UsersEntity>wrapper
* baseMapperselectListViewwrapperList<UsersEntity>
*/
@Override
public List<UsersEntity> selectListView(Wrapper<UsersEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
/**
* UsersServicequeryPageWrapper<UsersEntity>
* Map<String, Object>paramsWrapper<UsersEntity>wrapper
* Page<UsersEntity>pageparamsQuery
* baseMapperselectListViewpagewrapperpagerecords
* pagePageUtils便便
*/
@Override
public PageUtils queryPage(Map<String, Object> params,
Wrapper<UsersEntity> wrapper) {
Page<UsersEntity> page =new Query<UsersEntity>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
Wrapper<UsersEntity> wrapper) {
Page<UsersEntity> page =new Query<UsersEntity>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
}

@ -20,20 +20,44 @@ import com.entity.view.YonghuView;
/**
*
*/
/**
* ServiceImplYonghuDaoYonghuEntityYonghuService
* 使Spring@Transactional
* 便
*/
// 使用@Service注解将该类标记为Spring框架中的一个服务层组件并且指定其在容器中的bean名称为"yonghuService"
// 这样在Spring容器中可以通过该名称来获取此服务类的实例进而调用其提供的业务方法进行相关的用户业务逻辑处理。
// @Transactional注解用于声明该类中的方法如果没有特殊配置默认是所有方法都将在事务环境下执行
// 如果方法执行过程中出现异常,事务将会自动回滚,以保证数据的一致性,常用于涉及数据库操作等需要保证原子性的业务场景。
@Service("yonghuService")
@Transactional
public class YonghuServiceImpl extends ServiceImpl<YonghuDao, YonghuEntity> implements YonghuService {
/**
* YonghuServicequeryPage
* Map<String,Object>params
* params"limit""page"
* "page""1""limit""10"10
* new Query<YonghuView>(params).getPage()Page<YonghuView>page
* baseMapperselectListViewpageparamspagerecords
* pagePageUtils使便便
*/
@Override
public PageUtils queryPage(Map<String,Object> params) {
if(params != null && (params.get("limit") == null || params.get("page") == null)){
if(params!= null && (params.get("limit") == null || params.get("page") == null)){
params.put("page","1");
params.put("limit","10");
}
Page<YonghuView> page =new Query<YonghuView>(params).getPage();
Page<YonghuView> page = new Query<YonghuView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,params));
return new PageUtils(page);
}
}

@ -3,7 +3,24 @@ package com.thread;
/**
* 线 30
*/
/**
* 线Thread线
* 线30
* run线
*/
public class MyThreadMethod extends Thread {
/**
* Threadrun线
* while线this.isInterrupted()false
* 线50005Thread.sleep(5000)
*
*/
public void run() {
while (!this.isInterrupted()) {// 线程未中断执行循环
try {
@ -12,8 +29,15 @@ public class MyThreadMethod extends Thread {
e.printStackTrace();
}
// ------------------ 开始执行 ---------------------------
// 此处原本可以添加具体的业务逻辑代码,例如实现根据当前时间去数据库查询满足特定时间条件的订单,然后修改其状态等操作,
// 当前只是简单地输出了一个表示线程正在执行的信息以及当前时间戳通过System.currentTimeMillis()获取当前时间的毫秒数),
// 实际应用中需要根据具体的业务需求替换此处的代码来完成相应的定时业务功能。
// System.out.println("线程执行中:" + System.currentTimeMillis());
}
}
}

@ -3,21 +3,35 @@ package com.utils;
import java.util.Random;
public class CommonUtil {
/**
*
/**
*
*
* @param num
* @return
* @param num Integer
* @return Stringnum
*/
public static String getRandomString(Integer num) {
// 定义一个包含所有可用字符的基础字符串,这里包含了小写英文字母和数字,后续将从这些字符中随机选取来组成最终的随机字符串。
String base = "abcdefghijklmnopqrstuvwxyz0123456789";
// 创建一个Random类的实例用于生成伪随机数它将作为选取字符的随机索引依据通过其nextInt方法来获取在指定范围内的随机整数。
Random random = new Random();
// 创建一个StringBuffer对象用于高效地拼接字符相比于直接使用字符串相加操作StringBuffer在频繁拼接字符时性能更好将逐步把随机选取的字符添加到这里来构建最终的随机字符串。
StringBuffer sb = new StringBuffer();
// 通过循环来控制生成的随机字符串的长度循环次数由传入的参数num决定每次循环向字符串中添加一个随机字符。
for (int i = 0; i < num; i++) {
// 生成一个随机索引其范围是从0到base字符串的长度减1通过调用Random类的nextInt方法实现该索引将用于从base字符串中选取一个字符。
int number = random.nextInt(base.length());
// 根据生成的随机索引从base字符串中获取对应的字符并添加到StringBuffer对象sb中逐步构建随机字符串。
sb.append(base.charAt(number));
}
// 将StringBuffer对象转换为字符串并返回得到最终生成的随机字符串其长度和字符内容都符合随机生成的要求由上述逻辑决定。
return sb.toString();
}
}

Loading…
Cancel
Save