From d993de692388d9844f2a5da74b0b23765d742af4 Mon Sep 17 00:00:00 2001 From: Yin <1605103955@qq.com> Date: Sun, 15 Dec 2024 22:23:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8A=20ytt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DictionaryServletContextListener.java | 59 ++++- .../java/com/annotation/APPLoginUser.java | 20 ++ .../main/java/com/annotation/IgnoreAuth.java | 22 ++ .../main/java/com/annotation/LoginUser.java | 17 ++ .../src/main/java/com/dao/CommonDao.java | 199 ++++++++++++++++- .../src/main/java/com/entity/EIException.java | 47 +++- .../interceptor/AuthorizationInterceptor.java | 89 +++++++- .../main/java/com/model/enums/TypeEnum.java | 38 +++- .../main/java/com/service/CommonService.java | 164 ++++++++++---- .../com/service/impl/CommonServiceImpl.java | 201 +++++++++++++++--- .../com/service/impl/UsersServiceImpl.java | 49 ++++- .../com/service/impl/YonghuServiceImpl.java | 28 ++- .../main/java/com/thread/MyThreadMethod.java | 24 +++ .../src/main/java/com/utils/CommonUtil.java | 22 +- 14 files changed, 876 insertions(+), 103 deletions(-) diff --git a/minsu/minsuguanliw/src/main/java/com/ServletContextListener/DictionaryServletContextListener.java b/minsu/minsuguanliw/src/main/java/com/ServletContextListener/DictionaryServletContextListener.java index a74d1774..bc72710b 100644 --- a/minsu/minsuguanliw/src/main/java/com/ServletContextListener/DictionaryServletContextListener.java +++ b/minsu/minsuguanliw/src/main/java/com/ServletContextListener/DictionaryServletContextListener.java @@ -19,43 +19,98 @@ import java.util.Map; /** * 字典初始化监视器 用的是服务器监听,每次项目启动,都会调用这个类 */ + + +/** + * 这是一个字典初始化监视器类,它实现了ServletContextListener接口,利用服务器监听机制,在每次项目启动时都会被调用, + * 主要负责完成字典表数据的初始化工作以及启动一个自定义的线程(MyThreadMethod)。在项目停止时,也能相应地记录相关日志信息, + * 整体在整个项目的生命周期中,对于字典表数据的准备以及特定线程的启动管理起着关键作用,确保相关功能在合适的时机得以执行。 + */ +// 使用@WebListener注解将该类标记为一个Web监听器,使其能够被Web容器识别并在对应的生命周期事件(如项目启动、停止等)发生时被调用, +// 从而执行相应的逻辑,在这里就是进行字典初始化以及线程启动等操作。 @WebListener public class DictionaryServletContextListener implements ServletContextListener { + // 创建一个静态的Logger对象,用于记录日志信息,通过LoggerFactory.getLogger方法传入当前类的Class对象来获取, + // 后续可以使用这个logger在不同的生命周期方法中记录如项目启动、停止、字典表初始化等各个阶段的关键信息,方便排查问题以及了解程序执行情况。 private static final Logger logger = LoggerFactory.getLogger(DictionaryServletContextListener.class); + + // 声明一个MyThreadMethod类型的变量,用于存储一个自定义的线程对象,这个线程大概率执行一些与业务相关的后台任务,具体任务由MyThreadMethod类的实现决定, + // 初始化为null,会在合适的时机(项目启动时的上下文初始化阶段)进行实例化并启动。 private MyThreadMethod myThreadMethod; + + /** + * 此方法是ServletContextListener接口中定义的,在Web应用的Servlet上下文被销毁时(通常意味着项目停止)会被调用, + * 在这里主要用于记录服务器停止的相关日志信息,方便后续查看项目的关闭情况以及进行相关的日志分析等操作。 + * + * @param sce ServletContextEvent对象,包含了与Servlet上下文销毁相关的事件信息,不过在此方法中目前只是利用它来触发日志记录,未对其事件相关内容做更多处理。 + */ @Override public void contextDestroyed(ServletContextEvent sce) { logger.info("----------服务器停止----------"); } + + /** + * 此方法是ServletContextListener接口中定义的,在Web应用的Servlet上下文初始化时(也就是项目启动时)会被调用, + * 主要承担了字典表数据初始化以及启动自定义线程的重要任务,通过一系列操作将字典表数据整理并存储到Servlet上下文的属性中,方便后续在整个项目中使用, + * 同时启动特定线程来执行可能的后台持续任务等操作,并且在各个关键步骤记录相应的日志信息,便于了解初始化的执行情况。 + * + * @param sce ServletContextEvent对象,包含了与Servlet上下文初始化相关的事件信息,通过它可以获取到Servlet上下文对象,进而用于获取Spring应用上下文以及设置上下文属性等操作。 + */ @Override public void contextInitialized(ServletContextEvent sce) { + // 通过WebApplicationContextUtils工具类的getWebApplicationContext方法,传入从ServletContextEvent对象中获取的Servlet上下文对象, + // 获取整个Web应用的Spring应用上下文(ApplicationContext),后续可以基于这个上下文来获取Spring容器管理的各种Bean实例,比如获取字典服务相关的Bean。 ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()); logger.info("----------字典表初始化开始----------"); + // 从Spring应用上下文中获取名为"dictionaryService"的Bean实例,并强制转换为DictionaryService类型, + // DictionaryService应该是一个用于处理字典表相关业务逻辑的服务层接口,通过它可以调用如查询字典表数据等方法来进行字典表初始化操作。 DictionaryService dictionaryService = (DictionaryService)appContext.getBean("dictionaryService"); + // 调用dictionaryService的selectList方法,传入一个默认的EntityWrapper对象(可能用于添加一些通用的查询条件等,具体取决于业务实现), + + // 获取字典表中的所有字典实体数据,返回一个List类型的列表,列表中的每个DictionaryEntity对象代表一条字典表记录,包含了如字典编码、索引等相关信息。 List dictionaryEntities = dictionaryService.selectList(new EntityWrapper()); + // 创建一个HashMap对象,用于存储整理后的字典表数据,其结构是外层的键为字典编码(String类型),值为内层的一个Map, + // 内层的Map中,键为代码索引(Integer类型),值为对应的索引名称(String类型),这样的结构方便后续根据字典编码以及索引快速查找对应的名称等信息。 Map> map = new HashMap<>(); + + // 遍历从字典表中查询到的所有字典实体数据列表,对每条记录进行处理,将其按照特定的结构整理到前面创建的map对象中。 for(DictionaryEntity d :dictionaryEntities){ + + // 根据当前字典实体的字典编码(d.getDicCode())从map中获取对应的内层Map(即代码索引和索引名称的映射关系),如果获取到的是null或者为空,说明还没有该字典编码对应的映射关系, + // 则创建一个新的HashMap作为内层Map,用于存储该字典编码下的索引和名称对应关系。 Map m = map.get(d.getDicCode()); + if(m ==null || m.isEmpty()){ m = new HashMap<>(); } + // 将当前字典实体的代码索引(d.getCodeIndex())作为键,索引名称(d.getIndexName())作为值,放入内层的Map(m)中,以此构建字典编码下具体的索引和名称对应关系。 m.put(d.getCodeIndex(),d.getIndexName()); + // 将整理好的内层Map(m)重新放回外层的map中,以字典编码(d.getDicCode())作为键,完成当前字典实体数据在整体数据结构中的整理和存储。 map.put(d.getDicCode(),m); } + + // 将整理好的包含字典表数据的map对象存储到Servlet上下文的属性中,属性名为"dictionaryMap",方便在整个Web应用的其他地方可以通过获取Servlet上下文属性来获取这些字典数据, + // 用于诸如数据展示、业务逻辑中根据字典进行数据转换等操作。 sce.getServletContext().setAttribute("dictionaryMap", map); logger.info("----------字典表初始化完成----------"); - logger.info("----------线程执行开始----------"); + // 判断myThreadMethod是否为null,如果是null,说明还没有实例化该线程对象, + // 则创建一个MyThreadMethod类的实例,用于后续启动一个自定义的线程来执行相关的后台任务(具体任务由MyThreadMethod类的实现决定)。 + if (myThreadMethod == null) { myThreadMethod = new MyThreadMethod(); - myThreadMethod.start(); // servlet 上下文初始化时启动线程myThreadMethod + // 启动前面实例化的myThreadMethod线程,在Servlet上下文初始化(项目启动)时启动这个线程,让其开始执行相应的任务, + // 比如可能是定时更新字典数据、执行一些周期性的业务逻辑等操作,具体取决于MyThreadMethod类中run方法的实现内容。 + myThreadMethod.start(); } logger.info("----------线程执行结束----------"); } } + + diff --git a/minsu/minsuguanliw/src/main/java/com/annotation/APPLoginUser.java b/minsu/minsuguanliw/src/main/java/com/annotation/APPLoginUser.java index 21d41b90..fccf135a 100644 --- a/minsu/minsuguanliw/src/main/java/com/annotation/APPLoginUser.java +++ b/minsu/minsuguanliw/src/main/java/com/annotation/APPLoginUser.java @@ -8,8 +8,28 @@ import java.lang.annotation.Target; /** * 登录用户信息 */ + + +/** + * 这是一个自定义的注解类型,名为 @APPLoginUser,用于特定的标识用途,通常应用在程序开发中与移动端应用(APP)登录用户相关的场景里。 + * 通过 @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 { } + + diff --git a/minsu/minsuguanliw/src/main/java/com/annotation/IgnoreAuth.java b/minsu/minsuguanliw/src/main/java/com/annotation/IgnoreAuth.java index 7c3cc550..f3fea46a 100644 --- a/minsu/minsuguanliw/src/main/java/com/annotation/IgnoreAuth.java +++ b/minsu/minsuguanliw/src/main/java/com/annotation/IgnoreAuth.java @@ -5,9 +5,31 @@ import java.lang.annotation.*; /** * 忽略Token验证 */ + + +/** + * 这是一个自定义的注解类型,名为 @IgnoreAuth,其主要作用是用于标记在特定的业务场景下,需要忽略Token验证的方法。 + * 通过 @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 { } + + diff --git a/minsu/minsuguanliw/src/main/java/com/annotation/LoginUser.java b/minsu/minsuguanliw/src/main/java/com/annotation/LoginUser.java index 3d808d35..3e48963f 100644 --- a/minsu/minsuguanliw/src/main/java/com/annotation/LoginUser.java +++ b/minsu/minsuguanliw/src/main/java/com/annotation/LoginUser.java @@ -8,8 +8,25 @@ import java.lang.annotation.Target; /** * 登录用户信息 */ + + +/** + * 自定义的注解类型 @LoginUser,用于标记方法参数,通常在Java的Web开发等场景下有特定用途, + * 一般可用于标识某个参数代表的是当前登录用户的相关信息,方便在方法中对登录用户的信息进行获取、处理以及基于用户权限等进行相关业务逻辑操作, + * 其作用范围通过 @Target 注解指定为只能用于方法参数(ElementType.PARAMETER),生命周期通过 @Retention 注解指定为在运行时(RetentionPolicy.RUNTIME)有效, + * 这样在程序运行期间可以通过反射等机制来获取到该注解相关信息并进行相应处理。 + */ + +// @Target 注解用于指定该自定义注解可以应用的目标元素类型,这里指定为 ElementType.PARAMETER,表示此注解只能用于方法参数上, +// 意味着它可以标记那些在方法中接收登录用户信息的参数,以便框架或者其他相关代码能识别并处理这些参数。 @Target(ElementType.PARAMETER) + +// @Retention 注解用于定义该注解的保留策略,即规定注解在什么阶段是可见可用的,这里设置为 RetentionPolicy.RUNTIME,表示在运行时该注解信息仍然保留, +// 可以通过Java的反射机制在运行期间获取到该注解及其属性值等信息,常用于根据注解来动态执行一些业务逻辑的场景。 @Retention(RetentionPolicy.RUNTIME) + +// 定义了一个名为 @LoginUser 的注解,此注解本身没有定义成员变量(属性),如果后续有需要,也可以添加属性来传递更多关于登录用户相关的配置信息等,比如用户角色、权限级别等相关限定信息。 public @interface LoginUser { } + diff --git a/minsu/minsuguanliw/src/main/java/com/dao/CommonDao.java b/minsu/minsuguanliw/src/main/java/com/dao/CommonDao.java index 47300bc8..63fd8986 100644 --- a/minsu/minsuguanliw/src/main/java/com/dao/CommonDao.java +++ b/minsu/minsuguanliw/src/main/java/com/dao/CommonDao.java @@ -5,19 +5,61 @@ import java.util.List; import java.util.Map; /** - * 通用接口 + * 通用接口,定义了一系列通用的数据操作方法,供具体的实现类去实现这些方法以满足不同的数据处理需求。 + * 这些方法通常会涉及到数据库查询、统计等相关操作,通过传入不同的参数来控制具体的操作逻辑。 */ + public interface CommonDao{ + + /** + * 获取选项列表的方法,根据传入的参数(params)来查询并返回相应的选项列表。 + * 参数 params 是一个 Map 类型,其具体的键值对内容取决于具体的业务需求, + * 例如可能包含查询条件、筛选字段等信息,用于确定获取哪些选项数据。 + * 返回值是一个包含字符串的列表(List),每个字符串元素代表一个选项内容。 + * @param params 用于控制查询选项列表的参数集合 + * @return 符合条件的选项列表 + */ List getOption(Map params); - + + /** + * 根据传入的选项相关参数(params),查询并返回对应的关注信息(具体含义取决于业务场景),以 Map 的形式返回结果。 + * 参数 params 同样是 Map 类型,包含了用于确定关注信息查询范围、条件等的各种键值对信息。 + * 返回值是一个 Map,其中键表示关注信息的不同属性,值则是对应属性的具体内容。 + * @param params 用于控制查询关注信息的参数集合 + * @return 包含关注信息的 Map + */ Map getFollowByOption(Map params); - + + /** + * 与 getFollowByOption 类似,也是根据传入的选项相关参数(params)查询关注信息,不过返回值类型为 List。 + * 具体返回的字符串列表内容以及参数 params 的含义都取决于具体业务逻辑,可能是另一种形式的关注信息表示。 + * @param params 用于控制查询关注信息的参数集合 + * @return 符合条件的关注信息列表(以字符串形式表示) + */ List getFollowByOption2(Map params); - + + /** + * 执行某个操作(从方法名 sh 推测可能是一个特定的业务操作,具体含义需结合业务场景确定), + * 通过传入参数(params)来控制该操作的具体行为,该方法无返回值,意味着它可能主要用于对数据进行修改、更新等操作。 + * @param params 用于控制操作执行的参数集合 + */ void sh(Map params); - + + /** + * 用于统计提醒相关的数量,根据传入的参数(params)确定统计的范围、条件等信息,返回统计得到的提醒数量。 + * 参数 params 作为 Map 类型,包含了如时间范围、提醒类型等各种影响统计结果的条件信息。 + * 返回值为整型(int),代表符合条件的提醒数量。 + * @param params 用于控制提醒数量统计的参数集合 + * @return 提醒的数量 + */ int remindCount(Map params); + /** + * 根据传入的参数(params)进行计算操作(从方法名 selectCal 推测可能是某种选择计算,具体取决于业务逻辑), + * 返回计算后的结果,以 Map 形式呈现,其中键可以表示计算结果的不同属性,值则是对应属性的具体数值等内容。 + * @param params 用于控制计算操作的参数集合 + * @return 包含计算结果的 Map + */ Map selectCal(Map params); /** tableName 查询表 @@ -25,26 +67,77 @@ public interface CommonDao{ condition1Value 条件1值 average 计算平均评分 * */ + + /** + * 查询评分相关信息的方法,根据传入的参数(params)确定查询的表(tableName)、条件(condition1 及 condition1Value)等信息, + * 可能还涉及到平均评分(average)相关的计算或筛选逻辑,最终返回包含评分相关信息的 Map。 + * 参数 params 中各键值对具体含义如注释中所描述,用于精确控制评分信息的查询操作。 + * @param params 用于控制评分信息查询的参数集合,包含查询表名、条件及相关计算控制等信息 + * @return 包含评分相关信息的 Map + */ Map queryScore(Map params); + /** + * 执行分组查询操作,根据传入的参数(params)确定分组的依据、查询的数据表等信息, + * 返回一个包含多个 Map 的列表(List>),每个内层的 Map 可能表示一组分组查询后的结果信息, + * 例如包含分组字段以及对应分组下的其他相关数据等内容,具体取决于业务逻辑的设计。 + * @param params 用于控制分组查询操作的参数集合 + * @return 分组查询后的结果列表,每个元素为一组分组相关的信息 Map + */ List> selectGroup(Map params); - - List> selectValue(Map params); + /** + * 根据传入的参数(params)进行按值查询操作(具体按什么值以及查询逻辑取决于业务场景), + * 返回一个包含多个 Map 的列表(List>),每个内层的 Map 对应按值查询后的一组结果信息, + * 其具体的键值对内容表示按值查询相关的属性及对应的值,由具体业务逻辑决定。 + * @param params 用于控制按值查询操作的参数集合 + * @return 按值查询后的结果列表,每个元素为一组按值相关的信息 Map + */ + List> selectValue(Map params); + /** + * 用于进行图表相关的综合查询操作(从方法名 chartBoth 推测可能涉及到多方面图表数据生成相关逻辑), + * 根据传入的参数(params)来确定具体的查询条件、涉及的数据表等信息, + * 返回一个包含多个 Map 的列表(List>),该列表包含了图表生成所需的各种数据信息, + * 具体每个 Map 中的键值对内容以及整体列表结构取决于图表的类型和业务需求,例如可能包含图表的系列数据、坐标轴数据等。 + * @param params 用于控制图表综合查询操作的参数集合 + * @return 图表相关综合查询后的结果列表,用于后续图表生成等操作 + */ List> chartBoth(Map params); + /** + * 进行图表相关的某种单一查询操作(与 chartBoth 相对,可能只涉及图表某一方面的数据查询,具体取决于业务逻辑), + * 依据传入的参数(params)确定查询范围和条件,返回一个包含多个 Map 的列表(List>), + * 列表中的每个 Map 包含了此次单一图表查询相关的结果信息,具体内容由业务逻辑决定,例如可能是图表某一数据系列的数据等。 + * @param params 用于控制图表单一查询操作的参数集合 + * @return 图表相关单一查询后的结果列表,用于特定图表部分的数据展示等操作 + */ List> chartOne(Map params); /** * 下面为新加的 */ + /** + * 此接口(推测所在接口定义了一系列与数据统计相关的方法,这里是其中部分方法,具体需结合完整接口来看)用于提供不同条件下的数据统计功能, + * 涉及到新的级联字典表以及普通表按日期分组等多种统计场景,通过传入不同的参数来控制具体的统计逻辑,返回相应的统计结果数据结构。 + */ + /** * 新的级联字典表的 分组求和方法 * @param params * @return */ + + /** + * 新的级联字典表的分组求和方法。 + * 该方法接收一个参数 params,它是一个 Map 类型,其中包含了执行分组求和操作所需要的各种条件信息、配置参数等, + * 例如可能包含要操作的数据表名称、分组的字段、求和的字段以及其他相关筛选条件等内容(具体取决于业务逻辑和实际应用场景)。 + * 返回值是一个 List> 类型的列表,列表中的每个 Map 表示一组分组求和后的统计结果信息, + * 其内部的键值对可以是分组字段以及对应的求和结果等内容,方便后续对分组求和数据进行处理和展示等操作。 + * @param params 用于控制新的级联字典表分组求和操作的参数集合 + * @return 新的级联字典表分组求和后的统计结果列表,每个元素为一组分组求和相关的信息 Map + */ List> newSelectGroupSum(Map params); /** @@ -52,6 +145,16 @@ public interface CommonDao{ * @param params * @return */ + + /** + * 新的级联字典表的分组条数统计方法。 + * 接收参数 params(Map 类型),这个参数用于明确分组统计条数操作的具体条件, + * 像涉及的数据表、按照哪些字段进行分组、可能的筛选条件等信息都会通过 params 传递进来(具体由业务逻辑决定)。 + * 方法返回一个 List> 类型的列表,里面的每一个 Map 对应一组分组统计总条数的结果信息, + * 例如可能包含分组字段以及对应的记录条数等键值对内容,以满足不同业务场景下对分组统计条数结果的使用需求。 + * @param params 用于控制新的级联字典表分组条数统计操作的参数集合 + * @return 新的级联字典表分组条数统计后的结果列表,每个元素为一组分组统计条数相关的信息 Map + */ List> newSelectGroupCount(Map params); @@ -60,6 +163,16 @@ public interface CommonDao{ * @param params * @return */ + + /** + * 当前表的日期分组求和方法。 + * 接收一个 Map 类型的参数 params,该参数会传入当前表进行日期分组求和操作所需要的各项设置信息, + * 比如要操作的表名、用于分组的日期字段(以及日期格式化相关配置等,可能在方法内部进一步处理)、求和的目标字段以及其他限定条件等(具体依据业务逻辑而定)。 + * 方法返回值为 List> 类型的列表,其中每个 Map 代表一组按照日期分组求和后的统计结果数据, + * 例如可能包含日期分组标识(如具体的年、月、日等形式,取决于业务对日期的处理方式)以及对应的求和数值等键值对内容,便于后续基于日期分组求和结果进行数据展示或其他处理。 + * @param params 用于控制当前表日期分组求和操作的参数集合 + * @return 当前表日期分组求和后的统计结果列表,每个元素为一组日期分组求和相关的信息 Map + */ List> newSelectDateGroupSum(Map params); /** @@ -67,6 +180,15 @@ public interface CommonDao{ * @param params * @return */ + + /** + * 查询字典表的分组统计总条数方法。 + * 同样以 Map 类型的 params 参数来控制具体的统计操作,params 中涵盖了诸如要查询的字典表名称、分组依据的字段以及其他相关筛选条件等信息(由业务场景决定具体内容)。 + * 该方法返回的是 List> 类型的列表,列表里的每个 Map 对应一组字典表分组统计总条数的结果情况, + * 通常会包含分组字段以及该分组下的记录总条数等键值对,方便在不同业务需求下对字典表分组统计的结果进行使用和展示。 + * @param params 用于控制查询字典表分组统计总条数操作的参数集合 + * @return 查询字典表分组统计总条数后的结果列表,每个元素为一组分组统计总条数相关的信息 Map + */ List> newSelectDateGroupCount(Map params); /** @@ -74,6 +196,22 @@ public interface CommonDao{ * @param params * @return */ + + /** + * 此接口(推测所在接口定义了一系列用于对数据字段进行操作的方法,这里展示的是其中部分方法,需结合完整接口定义来综合理解), + * 提供了针对数据字段进行值变更相关的操作功能,通过传入不同的参数来控制具体的操作逻辑以及操作的目标字段等信息, + * 并且以整型(int)返回值来表示操作的执行情况或者受影响的记录数量等(具体含义取决于各方法业务逻辑)。 + */ + + /** + * 增加字段值的方法。 + * 接收一个 Map 类型的参数 params,该参数用于指定增加字段值操作的相关条件及目标字段等信息。 + * 例如,params 中可能包含要操作的数据表名称、需要增加数值的具体字段名、增加的数值大小、以及可能的筛选条件(用于确定对哪些记录的字段值进行增加操作)等内容, + * 具体的键值对含义取决于业务场景的具体需求。 + * 返回值为整型(int),其意义可能是成功增加数值的记录条数,或者表示操作执行是否成功的某种状态码(具体由该方法在业务逻辑中的定义决定)。 + * @param params 用于控制增加字段值操作的参数集合 + * @return 整型值,可能表示受影响的记录数量或者操作执行的状态标识等情况 + */ int plusCloumNumber(Map params); /** @@ -81,6 +219,15 @@ public interface CommonDao{ * @param params * @return */ + + /** + * 减少字段值的方法。 + * 同样接收 Map 类型的参数 params,这个参数在此处用于明确减少字段值操作的具体细节, + * 像要操作的数据表、待减少数值的目标字段、减少的数值量以及相关筛选条件(限定对哪些记录执行字段值减少操作)等信息会通过 params 传入(具体依据业务逻辑而定)。 + * 方法返回一个整型(int)值,该值的含义大概率与操作的执行结果相关,比如成功减少数值的记录数量,或者用于标识操作是否顺利完成的一个状态值(取决于具体业务对该方法返回值的定义)。 + * @param params 用于控制减少字段值操作的参数集合 + * @return 整型值,可用于表示受影响的记录数量或者操作执行的状态情况 + */ int reduceCloumNumber(Map params); /** @@ -88,6 +235,15 @@ public interface CommonDao{ * @param params * @return */ + + /** + * 修改字段值的方法。 + * 它以 Map 类型的 params 参数来控制具体的修改操作逻辑,params 里面会包含诸如要操作的数据表名称、需要修改值的目标字段、修改后的新值、 + * 以及用于筛选出要修改记录的条件等关键信息(具体内容由业务场景所规定)。 + * 该方法返回的整型(int)值通常用于反馈修改操作的执行情况,可能代表成功修改的记录条数,或者是用于指示操作是否成功完成的一个状态标识(取决于该方法在业务逻辑中的具体定义)。 + * @param params 用于控制修改字段值操作的参数集合 + * @return 整型值,一般表示受影响的记录数量或者操作执行的状态标识等情况 + */ int updateCloumValue(Map params); @@ -138,6 +294,24 @@ public interface CommonDao{ * @param params * @return */ + + /** + * 此接口(推测属于某个与数据统计及图表相关业务逻辑对应的接口,此处展示的是其中部分方法,需结合完整接口来全面理解)定义了用于生成柱状图相关数据的方法, + * 分别提供了柱状图求和以及柱状图统计的功能,通过接收包含不同配置信息的参数,来确定具体的统计逻辑以及生成符合柱状图展示需求的数据结构, + * 并以包含多个 Map 的列表形式返回相应的统计结果数据,方便后续用于柱状图的渲染展示等操作。 + */ + + /** + * 柱状图求和方法。 + * 接收一个 Map 类型的参数 params,该参数用于传递与柱状图求和操作相关的各种配置及数据信息, + * 例如可能包含要统计的数据表名称、用于分组的字段(比如按照不同类别、时间段等进行分组)、求和的目标字段(确定对哪些数据进行求和计算)、 + * 以及可能涉及到的其他筛选条件(限定参与求和计算的数据范围)等内容,具体的键值对含义取决于具体的业务场景和柱状图展示需求。 + * 返回值为 List> 类型的列表,列表中的每个 Map 表示一组柱状图求和后的统计结果信息, + * 比如可能包含分组字段对应的标识(如具体的分类名称、日期等)以及对应的求和数值等键值对内容,这些结果数据可用于构建柱状图中不同分组下的求和展示部分, + * 以直观呈现各分组的数据总和情况。 + * @param params 用于控制柱状图求和操作的参数集合 + * @return 柱状图求和后的统计结果列表,每个元素为一组求和相关的信息 Map,用于后续柱状图展示 + */ List> barSum(Map params); /** @@ -145,6 +319,17 @@ public interface CommonDao{ * @param params * @return */ + + /** + * 柱状图统计方法。 + * 同样以 Map 类型的参数 params 来控制具体的统计操作逻辑,params 中涵盖了诸如要操作的数据表信息、分组依据的字段、统计的具体规则(比如计数、平均值等统计方式,具体取决于业务实现)、 + * 以及其他相关的筛选条件(用于精准确定参与统计的数据范围)等关键信息,其具体内容由业务场景所决定,旨在满足不同柱状图统计需求。 + * 该方法返回的是 List> 类型的列表,其中每个 Map 对应一组柱状图统计后的结果信息, + * 像可能包含分组标识以及对应的统计数值(例如分组下的记录条数、平均值等,具体根据统计方式而定)等键值对,这些结果数据可用于在柱状图中展示相应的统计情况, + * 帮助用户直观了解数据分布及特征等信息。 + * @param params 用于控制柱状图统计操作的参数集合 + * @return 柱状图统计后的结果列表,每个元素为一组统计相关的信息 Map,便于后续柱状图的构建展示 + */ List> barCount(Map params); diff --git a/minsu/minsuguanliw/src/main/java/com/entity/EIException.java b/minsu/minsuguanliw/src/main/java/com/entity/EIException.java index 2ebfb566..2fbd129e 100644 --- a/minsu/minsuguanliw/src/main/java/com/entity/EIException.java +++ b/minsu/minsuguanliw/src/main/java/com/entity/EIException.java @@ -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; } - - + + } diff --git a/minsu/minsuguanliw/src/main/java/com/interceptor/AuthorizationInterceptor.java b/minsu/minsuguanliw/src/main/java/com/interceptor/AuthorizationInterceptor.java index 723834ba..e2aa4563 100644 --- a/minsu/minsuguanliw/src/main/java/com/interceptor/AuthorizationInterceptor.java +++ b/minsu/minsuguanliw/src/main/java/com/interceptor/AuthorizationInterceptor.java @@ -23,52 +23,112 @@ import com.utils.R; /** * 权限(Token)验证 */ + +/** + * 这是一个用于权限(Token)验证的拦截器类,实现了HandlerInterceptor接口,在Web应用中可以拦截请求,对请求进行权限相关的验证处理, + * 通过检查请求携带的Token来判断用户是否有权限访问相应资源,同时还处理了一些跨域相关的设置以及对特定无需验证的请求路径进行放行等操作,是保障系统安全访问控制的重要组成部分。 + * 此类被标记为Spring的组件(通过@Component注解),以便能被Spring容器管理并在合适的时机参与到请求处理流程中。 + * + * 其主要职责包括:判断请求路径是否属于特定的无需验证的路径直接放行、设置跨域请求相关的响应头信息、检查方法上是否有忽略验证的注解(@IgnoreAuth)以及从请求头中获取Token用于后续的验证操作等。 + */ + +// 使用@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接口中的一个回调方法,在请求处理之前被调用,用于进行预处理操作, + * 主要在这里实现权限验证以及跨域相关的设置等逻辑,根据验证结果决定是否放行请求继续后续的处理流程,返回值为布尔类型,true表示放行,false表示拦截。 + * + * @param request 当前的HttpServletRequest对象,包含了请求相关的所有信息,如请求路径、请求头、请求参数等,可以从中获取进行权限验证等操作所需的数据。 + * @param response 当前的HttpServletResponse对象,用于设置响应相关的信息,例如在这里设置跨域请求的响应头信息,来控制浏览器对跨域请求的处理方式。 + * @param handler 表示被拦截的请求对应的处理器对象,其具体类型可能不同,通过判断其类型来获取方法上的相关注解等信息,以确定是否需要进行权限验证等操作。 + * @throws Exception 如果在处理过程中出现异常,可以抛出,由上层的异常处理机制进行统一处理,例如在验证Token等操作出现错误时可以抛出异常。 + * @return 返回一个布尔值,true表示请求可以继续往后传递进行后续的处理(即放行请求),false表示拦截该请求,不允许其继续执行后续的业务逻辑。 + */ + @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; } } diff --git a/minsu/minsuguanliw/src/main/java/com/model/enums/TypeEnum.java b/minsu/minsuguanliw/src/main/java/com/model/enums/TypeEnum.java index 39061d8a..ff715bb2 100644 --- a/minsu/minsuguanliw/src/main/java/com/model/enums/TypeEnum.java +++ b/minsu/minsuguanliw/src/main/java/com/model/enums/TypeEnum.java @@ -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; } } + + + diff --git a/minsu/minsuguanliw/src/main/java/com/service/CommonService.java b/minsu/minsuguanliw/src/main/java/com/service/CommonService.java index 6e5ea56d..d4bd97ac 100644 --- a/minsu/minsuguanliw/src/main/java/com/service/CommonService.java +++ b/minsu/minsuguanliw/src/main/java/com/service/CommonService.java @@ -4,79 +4,151 @@ import java.util.List; import java.util.Map; public interface CommonService { + // 以下这些方法声明所在的类(推测是某个数据访问相关的接口或者抽象类等,需结合完整代码上下文判断),定义了一系列用于不同数据操作的方法, + // 通过接收不同的参数来控制具体的操作逻辑,并返回相应类型的数据结果(或无返回值用于执行某些操作),以满足业务中多样化的数据处理需求。 + + // 获取选项的方法,接收一个名为params的参数,其类型是Map, +// 该参数用于传递一些配置信息、查询条件等内容(具体键值对含义取决于业务场景), +// 方法返回一个List类型的结果,即返回一个字符串列表,列表中的元素代表符合条件的选项内容, +// 例如可能是下拉框选项、可选择的配置项等,具体取决于该方法在业务中的实际用途。 List getOption(Map params); - + + // 根据选项相关参数获取关注信息的方法,接收一个Map类型的params参数, +// 此参数包含了用于确定关注信息查询范围、筛选条件等的各种配置信息(具体根据业务逻辑而定), +// 返回值是一个Map类型,意味着返回的是一个键值对形式的映射,其中键表示关注信息的不同属性,值则对应各属性的具体内容, +// 比如可以是某个用户关注的对象信息、对应权限等相关内容,由业务场景来决定具体返回的数据结构。 Map getFollowByOption(Map params); - + + // 执行某个操作(从方法名sh较难直接明确具体操作内容,需结合业务场景确定)的方法, +// 接收一个Map类型的params参数,该参数用于传递控制此操作执行的各种条件、配置等相关信息, +// 此方法无返回值,说明该操作可能主要用于对数据进行修改、更新、执行特定业务逻辑等操作,而不需要返回具体的数据结果。 void sh(Map params); - + +// 用于统计提醒相关数量的方法,接收一个Map类型的params参数, +// 这个参数中包含了确定统计提醒数量范围、类型等条件的各种键值对信息(具体由业务逻辑规定), +// 方法返回一个整型(int)数值,代表符合给定参数条件下统计得出的提醒数量, +// 例如可以是未读提醒数量、特定时间段内的提醒数量等,取决于业务对提醒数量统计的具体要求。 + int remindCount(Map params); - + + // 根据传入参数进行选择计算(selectCal,具体计算逻辑由业务场景定义)的方法, +// 接收Map类型的params参数,该参数用于传递计算所需的输入数据、计算规则、相关配置等信息, +// 返回一个Map类型的结果,即返回一个键值对形式的映射,其中键可以表示计算结果的不同属性,值则是对应属性的具体数值或内容, +// 比如可以是经过某种数学运算、业务规则计算后得到的汇总数据、比率等结果信息。 Map selectCal(Map params); + // 用于获取图表相关综合数据的方法,接收一个Map类型的params参数, +// 该参数包含了确定图表数据查询条件、涉及的数据范围、图表类型相关配置等信息(具体取决于业务中图表展示的需求), +// 返回值是一个List>类型的列表,列表中的每个Map元素代表图表的一部分数据信息, +// 例如可以是图表的系列数据、坐标轴数据等不同部分的数据集合,整体构成用于生成完整图表的数据基础,具体每个Map的结构和内容由业务逻辑决定。 List> chartBoth(Map params); + // 获取图表相关某一方面数据(相对chartBoth可能是更单一维度的数据,具体取决于业务逻辑)的方法, +// 同样接收Map类型的params参数,该参数用于控制具体的数据查询条件、范围等信息, +// 返回一个List>类型的列表,其中每个Map元素包含了此次查询得到的图表某一相关部分的数据, +// 比如可能是图表中某一个数据系列的数据,用于在构建图表时填充相应的部分,具体内容由业务场景中图表的设计和需求来决定。 List> chartOne(Map params); + // 执行分组查询操作的方法,接收Map类型的params参数, +// 该参数包含了分组依据的字段、查询的数据表、筛选条件等用于控制分组查询的相关信息(具体由业务逻辑规定), +// 返回一个List>类型的列表,列表中的每个Map表示一组分组查询后的结果信息, +// 例如可以包含分组字段以及对应分组下的其他相关数据等内容,方便后续对分组数据进行处理、展示或进一步分析等操作。 List> selectGroup(Map params); - + + // 根据传入参数进行按值查询(selectValue,具体按什么值以及查询逻辑取决于业务场景)的方法, +// 接收Map类型的params参数,该参数用于传递按值查询所需的条件、要查询的值相关信息、数据表信息等内容, +// 返回一个List>类型的列表,其中每个Map对应按值查询后的一组结果信息, +// 其具体的键值对内容表示按值查询相关的属性及对应的值,由具体业务逻辑决定,例如可以是符合特定数值条件的数据记录集合等情况。 List> selectValue(Map params); + /** - tableName 查询表 - condition1 条件1 - condition1Value 条件1值 - average 计算平均评分 - * */ + * 此方法用于查询评分相关信息并返回相应结果,通过接收一个Map类型的参数params来控制查询操作的具体逻辑。 + * + * 参数params中包含了多个关键信息,具体如下: + * - tableName:表示要进行查询评分操作的查询表,指明了数据来源的表名称,其具体值由业务场景决定,不同的业务模块可能对应不同的数据表来存储评分相关数据。 + * - condition1:代表条件1,是用于筛选或限定评分查询范围的一个条件字段,例如可以是某个用户ID、某个时间段等具体的筛选条件,具体含义取决于具体业务逻辑中的使用方式。 + * - condition1Value:对应条件1的值,与condition1配合使用,用于明确具体的筛选数值等内容,比如当condition1是用户ID时,此参数就是具体的用户ID数值,以此精准定位符合条件的数据记录来计算评分。 + * - average:从名称推测用于控制是否进行平均评分的计算以及相关计算规则等,可能是一个布尔值(例如true表示计算平均评分,false表示不计算)或者包含更多计算相关配置的对象(如指定计算平均评分的分组方式等,具体由业务定义)。 + * + * 方法返回值是一个Map类型,返回的这个映射中,键表示评分相关信息的不同属性,比如可以是“平均分”“总分”“评分人数”等属性名称,值则是对应属性的具体内容,例如具体的数值、其他相关对象等,方便后续根据返回结果进行相应的业务处理、展示等操作,整体的返回数据结构和具体内容取决于业务中对评分查询结果的要求和设计。 + */ Map queryScore(Map params); + /** * 下面为新加的 */ /** - * 新的级联字典表的 分组求和统计 - * @param params - * @return + * 以下这些方法声明所在的类(通常是某个数据处理相关的接口或者抽象类等,需结合完整代码上下文判断)定义了多种不同的数据操作方法, + * 通过接收参数params来控制具体操作的逻辑,并返回相应类型的数据结果(或返回整型表示操作执行情况等),以满足业务中不同的数据统计、字段值变更等需求。 + */ + + + /** + * 新的级联字典表的分组求和统计方法。 + * 接收一个名为params的参数,其类型为Map,该参数用于传递各种与分组求和统计相关的配置信息、筛选条件等内容(具体键值对含义取决于业务逻辑)。 + * 例如可能包含要操作的级联字典表相关信息、分组的字段、求和的目标字段以及其他限定参与求和数据范围的条件等。 + * 返回值是一个List>类型的列表,列表中的每个Map表示一组分组求和后的统计结果信息, + * 像可能包含分组字段对应的标识以及对应的求和数值等键值对内容,便于后续基于这些结果进行数据展示、进一步分析等操作,具体结构由业务场景决定。 */ List> newSelectGroupSum(Map params); + /** - * 新的级联字典表的 分组求和统计 - * @param params - * @return + * 新的级联字典表的分组求和统计方法(此处重复定义了同名方法,可能存在命名失误或者业务上确实需要两个同名但不同实现逻辑的情况,需结合具体代码进一步确认)。 + * 同样接收Map类型的params参数,该参数用于传递在新的级联字典表中进行分组求和统计所需的各项条件、配置信息等(具体依据业务要求而定)。 + * 返回一个List>类型的列表,其中每个元素Map对应一组分组求和统计的结果数据, + * 例如包含分组字段及对应求和值等相关信息,方便后续按业务需求对统计结果进行处理和使用。 */ List> newSelectGroupCount(Map params); + + /** - * 当前表的日期分组求和 - * @param params - * @return + * 当前表的日期分组求和方法。 + * 接收Map类型的params参数,该参数包含了当前表进行日期分组求和操作所需要的各种条件信息, + * 比如要操作的表名、用于分组的日期字段(可能还涉及日期格式相关设置等)、求和的目标字段以及其他筛选条件(用于确定哪些数据参与求和计算)等内容,具体由业务场景规定。 + * 返回值为List>类型的列表,列表中的每个Map代表一组按照日期分组求和后的统计结果数据, + * 例如可能包含日期分组标识(如具体的年、月、日等形式,取决于业务对日期的处理方式)以及对应的求和数值等键值对内容,便于后续在数据展示或分析中体现不同日期分组下的求和情况。 */ List> newSelectDateGroupSum(Map params); + /** - * 查询字典表的分组统计总条数 - * @param params - * @return + * 查询字典表的分组统计总条数方法。 + * 接收Map类型的params参数,该参数用于传递查询字典表分组统计总条数操作的相关配置信息、筛选条件等, + * 例如包含要查询的字典表名称、分组依据的字段以及其他限定统计范围的条件等(具体键值对含义取决于业务逻辑)。 + * 返回的是List>类型的列表,里面的每个Map对应一组字典表分组统计总条数的结果情况, + * 通常会包含分组字段以及该分组下的记录总条数等键值对,方便在不同业务需求下对字典表分组统计的结果进行展示、对比等操作。 */ List> newSelectDateGroupCount(Map params); + + /** - * 增加字段数字 - * @param params - * @return + * 增加字段数字的方法。 + * 接收一个Map类型的params参数,该参数用于指定增加字段数字操作的相关条件及目标字段等信息, + * 比如要操作的数据表名称、需要增加数值的具体字段名、增加的数值大小、以及可能的筛选条件(用于确定对哪些记录的字段值进行增加操作)等内容,具体由业务场景决定。 + * 返回值为整型(int),其含义可能是成功增加数值的记录条数,或者表示操作执行是否成功的某种状态码(具体由该方法在业务逻辑中的定义决定),用于反馈操作的执行情况。 */ int plusCloumNumber(Map params); + + /** - * 减少字段数字 - * @param params - * @return + * 减少字段数字的方法。 + * 接收Map类型的params参数,此参数用于明确减少字段数字操作的具体细节, + * 像要操作的数据表、待减少数值的目标字段、减少的数值量以及相关筛选条件(限定对哪些记录执行字段值减少操作)等信息会通过params传入(具体依据业务逻辑而定)。 + * 方法返回一个整型(int)值,该值的意义大概率与操作的执行结果相关,比如成功减少数值的记录数量,或者用于标识操作是否顺利完成的一个状态值(取决于具体业务对该方法返回值的定义)。 */ int reduceCloumNumber(Map params); + + /** - * 修改字段数字 - * @param params - * @return + * 修改字段数字的方法。 + * 以Map类型的params参数来控制具体的修改操作逻辑,params里面会包含诸如要操作的数据表名称、需要修改值的目标字段、修改后的新值、 + * 以及用于筛选出要修改记录的条件等关键信息(具体内容由业务场景所规定)。 + * 该方法返回的整型(int)值通常用于反馈修改操作的执行情况,可能代表成功修改的记录条数,或者是用于指示操作是否成功完成的一个状态标识(取决于该方法在业务逻辑中的具体定义)。 */ int updateCloumValue(Map params); @@ -123,17 +195,35 @@ public interface CommonService { -- 【日期,字符串,下拉框】 */ + + /** + * 以下这两个方法所在的类(通常是与数据统计及图表展示相关业务逻辑对应的类,需结合完整代码上下文进一步明确), + * 主要用于生成柱状图相关的数据统计结果,通过接收包含不同配置信息的参数params来确定具体的统计逻辑, + * 并返回相应格式的数据结构,方便后续用于柱状图的构建及展示等操作。 + */ + + /** - * 柱状图求和 - * @param params - * @return + * 柱状图求和方法。 + * 接收一个Map类型的参数params,该参数用于传递和柱状图求和操作相关的各种配置及数据信息, + * 例如可能包含要统计的数据表名称、用于分组的字段(比如按照不同类别、时间段等进行分组)、求和的目标字段(确定对哪些数据进行求和计算)、 + * 以及可能涉及到的其他筛选条件(限定参与求和计算的数据范围)等内容,具体的键值对含义取决于具体的业务场景和柱状图展示需求。 + * 返回值是一个List>类型的列表,列表中的每个Map表示一组柱状图求和后的统计结果信息, + * 比如可能包含分组字段对应的标识(如具体的分类名称、日期等)以及对应的求和数值等键值对内容,这些结果数据可用于构建柱状图中不同分组下的求和展示部分, + * 以直观呈现各分组的数据总和情况,便于用户查看不同类别或时间段等维度下数据的总体量对比。 */ List> barSum(Map params); + + /** - * 柱状图统计 - * @param params - * @return + * 柱状图统计方法。 + * 同样接收一个Map类型的参数params,该参数涵盖了诸如要操作的数据表信息、分组依据的字段、统计的具体规则(比如计数、平均值等统计方式,具体取决于业务实现)、 + * 以及其他相关的筛选条件(用于精准确定参与统计的数据范围)等关键信息,其具体内容由业务场景所决定,旨在满足不同柱状图统计需求。 + * 此方法返回的是List>类型的列表,其中每个Map对应一组柱状图统计后的结果信息, + * 像可能包含分组标识以及对应的统计数值(例如分组下的记录条数、平均值等,具体根据统计方式而定)等键值对,这些结果数据可用于在柱状图中展示相应的统计情况, + * 帮助用户直观了解数据分布及特征等信息,辅助进行数据分析和决策等操作。 */ List> barCount(Map params); + } diff --git a/minsu/minsuguanliw/src/main/java/com/service/impl/CommonServiceImpl.java b/minsu/minsuguanliw/src/main/java/com/service/impl/CommonServiceImpl.java index cb42f901..6db1e592 100644 --- a/minsu/minsuguanliw/src/main/java/com/service/impl/CommonServiceImpl.java +++ b/minsu/minsuguanliw/src/main/java/com/service/impl/CommonServiceImpl.java @@ -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; + /** + * 实现了CommonService接口中定义的getOption方法,功能是获取选项信息。 + * 该方法接收一个Map类型的参数params,params用于传递查询选项信息所需要的相关条件、配置等信息(具体键值对含义取决于业务逻辑)。 + * 通过调用注入的commonDao的getOption方法,将参数params传递下去,获取并返回符合条件的选项信息列表,返回值类型为List, + * 列表中的每个字符串元素代表一个具体的选项内容,例如可能是下拉列表的选项、配置项等,具体取决于业务场景中对选项的定义。 + */ @Override public List getOption(Map params) { return commonDao.getOption(params); } - + + /** + * 实现了CommonService接口中定义的getFollowByOption方法,用于获取与选项相关的关注信息。 + * 接收一个Map类型的参数params,该参数包含了确定关注信息查询范围、筛选条件等的各种配置信息(具体依据业务逻辑而定)。 + * 调用commonDao的getFollowByOption方法并传递params参数,获取并返回相应的关注信息,返回值是一个Map类型, + * 即返回的是一个键值对形式的映射,其中键表示关注信息的不同属性,值则对应各属性的具体内容,比如可以是用户关注的对象详情、对应权限等相关信息,由业务场景决定具体返回的数据结构。 + */ @Override public Map getFollowByOption(Map params) { return commonDao.getFollowByOption(params); @@ -40,50 +64,126 @@ public class CommonServiceImpl implements CommonService { condition1Value 条件1值 average 计算平均评分 * */ + /** + * 以下这些方法是实现某个服务接口(从类实现了接口以及方法的命名推测,可能是与数据查询、统计、图表相关操作等业务逻辑对应的服务接口,需结合完整代码上下文判断)的具体实现方法, + * 它们大多是通过调用注入的commonDao对象的对应方法来完成具体的业务操作,将参数传递给底层的数据访问层(由commonDao代表),并返回相应的结果或者执行相应的无返回值操作, + * 以此来实现服务层与数据访问层的交互,为上层应用提供数据相关的服务支持。 + * + * 参数params在各个方法中都用于传递控制对应操作的相关条件、配置等信息,其内部具体的键值对含义取决于不同业务场景下各方法的功能需求,例如包含要操作的表名、筛选条件、计算规则等不同的内容。 + * + * 其中queryScore方法相关的参数params中包含以下几个关键信息(从注释中可看出): + * - tableName:表示要进行查询评分操作的查询表,指明了数据来源的表名称,其具体值由业务场景决定,不同的业务模块可能对应不同的数据表来存储评分相关数据。 + * - condition1:代表条件1,是用于筛选或限定评分查询范围的一个条件字段,例如可以是某个用户ID、某个时间段等具体的筛选条件,具体含义取决于具体业务逻辑中的使用方式。 + * - condition1Value:对应条件1的值,与condition1配合使用,用于明确具体的筛选数值等内容,比如当condition1是用户ID时,此参数就是具体的用户ID数值,以此精准定位符合条件的数据记录来计算评分。 + * - average:从名称推测用于控制是否进行平均评分的计算以及相关计算规则等,可能是一个布尔值(例如true表示计算平均评分,false表示不计算)或者包含更多计算相关配置的对象(如指定计算平均评分的分组方式等,具体由业务定义)。 + */ + + /** + * 查询评分相关信息的方法,通过调用注入的commonDao的queryScore方法来获取评分数据。 + * 接收一个Map类型的参数params,该参数传递了查询评分操作所需的各种配置信息(如上述提到的查询表名、条件、计算规则等)。 + * 返回值是一个Map类型,返回的这个映射中,键表示评分相关信息的不同属性,比如可以是“平均分”“总分”“评分人数”等属性名称,值则是对应属性的具体内容,例如具体的数值、其他相关对象等, + * 方便后续根据返回结果进行相应的业务处理、展示等操作,整体的返回数据结构和具体内容取决于业务中对评分查询结果的要求和设计。 + */ public Map queryScore(Map params){ return commonDao.queryScore(params); } - + + /** + * 执行某个操作(从方法名sh较难直接明确具体操作内容,需结合业务场景确定)的方法, + * 通过调用commonDao的sh方法来执行具体操作,接收一个Map类型的参数params,该参数用于传递控制此操作执行的各种条件、配置等相关信息, + * 此方法无返回值,说明该操作可能主要用于对数据进行修改、更新、执行特定业务逻辑等操作,而不需要返回具体的数据结果,具体的操作行为由commonDao的sh方法实现逻辑决定。 + */ @Override public void sh(Map params) { - commonDao.sh(params); + commonDao.sh(params); } + + /** + * 用于统计提醒相关数量的方法,通过调用commonDao的remindCount方法来获取提醒数量统计结果。 + * 接收一个Map类型的参数params,这个参数中包含了确定统计提醒数量范围、类型等条件的各种键值对信息(具体由业务逻辑规定)。 + * 方法返回一个整型(int)数值,代表符合给定参数条件下统计得出的提醒数量,例如可以是未读提醒数量、特定时间段内的提醒数量等,取决于业务对提醒数量统计的具体要求。 + */ @Override public int remindCount(Map params) { return commonDao.remindCount(params); } + + /** + * 根据传入参数进行选择计算(selectCal,具体计算逻辑由业务场景定义)的方法, + * 通过调用commonDao的selectCal方法来执行相应的计算操作,接收Map类型的参数params,该参数用于传递计算所需的输入数据、计算规则、相关配置等信息。 + * 返回一个Map类型的结果,即返回一个键值对形式的映射,其中键可以表示计算结果的不同属性,值则是对应属性的具体数值或内容, + * 比如可以是经过某种数学运算、业务规则计算后得到的汇总数据、比率等结果信息,具体的计算结果结构取决于业务逻辑中对selectCal操作的定义。 + */ @Override public Map selectCal(Map params) { return commonDao.selectCal(params); } - + + + /** + * 执行分组查询操作的方法,通过调用commonDao的selectGroup方法来获取分组查询结果。 + * 接收Map类型的参数params,该参数包含了分组依据的字段、查询的数据表、筛选条件等用于控制分组查询的相关信息(具体由业务逻辑规定)。 + * 返回一个List>类型的列表,列表中的每个Map表示一组分组查询后的结果信息, + * 例如可以包含分组字段以及对应分组下的其他相关数据等内容,方便后续对分组数据进行处理、展示或进一步分析等操作,具体的分组查询结果结构取决于业务逻辑中对selectGroup操作的定义。 + */ @Override public List> selectGroup(Map params) { return commonDao.selectGroup(params); } - + + + /** + * 根据传入参数进行按值查询(selectValue,具体按什么值以及查询逻辑取决于业务场景)的方法, + * 通过调用commonDao的selectValue方法来获取按值查询的结果,接收Map类型的参数params,该参数用于传递按值查询所需的条件、要查询的值相关信息、数据表信息等内容。 + * 返回一个List>类型的列表,其中每个Map对应按值查询后的一组结果信息, + * 其具体的键值对内容表示按值查询相关的属性及对应的值,由具体业务逻辑决定,例如可以是符合特定数值条件的数据记录集合等情况。 + */ @Override public List> selectValue(Map params) { return commonDao.selectValue(params); } + + /** + * 用于获取图表相关综合数据的方法,通过调用commonDao的chartBoth方法来获取图表综合数据。 + * 接收一个Map类型的参数params,该参数包含了确定图表数据查询条件、涉及的数据范围、图表类型相关配置等信息(具体取决于业务中图表展示的需求)。 + * 返回值是一个List>类型的列表,列表中的每个Map元素代表图表的一部分数据信息, + * 例如可以是图表的系列数据、坐标轴数据等不同部分的数据集合,整体构成用于生成完整图表的数据基础,具体每个Map的结构和内容由业务逻辑决定。 + */ @Override public List> chartBoth(Map params) { return commonDao.chartBoth(params); } + + /** + * 获取图表相关某一方面数据(相对chartBoth可能是更单一维度的数据,具体取决于业务逻辑)的方法, + * 通过调用commonDao的chartOne方法来获取图表某一方面的数据,同样接收Map类型的params参数,该参数用于控制具体的数据查询条件、范围等信息。 + * 返回一个List>类型的列表,其中每个Map元素包含了此次查询得到的图表某一相关部分的数据, + * 比如可能是图表中某一个数据系列的数据,用于在构建图表时填充相应的部分,具体内容由业务场景中图表的设计和需求来决定。 + */ @Override public List> chartOne(Map params) { return commonDao.chartOne(params); } + + /** + * 以下这些方法均为实现某个服务接口(从代码结构及方法命名推测,可能是与数据统计、字段值操作等业务逻辑相关的服务接口,需结合完整代码上下文进一步明确)中的具体方法, + * 它们主要的功能是调用注入的commonDao对象对应的方法来完成相应的业务操作,将接收到的参数params传递给底层的数据访问层(通过commonDao实现交互),并返回对应的数据结果或者执行相应操作后返回相应的状态标识(整型返回值情况), + * 以此实现服务层与数据访问层的协作,为上层应用提供多样化的数据处理服务。 + * 参数params在各个方法中都起着传递操作相关配置信息、条件等关键作用,其内部具体的键值对含义因不同方法所对应的业务功能而有所差异,例如包含操作的数据表、分组字段、条件值、计算规则等不同内容。 + */ + /** - * 新的级联字典表的 分组求和统计 - * @param params - * @return + * 新的级联字典表的分组求和统计方法,实现了对应接口方法的具体逻辑。 + * 接收一个Map类型的参数params,该参数用于传递各种与在新的级联字典表中进行分组求和统计相关的配置信息、筛选条件等内容(具体键值对含义取决于业务逻辑), + * 例如可能包含要操作的级联字典表相关信息、分组的字段、求和的目标字段以及其他限定参与求和数据范围的条件等。 + * 通过调用commonDao的newSelectGroupSum方法,并将params参数传递过去,获取并返回分组求和统计后的结果数据,返回值是一个List>类型的列表, + * 列表中的每个Map表示一组分组求和后的统计结果信息,像可能包含分组字段对应的标识以及对应的求和数值等键值对内容,便于后续基于这些结果进行数据展示、进一步分析等操作,具体结构由业务场景决定。 */ @Override public List> newSelectGroupSum(Map params) { @@ -91,20 +191,26 @@ public class CommonServiceImpl implements CommonService { } + /** - * 新的级联字典表的 分组条数统计 - * @param params - * @return + * 新的级联字典表的分组条数统计方法,用于实现接口中定义的相应功能。 + * 同样接收Map类型的params参数,该参数用于传递在新的级联字典表中进行分组条数统计所需的各项条件、配置信息等(具体依据业务要求而定), + * 例如涉及要操作的表信息、分组依据的字段以及限定统计范围的其他条件等。 + * 调用commonDao的newSelectGroupCount方法并传递params参数,获取并返回相应的分组条数统计结果,返回值为List>类型的列表, + * 其中每个元素Map对应一组分组统计总条数的结果数据,例如包含分组字段及对应统计的条数等相关信息,方便后续按业务需求对统计结果进行处理和使用。 */ @Override public List> newSelectGroupCount(Map params) { return commonDao.newSelectGroupCount(params); } + /** - * 当前表的日期分组求和 - * @param params - * @return + * 当前表的日期分组求和方法,实现了对应接口方法的业务逻辑。 + * 接收Map类型的params参数,该参数包含了当前表进行日期分组求和操作所需要的各种条件信息, + * 比如要操作的表名、用于分组的日期字段(可能还涉及日期格式相关设置等)、求和的目标字段以及其他筛选条件(用于确定哪些数据参与求和计算)等内容,具体由业务场景规定。 + * 调用commonDao的newSelectDateGroupSum方法并传递params参数,获取并返回按照日期分组求和后的统计结果数据,返回值为List>类型的列表, + * 列表中的每个Map代表一组按照日期分组求和后的统计结果数据,例如可能包含日期分组标识(如具体的年、月、日等形式,取决于业务对日期的处理方式)以及对应的求和数值等键值对内容,便于后续在数据展示或分析中体现不同日期分组下的求和情况。 */ @Override public List> newSelectDateGroupSum(Map params) { @@ -113,28 +219,56 @@ public class CommonServiceImpl implements CommonService { /** - * 查询字典表的分组统计总条数 - * @param params - * @return + * 查询字典表的分组统计总条数方法,负责实现接口中对应的功能。 + * 接收Map类型的params参数,该参数用于传递查询字典表分组统计总条数操作的相关配置信息、筛选条件等, + * 例如包含要查询的字典表名称、分组依据的字段以及其他限定统计范围的条件等(具体键值对含义取决于业务逻辑)。 + * 通过调用commonDao的newSelectDateGroupCount方法并传递params参数,获取并返回相应的分组统计总条数结果,返回的是List>类型的列表, + * 里面的每个Map对应一组字典表分组统计总条数的结果情况,通常会包含分组字段以及该分组下的记录总条数等键值对,方便在不同业务需求下对字典表分组统计的结果进行展示、对比等操作。 */ @Override public List> newSelectDateGroupCount(Map params) { return commonDao.newSelectDateGroupCount(params); } + + /** + * 增加字段数字的方法,实现了对应接口中定义的增加字段值的功能逻辑。 + * 接收一个Map类型的params参数,该参数用于指定增加字段数字操作的相关条件及目标字段等信息, + * 比如要操作的数据表名称、需要增加数值的具体字段名、增加的数值大小、以及可能的筛选条件(用于确定对哪些记录的字段值进行增加操作)等内容,具体由业务场景决定。 + * 调用commonDao的plusCloumNumber方法并传递params参数,获取并返回操作的执行情况,返回值为整型(int),其含义可能是成功增加数值的记录条数,或者表示操作执行是否成功的某种状态码(具体由该方法在业务逻辑中的定义决定),用于反馈操作的执行情况。 + */ @Override public int plusCloumNumber(Map params) { return commonDao.plusCloumNumber(params); } + + + /** + * 减少字段数字的方法,实现接口中相应的减少字段值的功能。 + * 接收Map类型的params参数,此参数用于明确减少字段数字操作的具体细节, + * 像要操作的数据表、待减少数值的目标字段、减少的数值量以及相关筛选条件(限定对哪些记录执行字段值减少操作)等信息会通过params传入(具体依据业务逻辑而定)。 + * 通过调用commonDao的reduceCloumNumber方法并传递params参数,获取并返回操作的执行结果,方法返回一个整型(int)值,该值的意义大概率与操作的执行结果相关, + * 比如成功减少数值的记录数量,或者用于标识操作是否顺利完成的一个状态值(取决于具体业务对该方法返回值的定义)。 + */ @Override public int reduceCloumNumber(Map params) { return commonDao.reduceCloumNumber(params); } + + + /** + * 修改字段数字的方法,用于完成接口中定义的修改字段值的相关业务逻辑。 + * 以Map类型的params参数来控制具体的修改操作逻辑,params里面会包含诸如要操作的数据表名称、需要修改值的目标字段、修改后的新值、 + * 以及用于筛选出要修改记录的条件等关键信息(具体内容由业务场景所规定)。 + * 调用commonDao的updateCloumValue方法并传递params参数,获取并返回修改操作的执行情况,该方法返回的整型(int)值通常用于反馈修改操作的执行情况, + * 可能代表成功修改的记录条数,或者是用于指示操作是否成功完成的一个状态标识(取决于该方法在业务逻辑中的具体定义)。 + */ @Override public int updateCloumValue(Map params) { return commonDao.updateCloumValue(params); } + /** * 饼状图 * -- 饼状图 查询当前表 @@ -176,22 +310,41 @@ public class CommonServiceImpl implements CommonService { -- 求和 -- 【日期,字符串,下拉框】 */ + + /** - * 柱状图求和 - * @param params - * @return + * 以下这两个方法用于实现柱状图相关的数据处理操作,通过调用注入的commonDao对象对应的方法来获取相应的统计结果数据, + * 进而为上层应用提供构建柱状图所需的数据支持,它们在整个业务逻辑中承担着与柱状图数据生成密切相关的功能,具体的数据操作细节由commonDao中对应的实现来完成。 + * 参数params在这两个方法中都起着传递控制柱状图相关操作的具体条件、配置等关键信息的作用,其内部具体的键值对含义取决于不同的业务场景以及柱状图的具体展示需求, + * 例如包含要统计的数据表信息、分组依据、筛选条件以及涉及的计算字段等内容。 + */ + + + /** + * 柱状图求和方法,用于获取柱状图求和相关的数据结果。 + * 接收一个Map类型的参数params,该参数用于传递和柱状图求和操作相关的各种配置及数据信息, + * 例如可能包含要统计的数据表名称、用于分组的字段(比如按照不同类别、时间段等进行分组)、求和的目标字段(确定对哪些数据进行求和计算)、 + * 以及可能涉及到的其他筛选条件(限定参与求和计算的数据范围)等内容,具体的键值对含义取决于具体的业务场景和柱状图展示需求。 + * 通过调用commonDao的barSum方法,并将params参数传递过去,获取并返回柱状图求和后的统计结果数据,返回值是一个List>类型的列表, + * 列表中的每个Map表示一组柱状图求和后的统计结果信息,比如可能包含分组字段对应的标识(如具体的分类名称、日期等)以及对应的求和数值等键值对内容, + * 这些结果数据可用于构建柱状图中不同分组下的求和展示部分,以直观呈现各分组的数据总和情况,便于用户查看不同类别或时间段等维度下数据的总体量对比。 */ public List> barSum(Map params){ return commonDao.barSum(params); } + /** - * 柱状图统计 - * @param params - * @return + * 柱状图统计方法,旨在获取柱状图统计相关的数据信息。 + * 同样接收一个Map类型的参数params,该参数涵盖了诸如要操作的数据表信息、分组依据的字段、统计的具体规则(比如计数、平均值等统计方式,具体取决于业务实现)、 + * 以及其他相关的筛选条件(用于精准确定参与统计的数据范围)等关键信息,其具体内容由业务场景所决定,旨在满足不同柱状图统计需求。 + * 调用commonDao的barCount方法并传递params参数,获取并返回柱状图统计后的结果数据,此方法返回的是List>类型的列表, + * 其中每个Map对应一组柱状图统计后的结果信息,像可能包含分组标识以及对应的统计数值(例如分组下的记录条数、平均值等,具体根据统计方式而定)等键值对, + * 这些结果数据可用于在柱状图中展示相应的统计情况,帮助用户直观了解数据分布及特征等信息,辅助进行数据分析和决策等操作。 */ public List> barCount(Map params){ return commonDao.barCount(params); } + } diff --git a/minsu/minsuguanliw/src/main/java/com/service/impl/UsersServiceImpl.java b/minsu/minsuguanliw/src/main/java/com/service/impl/UsersServiceImpl.java index 786bf53d..a6f717e3 100644 --- a/minsu/minsuguanliw/src/main/java/com/service/impl/UsersServiceImpl.java +++ b/minsu/minsuguanliw/src/main/java/com/service/impl/UsersServiceImpl.java @@ -22,29 +22,60 @@ import com.utils.Query; * 系统用户 * @author */ + +/** + * 此类代表系统用户相关的服务实现类,用于处理与系统用户相关的业务逻辑,实现了UsersService接口中定义的多个方法, + * 通过继承ServiceImpl类并关联对应的UsersDao和UsersEntity,能够便捷地使用一些基础的数据操作方法,同时为上层应用提供更贴合业务需求的用户相关服务功能。 + * + * @author 此处应填写该类的作者姓名,用于明确代码的编写者,方便后续代码维护以及追溯代码相关问题的责任人等情况。 + */ + +// 使用@Service注解将该类标记为Spring框架中的一个服务层组件,并且指定了其在容器中的bean名称为"userService", +// 这样其他组件就可以通过该名称在Spring容器中获取到此服务类的实例,进而使用它所提供的各种方法来处理业务逻辑。 @Service("userService") public class UsersServiceImpl extends ServiceImpl implements UsersService { + /** + * 实现UsersService接口中定义的queryPage方法,用于查询用户信息并进行分页处理。 + * 接收一个Map类型的参数params,该参数用于传递分页查询相关的各种条件信息,例如查询的页码、每页显示的记录数、筛选条件等(具体键值对含义取决于业务逻辑)。 + * 首先通过this.selectPage方法创建一个Page类型的分页对象page,在创建过程中,使用传入的params参数构建Query对象来获取分页相关配置, + * 并结合一个默认的EntityWrapper对象(此处可能用于添加一些通用的查询条件或者关联关系等,具体取决于业务实现)来确定最终的查询条件。 + * 最后将构建好的分页对象page封装到PageUtils对象中并返回,以便上层应用可以方便地获取分页后的用户数据以及分页相关的元数据(如总页数、总记录数等)。 + */ @Override public PageUtils queryPage(Map params) { Page page = this.selectPage( - new Query(params).getPage(), - new EntityWrapper() - ); - return new PageUtils(page); + new Query(params).getPage(), + new EntityWrapper() + ); + return new PageUtils(page); } + + /** + * 实现UsersService接口中定义的selectListView方法,用于按照特定的查询条件(通过Wrapper封装)查询用户列表信息。 + * 接收一个Wrapper类型的参数wrapper,该参数用于封装各种灵活的查询条件,例如可以指定具体的筛选字段、排序规则、关联查询等条件(具体取决于业务中对用户查询的需求)。 + * 通过调用baseMapper的selectListView方法并传入wrapper参数,获取符合条件的用户实体列表并返回,返回值类型为List,即返回一个包含多个用户实体对象的列表,这些对象代表了满足查询条件的用户信息。 + */ @Override public List selectListView(Wrapper wrapper) { return baseMapper.selectListView(wrapper); } + + /** + * 实现UsersService接口中另一个重载的queryPage方法,此方法在分页查询用户信息的基础上,还可以根据传入的Wrapper对象来进一步定制查询条件。 + * 接收两个参数,一个是Map类型的params,用于传递分页相关的通用条件信息(如页码、每页记录数等),另一个是Wrapper类型的wrapper,用于传递更具体的、个性化的查询条件。 + * 首先创建一个Page类型的分页对象page,通过传入的params参数构建Query对象来获取分页相关配置。 + * 然后调用baseMapper的selectListView方法,传入page和wrapper参数,将查询到的符合条件的用户记录设置到page对象的records属性中,以此实现根据定制条件进行分页查询用户数据的功能。 + * 最后将包含查询结果的page对象封装到PageUtils对象中并返回,方便上层应用获取带有详细分页信息和符合条件的用户数据列表,便于进行后续的数据展示、处理等操作。 + */ @Override public PageUtils queryPage(Map params, - Wrapper wrapper) { - Page page =new Query(params).getPage(); - page.setRecords(baseMapper.selectListView(page,wrapper)); - PageUtils pageUtil = new PageUtils(page); - return pageUtil; + Wrapper wrapper) { + Page page =new Query(params).getPage(); + page.setRecords(baseMapper.selectListView(page,wrapper)); + PageUtils pageUtil = new PageUtils(page); + return pageUtil; } } diff --git a/minsu/minsuguanliw/src/main/java/com/service/impl/YonghuServiceImpl.java b/minsu/minsuguanliw/src/main/java/com/service/impl/YonghuServiceImpl.java index ccdd5bcf..7df6a066 100644 --- a/minsu/minsuguanliw/src/main/java/com/service/impl/YonghuServiceImpl.java +++ b/minsu/minsuguanliw/src/main/java/com/service/impl/YonghuServiceImpl.java @@ -20,20 +20,44 @@ import com.entity.view.YonghuView; /** * 用户 服务实现类 */ + + +/** + * 这是用户相关的服务实现类,用于实现具体的用户业务逻辑,继承自ServiceImpl类并关联了YonghuDao和YonghuEntity,实现了YonghuService接口, + * 通过一系列操作来处理用户数据的分页查询等功能,同时使用了Spring的事务管理机制(通过@Transactional注解体现),保证相关操作在事务环境下执行,确保数据的一致性和完整性。 + * 该类主要向外提供了针对用户数据的服务方法,方便其他模块调用以满足业务中对用户数据操作的需求。 + */ + +// 使用@Service注解将该类标记为Spring框架中的一个服务层组件,并且指定其在容器中的bean名称为"yonghuService", +// 这样在Spring容器中可以通过该名称来获取此服务类的实例,进而调用其提供的业务方法进行相关的用户业务逻辑处理。 +// @Transactional注解用于声明该类中的方法(如果没有特殊配置,默认是所有方法)都将在事务环境下执行, +// 如果方法执行过程中出现异常,事务将会自动回滚,以保证数据的一致性,常用于涉及数据库操作等需要保证原子性的业务场景。 @Service("yonghuService") @Transactional public class YonghuServiceImpl extends ServiceImpl implements YonghuService { + /** + * 实现了YonghuService接口中定义的queryPage方法,用于对用户数据进行分页查询并返回相应的分页结果信息。 + * 接收一个Map类型的参数params,该参数用于传递分页查询相关的各种条件信息,例如页码、每页显示的记录数、筛选条件等(具体键值对含义取决于业务逻辑)。 + * 首先会进行参数的合法性判断,如果params不为空,并且其中的"limit"(每页记录数)或者"page"(页码)参数为空,说明可能没有传入分页相关的关键参数, + * 则默认设置"page"为"1",表示查询第一页数据,设置"limit"为"10",表示每页显示10条记录,以此确保分页查询能有合理的默认参数进行。 + * 接着通过new Query(params).getPage()创建一个Page类型的分页对象page,该对象包含了分页相关的配置信息以及后续会存放查询到的用户数据记录。 + * 然后调用baseMapper的selectListView方法,传入page和params参数,将查询到的符合条件的用户记录设置到page对象的records属性中,完成基于传入参数的用户数据分页查询操作。 + * 最后将包含查询结果以及分页相关信息的page对象封装到PageUtils对象中并返回,使得调用该方法的上层应用能够方便地获取分页后的用户数据以及如总页数、总记录数等分页相关的元数据,便于进行后续的数据展示、处理等操作。 + */ + @Override public PageUtils queryPage(Map 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 page =new Query(params).getPage(); + + Page page = new Query(params).getPage(); page.setRecords(baseMapper.selectListView(page,params)); return new PageUtils(page); } } + diff --git a/minsu/minsuguanliw/src/main/java/com/thread/MyThreadMethod.java b/minsu/minsuguanliw/src/main/java/com/thread/MyThreadMethod.java index 37063119..b978ba48 100644 --- a/minsu/minsuguanliw/src/main/java/com/thread/MyThreadMethod.java +++ b/minsu/minsuguanliw/src/main/java/com/thread/MyThreadMethod.java @@ -3,7 +3,24 @@ package com.thread; /** * 线程执行方法(做一些项目启动后 一直要执行的操作,比如根据时间自动更改订单状态,比如订单签收30天自动收货功能,比如根据时间来更改状态) */ + + +/** + * 这是一个自定义的线程类,继承自Thread类,用于定义线程执行的具体逻辑。 + * 该线程主要承担在项目启动后持续执行一些特定业务操作的任务,例如根据时间条件自动更改订单状态(像订单签收30天后自动收货等基于时间来变更状态的功能), + * 通过在run方法中的循环逻辑以及设置的休眠时间来周期性地执行相应操作,直到线程被中断为止。 + */ + + public class MyThreadMethod extends Thread { + + + /** + * 重写了Thread类中的run方法,此方法定义了线程启动后具体要执行的逻辑内容。 + * 在这个方法中,通过一个while循环来持续执行相关操作,只要线程未被中断(通过判断this.isInterrupted()为false来确定),就会一直循环下去。 + * 循环内部通过让线程休眠一定时间(当前设置为每隔5000毫秒,即5秒执行一次,通过Thread.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()); + } } } + diff --git a/minsu/minsuguanliw/src/main/java/com/utils/CommonUtil.java b/minsu/minsuguanliw/src/main/java/com/utils/CommonUtil.java index f6cfb86b..311f0d5d 100644 --- a/minsu/minsuguanliw/src/main/java/com/utils/CommonUtil.java +++ b/minsu/minsuguanliw/src/main/java/com/utils/CommonUtil.java @@ -3,21 +3,35 @@ package com.utils; import java.util.Random; public class CommonUtil { - /** - * 获取随机字符串 + + /** + * 此静态方法用于生成一个指定长度的随机字符串,可应用于需要生成随机标识、临时验证码等场景,通过传入参数来控制生成字符串的长度。 * - * @param num - * @return + * @param num 用于指定要生成的随机字符串的长度,参数类型为Integer,即传入一个整数,该整数决定了最终生成的随机字符串包含多少个字符。 + * @return 返回值类型为String,即返回一个按照特定规则生成的随机字符串,其字符内容来源于预定义的字符集合,长度由传入的参数num决定。 */ + 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(); + } }