pull/2/head
qian 9 months ago
parent 1d573a7c89
commit bef94df4ac

@ -4,15 +4,14 @@
<option name="autoReloadType" value="ALL" />
</component>
<component name="ChangeListManager">
<list default="true" id="a7505764-040b-48e2-b2fc-8c5b579e595f" name="Default" comment="1">
<change afterPath="$PROJECT_DIR$/.idea/jarRepositories.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
<list default="true" id="a7505764-040b-48e2-b2fc-8c5b579e595f" name="Default" comment="1.">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/UserActionAnalyzePlatform.iml" beforeDir="false" afterPath="$PROJECT_DIR$/UserActionAnalyzePlatform.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/conf/ConfigurationManager.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/conf/ConfigurationManager.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/SessionAggrStat.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/SessionAggrStat.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/test/java/cn/edu/hust/jdbc/JDBCHelperTest.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/test/java/cn/edu/hust/jdbc/JDBCHelperTest.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/SessionDetail.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/SessionDetail.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/SessionRandomExtract.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/SessionRandomExtract.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/Task.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/Task.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/Top10Category.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/Top10Category.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/Top10CategorySession.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/domain/Top10CategorySession.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/jdbc/JDBCHelper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/jdbc/JDBCHelper.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -255,6 +254,12 @@
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="node.js.detected.package.eslint" value="true" />
<property name="node.js.detected.package.tslint" value="true" />
<property name="node.js.path.for.package.eslint" value="project" />
<property name="node.js.path.for.package.tslint" value="project" />
<property name="node.js.selected.package.eslint" value="(autodetect)" />
<property name="node.js.selected.package.tslint" value="(autodetect)" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="project.structure.last.edited" value="Modules" />
@ -441,7 +446,7 @@
<workItem from="1529845795654" duration="7752000" />
<workItem from="1529887211212" duration="6851000" />
<workItem from="1529994772485" duration="146000" />
<workItem from="1734352519788" duration="1633000" />
<workItem from="1734352519788" duration="4605000" />
</task>
<task id="LOCAL-00001" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成">
<created>1529592741848</created>
@ -464,7 +469,14 @@
<option name="project" value="LOCAL" />
<updated>1734352616873</updated>
</task>
<option name="localTasksCounter" value="4" />
<task id="LOCAL-00004" summary="1.">
<created>1734354342561</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1734354342561</updated>
</task>
<option name="localTasksCounter" value="5" />
<servers />
</component>
<component name="TestHistory">
@ -584,7 +596,8 @@
<component name="VcsManagerConfiguration">
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成" />
<MESSAGE value="1" />
<option name="LAST_COMMIT_MESSAGE" value="1" />
<MESSAGE value="1." />
<option name="LAST_COMMIT_MESSAGE" value="1." />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/edu/hust/conf/ConfigurationManager.java">

