Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
cloud-course-studylog
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hqzhdj
cloud-course-studylog
Commits
852228ba
Commit
852228ba
authored
Feb 09, 2021
by
liangkaiping
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
copy
parent
751563cd
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1151 additions
and
2 deletions
+1151
-2
README.md
+2
-2
cloud-course-study-log-api/pom.xml
+42
-0
cloud-course-study-log-api/src/main/java/com/yizhi/studylog/application/feign/StudyLogClient.java
+104
-0
cloud-course-study-log-api/src/main/java/com/yizhi/studylog/application/vo/StudyLogVo.java
+100
-0
cloud-course-study-log-api/src/main/java/com/yizhi/studylog/application/vo/TpStudentActivityRecordVo.java
+65
-0
cloud-course-study-log-service/pom.xml
+40
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/StudyLogApplication.java
+26
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/controller/StudyLogController.java
+145
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/domain/StudyLog.java
+107
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/domain/TpStudentActivityRecord.java
+71
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/listener/StudyLogListener.java
+116
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/mapper/StudyLogMapper.java
+32
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/mapper/StudyLogMapper.xml
+106
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/mapper/TpStudentActivityRecordMapper.java
+12
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/service/IStudyLogService.java
+28
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/service/ITpStudentActivityRecordService.java
+12
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/service/impl/StudyLogServiceImpl.java
+48
-0
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/service/impl/TpStudentActivityRecordServiceImpl.java
+20
-0
cloud-course-study-log-service/src/main/resources/bootstrap.properties
+11
-0
pom.xml
+64
-0
No files found.
README.md
View file @
852228ba
# cloud-course-studyLog
123
\ No newline at end of file
cloud-course-study-log-api/pom.xml
0 → 100644
View file @
852228ba
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
cloud-course-study-log
</artifactId>
<groupId>
com.yizhi
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-course-study-log-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<executions>
<execution>
<goals>
<goal>
repackage
</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>
true
</skip>
</configuration>
</plugin>
<plugin>
<groupId>
org.mybatis.generator
</groupId>
<artifactId>
mybatis-generator-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
cloud-course-study-log-api/src/main/java/com/yizhi/studylog/application/feign/StudyLogClient.java
0 → 100644
View file @
852228ba
/**
* FileName: StudyClient
* Author: wenjunlong
* Date: 2018/5/3 15:22
* Description: 学习日志feign接口服务
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package
com
.
yizhi
.
studylog
.
application
.
feign
;
import
com.yizhi.studylog.application.vo.StudyLogVo
;
import
com.yizhi.studylog.application.vo.TpStudentActivityRecordVo
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
java.util.List
;
/**
* 〈一句话功能简述〉<br>
* 〈学习日志feign接口服务〉
*
* @author wenjunlong
* @create 2018/5/3
* @since 1.0.0
*/
@FeignClient
(
name
=
"studyLog"
,
contextId
=
"StudyLogClient"
)
public
interface
StudyLogClient
{
/**
* 获取未分析的学习日志
* @return
*/
@GetMapping
(
"/studyLog/list"
)
List
<
StudyLogVo
>
list
(
@RequestParam
(
"type"
)
String
type
);
/**
* 获取未分析的学习日志sessionId(指定开始时间)
* @param maxId
* @return
*/
@GetMapping
(
"/studyLog/startId/list/sessionId"
)
List
<
String
>
listSessionId
(
@RequestParam
(
"maxId"
)
Long
maxId
);
/**
* 获取最大的id数据
* @return
*/
@GetMapping
(
"/studyLog/id/max"
)
Long
maxId
();
/**
* 获取最大的id数据
* @return
*/
@GetMapping
(
"/studyLog/id/min"
)
Long
minId
();
/**
* 获取sessionId为纬度的分组数据
* @param maxId
* @param sessionId
* @return
*/
@GetMapping
(
"/studyLog/sessionId/recode/get"
)
List
<
StudyLogVo
>
getRecodeBySessionId
(
@RequestParam
(
value
=
"maxId"
,
required
=
false
)
Long
maxId
,
@RequestParam
(
"sessionId"
)
String
sessionId
);
/**
* 将已分析的学习日志状态status 置为 1 批量进行
* @param studyLogs
* @return
*/
@PostMapping
(
"/studyLog/list/update"
)
Boolean
updateList
(
@RequestBody
List
<
StudyLogVo
>
studyLogs
);
/**
* 删除 已经解析完成的日志
* @return
*/
@PostMapping
(
"/studyLog/delete/batch"
)
Boolean
deleteBatch
(
@RequestBody
List
<
Long
>
ids
);
/**
* 保留原始记录,如果消息丢失可以通过反查机制
* @param tsar
* @return
*/
@PostMapping
(
"/studyLog/recorde/insert/batch"
)
Boolean
insertRecoreds
(
@RequestBody
TpStudentActivityRecordVo
tsar
);
/**
* 根据课程id查询心跳记录条数
* @param courseId
* @return
*/
@GetMapping
(
"/studyLog/get/courseId"
)
int
getStudyLogByCourseId
(
@RequestParam
(
"courseId"
)
Long
courseId
);
}
cloud-course-study-log-api/src/main/java/com/yizhi/studylog/application/vo/StudyLogVo.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
vo
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* <p>
* 学习日志表
* </p>
*
* @author fulan123
* @since 2018-05-03
*/
@Data
@Api
(
tags
=
"StudyLog"
,
description
=
"学习日志表"
)
public
class
StudyLogVo
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"日志主键"
)
private
Long
id
;
@ApiModelProperty
(
value
=
"会话id"
)
private
String
sessionId
;
@ApiModelProperty
(
value
=
"课程id"
)
private
Long
courseId
;
@ApiModelProperty
(
value
=
"账号id"
)
private
String
accountId
;
@ApiModelProperty
(
value
=
"章节id"
)
private
Long
chapterId
;
@ApiModelProperty
(
value
=
"素材id"
)
private
Long
materialId
;
@ApiModelProperty
(
value
=
"分辨率"
)
private
String
resolution
;
@ApiModelProperty
(
value
=
"文档页面"
)
private
Integer
page
;
private
Date
createTime
;
@ApiModelProperty
(
value
=
"终端规格"
)
private
String
terminalDevice
;
@ApiModelProperty
(
value
=
"终端类型"
)
private
String
terminalType
;
@ApiModelProperty
(
value
=
"素材完成条件 0 未完成 1 完成"
)
private
Integer
materialCompleted
;
private
String
orgId
;
private
String
companyId
;
private
Long
siteId
;
@ApiModelProperty
(
value
=
"日志分析完成条件 0 未完成 1 完成"
)
private
Integer
status
;
@ApiModelProperty
(
value
=
"发送请求时间"
)
private
Long
timestamp
;
@ApiModelProperty
(
value
=
"nginx接收请求时间"
)
private
Date
nginxTime
;
private
Integer
progress
;
private
String
type
;
protected
Serializable
pkVal
()
{
return
this
.
id
;
}
}
cloud-course-study-log-api/src/main/java/com/yizhi/studylog/application/vo/TpStudentActivityRecordVo.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
vo
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* <p>
* 学员完成活动记录(这里无论有没有被设置成别的活动的开启条件,都记录)
* </p>
*
* @author shengchenglong
* @since 2018-03-29
*/
@Data
@Api
(
tags
=
"TpStudentActivityRecord"
,
description
=
"TpStudentActivityRecord"
)
public
class
TpStudentActivityRecordVo
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键id"
)
private
Long
id
;
@ApiModelProperty
(
value
=
"活动类型: 0课程 1考试 2调研 3直播 4投票 5作业 6证书 7报名 8签到 9外部链接"
)
private
Integer
type
;
@ApiModelProperty
(
value
=
"学员id"
)
private
Long
accountId
;
@ApiModelProperty
(
value
=
"课程、考试、调研、直播、投票、作业、证书、外部链接的id,由type决定类型。"
)
private
Long
relationId
;
@ApiModelProperty
(
value
=
"若是考试(type=1)的话,需要记录分数"
)
private
Float
score
;
@ApiModelProperty
(
value
=
"若是课程,需要记录学习时长"
)
private
Long
seconds
;
@ApiModelProperty
(
value
=
"是否完成(1是,0否),默认完成。"
)
private
Integer
finished
;
@ApiModelProperty
(
value
=
"完成时间"
)
private
Date
finishDate
;
@ApiModelProperty
(
value
=
"所属站点id"
)
private
Long
siteId
;
@ApiModelProperty
(
value
=
"原始数据id"
)
private
Long
oId
;
protected
Serializable
pkVal
()
{
return
this
.
id
;
}
}
cloud-course-study-log-service/pom.xml
0 → 100644
View file @
852228ba
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
cloud-course-study-log
</artifactId>
<groupId>
com.yizhi
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-course-study-log-service
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<dependencies>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-course-study-log-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- deploy 时跳过该模块 -->
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-deploy-plugin
</artifactId>
<configuration>
<skip>
true
</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/StudyLogApplication.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.context.annotation.ComponentScan
;
/**
*
* @author scotthu
*
* @date 2018年2月28日
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
(
basePackages
=
"com.yizhi"
)
@ComponentScan
(
basePackages
=
{
"com.yizhi"
})
public
class
StudyLogApplication
{
public
static
void
main
(
java
.
lang
.
String
[]
args
)
{
SpringApplication
.
run
(
StudyLogApplication
.
class
,
args
);
}
}
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/controller/StudyLogController.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
controller
;
import
com.baomidou.mybatisplus.mapper.EntityWrapper
;
import
com.baomidou.mybatisplus.toolkit.CollectionUtils
;
import
com.yizhi.application.orm.id.IdGenerator
;
import
com.yizhi.application.orm.util.QueryUtil
;
import
com.yizhi.studylog.application.domain.StudyLog
;
import
com.yizhi.studylog.application.domain.TpStudentActivityRecord
;
import
com.yizhi.studylog.application.service.IStudyLogService
;
import
com.yizhi.studylog.application.service.ITpStudentActivityRecordService
;
import
com.yizhi.studylog.application.vo.StudyLogVo
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
/**
* <p>
* 学习日志表 前端控制器
* </p>
*
* @author fulan123
* @since 2018-05-03
*/
@RestController
@RequestMapping
(
"/studyLog"
)
public
class
StudyLogController
{
@Autowired
IStudyLogService
studyLogService
;
@Autowired
IdGenerator
idGenerator
;
@Autowired
ITpStudentActivityRecordService
tpStudentActivityRecordService
;
@GetMapping
(
"/list"
)
public
List
<
StudyLogVo
>
list
(
@RequestParam
(
"type"
)
String
type
){
List
<
StudyLog
>
studyLogs
=
studyLogService
.
selectStudyLogList
(
type
);
List
<
StudyLogVo
>
studyLogVoList
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
studyLogs
)){
for
(
StudyLog
studyLog
:
studyLogs
){
StudyLogVo
studyLogVo
=
new
StudyLogVo
();
BeanUtils
.
copyProperties
(
studyLog
,
studyLogVo
);
studyLogVoList
.
add
(
studyLogVo
);
}
}
return
studyLogVoList
;
}
/**
* 获取未分析的学习日志sessionId(指定开始时间)
* @param maxId
* @return
*/
@GetMapping
(
"/startId/list/sessionId"
)
public
List
<
String
>
listSessionId
(
@RequestParam
(
"maxId"
)
Long
maxId
){
if
(
Objects
.
isNull
(
maxId
)
||
maxId
.
longValue
()
<=
0
){
return
null
;
}
return
studyLogService
.
listSessionId
(
maxId
);
}
/**
* 获取最大的id数据
* @return
*/
@GetMapping
(
"/id/max"
)
public
Long
maxId
(){
return
studyLogService
.
maxId
();
}
/**
* 获取最小的id数据
* @return
*/
@GetMapping
(
"/id/min"
)
public
Long
minId
(){
return
studyLogService
.
minId
();
}
/**
* 获取sessionId为纬度的分组数据
* @param maxId
* @param sessionId
* @return
*/
@GetMapping
(
"/sessionId/recode/get"
)
public
List
<
StudyLogVo
>
getRecodeBySessionId
(
@RequestParam
(
value
=
"maxId"
,
required
=
false
)
Long
maxId
,
@RequestParam
(
"sessionId"
)
String
sessionId
){
if
((
Objects
.
isNull
(
maxId
)
||
maxId
.
longValue
()
<=
0
)
&&
StringUtils
.
isBlank
(
sessionId
)){
return
null
;
}
EntityWrapper
<
StudyLog
>
ew
=
QueryUtil
.
condition
(
new
StudyLog
());
if
(
Objects
.
nonNull
(
maxId
)
&&
maxId
.
longValue
()>
0
){
ew
.
le
(
"id"
,
maxId
);
}
ew
.
eq
(
"session_id"
,
sessionId
);
ew
.
orderBy
(
"id"
,
false
);
List
<
StudyLogVo
>
studyLogVoList
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
studyLogService
.
selectList
(
ew
))){
for
(
StudyLog
studyLog
:
studyLogService
.
selectList
(
ew
)){
StudyLogVo
studyLogVo
=
new
StudyLogVo
();
BeanUtils
.
copyProperties
(
studyLog
,
studyLogVo
);
studyLogVoList
.
add
(
studyLogVo
);
}
}
return
studyLogVoList
;
}
@PostMapping
(
"/list/update"
)
public
Boolean
updateList
(
@RequestBody
List
<
StudyLog
>
studyLogs
){
Boolean
f
=
studyLogService
.
insertBatch
(
studyLogs
,
500
);
return
f
;
}
@PostMapping
(
"/delete/batch"
)
public
Boolean
deleteBatch
(
@RequestBody
List
<
Long
>
ids
){
Boolean
f
=
studyLogService
.
deleteBatchIds
(
ids
);
return
f
;
}
//因为异步消息可能会丢失,加这个可以通过反查机制查询
@PostMapping
(
"/recorde/insert/batch"
)
public
Boolean
recordeInsertBatch
(
@RequestBody
TpStudentActivityRecord
tsar
)
{
return
tpStudentActivityRecordService
.
insert
(
tsar
);
}
@GetMapping
(
"/get/courseId"
)
public
int
getStudyLogByCourseId
(
@RequestParam
(
"courseId"
)
Long
courseId
){
StudyLog
studyLog
=
new
StudyLog
();
studyLog
.
setCourseId
(
courseId
);
return
studyLogService
.
selectCount
(
QueryUtil
.
condition
(
studyLog
));
}
}
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/domain/StudyLog.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
domain
;
import
com.baomidou.mybatisplus.activerecord.Model
;
import
com.baomidou.mybatisplus.annotations.TableField
;
import
com.baomidou.mybatisplus.annotations.TableId
;
import
com.baomidou.mybatisplus.annotations.TableName
;
import
com.baomidou.mybatisplus.enums.FieldFill
;
import
com.baomidou.mybatisplus.enums.IdType
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* <p>
* 学习日志表
* </p>
*
* @author fulan123
* @since 2018-05-03
*/
@Data
@Api
(
tags
=
"StudyLog"
,
description
=
"学习日志表"
)
@TableName
(
"study_log"
)
public
class
StudyLog
extends
Model
<
StudyLog
>
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"日志主键"
)
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
@ApiModelProperty
(
value
=
"会话id"
)
@TableField
(
"session_id"
)
private
String
sessionId
;
@ApiModelProperty
(
value
=
"课程id"
)
@TableField
(
"course_id"
)
private
Long
courseId
;
@ApiModelProperty
(
value
=
"账号id"
)
@TableField
(
"account_id"
)
private
String
accountId
;
@ApiModelProperty
(
value
=
"章节id"
)
@TableField
(
"chapter_id"
)
private
Long
chapterId
;
@ApiModelProperty
(
value
=
"素材id"
)
@TableField
(
"material_id"
)
private
Long
materialId
;
@ApiModelProperty
(
value
=
"分辨率"
)
private
String
resolution
;
@ApiModelProperty
(
value
=
"文档页面"
)
private
Integer
page
;
@TableField
(
value
=
"create_time"
,
fill
=
FieldFill
.
INSERT
)
private
Date
createTime
;
@ApiModelProperty
(
value
=
"终端规格"
)
@TableField
(
"terminal_device"
)
private
String
terminalDevice
;
@ApiModelProperty
(
value
=
"终端类型"
)
@TableField
(
"terminal_type"
)
private
String
terminalType
;
@ApiModelProperty
(
value
=
"素材完成条件 0 未完成 1 完成"
)
@TableField
(
"material_completed"
)
private
Integer
materialCompleted
;
@TableField
(
"org_id"
)
private
String
orgId
;
@TableField
(
"company_id"
)
private
String
companyId
;
@TableField
(
"site_id"
)
private
Long
siteId
;
@ApiModelProperty
(
value
=
"日志分析完成条件 0 未完成 1 完成"
)
private
Integer
status
;
@ApiModelProperty
(
value
=
"发送请求时间"
)
private
Long
timestamp
;
@ApiModelProperty
(
value
=
"nginx接收请求时间"
)
@TableField
(
"nginx_time"
)
private
Date
nginxTime
;
@TableField
(
"progress"
)
private
Integer
progress
;
@TableField
(
"type"
)
private
String
type
;
@Override
protected
Serializable
pkVal
()
{
return
this
.
id
;
}
}
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/domain/TpStudentActivityRecord.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
domain
;
import
com.baomidou.mybatisplus.activerecord.Model
;
import
com.baomidou.mybatisplus.annotations.TableField
;
import
com.baomidou.mybatisplus.annotations.TableName
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* <p>
* 学员完成活动记录(这里无论有没有被设置成别的活动的开启条件,都记录)
* </p>
*
* @author shengchenglong
* @since 2018-03-29
*/
@Data
@Api
(
tags
=
"TpStudentActivityRecord"
,
description
=
"TpStudentActivityRecord"
)
@TableName
(
"tp_student_activity_record"
)
public
class
TpStudentActivityRecord
extends
Model
<
TpStudentActivityRecord
>
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键id"
)
private
Long
id
;
@ApiModelProperty
(
value
=
"活动类型: 0课程 1考试 2调研 3直播 4投票 5作业 6证书 7报名 8签到 9外部链接"
)
private
Integer
type
;
@ApiModelProperty
(
value
=
"学员id"
)
@TableField
(
"account_id"
)
private
Long
accountId
;
@ApiModelProperty
(
value
=
"课程、考试、调研、直播、投票、作业、证书、外部链接的id,由type决定类型。"
)
@TableField
(
"relation_id"
)
private
Long
relationId
;
@ApiModelProperty
(
value
=
"若是考试(type=1)的话,需要记录分数"
)
private
Float
score
;
@ApiModelProperty
(
value
=
"若是课程,需要记录学习时长"
)
private
Long
seconds
;
@ApiModelProperty
(
value
=
"是否完成(1是,0否),默认完成。"
)
private
Integer
finished
;
@ApiModelProperty
(
value
=
"完成时间"
)
@TableField
(
"finish_date"
)
private
Date
finishDate
;
@ApiModelProperty
(
value
=
"所属站点id"
)
@TableField
(
"site_id"
)
private
Long
siteId
;
@ApiModelProperty
(
value
=
"原始数据id"
)
@TableField
(
"o_id"
)
private
Long
oId
;
@Override
protected
Serializable
pkVal
()
{
return
this
.
id
;
}
}
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/listener/StudyLogListener.java
0 → 100644
View file @
852228ba
/**
* FileName: StudyLogListener
* Author: wenjunlong
* Date: 2018/5/28 17:17
* Description: 监听消息 消费学习记录信息
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package
com
.
yizhi
.
studylog
.
application
.
listener
;
//import com.alibaba.fastjson.JSONObject;
//import com.fulan.application.cache.RedisCache;
//import com.fulan.application.domain.StudyLog;
//import com.fulan.application.service.IStudyLogService;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.amqp.core.AmqpTemplate;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.util.ArrayList;
//import java.util.List;
/**
* 〈一句话功能简述〉<br>
* 〈监听消息 消费学习记录信息〉
*
* @author wenjunlong
* @create 2018/5/28
* @since 1.0.0
*/
//@Component
public
class
StudyLogListener
{
// private static final Logger LOG = LoggerFactory.getLogger(StudyLogListener.class);
// @Autowired
// AmqpTemplate amqpTemplate;
// @Autowired
// private IStudyLogService studyLogService;
//
// @Autowired
// RedisCache redisCache;
//
// @RabbitListener(queues = "studyLog")
// public void processStudyLog(String key) {
// LOG.info("------------处理消息学习日志消息 -----------------");
// updateStudyLog(key);
// }
//
//
// @RabbitListener(queues = "rollBackStuduLog")
// public void processUpdateStudyLog(String key) {
// LOG.info("------------回滚消息学习日志消息 -----------------");
// rollBackStuduLog(key);
// }
//
//
//
// /**
// * //批量更新学习日志
// * @param key
// */
// private void updateStudyLog(String key) {
// String[] keys = key.split(",");
// List<StudyLog> studyLogs = new ArrayList<StudyLog>();
// try {
// String studyLogString = redisCache.hget(keys[0], keys[0]).toString();
// System.out.println("数据格式:"+studyLogString);
// studyLogs = JSONObject.parseArray(studyLogString, StudyLog.class);
// } catch (Exception e) {
// redisCache.hdel(keys[2], keys);
// redisCache.hdel(keys[1], keys);
// redisCache.hdel(keys[0], keys);
// LOG.error("updateStudyLog方法redis中取出学习日志数据不符", e.getMessage());
// }
// if (studyLogs.size() > 0) {
// Boolean f = studyLogService.updateBatchById(studyLogs);
// if (f) {
// amqpTemplate.convertAndSend("recorde", key);
// }
// }
// LOG.error("学习日志更新成功!!!");
// }
//
// /**
// * 批量回滚学习日志
// * @param key
// */
// private void rollBackStuduLog(String key) {
// String[] keys = key.split(",");
// List<StudyLog> studyLogs = new ArrayList<StudyLog>();
// try {
// String studyLogString = redisCache.hget(keys[0], keys[0]).toString();
//
// studyLogs = JSONObject.parseArray(studyLogString, StudyLog.class);
// } catch (Exception e) {
// LOG.error("rollBackStuduLog方法redis中取出学习日志数据不符"+ e.getMessage());
// }
// if (studyLogs.size() > 0) {
// for (StudyLog studyLogs1 : studyLogs) {
// studyLogs1.setStatus(0);
// }
// Boolean f = studyLogService.updateBatchById(studyLogs);
// if (f) {
// redisCache.hdel(keys[2], keys);
// redisCache.hdel(keys[1], keys);
// redisCache.hdel(keys[0], keys);
// }
// }
// LOG.error("学习日志已回滚!!!");
// }
}
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/mapper/StudyLogMapper.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
mapper
;
import
com.yizhi.studylog.application.domain.StudyLog
;
import
com.baomidou.mybatisplus.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
/**
* <p>
* 学习日志表 Mapper 接口
* </p>
*
* @author fulan123
* @since 2018-05-03
*/
public
interface
StudyLogMapper
extends
BaseMapper
<
StudyLog
>
{
Boolean
insertList
(
@Param
(
"list"
)
List
<
StudyLog
>
list
);
List
<
StudyLog
>
selectStudyLogList
(
@Param
(
"type"
)
String
type
);
List
<
String
>
listSessionId
(
@Param
(
"startId"
)
Long
startId
);
Long
maxId
();
Long
minId
();
}
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/mapper/StudyLogMapper.xml
0 → 100644
View file @
852228ba
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.yizhi.studylog.application.mapper.StudyLogMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.yizhi.studylog.application.domain.StudyLog"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"session_id"
property=
"sessionId"
/>
<result
column=
"course_id"
property=
"courseId"
/>
<result
column=
"account_id"
property=
"accountId"
/>
<result
column=
"chapter_id"
property=
"chapterId"
/>
<result
column=
"material_id"
property=
"materialId"
/>
<result
column=
"resolution"
property=
"resolution"
/>
<result
column=
"page"
property=
"page"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"terminal_device"
property=
"terminalDevice"
/>
<result
column=
"terminal_type"
property=
"terminalType"
/>
<result
column=
"material_completed"
property=
"materialCompleted"
/>
<result
column=
"org_id"
property=
"orgId"
/>
<result
column=
"company_id"
property=
"companyId"
/>
<result
column=
"site_id"
property=
"siteId"
/>
<result
column=
"status"
property=
"status"
/>
<result
column=
"timestamp"
property=
"timestamp"
/>
<result
column=
"nginx_time"
property=
"nginxTime"
/>
</resultMap>
<!-- 数据批量插入 -->
<insert
id=
"insertList"
parameterType=
"java.util.ArrayList"
>
insert into
study_log (
id,
session_id,
course_id,
account_id,
chapter_id,
material_id,
resolution,
page,
create_time,
terminal_device,
terminal_type,
material_completed,
org_id,
company_id,
site_id,
status,
timestamp
) VALUES
<foreach
collection=
"list"
item=
"item"
index=
"index"
separator=
","
>
(#{item.id},
#{item.sessionId},
#{item.courseId},
#{item.accountId},
#{item.chapterId},
#{item.materialId},
#{item.resolution},
#{item.page},
#{item.createTime},
#{item.terminalDevice},
#{item.terminalType},
#{item.materialCompleted},
#{item.orgId},
#{item.companyId},
#{item.siteId},
#{item.status},
#{item.timestamp}
)
</foreach>
</insert>
<select
id=
"selectStudyLogList"
resultMap=
"BaseResultMap"
>
SELECT
*
FROM
study_log sl
WHERE
sl.account_id > 0
AND sl.status = 0
AND sl.timestamp > 0
<choose>
<when
test=
"type != null and type == 'scorm'"
>
AND type = 'scorm'
</when>
<otherwise>
<![CDATA[ AND type <> 'scorm' ]]>
</otherwise>
</choose>
ORDER BY sl.id asc
limit 50000
</select>
<select
id=
"listSessionId"
resultType=
"java.lang.String"
>
SELECT session_id FROM study_log
where id
<![CDATA[ <= ]]>
#{startId} GROUP BY session_id
</select>
<select
id=
"maxId"
resultType=
"java.lang.Long"
>
SELECT MAX(id) FROM study_log
</select>
<select
id=
"minId"
resultType=
"java.lang.Long"
>
SELECT MIN(id) FROM study_log
</select>
</mapper>
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/mapper/TpStudentActivityRecordMapper.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
mapper
;
import
com.baomidou.mybatisplus.mapper.BaseMapper
;
import
com.yizhi.studylog.application.domain.TpStudentActivityRecord
;
/**
* @author wangfeida
* @since 2019-02-14
*/
public
interface
TpStudentActivityRecordMapper
extends
BaseMapper
<
TpStudentActivityRecord
>
{
}
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/service/IStudyLogService.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
service
;
import
com.yizhi.studylog.application.domain.StudyLog
;
import
com.baomidou.mybatisplus.service.IService
;
import
java.util.List
;
/**
* <p>
* 学习日志表 服务类
* </p>
*
* @author fulan123
* @since 2018-05-03
*/
public
interface
IStudyLogService
extends
IService
<
StudyLog
>
{
Boolean
insertList
(
List
<
StudyLog
>
studyLogs
);
List
<
StudyLog
>
selectStudyLogList
(
String
type
);
List
<
String
>
listSessionId
(
Long
startId
);
Long
maxId
();
Long
minId
();
}
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/service/ITpStudentActivityRecordService.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
service
;
import
com.yizhi.studylog.application.domain.TpStudentActivityRecord
;
import
com.baomidou.mybatisplus.service.IService
;
/**
* @author wangfeida
* @since 2019-02-14
*/
public
interface
ITpStudentActivityRecordService
extends
IService
<
TpStudentActivityRecord
>
{
}
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/service/impl/StudyLogServiceImpl.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
service
.
impl
;
import
com.yizhi.studylog.application.domain.StudyLog
;
import
com.yizhi.studylog.application.mapper.StudyLogMapper
;
import
com.yizhi.studylog.application.service.IStudyLogService
;
import
com.baomidou.mybatisplus.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* <p>
* 学习日志表 服务实现类
* </p>
*
* @author fulan123
* @since 2018-05-03
*/
@Service
public
class
StudyLogServiceImpl
extends
ServiceImpl
<
StudyLogMapper
,
StudyLog
>
implements
IStudyLogService
{
@Override
public
Boolean
insertList
(
List
<
StudyLog
>
studyLogs
)
{
return
this
.
baseMapper
.
insertList
(
studyLogs
);
}
@Override
public
List
<
StudyLog
>
selectStudyLogList
(
String
type
)
{
return
this
.
baseMapper
.
selectStudyLogList
(
type
);
}
@Override
public
List
<
String
>
listSessionId
(
Long
startId
)
{
return
this
.
baseMapper
.
listSessionId
(
startId
);
}
@Override
public
Long
maxId
()
{
return
this
.
baseMapper
.
maxId
();
}
@Override
public
Long
minId
()
{
return
this
.
baseMapper
.
minId
();
}
}
cloud-course-study-log-service/src/main/java/com/yizhi/studylog/application/service/impl/TpStudentActivityRecordServiceImpl.java
0 → 100644
View file @
852228ba
package
com
.
yizhi
.
studylog
.
application
.
service
.
impl
;
import
com.yizhi.studylog.application.domain.TpStudentActivityRecord
;
import
com.yizhi.studylog.application.mapper.TpStudentActivityRecordMapper
;
import
com.yizhi.studylog.application.service.ITpStudentActivityRecordService
;
import
com.baomidou.mybatisplus.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 学员完成活动记录(这里无论有没有被设置成别的活动的开启条件,都记录) 服务实现类
* </p>
*
* @author shengchenglong
* @since 2018-03-29
*/
@Service
public
class
TpStudentActivityRecordServiceImpl
extends
ServiceImpl
<
TpStudentActivityRecordMapper
,
TpStudentActivityRecord
>
implements
ITpStudentActivityRecordService
{
}
cloud-course-study-log-service/src/main/resources/bootstrap.properties
0 → 100644
View file @
852228ba
server.port
=
31234
spring.application.name
=
studyLog
ACTIVE
=
${spring.profiles.active}
spring.profiles.active
=
dev
# nacos
spring.cloud.nacos.config.shared-dataids
=
common-${spring.profiles.active}.properties
spring.cloud.nacos.config.namespace
=
${spring.profiles.active}
spring.cloud.nacos.config.prefix
=
${spring.application.name}
spring.cloud.nacos.config.file-extension
=
properties
spring.cloud.nacos.config.server-addr
=
192.168.1.22:3333,192.168.1.22:4444,192.168.1.22:5555
\ No newline at end of file
pom.xml
0 → 100644
View file @
852228ba
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
com.yizhi
</groupId>
<artifactId>
wmy-parent
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<relativePath
/>
</parent>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-course-study-log
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<modules>
<module>
cloud-course-study-log-api
</module>
<module>
cloud-course-study-log-service
</module>
</modules>
<packaging>
pom
</packaging>
<dependencies>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-common-api
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-orm
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-util
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
com.yizhi
</groupId>
<artifactId>
cloud-core
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>
wmy4.0
</id>
<url>
http://mvn.km365.pw/nexus/content/groups/wmy4.0-group/
</url>
<releases>
<enabled>
true
</enabled>
</releases>
<snapshots>
<enabled>
true
</enabled>
</snapshots>
</repository>
</repositories>
</project>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment