package com.ruoyi.study.controller;
|
|
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.ruoyi.common.core.constant.Constants;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.exception.GlobalException;
|
import com.ruoyi.common.core.web.page.PageInfo;
|
import com.ruoyi.common.security.service.TokenService;
|
import com.ruoyi.goods.api.feignClient.GoodsClient;
|
import com.ruoyi.goods.api.model.TGoodsVO;
|
import com.ruoyi.management.api.feignClient.ManagementClient;
|
import com.ruoyi.management.api.model.TSysSet;
|
import com.ruoyi.study.domain.*;
|
import com.ruoyi.study.dto.*;
|
import com.ruoyi.study.service.*;
|
import com.ruoyi.study.vo.*;
|
import com.ruoyi.system.api.model.LoginUserParent;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.util.StringUtils;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 学习类型前端控制器
|
* </p>
|
*
|
* @author 无关风月
|
* @since 2024-04-26
|
*/
|
@RestController
|
@RequestMapping("/base/study")
|
@Api(tags = "学习端-主接口")
|
public class TStudyController {
|
@Autowired
|
private ITStudyAnswerService studyAnswerService;
|
@Autowired
|
private ITStudyInductionService studyInductionService;
|
@Autowired
|
private ITStudyLookService studyLookService;
|
@Autowired
|
private ITStudyListenService studyListenService;
|
@Autowired
|
private ITStudyPairService studyPairService;
|
@Autowired
|
private ITGameService gameService;
|
@Autowired
|
private ITStoryListenService storyListenService;
|
@Autowired
|
private ITSubjectService subjectService;
|
@Autowired
|
private ITStoryService storyService;
|
@Autowired
|
private ITStudyService studyService;
|
@Resource
|
private GoodsClient goodsClient;
|
@Resource
|
private ITGameRecordService gameRecordService;
|
@Resource
|
private ITUserStudyService userStudyService;
|
@Resource
|
private ITIntegralRecordService integralRecordService;
|
@Resource
|
private ITUserService userService;
|
@Resource
|
private TokenService tokenService;
|
@Resource
|
private ITSubjectRecordService subjectRecordService;
|
@Resource
|
private IUserStudyRecordService studyRecordService;
|
@Resource
|
private ManagementClient managementClient;
|
@Resource
|
private ITUserPresentRecordService userPresentRecordService;
|
|
@PostMapping("/storyList")
|
// @ApiOperation(value = "配置学习类型选择故事", tags = {"题目管理"})
|
public R<PageInfo<TStory>> storyList(@RequestBody ChoiceStory query) {
|
PageInfo<TStory> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
|
QueryWrapper<TStory> wrapper = new QueryWrapper<>();
|
if (StringUtils.hasLength(query.getName())) {
|
wrapper.like("name", query.getName());
|
}
|
if (StringUtils.hasLength(query.getEnglish())) {
|
wrapper.like("english", query.getEnglish());
|
}
|
if (StringUtils.hasLength(query.getType())) {
|
wrapper.like("type", query.getType());
|
}
|
wrapper.eq("state", 1);
|
List<TStory> tStories = new ArrayList<>();
|
|
switch (query.getStoryType()) {
|
case 2:
|
List<TStory> list = storyService.list(wrapper);
|
List<TStory> tSubjects = new ArrayList<>(list);
|
res.setRecords(tSubjects);
|
res.setTotal(tSubjects.size());
|
return R.ok(res);
|
case 1:
|
// 查询出error字段不为空的数据
|
wrapper.isNotNull("error");
|
List<TStory> list1 = storyService.list(wrapper);
|
for (TStory tStory : list1) {
|
if (tStory.getError() != null && (!tStory.getError().isEmpty())) {
|
tStories.add(tStory);
|
}
|
}
|
res.setRecords(tStories);
|
res.setTotal(tStories.size());
|
return R.ok(res);
|
|
}
|
List<TStory> objects = new ArrayList<>();
|
res.setRecords(objects);
|
res.setTotal(0);
|
return R.ok(res);
|
}
|
|
@PostMapping("/subjectList")
|
// @ApiOperation(value = "配置学习类型选择题目", tags = {"题目管理"})
|
public R<PageInfo<TSubject>> subjectList(@RequestBody ChoiceSubject query) {
|
PageInfo<TSubject> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
|
QueryWrapper<TSubject> wrapper = new QueryWrapper<>();
|
if (StringUtils.hasLength(query.getName())) {
|
wrapper.like("name", query.getName());
|
}
|
if (StringUtils.hasLength(query.getEnglish())) {
|
wrapper.like("english", query.getEnglish());
|
}
|
if (StringUtils.hasLength(query.getType())) {
|
wrapper.like("type", query.getType());
|
}
|
wrapper.eq("state", 1);
|
switch (query.getStudyType()) {
|
case 1:
|
List<TSubject> list = subjectService.list(wrapper);
|
res.setRecords(list);
|
res.setTotal(list.size());
|
return R.ok(res);
|
case 2:
|
// 查询出error字段不为空的数据
|
wrapper.isNotNull("error");
|
List<TSubject> list1 = subjectService.list(wrapper);
|
List<TSubject> tSubjects = new ArrayList<>();
|
for (TSubject tSubject : list1) {
|
if (!tSubject.getError().isEmpty()) {
|
tSubjects.add(tSubject);
|
}
|
}
|
res.setRecords(tSubjects);
|
res.setTotal(tSubjects.size());
|
return R.ok(res);
|
case 3:
|
List<TSubject> list2 = subjectService.list(wrapper);
|
res.setRecords(list2);
|
res.setTotal(list2.size());
|
return R.ok(res);
|
case 4:
|
// 查询出error字段不为空的数据
|
wrapper.isNotNull("error");
|
List<TSubject> list3 = subjectService.list(wrapper);
|
List<TSubject> tSubjects3 = new ArrayList<>();
|
for (TSubject tSubject : list3) {
|
if (!tSubject.getError().isEmpty()) {
|
tSubjects3.add(tSubject);
|
}
|
}
|
res.setRecords(tSubjects3);
|
res.setTotal(tSubjects3.size());
|
return R.ok(res);
|
case 5:
|
List<TSubject> list4 = subjectService.list(wrapper);
|
res.setRecords(list4);
|
res.setTotal(list4.size());
|
return R.ok(res);
|
}
|
List<TSubject> objects = new ArrayList<>();
|
res.setRecords(objects);
|
res.setTotal(0);
|
return R.ok(res);
|
}
|
|
/**
|
* 添加学习配置
|
*
|
* @param dto
|
* @return
|
*/
|
@PostMapping("/addStudySet")
|
public R<Object> addStudySet(@RequestBody AddStudySetDTO dto) {
|
Integer week = dto.getWeek();
|
Integer day = dto.getDay();
|
Integer type = dto.getType();
|
TStudy one = studyService.getOne(new QueryWrapper<TStudy>()
|
.eq("week", week)
|
.eq("type", type));
|
one.setQuarter(dto.getQuarter());
|
one.setTitle(dto.getTitle());
|
studyService.updateById(one);
|
GameDTO game = dto.getGame();
|
StoryListenDTO storyListen = dto.getStoryListen();
|
if (day == 6) {
|
// 先判断有没有配置
|
TGame studyId = gameService.getOne(new QueryWrapper<TGame>()
|
.eq("studyId", one.getId())
|
.eq("week", week));
|
if (studyId != null) {
|
studyId.setWeek(dto.getWeek());
|
studyId.setStudyId(one.getId());
|
studyId.setCount(game.getCount());
|
studyId.setIntegral(game.getIntegral());
|
studyId.setTime(game.getTime());
|
studyId.setAnswerTime(game.getAnswerTime());
|
studyId.setAnswerIntegral(game.getAnswerIntegral());
|
studyId.setAnswerCount(game.getAnswerCount());
|
studyId.setRate(game.getRate());
|
studyId.setAnswerRate(game.getAnswerRate());
|
gameService.updateById(studyId);
|
} else {
|
TGame tGame = new TGame();
|
tGame.setWeek(dto.getWeek());
|
tGame.setAnswerRate(game.getAnswerRate());
|
tGame.setRate(game.getRate());
|
tGame.setStudyId(one.getId());
|
tGame.setCount(game.getCount());
|
tGame.setIntegral(game.getIntegral());
|
tGame.setTime(game.getTime());
|
tGame.setAnswerTime(game.getAnswerTime());
|
tGame.setAnswerIntegral(game.getAnswerIntegral());
|
tGame.setAnswerCount(game.getAnswerCount());
|
gameService.save(tGame);
|
}
|
|
} else if (day == 7) {
|
String story = storyListen.getStory();
|
TStoryListen studyId = storyListenService.getOne(new QueryWrapper<TStoryListen>()
|
.eq("studyId", one.getId())
|
.eq("week", week));
|
if (studyId != null) {
|
String sort = storyListen.getSort();
|
String lookStory = storyListen.getLookStory();
|
String lookSort = storyListen.getLookSort();
|
Integer integral = storyListen.getIntegral();
|
Integer lookIntegral = storyListen.getLookIntegral();
|
studyId.setLookIntegral(lookIntegral);
|
studyId.setIntegral(integral);
|
studyId.setWeek(week);
|
studyId.setStory(story);
|
studyId.setSort(sort);
|
studyId.setLookStory(lookStory);
|
studyId.setLookSort(lookSort);
|
studyId.setStudyId(one.getId());
|
storyListenService.updateById(studyId);
|
} else {
|
String sort = storyListen.getSort();
|
String lookStory = storyListen.getLookStory();
|
String lookSort = storyListen.getLookSort();
|
Integer integral = storyListen.getIntegral();
|
Integer lookIntegral = storyListen.getLookIntegral();
|
TStoryListen tStoryListen = new TStoryListen();
|
tStoryListen.setLookIntegral(lookIntegral);
|
tStoryListen.setIntegral(integral);
|
tStoryListen.setWeek(week);
|
tStoryListen.setStory(story);
|
tStoryListen.setSort(sort);
|
tStoryListen.setLookStory(lookStory);
|
tStoryListen.setLookSort(lookSort);
|
tStoryListen.setStudyId(one.getId());
|
storyListenService.save(tStoryListen);
|
}
|
} else {
|
// 删除原有数据
|
studyListenService.remove(new QueryWrapper<TStudyListen>()
|
.eq("studyId", one.getId())
|
.eq("week", week)
|
.eq("day", day));
|
List<StudyListenDTO> studyListen = dto.getStudyListen();
|
for (StudyListenDTO studyListenDTO : studyListen) {
|
TStudyListen tStudyListen = new TStudyListen();
|
tStudyListen.setStudyId(one.getId());
|
tStudyListen.setDay(day);
|
tStudyListen.setSubject(studyListenDTO.getSubject());
|
tStudyListen.setIntegral(studyListenDTO.getIntegral());
|
tStudyListen.setWeek(week);
|
tStudyListen.setIsVip(studyListenDTO.getIsVip());
|
studyListenService.save(tStudyListen);
|
}
|
studyLookService.remove(new QueryWrapper<TStudyLook>()
|
.eq("studyId", one.getId())
|
.eq("week", week)
|
.eq("day", day));
|
List<StudyLookDTO> studyLook = dto.getStudyLook();
|
for (StudyLookDTO studyLookDTO : studyLook) {
|
TStudyLook tStudyLook = new TStudyLook();
|
tStudyLook.setStudyId(one.getId());
|
tStudyLook.setDay(day);
|
tStudyLook.setSort(studyLookDTO.getSort());
|
tStudyLook.setSubject(studyLookDTO.getSubject());
|
tStudyLook.setIntegral(studyLookDTO.getIntegral());
|
tStudyLook.setWeek(week);
|
tStudyLook.setIsVip(studyLookDTO.getIsVip());
|
studyLookService.save(tStudyLook);
|
}
|
studyInductionService.remove(new QueryWrapper<TStudyInduction>()
|
.eq("studyId", one.getId())
|
.eq("week", week)
|
.eq("day", day));
|
List<StudyInductionDTO> studyInduction = dto.getStudyInduction();
|
for (StudyInductionDTO studyInductionDTO : studyInduction) {
|
TStudyInduction tStudyInduction = new TStudyInduction();
|
tStudyInduction.setStudyId(one.getId());
|
tStudyInduction.setDay(day);
|
tStudyInduction.setSubject(studyInductionDTO.getSubject());
|
tStudyInduction.setIntegral(studyInductionDTO.getIntegral());
|
tStudyInduction.setWeek(week);
|
tStudyInduction.setIsVip(studyInductionDTO.getIsVip());
|
studyInductionService.save(tStudyInduction);
|
}
|
studyAnswerService.remove(new QueryWrapper<TStudyAnswer>()
|
.eq("studyId", one.getId())
|
.eq("week", week)
|
.eq("day", day));
|
List<StudyAnswerDTO> studyAnswer = dto.getStudyAnswer();
|
for (StudyAnswerDTO studyAnswerDTO : studyAnswer) {
|
TStudyAnswer tStudyAnswer = new TStudyAnswer();
|
tStudyAnswer.setStudyId(one.getId());
|
tStudyAnswer.setDay(day);
|
tStudyAnswer.setIsAnswer(studyAnswerDTO.getIsAnswer());
|
tStudyAnswer.setSubject(studyAnswerDTO.getSubject());
|
tStudyAnswer.setAnswerSubject(studyAnswerDTO.getAnswerSubject());
|
tStudyAnswer.setIntegral(studyAnswerDTO.getIntegral());
|
tStudyAnswer.setWeek(week);
|
tStudyAnswer.setIsVip(studyAnswerDTO.getIsVip());
|
studyAnswerService.save(tStudyAnswer);
|
}
|
studyPairService.remove(new QueryWrapper<TStudyPair>()
|
.eq("studyId", one.getId())
|
.eq("week", week)
|
.eq("day", day));
|
List<StudyPairDTO> studyPair = dto.getStudyPair();
|
for (StudyPairDTO studyPairDTO : studyPair) {
|
TStudyPair tStudyPair = new TStudyPair();
|
tStudyPair.setStudyId(one.getId());
|
tStudyPair.setDay(day);
|
tStudyPair.setSubject(studyPairDTO.getSubject());
|
tStudyPair.setIntegral(studyPairDTO.getIntegral());
|
tStudyPair.setWeek(week);
|
tStudyPair.setIsVip(studyPairDTO.getIsVip());
|
studyPairService.save(tStudyPair);
|
}
|
}
|
return R.ok();
|
}
|
|
/**
|
* 添加周目
|
*
|
* @param dto
|
* @return
|
*/
|
@PostMapping("/addWeek")
|
public R<Object> addWeek(@RequestBody AddWeekDTO dto) {
|
TStudy one = studyService.getOne(new QueryWrapper<TStudy>()
|
.eq("week", dto.getWeek())
|
.eq("type", dto.getType()));
|
if (one != null) {
|
one.setType(dto.getType());
|
one.setWeek(dto.getWeek());
|
one.setTitle(dto.getTitle());
|
one.setQuarter(dto.getQuarter());
|
studyService.saveOrUpdate(one);
|
} else {
|
TStudy tStudy = new TStudy();
|
tStudy.setType(dto.getType());
|
tStudy.setWeek(dto.getWeek());
|
tStudy.setTitle(dto.getTitle());
|
tStudy.setQuarter(dto.getQuarter());
|
studyService.saveOrUpdate(tStudy);
|
}
|
return R.ok();
|
}
|
|
/**
|
* 学习类型列表查询
|
*
|
* @return
|
*/
|
@PostMapping("/getStudyList")
|
public R<List<StudyListVO>> getStudyList() {
|
List<StudyListVO> res = new ArrayList<>();
|
StudyListVO studyListVO = new StudyListVO();
|
List<TStudy> count = studyService.list(new QueryWrapper<TStudy>()
|
.eq("type", 1));
|
studyListVO.setWeeks(count.size());
|
|
List<TUserStudy> list7 = userStudyService.list(new QueryWrapper<TUserStudy>());
|
studyListVO.setCount(list7.size());
|
studyListVO.setName("听");
|
// 查询听类型有多少周目
|
res.add(studyListVO);
|
// 后续类型 不在1.0功能中
|
StudyListVO studyListVO1 = new StudyListVO();
|
studyListVO1.setWeeks(0);
|
studyListVO1.setCount(0);
|
studyListVO1.setName("说");
|
res.add(studyListVO1);
|
StudyListVO studyListVO2 = new StudyListVO();
|
studyListVO2.setWeeks(0);
|
studyListVO2.setCount(0);
|
studyListVO2.setName("认读");
|
res.add(studyListVO2);
|
StudyListVO studyListVO3 = new StudyListVO();
|
studyListVO3.setWeeks(0);
|
studyListVO3.setCount(0);
|
studyListVO3.setName("阅读");
|
res.add(studyListVO3);
|
StudyListVO studyListVO4 = new StudyListVO();
|
studyListVO4.setWeeks(0);
|
studyListVO4.setCount(0);
|
studyListVO4.setName("练习");
|
res.add(studyListVO4);
|
StudyListVO studyListVO5 = new StudyListVO();
|
studyListVO5.setWeeks(0);
|
studyListVO5.setCount(0);
|
studyListVO5.setName("智能互动问答");
|
res.add(studyListVO5);
|
StudyListVO studyListVO6 = new StudyListVO();
|
studyListVO6.setWeeks(0);
|
studyListVO6.setCount(0);
|
studyListVO6.setName("智能识别");
|
res.add(studyListVO6);
|
return R.ok(res);
|
}
|
|
|
/**
|
* 通过类型、周目、day查询学习配置
|
*
|
* @return
|
*/
|
@PostMapping("/getStudySet")
|
public R<StudyVO> getStudySet(@RequestBody StudyDTO dto) {
|
StudyVO res = new StudyVO();
|
List<TUserStudy> list7 = userStudyService.list(new QueryWrapper<TUserStudy>());
|
res.setCount(list7.size());
|
// 查询已有周目数量
|
int type = studyService.list(new QueryWrapper<TStudy>()
|
.eq("type", dto.getType())).size();
|
res.setWeeks(type);
|
List<TStudy> list8 = studyService.list(new QueryWrapper<TStudy>()
|
.eq("type", dto.getType())
|
.eq("week", dto.getWeek()));
|
if (!list8.isEmpty()) {
|
res.setQuarter(list8.get(0).getQuarter());
|
res.setTitle(list8.get(0).getTitle());
|
}
|
List<StudyListenVO> listenVOS = new ArrayList<>();
|
List<GameVO> gameVOS = new ArrayList<>();
|
List<StoryVO> storyVOS = new ArrayList<>();
|
List<StudyAnswerVO> answerVOS = new ArrayList<>();
|
List<StudyInductionVO> inductionVOS = new ArrayList<>();
|
List<StudyLookVO> lookVOS = new ArrayList<>();
|
List<StudyPairVO> pairVOS = new ArrayList<>();
|
// Integer type = dto.getType();
|
Integer week = dto.getWeek();
|
Integer day = dto.getDay();
|
// 根据类型 周目 day 查询对应数据
|
// 听音选图
|
List<TStudyListen> list = studyListenService.list(new QueryWrapper<TStudyListen>()
|
.eq("week", week)
|
.eq("day", day));
|
for (TStudyListen tStudyListen : list) {
|
StringBuilder temp = new StringBuilder();
|
StudyListenVO studyListenVO = new StudyListenVO();
|
if (StringUtils.hasLength(tStudyListen.getSubject())) {
|
for (String s : tStudyListen.getSubject().split(",")) {
|
TSubject byId = subjectService.getById(s);
|
temp.append(byId.getName()).append(",");
|
}
|
String string = temp.toString();
|
studyListenVO.setName(string.substring(0, string.length() - 1));
|
studyListenVO.setIntegral(tStudyListen.getIntegral());
|
studyListenVO.setSubject(tStudyListen.getSubject());
|
studyListenVO.setIsVip(tStudyListen.getIsVip());
|
listenVOS.add(studyListenVO);
|
}
|
|
}
|
// 看音选图
|
List<TStudyLook> list1 = studyLookService.list(new QueryWrapper<TStudyLook>()
|
.eq("week", week)
|
.eq("day", day)
|
);
|
for (TStudyLook tStudyLook : list1) {
|
int index = 0;
|
StringBuilder names = new StringBuilder();
|
StringBuilder sorts = new StringBuilder();
|
StudyLookVO studyLookVO1 = new StudyLookVO();
|
if (StringUtils.hasLength(tStudyLook.getSubject())) {
|
for (String s : tStudyLook.getSubject().split(",")) {
|
TSubject byId = subjectService.getById(s);
|
names.append(byId.getName()).append(",");
|
String[] split = tStudyLook.getSort().split(",");
|
String s1 = split[index];
|
sorts.append(s1).append(",");
|
index++;
|
}
|
String string = names.toString();
|
String string1 = sorts.toString();
|
studyLookVO1.setName(string.substring(0, string.length() - 1));
|
studyLookVO1.setSort(string1.substring(0, string1.length() - 1));
|
studyLookVO1.setIntegral(tStudyLook.getIntegral());
|
studyLookVO1.setSubject(tStudyLook.getSubject());
|
studyLookVO1.setIsVip(tStudyLook.getIsVip());
|
lookVOS.add(studyLookVO1);
|
}
|
|
}
|
// 归纳排除
|
List<TStudyInduction> list2 = studyInductionService.list(new QueryWrapper<TStudyInduction>()
|
.eq("week", week)
|
.eq("day", day)
|
);
|
for (TStudyInduction tStudyInduction : list2) {
|
StringBuilder names = new StringBuilder();
|
StudyInductionVO studyInductionVO = new StudyInductionVO();
|
if (StringUtils.hasLength(tStudyInduction.getSubject())) {
|
for (String s : tStudyInduction.getSubject().split(",")) {
|
String replace = s.replace("-", "");
|
TSubject byId = subjectService.getById(replace);
|
names.append(byId.getName()).append(",");
|
}
|
String string = names.toString();
|
studyInductionVO.setName(string.substring(0, string.length() - 1));
|
studyInductionVO.setIntegral(tStudyInduction.getIntegral());
|
studyInductionVO.setSubject(tStudyInduction.getSubject());
|
studyInductionVO.setIsVip(tStudyInduction.getIsVip());
|
inductionVOS.add(studyInductionVO);
|
}
|
|
}
|
// 有问有答
|
List<TStudyAnswer> list3 = studyAnswerService.list(new QueryWrapper<TStudyAnswer>()
|
.eq("week", week)
|
.eq("day", day));
|
for (TStudyAnswer tStudyAnswer : list3) {
|
StringBuilder names = new StringBuilder();
|
StudyAnswerVO studyAnswerVO = new StudyAnswerVO();
|
if (tStudyAnswer.getIsAnswer() != null) {
|
if (tStudyAnswer.getIsAnswer() == 1) {
|
if (tStudyAnswer.getSubject() != null) {
|
TSubject byId = subjectService.getById(tStudyAnswer.getSubject());
|
names.append(byId.getName()).append(",");
|
}
|
if (tStudyAnswer.getAnswerSubject() != null) {
|
TSubject byId1 = subjectService.getById(tStudyAnswer.getAnswerSubject());
|
names.append(byId1.getName()).append(",");
|
}
|
} else {
|
if (tStudyAnswer.getSubject() != null) {
|
TSubject byId = subjectService.getById(tStudyAnswer.getSubject());
|
names.append(byId.getName()).append(",");
|
}
|
if (tStudyAnswer.getAnswerSubject() != null) {
|
TSubject byId1 = subjectService.getById(tStudyAnswer.getAnswerSubject());
|
names.append(byId1.getName()).append(",");
|
}
|
}
|
}
|
if (StringUtils.hasLength(names)) {
|
String string = names.toString();
|
studyAnswerVO.setName(string.substring(0, string.length() - 1));
|
studyAnswerVO.setIntegral(tStudyAnswer.getIntegral());
|
studyAnswerVO.setIsVip(tStudyAnswer.getIsVip());
|
studyAnswerVO.setIsAnswer(tStudyAnswer.getIsAnswer());
|
studyAnswerVO.setSubject(tStudyAnswer.getSubject() + "," + tStudyAnswer.getAnswerSubject());
|
answerVOS.add(studyAnswerVO);
|
}
|
|
}
|
// 音图相配
|
List<TStudyPair> list4 = studyPairService.list(new QueryWrapper<TStudyPair>()
|
.eq("week", week)
|
.eq("day", day)
|
);
|
for (TStudyPair tStudyPair : list4) {
|
StringBuilder names = new StringBuilder();
|
StudyPairVO studyPairVO = new StudyPairVO();
|
if (StringUtils.hasLength(tStudyPair.getSubject())) {
|
for (String s : tStudyPair.getSubject().split(",")) {
|
TSubject byId = subjectService.getById(s);
|
names.append(byId.getName()).append(",");
|
}
|
String string = names.toString();
|
studyPairVO.setName(string.substring(0, string.length() - 1));
|
studyPairVO.setIntegral(tStudyPair.getIntegral());
|
studyPairVO.setSubject(tStudyPair.getSubject());
|
studyPairVO.setIsVip(tStudyPair.getIsVip());
|
pairVOS.add(studyPairVO);
|
}
|
}
|
List<TGame> list5 = gameService.list(new QueryWrapper<TGame>()
|
.eq("week", week));
|
for (TGame tGame : list5) {
|
GameVO gameVO = new GameVO();
|
gameVO.setIntegral(tGame.getIntegral());
|
gameVO.setTime(tGame.getTime());
|
gameVO.setCount(tGame.getCount());
|
gameVO.setAnswerTime(tGame.getAnswerTime());
|
gameVO.setAnswerIntegral(tGame.getAnswerIntegral());
|
gameVO.setAnswerCount(tGame.getAnswerCount());
|
gameVO.setRate(tGame.getRate());
|
gameVO.setAnswerRate(tGame.getAnswerRate());
|
gameVOS.add(gameVO);
|
}
|
List<TStoryListen> list6 = storyListenService.list(new QueryWrapper<TStoryListen>()
|
.eq("week", week));
|
for (TStoryListen tStory : list6) {
|
StoryVO storyVO = new StoryVO();
|
storyVO.setStory(tStory.getStory());
|
storyVO.setLookStory(tStory.getLookStory());
|
StringBuilder names = new StringBuilder();
|
StringBuilder names1 = new StringBuilder();
|
StringBuilder sort = new StringBuilder();
|
StringBuilder sort1 = new StringBuilder();
|
if (StringUtils.hasLength(tStory.getStory())) {
|
for (String s : tStory.getStory().split(",")) {
|
TStory byId = storyService.getById(s);
|
names.append(byId.getName()).append(",");
|
}
|
}
|
if (StringUtils.hasLength(tStory.getLookStory())) {
|
for (String s : tStory.getLookStory().split(",")) {
|
TStory byId = storyService.getById(s);
|
names1.append(byId.getName()).append(",");
|
}
|
}
|
if (StringUtils.hasLength(tStory.getSort())) {
|
for (String s : tStory.getSort().split(",")) {
|
sort.append(s).append(",");
|
}
|
}
|
if (StringUtils.hasLength(tStory.getLookSort())) {
|
for (String s : tStory.getLookSort().split(",")) {
|
sort1.append(s).append(",");
|
}
|
}
|
if (StringUtils.hasLength(names)) {
|
storyVO.setName(names.substring(0, names.length() - 1));
|
|
}
|
if (StringUtils.hasLength(sort)) {
|
storyVO.setSort(sort.substring(0, sort.length() - 1));
|
|
}
|
if (StringUtils.hasLength(names1)) {
|
storyVO.setLookName(names1.substring(0, names1.length() - 1));
|
|
}
|
if (StringUtils.hasLength(sort1)) {
|
storyVO.setLookSort(sort1.substring(0, sort1.length() - 1));
|
}
|
storyVO.setIntegral(tStory.getIntegral());
|
storyVO.setLookIntegral(tStory.getLookIntegral());
|
storyVOS.add(storyVO);
|
}
|
res.setAnswer(answerVOS);
|
res.setPair(pairVOS);
|
res.setListen(listenVOS);
|
res.setLook(lookVOS);
|
res.setInduction(inductionVOS);
|
res.setGame(gameVOS);
|
res.setStory(storyVOS);
|
return R.ok(res);
|
}
|
|
|
/**
|
* 可兑换商品推荐
|
*/
|
@GetMapping("/goodRecommend")
|
@ApiOperation(value = "可兑换商品推荐", tags = {"学习端-首页"})
|
public R<List<TGoodsVO>> goodRecommend() {
|
return R.ok(goodsClient.goodRecommend().getData());
|
}
|
|
/**
|
* 获取正确及错误提示音效
|
*/
|
@GetMapping("/promptVoice")
|
@ApiOperation(value = "获取正确及错误提示音效", tags = {"学习端-首页"})
|
public R<TSysSet> promptVoice() {
|
return R.ok(managementClient.promptVoice().getData());
|
}
|
|
/**
|
* 首次页面加载时调用,获取学习进度及学习时长等信息
|
*
|
* @param week 周目
|
*/
|
@GetMapping("/studySchedule")
|
@ApiOperation(value = "获取用户学习进度", tags = {"学习端-首页"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true)
|
})
|
public R<TUserStudy> studySchedule(@RequestParam Integer week) {
|
LoginUserParent loginStudy = tokenService.getLoginUserStudy();
|
if (null == loginStudy) {
|
return R.tokenError("登录失效!");
|
}
|
Integer userid = loginStudy.getUserid();
|
TUserStudy studyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, loginStudy.getUserid())
|
.eq(TUserStudy::getDisabled, 0).one();
|
if (null != studyRecord) {
|
// 计算当前周 day 1-5的总进度
|
int computeSchedule = studyService.computeSchedule(studyRecord, week);
|
studyRecord.setComputeSchedule(computeSchedule);
|
// 学习时长格式转换
|
Integer todayStudy = studyRecord.getTodayStudy();
|
studyRecord.setTodayStudy(Math.round((float) todayStudy / 3600));
|
Integer weekStudy = studyRecord.getWeekStudy();
|
studyRecord.setWeekStudy(Math.round((float) weekStudy / 3600));
|
Integer monthStudy = studyRecord.getMonthStudy();
|
studyRecord.setMonthStudy(Math.round((float) monthStudy / 3600));
|
// 总时长还需计算上游戏测试成绩时长
|
List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, userid)
|
.eq(TGameRecord::getDisabled, 0).list();
|
int sum = gameRecordList.stream().map(TGameRecord::getUseTime).mapToInt(Integer::intValue).sum();
|
Integer totalStudy = studyRecord.getTotalStudy();
|
studyRecord.setTotalStudy(Math.round((float) (totalStudy + sum) / 3600));
|
studyRecord = studyService.studySchedule(studyRecord, week);
|
}
|
return R.ok(studyRecord);
|
}
|
|
/**
|
* 查询周目列表
|
*
|
* @param type 所属类型
|
* @param quarter 季度
|
*/
|
@GetMapping("/weekList")
|
@ApiOperation(value = "根据季度获取周目列表 ", tags = {"学习端-首页"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "所属类型 1.0只有类型听 传1", name = "type", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "季度 首次进入季度quarter默认传1", name = "quarter", dataType = "Integer", required = true)
|
})
|
public R<List<StudyWeekDTO>> weekList(@RequestParam(defaultValue = "1") Integer type, @RequestParam Integer quarter) {
|
LoginUserParent loginUserStudy = tokenService.getLoginUserStudy();
|
if (null == loginUserStudy) {
|
return R.tokenError("登录失效!");
|
}
|
List<StudyWeekDTO> result = studyService.weekList(type, quarter, loginUserStudy.getUserid());
|
return R.ok(result);
|
}
|
|
/**
|
* 获取在线时间赠送积分信息
|
*/
|
@GetMapping("/onlineDuration")
|
@ApiOperation(value = "获取在线时间赠送积分信息(单位分钟)", tags = {"学习端-首页"})
|
public R<String> onlineDuration() {
|
TSysSet sysSet = managementClient.promptVoice().getData();
|
if (null == sysSet) {
|
throw new GlobalException("获取在线时间赠送积分信息失败!");
|
}
|
// 返回在线时长
|
return R.ok(sysSet.getTime());
|
}
|
|
/**
|
* 根据在线时间赠送积分(定时任务)
|
*/
|
@GetMapping("/giveIntegral")
|
@ApiOperation(value = "根据在线时间赠送积分(定时任务)", tags = {"学习端-首页"})
|
public R<Boolean> giveIntegral() {
|
LoginUserParent loginStudy = tokenService.getLoginUserStudy();
|
if (null == loginStudy) {
|
return R.tokenError("登录失效!");
|
}
|
TSysSet sysSet = managementClient.promptVoice().getData();
|
if (null == sysSet) {
|
throw new GlobalException("获取在线时间赠送积分信息失败!");
|
}
|
String integral = sysSet.getIntegral();
|
// 计算时间间隔
|
TUserPresentRecord record = userPresentRecordService.lambdaQuery()
|
.eq(TUserPresentRecord::getUserId, loginStudy.getUserid())
|
.orderByDesc(TUserPresentRecord::getPresentTime)
|
.eq(TUserPresentRecord::getIsDelete, 0).last("limit 1").one();
|
boolean result = true;
|
TUser user = userService.lambdaQuery().eq(TUser::getId, loginStudy.getUserid())
|
.eq(TUser::getDisabled, 0).one();
|
if (null == record) {
|
// 赠送积分
|
result = userService.lambdaUpdate().set(TUser::getIntegral, user.getIntegral() + Integer.parseInt(integral))
|
.eq(TUser::getId, loginStudy.getUserid()).update();
|
// 添加赠送积分记录
|
TUserPresentRecord data = new TUserPresentRecord();
|
data.setUserId(loginStudy.getUserid());
|
data.setPresentTime(new Date());
|
data.setIsDelete(0);
|
result = result && userPresentRecordService.save(data);
|
} else {
|
if (System.currentTimeMillis() - record.getPresentTime().getTime() >= (long) Integer.parseInt(sysSet.getTime()) * 60 * 1000) {
|
// 赠送积分
|
result = userService.lambdaUpdate()
|
.set(TUser::getIntegral, user.getIntegral() + Integer.parseInt(integral))
|
.eq(TUser::getId, loginStudy.getUserid()).update();
|
// 添加赠送积分记录
|
TUserPresentRecord data = new TUserPresentRecord();
|
data.setUserId(loginStudy.getUserid());
|
data.setPresentTime(new Date());
|
data.setIsDelete(0);
|
result = result && userPresentRecordService.save(data);
|
// 生成积分明细
|
TIntegralRecord integralRecord = new TIntegralRecord();
|
integralRecord.setIntegral(sysSet.getIntegral());
|
integralRecord.setMethod(Constants.ONLINE_DURATION);
|
integralRecord.setUserId(loginStudy.getUserid());
|
result = result && integralRecordService.save(integralRecord);
|
}
|
}
|
return R.ok(result);
|
}
|
|
/**
|
* 进入题组后,获取题组学习进度信息
|
*
|
* @param week 周目
|
* @param day 所属day
|
*/
|
@GetMapping("/teamSchedule")
|
@ApiOperation(value = "获取题组学习进度信息", tags = {"学习端-题目"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "类型(1:听音选图,2:看图选音,3:归纳排除,4:有问有答,5:音图相配)", name = "type", dataType = "Integer", required = true)
|
})
|
public R<SubjectRecordResultVO> teamSchedule(@RequestParam Integer week, @RequestParam Integer day,
|
@RequestParam Integer type) {
|
LoginUserParent loginStudy = tokenService.getLoginUserStudy();
|
if (null == loginStudy) {
|
return R.tokenError("登录失效!");
|
}
|
TSubjectRecord subjectRecord = subjectRecordService.lambdaQuery().eq(TSubjectRecord::getWeek, week)
|
.eq(TSubjectRecord::getDay, day)
|
.eq(TSubjectRecord::getType, type)
|
.eq(TSubjectRecord::getUserId, loginStudy.getUserid())
|
.eq(TSubjectRecord::getDisabled, 0).one();
|
// 返回结果
|
SubjectRecordResultVO result;
|
if (null != subjectRecord) {
|
subjectRecordService.lambdaUpdate().set(TSubjectRecord::getDisabled, 1)
|
.eq(TSubjectRecord::getId, subjectRecord.getId()).update();
|
// 题组id
|
List<Integer> teamIds = Arrays.stream(subjectRecord.getBeforeSubject().split(",")).map(Integer::parseInt)
|
.collect(Collectors.toList());
|
// 题目id
|
List<Integer> topicIds = Arrays.stream(subjectRecord.getCompleteSubject().split(",")).map(Integer::parseInt)
|
.collect(Collectors.toList());
|
result = new SubjectRecordResultVO(teamIds, topicIds, subjectRecord.getAnswerNumber(), subjectRecord.getCorrectNumber());
|
} else {
|
result = null;
|
}
|
return R.ok(result);
|
}
|
|
/**
|
* 退出学习,记录学习进度、当日学习时长...
|
*/
|
@PostMapping("/exitLearning")
|
@ApiOperation(value = "退出学习(记录学习进度等信息)", tags = {"学习端-题目"})
|
public R<Boolean> exitLearning(@RequestBody ExitLearnVO exitLearn) {
|
LoginUserParent loginStudy = tokenService.getLoginUserStudy();
|
if (null == loginStudy) {
|
return R.tokenError("登录失效!");
|
}
|
Integer userid = loginStudy.getUserid();
|
// 判断当前week和day是否已完成学习
|
TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userid)
|
.eq(TUserStudy::getDisabled, 0).one();
|
if (null == userStudy) {
|
userStudy = createUserStudy(userid);
|
}
|
Integer quarter = exitLearn.getQuarter();
|
Integer week = exitLearn.getWeek();
|
Integer day = exitLearn.getDay();
|
int schedule = exitLearn.getSchedule() == null ? 0 : exitLearn.getSchedule();
|
if (userStudy.getWeek().equals(exitLearn.getWeek()) && userStudy.getDay().equals(exitLearn.getDay())) {
|
// 计算完成率
|
Integer type = exitLearn.getType();
|
// 更新用户学习完成率
|
if (Constants.ONE.equals(type)) {
|
// 听音选图
|
List<TStudyListen> studyListens = studyListenService.listenSelectPicture(quarter, week, day);
|
int item = 0;
|
for (TStudyListen studyListen : studyListens) {
|
item += studyListen.getSubject().split(",").length;
|
}
|
int i = (int) ((double) (exitLearn.getTopicIds().split(",").length / item) * 100);
|
if (i > userStudy.getListen()) {
|
userStudy.setListen(100 - i);
|
}
|
} else if (Constants.TWO.equals(type)) {
|
// 看图选音
|
List<TStudyLook> lookList = studyLookService.pictureSelectVoice(quarter, week, day);
|
if (!lookList.isEmpty()) {
|
int item = lookList.size();
|
int i = (int) ((double) (schedule / item)) * 100;
|
if (i > userStudy.getLook()) {
|
userStudy.setLook(100 - i);
|
}
|
}
|
} else if (Constants.THREE.equals(type)) {
|
// 归纳排除
|
List<TStudyInduction> inductionList = studyInductionService.induceExclude(quarter, week, day);
|
if (!inductionList.isEmpty()) {
|
int item = inductionList.size();
|
int i = (int) ((double) (schedule / item)) * 100;
|
if (i > userStudy.getInduction()) {
|
userStudy.setInduction(100 - i);
|
}
|
}
|
} else if (Constants.FOUR.equals(type)) {
|
// 有问有答
|
List<TStudyAnswer> answerList = studyAnswerService.questionsAndAnswers(quarter, week, day);
|
if (answerList.size() % Constants.TWO == Constants.ZERO) {
|
int i = (int) ((double) (schedule / (answerList.size() / 2))) * 100;
|
if (i > userStudy.getAnswer()) {
|
userStudy.setAnswer(100 - i);
|
}
|
}
|
} else if (Constants.FIVE.equals(type)) {
|
// 音图相配
|
List<TStudyPair> pairList = studyPairService.pictureMateVoice(quarter, week, day);
|
int item = pairList.size();
|
int i = (int) ((double) (schedule / item)) * 100;
|
if (i > userStudy.getPair()) {
|
userStudy.setPair(100 - i);
|
}
|
}
|
}
|
// 学习时长更新
|
userStudy.setTotalStudy(userStudy.getTotalStudy() + exitLearn.getStudyTime());
|
userStudy.setTodayStudy(userStudy.getTodayStudy() + exitLearn.getStudyTime());
|
userStudy.setWeekStudy(userStudy.getWeekStudy() + exitLearn.getStudyTime());
|
userStudy.setMonthStudy(userStudy.getMonthStudy() + exitLearn.getStudyTime());
|
userStudyService.updateById(userStudy);
|
return R.ok(subjectRecordService.exitLearning(exitLearn, userid));
|
}
|
|
/**
|
* 退出游戏/故事学习
|
*/
|
@GetMapping("/exitGameOrStory")
|
@ApiOperation(value = "退出游戏/故事学习", tags = {"学习端-题目"})
|
public R<Boolean> exitGameOrStory(@RequestParam("studyTime") Integer studyTime) {
|
LoginUserParent loginStudy = tokenService.getLoginUserStudy();
|
if (null == loginStudy) {
|
return R.tokenError("登录失效!");
|
}
|
Integer userid = loginStudy.getUserid();
|
// 判断当前week和day是否已完成学习
|
TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userid)
|
.eq(TUserStudy::getDisabled, 0).one();
|
if (null == userStudy) {
|
userStudy = createUserStudy(userid);
|
}
|
// 学习时长更新
|
userStudy.setTotalStudy(userStudy.getTotalStudy() + studyTime);
|
userStudy.setTodayStudy(userStudy.getTodayStudy() + studyTime);
|
userStudy.setWeekStudy(userStudy.getWeekStudy() + studyTime);
|
userStudy.setMonthStudy(userStudy.getMonthStudy() + studyTime);
|
return R.ok(userStudyService.updateById(userStudy));
|
}
|
|
/**
|
* 自主学习1-听音选图
|
*
|
* @param week 周目
|
* @param day 所属day
|
*/
|
@GetMapping("/listenSelectPicture")
|
@ApiOperation(value = "自主学习1-听音选图", tags = {"学习端-听-自主学习"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "所属季度", name = "quarter", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
|
})
|
public R<StudyListenResultVO> listenSelectPicture(@RequestParam Integer quarter, @RequestParam Integer week,
|
@RequestParam Integer day) {
|
// 判断当前登录用户是否为 会员
|
Boolean isVip = userService.isVip();
|
// 非会员只能查看非会员题目,会员可以查看所有题目
|
List<TStudyListen> studyListens = studyListenService.listenSelectPicture(quarter, week, day);
|
for (TStudyListen studyListen : studyListens) {
|
if (studyListen.getIsVip() == 0) {
|
// 需要会员查看
|
if (!isVip) {
|
// 不是会员
|
return R.vipError("以下内容仅限会员查看,请通过家长端成为会员!");
|
}
|
}
|
}
|
return R.ok(studyService.listenSelectPicture(week, day, studyListens));
|
}
|
|
/**
|
* 自主学习2-看图选音
|
*
|
* @param week 周目
|
* @param day 所属day
|
*/
|
@GetMapping("/pictureSelectVoice")
|
@ApiOperation(value = "自主学习2-看图选音", tags = {"学习端-听-自主学习"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "所属季度", name = "quarter", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
|
})
|
public R<StudyLookResultVO> pictureSelectVoice(@RequestParam Integer quarter, @RequestParam Integer week,
|
@RequestParam Integer day) {
|
// 判断当前登录用户是否为 会员
|
Boolean isVip = userService.isVip();
|
// 非会员只能查看非会员题目,会员可以查看所有题目
|
List<TStudyLook> lookList = studyLookService.pictureSelectVoice(quarter, week, day);
|
for (TStudyLook studyListen : lookList) {
|
if (studyListen.getIsVip() == 0) {
|
// 需要会员查看
|
if (!isVip) {
|
// 不是会员
|
return R.vipError("以下内容仅限会员查看,请通过家长端成为会员!");
|
}
|
}
|
}
|
return R.ok(studyService.pictureSelectVoice(week, day, lookList));
|
}
|
|
/**
|
* 自主学习3-归纳排除
|
*
|
* @param week 周目
|
* @param day 所属day
|
*/
|
@GetMapping("/induceExclude")
|
@ApiOperation(value = "自主学习3-归纳排除", tags = {"学习端-听-自主学习"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "所属季度", name = "quarter", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
|
})
|
public R<StudyInductionResultVO> induceExclude(@RequestParam Integer quarter, @RequestParam Integer week,
|
@RequestParam Integer day) {
|
// 判断当前登录用户是否为 会员
|
Boolean isVip = userService.isVip();
|
// 非会员只能查看非会员题目,会员可以查看所有题目
|
List<TStudyInduction> inductionList = studyInductionService.induceExclude(quarter, week, day);
|
for (TStudyInduction studyListen : inductionList) {
|
if (studyListen.getIsVip() == 0) {
|
// 需要会员查看
|
if (!isVip) {
|
// 不是会员
|
return R.vipError("以下内容仅限会员查看,请通过家长端成为会员!");
|
}
|
}
|
}
|
return R.ok(studyService.induceExclude(week, day, inductionList));
|
}
|
|
/**
|
* 自主学习4-有问有答
|
*
|
* @param week 周目
|
* @param day 所属day
|
*/
|
@GetMapping("/questionsAndAnswers")
|
@ApiOperation(value = "自主学习4-有问有答", tags = {"学习端-听-自主学习"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "所属季度", name = "quarter", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
|
})
|
public R<StudyAnswerResultVO> questionsAndAnswers(@RequestParam Integer quarter, @RequestParam Integer week,
|
@RequestParam Integer day) {
|
// 判断当前登录用户是否为 会员
|
Boolean isVip = userService.isVip();
|
// 非会员只能查看非会员题目,会员可以查看所有题目
|
List<TStudyAnswer> answerList = studyAnswerService.questionsAndAnswers(quarter, week, day);
|
for (TStudyAnswer studyListen : answerList) {
|
if (studyListen.getIsVip() == 0) {
|
// 需要会员查看
|
if (!isVip) {
|
// 不是会员
|
return R.vipError("以下内容仅限会员查看,请通过家长端成为会员!");
|
}
|
}
|
}
|
return R.ok(studyService.questionsAndAnswers(week, day, answerList));
|
}
|
|
/**
|
* 自主学习5-音图相配
|
*
|
* @param week 周目
|
* @param day 所属day
|
*/
|
@GetMapping("/pictureMateVoice")
|
@ApiOperation(value = "自主学习5-音图相配", tags = {"学习端-听-自主学习"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "所属季度", name = "quarter", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
|
})
|
public R<StudyPairResultVO> pictureMateVoice(@RequestParam Integer quarter, @RequestParam Integer week,
|
@RequestParam Integer day) {
|
// 判断当前登录用户是否为 会员
|
Boolean isVip = userService.isVip();
|
// 非会员只能查看非会员题目,会员可以查看所有题目
|
List<TStudyPair> pairList = studyPairService.pictureMateVoice(quarter, week, day);
|
for (TStudyPair pair : pairList) {
|
if (pair.getIsVip() == 0) {
|
// 需要会员查看
|
if (!isVip) {
|
// 不是会员
|
return R.vipError("以下内容仅限会员查看,请通过家长端成为会员!");
|
}
|
}
|
}
|
return R.ok(studyService.pictureMateVoice(week, day, pairList));
|
}
|
|
/**
|
* 学习完成,生成学习记录,积分明细记录
|
*
|
* @param completeStudy 完成学习信息
|
*/
|
@PostMapping("/completeLearning")
|
@ApiOperation(value = "完成学习", tags = {"学习端-听-自主学习"})
|
public R<Integer> completeLearning(@RequestBody CompleteStudyDTO completeStudy) {
|
LoginUserParent userStudy = tokenService.getLoginUserStudy();
|
if (null == userStudy) {
|
return R.tokenError("登录失效!");
|
}
|
// 登录用户id
|
Integer userId = userStudy.getUserid();
|
// 判断是否已完成该题组
|
boolean update = true;
|
List<String> studyIds = Arrays.stream(completeStudy.getStudyIds().split(","))
|
.collect(Collectors.toList());
|
Integer type = completeStudy.getType();
|
// 可获取的总积分数量以及获取用户该学习已获取的积分数量,并计算本次可获取的剩余积分数量
|
int sum = studyService.computeTotalIntegral(studyIds, type, completeStudy.getAccuracy());
|
// 用户已获取的积分数量
|
int obtainedIntegral;
|
List<TUserStudyRecord> list = studyRecordService.lambdaQuery()
|
.eq(TUserStudyRecord::getQuarter, completeStudy.getQuarter())
|
.eq(TUserStudyRecord::getWeek, completeStudy.getWeek())
|
.eq(TUserStudyRecord::getDay, completeStudy.getDay())
|
.eq(TUserStudyRecord::getType, 0)
|
.eq(TUserStudyRecord::getStudyType, completeStudy.getType())
|
.eq(TUserStudyRecord::getUserId, userId).list();
|
if (list.isEmpty()) {
|
obtainedIntegral = 0;
|
} else {
|
obtainedIntegral = list.stream().map(TUserStudyRecord::getObtainedIntegral)
|
.mapToInt(Integer::intValue).sum();
|
}
|
// 计算本次可获取积分数量
|
if (sum > obtainedIntegral) {
|
int integral = sum - obtainedIntegral;
|
// 获取user详细信息,改变积分
|
TUser user = userService.getById(userId);
|
int i = user.getIntegral() + integral;
|
update = userService.lambdaUpdate().eq(TUser::getId, userId).set(TUser::getIntegral, i).update();
|
// 生成积分明细记录
|
TIntegralRecord integralRecord = new TIntegralRecord();
|
integralRecord.setIntegral(String.valueOf(integral));
|
integralRecord.setMethod(Constants.COMPLETE_LEARNING);
|
integralRecord.setUserId(userId);
|
update = update && integralRecordService.save(integralRecord);
|
// 生成学习完成记录
|
TUserStudyRecord record = new TUserStudyRecord();
|
record.setUserId(userId);
|
record.setQuarter(completeStudy.getQuarter());
|
record.setWeek(completeStudy.getWeek());
|
record.setDay(completeStudy.getDay());
|
// 学习类型
|
record.setStudyType(completeStudy.getType());
|
record.setObtainedIntegral(integral);
|
record.setType(Constants.ZERO);
|
update = update && studyRecordService.save(record);
|
}
|
// 更改学习记录
|
TUserStudy userStudyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
|
.eq(TUserStudy::getDisabled, 0).one();
|
if (null == userStudyRecord) {
|
userStudyRecord = createUserStudy(userId);
|
}
|
Boolean updateStudyRecord = userStudyService.exchangeStudyRecord(userStudyRecord, userId, completeStudy);
|
return R.ok(sum > obtainedIntegral ? sum - obtainedIntegral : 0);
|
}
|
|
/**
|
* 自主游戏1-超级听力
|
*
|
* @param difficulty 难度(0入门、1中级、2困难)
|
* @param week 所属周目
|
*/
|
@GetMapping("/gameHearing")
|
@ApiOperation(value = "自主游戏1-超级听力", tags = {"学习端-听-自主游戏"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "季度", name = "quarter", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "难度(0入门、1中级、2困难)", name = "difficulty", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
|
})
|
public R<StudyGameResultVO> gameHearing(@RequestParam Integer quarter, @RequestParam Integer difficulty,
|
@RequestParam Integer week) {
|
LoginUserParent userStudy = tokenService.getLoginUserStudy();
|
if (null == userStudy) {
|
return R.tokenError("登录失效!");
|
}
|
Integer[] array = {0, 1, 2};
|
if (!Arrays.stream(array).collect(Collectors.toList()).contains(difficulty)) {
|
throw new GlobalException("请选择符合规则的游戏难度!");
|
}
|
TGame game = gameService.gameHearing(quarter, week);
|
if (null == game) {
|
throw new GlobalException("当前季度该周目暂无配置游戏数据!");
|
}
|
game.setIntegral(game.getIntegral().split(",")[difficulty]);
|
game.setTime(game.getTime().split(",")[difficulty]);
|
// 检验是否完成难度
|
studyService.checkDifficulty(difficulty, week, game, userStudy.getUserid());
|
List<String> subjectId = getSubjectId(week);
|
List<String> newSubjectId = subjectId.stream().map(data -> {
|
if (data.startsWith(Constants.REDUCE)) {
|
data = data.replace(Constants.REDUCE, Constants.EMPTY_STR);
|
}
|
return data;
|
}).distinct().collect(Collectors.toList());
|
// 判断周目下题目是否足够
|
if (newSubjectId.size() < game.getCount()) {
|
throw new GlobalException("当前周目下day1 - day5题目不足!");
|
}
|
// 根据游戏设置数量获取图片及语音
|
List<String> subjectData = getData(game, newSubjectId, 1);
|
List<TSubject> subjectList = getSubjectList(subjectData);
|
return R.ok(new StudyGameResultVO(game, subjectList));
|
}
|
|
/**
|
* 自主游戏2-超级记忆
|
*
|
* @param quarter 季度
|
* @param week 所属周目
|
*/
|
@GetMapping("/gameMemory")
|
@ApiOperation(value = "自主游戏2-超级记忆", tags = {"学习端-听-自主游戏"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "季度", name = "quarter", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
|
})
|
public R<StudyGameMemoryVO> gameMemory(@RequestParam Integer quarter, @RequestParam Integer week) {
|
LoginUserParent userStudy = tokenService.getLoginUserStudy();
|
if (null == userStudy) {
|
return R.tokenError("登录失效!");
|
}
|
TGame game = gameService.gameHearing(quarter, week);
|
if (null == game) {
|
throw new GlobalException("当前季度该周目暂无配置游戏数据!");
|
}
|
List<String> subjectId = getSubjectId(week);
|
List<String> subjectData = getSubjectData(game, subjectId);
|
List<TSubject> subjectList = getSubjectList(subjectData);
|
// 返回数据
|
List<GameMemoryPhotoVO> photoList = new ArrayList<>();
|
List<GameMemoryVoiceVO> voiceList = new ArrayList<>();
|
for (TSubject tSubject : subjectList) {
|
photoList.add(new GameMemoryPhotoVO(tSubject.getId(), tSubject.getImg()));
|
voiceList.add(new GameMemoryVoiceVO(tSubject.getId(), tSubject.getCorrect()));
|
}
|
// 校验超级听力是否通过
|
// studyService.checkClearance(game,userStudy.getUserid());
|
// 框架记忆数量翻倍,前端需要根据数量画格子
|
game.setAnswerCount(game.getAnswerCount() * 2);
|
return R.ok(new StudyGameMemoryVO(game, photoList, voiceList));
|
}
|
|
private List<String> getSubjectData(TGame game, List<String> subjectId) {
|
List<String> newSubjectId = subjectId.stream().map(data -> {
|
if (data.startsWith(Constants.REDUCE)) {
|
data = data.replace(Constants.REDUCE, Constants.EMPTY_STR);
|
}
|
return data;
|
}).distinct().collect(Collectors.toList());
|
// 判断周目下题目是否足够
|
if (newSubjectId.size() < game.getAnswerCount()) {
|
throw new GlobalException("当前周目下day1 - day5题目不足!");
|
}
|
// 根据游戏设置数量获取图片及语音
|
return getData(game, newSubjectId, 2);
|
}
|
|
private List<String> getData(TGame game, List<String> newSubjectId, int num) {
|
List<String> subjectData = new ArrayList<>();
|
Random random = new Random();
|
// 获取列表大小
|
int dataSize = newSubjectId.size();
|
// 生成随机索引并获取数据
|
int index;
|
if (1 == num) {
|
index = game.getCount();
|
} else {
|
index = game.getAnswerCount();
|
}
|
for (int i = 0; i < index; i++) {
|
// 生成随机索引
|
int randomIndex = random.nextInt(dataSize);
|
// 获取对应的数据并加入结果列表
|
subjectData.add(newSubjectId.get(randomIndex));
|
newSubjectId.remove(randomIndex);
|
dataSize = newSubjectId.size();
|
}
|
return subjectData;
|
}
|
|
private List<TSubject> getSubjectList(List<String> subjectData) {
|
List<TSubject> subjectList = new ArrayList<>();
|
for (String subjectDatum : subjectData) {
|
if (subjectDatum.startsWith("-")) {
|
subjectDatum = subjectDatum.replace("-", "");
|
}
|
TSubject subject = subjectService.lambdaQuery().eq(TSubject::getId, subjectDatum)
|
.eq(TSubject::getState, 1).one();
|
subjectList.add(subject);
|
}
|
return subjectList;
|
}
|
|
/**
|
* 自主游戏完成
|
* 记录游戏测试成绩
|
*
|
* @param completeStudy 学习信息
|
*/
|
@PostMapping("/gameAchievement")
|
@ApiOperation(value = "完成游戏-记录游戏测试成绩", tags = {"学习端-听-自主游戏"})
|
public R<Integer> gameAchievement(@RequestBody CompleteGameDTO completeStudy) {
|
LoginUserParent loginUserStudy = tokenService.getLoginUserStudy();
|
if (null == loginUserStudy) {
|
return R.tokenError("登录失效!");
|
}
|
/*
|
* 游戏测试需要根据正确率计算本次测试可获得积分
|
* 并且需要判断如果该游戏用户已获取一部分积分,再次测试后正确率增长,只能获取高于上次正确率的部分积分
|
* 例如:游戏配置的积分是100,他的正确率是50%那么拿50分,下次他再玩这个游戏 正确率是60% 那么他该获得60分 但是上次已经拿了50 所以这次就只给他加10积分
|
*/
|
Integer userid = loginUserStudy.getUserid();
|
TGame game = gameService.lambdaQuery().eq(TGame::getId, completeStudy.getGameId())
|
.eq(TGame::getDisabled, 0).one();
|
if (null == game) {
|
throw new GlobalException("游戏信息异常!");
|
}
|
// 积分明细
|
Integer difficulty = completeStudy.getDifficulty();
|
List<TIntegralRecord> integralRecordList = integralRecordService.lambdaQuery()
|
.eq(TIntegralRecord::getUserId, userid)
|
.eq(TIntegralRecord::getGameId, game.getId())
|
.eq(TIntegralRecord::getDisabled, 0)
|
.eq(TIntegralRecord::getGameDifficulty, difficulty).list();
|
// 本次游戏总共能获取的积分数量
|
Integer integral;
|
Integer item = null;
|
if (completeStudy.getGameName().equals(Constants.HEARING)) {
|
// 本次游戏总积分
|
integral = Integer.parseInt(game.getIntegral().split(",")[difficulty]);
|
item = completeStudy.getDifficulty();
|
} else if (completeStudy.getGameName().equals(Constants.MEMORY)) {
|
integralRecordList = integralRecordService.lambdaQuery()
|
.eq(TIntegralRecord::getUserId, userid)
|
.eq(TIntegralRecord::getGameId, game.getId())
|
.eq(TIntegralRecord::getDisabled, 0)
|
.last("and gameDifficulty is null").list();
|
integral = game.getAnswerIntegral();
|
} else {
|
throw new GlobalException("该次游戏积分计算异常!");
|
}
|
int gameAvailableIntegral = (int) (integral * ((double) completeStudy.getAccuracy() / 100));
|
Integer availableIntegral = gameService.countIntegral(userid, game, completeStudy, gameAvailableIntegral, integralRecordList);
|
// 游戏测试记录
|
Boolean add = gameRecordService.add(completeStudy);
|
// 可获得积分不为null时,才添加积分明细记录
|
if (null != availableIntegral && !Constants.ZERO.equals(availableIntegral)) {
|
add = add && integralRecordService.add(String.valueOf(availableIntegral),
|
Constants.COMPLETE_GAME, completeStudy.getGameId(), null, item, null);
|
// 用户账户添加积分
|
TUser user = userService.getById(userid);
|
user.setIntegral(user.getIntegral() + availableIntegral);
|
add = add && userService.updateById(user);
|
}
|
// 学习时长更新
|
TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userid)
|
.eq(TUserStudy::getDisabled, 0).one();
|
if (null == userStudy) {
|
userStudy = createUserStudy(userid);
|
}
|
// 学习时长
|
userStudy.setTotalStudy(userStudy.getTotalStudy() + completeStudy.getUseTime());
|
userStudy.setTodayStudy(userStudy.getTodayStudy() + completeStudy.getUseTime());
|
userStudy.setWeekStudy(userStudy.getWeekStudy() + completeStudy.getUseTime());
|
userStudy.setMonthStudy(userStudy.getMonthStudy() + completeStudy.getUseTime());
|
userStudyService.updateById(userStudy);
|
// 学习配置列表
|
List<TStudy> studyList = studyService.lambdaQuery().eq(TStudy::getDisabled, 0)
|
.orderByAsc(TStudy::getWeek).list();
|
if (studyList.isEmpty()) {
|
throw new GlobalException("学习配置列表未配置或数据失效!");
|
}
|
// 超级记忆逻辑
|
if (Constants.MEMORY.equals(completeStudy.getGameName())) {
|
// 超级记忆正确率达到通关率标准,才能进入下一周目学习
|
// 校验是否通关超级听力与超级记忆,通关则学习记录更新为下一周目
|
userStudyService.checkRate(game, userid, completeStudy, studyList);
|
} else {
|
// 超级听力需根据正确率判断是否允许进入下一难度
|
userStudyService.gameHearing(game, userid, completeStudy, studyList);
|
}
|
return R.ok(availableIntegral);
|
}
|
|
private TUserStudy createUserStudy(Integer userid) {
|
TUserStudy userStudy = new TUserStudy();
|
userStudy.setUserId(userid);
|
// 学习周目
|
TStudy tStudy = studyService.lambdaQuery().eq(TStudy::getQuarter, Constants.ONE)
|
.orderByAsc(TStudy::getWeek).last("limit 1").one();
|
userStudy.setWeek(tStudy.getWeek());
|
userStudy.setDay(Constants.ONE);
|
userStudy.setTotalStudy(Constants.ZERO);
|
userStudy.setTodayStudy(Constants.ZERO);
|
userStudy.setWeekStudy(Constants.ZERO);
|
userStudy.setMonthStudy(Constants.ZERO);
|
userStudy.setListen(Constants.BURDEN_ONE);
|
userStudy.setLook(Constants.BURDEN_ONE);
|
userStudy.setInduction(Constants.BURDEN_ONE);
|
userStudy.setAnswer(Constants.BURDEN_ONE);
|
userStudy.setPair(Constants.BURDEN_ONE);
|
userStudyService.save(userStudy);
|
return userStudy;
|
}
|
|
private List<String> getSubjectId(Integer week) {
|
// 当前week下day1 - day5所有题目
|
List<String> subjectId = new ArrayList<>();
|
List<String> listenSubject = studyListenService.lambdaQuery().eq(TStudyListen::getWeek, week)
|
.eq(TStudyListen::getDisabled, 0).list().stream().map(TStudyListen::getSubject).collect(Collectors.toList());
|
List<String> inductionSubject = studyInductionService.lambdaQuery().eq(TStudyInduction::getWeek, week)
|
.eq(TStudyInduction::getDisabled, 0).list().stream().map(TStudyInduction::getSubject).collect(Collectors.toList());
|
List<String> lookSubject = studyLookService.lambdaQuery().eq(TStudyLook::getWeek, week)
|
.eq(TStudyLook::getDisabled, 0).list().stream().map(TStudyLook::getSubject).collect(Collectors.toList());
|
List<String> pairSubject = studyPairService.lambdaQuery().eq(TStudyPair::getWeek, week)
|
.eq(TStudyPair::getDisabled, 0).list().stream().map(TStudyPair::getSubject).collect(Collectors.toList());
|
List<String> studyAnswerList = studyAnswerService.lambdaQuery().eq(TStudyAnswer::getWeek, week)
|
.eq(TStudyAnswer::getDisabled, 0).list().stream().map(data -> String.valueOf(data.getSubject())).collect(Collectors.toList());
|
// 自主学习1-4需要单独处理
|
for (String s : listenSubject) {
|
subjectId.addAll(Arrays.stream(s.split(",")).collect(Collectors.toList()));
|
}
|
for (String s : inductionSubject) {
|
subjectId.addAll(Arrays.stream(s.split(",")).collect(Collectors.toList()));
|
}
|
for (String s : lookSubject) {
|
subjectId.addAll(Arrays.stream(s.split(",")).collect(Collectors.toList()));
|
}
|
for (String s : pairSubject) {
|
subjectId.addAll(Arrays.stream(s.split(",")).collect(Collectors.toList()));
|
}
|
subjectId.addAll(studyAnswerList);
|
return subjectId;
|
}
|
|
/**
|
* 自主故事1-看图配音
|
*
|
* @param week 周目
|
*/
|
@GetMapping("/lookPictureDbu")
|
@ApiOperation(value = "自主故事1-看图配音", tags = {"学习端-听-自主故事"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "所属季度", name = "quarter", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
|
})
|
public R<StudyStoryListenResultVO> lookPictureDbu(@RequestParam Integer quarter, @RequestParam Integer week) {
|
// 看图配音信息
|
TStoryListen storyListen = storyListenService.storyDetail(quarter, week);
|
// 题组信息
|
StudyStoryVO studyStory = new StudyStoryVO();
|
studyStory.setId(storyListen.getId());
|
studyStory.setIntegral(storyListen.getLookIntegral());
|
// 故事语音及图片信息
|
List<TStory> list = storyService.lookPictureDbu(storyListen, 0);
|
return R.ok(new StudyStoryListenResultVO(studyStory, list));
|
}
|
|
/**
|
* 自主故事2-框架记忆
|
*
|
* @param week 周目
|
*/
|
@GetMapping("/frameworkMemory")
|
@ApiOperation(value = "自主故事2-框架记忆", tags = {"学习端-听-自主故事"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "所属季度", name = "quarter", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
|
})
|
public R<StudyStoryListenResultVO> frameworkMemory(@RequestParam Integer quarter, @RequestParam Integer week) {
|
// 看图配音信息
|
TStoryListen storyListen = storyListenService.storyDetail(quarter, week);
|
// 题组信息
|
StudyStoryVO studyStory = new StudyStoryVO();
|
studyStory.setId(storyListen.getId());
|
studyStory.setIntegral(storyListen.getIntegral());
|
// 故事语音及图片信息
|
List<TStory> list = storyService.lookPictureDbu(storyListen, 1);
|
return R.ok(new StudyStoryListenResultVO(studyStory, list));
|
}
|
|
/**
|
* 完成故事类型
|
*/
|
@GetMapping("/completeStory")
|
@ApiOperation(value = "完成故事学习", tags = {"学习端-听-自主故事"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "故事id", name = "storyId", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "类型(1:看图配音;2:超级记忆)", name = "type", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "正确率", name = "accuracy", dataType = "Integer"),
|
@ApiImplicitParam(value = "学习时长(秒)", name = "studyTime", dataType = "Integer", required = true)
|
})
|
public R<Integer> completeStory(@RequestParam Integer storyId, @RequestParam Integer type,
|
Integer accuracy, @RequestParam Integer studyTime) {
|
TStoryListen storyListen = storyListenService.lambdaQuery().eq(TStoryListen::getId, storyId)
|
.eq(TStoryListen::getDisabled, 0).one();
|
if (null == storyListen) {
|
throw new GlobalException("当前故事学习失败,故事信息异常,请重试!");
|
}
|
LoginUserParent loginUserStudy = tokenService.getLoginUserStudy();
|
if (null == loginUserStudy) {
|
return R.tokenError("登录失效!");
|
}
|
// 用户信息
|
Integer userId = loginUserStudy.getUserid();
|
Boolean result = true;
|
// 学习时长更新
|
TStudy study = studyService.lambdaQuery().eq(TStudy::getId, storyListen.getStudyId())
|
.eq(TStudy::getDisabled, 0).one();
|
TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
|
.eq(TUserStudy::getDisabled, 0).one();
|
if (null == userStudy) {
|
userStudy = createUserStudy(userId);
|
}
|
userStudy.setTotalStudy(userStudy.getTotalStudy() + studyTime);
|
userStudy.setTodayStudy(userStudy.getTodayStudy() + studyTime);
|
userStudy.setWeekStudy(userStudy.getWeekStudy() + studyTime);
|
userStudy.setMonthStudy(userStudy.getMonthStudy() + studyTime);
|
boolean update = userStudyService.updateById(userStudy);
|
if (!update) {
|
throw new GlobalException("学习时长更新失败!");
|
}
|
// 根据故事类型不同,逻辑处理
|
int sum = 0;
|
if (Constants.ONE.equals(type)) {
|
if (null == accuracy) {
|
throw new GlobalException("自主故事-看图配音正确率异常!");
|
}
|
// 看图配音模式,也需要根据游戏正确率计算积分
|
double d = (double) accuracy / 100;
|
int integral = (int) (storyListen.getLookIntegral() * d);
|
int obtainedIntegral;
|
// 看图配音已获取积分数量
|
List<TUserStudyRecord> list = studyRecordService.lambdaQuery()
|
.eq(TUserStudyRecord::getStoryId, storyId)
|
.eq(TUserStudyRecord::getType, 1)
|
.eq(TUserStudyRecord::getQuarter, study.getQuarter())
|
.eq(TUserStudyRecord::getWeek, storyListen.getWeek())
|
.eq(TUserStudyRecord::getUserId, userId).list();
|
if (list.isEmpty()) {
|
obtainedIntegral = 0;
|
} else {
|
obtainedIntegral = list.stream().map(TUserStudyRecord::getObtainedIntegral)
|
.mapToInt(Integer::intValue).sum();
|
}
|
// 可获得积分计算
|
int i = integral - obtainedIntegral;
|
if (i > 0) {
|
TUserStudyRecord data = new TUserStudyRecord();
|
data.setUserId(userId);
|
data.setObtainedIntegral(i);
|
data.setType(Constants.ONE);
|
data.setStoryId(storyId);
|
data.setQuarter(study.getQuarter());
|
data.setWeek(storyListen.getWeek());
|
result = studyRecordService.save(data);
|
sum = i;
|
// 添加积分明细记录
|
result = integralRecordService.add(String.valueOf(sum),
|
Constants.COMPLETE_STORY, null, storyId, null, Constants.ZERO);
|
TUser user = userService.lambdaQuery().eq(TUser::getId, userId).one();
|
// 添加积分
|
user.setIntegral(user.getIntegral() + sum);
|
result = result && userService.updateById(user);
|
}
|
} else {
|
// 超级记忆只有首次才能获取积分
|
TIntegralRecord integralRecord = integralRecordService.lambdaQuery()
|
.eq(TIntegralRecord::getUserId, userId)
|
.eq(TIntegralRecord::getStoryId, storyId)
|
.eq(TIntegralRecord::getDisabled, 0)
|
.eq(TIntegralRecord::getStoryType, Constants.ONE)
|
.one();
|
if (null == integralRecord) {
|
// 添加积分明细记录
|
result = integralRecordService.add(String.valueOf(storyListen.getIntegral()),
|
Constants.COMPLETE_STORY, null, storyId, null, Constants.ONE);
|
TUser user = userService.lambdaQuery().eq(TUser::getId, userId).one();
|
// 添加积分
|
user.setIntegral(user.getIntegral() + storyListen.getIntegral());
|
result = result && userService.updateById(user);
|
sum = storyListen.getIntegral();
|
}
|
}
|
return R.ok(sum);
|
}
|
|
@GetMapping("/studyRecord")
|
@ApiOperation(value = "个人中心-学习记录", tags = {"学习端-个人中心"})
|
public R<StudyRecordResultVO> studyRecord() {
|
LoginUserParent userStudy = tokenService.getLoginUserStudy();
|
if (null == userStudy) {
|
return R.tokenError("登录失效!");
|
}
|
Integer userId = userStudy.getUserid();
|
// 学习记录
|
TUserStudy studyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
|
.eq(TUserStudy::getDisabled, 0).one();
|
// 总时长还需计算上游戏测试成绩时长
|
List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery()
|
.eq(TGameRecord::getUserId, userId)
|
.eq(TGameRecord::getDisabled, 0)
|
.orderByDesc(TGameRecord::getCreateTime)
|
.list();
|
if (null != studyRecord) {
|
// 学习时长格式转换
|
Integer todayStudy = studyRecord.getTodayStudy();
|
studyRecord.setTodayStudy(Math.round((float) todayStudy / 3600));
|
Integer weekStudy = studyRecord.getWeekStudy();
|
studyRecord.setWeekStudy(Math.round((float) weekStudy / 3600));
|
Integer monthStudy = studyRecord.getMonthStudy();
|
studyRecord.setMonthStudy(Math.round((float) monthStudy / 3600));
|
// 游戏总时长
|
int sum = gameRecordList.stream().map(TGameRecord::getUseTime).mapToInt(Integer::intValue).sum();
|
Integer totalStudy = studyRecord.getTotalStudy();
|
studyRecord.setTotalStudy(Math.round((float) (totalStudy) / 3600));
|
// 剩余周目
|
List<TStudy> studyList = studyService.lambdaQuery().eq(TStudy::getDisabled, 0)
|
.eq(TStudy::getType, Constants.ONE)
|
.orderByAsc(TStudy::getWeek).list();
|
int size = studyService.residueWeek(studyRecord, studyList);
|
studyRecord.setSurplus(size);
|
}
|
return R.ok(new StudyRecordResultVO(studyRecord, gameRecordList));
|
}
|
|
@GetMapping("/record")
|
@ApiOperation(value = "游戏测试成绩", tags = {"家长端-游戏测试成绩"})
|
public R<StudyRecordResultVO> record() {
|
LoginUserParent loginUser1 = tokenService.getLoginUser1();
|
System.err.println("用户登录信息:" + loginUser1);
|
if (loginUser1 == null) {
|
return R.tokenError("登陆失效,请重新登录");
|
}
|
Integer userId = loginUser1.getUserid();
|
|
// 学习记录
|
TUserStudy studyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
|
.eq(TUserStudy::getDisabled, 0).one();
|
// 总时长还需计算上游戏测试成绩时长
|
List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery()
|
.eq(TGameRecord::getUserId, userId)
|
.eq(TGameRecord::getDisabled, 0)
|
.orderByDesc(TGameRecord::getCreateTime)
|
.list();
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm");
|
if (null != studyRecord) {
|
// 学习时长格式转换
|
Integer todayStudy = studyRecord.getTodayStudy();
|
studyRecord.setTodayStudy(Math.round((float) todayStudy / 3600));
|
Integer weekStudy = studyRecord.getWeekStudy();
|
studyRecord.setWeekStudy(Math.round((float) weekStudy / 3600));
|
Integer monthStudy = studyRecord.getMonthStudy();
|
studyRecord.setMonthStudy(Math.round((float) monthStudy / 3600));
|
// 游戏总时长
|
int sum = gameRecordList.stream().map(TGameRecord::getUseTime).mapToInt(Integer::intValue).sum();
|
for (TGameRecord tGameRecord : gameRecordList) {
|
tGameRecord.setTime(simpleDateFormat.format(tGameRecord.getCreateTime()));
|
}
|
Integer totalStudy = studyRecord.getTotalStudy();
|
studyRecord.setTotalStudy(Math.round((float) (totalStudy) / 3600));
|
// 剩余周目
|
List<TStudy> studyList = studyService.lambdaQuery().eq(TStudy::getDisabled, 0)
|
.eq(TStudy::getType, Constants.ONE)
|
.orderByAsc(TStudy::getWeek).list();
|
int size = studyService.residueWeek(studyRecord, studyList);
|
studyRecord.setSurplus(size);
|
}
|
return R.ok(new StudyRecordResultVO(studyRecord, gameRecordList));
|
}
|
|
@PostMapping("/recordManagement/{id}")
|
@ApiOperation(value = "游戏测试成绩", tags = {"管理后台-查看用户详情"})
|
public R<StudyRecordResultVO> recordManagement(@PathVariable("id") Integer id) {
|
// 学习记录
|
TUserStudy studyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, id)
|
.eq(TUserStudy::getDisabled, 0).one();
|
// 查询剩余周目
|
if (studyRecord != null) {
|
int size = studyService.list(new QueryWrapper<TStudy>()
|
.eq("type", 1)).size();
|
studyRecord.setSurplus(size - studyRecord.getWeek());
|
} else {
|
TUserStudy tUserStudy = new TUserStudy();
|
tUserStudy.setSurplus(studyService.list(new QueryWrapper<TStudy>()
|
.eq("type", 1)).size());
|
tUserStudy.setTodayStudy(Constants.ZERO);
|
tUserStudy.setTotalStudy(Constants.ZERO);
|
tUserStudy.setWeekStudy(Constants.ZERO);
|
tUserStudy.setMonthStudy(Constants.ZERO);
|
studyRecord = tUserStudy;
|
}
|
// 学习时长格式转换
|
Integer todayStudy = studyRecord.getTodayStudy();
|
studyRecord.setTodayStudy(Math.round((float) todayStudy / 3600));
|
Integer weekStudy = studyRecord.getWeekStudy();
|
studyRecord.setWeekStudy(Math.round((float) weekStudy / 3600));
|
Integer monthStudy = studyRecord.getMonthStudy();
|
studyRecord.setMonthStudy(Math.round((float) monthStudy / 3600));
|
// 总时长还需计算上游戏测试成绩时长
|
List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, id)
|
.eq(TGameRecord::getDisabled, 0).list();
|
int sum = gameRecordList.stream().map(TGameRecord::getUseTime).mapToInt(Integer::intValue).sum();
|
Integer totalStudy = studyRecord.getTotalStudy();
|
studyRecord.setTotalStudy(Math.round((float) (totalStudy) / 3600));
|
StudyRecordResultVO studyRecordResultVO = new StudyRecordResultVO(studyRecord, gameRecordList);
|
return R.ok(studyRecordResultVO);
|
}
|
|
@GetMapping("/getIntegral")
|
@ApiOperation(value = "获取剩余积分", tags = {"家长端-获取剩余积分"})
|
public R<Integer> getIntegral() {
|
Integer userId = tokenService.getLoginUser1().getUserid();
|
return R.ok(userService.getById(userId).getIntegral());
|
}
|
|
@GetMapping("/getIntegralStudy")
|
@ApiOperation(value = "获取剩余积分", tags = {"学习端-获取剩余积分"})
|
public R<Integer> getIntegralStudy() {
|
Integer userId = tokenService.getLoginUserStudy().getUserid();
|
return R.ok(userService.getById(userId).getIntegral());
|
}
|
|
@GetMapping("/integralDetail")
|
@ApiOperation(value = "个人中心-积分明细", tags = {"学习端-个人中心"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "查询时间 格式yyyy-MM", name = "time", dataType = "Integer"),
|
@ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "每页显示条数", name = "pageSize", dataType = "Integer", required = true)
|
})
|
public R<IPage<TIntegralRecord>> integralDetail(String time,
|
@RequestParam("pageNum") Integer pageNum,
|
@RequestParam("pageSize") Integer pageSize) {
|
if (tokenService.getLoginUserStudy() == null) {
|
return R.tokenError("登录失效");
|
}
|
IPage<TIntegralRecord> page = integralRecordService.integralDetail(new Page<>(pageNum, pageSize),
|
tokenService.getLoginUserStudy().getUserid(), time);
|
for (TIntegralRecord record : page.getRecords()) {
|
if (!record.getIntegral().startsWith("-")) {
|
record.setIntegral("+" + record.getIntegral());
|
}
|
}
|
return R.ok(page);
|
}
|
|
@GetMapping("/integralDetailParent")
|
@ApiOperation(value = "个人中心-积分明细", tags = {"家长端"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "查询时间 格式yyyy-MM", name = "time"),
|
@ApiImplicitParam(value = "页码", name = "pageNum", required = true),
|
@ApiImplicitParam(value = "每页显示条数", name = "pageSize", required = true)
|
})
|
public R<IPage<TIntegralRecord>> integralDetailParent(String time,
|
@RequestParam("pageNum") Integer pageNum,
|
@RequestParam("pageSize") Integer pageSize) {
|
if (tokenService.getLoginUser1() == null) {
|
return R.tokenError("登录失效");
|
}
|
IPage<TIntegralRecord> page = integralRecordService.integralDetail(new Page<>(pageNum, pageSize),
|
tokenService.getLoginUser1().getUserid(), time);
|
for (TIntegralRecord record : page.getRecords()) {
|
if (!record.getIntegral().startsWith("-")) {
|
record.setIntegral("+" + record.getIntegral());
|
}
|
}
|
return R.ok(page);
|
}
|
|
/**
|
* 生成积分明细-用于远程调用
|
*
|
* @param integral 积分变动信息
|
* @param method 变动源
|
*/
|
@GetMapping("/addIntegralDetail")
|
// @ApiOperation(value = "添加-积分明细", tags = {"添加-积分明细"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "积分数量", name = "integral", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "变动源(完成学习、完成游戏...)", name = "method", dataType = "String", required = true)
|
})
|
public R<Boolean> addIntegralDetail(@RequestParam("integral") String integral, @RequestParam("method") String method) {
|
// 当前登录用户
|
LoginUserParent userStudy = tokenService.getLoginUserStudy();
|
// 生成积分明细信息
|
TIntegralRecord integralRecord = new TIntegralRecord();
|
integralRecord.setIntegral(integral);
|
integralRecord.setMethod(method);
|
integralRecord.setUserId(userStudy.getUserid());
|
integralRecord.setDisabled(Boolean.FALSE);
|
integralRecord.setCreateBy(userStudy.getPhone());
|
integralRecord.setCreateTime(new Date());
|
integralRecord.setUpdateBy(userStudy.getPhone());
|
integralRecord.setUpdateTime(new Date());
|
return R.ok(integralRecordService.save(integralRecord));
|
}
|
|
@GetMapping("/addIntegralDetailParent")
|
// @ApiOperation(value = "添加-积分明细", tags = {"添加-积分明细"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "积分数量", name = "integral", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "变动源(完成学习、完成游戏...)", name = "method", dataType = "String", required = true)
|
})
|
public R<Boolean> addIntegralDetailParent(@RequestParam("integral") String integral, @RequestParam("method") String method) {
|
// 当前登录用户
|
LoginUserParent userStudy = tokenService.getLoginUser1();
|
// 生成积分明细信息
|
TIntegralRecord integralRecord = new TIntegralRecord();
|
integralRecord.setIntegral(integral);
|
integralRecord.setMethod(method);
|
integralRecord.setUserId(userStudy.getUserid());
|
integralRecord.setDisabled(Boolean.FALSE);
|
integralRecord.setCreateBy(userStudy.getPhone());
|
integralRecord.setCreateTime(new Date());
|
integralRecord.setUpdateBy(userStudy.getPhone());
|
integralRecord.setUpdateTime(new Date());
|
return R.ok(integralRecordService.save(integralRecord));
|
}
|
|
@GetMapping("/addIntegralDetail1")
|
// @ApiOperation(value = "添加-积分明细", tags = {"添加-积分明细"})
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "积分数量", name = "integral", dataType = "Integer", required = true),
|
@ApiImplicitParam(value = "变动源(完成学习、完成游戏...)", name = "method", dataType = "String", required = true)
|
})
|
public R addIntegralDetail1(@RequestParam("integral") String integral, @RequestParam("method") String method) {
|
// 当前登录用户
|
LoginUserParent userStudy = tokenService.getLoginUser1();
|
if (userStudy == null) {
|
return R.tokenError("登录失效");
|
}
|
// 生成积分明细信息
|
TIntegralRecord integralRecord = new TIntegralRecord();
|
integralRecord.setIntegral(integral);
|
integralRecord.setMethod(method);
|
integralRecord.setUserId(userStudy.getUserid());
|
integralRecord.setDisabled(Boolean.FALSE);
|
integralRecord.setCreateBy(userStudy.getPhone());
|
integralRecord.setCreateTime(new Date());
|
integralRecord.setUpdateBy(userStudy.getPhone());
|
integralRecord.setUpdateTime(new Date());
|
return R.ok(integralRecordService.save(integralRecord));
|
}
|
|
/**
|
* 用户积分变动(增加或减少)-用于远程调用
|
*
|
* @param integral 积分变动信息
|
* @param method 变动源
|
*/
|
@GetMapping("/exchangeIntegral")
|
// @ApiOperation(value = "用户积分变动", tags = {"用户积分变动"})
|
public R<Boolean> exchangeIntegral(@RequestParam("integral") Integer integral, @RequestParam("method") String method) {
|
TUser user = userService.getById(tokenService.getLoginUserStudy().getUserid());
|
if (Constants.BURDEN.equals(method)) {
|
user.setIntegral(user.getIntegral() - integral);
|
} else {
|
user.setIntegral(user.getIntegral() + integral);
|
}
|
return R.ok(userService.updateById(user));
|
}
|
|
@GetMapping("/exchangeIntegralParent")
|
// @ApiOperation(value = "用户积分变动", tags = {"用户积分变动"})
|
public R<Boolean> exchangeIntegralParent(@RequestParam("integral") Integer integral, @RequestParam("method") String method) {
|
if (tokenService.getLoginUser1() == null) {
|
return R.tokenError("登录失效");
|
}
|
TUser user = userService.getById(tokenService.getLoginUser1().getUserid());
|
if (Constants.BURDEN.equals(method)) {
|
user.setIntegral(user.getIntegral() - integral);
|
} else {
|
user.setIntegral(user.getIntegral() + integral);
|
}
|
return R.ok(userService.updateById(user));
|
}
|
|
@GetMapping("/exchangeIntegral1")
|
// @ApiOperation(value = "用户积分变动", tags = {"用户积分变动"})
|
public R<Boolean> exchangeIntegral1(@RequestParam("integral") Integer integral, @RequestParam("method") String method) {
|
TUser user = userService.getById(tokenService.getLoginUser1().getUserid());
|
if (Constants.BURDEN.equals(method)) {
|
user.setIntegral(user.getIntegral() - integral);
|
} else {
|
user.setIntegral(user.getIntegral() + integral);
|
}
|
return R.ok(userService.updateById(user));
|
}
|
|
}
|