@ -2,23 +2,54 @@ package cn.edu.hust.domain;
import java.io.Serializable;
public class SessionDetail implements Serializable{
// SessionDetail类实现了Serializable接口这意味着该类的对象可以进行序列化与反序列化操作
// 常用于在诸如网络传输、将对象持久化存储到文件等场景下,方便对象的保存和后续恢复使用。
public class SessionDetail implements Serializable {
// 任务ID用于唯一标识某个相关任务在涉及多任务处理的系统中通过它可以区分不同任务所对应的会话详情信息。
private Long taskId;
// 用户ID用于唯一标识系统中的用户通过它可以关联到具体是哪个用户产生的该会话相关操作记录。
private Long userId;
// 会话ID用于唯一标识一次会话在整个系统中不同的会话具有不同的该ID值通过它可以区分不同的会话实例。
// 此处变量名拼写有误应为sessionId以下按正确语义进行注释说明
private String sessinId;
// 页面ID可能用于标识用户在会话期间访问的具体页面不同页面具有不同的ID方便记录用户的页面访问轨迹等情况。
private Long pageid;
// 操作时间,用于记录用户在会话中执行某个操作(如点击、搜索等)的具体时间点,格式应该遵循一定的时间表示规范(具体取决于业务实现)。
private String actionTime;
// 搜索关键词,当用户在会话过程中进行搜索操作时,记录用户输入的搜索关键词内容,可用于分析用户的搜索偏好等。
private String searchKeyWord;
// 点击的商品分类ID当用户在会话中点击了某个商品分类时记录该分类对应的唯一标识ID便于后续统计分析各分类的点击情况。
private Long clickCategoryId;
// 点击的商品ID当用户在会话中点击了某个具体商品时记录该商品对应的唯一标识ID有助于跟踪用户对具体商品的关注情况。
private Long clickProductId;
// 下单的商品分类IDs以某种特定格式如逗号分隔的字符串等记录用户在本次会话中下单的所有商品所属分类的ID集合方便分析不同分类商品的下单情况。
private String orderCategoryIds;
// 下单的商品IDs以某种特定格式如逗号分隔的字符串等记录用户在本次会话中下单的所有商品的ID集合用于追踪具体哪些商品被用户下单购买了。
private String orderProductIds;
// 支付的商品分类IDs以某种特定格式如逗号分隔的字符串等记录用户在本次会话中完成支付的所有商品所属分类的ID集合可用于统计各分类商品的支付情况。
private String payCategoryIds;
// 支付的商品IDs以某种特定格式如逗号分隔的字符串等记录用户在本次会话中完成支付的所有商品的ID集合用于明确具体哪些商品最终被用户成功支付购买了。
private String payProductIds;
// 无参构造函数用于创建SessionDetail类的实例对象
// 当通过默认方式SessionDetail obj = new SessionDetail();)实例化该类对象时会调用此构造函数。
public SessionDetail() {
}
// 设置方法用于一次性设置SessionDetail类对象的所有属性值
// 参数按照顺序依次对应各个属性的值,调用此方法并传入相应数据可对对象的各个属性进行初始化赋值。
public void set(Long taskId, Long userId, String sessinId, Long pageid, String actionTime, String searchKeyWord, Long clickCategoryId, Long clickProductId, String orderCategoryIds, String orderProductIds, String payCategoryIds, String payProductIds) {
this.taskId = taskId;
this.userId = userId;
@ -34,99 +65,123 @@ public class SessionDetail implements Serializable{
this.payProductIds = payProductIds;
}
// 获取任务ID的方法返回当前SessionDetail对象的任务ID属性值外部代码可以通过调用此方法获取该对象关联的任务ID信息。
public Long getTaskId() {
return taskId;
}
// 设置任务ID的方法用于给当前SessionDetail对象的任务ID属性赋值外部代码可以通过调用此方法来更新该对象关联的任务ID信息。
public void setTaskId(Long taskId) {
this.taskId = taskId;
}
// 获取用户ID的方法返回当前SessionDetail对象的用户ID属性值方便外部代码获取该会话相关操作对应的用户标识。
public Long getUserId() {
return userId;
}
// 设置用户ID的方法用于给当前SessionDetail对象的用户ID属性赋值可用于更新该会话相关操作对应的用户标识信息。
public void setUserId(Long userId) {
this.userId = userId;
}
// 获取会话ID的方法返回当前SessionDetail对象的会话ID属性值尽管变量名拼写有误但此处按功能注释外部代码可通过此方法获取该会话的唯一标识。
public String getSessinId() {
return sessinId;
}
// 设置会话ID的方法用于给当前SessionDetail对象的会话ID属性赋值尽管变量名拼写有误但此处按功能注释可用于更新该会话的唯一标识信息。
public void setSessinId(String sessinId) {
this.sessinId = sessinId;
}
// 获取页面ID的方法返回当前SessionDetail对象的页面ID属性值外部代码可以调用此方法获取用户在会话中访问的页面标识信息。
public Long getPageid() {
return pageid;
}
// 设置页面ID的方法用于给当前SessionDetail对象的页面ID属性赋值外部代码可通过调用此方法来更新用户在会话中访问的页面标识信息。
public void setPageid(Long pageid) {
this.pageid = pageid;
}
// 获取操作时间的方法返回当前SessionDetail对象的操作时间属性值外部代码通过调用此方法可以获取用户执行操作的具体时间信息。
public String getActionTime() {
return actionTime;
}
// 设置操作时间的方法用于给当前SessionDetail对象的操作时间属性赋值外部代码可以调用此方法来更新用户执行操作的具体时间信息。
public void setActionTime(String actionTime) {
this.actionTime = actionTime;
}
// 获取搜索关键词的方法返回当前SessionDetail对象的搜索关键词属性值外部代码调用此方法可获取用户在会话中输入的搜索内容信息。
public String getSearchKeyWord() {
return searchKeyWord;
}
// 设置搜索关键词的方法用于给当前SessionDetail对象的搜索关键词属性赋值外部代码可通过调用此方法来更新用户在会话中输入的搜索内容信息。
public void setSearchKeyWord(String searchKeyWord) {
this.searchKeyWord = searchKeyWord;
}
// 获取点击的商品分类ID的方法返回当前SessionDetail对象的点击商品分类ID属性值外部代码通过调用此方法可以获取用户点击商品分类的相关标识信息。
public Long getClickCategoryId() {
return clickCategoryId;
}
// 设置点击的商品分类ID的方法用于给当前SessionDetail对象的点击商品分类ID属性赋值外部代码可通过调用此方法来更新用户点击商品分类的相关标识信息。
public void setClickCategoryId(Long clickCategoryId) {
this.clickCategoryId = clickCategoryId;
}
// 获取点击的商品ID的方法返回当前SessionDetail对象的点击商品ID属性值外部代码调用此方法可获取用户点击具体商品的相关标识信息。
public Long getClickProductId() {
return clickProductId;
}
// 设置点击的商品ID的方法用于给当前SessionDetail对象的点击商品ID属性赋值外部代码可通过调用此方法来更新用户点击具体商品的相关标识信息。
public void setClickProductId(Long clickProductId) {
this.clickProductId = clickProductId;
}
// 获取下单的商品分类IDs的方法返回当前SessionDetail对象的下单商品分类IDs属性值外部代码调用此方法可获取用户下单商品所属分类的相关标识集合信息。
public String getOrderCategoryIds() {
return orderCategoryIds;
}
// 设置下单的商品分类IDs的方法用于给当前SessionDetail对象的下单商品分类IDs属性赋值外部代码可通过调用此方法来更新用户下单商品所属分类的相关标识集合信息。
public void setOrderCategoryIds(String orderCategoryIds) {
this.orderCategoryIds = orderCategoryIds;
}
// 获取下单的商品IDs的方法返回当前SessionDetail对象的下单商品IDs属性值外部代码调用此方法可获取用户下单的具体商品的相关标识集合信息。
public String getOrderProductIds() {
return orderProductIds;
}
// 设置下单的商品IDs的方法用于给当前SessionDetail对象的下单商品IDs属性赋值外部代码可通过调用此方法来更新用户下单的具体商品的相关标识集合信息。
public void setOrderProductIds(String orderProductIds) {
this.orderProductIds = orderProductIds;
}
// 获取支付的商品分类IDs的方法返回当前SessionDetail对象的支付商品分类IDs属性值外部代码调用此方法可获取用户支付商品所属分类的相关标识集合信息。
public String getPayCategoryIds() {
return payCategoryIds;
}
// 设置支付的商品分类IDs的方法用于给当前SessionDetail对象的支付商品分类IDs属性赋值外部代码可通过调用此方法来更新用户支付商品所属分类的相关标识集合信息。
public void setPayCategoryIds(String payCategoryIds) {
this.payCategoryIds = payCategoryIds;
}
// 获取支付的商品IDs的方法返回当前SessionDetail对象的支付商品IDs属性值外部代码调用此方法可获取用户支付的具体商品的相关标识集合信息。
public String getPayProductIds() {
return payProductIds;
}
// 设置支付的商品IDs的方法用于给当前SessionDetail对象的支付商品IDs属性赋值外部代码可通过调用此方法来更新用户支付的具体商品的相关标识集合信息。
public void setPayProductIds(String payProductIds) {
this.payProductIds = payProductIds;
}
}
}

@ -1,62 +1,183 @@
package cn.edu.hust.domain;
package cn.edu.hust.domain; // 定义该类所在的包包在Java中用于对类进行合理的组织分类方便在项目里管理不同功能的模块使得代码结构更加清晰有条理不同业务相关的类可以放在对应的包下。
import java.io.Serializable;
import java.io.Serializable; // 导入Serializable接口表示该类的实例可以被序列化序列化后的对象能够方便地进行存储例如保存到文件中或者在网络间进行传输以满足不同的应用场景需求。
/**
* SessionRandomExtractsession
* Serializable使
* 便便
*/
public class SessionRandomExtract implements Serializable {
// 类中的成员变量用于存储相关的session信息以下分别对各个成员变量进行详细说明。
// 任务ID用于标识该session提取操作所属的任务通常与数据处理的任务相关联。
// 在存在多个不同的数据处理任务场景下通过这个任务ID能够明确该条session相关信息是属于哪一个具体任务的方便后续进行任务相关的统计、分析等操作。
private Long taskId;
// 用户session的唯一标识符通常用来表示一次用户访问的会话。
// 它能够唯一区分不同的用户访问会话,在分析用户在单次访问过程中的行为、操作顺序以及时间跨度等方面起到关键作用,不同的访问会话具有不同的该标识符。
private String sessionId;
// session开始时间记录用户开始浏览的时间。
// 这个时间信息对于分析用户的访问习惯、活跃时间段以及不同时间段的行为模式差异等有重要意义,例如可以统计某个时间段内的用户访问量等情况。
private String startTime;
// 用户在session中使用的搜索关键词用于分析用户的兴趣。
// 通过收集和分析用户输入的搜索关键词,能够了解用户在此次访问过程中关注的内容、想要查找的信息,进而为个性化推荐、搜索引擎优化等业务提供数据支持。
private String searchKeyWords;
// 用户在该session中点击的类别ID列表通常用来分析用户的点击行为。
// 可以根据这些点击的类别ID了解用户在浏览过程中对哪些类型的内容更感兴趣比如商品类别、文章分类等有助于进行用户行为画像、精准营销等相关业务操作。
private String click_category_ids;
/**
*
*
* JavaLongnull
* 便setter
*/
public SessionRandomExtract() {
}
/**
* SessionRandomExtract
* 便
* setter
*
* @param taskId ID
* @param sessionId session ID访
* @param startTime session
* @param searchKeyWords
* @param click_category_ids ID
*/
public void set(Long taskId, String sessionId, String startTime, String searchKeyWords, String click_category_ids) {
// 将任务ID赋值给类成员变量taskId使得当前对象的任务ID属性存储传入的对应任务标识值方便后续通过该属性获取任务相关信息。
this.taskId = taskId;
// 将sessionId赋值给类成员变量sessionId完成对当前对象的用户会话标识符的设置用于唯一确定该次用户访问会话。
this.sessionId = sessionId;
// 将session的开始时间赋值给startTime以此确定该对象所代表的用户访问会话的起始时间信息便于时间相关的业务分析。
this.startTime = startTime;
// 将搜索的关键词赋值给searchKeyWords用于记录用户在此次会话中输入的搜索内容后续可用于分析用户兴趣点。
this.searchKeyWords = searchKeyWords;
// 将点击的类别ID列表赋值给click_category_ids方便后续分析用户在该会话中对不同类别内容的点击偏好情况。
this.click_category_ids = click_category_ids;
}
// 以下是每个字段的getter和setter方法用于获取和设置类的成员变量值它们遵循Java的面向对象编程规范方便对类的属性进行访问控制和修改操作。
/**
* ID
* SessionRandomExtractID
* 便ID
*
* @return IDLongID
*/
public Long getTaskId() {
return taskId;
return taskId; // 返回任务ID的值即将当前对象的taskId成员变量的值返回给调用者。
}
/**
* ID
* SessionRandomExtractID
* 使
*
* @param taskId IDLongID
*/
public void setTaskId(Long taskId) {
this.taskId = taskId;
this.taskId = taskId; // 设置任务ID的值将传入的taskId参数赋值给当前对象的taskId成员变量。
}
/**
* session ID
* SessionRandomExtract访
* 便使ID
*
* @return session IDStringsession ID
*/
public String getSessionId() {
return sessionId;
return sessionId; // 返回session ID的值也就是将当前对象的sessionId成员变量的值返回给调用者。
}
/**
* session ID
* SessionRandomExtract访
* session ID
*
* @param sessionId session IDStringsession ID
*/
public void setSessionId(String sessionId) {
this.sessionId = sessionId;
this.sessionId = sessionId; // 设置session ID的值将传入的sessionId参数赋值给当前对象的sessionId成员变量。
}
/**
* session
* SessionRandomExtract访
* 访广
*
* @return sessionStringsession
*/
public String getStartTime() {
return startTime;
return startTime; // 返回session开始时间的值即将当前对象的startTime成员变量的值返回给调用者。
}
/**
* session
* SessionRandomExtract访
* 使
*
* @param startTime sessionStringsession
*/
public void setStartTime(String startTime) {
this.startTime = startTime;
this.startTime = startTime; // 设置session开始时间的值将传入的startTime参数赋值给当前对象的startTime成员变量。
}
/**
*
* SessionRandomExtract访
*
*
* @return String
*/
public String getSearchKeyWords() {
return searchKeyWords;
return searchKeyWords; // 返回搜索关键词的值即将当前对象的searchKeyWords成员变量的值返回给调用者。
}
/**
*
* SessionRandomExtract访
* 使
*
* @param searchKeyWords String
*/
public void setSearchKeyWords(String searchKeyWords) {
this.searchKeyWords = searchKeyWords;
// 设置搜索关键词的值将传入的searchKeyWords参数赋值给当前对象的searchKeyWords成员变量。
}
/**
* ID
* SessionRandomExtract访
*
*
* @return IDStringID
*/
public String getClick_category_ids() {
return click_category_ids;
return click_category_ids; // 返回点击类别ID的值也就是将当前对象的click_category_ids成员变量的值返回给调用者。
}
/**
* ID
* SessionRandomExtract访ID
* IDID
*
* @param click_category_ids IDStringID
*/
public void setClick_category_ids(String click_category_ids) {
this.click_category_ids = click_category_ids;
this.click_category_ids = click_category_ids; // 设置点击类别ID的值将传入的click_category_ids参数赋值给当前对象的click_category_ids成员变量。
}
}
}

