Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
roncoo
roncoo-education
提交
7d0d4347
R
roncoo-education
项目概览
roncoo
/
roncoo-education
11 个月 前同步成功
通知
146
Star
5
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
1
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roncoo-education
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
1
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7d0d4347
编写于
11月 25, 2022
作者:
F
fengyw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加课程用户学习统计
上级
ca527d0b
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
299 addition
and
13 deletion
+299
-13
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/UserStudyDao.java
...in/java/com/roncoo/education/course/dao/UserStudyDao.java
+47
-2
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/impl/UserStudyDaoImpl.java
...om/roncoo/education/course/dao/impl/UserStudyDaoImpl.java
+9
-0
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/admin/biz/AdminUserCourseBiz.java
...ducation/course/service/admin/biz/AdminUserCourseBiz.java
+55
-0
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/admin/req/AdminUserCoursePageReq.java
...tion/course/service/admin/req/AdminUserCoursePageReq.java
+0
-11
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/admin/resp/AdminUserCoursePageResp.java
...on/course/service/admin/resp/AdminUserCoursePageResp.java
+10
-0
roncoo-education-user/roncoo-education-user-feign/src/main/java/com/roncoo/education/user/feign/interfaces/IFeignUsers.java
...m/roncoo/education/user/feign/interfaces/IFeignUsers.java
+38
-0
roncoo-education-user/roncoo-education-user-feign/src/main/java/com/roncoo/education/user/feign/interfaces/vo/UsersVO.java
...om/roncoo/education/user/feign/interfaces/vo/UsersVO.java
+57
-0
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/feign/FeignUsersController.java
...com/roncoo/education/user/feign/FeignUsersController.java
+40
-0
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/feign/biz/FeignUsersBiz.java
...va/com/roncoo/education/user/feign/biz/FeignUsersBiz.java
+43
-0
未找到文件。
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/UserStudyDao.java
浏览文件 @
7d0d4347
...
...
@@ -72,10 +72,17 @@ public interface UserStudyDao {
*/
int
countByExample
(
UserStudyExample
example
);
/**
* 获取
*
* @param periodId
* @param userId
* @return
*/
UserStudy
getByPeriodIdAndUserId
(
Long
periodId
,
Long
userId
);
/**
* 获取
当前
课程的最新学习课时记录
* 获取
指定
课程的最新学习课时记录
*
* @param userId
* @param courseIdList
...
...
@@ -83,11 +90,49 @@ public interface UserStudyDao {
*/
List
<
UserStudy
>
listByUserIdAndCourseIdsForMax
(
Long
userId
,
List
<
Long
>
courseIdList
);
/**
* 获取当前学习的课程的最新课时
*
* @param userId
* @param courseId
* @return
*/
UserStudy
getByCourseIdForLast
(
Long
userId
,
Long
courseId
);
/**
* 获取指定课程的课时进度总和
*
* @param userId
* @param courseIdList
* @return
*/
List
<
UserStudy
>
listByUserIdAndCourseIdsForSumProgress
(
Long
userId
,
List
<
Long
>
courseIdList
);
List
<
UserStudy
>
listByUserIdAndCourseId
(
Long
userId
,
Long
courseId
);
/**
* 获取指定课程的课时进度总和
*
* @param courseId
* @param userIdList
* @return
*/
List
<
UserStudy
>
listByCourseIdAndUserIdsForSumProgress
(
Long
courseId
,
List
<
Long
>
userIdList
);
/**
* 获取集合
*
* @param userId
* @param courseId
* @return
*/
List
<
UserStudy
>
listByUserIdAndCourseId
(
Long
userId
,
Long
courseId
);
/**
* 删除
*
* @param periodId
* @return
*/
int
deleteByPeriodId
(
Long
periodId
);
}
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/dao/impl/UserStudyDaoImpl.java
浏览文件 @
7d0d4347
...
...
@@ -118,6 +118,15 @@ public class UserStudyDaoImpl extends AbstractBaseJdbc implements UserStudyDao {
return
namedParameterJdbcTemplate
.
query
(
sql
,
map
,
new
BeanPropertyRowMapper
<>(
UserStudy
.
class
));
}
@Override
public
List
<
UserStudy
>
listByCourseIdAndUserIdsForSumProgress
(
Long
courseId
,
List
<
Long
>
userIdList
)
{
String
sql
=
"select user_id, sum(progress) as progress from user_study where course_id=:COURSEID and user_id in (:USERIDS) GROUP BY user_id"
;
Map
<
String
,
Object
>
map
=
new
HashMap
();
map
.
put
(
"COURSEID"
,
courseId
);
map
.
put
(
"USERIDS"
,
userIdList
);
return
namedParameterJdbcTemplate
.
query
(
sql
,
map
,
new
BeanPropertyRowMapper
<>(
UserStudy
.
class
));
}
@Override
public
List
<
UserStudy
>
listByUserIdAndCourseId
(
Long
userId
,
Long
courseId
)
{
UserStudyExample
example
=
new
UserStudyExample
();
...
...
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/admin/biz/AdminUserCourseBiz.java
浏览文件 @
7d0d4347
package
com.roncoo.education.course.service.admin.biz
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.roncoo.education.common.core.base.Page
;
import
com.roncoo.education.common.core.base.PageUtil
;
import
com.roncoo.education.common.core.base.Result
;
import
com.roncoo.education.common.core.tools.BeanUtil
;
import
com.roncoo.education.common.service.BaseBiz
;
import
com.roncoo.education.course.dao.CourseChapterPeriodDao
;
import
com.roncoo.education.course.dao.UserCourseDao
;
import
com.roncoo.education.course.dao.UserStudyDao
;
import
com.roncoo.education.course.dao.impl.mapper.entity.CourseChapterPeriodExample
;
import
com.roncoo.education.course.dao.impl.mapper.entity.UserCourse
;
import
com.roncoo.education.course.dao.impl.mapper.entity.UserCourseExample
;
import
com.roncoo.education.course.dao.impl.mapper.entity.UserCourseExample.Criteria
;
import
com.roncoo.education.course.dao.impl.mapper.entity.UserStudy
;
import
com.roncoo.education.course.service.admin.req.AdminUserCourseEditReq
;
import
com.roncoo.education.course.service.admin.req.AdminUserCoursePageReq
;
import
com.roncoo.education.course.service.admin.req.AdminUserCourseSaveReq
;
import
com.roncoo.education.course.service.admin.resp.AdminUserCoursePageResp
;
import
com.roncoo.education.course.service.admin.resp.AdminUserCourseViewResp
;
import
com.roncoo.education.user.feign.interfaces.IFeignUsers
;
import
com.roncoo.education.user.feign.interfaces.vo.UsersVO
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.stereotype.Component
;
import
javax.validation.constraints.NotNull
;
import
java.math.BigDecimal
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* ADMIN-课程用户关联表
...
...
@@ -28,8 +41,16 @@ import javax.validation.constraints.NotNull;
@RequiredArgsConstructor
public
class
AdminUserCourseBiz
extends
BaseBiz
{
@NotNull
private
final
IFeignUsers
feignUsers
;
@NotNull
private
final
UserCourseDao
dao
;
@NotNull
private
final
CourseChapterPeriodDao
courseChapterPeriodDao
;
@NotNull
private
final
UserStudyDao
userStudyDao
;
/**
* 课程用户关联表分页
...
...
@@ -40,8 +61,42 @@ public class AdminUserCourseBiz extends BaseBiz {
public
Result
<
Page
<
AdminUserCoursePageResp
>>
page
(
AdminUserCoursePageReq
req
)
{
UserCourseExample
example
=
new
UserCourseExample
();
Criteria
c
=
example
.
createCriteria
();
if
(
req
.
getCourseId
()
!=
null
)
{
c
.
andCourseIdEqualTo
(
req
.
getCourseId
());
}
if
(
req
.
getUserId
()
!=
null
)
{
c
.
andUserIdEqualTo
(
req
.
getUserId
());
}
Page
<
UserCourse
>
page
=
dao
.
page
(
req
.
getPageCurrent
(),
req
.
getPageSize
(),
example
);
Page
<
AdminUserCoursePageResp
>
respPage
=
PageUtil
.
transform
(
page
,
AdminUserCoursePageResp
.
class
);
if
(
CollUtil
.
isNotEmpty
(
respPage
.
getList
()))
{
CourseChapterPeriodExample
courseChapterPeriodExample
=
new
CourseChapterPeriodExample
();
courseChapterPeriodExample
.
createCriteria
().
andCourseIdEqualTo
(
req
.
getCourseId
());
int
periods
=
courseChapterPeriodDao
.
countByExample
(
courseChapterPeriodExample
);
List
<
Long
>
userIdList
=
respPage
.
getList
().
stream
().
map
(
item
->
item
.
getUserId
()).
collect
(
Collectors
.
toList
());
Map
<
Long
,
UsersVO
>
usersVOMap
=
feignUsers
.
listByIds
(
userIdList
);
List
<
UserStudy
>
userStudyList
=
userStudyDao
.
listByCourseIdAndUserIdsForSumProgress
(
req
.
getCourseId
(),
userIdList
);
Map
<
Long
,
BigDecimal
>
userStudySumMap
=
new
HashMap
<>();
if
(
CollUtil
.
isNotEmpty
(
userStudyList
))
{
userStudySumMap
=
userStudyList
.
stream
().
collect
(
Collectors
.
toMap
(
item
->
item
.
getUserId
(),
item
->
item
.
getProgress
()));
}
for
(
AdminUserCoursePageResp
auc
:
respPage
.
getList
())
{
UsersVO
usersVO
=
usersVOMap
.
get
(
auc
.
getUserId
());
if
(
ObjectUtil
.
isNotEmpty
(
usersVO
))
{
auc
.
setMobile
(
usersVO
.
getMobile
());
auc
.
setNickname
(
usersVO
.
getNickname
());
}
BigDecimal
progress
=
userStudySumMap
.
get
(
auc
.
getUserId
());
if
(
ObjectUtil
.
isNotEmpty
(
progress
))
{
// 课程进度
auc
.
setCourseProgress
(
progress
.
divide
(
BigDecimal
.
valueOf
(
periods
),
BigDecimal
.
ROUND_UP
));
}
}
}
return
Result
.
success
(
respPage
);
}
...
...
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/admin/req/AdminUserCoursePageReq.java
浏览文件 @
7d0d4347
package
com.roncoo.education.course.service.admin.req
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
/**
* <p>
...
...
@@ -23,15 +21,6 @@ public class AdminUserCoursePageReq implements Serializable {
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键"
)
private
Long
id
;
@ApiModelProperty
(
value
=
"状态(1:正常,0:禁用)"
)
private
Integer
statusId
;
@ApiModelProperty
(
value
=
"排序"
)
private
Integer
sort
;
@ApiModelProperty
(
value
=
"用户ID"
)
private
Long
userId
;
...
...
roncoo-education-course/roncoo-education-course-service/src/main/java/com/roncoo/education/course/service/admin/resp/AdminUserCoursePageResp.java
浏览文件 @
7d0d4347
...
...
@@ -7,6 +7,7 @@ import lombok.Data;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
/**
...
...
@@ -48,4 +49,13 @@ public class AdminUserCoursePageResp implements Serializable {
@ApiModelProperty
(
value
=
"购买类型(1支付,2免费)"
)
private
Integer
buyType
;
@ApiModelProperty
(
value
=
"手机号码"
)
private
String
mobile
;
@ApiModelProperty
(
value
=
"昵称"
)
private
String
nickname
;
@ApiModelProperty
(
value
=
"该课程总进度"
)
private
BigDecimal
courseProgress
=
BigDecimal
.
ZERO
;
}
roncoo-education-user/roncoo-education-user-feign/src/main/java/com/roncoo/education/user/feign/interfaces/IFeignUsers.java
0 → 100644
浏览文件 @
7d0d4347
package
com.roncoo.education.user.feign.interfaces
;
import
com.roncoo.education.user.feign.interfaces.vo.UsersVO
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
java.util.List
;
import
java.util.Map
;
/**
* 讲师信息 接口
*
* @author wujing
* @date 2022-08-27
*/
@FeignClient
(
value
=
"user-service"
,
path
=
"/user/users"
)
public
interface
IFeignUsers
{
/**
* 根据ID获取信息
*
* @param id 主键ID
* @return 讲师信息
*/
@GetMapping
(
value
=
"/get/{id}"
)
UsersVO
getById
(
@PathVariable
(
value
=
"id"
)
Long
id
);
/**
* 根据ID集合获取集合
*
* @param userIdList
* @return
*/
@PostMapping
(
value
=
"/listByIds"
)
Map
<
Long
,
UsersVO
>
listByIds
(
@RequestBody
List
<
Long
>
userIdList
);
}
roncoo-education-user/roncoo-education-user-feign/src/main/java/com/roncoo/education/user/feign/interfaces/vo/UsersVO.java
0 → 100644
浏览文件 @
7d0d4347
package
com.roncoo.education.user.feign.interfaces.vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
/**
* <p>
* ADMIN-用户信息
* </p>
*
* @author wujing
*/
@Data
@Accessors
(
chain
=
true
)
@ApiModel
(
value
=
"AdminUsersViewResp"
,
description
=
"ADMIN-用户信息查看"
)
public
class
UsersVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键"
)
private
Long
id
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@ApiModelProperty
(
value
=
"创建时间"
)
private
LocalDateTime
gmtCreate
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@ApiModelProperty
(
value
=
"修改时间"
)
private
LocalDateTime
gmtModified
;
@ApiModelProperty
(
value
=
"状态(1:正常,0:禁用)"
)
private
Integer
statusId
;
@ApiModelProperty
(
value
=
"手机号码"
)
private
String
mobile
;
@ApiModelProperty
(
value
=
"昵称"
)
private
String
nickname
;
@ApiModelProperty
(
value
=
"用户性别(1男,2女,3保密)"
)
private
Integer
userSex
;
@ApiModelProperty
(
value
=
"用户年龄"
)
private
Integer
userAge
;
@ApiModelProperty
(
value
=
"用户头像"
)
private
String
userHead
;
@ApiModelProperty
(
value
=
"备注"
)
private
String
remark
;
}
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/feign/FeignUsersController.java
0 → 100644
浏览文件 @
7d0d4347
package
com.roncoo.education.user.feign
;
import
com.roncoo.education.common.service.BaseController
;
import
com.roncoo.education.user.feign.biz.FeignUsersBiz
;
import
com.roncoo.education.user.feign.interfaces.IFeignUsers
;
import
com.roncoo.education.user.feign.interfaces.vo.UsersVO
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
import
java.util.Map
;
/**
* 讲师信息
*
* @author wujing
* @date 2022-08-27
*/
@RestController
@RequiredArgsConstructor
@RequestMapping
(
"/user/lecturer"
)
public
class
FeignUsersController
extends
BaseController
implements
IFeignUsers
{
@NotNull
private
final
FeignUsersBiz
biz
;
@Override
public
UsersVO
getById
(
@PathVariable
(
value
=
"id"
)
Long
id
)
{
return
biz
.
getById
(
id
);
}
@Override
public
Map
<
Long
,
UsersVO
>
listByIds
(
@RequestBody
List
<
Long
>
userIdList
)
{
return
biz
.
listByIds
(
userIdList
);
}
}
roncoo-education-user/roncoo-education-user-service/src/main/java/com/roncoo/education/user/feign/biz/FeignUsersBiz.java
0 → 100644
浏览文件 @
7d0d4347
package
com.roncoo.education.user.feign.biz
;
import
cn.hutool.core.collection.CollUtil
;
import
com.roncoo.education.common.core.tools.BeanUtil
;
import
com.roncoo.education.common.service.BaseBiz
;
import
com.roncoo.education.user.dao.UsersDao
;
import
com.roncoo.education.user.dao.impl.mapper.entity.Users
;
import
com.roncoo.education.user.feign.interfaces.vo.UsersVO
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.stereotype.Component
;
import
javax.validation.constraints.NotNull
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* 讲师信息
*
* @author wujing
*/
@Component
@RequiredArgsConstructor
public
class
FeignUsersBiz
extends
BaseBiz
{
@NotNull
private
final
UsersDao
dao
;
public
UsersVO
getById
(
Long
id
)
{
Users
record
=
dao
.
getById
(
id
);
return
BeanUtil
.
copyProperties
(
record
,
UsersVO
.
class
);
}
public
Map
<
Long
,
UsersVO
>
listByIds
(
List
<
Long
>
userIdList
)
{
List
<
Users
>
usersList
=
dao
.
listByIds
(
userIdList
);
if
(
CollUtil
.
isNotEmpty
(
usersList
))
{
return
usersList
.
stream
().
collect
(
Collectors
.
toMap
(
item
->
item
.
getId
(),
item
->
BeanUtil
.
copyProperties
(
item
,
UsersVO
.
class
)));
}
return
new
HashMap
<>();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录