Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
涂亚平
/
subsidy
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit ae243f73
authored
Dec 08, 2022
by
涂亚平
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
直播版本online
1 parent
27f572f1
Hide whitespace changes
Inline
Side-by-side
Showing
82 changed files
with
3662 additions
and
72 deletions
pom.xml
src/main/java/com/subsidy/common/configure/PolyvConfig.java
src/main/java/com/subsidy/controller/AdministerController.java
src/main/java/com/subsidy/controller/LiveClassesController.java
src/main/java/com/subsidy/controller/LiveCoursewaresController.java
src/main/java/com/subsidy/controller/LiveDictController.java
src/main/java/com/subsidy/controller/LiveFilesController.java
src/main/java/com/subsidy/controller/LivePlaybackHistoryController.java
src/main/java/com/subsidy/controller/LiveStudyHistoryController.java
src/main/java/com/subsidy/controller/LiveVodsController.java
src/main/java/com/subsidy/controller/MemberController.java
src/main/java/com/subsidy/controller/VodPlayHistoryController.java
src/main/java/com/subsidy/dto/live/AddLiveDTO.java
src/main/java/com/subsidy/dto/live/AllLivesDTO.java
src/main/java/com/subsidy/dto/live/ClassMembersDTO.java
src/main/java/com/subsidy/dto/live/DataViewDTO.java
src/main/java/com/subsidy/dto/live/LiveSignDTO.java
src/main/java/com/subsidy/dto/live/PlaybacksDTO.java
src/main/java/com/subsidy/dto/live/PolyvInfoDTO.java
src/main/java/com/subsidy/jobs/LiveDictJob.java
src/main/java/com/subsidy/mapper/LiveClassesMapper.java
src/main/java/com/subsidy/mapper/LiveCoursewaresMapper.java
src/main/java/com/subsidy/mapper/LiveDictMapper.java
src/main/java/com/subsidy/mapper/LiveFilesMapper.java
src/main/java/com/subsidy/mapper/LivePlaybackHistoryMapper.java
src/main/java/com/subsidy/mapper/LiveStudyHistoryMapper.java
src/main/java/com/subsidy/mapper/LiveVodsMapper.java
src/main/java/com/subsidy/mapper/MemberMapper.java
src/main/java/com/subsidy/model/LiveClassesDO.java
src/main/java/com/subsidy/model/LiveCoursewaresDO.java
src/main/java/com/subsidy/model/LiveDictDO.java
src/main/java/com/subsidy/model/LiveFilesDO.java
src/main/java/com/subsidy/model/LivePlaybackHistoryDO.java
src/main/java/com/subsidy/model/LiveStudyHistoryDO.java
src/main/java/com/subsidy/model/LiveVodsDO.java
src/main/java/com/subsidy/service/LiveClassesService.java
src/main/java/com/subsidy/service/LiveCoursewaresService.java
src/main/java/com/subsidy/service/LiveDictService.java
src/main/java/com/subsidy/service/LiveFilesService.java
src/main/java/com/subsidy/service/LivePlaybackHistoryService.java
src/main/java/com/subsidy/service/LiveStudyHistoryService.java
src/main/java/com/subsidy/service/LiveVodsService.java
src/main/java/com/subsidy/service/MemberService.java
src/main/java/com/subsidy/service/impl/CertClassServiceImpl.java
src/main/java/com/subsidy/service/impl/LiveClassesServiceImpl.java
src/main/java/com/subsidy/service/impl/LiveCoursewaresServiceImpl.java
src/main/java/com/subsidy/service/impl/LiveDictServiceImpl.java
src/main/java/com/subsidy/service/impl/LiveFilesServiceImpl.java
src/main/java/com/subsidy/service/impl/LivePlaybackHistoryServiceImpl.java
src/main/java/com/subsidy/service/impl/LiveStudyHistoryServiceImpl.java
src/main/java/com/subsidy/service/impl/LiveVodsServiceImpl.java
src/main/java/com/subsidy/service/impl/MemberServiceImpl.java
src/main/java/com/subsidy/util/ConstantUtils.java
src/main/java/com/subsidy/util/HttpUtil.java
src/main/java/com/subsidy/util/MyStringUtils.java
src/main/java/com/subsidy/util/PolyvUtils.java
src/main/java/com/subsidy/util/QuartzUtil.java
src/main/java/com/subsidy/util/Signature.java
src/main/java/com/subsidy/vo/live/AllLivesVO.java
src/main/java/com/subsidy/vo/live/BackData.java
src/main/java/com/subsidy/vo/live/ClassLivesVO.java
src/main/java/com/subsidy/vo/live/ClassMembersVO.java
src/main/java/com/subsidy/vo/live/DataViewVO.java
src/main/java/com/subsidy/vo/live/ExportClassMembersVO.java
src/main/java/com/subsidy/vo/live/ExportPlaybacksVO.java
src/main/java/com/subsidy/vo/live/GetLiveVO.java
src/main/java/com/subsidy/vo/live/LiveClassesVO.java
src/main/java/com/subsidy/vo/live/MemberLivesVO.java
src/main/java/com/subsidy/vo/live/MemberPlaybackVO.java
src/main/java/com/subsidy/vo/live/PlaybacksVO.java
src/main/java/com/subsidy/vo/live/PolyvInfoVO.java
src/main/java/com/subsidy/vo/live/Result.java
src/main/resources/application-dev.properties
src/main/resources/application.properties
src/main/resources/mapper/LiveClassesMapper.xml
src/main/resources/mapper/LiveCoursewaresMapper.xml
src/main/resources/mapper/LiveDictMapper.xml
src/main/resources/mapper/LiveFilesMapper.xml
src/main/resources/mapper/LivePlaybackHistoryMapper.xml
src/main/resources/mapper/LiveStudyHistoryMapper.xml
src/main/resources/mapper/LiveVodsMapper.xml
src/main/resources/mapper/MemberMapper.xml
pom.xml
View file @
ae243f7
...
@@ -231,6 +231,12 @@
...
@@ -231,6 +231,12 @@
<artifactId>
ehcache
</artifactId>
<artifactId>
ehcache
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
net.polyv
</groupId>
<artifactId>
polyv-java-live-sdk
</artifactId>
<version>
2.0.4
</version>
</dependency>
<!-- <dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-data-mongodb</artifactId>-->
<!-- <artifactId>spring-boot-starter-data-mongodb</artifactId>-->
...
@@ -239,7 +245,7 @@
...
@@ -239,7 +245,7 @@
</dependencies>
</dependencies>
<build>
<build>
<finalName>
subsidy
-online
</finalName>
<finalName>
subsidy
</finalName>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
...
...
src/main/java/com/subsidy/common/configure/PolyvConfig.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
common
.
configure
;
import
lombok.Data
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.stereotype.Component
;
@Component
@Data
@ConfigurationProperties
(
prefix
=
"polyv"
)
public
class
PolyvConfig
{
private
String
userId
;
private
String
appId
;
private
String
appSecret
;
private
String
secretKey
;
}
src/main/java/com/subsidy/controller/AdministerController.java
View file @
ae243f7
...
@@ -102,7 +102,7 @@ public class AdministerController {
...
@@ -102,7 +102,7 @@ public class AdministerController {
@PostMapping
(
"exportClassDetail"
)
@PostMapping
(
"exportClassDetail"
)
@ApiOperation
(
"班级管理--班级成员--导出 id 班级id userName"
)
@ApiOperation
(
"班级管理--班级成员--导出 id 班级id userName"
)
//
@LoginRequired
@LoginRequired
public
void
exportClassDetail
(
@RequestBody
ClassDetailDTO
classDetailDTO
)
throws
Exception
{
public
void
exportClassDetail
(
@RequestBody
ClassDetailDTO
classDetailDTO
)
throws
Exception
{
classDetailDTO
.
setFlag
(
true
);
classDetailDTO
.
setFlag
(
true
);
administerService
.
exportClassDetail
(
classDetailDTO
);
administerService
.
exportClassDetail
(
classDetailDTO
);
...
@@ -225,7 +225,7 @@ public class AdministerController {
...
@@ -225,7 +225,7 @@ public class AdministerController {
@PostMapping
(
"imageCheckDetail"
)
@PostMapping
(
"imageCheckDetail"
)
@ApiOperation
(
"实名制验证详情 id 班级id userName pageSize pageNum"
)
@ApiOperation
(
"实名制验证详情 id 班级id userName pageSize pageNum"
)
//
@LoginRequired
@LoginRequired
public
ResponseVO
imageCheckDetail
(
@RequestBody
ClassDetailDTO
classDetailDTO
){
public
ResponseVO
imageCheckDetail
(
@RequestBody
ClassDetailDTO
classDetailDTO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
administerService
.
imageCheckDetail
(
classDetailDTO
));
return
ResponseData
.
generateCreatedResponse
(
0
,
administerService
.
imageCheckDetail
(
classDetailDTO
));
}
}
...
...
src/main/java/com/subsidy/controller/LiveClassesController.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
controller
;
import
com.subsidy.common.ResponseData
;
import
com.subsidy.common.ResponseVO
;
import
com.subsidy.dto.live.ClassMembersDTO
;
import
com.subsidy.dto.live.DataViewDTO
;
import
com.subsidy.model.LiveClassesDO
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.service.LiveClassesService
;
import
com.subsidy.util.excel.ExcelUtil
;
import
com.subsidy.vo.administer.ManageMemberVO
;
import
com.subsidy.vo.live.ClassMembersVO
;
import
com.subsidy.vo.live.ExportClassMembersVO
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
io.swagger.annotations.Api
;
import
java.util.List
;
/**
* <p>
* 前端控制器
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@RestController
@Api
(
tags
=
"直播班级表"
)
@RequestMapping
(
"/liveClasses"
)
public
class
LiveClassesController
{
@Autowired
private
LiveClassesService
liveClassesService
;
@PostMapping
(
"classMembers"
)
@ApiOperation
(
"直播课程管理--直播--班级学员 pageSize pageNum userName liveId classId"
)
public
ResponseVO
classMembers
(
@RequestBody
ClassMembersDTO
classMembersDTO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveClassesService
.
classMembers
(
classMembersDTO
));
}
@PostMapping
(
"exportClassMembers"
)
@ApiOperation
(
"导出 直播课程管理--直播--班级学员 liveId classId"
)
public
void
exportClassMembers
(
@RequestBody
ClassMembersDTO
classMembersDTO
){
List
<
ExportClassMembersVO
>
classMembersVOS
=
liveClassesService
.
exportClassMembers
(
classMembersDTO
);
ExcelUtil
.
writeExcel
(
classMembersVOS
,
ExportClassMembersVO
.
class
);
}
@PostMapping
(
"dataView"
)
@ApiOperation
(
"直播课程管理--数据概览 id 直播id classId"
)
public
ResponseVO
dataView
(
@RequestBody
DataViewDTO
dataViewDTO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveClassesService
.
dataView
(
dataViewDTO
));
}
@PostMapping
(
"classLives"
)
@ApiOperation
(
"企业培训项目管理--班组管理--直播课程 查看某个班级有那几个直播课 classId 班级id"
)
public
ResponseVO
classLives
(
@RequestBody
LiveClassesDO
classesDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveClassesService
.
classLives
(
classesDO
));
}
}
src/main/java/com/subsidy/controller/LiveCoursewaresController.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
controller
;
import
com.subsidy.common.ResponseData
;
import
com.subsidy.common.ResponseVO
;
import
com.subsidy.model.LiveCoursewaresDO
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.service.LiveCoursewaresService
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
io.swagger.annotations.Api
;
/**
* <p>
* 直播课件 前端控制器
* </p>
*
* @author Tuyp
* @since 2022-11-29
*/
@RestController
@Api
(
tags
=
"直播课件--暂时不用了"
)
@RequestMapping
(
"/liveCoursewares"
)
public
class
LiveCoursewaresController
{
@Autowired
private
LiveCoursewaresService
liveCoursewaresService
;
@PostMapping
(
"livewares"
)
@ApiOperation
(
"查看直播课件 id 直播id"
)
public
ResponseVO
livewares
(
@RequestBody
LiveDictDO
liveDictDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveCoursewaresService
.
livewares
(
liveDictDO
));
}
@PostMapping
(
"deleteWare"
)
@ApiOperation
(
"删除直播课件 id 课件id"
)
public
ResponseVO
deleteWare
(
@RequestBody
LiveCoursewaresDO
liveCoursewaresDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveCoursewaresService
.
deleteWare
(
liveCoursewaresDO
));
}
@PostMapping
(
"addWare"
)
@ApiOperation
(
"新增直播课件 liveId courseware wareName "
)
public
ResponseVO
addWare
(
@RequestBody
LiveCoursewaresDO
liveCoursewaresDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveCoursewaresService
.
addWare
(
liveCoursewaresDO
));
}
}
src/main/java/com/subsidy/controller/LiveDictController.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
controller
;
import
com.subsidy.common.ResponseData
;
import
com.subsidy.common.ResponseVO
;
import
com.subsidy.dto.cert.AddCertClassDTO
;
import
com.subsidy.dto.live.AddLiveDTO
;
import
com.subsidy.dto.live.AllLivesDTO
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.service.LiveDictService
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
io.swagger.annotations.Api
;
/**
* <p>
* 前端控制器
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@RestController
@Api
(
tags
=
"直播字典表"
)
@RequestMapping
(
"/liveDict"
)
public
class
LiveDictController
{
@Autowired
private
LiveDictService
liveDictService
;
@PostMapping
(
"allLives"
)
@ApiOperation
(
"直播课程管理--直播管理 liveStatus 直播状态 liveName 直播名称pageSize pageNum"
)
public
ResponseVO
allLives
(
@RequestBody
AllLivesDTO
allLivesDTO
)
{
return
ResponseData
.
generateCreatedResponse
(
0
,
liveDictService
.
allLives
(
allLivesDTO
));
}
@PostMapping
(
"deleteLive"
)
@ApiOperation
(
"直播课程管理--直播管理--删除 id 直播id"
)
public
ResponseVO
deleteLive
(
@RequestBody
LiveDictDO
liveDictDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveDictService
.
deleteLive
(
liveDictDO
));
}
@PostMapping
(
"addLive"
)
@ApiOperation
(
"直播课程管理--直播管理--新增 channel 频道号 startTime 开始时间 liveName 直播名称 ids[] 班级id speakUrl 主讲地址 "
+
" speakPwd主讲密码 liveUrl直播地址 playStartDate 回放开始时间 playEndDate 回放结束时间 liveStatus 直播状态 playbackStatus 回放状态"
)
public
ResponseVO
addLive
(
@RequestBody
AddLiveDTO
addLiveDTO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveDictService
.
addLive
(
addLiveDTO
));
}
@PostMapping
(
"updateLive"
)
@ApiOperation
(
"直播课程管理--直播管理--修改 id channel 频道号 liveName 直播名称 ids[] 班级id liveUrl 直播地址 liveStatus 直播状态 playbackStatus 回放状态"
)
public
ResponseVO
updateLive
(
@RequestBody
AddLiveDTO
addLiveDTO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveDictService
.
updateLive
(
addLiveDTO
));
}
@PostMapping
(
"getLive"
)
@ApiOperation
(
"直播课程管理--直播管理--获取一个直播详情 id 直播id"
)
public
ResponseVO
getLive
(
@RequestBody
LiveDictDO
liveDictDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveDictService
.
getLive
(
liveDictDO
));
}
@PostMapping
(
"liveClasses"
)
@ApiOperation
(
"直播间详情--直播--班级列表 id 直播id"
)
public
ResponseVO
liveClasses
(
@RequestBody
LiveDictDO
liveDictDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveDictService
.
liveClasses
(
liveDictDO
));
}
@GetMapping
(
"liveDatas"
)
@ApiOperation
(
"直播结束后拉去保利威的直播数据并入库"
)
public
void
liveDatas
(
String
channelId
,
String
status
,
Long
timestamp
,
String
sign
,
String
sessionId
,
Long
startTime
,
Long
endTime
){
liveDictService
.
liveDatas
(
channelId
,
status
,
timestamp
,
sign
,
sessionId
,
startTime
,
endTime
);
}
}
src/main/java/com/subsidy/controller/LiveFilesController.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
controller
;
import
com.subsidy.common.ResponseData
;
import
com.subsidy.common.ResponseVO
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.model.LiveFilesDO
;
import
com.subsidy.service.LiveFilesService
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
io.swagger.annotations.Api
;
/**
* <p>
* 直播课件 前端控制器
* </p>
*
* @author Tuyp
* @since 2022-11-29
*/
@RestController
@Api
(
tags
=
"直播材料"
)
@RequestMapping
(
"/liveFiles"
)
public
class
LiveFilesController
{
@Autowired
private
LiveFilesService
liveFilesService
;
@PostMapping
(
"liveFiles"
)
@ApiOperation
(
"直播材料 id直播id"
)
public
ResponseVO
liveFiles
(
@RequestBody
LiveDictDO
liveDictDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveFilesService
.
liveFiles
(
liveDictDO
));
}
@PostMapping
(
"deleteFile"
)
@ApiOperation
(
"删除材料 id材料id"
)
public
ResponseVO
deleteFile
(
@RequestBody
LiveFilesDO
liveFilesDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveFilesService
.
deleteFile
(
liveFilesDO
));
}
@PostMapping
(
"addFile"
)
@ApiOperation
(
"新增材料 liveId fileUrl fileName fileSize fileType"
)
public
ResponseVO
addFile
(
@RequestBody
LiveFilesDO
liveFilesDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveFilesService
.
addFile
(
liveFilesDO
));
}
@PostMapping
(
"updateFile"
)
@ApiOperation
(
"编辑材料 id fileUrl fileName fileSize fileType"
)
public
ResponseVO
updateFile
(
@RequestBody
LiveFilesDO
liveFilesDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveFilesService
.
updateFile
(
liveFilesDO
));
}
}
src/main/java/com/subsidy/controller/LivePlaybackHistoryController.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.subsidy.common.ResponseData
;
import
com.subsidy.common.ResponseVO
;
import
com.subsidy.common.interceptor.TimeRequired
;
import
com.subsidy.dto.live.PlaybacksDTO
;
import
com.subsidy.dto.vod.InsertHistoryNewDTO
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.model.LivePlaybackHistoryDO
;
import
com.subsidy.model.LiveStudyHistoryDO
;
import
com.subsidy.service.LivePlaybackHistoryService
;
import
com.subsidy.util.excel.ExcelUtil
;
import
com.subsidy.vo.live.ExportClassMembersVO
;
import
com.subsidy.vo.live.ExportPlaybacksVO
;
import
com.subsidy.vo.live.PlaybacksVO
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
io.swagger.annotations.Api
;
import
java.util.List
;
/**
* <p>
* 回放播放记录表 前端控制器
* </p>
*
* @author Tuyp
* @since 2022-11-28
*/
@RestController
@Api
(
tags
=
"回放播放记录表"
)
@RequestMapping
(
"/livePlaybackHistory"
)
public
class
LivePlaybackHistoryController
{
@Autowired
private
LivePlaybackHistoryService
livePlaybackHistoryService
;
@PostMapping
(
"memberPlaybacks"
)
@ApiOperation
(
"直播课程管理--回放(学生) classId liveId pageSize pageNum userName"
)
public
ResponseVO
memberPlaybacks
(
@RequestBody
PlaybacksDTO
playbacksDTO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
livePlaybackHistoryService
.
memberPlaybacks
(
playbacksDTO
));
}
@PostMapping
(
"exportMemberPlaybacks"
)
@ApiOperation
(
"直播课程管理--回放(学生) classId liveId "
)
public
void
exportMemberPlaybacks
(
@RequestBody
PlaybacksDTO
playbacksDTO
){
List
<
ExportPlaybacksVO
>
playbacksVOIPage
=
livePlaybackHistoryService
.
exportMemberPlaybacks
(
playbacksDTO
);
ExcelUtil
.
writeExcel
(
playbacksVOIPage
,
ExportPlaybacksVO
.
class
);
}
@PostMapping
(
"playbacks"
)
@ApiOperation
(
"直播回放列表 id 直播id"
)
public
ResponseVO
playbacks
(
@RequestBody
LiveDictDO
liveDictDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
livePlaybackHistoryService
.
playbacks
(
liveDictDO
));
}
@PostMapping
(
"insertPlayRecord"
)
@ApiOperation
(
"看录播 liveVodId 录播id memberId playLength "
)
public
ResponseVO
insertPlayRecord
(
@RequestBody
LivePlaybackHistoryDO
livePlaybackHistoryDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
livePlaybackHistoryService
.
insertPlayRecord
(
livePlaybackHistoryDO
));
}
@RequestMapping
(
"insertPlayRecordNew"
)
@ApiOperation
(
"看录播 liveVodId 录播id memberId playLength"
)
@TimeRequired
public
ResponseVO
insertPlayRecordNew
(
@RequestBody
String
param
){
LivePlaybackHistoryDO
insertHistoryNewDTO
=
JSON
.
parseObject
(
param
,
LivePlaybackHistoryDO
.
class
);
return
ResponseData
.
generateCreatedResponse
(
0
,
livePlaybackHistoryService
.
insertPlayRecordNew
(
insertHistoryNewDTO
));
}
}
src/main/java/com/subsidy/controller/LiveStudyHistoryController.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
controller
;
import
com.subsidy.common.ResponseData
;
import
com.subsidy.common.ResponseVO
;
import
com.subsidy.dto.live.LiveSignDTO
;
import
com.subsidy.model.MemberDO
;
import
com.subsidy.service.LiveStudyHistoryService
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
io.swagger.annotations.Api
;
/**
* <p>
* 直播学习记录表 前端控制器
* </p>
*
* @author Tuyp
* @since 2022-12-01
*/
@RestController
@Api
(
tags
=
"直播学习记录表"
)
@RequestMapping
(
"/liveStudyHistory"
)
public
class
LiveStudyHistoryController
{
@Autowired
private
LiveStudyHistoryService
liveStudyHistoryService
;
@PostMapping
(
"liveSign"
)
@ApiOperation
(
"签名 MD5加密 id用户id"
)
public
ResponseVO
liveSign
(
@RequestBody
LiveSignDTO
liveSignDTO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveStudyHistoryService
.
liveSign
(
liveSignDTO
));
}
}
src/main/java/com/subsidy/controller/LiveVodsController.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
controller
;
import
com.subsidy.common.ResponseData
;
import
com.subsidy.common.ResponseVO
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.model.LivePlaybackHistoryDO
;
import
com.subsidy.model.LiveVodsDO
;
import
com.subsidy.service.LiveVodsService
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
io.swagger.annotations.Api
;
/**
* <p>
* 直播视频表 前端控制器
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@RestController
@Api
(
tags
=
"直播视频表"
)
@RequestMapping
(
"/liveVods"
)
public
class
LiveVodsController
{
@Autowired
private
LiveVodsService
liveVodsService
;
@PostMapping
(
"vods"
)
@ApiOperation
(
"直播--视频--查看 id 直播id"
)
public
ResponseVO
vods
(
@RequestBody
LiveDictDO
liveDictDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveVodsService
.
vods
(
liveDictDO
));
}
@PostMapping
(
"addVod"
)
@ApiOperation
(
"直播--视频--添加视频 liveId vodName vodUrl vodLength vodCode"
)
public
ResponseVO
addVod
(
@RequestBody
LiveVodsDO
liveVodsDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveVodsService
.
addVod
(
liveVodsDO
));
}
@PostMapping
(
"deleteVod"
)
@ApiOperation
(
"直播--视频--删除视频 id"
)
public
ResponseVO
deleteVod
(
@RequestBody
LiveVodsDO
liveVodsDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveVodsService
.
deleteVod
(
liveVodsDO
));
}
@PostMapping
(
"updateVod"
)
@ApiOperation
(
"直播--视频--更新视频 id liveId vodName vodUrl vodLength vodCode"
)
public
ResponseVO
updateVod
(
@RequestBody
LiveVodsDO
liveVodsDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveVodsService
.
updateVod
(
liveVodsDO
));
}
@PostMapping
(
"memberPlayback"
)
@ApiOperation
(
"查看某人某个直播回放观看情况 memberId liveId"
)
public
ResponseVO
memberPlayback
(
@RequestBody
LivePlaybackHistoryDO
livePlaybackHistoryDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
liveVodsService
.
memberPlayback
(
livePlaybackHistoryDO
));
}
}
src/main/java/com/subsidy/controller/MemberController.java
View file @
ae243f7
...
@@ -5,18 +5,17 @@ import com.subsidy.common.ResponseVO;
...
@@ -5,18 +5,17 @@ import com.subsidy.common.ResponseVO;
import
com.subsidy.common.interceptor.LoginRequired
;
import
com.subsidy.common.interceptor.LoginRequired
;
import
com.subsidy.common.interceptor.TimeRequired
;
import
com.subsidy.common.interceptor.TimeRequired
;
import
com.subsidy.dto.administer.VerifyCodeDTO
;
import
com.subsidy.dto.administer.VerifyCodeDTO
;
import
com.subsidy.dto.live.PolyvInfoDTO
;
import
com.subsidy.dto.member.*
;
import
com.subsidy.dto.member.*
;
import
com.subsidy.mapper.MemberMapper
;
import
com.subsidy.mapper.MemberMapper
;
import
com.subsidy.model.ExerciseDoneResultDO
;
import
com.subsidy.model.ExerciseDoneResultDO
;
import
com.subsidy.model.MemberDO
;
import
com.subsidy.model.MemberDO
;
import
com.subsidy.service.MemberService
;
import
com.subsidy.service.MemberService
;
import
com.subsidy.vo.live.PolyvInfoVO
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
/**
* <p>
* <p>
...
@@ -207,4 +206,18 @@ public class MemberController {
...
@@ -207,4 +206,18 @@ public class MemberController {
return
ResponseData
.
generateCreatedResponse
(
0
,
memberService
.
register
(
registerDTO
));
return
ResponseData
.
generateCreatedResponse
(
0
,
memberService
.
register
(
registerDTO
));
}
}
@PostMapping
(
"memberLives"
)
@ApiOperation
(
"获取学生的直播 id 学员id "
)
public
ResponseVO
memberLives
(
@RequestBody
MemberDO
memberDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
memberService
.
memberLives
(
memberDO
));
}
@GetMapping
(
"polyvInfo"
)
@ApiOperation
(
"保利威视回调接口获取学生用户数据"
)
public
PolyvInfoVO
polyvInfo
(
String
userid
,
String
channelId
,
String
ts
,
String
token
){
return
memberService
.
polyvInfo
(
userid
,
channelId
,
ts
,
token
);
}
}
}
src/main/java/com/subsidy/controller/VodPlayHistoryController.java
View file @
ae243f7
...
@@ -37,7 +37,7 @@ public class VodPlayHistoryController {
...
@@ -37,7 +37,7 @@ public class VodPlayHistoryController {
@PostMapping
(
"insertHistory"
)
@PostMapping
(
"insertHistory"
)
@ApiOperation
(
"记录学生看视频位置 ajax请求 classId班级id vodId 视频id memberId 成员id playLength 播放时长 playRecord 位点"
)
@ApiOperation
(
"记录学生看视频位置 ajax请求 classId班级id vodId 视频id memberId 成员id playLength 播放时长 playRecord 位点"
)
//
@LoginRequired
@LoginRequired
@TimeRequired
@TimeRequired
public
ResponseVO
insertHistory
(
@RequestBody
VodPlayHistoryDO
vodPlayHistoryDO
){
public
ResponseVO
insertHistory
(
@RequestBody
VodPlayHistoryDO
vodPlayHistoryDO
){
return
ResponseData
.
generateCreatedResponse
(
0
,
vodPlayHistoryService
.
insertHistory
(
vodPlayHistoryDO
));
return
ResponseData
.
generateCreatedResponse
(
0
,
vodPlayHistoryService
.
insertHistory
(
vodPlayHistoryDO
));
...
...
src/main/java/com/subsidy/dto/live/AddLiveDTO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
dto
.
live
;
import
com.subsidy.model.LiveDictDO
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
AddLiveDTO
extends
LiveDictDO
{
private
List
<
Long
>
ids
;
}
src/main/java/com/subsidy/dto/live/AllLivesDTO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
dto
.
live
;
import
lombok.Data
;
@Data
public
class
AllLivesDTO
{
private
Integer
pageSize
;
private
Integer
pageNum
;
private
String
liveStatus
;
private
String
liveName
;
}
src/main/java/com/subsidy/dto/live/ClassMembersDTO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
dto
.
live
;
import
lombok.Data
;
@Data
public
class
ClassMembersDTO
{
private
Integer
pageSize
;
private
Integer
pageNum
;
private
Long
liveId
;
private
Long
classId
;
private
String
userName
;
}
src/main/java/com/subsidy/dto/live/DataViewDTO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
dto
.
live
;
import
lombok.Data
;
@Data
public
class
DataViewDTO
{
private
Long
id
;
private
Long
classId
;
}
src/main/java/com/subsidy/dto/live/LiveSignDTO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
dto
.
live
;
import
lombok.Data
;
@Data
public
class
LiveSignDTO
{
private
String
channelId
;
private
String
userId
;
}
src/main/java/com/subsidy/dto/live/PlaybacksDTO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
dto
.
live
;
import
lombok.Data
;
@Data
public
class
PlaybacksDTO
{
private
Integer
pageSize
;
private
Integer
pageNum
;
private
String
userName
;
private
Long
classId
;
private
Long
liveId
;
}
src/main/java/com/subsidy/dto/live/PolyvInfoDTO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
dto
.
live
;
import
lombok.Data
;
@Data
public
class
PolyvInfoDTO
{
private
String
userid
;
private
String
channelId
;
private
String
ts
;
private
String
token
;
}
src/main/java/com/subsidy/jobs/LiveDictJob.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
jobs
;
import
com.subsidy.mapper.LiveDictMapper
;
import
org.quartz.Job
;
import
org.quartz.JobExecutionContext
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Map
;
@Component
public
class
LiveDictJob
implements
Job
{
@Autowired
private
LiveDictMapper
liveDictMapper
;
@Override
public
void
execute
(
JobExecutionContext
jobExecutionContext
)
{
Map
<
String
,
Object
>
map
=
jobExecutionContext
.
getJobDetail
().
getJobDataMap
();
Map
<
String
,
Object
>
params
=
(
Map
<
String
,
Object
>)
map
.
get
(
"params"
);
if
(
params
!=
null
)
{
liveDictMapper
.
updateStatus
((
Long
)
params
.
get
(
"liveId"
));
}
}
}
src/main/java/com/subsidy/mapper/LiveClassesMapper.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
mapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.subsidy.model.LiveClassesDO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.subsidy.vo.live.ClassLivesVO
;
import
com.subsidy.vo.live.ClassMembersVO
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
/**
* <p>
* Mapper 接口
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@Repository
public
interface
LiveClassesMapper
extends
BaseMapper
<
LiveClassesDO
>
{
//班级人员
IPage
<
ClassMembersVO
>
classMembers
(
IPage
iPage
,
Long
liveId
,
Long
classId
,
String
userName
);
//直播应到人数
Integer
liveMemberCounts
(
Long
liveId
,
Long
classId
);
//直播实到人数
Integer
liveActualCounts
(
Long
liveId
,
Long
classId
);
//找到课程下的直播
List
<
ClassLivesVO
>
classLives
(
Long
classId
);
}
src/main/java/com/subsidy/mapper/LiveCoursewaresMapper.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
mapper
;
import
com.subsidy.model.LiveCoursewaresDO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.springframework.stereotype.Repository
;
/**
* <p>
* 直播课件 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2022-11-29
*/
@Repository
public
interface
LiveCoursewaresMapper
extends
BaseMapper
<
LiveCoursewaresDO
>
{
}
src/main/java/com/subsidy/mapper/LiveDictMapper.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
mapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.subsidy.dto.live.AllLivesDTO
;
import
com.subsidy.model.ClassDictDO
;
import
com.subsidy.model.LiveDictDO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.subsidy.vo.live.AllLivesVO
;
import
com.subsidy.vo.live.LiveClassesVO
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
/**
* <p>
* Mapper 接口
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@Repository
public
interface
LiveDictMapper
extends
BaseMapper
<
LiveDictDO
>
{
/**
* 查看所有直播课
*/
IPage
<
AllLivesVO
>
allLives
(
IPage
iPage
,
String
liveName
,
String
liveStatus
);
/**
* 查看直播课的所有班级 返回课程id_className
*/
List
<
LiveClassesVO
>
liveClasses
(
Long
liveId
);
/**
* 查看直播课的所有班级 返回课程ids
*/
List
<
Long
>
liveClassesIds
(
Long
liveId
);
/**
* 讲状态改为已开始
* @param id
*/
void
updateStatus
(
Long
id
);
}
src/main/java/com/subsidy/mapper/LiveFilesMapper.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
mapper
;
import
com.subsidy.model.LiveFilesDO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.springframework.stereotype.Repository
;
/**
* <p>
* 直播课件 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2022-11-29
*/
@Repository
public
interface
LiveFilesMapper
extends
BaseMapper
<
LiveFilesDO
>
{
}
src/main/java/com/subsidy/mapper/LivePlaybackHistoryMapper.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
mapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.subsidy.model.LivePlaybackHistoryDO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.subsidy.vo.live.PlaybacksVO
;
import
org.springframework.stereotype.Repository
;
/**
* <p>
* 回放播放记录表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2022-11-28
*/
@Repository
public
interface
LivePlaybackHistoryMapper
extends
BaseMapper
<
LivePlaybackHistoryDO
>
{
IPage
<
PlaybacksVO
>
livePlaybacks
(
IPage
iPage
,
Long
classId
,
Long
liveId
,
String
userName
);
Integer
memberPlayback
(
Long
liveId
,
Long
classId
);
}
src/main/java/com/subsidy/mapper/LiveStudyHistoryMapper.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
mapper
;
import
com.subsidy.model.LiveStudyHistoryDO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.springframework.stereotype.Repository
;
/**
* <p>
* 直播学习记录表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2022-12-01
*/
@Repository
public
interface
LiveStudyHistoryMapper
extends
BaseMapper
<
LiveStudyHistoryDO
>
{
}
src/main/java/com/subsidy/mapper/LiveVodsMapper.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
mapper
;
import
com.subsidy.model.LiveVodsDO
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.subsidy.vo.live.MemberPlaybackVO
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
/**
* <p>
* 直播视频表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@Repository
public
interface
LiveVodsMapper
extends
BaseMapper
<
LiveVodsDO
>
{
List
<
MemberPlaybackVO
>
memberPlayback
(
Long
memberId
,
Long
liveId
);
}
src/main/java/com/subsidy/mapper/MemberMapper.java
View file @
ae243f7
...
@@ -8,6 +8,7 @@ import com.subsidy.model.MemberDO;
...
@@ -8,6 +8,7 @@ import com.subsidy.model.MemberDO;
import
com.subsidy.vo.administer.ManageMemberVO
;
import
com.subsidy.vo.administer.ManageMemberVO
;
import
com.subsidy.vo.administer.UserRoleVO
;
import
com.subsidy.vo.administer.UserRoleVO
;
import
com.subsidy.vo.classdict.SystemSettings
;
import
com.subsidy.vo.classdict.SystemSettings
;
import
com.subsidy.vo.live.MemberLivesVO
;
import
com.subsidy.vo.member.GetAllVO
;
import
com.subsidy.vo.member.GetAllVO
;
import
com.subsidy.vo.member.MyCoursesVO
;
import
com.subsidy.vo.member.MyCoursesVO
;
import
com.subsidy.vo.member.StudyPageVO
;
import
com.subsidy.vo.member.StudyPageVO
;
...
@@ -87,5 +88,11 @@ public interface MemberMapper extends BaseMapper<MemberDO> {
...
@@ -87,5 +88,11 @@ public interface MemberMapper extends BaseMapper<MemberDO> {
*/
*/
SystemSettings
companySettings
(
Long
memberId
);
SystemSettings
companySettings
(
Long
memberId
);
/**
* 查看某个学员可以看的直播
*/
List
<
MemberLivesVO
>
memberLives
(
Long
memberId
);
}
}
src/main/java/com/subsidy/model/LiveClassesDO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
model
;
import
com.subsidy.util.BaseModel
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
*
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@TableName
(
"live_classes"
)
public
class
LiveClassesDO
extends
BaseModel
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 直播id
*/
private
Long
liveId
;
/**
* 班级id
*/
private
Long
classId
;
}
src/main/java/com/subsidy/model/LiveCoursewaresDO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
model
;
import
com.subsidy.util.BaseModel
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 直播课件
* </p>
*
* @author Tuyp
* @since 2022-11-29
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@TableName
(
"live_coursewares"
)
public
class
LiveCoursewaresDO
extends
BaseModel
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 直播id
*/
private
Long
liveId
;
/**
* 课件地址
*/
private
String
courseware
;
/**
* 课件名称
*/
private
String
wareName
;
/**
* 课件大小
*/
private
String
wareSize
;
}
src/main/java/com/subsidy/model/LiveDictDO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
model
;
import
com.subsidy.util.BaseModel
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
*
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@TableName
(
"live_dict"
)
public
class
LiveDictDO
extends
BaseModel
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 频道号
*/
private
String
channel
;
/**
* 直播名称
*/
private
String
liveName
;
/**
* 开播时间
*/
private
String
startTime
;
/**
* 直播地址
*/
private
String
liveUrl
;
/**
* 主讲
*/
private
String
speakUrl
;
/**
* 主讲密码
*/
private
String
speakPwd
;
/**
* 助教
*/
private
String
assistantUrl
;
/**
* 助教
*/
private
String
assistantPwd
;
/**
* 回放状态
*/
private
String
playbackStatus
;
/**
* 回放开始日期
*/
private
String
playStartDate
;
/**
* 回放结束日期
*/
private
String
playEndDate
;
/**
* 直播状态
*/
private
String
liveStatus
;
}
src/main/java/com/subsidy/model/LiveFilesDO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
model
;
import
com.subsidy.util.BaseModel
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 直播课件
* </p>
*
* @author Tuyp
* @since 2022-11-29
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@TableName
(
"live_files"
)
public
class
LiveFilesDO
extends
BaseModel
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 直播id
*/
private
Long
liveId
;
/**
* 材料地址
*/
private
String
fileUrl
;
/**
* 材料名称
*/
private
String
fileName
;
/**
* 材料大小
*/
private
String
fileSize
;
/**
* 材料类型
*/
private
String
fileType
;
}
src/main/java/com/subsidy/model/LivePlaybackHistoryDO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
model
;
import
com.subsidy.util.BaseModel
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
java.time.LocalDateTime
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 回放播放记录表
* </p>
*
* @author Tuyp
* @since 2022-11-28
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@TableName
(
"live_playback_history"
)
public
class
LivePlaybackHistoryDO
extends
BaseModel
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 直播id
*/
private
Long
liveId
;
/**
* 录播视频id
*/
private
Long
liveVodId
;
/**
* 成员id
*/
private
Long
memberId
;
/**
* 播放时长
*/
private
Integer
playLength
;
/**
* 进入时间
*/
private
String
startTime
;
}
src/main/java/com/subsidy/model/LiveStudyHistoryDO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
model
;
import
com.subsidy.util.BaseModel
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
java.time.LocalDateTime
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 直播学习记录表
* </p>
*
* @author Tuyp
* @since 2022-12-01
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@TableName
(
"live_study_history"
)
public
class
LiveStudyHistoryDO
extends
BaseModel
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 直播id
*/
private
Long
liveId
;
/**
* 学员id
*/
private
Long
memberId
;
/**
* 频道号
*/
private
Long
channelId
;
/**
* 播放时长,单位秒
*/
private
Integer
playDuration
;
/**
* 停留时长,单位秒
*/
private
Integer
stayDuration
;
/**
* 流量大小,单位bytes
*/
private
Long
flowSize
;
/**
* 直播场次id
*/
private
String
sessionId
;
/**
* 使用polyv观众页的观众id
*/
private
String
param1
;
/**
* 使用polyv观众页的观众昵称
*/
private
String
param2
;
/**
* 观看日志类型,默认为live,vod:观看回放,live直播
*/
private
String
param3
;
/**
* polyv系统参数
*/
private
String
param4
;
/**
* polyv系统参数
*/
private
String
param5
;
/**
* 国家
*/
private
String
country
;
/**
* 城市
*/
private
String
city
;
/**
* ISP运营商
*/
private
String
isp
;
/**
* 播放视频页面地址
*/
private
String
referer
;
/**
* 用户设备
*/
private
String
userAgent
;
/**
* 操作系统
*/
private
String
operatingSystem
;
/**
* 浏览器
*/
private
String
browser
;
/**
* 是否为移动端
*/
private
String
isMobile
;
/**
* 查询日期,格式:yyyy-MM-dd
*/
private
String
currentDay
;
/**
* 创建日期 ,13位毫秒级时间戳
*/
private
Long
createdTime
;
/**
* 更新日期 ,13位毫秒级时间戳
*/
private
Long
lastModified
;
/**
* 0 或者不传:普通直播
1:超低延迟直播 rts (已经没有在使用)
2:PRTC直播(无延迟)
*/
private
Integer
ptype
;
/**
* 进入页面时间,13位毫秒级时间戳,非特殊说明,请使用createdTime替代
*/
private
Long
firstActiveTime
;
/**
* 退出页面时间,13位毫秒级时间戳,非特殊说明,请使用createdTime+stayDuration替代
*/
private
Long
lastActiveTime
;
/**
* 省份
*/
private
String
province
;
/**
* IP
*/
private
String
ipAddress
;
}
src/main/java/com/subsidy/model/LiveVodsDO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
model
;
import
com.subsidy.util.BaseModel
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 直播视频表
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@TableName
(
"live_vods"
)
public
class
LiveVodsDO
extends
BaseModel
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* 直播id
*/
private
Long
liveId
;
/**
* 视频名称
*/
private
String
vodName
;
/**
* 视频地址
*/
private
String
vodUrl
;
/**
* 视频编码
*/
private
String
vodCode
;
/**
* 视频时长
*/
private
Integer
vodLength
;
}
src/main/java/com/subsidy/service/LiveClassesService.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.subsidy.dto.live.ClassMembersDTO
;
import
com.subsidy.dto.live.DataViewDTO
;
import
com.subsidy.model.LiveClassesDO
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.vo.live.ClassLivesVO
;
import
com.subsidy.vo.live.ClassMembersVO
;
import
com.subsidy.vo.live.DataViewVO
;
import
com.subsidy.vo.live.ExportClassMembersVO
;
import
java.util.List
;
/**
* <p>
* 服务类
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
public
interface
LiveClassesService
extends
IService
<
LiveClassesDO
>
{
IPage
<
ClassMembersVO
>
classMembers
(
ClassMembersDTO
classMembersDTO
);
List
<
ExportClassMembersVO
>
exportClassMembers
(
ClassMembersDTO
classMembersDTO
);
DataViewVO
dataView
(
DataViewDTO
dataViewDTO
);
List
<
ClassLivesVO
>
classLives
(
LiveClassesDO
liveClassesDO
);
}
src/main/java/com/subsidy/service/LiveCoursewaresService.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
;
import
com.subsidy.model.LiveCoursewaresDO
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.subsidy.model.LiveDictDO
;
import
java.util.List
;
/**
* <p>
* 直播课件 服务类
* </p>
*
* @author Tuyp
* @since 2022-11-29
*/
public
interface
LiveCoursewaresService
extends
IService
<
LiveCoursewaresDO
>
{
List
<
LiveCoursewaresDO
>
livewares
(
LiveDictDO
liveDictDO
);
String
deleteWare
(
LiveCoursewaresDO
liveCoursewaresDO
);
String
addWare
(
LiveCoursewaresDO
liveCoursewaresDO
);
}
src/main/java/com/subsidy/service/LiveDictService.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.subsidy.dto.live.AddLiveDTO
;
import
com.subsidy.dto.live.AllLivesDTO
;
import
com.subsidy.model.LiveDictDO
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.subsidy.vo.live.AllLivesVO
;
import
com.subsidy.vo.live.GetLiveVO
;
import
com.subsidy.vo.live.LiveClassesVO
;
import
java.util.List
;
/**
* <p>
* 服务类
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
public
interface
LiveDictService
extends
IService
<
LiveDictDO
>
{
IPage
<
AllLivesVO
>
allLives
(
AllLivesDTO
allLivesDTO
);
String
deleteLive
(
LiveDictDO
liveDictDO
);
String
addLive
(
AddLiveDTO
addLiveDTO
);
String
updateLive
(
AddLiveDTO
addLiveDTO
);
GetLiveVO
getLive
(
LiveDictDO
liveDictDO
);
List
<
LiveClassesVO
>
liveClasses
(
LiveDictDO
liveDictDO
);
void
liveDatas
(
String
channelId
,
String
status
,
Long
timestamp
,
String
sign
,
String
sessionId
,
Long
startTime
,
Long
endTime
);
}
src/main/java/com/subsidy/service/LiveFilesService.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.model.LiveFilesDO
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.List
;
/**
* <p>
* 直播课件 服务类
* </p>
*
* @author Tuyp
* @since 2022-11-29
*/
public
interface
LiveFilesService
extends
IService
<
LiveFilesDO
>
{
List
<
LiveFilesDO
>
liveFiles
(
LiveDictDO
liveDictDO
);
String
deleteFile
(
LiveFilesDO
liveFilesDO
);
String
addFile
(
LiveFilesDO
liveFilesDO
);
String
updateFile
(
LiveFilesDO
liveFilesDO
);
}
src/main/java/com/subsidy/service/LivePlaybackHistoryService.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.subsidy.dto.live.PlaybacksDTO
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.model.LivePlaybackHistoryDO
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.subsidy.model.LiveVodsDO
;
import
com.subsidy.vo.live.ExportPlaybacksVO
;
import
com.subsidy.vo.live.PlaybacksVO
;
import
java.util.List
;
/**
* <p>
* 回放播放记录表 服务类
* </p>
*
* @author Tuyp
* @since 2022-11-28
*/
public
interface
LivePlaybackHistoryService
extends
IService
<
LivePlaybackHistoryDO
>
{
IPage
<
PlaybacksVO
>
memberPlaybacks
(
PlaybacksDTO
playbacksDTO
);
List
<
ExportPlaybacksVO
>
exportMemberPlaybacks
(
PlaybacksDTO
playbacksDTO
);
List
<
LiveVodsDO
>
playbacks
(
LiveDictDO
liveDictDO
);
String
insertPlayRecord
(
LivePlaybackHistoryDO
playbackHistory
);
String
insertPlayRecordNew
(
LivePlaybackHistoryDO
playbackHistory
);
}
src/main/java/com/subsidy/service/LiveStudyHistoryService.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
;
import
com.subsidy.dto.live.LiveSignDTO
;
import
com.subsidy.model.LiveStudyHistoryDO
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.subsidy.model.MemberDO
;
/**
* <p>
* 直播学习记录表 服务类
* </p>
*
* @author Tuyp
* @since 2022-12-01
*/
public
interface
LiveStudyHistoryService
extends
IService
<
LiveStudyHistoryDO
>
{
String
liveSign
(
LiveSignDTO
liveSignDTO
);
}
src/main/java/com/subsidy/service/LiveVodsService.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.model.LivePlaybackHistoryDO
;
import
com.subsidy.model.LiveVodsDO
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.subsidy.vo.live.MemberPlaybackVO
;
import
java.util.List
;
/**
* <p>
* 直播视频表 服务类
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
public
interface
LiveVodsService
extends
IService
<
LiveVodsDO
>
{
List
<
LiveVodsDO
>
vods
(
LiveDictDO
liveDictDO
);
String
addVod
(
LiveVodsDO
liveVodsDO
);
String
deleteVod
(
LiveVodsDO
liveVodsDO
);
String
updateVod
(
LiveVodsDO
liveVodsDO
);
List
<
MemberPlaybackVO
>
memberPlayback
(
LivePlaybackHistoryDO
livePlaybackHistoryDO
);
}
src/main/java/com/subsidy/service/MemberService.java
View file @
ae243f7
...
@@ -3,11 +3,14 @@ package com.subsidy.service;
...
@@ -3,11 +3,14 @@ package com.subsidy.service;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.subsidy.dto.administer.VerifyCodeDTO
;
import
com.subsidy.dto.administer.VerifyCodeDTO
;
import
com.subsidy.dto.live.PolyvInfoDTO
;
import
com.subsidy.dto.member.*
;
import
com.subsidy.dto.member.*
;
import
com.subsidy.model.ExerciseDoneResultDO
;
import
com.subsidy.model.ExerciseDoneResultDO
;
import
com.subsidy.model.FileDictDO
;
import
com.subsidy.model.FileDictDO
;
import
com.subsidy.model.MemberDO
;
import
com.subsidy.model.MemberDO
;
import
com.subsidy.vo.administer.UserRoleVO
;
import
com.subsidy.vo.administer.UserRoleVO
;
import
com.subsidy.vo.live.MemberLivesVO
;
import
com.subsidy.vo.live.PolyvInfoVO
;
import
com.subsidy.vo.member.*
;
import
com.subsidy.vo.member.*
;
import
com.subsidy.vo.paper.QueryPapersVO
;
import
com.subsidy.vo.paper.QueryPapersVO
;
...
@@ -70,4 +73,8 @@ public interface MemberService extends IService<MemberDO> {
...
@@ -70,4 +73,8 @@ public interface MemberService extends IService<MemberDO> {
QxyVO
qxy
(
MemberDO
memberDO
);
QxyVO
qxy
(
MemberDO
memberDO
);
UserRoleVO
register
(
RegisterDTO
registerDTO
);
UserRoleVO
register
(
RegisterDTO
registerDTO
);
List
<
MemberLivesVO
>
memberLives
(
MemberDO
memberDO
);
PolyvInfoVO
polyvInfo
(
String
userid
,
String
channelId
,
String
ts
,
String
token
);
}
}
src/main/java/com/subsidy/service/impl/CertClassServiceImpl.java
View file @
ae243f7
package
com
.
subsidy
.
service
.
impl
;
package
com
.
subsidy
.
service
.
impl
;
import
com.subsidy.common.constant.CourseNotification
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.subsidy.common.exception.HttpException
;
import
com.subsidy.dto.cert.AddCertClassDTO
;
import
com.subsidy.dto.cert.AddCertClassDTO
;
import
com.subsidy.dto.classDict.AddClassDTO
;
import
com.subsidy.jobs.CourseNotificationJob
;
import
com.subsidy.mapper.CertClassMemberMappingMapper
;
import
com.subsidy.model.*
;
import
com.subsidy.mapper.CertClassMapper
;
import
com.subsidy.mapper.CertClassMapper
;
import
com.subsidy.mapper.CertClassMemberMappingMapper
;
import
com.subsidy.model.CertClassDO
;
import
com.subsidy.model.CertClassMemberMappingDO
;
import
com.subsidy.service.CertClassService
;
import
com.subsidy.service.CertClassService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.subsidy.util.DateFormatUtil
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* <p>
* <p>
...
...
src/main/java/com/subsidy/service/impl/LiveClassesServiceImpl.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.subsidy.dto.live.ClassMembersDTO
;
import
com.subsidy.dto.live.DataViewDTO
;
import
com.subsidy.mapper.LivePlaybackHistoryMapper
;
import
com.subsidy.mapper.LiveStudyHistoryMapper
;
import
com.subsidy.model.LiveClassesDO
;
import
com.subsidy.mapper.LiveClassesMapper
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.model.LiveStudyHistoryDO
;
import
com.subsidy.service.LiveClassesService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.subsidy.vo.live.ClassLivesVO
;
import
com.subsidy.vo.live.ClassMembersVO
;
import
com.subsidy.vo.live.DataViewVO
;
import
com.subsidy.vo.live.ExportClassMembersVO
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
static
com
.
subsidy
.
util
.
MyStringUtils
.
changeListToString
;
/**
* <p>
* 服务实现类
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@Service
public
class
LiveClassesServiceImpl
extends
ServiceImpl
<
LiveClassesMapper
,
LiveClassesDO
>
implements
LiveClassesService
{
@Autowired
private
LiveStudyHistoryMapper
liveStudyHistoryMapper
;
@Autowired
private
LivePlaybackHistoryMapper
livePlaybackHistoryMapper
;
public
IPage
<
ClassMembersVO
>
classMembers
(
ClassMembersDTO
classMembersDTO
)
{
Page
pager
=
new
Page
(
classMembersDTO
.
getPageNum
(),
classMembersDTO
.
getPageSize
());
IPage
iPage
=
this
.
baseMapper
.
classMembers
(
pager
,
classMembersDTO
.
getLiveId
(),
classMembersDTO
.
getClassId
(),
classMembersDTO
.
getUserName
());
List
<
ClassMembersVO
>
classMembersVOS
=
iPage
.
getRecords
();
for
(
ClassMembersVO
classMembersVO
:
classMembersVOS
)
{
List
<
String
>
startTimes
=
new
ArrayList
<>();
List
<
String
>
locations
=
new
ArrayList
<>();
List
<
String
>
cities
=
new
ArrayList
<>();
List
<
String
>
ipAddress
=
new
ArrayList
<>();
List
<
String
>
terminals
=
new
ArrayList
<>();
//查看某人进入直播间的时间
List
<
LiveStudyHistoryDO
>
liveStudyHistoryDOS
=
liveStudyHistoryMapper
.
selectList
(
new
QueryWrapper
<
LiveStudyHistoryDO
>()
.
lambda
()
.
eq
(
LiveStudyHistoryDO:
:
getLiveId
,
classMembersDTO
.
getLiveId
())
.
eq
(
LiveStudyHistoryDO:
:
getMemberId
,
classMembersVO
.
getId
()));
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
for
(
LiveStudyHistoryDO
lsd
:
liveStudyHistoryDOS
)
{
String
date
=
sdf
.
format
(
new
Date
(
lsd
.
getCreatedTime
()));
//进入时间
if
(!
startTimes
.
contains
(
date
))
{
startTimes
.
add
(
date
);
}
//地区
if
(!
locations
.
contains
(
lsd
.
getProvince
()))
{
locations
.
add
(
lsd
.
getProvince
());
}
//城市
if
(!
cities
.
contains
(
lsd
.
getCity
()))
{
cities
.
add
(
lsd
.
getCity
());
}
//ip
if
(!
ipAddress
.
contains
(
lsd
.
getIpAddress
()))
{
ipAddress
.
add
(
lsd
.
getIpAddress
());
}
//终端
if
(!
terminals
.
contains
(
lsd
.
getBrowser
()))
{
terminals
.
add
(
lsd
.
getBrowser
());
}
}
classMembersVO
.
setStartTimes
(
startTimes
);
classMembersVO
.
setLocations
(
locations
);
classMembersVO
.
setCities
(
cities
);
classMembersVO
.
setIpAddress
(
ipAddress
);
classMembersVO
.
setTerminals
(
terminals
);
if
(
liveStudyHistoryDOS
.
size
()
>
0
)
{
classMembersVO
.
setSignInCounts
(
1
);
}
else
{
classMembersVO
.
setSignInCounts
(
0
);
}
}
return
iPage
;
}
public
List
<
ExportClassMembersVO
>
exportClassMembers
(
ClassMembersDTO
classMembersDTO
)
{
Page
pager
=
new
Page
(
1
,
-
1
);
IPage
iPage
=
this
.
baseMapper
.
classMembers
(
pager
,
classMembersDTO
.
getLiveId
(),
classMembersDTO
.
getClassId
(),
classMembersDTO
.
getUserName
());
List
<
ClassMembersVO
>
classMembersVOS
=
iPage
.
getRecords
();
for
(
ClassMembersVO
classMembersVO
:
classMembersVOS
)
{
ExportClassMembersVO
exportClassMembersVO
=
new
ExportClassMembersVO
();
BeanUtils
.
copyProperties
(
classMembersVO
,
exportClassMembersVO
);
List
<
String
>
startTimes
=
new
ArrayList
<>();
List
<
String
>
locations
=
new
ArrayList
<>();
List
<
String
>
cities
=
new
ArrayList
<>();
List
<
String
>
ipAddress
=
new
ArrayList
<>();
List
<
String
>
terminals
=
new
ArrayList
<>();
//查看某人进入直播间的时间
List
<
LiveStudyHistoryDO
>
liveStudyHistoryDOS
=
liveStudyHistoryMapper
.
selectList
(
new
QueryWrapper
<
LiveStudyHistoryDO
>()
.
lambda
()
.
eq
(
LiveStudyHistoryDO:
:
getLiveId
,
classMembersDTO
.
getLiveId
())
.
eq
(
LiveStudyHistoryDO:
:
getMemberId
,
classMembersVO
.
getId
()));
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
for
(
LiveStudyHistoryDO
lsd
:
liveStudyHistoryDOS
)
{
String
date
=
sdf
.
format
(
new
Date
(
lsd
.
getCreatedTime
()));
//进入时间
if
(!
startTimes
.
contains
(
date
))
{
startTimes
.
add
(
date
);
}
//地区
if
(!
locations
.
contains
(
lsd
.
getProvince
()))
{
startTimes
.
add
(
lsd
.
getProvince
());
}
//城市
if
(!
cities
.
contains
(
lsd
.
getCity
()))
{
cities
.
add
(
lsd
.
getCity
());
}
//ip
if
(!
ipAddress
.
contains
(
lsd
.
getIpAddress
()))
{
ipAddress
.
add
(
lsd
.
getIpAddress
());
}
//终端
if
(
terminals
.
contains
(
lsd
.
getBrowser
()))
{
terminals
.
add
(
lsd
.
getBrowser
());
}
}
exportClassMembersVO
.
setStartTimes
(
changeListToString
(
startTimes
));
exportClassMembersVO
.
setLocations
(
changeListToString
(
locations
));
exportClassMembersVO
.
setCities
(
changeListToString
(
cities
));
exportClassMembersVO
.
setIpAddress
(
changeListToString
(
ipAddress
));
exportClassMembersVO
.
setTerminals
(
changeListToString
(
terminals
));
if
(
liveStudyHistoryDOS
.
size
()
>
0
)
{
classMembersVO
.
setSignInCounts
(
1
);
}
else
{
classMembersVO
.
setSignInCounts
(
0
);
}
}
return
iPage
.
getRecords
();
}
public
DataViewVO
dataView
(
DataViewDTO
dataViewDTO
)
{
DataViewVO
dataViewVO
=
new
DataViewVO
();
//直播应到人数
dataViewVO
.
setTotalLive
(
this
.
baseMapper
.
liveMemberCounts
(
dataViewDTO
.
getId
(),
dataViewDTO
.
getClassId
()));
//直播实际人数
dataViewVO
.
setActualLive
(
this
.
baseMapper
.
liveActualCounts
(
dataViewDTO
.
getId
(),
dataViewDTO
.
getClassId
()));
//回放应看人数
dataViewVO
.
setTotalPlayback
(
dataViewVO
.
getTotalLive
());
//实际回看人数
dataViewVO
.
setActualPlayback
(
livePlaybackHistoryMapper
.
memberPlayback
(
dataViewDTO
.
getId
(),
dataViewDTO
.
getClassId
()));
return
dataViewVO
;
}
public
List
<
ClassLivesVO
>
classLives
(
LiveClassesDO
liveClassesDO
)
{
return
this
.
baseMapper
.
classLives
(
liveClassesDO
.
getClassId
());
}
}
src/main/java/com/subsidy/service/impl/LiveCoursewaresServiceImpl.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.subsidy.model.LiveCoursewaresDO
;
import
com.subsidy.mapper.LiveCoursewaresMapper
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.service.LiveCoursewaresService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.subsidy.util.ConstantUtils
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* <p>
* 直播课件 服务实现类
* </p>
*
* @author Tuyp
* @since 2022-11-29
*/
@Service
public
class
LiveCoursewaresServiceImpl
extends
ServiceImpl
<
LiveCoursewaresMapper
,
LiveCoursewaresDO
>
implements
LiveCoursewaresService
{
public
List
<
LiveCoursewaresDO
>
livewares
(
LiveDictDO
liveDictDO
)
{
return
this
.
baseMapper
.
selectList
(
new
QueryWrapper
<
LiveCoursewaresDO
>()
.
lambda
()
.
eq
(
LiveCoursewaresDO:
:
getLiveId
,
liveDictDO
.
getId
()));
}
public
String
deleteWare
(
LiveCoursewaresDO
liveCoursewaresDO
)
{
this
.
baseMapper
.
deleteById
(
liveCoursewaresDO
.
getId
());
return
ConstantUtils
.
DELETE_SUCCESS
;
}
public
String
addWare
(
LiveCoursewaresDO
liveCoursewaresDO
)
{
this
.
baseMapper
.
insert
(
liveCoursewaresDO
);
return
ConstantUtils
.
ADD_SUCCESS
;
}
}
src/main/java/com/subsidy/service/impl/LiveDictServiceImpl.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.subsidy.common.configure.PolyvConfig
;
import
com.subsidy.dto.live.AddLiveDTO
;
import
com.subsidy.dto.live.AllLivesDTO
;
import
com.subsidy.jobs.CourseNotificationJob
;
import
com.subsidy.jobs.LiveDictJob
;
import
com.subsidy.mapper.LiveClassesMapper
;
import
com.subsidy.mapper.LiveStudyHistoryMapper
;
import
com.subsidy.model.LiveClassesDO
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.mapper.LiveDictMapper
;
import
com.subsidy.model.LiveStudyHistoryDO
;
import
com.subsidy.model.MemberDO
;
import
com.subsidy.service.LiveDictService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.subsidy.util.*
;
import
com.subsidy.vo.live.*
;
import
net.polyv.common.v1.constant.Constant
;
import
net.polyv.live.v1.util.LiveSignUtil
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
/**
* <p>
* 服务实现类
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@Service
public
class
LiveDictServiceImpl
extends
ServiceImpl
<
LiveDictMapper
,
LiveDictDO
>
implements
LiveDictService
{
@Autowired
private
LiveClassesMapper
liveClassesMapper
;
@Autowired
private
PolyvConfig
polyvConfig
;
@Autowired
private
LiveStudyHistoryMapper
liveStudyHistoryMapper
;
@Autowired
private
QuartzUtil
quartzUtil
;
public
IPage
<
AllLivesVO
>
allLives
(
AllLivesDTO
allLivesDTO
)
{
Page
pager
=
new
Page
(
allLivesDTO
.
getPageNum
(),
allLivesDTO
.
getPageSize
());
IPage
page
=
this
.
baseMapper
.
allLives
(
pager
,
allLivesDTO
.
getLiveName
(),
allLivesDTO
.
getLiveStatus
());
List
<
AllLivesVO
>
allLivesVOS
=
page
.
getRecords
();
for
(
AllLivesVO
allLivesVO
:
allLivesVOS
)
{
//查看直播班级
List
<
LiveClassesVO
>
classesVOS
=
this
.
baseMapper
.
liveClasses
(
allLivesVO
.
getId
());
allLivesVO
.
setClassDictDOS
(
classesVOS
);
}
return
page
;
}
public
String
deleteLive
(
LiveDictDO
liveDictDO
)
{
this
.
baseMapper
.
deleteById
(
liveDictDO
.
getId
());
return
ConstantUtils
.
DELETE_SUCCESS
;
}
@Transactional
public
String
addLive
(
AddLiveDTO
addLiveDTO
)
{
LiveDictDO
liveDictDO
=
new
LiveDictDO
();
BeanUtils
.
copyProperties
(
addLiveDTO
,
liveDictDO
);
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
try
{
if
(
new
Date
().
before
(
dateFormat
.
parse
(
liveDictDO
.
getStartTime
()))){
liveDictDO
.
setLiveStatus
(
"即将开始"
);
}
else
{
liveDictDO
.
setLiveStatus
(
"已开始"
);
}
}
catch
(
Exception
ex
){
ex
.
printStackTrace
();
}
liveDictDO
.
setPlaybackStatus
(
"准备中"
);
this
.
baseMapper
.
insert
(
liveDictDO
);
List
<
Long
>
ids
=
addLiveDTO
.
getIds
();
for
(
Long
id
:
ids
)
{
LiveClassesDO
liveClassesDO
=
new
LiveClassesDO
();
liveClassesDO
.
setClassId
(
id
);
liveClassesDO
.
setLiveId
(
liveDictDO
.
getId
());
liveClassesMapper
.
insert
(
liveClassesDO
);
}
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"liveId"
,
liveDictDO
.
getId
());
String
name
=
liveDictDO
.
getLiveName
()+
liveDictDO
.
getStartTime
();
quartzUtil
.
addSimpleJob
(
LiveDictJob
.
class
,
DateFormatUtil
.
parse
(
liveDictDO
.
getStartTime
(),
"yyyy-MM-dd HH:mm:ss"
)
,
params
,
name
,
"LiveDictJob"
);
return
ConstantUtils
.
ADD_SUCCESS
;
}
@Transactional
public
String
updateLive
(
AddLiveDTO
addLiveDTO
)
{
LiveDictDO
liveDictDO
=
new
LiveDictDO
();
BeanUtils
.
copyProperties
(
addLiveDTO
,
liveDictDO
);
this
.
baseMapper
.
updateById
(
liveDictDO
);
// Map<String, Object> params = new HashMap<>();
// params.put("liveId", liveDictDO.getId());
// String name = liveDictDO.getLiveName()+liveDictDO.getStartTime();
// quartzUtil.deleteJob(name,"LiveDictJob");
// quartzUtil.addSimpleJob(LiveDictJob.class, DateFormatUtil.parse(liveDictDO.getStartTime(), "yyyy-MM-dd HH:mm:ss") , params, name, "LiveDictJob");
List
<
Long
>
ids
=
addLiveDTO
.
getIds
();
if
(
null
!=
ids
)
{
//找到该测评已有的学生
List
<
Long
>
oldIds
=
this
.
baseMapper
.
liveClassesIds
(
addLiveDTO
.
getId
());
List
<
Long
>
newIds
=
addLiveDTO
.
getIds
();
List
<
Long
>
newStudentIds2
=
new
ArrayList
<>();
for
(
Long
lg
:
newIds
)
{
newStudentIds2
.
add
(
lg
);
}
newIds
.
removeAll
(
oldIds
);
//新增的人在newStudentIds里
if
(
newIds
.
size
()
>
0
)
{
for
(
Long
lg
:
newIds
)
{
LiveClassesDO
liveClassesDO
=
new
LiveClassesDO
();
liveClassesDO
.
setLiveId
(
addLiveDTO
.
getId
());
liveClassesDO
.
setClassId
(
lg
);
liveClassesMapper
.
insert
(
liveClassesDO
);
}
}
oldIds
.
removeAll
(
newStudentIds2
);
//以前的人要删掉的
if
(
oldIds
.
size
()
>
0
)
{
liveClassesMapper
.
delete
(
new
QueryWrapper
<
LiveClassesDO
>()
.
lambda
()
.
in
(
LiveClassesDO:
:
getClassId
,
oldIds
));
}
}
return
ConstantUtils
.
SUCCESS_UPDATE
;
}
public
GetLiveVO
getLive
(
LiveDictDO
liveDictDO
)
{
GetLiveVO
getLiveVO
=
new
GetLiveVO
();
LiveDictDO
liveDictDO1
=
this
.
baseMapper
.
selectById
(
liveDictDO
.
getId
());
BeanUtils
.
copyProperties
(
liveDictDO1
,
getLiveVO
);
List
<
LiveClassesVO
>
liveClassesVOS
=
this
.
baseMapper
.
liveClasses
(
liveDictDO
.
getId
());
getLiveVO
.
setLiveClassesVOS
(
liveClassesVOS
);
return
getLiveVO
;
}
public
List
<
LiveClassesVO
>
liveClasses
(
LiveDictDO
liveDictDO
)
{
return
this
.
baseMapper
.
liveClasses
(
liveDictDO
.
getId
());
}
public
void
liveDatas
(
String
channelId
,
String
status
,
Long
timestamp
,
String
sign
,
String
sessionId
,
Long
startTime
,
Long
endTime
)
{
try
{
//通过频道id获取直播id
LiveDictDO
liveDictDO
=
this
.
baseMapper
.
selectOne
(
new
QueryWrapper
<
LiveDictDO
>()
.
lambda
()
.
eq
(
LiveDictDO:
:
getChannel
,
channelId
));
this
.
baseMapper
.
updateById
(
liveDictDO
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
/**
* 从保利威拉去学生学习数据
* https://help.polyv.net/index.html#/live/api/channel/viewdata/viewlog_2
*/
//公共参数,填写自己的实际参数
String
appId
=
polyvConfig
.
getAppId
();
String
appSecret
=
polyvConfig
.
getAppSecret
();
String
userId
=
polyvConfig
.
getUserId
();
//业务参数
String
url
=
String
.
format
(
"http://api.polyv.net/live/v1/statistics/%s/viewlog"
,
channelId
);
String
currentDay
=
sdf
.
format
(
new
Date
());
//http 调用逻辑
Map
<
String
,
String
>
requestMap
=
new
HashMap
<>();
requestMap
.
put
(
"appId"
,
appId
);
requestMap
.
put
(
"timestamp"
,
String
.
valueOf
(
System
.
currentTimeMillis
()));
requestMap
.
put
(
"currentDay"
,
currentDay
);
requestMap
.
put
(
"userId"
,
userId
);
requestMap
.
put
(
"sign"
,
LiveSignUtil
.
getSign
(
requestMap
,
appSecret
));
String
response
=
HttpUtil
.
get
(
url
,
requestMap
);
/** 返回数据
{"status":"success","result":[{"playId":"1669974158157X1494877","userId":"b8f2d3bfdc","channelId":3616264,"playDuration":79,"stayDuration":80,"flowSize":0,"sessionId":"gfyfflcgvh","param1":"ovtl9tx1wD8NSfCcBw0Xa5u4FbJM","param2":"尘渡","param3":"live","param4":"","param5":"","ipAddress":"222.65.23.119","country":"中国","province":"上海","city":"上海","isp":"电信","referer":"https://live.polyv.cn/watch/3616264","userAgent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x6308001f)","operatingSystem":"Windows 7","browser":"微信","isMobile":"N","currentDay":"2022-12-02","createdTime":1669974238000,"lastModified":1669974243000,"ptype":0,"firstActiveTime":null,"lastActiveTime":null},{"playId":"1669974139673X1560764","userId":"b8f2d3bfdc","channelId":3616264,"playDuration":9,"stayDuration":10,"flowSize":0,"sessionId":"gfyfflcgvh","param1":"ovtl9tx1wD8NSfCcBw0Xa5u4FbJM","param2":"尘渡","param3":"live","param4":"","param5":"","ipAddress":"222.65.23.119","country":"中国","province":"上海","city":"上海","isp":"电信","referer":"https://live.polyv.cn/watch/3616264","userAgent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x6308001f)","operatingSystem":"Windows 7","browser":"微信","isMobile":"N","currentDay":"2022-12-02","createdTime":1669974150000,"lastModified":1669974243000,"ptype":0,"firstActiveTime":null,"lastActiveTime":null},{"playId":"1669974062075X1049727","userId":"b8f2d3bfdc","channelId":3616264,"playDuration":69,"stayDuration":70,"flowSize":0,"sessionId":"gfyfflcgvh","param1":"ovtl9tx1wD8NSfCcBw0Xa5u4FbJM","param2":"尘渡","param3":"live","param4":"","param5":"","ipAddress":"222.65.23.119","country":"中国","province":"上海","city":"上海","isp":"电信","referer":"https://live.polyv.cn/watch/3616264","userAgent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x6308001f)","operatingSystem":"Windows 7","browser":"微信","isMobile":"N","currentDay":"2022-12-02","createdTime":1669974132000,"lastModified":1669974237000,"ptype":0,"firstActiveTime":null,"lastActiveTime":null},{"playId":"1669973936804X1388850","userId":"b8f2d3bfdc","channelId":3616264,"playDuration":290,"stayDuration":292,"flowSize":0,"sessionId":"gfyfflcgvh","param1":"ovtl9txtArOJn17h_xynSpuoKFYA","param2":"凉白开","param3":"live","param4":"","param5":"","ipAddress":"222.65.23.119","country":"中国","province":"上海","city":"上海","isp":"电信","referer":"https://live.polyv.cn/watch/3616264","userAgent":"Mozilla/5.0 (Linux; Android 12; 22011211C Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/4343 MMWEBSDK/20221012 Mobile Safari/537.36 MMWEBID/9734 MicroMessenger/8.0.30.2260(0x28001E55) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64","operatingSystem":"Android 1.x","browser":"微信","isMobile":"Y","currentDay":"2022-12-02","createdTime":1669974059000,"lastModified":1669974243000,"ptype":0,"firstActiveTime":1669973946000,"lastActiveTime":1669973996000}]}
*/
BackData
backData
=
JSON
.
parseObject
(
response
,
BackData
.
class
);
List
<
Result
>
results
=
backData
.
getResult
();
if
(
results
.
size
()>
0
){
//判断当前sessionId以前是否有存取过
int
count
=
liveStudyHistoryMapper
.
selectCount
(
new
QueryWrapper
<
LiveStudyHistoryDO
>()
.
lambda
()
.
eq
(
LiveStudyHistoryDO:
:
getSessionId
,
results
.
get
(
0
).
getSessionId
()));
if
(
count
==
0
){
// 这次直播的数据没有写过
for
(
Result
result
:
results
)
{
LiveStudyHistoryDO
liveStudyHistoryDO
=
new
LiveStudyHistoryDO
();
BeanUtils
.
copyProperties
(
result
,
liveStudyHistoryDO
);
liveStudyHistoryDO
.
setMemberId
(
Long
.
valueOf
(
result
.
getParam1
()));
liveStudyHistoryDO
.
setChannelId
(
Long
.
valueOf
(
result
.
getChannelId
()));
liveStudyHistoryDO
.
setLiveId
(
liveDictDO
.
getId
());
liveStudyHistoryMapper
.
insert
(
liveStudyHistoryDO
);
}
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
src/main/java/com/subsidy/service/impl/LiveFilesServiceImpl.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.model.LiveFilesDO
;
import
com.subsidy.mapper.LiveFilesMapper
;
import
com.subsidy.service.LiveFilesService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.subsidy.util.ConstantUtils
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* <p>
* 直播课件 服务实现类
* </p>
*
* @author Tuyp
* @since 2022-11-29
*/
@Service
public
class
LiveFilesServiceImpl
extends
ServiceImpl
<
LiveFilesMapper
,
LiveFilesDO
>
implements
LiveFilesService
{
public
List
<
LiveFilesDO
>
liveFiles
(
LiveDictDO
liveDictDO
)
{
return
this
.
baseMapper
.
selectList
(
new
QueryWrapper
<
LiveFilesDO
>()
.
lambda
()
.
eq
(
LiveFilesDO:
:
getLiveId
,
liveDictDO
.
getId
()));
}
public
String
deleteFile
(
LiveFilesDO
liveFilesDO
)
{
this
.
baseMapper
.
deleteById
(
liveFilesDO
.
getId
());
return
ConstantUtils
.
DELETE_SUCCESS
;
}
public
String
addFile
(
LiveFilesDO
liveFilesDO
)
{
this
.
baseMapper
.
insert
(
liveFilesDO
);
return
ConstantUtils
.
ADD_SUCCESS
;
}
public
String
updateFile
(
LiveFilesDO
liveFilesDO
)
{
this
.
baseMapper
.
updateById
(
liveFilesDO
);
return
ConstantUtils
.
SUCCESS_UPDATE
;
}
}
src/main/java/com/subsidy/service/impl/LivePlaybackHistoryServiceImpl.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.subsidy.common.exception.HttpException
;
import
com.subsidy.dto.live.PlaybacksDTO
;
import
com.subsidy.mapper.LiveStudyHistoryMapper
;
import
com.subsidy.mapper.LiveVodsMapper
;
import
com.subsidy.model.*
;
import
com.subsidy.mapper.LivePlaybackHistoryMapper
;
import
com.subsidy.service.LivePlaybackHistoryService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.subsidy.util.ConstantUtils
;
import
com.subsidy.vo.live.ExportPlaybacksVO
;
import
com.subsidy.vo.live.PlaybacksVO
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
static
com
.
subsidy
.
util
.
MyStringUtils
.
changeListToString
;
/**
* <p>
* 回放播放记录表 服务实现类
* </p>
*
* @author Tuyp
* @since 2022-11-28
*/
@Service
public
class
LivePlaybackHistoryServiceImpl
extends
ServiceImpl
<
LivePlaybackHistoryMapper
,
LivePlaybackHistoryDO
>
implements
LivePlaybackHistoryService
{
@Autowired
private
LiveStudyHistoryMapper
liveStudyHistoryMapper
;
@Autowired
private
LiveVodsMapper
liveVodsMapper
;
public
IPage
<
PlaybacksVO
>
memberPlaybacks
(
PlaybacksDTO
playbacksDTO
)
{
Page
pager
=
new
Page
(
playbacksDTO
.
getPageNum
(),
playbacksDTO
.
getPageSize
());
IPage
iPage
=
this
.
baseMapper
.
livePlaybacks
(
pager
,
playbacksDTO
.
getClassId
(),
playbacksDTO
.
getLiveId
(),
playbacksDTO
.
getUserName
());
List
<
PlaybacksVO
>
playbacksVOS
=
iPage
.
getRecords
();
for
(
PlaybacksVO
pv
:
playbacksVOS
)
{
List
<
String
>
startTimes
=
new
ArrayList
<>();
//查看某人进入直播间的时间
List
<
LiveStudyHistoryDO
>
liveStudyHistoryDOS
=
liveStudyHistoryMapper
.
selectList
(
new
QueryWrapper
<
LiveStudyHistoryDO
>()
.
lambda
()
.
eq
(
LiveStudyHistoryDO:
:
getLiveId
,
playbacksDTO
.
getLiveId
())
.
eq
(
LiveStudyHistoryDO:
:
getMemberId
,
pv
.
getId
()));
//直播次数
if
(
liveStudyHistoryDOS
.
size
()
>
0
)
{
pv
.
setSignInCounts
(
1
);
}
else
{
pv
.
setSignInCounts
(
0
);
}
//查看某人回放次数
List
<
LivePlaybackHistoryDO
>
livePlaybackHistoryDOS
=
this
.
baseMapper
.
selectList
(
new
QueryWrapper
<
LivePlaybackHistoryDO
>()
.
lambda
()
.
eq
(
LivePlaybackHistoryDO:
:
getMemberId
,
pv
.
getId
())
.
eq
(
LivePlaybackHistoryDO:
:
getLiveId
,
playbacksDTO
.
getLiveId
()));
//回放签到
if
(
livePlaybackHistoryDOS
.
size
()
>
0
)
{
pv
.
setPlaybackCounts
(
1
);
}
else
{
pv
.
setPlaybackCounts
(
0
);
}
//进入时间
for
(
LivePlaybackHistoryDO
livePlaybackHistoryDO
:
livePlaybackHistoryDOS
)
{
if
(!
startTimes
.
contains
(
livePlaybackHistoryDO
.
getStartTime
()))
{
startTimes
.
add
(
livePlaybackHistoryDO
.
getStartTime
());
}
}
pv
.
setStartTimes
(
startTimes
);
}
return
iPage
;
}
public
List
<
ExportPlaybacksVO
>
exportMemberPlaybacks
(
PlaybacksDTO
playbacksDTO
)
{
Page
pager
=
new
Page
(
1
,-
1
);
IPage
iPage
=
this
.
baseMapper
.
livePlaybacks
(
pager
,
playbacksDTO
.
getClassId
(),
playbacksDTO
.
getLiveId
(),
playbacksDTO
.
getUserName
());
List
<
PlaybacksVO
>
playbacksVOS
=
iPage
.
getRecords
();
List
<
ExportPlaybacksVO
>
exportPlaybacksVOS
=
new
ArrayList
<>();
for
(
PlaybacksVO
pv
:
playbacksVOS
)
{
ExportPlaybacksVO
exportPlaybacksVO
=
new
ExportPlaybacksVO
();
BeanUtils
.
copyProperties
(
pv
,
exportPlaybacksVO
);
List
<
String
>
startTimes
=
new
ArrayList
<>();
//查看某人进入直播间的时间
List
<
LiveStudyHistoryDO
>
liveStudyHistoryDOS
=
liveStudyHistoryMapper
.
selectList
(
new
QueryWrapper
<
LiveStudyHistoryDO
>()
.
lambda
()
.
eq
(
LiveStudyHistoryDO:
:
getLiveId
,
playbacksDTO
.
getLiveId
())
.
eq
(
LiveStudyHistoryDO:
:
getMemberId
,
pv
.
getId
()));
//直播次数
if
(
liveStudyHistoryDOS
.
size
()>
0
){
exportPlaybacksVO
.
setSignInCounts
(
1
);
}
else
{
exportPlaybacksVO
.
setSignInCounts
(
0
);
}
//查看某人回放次数
List
<
LivePlaybackHistoryDO
>
livePlaybackHistoryDOS
=
this
.
baseMapper
.
selectList
(
new
QueryWrapper
<
LivePlaybackHistoryDO
>()
.
lambda
()
.
eq
(
LivePlaybackHistoryDO:
:
getMemberId
,
pv
.
getId
())
.
eq
(
LivePlaybackHistoryDO:
:
getLiveId
,
playbacksDTO
.
getLiveId
()));
//回放签到
if
(
livePlaybackHistoryDOS
.
size
()
>
0
)
{
pv
.
setPlaybackCounts
(
1
);
}
else
{
pv
.
setPlaybackCounts
(
0
);
}
//进入时间
for
(
LivePlaybackHistoryDO
livePlaybackHistoryDO
:
livePlaybackHistoryDOS
)
{
if
(!
startTimes
.
contains
(
livePlaybackHistoryDO
.
getStartTime
()))
{
startTimes
.
add
(
livePlaybackHistoryDO
.
getStartTime
());
}
}
exportPlaybacksVO
.
setStartTimes
(
changeListToString
(
startTimes
));
exportPlaybacksVOS
.
add
(
exportPlaybacksVO
);
}
return
iPage
.
getRecords
();
}
public
List
<
LiveVodsDO
>
playbacks
(
LiveDictDO
liveDictDO
)
{
return
liveVodsMapper
.
selectList
(
new
QueryWrapper
<
LiveVodsDO
>()
.
lambda
()
.
eq
(
LiveVodsDO:
:
getLiveId
,
liveDictDO
.
getId
()));
}
public
String
insertPlayRecord
(
LivePlaybackHistoryDO
playbackHistory
)
{
LiveVodsDO
liveVodsDO
=
liveVodsMapper
.
selectById
(
playbackHistory
.
getLiveVodId
());
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
if
(
playbackHistory
.
getPlayLength
()
>
5
)
{
playbackHistory
.
setLiveId
(
liveVodsDO
.
getLiveId
());
Date
date
=
new
Date
(
System
.
currentTimeMillis
()
-
playbackHistory
.
getPlayLength
()*
1000
);
playbackHistory
.
setStartTime
(
simpleDateFormat
.
format
(
date
));
this
.
baseMapper
.
insert
(
playbackHistory
);
}
return
ConstantUtils
.
ADD_SUCCESS
;
}
public
String
insertPlayRecordNew
(
LivePlaybackHistoryDO
playbackHistory
)
{
LiveVodsDO
liveVodsDO
=
liveVodsMapper
.
selectById
(
playbackHistory
.
getLiveVodId
());
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
if
(
playbackHistory
.
getPlayLength
()
>
5
)
{
playbackHistory
.
setLiveId
(
liveVodsDO
.
getLiveId
());
Date
date
=
new
Date
(
System
.
currentTimeMillis
()
-
playbackHistory
.
getPlayLength
()*
1000
);
playbackHistory
.
setStartTime
(
simpleDateFormat
.
format
(
date
));
this
.
baseMapper
.
insert
(
playbackHistory
);
}
return
ConstantUtils
.
ADD_SUCCESS
;
}
}
src/main/java/com/subsidy/service/impl/LiveStudyHistoryServiceImpl.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
.
impl
;
import
com.subsidy.common.configure.PolyvConfig
;
import
com.subsidy.dto.live.LiveSignDTO
;
import
com.subsidy.model.LiveStudyHistoryDO
;
import
com.subsidy.mapper.LiveStudyHistoryMapper
;
import
com.subsidy.model.MemberDO
;
import
com.subsidy.service.LiveStudyHistoryService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.subsidy.util.ConstantUtils
;
import
com.subsidy.util.PolyvUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 直播学习记录表 服务实现类
* </p>
*
* @author Tuyp
* @since 2022-12-01
*/
@Service
public
class
LiveStudyHistoryServiceImpl
extends
ServiceImpl
<
LiveStudyHistoryMapper
,
LiveStudyHistoryDO
>
implements
LiveStudyHistoryService
{
public
String
liveSign
(
LiveSignDTO
liveSignDTO
){
return
PolyvUtils
.
liveSign
(
liveSignDTO
.
getUserId
(),
liveSignDTO
.
getChannelId
());
}
}
src/main/java/com/subsidy/service/impl/LiveVodsServiceImpl.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.subsidy.model.LiveDictDO
;
import
com.subsidy.model.LivePlaybackHistoryDO
;
import
com.subsidy.model.LiveVodsDO
;
import
com.subsidy.mapper.LiveVodsMapper
;
import
com.subsidy.service.LiveVodsService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.subsidy.util.ConstantUtils
;
import
com.subsidy.vo.live.MemberPlaybackVO
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* <p>
* 直播视频表 服务实现类
* </p>
*
* @author Tuyp
* @since 2022-11-24
*/
@Service
public
class
LiveVodsServiceImpl
extends
ServiceImpl
<
LiveVodsMapper
,
LiveVodsDO
>
implements
LiveVodsService
{
public
List
<
LiveVodsDO
>
vods
(
LiveDictDO
liveDictDO
)
{
List
<
LiveVodsDO
>
liveVodsDOS
=
this
.
baseMapper
.
selectList
(
new
QueryWrapper
<
LiveVodsDO
>()
.
lambda
()
.
eq
(
LiveVodsDO:
:
getLiveId
,
liveDictDO
.
getId
()));
return
liveVodsDOS
;
}
public
String
addVod
(
LiveVodsDO
liveVodsDO
)
{
this
.
baseMapper
.
insert
(
liveVodsDO
);
return
ConstantUtils
.
ADD_SUCCESS
;
}
public
String
deleteVod
(
LiveVodsDO
liveVodsDO
)
{
this
.
baseMapper
.
deleteById
(
liveVodsDO
.
getId
());
return
ConstantUtils
.
DELETE_SUCCESS
;
}
public
String
updateVod
(
LiveVodsDO
liveVodsDO
)
{
this
.
baseMapper
.
updateById
(
liveVodsDO
);
return
ConstantUtils
.
SUCCESS_UPDATE
;
}
public
List
<
MemberPlaybackVO
>
memberPlayback
(
LivePlaybackHistoryDO
livePlaybackHistoryDO
)
{
return
this
.
baseMapper
.
memberPlayback
(
livePlaybackHistoryDO
.
getMemberId
(),
livePlaybackHistoryDO
.
getLiveId
());
}
}
src/main/java/com/subsidy/service/impl/MemberServiceImpl.java
View file @
ae243f7
...
@@ -8,12 +8,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
...
@@ -8,12 +8,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import
com.subsidy.common.configure.QXueYouConfig
;
import
com.subsidy.common.configure.QXueYouConfig
;
import
com.subsidy.common.exception.HttpException
;
import
com.subsidy.common.exception.HttpException
;
import
com.subsidy.dto.administer.VerifyCodeDTO
;
import
com.subsidy.dto.administer.VerifyCodeDTO
;
import
com.subsidy.dto.live.PolyvInfoDTO
;
import
com.subsidy.dto.member.*
;
import
com.subsidy.dto.member.*
;
import
com.subsidy.mapper.*
;
import
com.subsidy.mapper.*
;
import
com.subsidy.model.*
;
import
com.subsidy.model.*
;
import
com.subsidy.service.MemberService
;
import
com.subsidy.service.MemberService
;
import
com.subsidy.util.*
;
import
com.subsidy.util.*
;
import
com.subsidy.vo.administer.UserRoleVO
;
import
com.subsidy.vo.administer.UserRoleVO
;
import
com.subsidy.vo.live.MemberLivesVO
;
import
com.subsidy.vo.live.PolyvInfoVO
;
import
com.subsidy.vo.member.*
;
import
com.subsidy.vo.member.*
;
import
com.subsidy.vo.paper.QueryPapersVO
;
import
com.subsidy.vo.paper.QueryPapersVO
;
import
net.sourceforge.pinyin4j.PinyinHelper
;
import
net.sourceforge.pinyin4j.PinyinHelper
;
...
@@ -34,9 +37,11 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -34,9 +37,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.text.SimpleDateFormat
;
import
java.time.Duration
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
java.util.UUID
;
import
java.util.UUID
;
...
@@ -113,6 +118,9 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, MemberDO> imple
...
@@ -113,6 +118,9 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, MemberDO> imple
@Autowired
@Autowired
private
QXueYouConfig
qXueYouConfig
;
private
QXueYouConfig
qXueYouConfig
;
@Autowired
private
LiveDictMapper
liveDictMapper
;
public
IPage
<
GetAllVO
>
getAll
(
GetAllDTO
getAllDTO
)
{
public
IPage
<
GetAllVO
>
getAll
(
GetAllDTO
getAllDTO
)
{
Page
pager
=
new
Page
(
getAllDTO
.
getPageNum
(),
getAllDTO
.
getPageSize
());
Page
pager
=
new
Page
(
getAllDTO
.
getPageNum
(),
getAllDTO
.
getPageSize
());
...
@@ -1106,4 +1114,28 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, MemberDO> imple
...
@@ -1106,4 +1114,28 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, MemberDO> imple
userRoleVO
.
setToken
(
token
);
userRoleVO
.
setToken
(
token
);
return
userRoleVO
;
return
userRoleVO
;
}
}
public
List
<
MemberLivesVO
>
memberLives
(
MemberDO
memberDO
){
List
<
MemberLivesVO
>
memberLivesVOS
=
this
.
baseMapper
.
memberLives
(
memberDO
.
getId
());
//工具类生成某个学生的直播地址
for
(
MemberLivesVO
mlv
:
memberLivesVOS
){
mlv
.
setLiveUrl
(
PolyvUtils
.
liveSign
(
memberDO
.
getId
().
toString
(),
mlv
.
getChannel
()));
}
return
memberLivesVOS
;
}
public
PolyvInfoVO
polyvInfo
(
String
userid
,
String
channelId
,
String
ts
,
String
token
){
PolyvInfoVO
polyvInfoVO
=
new
PolyvInfoVO
();
MemberDO
memberDO
=
this
.
baseMapper
.
selectById
(
userid
);
polyvInfoVO
.
setStatus
(
1
);
polyvInfoVO
.
setUserid
(
memberDO
.
getId
().
toString
());
polyvInfoVO
.
setNickname
(
memberDO
.
getUserName
());
polyvInfoVO
.
setAvatar
(
"https://ykhl-bigger.oss-cn-beijing.aliyuncs.com/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20221206112738.jpg"
);
return
polyvInfoVO
;
}
}
}
src/main/java/com/subsidy/util/ConstantUtils.java
View file @
ae243f7
...
@@ -48,7 +48,7 @@ public class ConstantUtils {
...
@@ -48,7 +48,7 @@ public class ConstantUtils {
public
static
final
String
PUBLISH_SUCCESS
=
"发布成功"
;
public
static
final
String
PUBLISH_SUCCESS
=
"发布成功"
;
public
static
final
String
LOGIN_OUT
=
"登出成功"
;
public
static
final
String
LOGIN_OUT
=
"登出成功"
;
public
static
final
String
COMPRESS_SUCCESS
=
"压缩成功"
;
public
static
final
String
COMPRESS_SUCCESS
=
"压缩成功"
;
...
@@ -103,8 +103,11 @@ public class ConstantUtils {
...
@@ -103,8 +103,11 @@ public class ConstantUtils {
public
static
final
Long
BUSINESS_ID
=
1L
;
public
static
final
Long
BUSINESS_ID
=
1L
;
public
static
final
String
UTF8
=
"UTF-8"
;
/**
/**
*
人脸识别
*
保利威视
*/
*/
public
static
final
String
POLYV_VIEWLOG_2
=
"http://api.polyv.net/live/v1/statistics/{channelId}/viewlog"
;
}
}
src/main/java/com/subsidy/util/HttpUtil.java
View file @
ae243f7
package
com
.
subsidy
.
util
;
package
com
.
subsidy
.
util
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
org.springframework.http.*
;
import
org.springframework.web.client.RestTemplate
;
import
java.util.Map
;
import
org.apache.http.Header
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.NameValuePair
;
import
org.apache.http.client.entity.UrlEncodedFormEntity
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpGet
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.client.methods.HttpUriRequest
;
import
org.apache.http.entity.ContentType
;
import
org.apache.http.entity.StringEntity
;
//import org.apache.http.entity.mime.MultipartEntityBuilder;
//import org.apache.http.entity.mime.content.FileBody;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClientBuilder
;
import
org.apache.http.message.BasicNameValuePair
;
import
org.apache.http.util.EntityUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.io.*
;
import
java.net.URLEncoder
;
import
java.util.*
;
/**
/**
* http请求
* @author: sadboy
*/
**/
public
class
HttpUtil
{
public
class
HttpUtil
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
HttpUtil
.
class
);
private
static
final
String
UTF8
=
"UTF-8"
;
private
static
final
String
APPLICATION_FORM_URLENCODED
=
"application/x-www-form-urlencoded; charset=UTF-8"
;
private
static
final
String
APPLICATION_JSON
=
"application/json; charset=UTF-8"
;
private
static
final
String
TEXT_PLAIN
=
"text/plain; charset=UTF-8"
;
private
static
final
String
TEXT_HTML
=
"text/html; charset=UTF-8"
;
private
static
final
String
APPLICATION_XML
=
"application/xml; charset=UTF-8"
;
private
HttpUtil
()
{
}
/**
* 向url发送get请求,当无参数时,paramMap为NULL
* @param url 请求url
* @param paramMap 需要拼接的参数
* @return 请求返回的数据
* @throws IOException 读写异常
*/
public
static
String
get
(
String
url
,
Map
<
String
,
String
>
paramMap
)
throws
IOException
{
return
get
(
url
,
paramMap
,
UTF8
);
}
/**
* 向url发送get请求
* @param url 请求url
* @param paramMap 需要拼接的参数
* @param encoding 编码
* @return 请求返回的数据
* @throws IOException 读写异常
*/
public
static
String
get
(
String
url
,
Map
<
String
,
String
>
paramMap
,
String
encoding
)
throws
IOException
{
encoding
=
encoding
==
null
?
UTF8
:
encoding
;
url
=
appendUrl
(
url
,
paramMap
);
return
get
(
url
,
encoding
,
new
DataParse
<
String
>()
{
@Override
public
String
parseData
(
HttpEntity
httpEntity
,
String
encoding
)
throws
IOException
{
return
EntityUtils
.
toString
(
httpEntity
,
encoding
);
}
});
}
/**
* 向url发送get请求
* @param url 请求url
* @param paramMap 需要拼接的参数
* @param encoding 编码
* @return 请求返回的字节数组,一般用于文件下载
* @throws IOException 读写异常
*/
public
static
byte
[]
getBinary
(
String
url
,
Map
<
String
,
String
>
paramMap
,
String
encoding
)
throws
IOException
{
encoding
=
encoding
==
null
?
UTF8
:
encoding
;
url
=
appendUrl
(
url
,
paramMap
);
return
get
(
url
,
encoding
,
new
DataParse
<
byte
[]>()
{
@Override
public
byte
[]
parseData
(
HttpEntity
httpEntity
,
String
encoding
)
throws
IOException
{
return
EntityUtils
.
toByteArray
(
httpEntity
);
}
});
}
/**
* HTTP GET 内部公共请求处理逻辑
* @param url 请求地址
* @param encoding 编码字符集, 默认为 utf-8
* @param dataParse 返回数据反序列化逻辑实现类
* @return HTTP 返回的内容
* @throws IOException 客户端和服务器读写通讯异常
*/
private
static
<
T
>
T
get
(
String
url
,
String
encoding
,
DataParse
<
T
>
dataParse
)
throws
IOException
{
log
.
debug
(
"http 请求 url: {}"
,
url
);
T
result
=
null
;
// 创建httpclient对象
CloseableHttpClient
httpClient
=
HttpClientBuilder
.
create
().
build
();
// 创建get方式请求对象
HttpGet
httpGet
=
new
HttpGet
(
url
);
httpGet
.
addHeader
(
"Content-type"
,
APPLICATION_JSON
);
// 通过请求对象获取响应对象
CloseableHttpResponse
response
=
sendRequestAndGetResult
(
url
,
httpClient
,
httpGet
);
// 获取结果实体
if
(
null
!=
response
)
{
result
=
dataParse
.
parseData
(
response
.
getEntity
(),
encoding
);
if
(!(
result
instanceof
byte
[]))
{
log
.
debug
(
"http 请求结果: {}"
,
result
);
}
else
{
Header
[]
headers
=
response
.
getHeaders
(
"Content-Type"
);
for
(
Header
responseHead
:
headers
)
{
String
headStr
=
responseHead
.
getValue
();
if
(
headStr
.
startsWith
(
"application/json"
))
{
String
json
=
new
String
((
byte
[])
result
);
response
.
close
();
throw
new
RuntimeException
(
json
);
}
}
}
}
try
{
if
(
null
!=
response
)
{
response
.
close
();
}
}
catch
(
IOException
ex
)
{
log
.
error
(
ex
.
getMessage
(),
ex
);
}
return
result
;
}
/**
/**
* GET 请求
* 向url发送post请求
* @param params
* @param url 请求url
* @param url
* @param paramMap 需要拼接的参数
* @return
* @return 请求返回的数据
* @throws IOException 读写异常
*/
*/
public
static
JSONObject
get
(
Map
<
String
,
Object
>
params
,
String
url
)
{
public
static
String
postFormBody
(
String
url
,
Map
<
String
,
String
>
paramMap
)
throws
IOException
{
RestTemplate
restTemplate
=
new
RestTemplate
();
return
postFormBody
(
url
,
paramMap
,
null
);
ResponseEntity
<
String
>
responseEntity
=
restTemplate
.
getForEntity
(
url
,
String
.
class
,
params
);
String
body
=
responseEntity
.
getBody
();
JSONObject
object
=
JSON
.
parseObject
(
body
);
return
object
;
}
}
/**
/**
* POST 请求
* 向url发送post请求
* @param params
* @param url 请求url
* @param url
* @param paramMap 需要拼接的参数
* @return
* @param encoding 编码
* @return 请求返回的数据
* @throws IOException 读写异常
*/
*/
public
static
JSONObject
post
(
Map
<
String
,
Object
>
params
,
String
url
)
{
public
static
String
postFormBody
(
String
url
,
Map
<
String
,
String
>
paramMap
,
String
encoding
)
throws
IOException
{
RestTemplate
restTemplate
=
new
RestTemplate
();
return
post
(
url
,
paramMap
,
encoding
);
ResponseEntity
<
String
>
responseEntity
=
restTemplate
.
postForEntity
(
url
,
params
,
String
.
class
);
String
body
=
responseEntity
.
getBody
();
JSONObject
object
=
JSON
.
parseObject
(
body
);
return
object
;
}
}
/**
/**
*
POST 请求 带Token
*
向url发送post请求表单提交数据
*
*
@param url 请求url
* @param param
* @param param
Map 表单数据
* @param
token
* @param
encoding 编码
* @
param url
* @
return 请求返回的数据
* @
return
* @
throws IOException 读写异常
*/
*/
public
static
JSONObject
sendPost
(
Map
<
String
,
Object
>
param
,
String
token
,
String
url
,
Object
obj
)
{
private
static
String
post
(
String
url
,
Map
<
String
,
String
>
paramMap
,
String
encoding
)
throws
IOException
{
RestTemplate
restTemplate
=
new
RestTemplate
();
log
.
debug
(
"http 请求 url: {} , 请求参数: {}"
,
url
,
appendUrl
(
""
,
paramMap
).
replace
(
"?"
,
""
));
HttpHeaders
headers
=
new
HttpHeaders
();
encoding
=
encoding
==
null
?
UTF8
:
encoding
;
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
// 创建post方式请求对象
headers
.
add
(
"Accept"
,
MediaType
.
ALL_VALUE
);
HttpPost
httpPost
=
new
HttpPost
(
url
);
headers
.
add
(
"Authorization"
,
"Bearer "
+
token
);
// 装填参数
HttpEntity
<
String
>
formEntity
=
new
HttpEntity
<
String
>(
param
.
toString
(),
headers
);
List
<
NameValuePair
>
nameValuePairs
=
new
ArrayList
<
NameValuePair
>();
ResponseEntity
<
String
>
responseEntity
=
restTemplate
.
exchange
(
url
,
HttpMethod
.
POST
,
formEntity
,
String
.
class
,
obj
);
if
(
paramMap
!=
null
)
{
String
body
=
responseEntity
.
getBody
();
for
(
Map
.
Entry
<
String
,
String
>
entry
:
paramMap
.
entrySet
())
{
JSONObject
object
=
JSON
.
parseObject
(
body
);
String
value
=
entry
.
getValue
();
return
object
;
//去掉如下判断会造成String类型的value为null时
if
(
value
!=
null
)
{
nameValuePairs
.
add
(
new
BasicNameValuePair
(
entry
.
getKey
(),
value
));
}
}
}
// 设置参数到请求对象中
httpPost
.
setEntity
(
new
UrlEncodedFormEntity
(
nameValuePairs
,
encoding
));
// 设置header信息
// 指定报文头【Content-type】、【User-Agent】
httpPost
.
setHeader
(
"Content-type"
,
APPLICATION_FORM_URLENCODED
);
return
post
(
url
,
httpPost
,
encoding
,
new
DataParse
<
String
>()
{
@Override
public
String
parseData
(
HttpEntity
httpEntity
,
String
encoding
)
throws
IOException
{
return
EntityUtils
.
toString
(
httpEntity
,
encoding
);
}
});
}
}
/**
* 向url发送post请求发送json
* @param url 请求url
* @param json json字符串
* @param encoding 编码
* @return 请求返回的数据
* @throws IOException 读写异常
*/
public
static
String
postJsonBody
(
String
url
,
String
json
,
String
encoding
)
throws
IOException
{
log
.
debug
(
"http 请求 url: {} , 请求参数: {}"
,
url
,
json
);
encoding
=
encoding
==
null
?
UTF8
:
encoding
;
// 创建post方式请求对象
HttpPost
httpPost
=
new
HttpPost
(
url
);
// 设置参数到请求对象中
StringEntity
stringEntity
=
new
StringEntity
(
json
,
ContentType
.
APPLICATION_JSON
);
// Constant.UTF8
stringEntity
.
setContentEncoding
(
encoding
);
httpPost
.
setEntity
(
stringEntity
);
String
result
=
post
(
url
,
httpPost
,
encoding
,
new
DataParse
<
String
>()
{
@Override
public
String
parseData
(
HttpEntity
httpEntity
,
String
encoding
)
throws
IOException
{
return
EntityUtils
.
toString
(
httpEntity
,
encoding
);
}
});
return
result
;
}
/**
* 向url发送post请求
* @param url 请求url
* @param httpPost httpClient
* @return 请求返回的数据
* @throws IOException 读写异常
*/
private
static
<
T
>
T
post
(
String
url
,
HttpPost
httpPost
,
String
encoding
,
DataParse
<
T
>
dataParse
)
throws
IOException
{
T
result
=
null
;
CloseableHttpResponse
response
=
null
;
// 创建httpclient对象
CloseableHttpClient
httpClient
=
HttpClientBuilder
.
create
().
build
();
// 执行请求操作,并拿到结果(同步阻塞)
response
=
sendRequestAndGetResult
(
url
,
httpClient
,
httpPost
);
// 获取结果实体
// 判断网络连接状态码是否正常(0--200都数正常)
if
(
null
!=
response
)
{
result
=
dataParse
.
parseData
(
response
.
getEntity
(),
encoding
);
log
.
debug
(
"http 请求结果: {}"
,
result
);
}
try
{
if
(
null
!=
response
)
{
response
.
close
();
}
}
catch
(
IOException
ex
)
{
log
.
error
(
ex
.
getMessage
(),
ex
);
}
return
result
;
}
/**
* 设置http头,发送http请求,打印请求耗时
* @param url 请求url
* @param httpClient httpClient
* @param httpUriRequest httpUriRequest
* @return 请求返回的数据
* @throws IOException 读写异常
*/
private
static
CloseableHttpResponse
sendRequestAndGetResult
(
String
url
,
CloseableHttpClient
httpClient
,
HttpUriRequest
httpUriRequest
)
throws
IOException
{
long
startTime
=
System
.
currentTimeMillis
();
CloseableHttpResponse
response
=
httpClient
.
execute
(
httpUriRequest
);
long
endTime
=
System
.
currentTimeMillis
();
collectAPISpendTime
(
url
,
startTime
,
endTime
);
return
response
;
}
/**
* 打印请求信息
* @param url 请求url
* @param startTime 请求开始时间
* @param endTime 请求结束时间
*/
private
static
void
collectAPISpendTime
(
String
url
,
long
startTime
,
long
endTime
)
{
log
.
debug
(
"HTTP请求耗时分析,请求URL: {} , 耗时: {} ms"
,
url
,
endTime
-
startTime
);
}
// /**
// * 向url发送post请求上传单文件
// * @param url 请求url
// * @param paramMap 需要表单提交的参数
// * @param fileMap 需要上传的文件
// * @param encoding 编码
// * @return 请求返回的数据
// * @throws IOException 读写异常
// */
// public static String postFile(String url, Map<String, String> paramMap, Map<String, File> fileMap, String encoding)
// throws IOException {
// if (fileMap != null) {
// Map<String, List<File>> fileListMap = new HashMap<String, List<File>>();
// for (Map.Entry<String, File> entry : fileMap.entrySet()) {
// File file = entry.getValue();
// List<File> fileList = new ArrayList<File>();
// fileList.add(file);
// fileListMap.put(entry.getKey(), fileList);
// }
// return postMultipleFile(url, paramMap, fileListMap, encoding);
// }
// return postMultipleFile(url, paramMap, null, encoding);
// }
// /**
// * 向url发送post请求上传多文件
// * 向url发送post请求上传单文件
// * @param url 请求url
// * @param paramMap 需要表单提交的参数
// * @param fileListMap 需要上传的文件
// * @param encoding 编码
// * @return 请求返回的数据
// * @throws IOException 读写异常
// */
// public static String postMultipleFile(String url, Map<String, String> paramMap, Map<String, List<File>> fileListMap,
// String encoding) throws IOException {
// return postFileBody(url, paramMap, fileListMap, encoding, new DataParse<String>() {
// @Override
// public String parseData(HttpEntity httpEntity, String encoding) throws IOException {
// return EntityUtils.toString(httpEntity, encoding);
// }
// });
// }
// /**
// * 向url发送post请求上传多文件
// * 向url发送post请求上传单文件
// * @param url 请求url
// * @param paramMap 需要表单提交的参数
// * @param fileListMap 需要上传的文件
// * @param encoding 编码
// * @return 请求返回的数据
// * @throws IOException 读写异常
// */
// private static <T> T postFileBody(String url, Map<String, String> paramMap, Map<String, List<File>> fileListMap,
// String encoding, DataParse<T> dataParse) throws IOException {
// log.debug("http 请求 url: {} , 请求参数: {}", url, appendUrl("", paramMap).replace("?", ""));
// encoding = encoding == null ? UTF8 : encoding;
// T result = null;
// CloseableHttpClient httpClient = HttpClientBuilder.create().build();
// HttpPost httpPost = new HttpPost(url);
// MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
//
// ContentType contentType = ContentType.create("text/plain", Charset.forName(encoding));
// if (null != paramMap) {
// for (Map.Entry<String, String> entry : paramMap.entrySet()) {
// entityBuilder.addTextBody(entry.getKey(), entry.getValue(), contentType);
// }
// }
//
// if (null != fileListMap) {
// for (Map.Entry<String, List<File>> entry : fileListMap.entrySet()) {
// String key = entry.getKey();
// List<File> fileList = entry.getValue();
// for (File file : fileList) {
// FileBody fileBody = new FileBody(file);
// entityBuilder.addPart(key, fileBody);
// }
// }
// }
//
// HttpEntity entity = entityBuilder.build();
// httpPost.setEntity(entity);
// CloseableHttpResponse response = sendRequestAndGetResult(url, httpClient, httpPost);
// if (null != response) {
// result = dataParse.parseData(response.getEntity(), encoding);
// log.debug("http 请求结果: {}", result);
// }
// try {
// if (null != response) {
// response.close();
// }
// } catch (IOException ex) {
// log.error(ex.getMessage(), ex);
// }
// return result;
// }
/**
* 公共数据解析接口
* @param <T>
*/
private
interface
DataParse
<
T
>
{
/**
* 解析返回数据
* @param httpEntity 返回实体
* @param encoding 编码
* @return 实际解析返回内容
* @throws IOException io异常
*/
T
parseData
(
HttpEntity
httpEntity
,
String
encoding
)
throws
IOException
;
}
/**
* 将url与map拼接成HTTP查询字符串
* @param url 请求url
* @param paramMap 需要拼装的map
* @return 拼装好的url
*/
public
static
String
appendUrl
(
String
url
,
Map
<
String
,
String
>
paramMap
)
throws
UnsupportedEncodingException
{
if
(
paramMap
==
null
)
{
return
url
;
}
StringBuffer
paramStringBuffer
=
new
StringBuffer
();
Iterator
<
Map
.
Entry
<
String
,
String
>>
mapIterator
=
paramMap
.
entrySet
().
iterator
();
while
(
mapIterator
.
hasNext
())
{
Map
.
Entry
<
String
,
String
>
next
=
mapIterator
.
next
();
paramStringBuffer
.
append
(
next
.
getKey
()).
append
(
"="
).
append
(
URLEncoder
.
encode
(
next
.
getValue
(),
ConstantUtils
.
UTF8
)).
append
(
"&"
);
}
String
paramStr
=
paramStringBuffer
.
toString
();
// String paramStr = mapJoinNotEncode(paramMap);
if
(
paramStr
!=
null
&&
!
""
.
equals
(
paramStr
))
{
if
(
url
.
indexOf
(
"?"
)
>
0
)
{
if
(
url
.
endsWith
(
"&"
))
{
url
+=
paramStr
.
substring
(
0
,
paramStr
.
length
()
-
1
);
}
else
{
url
+=
"&"
+
paramStr
.
substring
(
0
,
paramStr
.
length
()
-
1
);
}
}
else
{
url
+=
"?"
+
paramStr
.
substring
(
0
,
paramStr
.
length
()
-
1
);
}
}
return
url
;
}
/**
* 把二进制写入文件
* @param bytes
* @param path
* @throws IOException
*/
public
static
void
writeFile
(
byte
[]
bytes
,
String
path
)
throws
IOException
{
OutputStream
os
=
null
;
try
{
// 根据绝对路径初始化文件
File
localFile
=
new
File
(
path
);
if
(!
localFile
.
exists
())
{
boolean
newFile
=
localFile
.
createNewFile
();
if
(!
newFile
)
{
throw
new
RuntimeException
(
"创建文件异常,路径:"
+
path
);
}
}
// 输出流
os
=
new
FileOutputStream
(
localFile
);
os
.
write
(
bytes
);
}
finally
{
if
(
os
!=
null
)
{
os
.
close
();
}
}
}
}
}
src/main/java/com/subsidy/util/MyStringUtils.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
util
;
import
java.util.List
;
public
class
MyStringUtils
{
public
static
String
changeListToString
(
List
<
String
>
list
)
{
StringBuffer
buffer
=
new
StringBuffer
();
if
(
list
.
size
()
>
0
)
{
int
i
=
0
;
for
(
String
s
:
list
)
{
buffer
.
append
(
s
);
if
(
i
!=
list
.
size
()-
1
){
buffer
.
append
(
","
);
}
}
}
return
buffer
.
toString
();
}
}
src/main/java/com/subsidy/util/PolyvUtils.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
util
;
import
net.polyv.live.v1.util.LiveSignUtil
;
import
java.io.UnsupportedEncodingException
;
import
java.security.NoSuchAlgorithmException
;
public
class
PolyvUtils
{
/**
* 学生端--生成保利威视直播观看地址
*/
public
static
String
liveSign
(
String
userId
,
String
channelId
){
//根据实际情况设置userid
String
ts
=
String
.
valueOf
(
System
.
currentTimeMillis
());
String
url
=
"https://live.polyv.cn/watch/"
+
channelId
;
String
signText
=
"03sqxr97fo"
+
userId
+
"03sqxr97fo"
+
ts
;
try
{
String
sign
=
LiveSignUtil
.
md5Hex
(
signText
);
url
+=
"?userid="
+
userId
+
"&ts="
+
ts
+
"&sign="
+
sign
;
return
url
;
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
}
src/main/java/com/subsidy/util/QuartzUtil.java
View file @
ae243f7
...
@@ -52,6 +52,7 @@ public class QuartzUtil {
...
@@ -52,6 +52,7 @@ public class QuartzUtil {
}
}
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
new
HttpException
(
70002
);
throw
new
HttpException
(
70002
);
}
}
}
}
...
...
src/main/java/com/subsidy/util/Signature.java
View file @
ae243f7
...
@@ -11,6 +11,7 @@ import java.nio.charset.StandardCharsets;
...
@@ -11,6 +11,7 @@ import java.nio.charset.StandardCharsets;
* @create: 2020-07-29 12:42
* @create: 2020-07-29 12:42
*/
*/
public
class
Signature
{
public
class
Signature
{
private
String
secretId
;
private
String
secretId
;
private
String
secretKey
;
private
String
secretKey
;
private
long
currentTime
;
private
long
currentTime
;
...
@@ -80,4 +81,5 @@ public class Signature {
...
@@ -80,4 +81,5 @@ public class Signature {
}
}
public
void
setClassId
(
int
classId
){
this
.
classId
=
classId
;}
public
void
setClassId
(
int
classId
){
this
.
classId
=
classId
;}
}
}
src/main/java/com/subsidy/vo/live/AllLivesVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
com.subsidy.model.ClassDictDO
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
AllLivesVO
{
private
Long
id
;
private
String
channel
;
private
String
liveName
;
private
String
startTime
;
private
String
playbackStatus
;
private
String
liveStatus
;
private
List
<
LiveClassesVO
>
classDictDOS
;
}
src/main/java/com/subsidy/vo/live/BackData.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
BackData
{
private
String
status
;
private
List
<
Result
>
result
;
}
src/main/java/com/subsidy/vo/live/ClassLivesVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
lombok.Data
;
@Data
public
class
ClassLivesVO
{
private
Long
id
;
private
String
liveName
;
}
src/main/java/com/subsidy/vo/live/ClassMembersVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
ClassMembersVO
{
private
Long
id
;
private
String
userName
;
private
String
telephone
;
private
Integer
playLength
;
private
Integer
signInCounts
;
private
List
<
String
>
startTimes
;
private
List
<
String
>
locations
;
private
List
<
String
>
cities
;
private
List
<
String
>
ipAddress
;
private
List
<
String
>
terminals
;
}
src/main/java/com/subsidy/vo/live/DataViewVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
lombok.Data
;
@Data
public
class
DataViewVO
{
private
Integer
totalLive
;
private
Integer
actualLive
;
private
Integer
totalPlayback
;
private
Integer
actualPlayback
;
}
src/main/java/com/subsidy/vo/live/ExportClassMembersVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
com.subsidy.util.excel.ExcelColumn
;
import
lombok.Data
;
@Data
public
class
ExportClassMembersVO
{
private
Long
id
;
@ExcelColumn
(
value
=
"成员名称"
,
col
=
1
)
private
String
userName
;
@ExcelColumn
(
value
=
"联系方式"
,
col
=
2
)
private
String
telephone
;
@ExcelColumn
(
value
=
"直播签到"
,
col
=
3
)
private
Integer
signInCounts
;
@ExcelColumn
(
value
=
"观看时长"
,
col
=
4
)
private
Integer
playLength
;
@ExcelColumn
(
value
=
"进入时间"
,
col
=
5
)
private
String
startTimes
;
@ExcelColumn
(
value
=
"地区"
,
col
=
6
)
private
String
locations
;
@ExcelColumn
(
value
=
"城市"
,
col
=
7
)
private
String
cities
;
@ExcelColumn
(
value
=
"IP"
,
col
=
8
)
private
String
ipAddress
;
@ExcelColumn
(
value
=
"终端"
,
col
=
9
)
private
String
terminals
;
}
src/main/java/com/subsidy/vo/live/ExportPlaybacksVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
com.subsidy.util.excel.ExcelColumn
;
import
lombok.Data
;
@Data
public
class
ExportPlaybacksVO
{
private
Long
id
;
@ExcelColumn
(
value
=
"成员名称"
,
col
=
1
)
private
String
userName
;
@ExcelColumn
(
value
=
"联系方式"
,
col
=
2
)
private
String
telephone
;
@ExcelColumn
(
value
=
"直播签到"
,
col
=
3
)
private
Integer
signInCounts
;
@ExcelColumn
(
value
=
"回放签到"
,
col
=
4
)
private
Integer
playbackCounts
;
@ExcelColumn
(
value
=
"观看时长"
,
col
=
5
)
private
Integer
playLength
;
@ExcelColumn
(
value
=
"进入时间"
,
col
=
6
)
private
String
startTimes
;
}
src/main/java/com/subsidy/vo/live/GetLiveVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
com.subsidy.model.LiveDictDO
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
GetLiveVO
extends
LiveDictDO
{
private
List
<
LiveClassesVO
>
liveClassesVOS
;
}
src/main/java/com/subsidy/vo/live/LiveClassesVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
lombok.Data
;
@Data
public
class
LiveClassesVO
{
private
Long
id
;
private
String
className
;
}
src/main/java/com/subsidy/vo/live/MemberLivesVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
lombok.Data
;
@Data
public
class
MemberLivesVO
{
private
Long
liveId
;
private
String
liveName
;
private
String
liveUrl
;
private
String
startTime
;
private
String
liveStatus
;
private
String
channel
;
private
String
playStartDate
;
private
String
playEndDate
;
}
src/main/java/com/subsidy/vo/live/MemberPlaybackVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
lombok.Data
;
@Data
public
class
MemberPlaybackVO
{
private
Long
id
;
private
String
vodName
;
private
String
vodUrl
;
private
String
createDate
;
private
Integer
playLength
;
private
Integer
vodLength
;
private
String
percent
;
}
src/main/java/com/subsidy/vo/live/PlaybacksVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
PlaybacksVO
{
private
Long
id
;
private
String
userName
;
private
String
telephone
;
private
Integer
playLength
;
private
Integer
signInCounts
;
private
Integer
playbackCounts
;
private
List
<
String
>
startTimes
;
}
src/main/java/com/subsidy/vo/live/PolyvInfoVO.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
lombok.Data
;
@Data
public
class
PolyvInfoVO
{
private
Integer
status
;
private
String
userid
;
private
String
nickname
;
private
String
avatar
;
private
String
actor
;
private
String
actorFColor
;
private
String
actorBgColor
;
private
String
param4
;
}
src/main/java/com/subsidy/vo/live/Result.java
0 → 100644
View file @
ae243f7
package
com
.
subsidy
.
vo
.
live
;
import
lombok.Data
;
@Data
public
class
Result
{
private
String
playId
;
private
String
userId
;
private
String
channelId
;
private
Integer
playDuration
;
private
Integer
stayDuration
;
private
Long
flowSize
;
private
String
sessionId
;
private
String
param1
;
private
String
param2
;
private
String
param3
;
private
String
param4
;
private
String
param5
;
private
String
ipAddress
;
private
String
country
;
private
String
province
;
private
String
city
;
private
String
isp
;
private
String
referer
;
private
String
userAgent
;
private
String
operatingSystem
;
private
String
browser
;
private
String
isMobile
;
private
String
currentDay
;
private
Long
createdTime
;
private
Long
lastModified
;
private
Integer
ptype
;
private
Long
firstActiveTime
;
private
Long
lastActiveTime
;
}
src/main/resources/application-dev.properties
View file @
ae243f7
# 本地环境配置
# 本地环境配置
spring.server.port
=
234
62
spring.server.port
=
234
57
# 数据源配置
# 数据源配置
spring.datasource.url
=
jdbc:mysql://116.62.57.92:3306/subsidy_
online
?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.url
=
jdbc:mysql://116.62.57.92:3306/subsidy_
test
?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
#spring.datasource.url=jdbc:mysql://rm-uf6rab73w0qg843opxo.mysql.rds.aliyuncs.com:3306/subsidy_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
#spring.datasource.url=jdbc:mysql://rm-uf6rab73w0qg843opxo.mysql.rds.aliyuncs.com:3306/subsidy_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.type
=
com.alibaba.druid.pool.DruidDataSource
spring.datasource.type
=
com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-
name
=
com.mysql.cj.jdbc.Driver
spring.datasource.driver-class-
name
=
com.mysql.cj.jdbc.Driver
...
...
src/main/resources/application.properties
View file @
ae243f7
# 环境配置
# 环境配置
spring.profiles.active
=
prod
spring.profiles.active
=
dev
#和CPU数
#和CPU数
spring.server.acceptorThreadCount
=
600
spring.server.acceptorThreadCount
=
600
spring.server.minSpareThreads
=
100
spring.server.minSpareThreads
=
100
...
@@ -63,12 +63,16 @@ spring.quartz.overwrite-existing-jobs=false
...
@@ -63,12 +63,16 @@ spring.quartz.overwrite-existing-jobs=false
# 自动建表,如果已经存在表请勿使用,会覆盖数据表
# 自动建表,如果已经存在表请勿使用,会覆盖数据表
#spring.quartz.jdbc.initialize-schema=always
#spring.quartz.jdbc.initialize-schema=always
#spring.datasource.initialization-mode=embedded
#spring.datasource.initialization-mode=embedded
#spring.redis.host=r-uf6m4cpkjrgpzywjm3pd.redis.rds.aliyuncs.com
#spring.redis.host=r-uf6m4cpkjrgpzywjm3pd.redis.rds.aliyuncs.com
#spring.redis.port=6379
#spring.redis.port=6379
#spring.redis.password=r-uf6m4cpkjrgpzywjm3:Ykhl@208
#spring.redis.password=r-uf6m4cpkjrgpzywjm3:Ykhl@208
wechat
=
wechat
=
#pro
#pro
appId
=
wx5e1ecb9c9bd33451
appId
=
wx5e1ecb9c9bd33451
appSecret
=
4f5e1abb6fb4f68f5273820b6295ec6b
appSecret
=
4f5e1abb6fb4f68f5273820b6295ec6b
#保利威视
polyv.userId
=
b8f2d3bfdc
polyv.appId
=
g3lrxnzd75
polyv.appSecret
=
ef9cdcbbb9184b61aca301ba8114d570
polyv.secretKey
=
03sqxr97fo
src/main/resources/mapper/LiveClassesMapper.xml
0 → 100644
View file @
ae243f7
<?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.subsidy.mapper.LiveClassesMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.subsidy.model.LiveClassesDO"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"create_date"
property=
"createDate"
/>
<result
column=
"update_date"
property=
"updateDate"
/>
<result
column=
"delete_date"
property=
"deleteDate"
/>
<result
column=
"live_id"
property=
"liveId"
/>
<result
column=
"class_id"
property=
"classId"
/>
</resultMap>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
create_date,
update_date,
delete_date,
id, live_id, class_id
</sql>
<select
id=
"classMembers"
resultType=
"com.subsidy.vo.live.ClassMembersVO"
>
SELECT
t.id,
t.telephone,
t.user_name,
t2.play_length
FROM
(
SELECT
distinct t2.id,
t2.user_name,
t2.telephone
FROM
class_member_mapping t
LEFT JOIN member t2 ON t.member_id = t2.id
LEFT JOIN live_classes t3 ON t.class_id = t3.class_id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t3.delete_date IS NULL
AND t.class_id = #{classId}
AND t3.live_id = #{liveId}
<if
test=
"userName != null and userName != ''"
>
and t2.user_name like concat('%',#{userName} ,'%')
</if>
) t
LEFT JOIN (
SELECT
t.live_id,
t.member_id,
sum( t.play_duration ) AS play_length
FROM
live_study_history t
WHERE
t.delete_date IS NULL
AND t.live_id = #{liveId}
GROUP BY
t.live_id,
t.member_id
) t2 ON t.id = t2.member_id
</select>
<select
id=
"liveMemberCounts"
parameterType=
"long"
resultType=
"integer"
>
SELECT
count(
DISTINCT ( t2.member_id ))
FROM
live_classes t
LEFT JOIN class_member_mapping t2 ON t.class_id = t2.class_id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.live_id = #{liveId}
and t2.class_id = #{classId}
</select>
<select
id=
"liveActualCounts"
parameterType=
"long"
resultType=
"integer"
>
SELECT
count(
DISTINCT ( t.member_id ))
FROM
live_study_history t
left join class_member_mapping t2 on t.member_id = t2.member_id
WHERE
t.delete_date is null
and t2.delete_date is null
AND t.live_id = #{liveId}
and t2.class_id = #{classId}
</select>
<select
id=
"classLives"
parameterType=
"long"
resultType=
"com.subsidy.vo.live.ClassLivesVO"
>
SELECT
distinct t2.id,
t2.live_name
FROM
live_classes t
LEFT JOIN live_dict t2 ON t.live_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.class_id = #{classId}
</select>
</mapper>
src/main/resources/mapper/LiveCoursewaresMapper.xml
0 → 100644
View file @
ae243f7
<?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.subsidy.mapper.LiveCoursewaresMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.subsidy.model.LiveCoursewaresDO"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"create_date"
property=
"createDate"
/>
<result
column=
"update_date"
property=
"updateDate"
/>
<result
column=
"delete_date"
property=
"deleteDate"
/>
<result
column=
"live_id"
property=
"liveId"
/>
<result
column=
"courseware"
property=
"courseware"
/>
</resultMap>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
create_date,
update_date,
delete_date,
id, live_id, courseware
</sql>
</mapper>
src/main/resources/mapper/LiveDictMapper.xml
0 → 100644
View file @
ae243f7
<?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.subsidy.mapper.LiveDictMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.subsidy.model.LiveDictDO"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"create_date"
property=
"createDate"
/>
<result
column=
"update_date"
property=
"updateDate"
/>
<result
column=
"delete_date"
property=
"deleteDate"
/>
<result
column=
"channel"
property=
"channel"
/>
<result
column=
"live_name"
property=
"liveName"
/>
<result
column=
"start_time"
property=
"startTime"
/>
<result
column=
"playback_status"
property=
"playbackStatus"
/>
<result
column=
"live_status"
property=
"liveStatus"
/>
</resultMap>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
create_date,
update_date,
delete_date,
id, channel, live_name, start_time, playback_status, live_status
</sql>
<select
id=
"allLives"
resultType=
"com.subsidy.vo.live.AllLivesVO"
>
SELECT
distinct t.id,
t.channel,
t.live_name,
t.start_time,
t.live_status
FROM
live_dict t
LEFT JOIN live_classes t2 ON t.id = t2.live_id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
<if
test=
"liveName != null and liveName != ''"
>
and t.live_name like concat('%',#{liveName} ,'%')
</if>
<if
test=
"liveStatus != null and liveStatus != ''"
>
and t.live_status = #{liveStatus}
</if>
order by t.create_date desc
</select>
<select
id=
"liveClasses"
parameterType=
"long"
resultType=
"com.subsidy.vo.live.LiveClassesVO"
>
SELECT
distinct t2.id,
t2.class_name
FROM
live_classes t
LEFT JOIN class_dict t2 ON t.class_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
and t.live_id = #{liveId}
</select>
<select
id=
"liveClassesIds"
parameterType=
"long"
resultType=
"long"
>
SELECT
t2.id
FROM
live_classes t
LEFT JOIN class_dict t2 ON t.class_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
and t.id = #{liveId}
</select>
<update
id=
"updateStatus"
parameterType=
"long"
>
update live_dict set live_status = '已开始' where id = #{id}
</update>
</mapper>
src/main/resources/mapper/LiveFilesMapper.xml
0 → 100644
View file @
ae243f7
<?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.subsidy.mapper.LiveFilesMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.subsidy.model.LiveFilesDO"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"create_date"
property=
"createDate"
/>
<result
column=
"update_date"
property=
"updateDate"
/>
<result
column=
"delete_date"
property=
"deleteDate"
/>
<result
column=
"live_id"
property=
"liveId"
/>
<result
column=
"file_url"
property=
"fileUrl"
/>
</resultMap>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
create_date,
update_date,
delete_date,
id, live_id, file_url
</sql>
</mapper>
src/main/resources/mapper/LivePlaybackHistoryMapper.xml
0 → 100644
View file @
ae243f7
<?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.subsidy.mapper.LivePlaybackHistoryMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.subsidy.model.LivePlaybackHistoryDO"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"create_date"
property=
"createDate"
/>
<result
column=
"update_date"
property=
"updateDate"
/>
<result
column=
"delete_date"
property=
"deleteDate"
/>
<result
column=
"live_vod_id"
property=
"liveVodId"
/>
<result
column=
"member_id"
property=
"memberId"
/>
<result
column=
"play_length"
property=
"playLength"
/>
<result
column=
"start_time"
property=
"startTime"
/>
</resultMap>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
create_date,
update_date,
delete_date,
id, live_vod_id, member_id, play_length, start_time
</sql>
<select
id=
"livePlaybacks"
resultType=
"com.subsidy.vo.live.PlaybacksVO"
>
SELECT
t.id,
t.user_name,
t.telephone,
t2.play_length
FROM
(
SELECT
distinct
t2.id,
t2.user_name,
t2.telephone
FROM
class_member_mapping t
LEFT JOIN member t2 ON t.member_id = t2.id
LEFT JOIN live_classes t3 ON t.class_id = t3.class_id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t3.delete_date IS NULL
<if
test=
"classId != null and classId != ''"
>
AND t.class_id = #{classId}
</if>
<if
test=
"liveId != null and liveId != ''"
>
AND t3.live_id = #{liveId}
</if>
<if
test=
"userName != null and userName != ''"
>
AND t2.user_name LIKE concat( '%', #{userName}, '%' )
</if>
)t
LEFT JOIN (
SELECT
t.live_id,
t.member_id,
sum( t.play_length ) AS play_length
FROM
live_playback_history t
WHERE
t.delete_date IS NULL
<if
test=
"liveId != null and liveId != ''"
>
AND t.live_id = #{liveId}
</if>
GROUP BY
t.live_id,
t.member_id
) t2 ON t.id = t2.member_id
</select>
<select
id=
"memberPlayback"
parameterType=
"long"
resultType=
"integer"
>
SELECT
count(
DISTINCT ( t.member_id ))
FROM
live_playback_history t
left join class_member_mapping t2 on t.member_id = t2.member_id
WHERE
t.live_id = #{liveId}
and t2.class_id = #{classId}
and t.delete_date is null
and t2.delete_date IS NULL
GROUP BY
t.live_id
</select>
</mapper>
src/main/resources/mapper/LiveStudyHistoryMapper.xml
0 → 100644
View file @
ae243f7
<?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.subsidy.mapper.LiveStudyHistoryMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.subsidy.model.LiveStudyHistoryDO"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"create_date"
property=
"createDate"
/>
<result
column=
"update_date"
property=
"updateDate"
/>
<result
column=
"delete_date"
property=
"deleteDate"
/>
<result
column=
"live_id"
property=
"liveId"
/>
<result
column=
"member_id"
property=
"memberId"
/>
<result
column=
"channel_id"
property=
"channelId"
/>
<result
column=
"play_duration"
property=
"playDuration"
/>
<result
column=
"stay_duration"
property=
"stayDuration"
/>
<result
column=
"flow_size"
property=
"flowSize"
/>
<result
column=
"session_id"
property=
"sessionId"
/>
<result
column=
"param1"
property=
"param1"
/>
<result
column=
"param2"
property=
"param2"
/>
<result
column=
"param3"
property=
"param3"
/>
<result
column=
"param4"
property=
"param4"
/>
<result
column=
"param5"
property=
"param5"
/>
<result
column=
"country"
property=
"country"
/>
<result
column=
"city"
property=
"city"
/>
<result
column=
"isp"
property=
"isp"
/>
<result
column=
"referer"
property=
"referer"
/>
<result
column=
"user_agent"
property=
"userAgent"
/>
<result
column=
"operating_system"
property=
"operatingSystem"
/>
<result
column=
"browser"
property=
"browser"
/>
<result
column=
"is_mobile"
property=
"isMobile"
/>
<result
column=
"current_day"
property=
"currentDay"
/>
<result
column=
"created_time"
property=
"createdTime"
/>
<result
column=
"last_modified"
property=
"lastModified"
/>
<result
column=
"ptype"
property=
"ptype"
/>
<result
column=
"first_active_time"
property=
"firstActiveTime"
/>
<result
column=
"last_active_time"
property=
"lastActiveTime"
/>
<result
column=
"province"
property=
"province"
/>
<result
column=
"play_length"
property=
"playLength"
/>
<result
column=
"start_time"
property=
"startTime"
/>
<result
column=
"location"
property=
"location"
/>
<result
column=
"ip_address"
property=
"ipAddress"
/>
<result
column=
"terminal"
property=
"terminal"
/>
</resultMap>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
create_date,
update_date,
delete_date,
id, live_id, member_id, channel_id, play_duration, stay_duration, flow_size, session_id, param1, param2, param3, param4, param5, country, city, isp, referer, user_agent, operating_system, browser, is_mobile, current_day, created_time, last_modified, ptype, first_active_time, last_active_time, province, play_length, start_time, location, ip_address, terminal
</sql>
</mapper>
src/main/resources/mapper/LiveVodsMapper.xml
0 → 100644
View file @
ae243f7
<?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.subsidy.mapper.LiveVodsMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.subsidy.model.LiveVodsDO"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"create_date"
property=
"createDate"
/>
<result
column=
"update_date"
property=
"updateDate"
/>
<result
column=
"delete_date"
property=
"deleteDate"
/>
<result
column=
"live_id"
property=
"liveId"
/>
<result
column=
"vod_name"
property=
"vodName"
/>
<result
column=
"vod_url"
property=
"vodUrl"
/>
<result
column=
"vod_length"
property=
"vodLength"
/>
</resultMap>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
create_date,
update_date,
delete_date,
id, live_id, vod_name, vod_url, vod_length
</sql>
<select
id=
"memberPlayback"
resultType=
"com.subsidy.vo.live.MemberPlaybackVO"
>
SELECT
t.id,
t.vod_name,
t.vod_url,
t2.create_date,
t2.play_length,
t.vod_length,
IF
( t.vod_length > t2.play_length, ROUND( t2.play_length * 100 / t.vod_length ), 100 ) AS percent
FROM
live_vods t
LEFT JOIN (
SELECT
t.live_id,
t.member_id,
t.live_vod_id,
IFNULL( sum( t.play_length ), 0 ) AS play_length,
MAX( t.create_date ) AS create_date
FROM
live_playback_history t
WHERE
t.delete_date IS NULL
AND t.live_id = #{liveId}
AND member_id = #{memberId}
GROUP BY
t.live_id,
t.member_id,
t.live_vod_id
) t2 ON t.id = t2.live_vod_id
</select>
</mapper>
src/main/resources/mapper/MemberMapper.xml
View file @
ae243f7
...
@@ -437,4 +437,26 @@
...
@@ -437,4 +437,26 @@
AND t2.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.id = #{memberId}
AND t.id = #{memberId}
</select>
</select>
<select
id=
"memberLives"
parameterType=
"long"
resultType=
"com.subsidy.vo.live.MemberLivesVO"
>
SELECT
distinct t2.live_id,
t3.live_name,
t3.live_url,
t3.start_time,
t3.live_status,
t3.channel,
t3.play_start_date,
t3.play_end_date
FROM
class_member_mapping t
LEFT JOIN live_classes t2 ON t.class_id = t2.class_id
LEFT JOIN live_dict t3 ON t2.live_id = t3.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t3.delete_date IS NULL
and t2.live_id IS not NULL
AND t.member_id = #{memberId}
</select>
</mapper>
</mapper>
Write
Preview
Markdown
is supported
Attach a file
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 post a comment