@ -1,92 +1,228 @@
package cn.edu.hust.domain;
package cn.edu.hust.domain; // 定义该类所在的包包在Java项目中起着组织类结构的重要作用它将功能相关或处于同一业务模块下的类归为一组有助于清晰地管理不同模块使整个项目的代码架构更加有条理便于开发人员查找、理解以及维护各类代码文件。
import java.io.Serializable;
import java.io.Serializable; // 导入Serializable接口表示该类的实例可以被序列化。序列化操作使得对象能够转换为字节流的形式这对于对象的存储比如保存到文件中或者在网络环境下进行传输都非常便利能够满足如分布式系统、数据持久化等多种应用场景的需求。
public class Task implements Serializable{
/**
* Task
* Serializable便使
*/
public class Task implements Serializable {
// 类中的成员变量,用于存储任务的相关信息,以下对每个成员变量进行详细说明,它们共同构成了描述一个任务的关键属性集合。
// 任务 ID用于唯一标识任务。
// 在整个任务管理系统中每个任务都有一个独一无二的任务ID通过它可以准确地定位、查询以及区分不同的任务方便在任务的调度、监控以及数据统计等操作中使用该标识来关联相应的任务记录。
private Long taskId;
// 任务名称,表示任务的名称,通常用于描述任务的含义。
// 任务名称一般以一种易于理解的方式呈现任务的大致功能或业务目标,方便开发人员、运维人员以及其他相关人员快速知晓该任务是做什么的,例如“数据备份任务”“用户信息同步任务”等。
private String taskName;
// 创建时间,记录任务的创建时刻。
// 这个时间戳记录了任务最初被创建的时间点,对于分析任务的生命周期、追溯任务的起源以及按照时间顺序管理任务历史记录等方面有着重要作用,可以帮助了解任务的整体时间线情况。
private String createTime;
// 任务开始时间,记录任务实际开始执行的时间。
// 与创建时间不同,它标志着任务进入实际执行阶段的具体时刻,在任务调度系统中,通过对比创建时间和开始时间,可以评估任务是否及时启动,以及是否存在延迟等情况,同时也有助于统计任务的执行时长等信息。
private String startTime;
// 任务结束时间,记录任务执行完成的时间。
// 结合开始时间,能够准确计算出任务的执行时长,并且可以根据结束时间判断任务是否按照预期完成,对于任务执行效率的分析、任务执行结果的记录以及后续的任务复盘等操作提供了关键的时间依据。
private String finishTime;
// 任务类型,用于区分不同类型的任务。
// 在复杂的任务管理系统中,可能存在多种不同性质和功能的任务,例如数据处理任务、文件传输任务、定时触发任务等,通过任务类型可以对任务进行分类管理,方便针对不同类型的任务制定相应的调度策略、执行逻辑以及资源分配方案等。
private String taskType;
// 任务状态,表示任务当前的状态,如 "进行中"、"已完成"、"失败" 等。
// 任务状态是实时反映任务进展情况的重要属性,系统可以根据任务执行过程中的不同阶段和结果来更新这个状态,方便监控任务的执行情况,对于任务调度器来说,也可以依据任务状态决定是否需要重新调度、重试或者进行其他后续操作。
private String taskStatus;
// 任务参数,通常用于存储任务执行时所需要的附加参数,可能是 JSON 格式或其他。
// 不同的任务在执行过程中可能需要一些特定的配置信息或者输入数据,这些都可以通过任务参数来传递,例如数据处理任务可能需要指定数据源路径、处理规则等参数,任务参数的灵活性使得任务可以适应多种不同的具体业务需求。
private String taskParam;
/**
*
*
* JavaLongnullsetter
*/
public Task() {
}
/**
* Task
* 便setter
*
* @param taskId ID
* @param taskName
* @param createTime "yyyy-MM-dd HH:mm:ss"
* @param startTime 便
* @param finishTime
* @param taskType
* @param taskStatus "进行中""已完成""失败"
* @param taskParam JSON
*/
public void set(Long taskId, String taskName, String createTime, String startTime, String finishTime, String taskType, String taskStatus, String taskParam) {
// 设置任务 ID将传入的taskId参数值赋给当前对象的taskId成员变量使得对象能够持有该任务的唯一标识信息。
this.taskId = taskId;
// 设置任务名称把传入的taskName参数值赋予当前对象的taskName成员变量以此确定该任务在业务层面上的称呼和描述。
this.taskName = taskName;
// 设置任务创建时间将传入的createTime参数值赋值给当前对象的createTime成员变量用于记录任务的起始创建时刻。
this.createTime = createTime;
// 设置任务开始时间把传入的startTime参数值赋给当前对象的startTime成员变量以便明确任务实际开始执行的时间点。
this.startTime = startTime;
// 设置任务结束时间将传入的finishTime参数值赋予当前对象的finishTime成员变量用于标记任务执行完毕的时间情况。
this.finishTime = finishTime;
// 设置任务类型把传入的taskType参数值赋给当前对象的taskType成员变量通过该属性可以区分不同种类的任务。
this.taskType = taskType;
// 设置任务状态将传入的taskStatus参数值赋予当前对象的taskStatus成员变量以此反映任务当前所处的进展状态。
this.taskStatus = taskStatus;
// 设置任务参数把传入的taskParam参数值赋给当前对象的taskParam成员变量为任务执行提供所需的附加配置信息等。
this.taskParam = taskParam;
}
// 以下是每个字段的getter和setter方法用于获取和设置类的成员变量值遵循Java面向对象编程中对类属性访问控制的规范方便在不同的业务逻辑中灵活获取和修改任务对象的各个属性。
/**
* ID
* TaskID便ID
*
* @return IDLongID
*/
public Long getTaskId() {
return taskId;
return taskId; // 返回任务 ID 的值即将当前对象的taskId成员变量的值返回给调用者。
}
/**
* ID
* TaskIDID使
*
* @param taskId IDLongID
*/
public void setTaskId(Long taskId) {
this.taskId = taskId;
this.taskId = taskId; // 设置任务 ID 的值将传入的taskId参数赋值给当前对象的taskId成员变量。
}
/**
*
* Task便使
*
* @return String
*/
public String getTaskName() {
return taskName;
return taskName; // 返回任务名称的值也就是将当前对象的taskName成员变量的值返回给调用者。
}
/**
*
* Task
*
* @param taskName String
*/
public void setTaskName(String taskName) {
this.taskName = taskName;
this.taskName = taskName; // 设置任务名称的值将传入的taskName参数赋值给当前对象的taskName成员变量。
}
/**
*
* Task
*
* @return String
*/
public String getCreateTime() {
return createTime;
return createTime; // 返回任务创建时间的值即将当前对象的createTime成员变量的值返回给调用者。
}
/**
*
* Task使
*
* @param createTime String
*/
public void setCreateTime(String createTime) {
this.createTime = createTime;
this.createTime = createTime; // 设置任务创建时间的值将传入的createTime参数赋值给当前对象的createTime成员变量。
}
/**
*
* Task
*
* @return String
*/
public String getStartTime() {
return startTime;
return startTime; // 返回任务开始时间的值也就是将当前对象的startTime成员变量的值返回给调用者。
}
/**
*
* Task
*
* @param startTime String
*/
public void setStartTime(String startTime) {
this.startTime = startTime;
this.startTime = startTime; // 设置任务开始时间的值将传入的startTime参数赋值给当前对象的startTime成员变量。
}
/**
*
* Task
*
* @return String
*/
public String getFinishTime() {
return finishTime;
return finishTime; // 返回任务结束时间的值即将当前对象的finishTime成员变量的值返回给调用者。
}
/**
*
* Task使
*
* @param finishTime String
*/
public void setFinishTime(String finishTime) {
this.finishTime = finishTime;
this.finishTime = finishTime; // 设置任务结束时间的值将传入的finishTime参数赋值给当前对象的finishTime成员变量。
}
/**
*
* Task便
*
* @return String
*/
public String getTaskType() {
return taskType;
return taskType; // 返回任务类型的值即将当前对象的taskType成员变量的值返回给调用者。
}
/**
*
* Task使
*
* @param taskType String
*/
public void setTaskType(String taskType) {
this.taskType = taskType;
this.taskType = taskType; // 设置任务类型的值将传入的taskType参数赋值给当前对象的taskType成员变量。
}
/**
*
* Task
*
* @return String "进行中""已完成""失败"
*/
public String getTaskStatus() {
return taskStatus;
}
public void setTaskStatus(String taskStatus) {
this.taskStatus = taskStatus;
}
public String getTaskParam() {
return taskParam;
}
public void setTaskParam(String taskParam) {
this.taskParam = taskParam;
return taskStatus; // 返回任务状态的值即将当前对象的taskStatus成员变量的值返回给调用者。
}
}
/**
*
* Task
**/

@ -1,61 +1,191 @@
package cn.edu.hust.domain;
package cn.edu.hust.domain; // 定义类所在的包,包的作用通常是用于对类进行合理的组织,方便在项目中更好地管理代码模块,使得代码结构更清晰,不同功能的类可以归属到不同的包下。
/**
* Top10Category task 10
*
*
*
*/
public class Top10Category {
// 类的成员变量,用于存储商品类别的统计信息,以下分别对每个成员变量进行详细说明。
// 任务 ID用于唯一标识一个任务其含义通常与某个特定的数据分析任务相关联
// 在一个存在多个数据分析任务并行或按顺序执行的系统中,通过这个 ID 可以清晰区分不同任务所对应的商品类别统计数据。
private Long taskId;
// 类别 ID表示商品类别的唯一标识符在整个商品分类体系里每个类别都有一个独一无二的这个 ID
// 方便在数据库存储、查询以及业务逻辑处理中准确地定位和操作特定的商品类别相关数据。
private Long categoryId;
// 点击量,表示某个类别的商品被点击的总次数,它直观地反映了用户对该商品类别的关注程度,
// 点击次数越多,往往意味着该类别商品在展示效果、吸引力等方面表现更好,更能引起用户的兴趣。
private Long clickCount;
// 订单量,表示某个类别的商品成功下单的总次数,这是衡量该商品类别商业转化能力的一个重要指标,
// 说明用户从对该类别商品的浏览、点击等行为进一步转化为实际下单购买的情况,订单量越高,商业价值相对越大。
private Long orderCount;
private Long payCount;
// 支付量,表示某个类别的商品成功支付的总次数,它体现了最终实际完成支付的情况,
// 因为下单后可能存在取消订单等情况,支付量更能精准反映该类别商品真正实现交易的情况,是衡量商业收益的关键数据之一。
private Long payCount;
/**
*
* Top10Category
* Java Long null
* 便 setter
*/
public Top10Category() {
}
/**
* Top10Category
* 便
* setter
*
* @param taskId ID
* @param categoryId ID
* @param clickCount
* @param orderCount
* @param payCount
*/
public void set(Long taskId, Long categoryId, Long clickCount, Long orderCount, Long payCount) {
// 设置任务 ID将传入的 taskId 参数值赋给当前对象的 taskId 成员变量,完成任务 ID 的赋值操作。
this.taskId = taskId;
// 设置类别 ID把传入的 categoryId 参数值赋予当前对象的 categoryId 成员变量,实现类别 ID 的赋值。
this.categoryId = categoryId;
// 设置点击量,将传入的 clickCount 参数值赋值给当前对象的 clickCount 成员变量,以此确定该对象所表示的商品类别的点击次数。
this.clickCount = clickCount;
// 设置订单量,把传入的 orderCount 参数值赋给当前对象的 orderCount 成员变量,用于明确该商品类别的订单数量情况。
this.orderCount = orderCount;
// 设置支付量,将传入的 payCount 参数值赋予当前对象的 payCount 成员变量,从而设定该商品类别的支付数量相关信息。
this.payCount = payCount;
}
// 以下是每个字段的 getter 和 setter 方法,用于获取和设置类的成员变量值,它们遵循 Java 的面向对象编程规范,方便对类的属性进行访问控制和修改操作。
/**
* ID
* Top10Category ID
* 便 ID
*
* @return ID Long ID
*/
public Long getTaskId() {
return taskId;
// 返回任务 ID 的值,即将当前对象的 taskId 成员变量的值返回给调用者。
}
/**
* ID
* Top10Category ID
* 使
*
* @param taskId ID Long ID
*/
public void setTaskId(Long taskId) {
this.taskId = taskId;
// 设置任务 ID 的值,将传入的 taskId 参数赋值给当前对象的 taskId 成员变量。
}
/**
* ID
* Top10Category
* 便使 ID
*
* @return ID Long ID
*/
public Long getCategoryId() {
return categoryId;
// 返回类别 ID 的值,也就是将当前对象的 categoryId 成员变量的值返回给调用者。
}
/**
* ID
* Top10Category
* ID
*
* @param categoryId ID Long ID
*/
public void setCategoryId(Long categoryId) {
this.categoryId = categoryId;
// 设置类别 ID 的值,将传入的 categoryId 参数赋值给当前对象的 categoryId 成员变量。
}
/**
*
* Top10Category
* 广
*
* @return Long
*/
public Long getClickCount() {
return clickCount;
// 返回点击量的值,即将当前对象的 clickCount 成员变量的值返回给调用者。
}
/**
*
* Top10Category
* 使
*
* @param clickCount Long
*/
public void setClickCount(Long clickCount) {
this.clickCount = clickCount;
// 设置点击量的值,将传入的 clickCount 参数赋值给当前对象的 clickCount 成员变量。
}
/**
*
* Top10Category
*
*
* @return Long
*/
public Long getOrderCount() {
return orderCount;
// 返回订单量的值,也就是将当前对象的 orderCount 成员变量的值返回给调用者。
}
/**
*
* Top10Category
*
*
* @param orderCount Long
*/
public void setOrderCount(Long orderCount) {
this.orderCount = orderCount;
// 设置订单量的值,将传入的 orderCount 参数赋值给当前对象的 orderCount 成员变量。
}
/**
*
* Top10Category
*
*
* @return Long
*/
public Long getPayCount() {
return payCount;
// 返回支付量的值,即将当前对象的 payCount 成员变量的值返回给调用者。
}
/**
*
* Top10Category
* 退使
*
* @param payCount Long
*/
public void setPayCount(Long payCount) {
this.payCount = payCount;
// 设置支付量的值,将传入的 payCount 参数赋值给当前对象的 payCount 成员变量。
}
}

@ -1,52 +1,104 @@
package cn.edu.hust.domain;
package cn.edu.hust.domain; // 定义类所在的包,通常用于组织类和管理模块。
import java.io.Serializable;
import java.io.Serializable; // 引入 Serializable 接口,表示该类可以被序列化。
public class Top10CategorySession implements Serializable{
private Long taskId;
private Long categoryId;
private String sessionId;
private Long clickCount;
/**
* Top10CategorySession
*
*
* taskId, categoryId, sessionId, clickCount
*/
public class Top10CategorySession implements Serializable { // 实现 Serializable 接口,使对象可以被序列化
private Long taskId; // 任务 ID唯一标识一个任务通常与某个数据分析任务相关。
private Long categoryId; // 商品类别 ID表示某个商品类别的唯一标识符。
private String sessionId; // 会话 ID表示用户与平台交互的会话的唯一标识符。
private Long clickCount; // 点击量,表示某个商品类别在指定会话中的点击次数。
/**
*
* Top10CategorySession
*/
public Top10CategorySession() {
}
/**
* Top10CategorySession
* @param taskId ID
* @param categoryId ID
* @param sessionId ID
* @param clickCount
*/
public void set(Long taskId, Long categoryId, String sessionId, Long clickCount) {
this.taskId = taskId;
this.categoryId = categoryId;
this.sessionId = sessionId;
this.clickCount = clickCount;
this.taskId = taskId; // 设置任务 ID。
this.categoryId = categoryId; // 设置商品类别 ID。
this.sessionId = sessionId; // 设置会话 ID。
this.clickCount = clickCount; // 设置点击量。
}
// 以下是每个字段的 getter 和 setter 方法,用于获取和设置类的成员变量值。
/**
* ID
* @return ID
*/
public Long getTaskId() {
return taskId;
return taskId; // 返回任务 ID 的值。
}
/**
* ID
* @param taskId ID
*/
public void setTaskId(Long taskId) {
this.taskId = taskId;
this.taskId = taskId; // 设置任务 ID 的值。
}
/**
* ID
* @return ID
*/
public Long getCategoryId() {
return categoryId;
return categoryId; // 返回商品类别 ID 的值。
}
/**
* ID
* @param categoryId ID
*/
public void setCategoryId(Long categoryId) {
this.categoryId = categoryId;
this.categoryId = categoryId; // 设置商品类别 ID 的值。
}
/**
* ID
* @return ID
*/
public String getSessionId() {
return sessionId;
return sessionId; // 返回会话 ID 的值。
}
/**
* ID
* @param sessionId ID
*/
public void setSessionId(String sessionId) {
this.sessionId = sessionId;
this.sessionId = sessionId; // 设置会话 ID 的值。
}
/**
*
* @return
*/
public Long getClickCount() {
return clickCount;
return clickCount; // 返回点击量的值。
}
/**
*
* @param clickCount
*/
public void setClickCount(Long clickCount) {
this.clickCount = clickCount;
this.clickCount = clickCount; // 设置点击量的值。
}
}

@ -3,61 +3,85 @@ package cn.edu.hust.jdbc;
import cn.edu.hust.conf.ConfigurationManager;
import cn.edu.hust.constant.Constants;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
// JDBCHelper类是一个用于管理数据库连接以及执行数据库相关操作的工具类
// 它结合了单例模式和连接池的思想方便在整个应用程序中统一获取数据库连接并执行SQL语句等操作。
public class JDBCHelper {
private static JDBCHelper instance=new JDBCHelper();
//使用阻塞队列
private LinkedBlockingQueue<Connection> queue=new LinkedBlockingQueue<Connection>();
static{
// 采用单例模式保证整个应用程序中只有一个JDBCHelper实例存在instance为该类的唯一实例对象。
private static JDBCHelper instance = new JDBCHelper();
// 使用LinkedBlockingQueue作为阻塞队列来存放数据库连接对象实现连接池的功能。
// 连接池中的连接可以被多个地方获取并使用,使用完后再归还到队列中供后续使用。
private LinkedBlockingQueue<Connection> queue = new LinkedBlockingQueue<Connection>();
// 静态代码块,在类加载时执行,用于加载数据库驱动。
// 通过从配置管理器ConfigurationManager中获取数据库驱动的配置信息Constants.JDBC_DRIVER
// 调用Class.forName方法加载驱动这样后续才能通过DriverManager建立数据库连接。
static {
try {
Class.forName(ConfigurationManager.getProperty(Constants.JDBC_DRIVER));
}
catch (Exception e)
{
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*
*
* Constants.JDBC_ACTIVE
* queue
* DriverManager.getConnection使URL
*/
private JDBCHelper(){
int dataSourceSize=ConfigurationManager.getInteger(Constants.JDBC_ACTIVE);
String url=ConfigurationManager.getProperty(Constants.JDBC_URL);
String username=ConfigurationManager.getProperty(Constants.JDBC_USERNAME);
String passward=ConfigurationManager.getProperty(Constants.JDBC_PSSWORD);
try
{
for(int i=0;i<dataSourceSize;i++)
{
Connection connection=DriverManager.getConnection(url,username,passward);
private JDBCHelper() {
// 获取配置文件中定义的数据源大小,即要创建的数据库连接数量
int dataSourceSize = ConfigurationManager.getInteger(Constants.JDBC_ACTIVE);
// 获取配置文件中定义的数据库连接URL
String url = ConfigurationManager.getProperty(Constants.JDBC_URL);
// 获取配置文件中定义的数据库用户名
String username = ConfigurationManager.getProperty(Constants.JDBC_USERNAME);
// 获取配置文件中定义的数据库密码此处变量名存在拼写错误正确应为Constants.JDBC_PASSWORD
String passward = ConfigurationManager.getProperty(Constants.JDBC_PSSWORD);
try {
// 循环创建指定数量的数据库连接
for (int i = 0; i < dataSourceSize; i++) {
// 通过DriverManager创建数据库连接传入URL、用户名和密码
Connection connection = DriverManager.getConnection(url, username, passward);
// 将创建好的连接放入阻塞队列中,供后续获取使用
queue.put(connection);
}
}
catch (Exception e)
{
} catch (Exception e) {
e.printStackTrace();
}
};
public static JDBCHelper getInstance()
{
// 获取JDBCHelper类的唯一实例对象的静态方法外部代码通过调用此方法获取该工具类的实例进而使用其提供的数据库操作功能。
public static JDBCHelper getInstance() {
return instance;
}
/**
*
* 使
* @return
* queue使
* LinkedBlockingQueuetake
* InterruptedExceptionnull
*
* @return null
*/
public Connection getConnection()
{
public Connection getConnection() {
try {
// 从阻塞队列中取出一个连接,若队列为空则阻塞等待
return queue.take();
} catch (InterruptedException e) {
e.printStackTrace();
@ -66,77 +90,90 @@ public class JDBCHelper {
}
/**
*
* @param sql
* @param params
* @return
* SQLINSERTUPDATEDELETE
*
* @param sql SQLINSERT INTO table_name (column1, column2) VALUES (?,?)
* @param params SQLSQL
* @return 0
*/
public int excuteUpdate(String sql,Object[] params)
{
int re=0;
Connection conn=null;
PreparedStatement statement=null;
try
{
conn=getConnection();
statement=conn.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
statement.setObject(i+1,params[i]);
}
re=statement.executeUpdate();
return re;
}
catch (Exception e)
{
e.printStackTrace();
}
finally {
if(conn!=null)
{
try {
queue.put(conn);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return re;
}
public int excuteUpdate(String sql, Object[] params) {
int re = 0;
Connection conn = null;
PreparedStatement statement = null;
public static interface QueryCallBack
{
try {
// 从连接池中获取一个数据库连接
conn = getConnection();
// 使用获取到的连接创建一个PreparedStatement对象用于执行带参数的SQL语句
statement = conn.prepareStatement(sql);
// 循环设置PreparedStatement中的参数将params数组中的值依次赋给SQL语句中的占位符
for (int i = 0; i < params.length; i++) {
statement.setObject(i + 1, params[i]);
}
// 执行更新操作,并获取受影响的行数
re = statement.executeUpdate();
return re;
} catch (Exception e) {
e.printStackTrace();
} finally {
// 无论是否执行成功,都需要将使用完的数据库连接归还到连接池中,
// 如果连接对象不为空尝试将其放回阻塞队列queue如果放回过程出现中断异常则打印栈追踪信息。
if (conn!= null) {
try {
queue.put(conn);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return re;
}
// 定义一个内部接口QueryCallBack该接口中定义了一个方法process用于处理查询结果集ResultSet
// 具体的处理逻辑由实现该接口的类来定义,实现了一种回调机制,方便根据不同需求灵活处理查询结果。
public static interface QueryCallBack {
void process(ResultSet rs);
}
/**
*
* 使
* @param sql
* @param params
* @param queryCallBack
* SQLQueryCallBack
*
* @param sql SQLSELECT * FROM table_name WHERE condition
* @param params SQLSQL
* @param queryCallBack QueryCallBackResultSet
*/
public void excuteQuery(String sql,Object[] params,QueryCallBack queryCallBack)
{
Connection conn=null;
PreparedStatement statement=null;
try
{
conn=getConnection();
statement=conn.prepareStatement(sql);
public void excuteQuery(String sql, Object[] params, QueryCallBack queryCallBack) {
Connection conn = null;
PreparedStatement statement = null;
try {
// 从连接池中获取一个数据库连接
conn = getConnection();
// 使用获取到的连接创建一个PreparedStatement对象用于执行带参数的SQL语句
statement = conn.prepareStatement(sql);
// 循环设置PreparedStatement中的参数将params数组中的值依次赋给SQL语句中的占位符
for (int i = 0; i < params.length; i++) {
statement.setObject(i+1,params[i]);
statement.setObject(i + 1, params[i]);
}
ResultSet rs=statement.executeQuery();
// 执行查询操作获取结果集ResultSet
ResultSet rs = statement.executeQuery();
// 调用传入的回调接口对象的process方法将结果集传递进去由具体实现该接口的类来处理结果集数据。
queryCallBack.process(rs);
}catch (Exception e)
{
} catch (Exception e) {
}
finally {
if(conn!=null)
{
} finally {
// 无论是否执行成功,都需要将使用完的数据库连接归还到连接池中,
// 如果连接对象不为空尝试将其放回阻塞队列queue如果放回过程出现中断异常则打印栈追踪信息。
if (conn!= null) {
try {
queue.put(conn);
} catch (InterruptedException e) {
@ -147,42 +184,49 @@ public class JDBCHelper {
}
/**
* sql
* @param sql
* @param params
* @return
* SQLSQL
*
* @param sql SQL
* @param params SQLObjectSQLsql
* @return SQLnull
*/
public int[] excuteBatch(String sql,List<Object[]> params)
{
Connection connection=null;
PreparedStatement statement=null;
int[] res=null;
try
{
connection=getConnection();
statement=connection.prepareStatement(sql);
//1.取消自动提交
public int[] excuteBatch(String sql, List<Object[]> params) {
Connection connection = null;
PreparedStatement statement = null;
int[] res = null;
try {
// 从连接池中获取一个数据库连接
connection = getConnection();
// 使用获取到的连接创建一个PreparedStatement对象用于执行带参数的SQL语句
statement = connection.prepareStatement(sql);
// 1. 取消自动提交模式这样可以将多条SQL语句作为一个事务来统一提交或回滚提高数据一致性。
connection.setAutoCommit(false);
//2.设置参数
for (Object[] param:
params) {
// 2. 循环设置每条SQL语句的参数并将其添加到批处理中通过addBatch方法将每条语句添加到待执行的批处理队列中。
for (Object[] param : params) {
for (int i = 0; i < param.length; i++) {
statement.setObject(i+1,param[i]);
statement.setObject(i + 1, param[i]);
}
statement.addBatch();
}
//3.批量执行
res=statement.executeBatch();
//4.最后一步提交
// 3. 批量执行所有添加到批处理队列中的SQL语句返回一个整数数组表示每条语句受影响的行数。
res = statement.executeBatch();
// 4. 最后提交事务将所有批量执行的SQL语句对数据库的修改统一提交如果执行过程中出现异常则事务会回滚。
connection.commit();
return res;
} catch (SQLException e) {
e.printStackTrace();
}
finally {
if(connection!=null)
{
} finally {
// 无论是否执行成功,都需要将使用完的数据库连接归还到连接池中,
// 如果连接对象不为空尝试将其放回阻塞队列queue如果放回过程出现中断异常则打印栈追踪信息。
if (connection!= null) {
try {
queue.put(connection);
} catch (InterruptedException e) {
@ -192,4 +236,4 @@ public class JDBCHelper {
}
return res;
}
}
}
Loading…
Cancel
Save