hurixing 1 year ago
parent
commit
80aa2bb2a7

+ 11 - 4
hcp-app/src/main/java/com/yingyangfly/app/controller/GamePlayRecordController.java

@@ -17,10 +17,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-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 org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -115,5 +112,15 @@ public class GamePlayRecordController {
         return ResultResponse.success(map);
     }
 
+    @ApiOperation("清除并推荐游戏")
+    @TraceLog
+    @PostMapping("/clearAwayAndRecommend")
+    public ResultResponse clearAwayAndRecommend(String playClass){
+        if ("B".equals(playClass)){
+            gamePlayRecordService.clearAwayAndRecommend();
+        }
+        return ResultResponse.success();
+    }
+
 
 }

+ 78 - 4
hcp-app/src/test/java/com/yingyangfly/app/controller/VoiceControllerTest.java

@@ -1,5 +1,6 @@
 package com.yingyangfly.app.controller;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson2.JSON;
 import com.yingyangfly.HcpAppApplication;
 import com.yingyangfly.common.utils.DateUtils;
@@ -12,12 +13,18 @@ import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.aggregation.*;
+import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 import static org.junit.jupiter.api.Assertions.*;
+import static org.springframework.data.mongodb.core.aggregation.Aggregation.group;
 
 /**
  * ${TODO}
@@ -37,22 +44,89 @@ class VoiceControllerTest {
     @Autowired
     GamePlayRecordMapper gamePlayRecordMapper;
 
+    @Resource
+    private MongoTemplate mongoTemplate;
+
     @Test
     void getVoiceUrl() {
 
         //发送通知
         MsgWarn warn = new MsgWarn();
-        warn.setMsgTitle("理疗报告");
-        warn.setMsgDesn("小豚已经给您生成了理疗报告,点击进行查看哦~~");
-        warn.setUserId(1721827529125457922L);
+        warn.setMsgTitle("理疗专属任务");
+        warn.setMsgDesn("小海豚已经给您生成了今天的特训任务,让我们一起跟小豚遨游吧!");
+        warn.setUserId(1837049305372241922l);
         warn.setCreateTime(new Date());
         warn.setUpdateTime(new Date());
         warn.setStatus("1");
         warn.setOrgCode("test");
         warn.setOrgName("test");
-        warn.setMsgType("C");
+        warn.setMsgType("D");
         warn.setExt(DateUtils.getDate());
         imApiImpl.sendMsg(warn.getUserId().toString(),warn.getMsgDesn(),warn.getMsgType(),warn.getExt());
         //imApiImpl.sendMsg("1721827529125457922","1231231","C");
     }
+
+    @Test
+    void mongodbTest() {
+//        Criteria criteria = Criteria.where("user_id").is("1822919035400437761").and("play_class").is("B");
+//        // 创建聚合操作列表并执行聚合查询
+//        Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria)
+//                Aggregation.project().and("create_time").dateAsFormattedString("%Y-%m-%d").as("time")
+//                group("time")
+//                        .sum("duration").as("totalDuration")
+//                        .first("time").as("time")
+//        );
+//
+//
+//        // 执行聚合查询并返回结果
+//        AggregationResults<Map> result = mongoTemplate.aggregate(aggregation, "game_play_record", Map.class);
+//        System.out.println(result.getUniqueMappedResult());
+        Long userId = 1822919035400437761L;
+        String time = "2024-11-14";
+
+        Criteria criteria = Criteria.where("user_id").is(userId)
+                .and("play_class").in("B")
+                .and("create_time").gte(DateUtils.parseDate(time+" 00:00:00")).lte(DateUtils.parseDate(time+" 23:59:59")).and("del_flag").is(0);
+
+        Aggregation aggregation = Aggregation.newAggregation(
+                Aggregation.match(criteria),
+                Aggregation.group("game_code").sum("game_score").as("totalScore")
+                        .sum("duration").as("totalDuration")
+                        .first("game_name").as("gameName")
+                        .first("is_pass").as("isPass")
+                        .first("game_code").as("gameCode")
+        );
+        AggregationResults<Map> result = mongoTemplate.aggregate(aggregation, "game_play_record", Map.class);
+        List<Map> mappedResults = result.getMappedResults();
+        System.out.println(mappedResults);
+    }
+
+    @Test
+    void mongodbTest1(){
+
+        Criteria criteria = Criteria.where("user_id").is(Long.parseLong("1821078423164370946")).and("play_class").is("B");
+        String groupExpr = "%Y-%m-%d";
+
+        AggregationExpression dateExpression = DateOperators.DateToString
+                .dateOf("create_time")
+                .toString(groupExpr);
+
+        ProjectionOperation projectionOperation = Aggregation.project()
+                .andExclude("_id")
+                .and(dateExpression).as("date")
+                .and("user_id").as("user_id")
+                .and("duration").as("duration");
+
+        GroupOperation groupOperation = Aggregation.group("date")
+                .sum("duration").as("totalDuration")
+                .first("user_id").as("user_id")
+                .first("date").as("time");
+
+
+        Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),projectionOperation,
+                groupOperation);
+
+        AggregationResults<Map> result = mongoTemplate.aggregate(aggregation, "game_play_record", Map.class);
+        System.out.println(result.getMappedResults());
+    }
 }

+ 2 - 0
hcp-core/src/main/java/com/yingyangfly/core/api/impl/ImApiImpl.java

@@ -16,6 +16,7 @@ import org.assertj.core.util.Lists;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
+import java.time.LocalDate;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -98,6 +99,7 @@ public class ImApiImpl implements ImApi {
         jsonObject.put("businessID",msgType);
         jsonObject.put("ext",ext);
         jsonObject.put("data",content);
+        jsonObject.put("createTime", LocalDate.now());
         String json = jsonObject.toJSONString();
         msgContent.setText(json);
         msgContent.setData(json);

+ 3 - 0
hcp-core/src/main/java/com/yingyangfly/core/domain/Game.java

@@ -54,6 +54,9 @@ public class Game extends BaseEntity {
     @ApiModelProperty("科学原理")
     private String scientificPrinciple;
 
+    @ApiModelProperty("显示顺序")
+    private Integer orderNum;
+
 }
 
 

+ 3 - 0
hcp-core/src/main/java/com/yingyangfly/core/domain/GameUser.java

@@ -55,4 +55,7 @@ public class GameUser {
     //游戏封面
     @ApiModelProperty(value = "封面图")
     private String gameCoverImage;
+
+    @ApiModelProperty(value = "显示顺序")
+    private Integer orderNum;
 }

+ 10 - 9
hcp-core/src/main/java/com/yingyangfly/core/recommend/RecommendFacade.java

@@ -146,7 +146,7 @@ public class RecommendFacade {
        }
     }
 
-    private GameRecommendRule getRule(String recommendPlayClass) {
+    public GameRecommendRule getRule(String recommendPlayClass) {
         return gameRecommendRuleService.getOne(new LambdaQueryWrapper<GameRecommendRule>()
                 .eq(GameRecommendRule::getStatus, StatusEnums.OK.getIntCode())
                 .eq(GameRecommendRule::getRecommendPlayClass, recommendPlayClass)
@@ -316,7 +316,7 @@ public class RecommendFacade {
         return lastDayGameCodes;
     }
 
-    private List<GameUser> buildGameUsers(List<Game> games, AppUser appUser, GameRecommendRule rule) {
+    public List<GameUser> buildGameUsers(List<Game> games, AppUser appUser, GameRecommendRule rule) {
         Date current = DateUtil.date();
         return games.stream().map(g -> {
             GameUser gameUser = new GameUser();
@@ -339,6 +339,7 @@ public class RecommendFacade {
             gameUser.setGameDifficultyRate(g.getGameDifficultyRate());
             gameUser.setGameDuration(g.getGameDuration());
             gameUser.setGameCoverImage(g.getGameCoverImage());
+            gameUser.setOrderNum(g.getOrderNum());
             return gameUser;
         }).collect(Collectors.toList());
     }
@@ -375,7 +376,7 @@ public class RecommendFacade {
      * @param appUser
      * @return
      */
-    private List<Game> recommendationA(AppUser appUser){
+    public List<Game> recommendationA(AppUser appUser){
         String tags = appUser.getTags();
         if (ObjectUtils.isNull(tags)){
             return null;
@@ -432,7 +433,7 @@ public class RecommendFacade {
      * @param appUser
      * @return
      */
-    private List<Game> recommendationB(AppUser appUser) {
+    public List<Game> recommendationB(AppUser appUser) {
         String tags = appUser.getTags();
         if (ObjectUtils.isNull(tags)){
             return null;
@@ -448,17 +449,17 @@ public class RecommendFacade {
         List<Game> games = gameService.list(gameLambdaQueryWrapper);
         Map<String, List<Game>> typeToGameMap = games.stream().collect(Collectors.groupingBy(Game::getGameType));
 
-        //判断是否三天时间都没有通关游戏,如果是就删除以前的游戏,重新随机推荐
+        //判断是否三天后时间都没有通关游戏,如果是就删除以前的游戏,重新随机推荐
         LambdaQueryWrapper<GameUser> wrapper = new LambdaQueryWrapper();
         wrapper.eq(GameUser::getPlayClass, "B");
         wrapper.eq(GameUser::getUserId,appUser.getId());
         wrapper.eq(GameUser::getStatus,StatusEnums.OK.getCode());
-        wrapper.le(GameUser::getCreateTime, LocalDate.now().atStartOfDay());
         LocalDate threeDaysAgo = LocalDate.now().minus(3, ChronoUnit.DAYS);
-        wrapper.ge(GameUser::getCreateTime, threeDaysAgo.atStartOfDay()); // 大于等于三天前的开始时间
-        long count = gameUserService.count(wrapper);
-        if (count==0){
+        wrapper.gt(GameUser::getCreateTime, threeDaysAgo.atStartOfDay()); // 大于等于三天前的开始时间
+        List<GameUser> TimeoutGameUserList = gameUserService.list(wrapper);
+        for (GameUser gameUser : TimeoutGameUserList) {
             LambdaQueryWrapper<GameUser> deleteWrapper = new LambdaQueryWrapper();
+            deleteWrapper.eq(GameUser::getGameCode,gameUser.getGameCode());
             deleteWrapper.eq(GameUser::getPlayClass, "B");
             deleteWrapper.eq(GameUser::getUserId,appUser.getId());
             deleteWrapper.eq(GameUser::getStatus,StatusEnums.DISABLE.getCode());

+ 2 - 0
hcp-core/src/main/java/com/yingyangfly/core/service/GamePlayRecordService.java

@@ -32,5 +32,7 @@ public interface GamePlayRecordService{
 
     Map<String,Object> queryDayRecordDetail(String time, String pageNum, Long userId,String playClass);
     Map<String, Object> statisticRecord();
+
+    void clearAwayAndRecommend();
 }
 

+ 16 - 2
hcp-core/src/main/java/com/yingyangfly/core/service/impl/GamePlayRecordServiceImpl.java

@@ -17,6 +17,7 @@ import com.yingyangfly.core.dto.CurrentLoginUser;
 import com.yingyangfly.core.dto.GamePlayRecordDetailDto;
 import com.yingyangfly.core.dto.GamePlayRecordDto;
 import com.yingyangfly.core.mapper.*;
+import com.yingyangfly.core.recommend.RecommendFacade;
 import com.yingyangfly.core.security.util.TokenUtil;
 import com.yingyangfly.core.service.*;
 import com.yingyangfly.core.util.DateUtil;
@@ -83,7 +84,10 @@ public class GamePlayRecordServiceImpl implements GamePlayRecordService {
     @Resource
     private GameTaskService gameTaskService;
 
-    @Override
+    @Resource
+    private RecommendFacade recommendFacade;
+
+   @Override
     @Transactional(rollbackFor = Exception.class)
     @Async
     public void saveGamePlayRecord(GamePlayRecord gamePlayRecord,AppCurrentLoginUser appCurrentLoginUser) {
@@ -366,10 +370,20 @@ public class GamePlayRecordServiceImpl implements GamePlayRecordService {
         gamePlayRecordDto.setGameTotalTime(String.valueOf(totalDuration));
         gamePlayRecordDto.setTotalGameScore(totalScore.toString());
         gamePlayRecordDto.setDetails(detailDtos);
-
         return gamePlayRecordDto;
     }
 
+
+    public void clearAwayAndRecommend(){
+        AppCurrentLoginUser appCurrentLoginUser = tokenUtil.getAppCurrentLoginUser();
+        gameUserService.removeDelUserGameDone();
+        AppUser appUser = appUserMapper.selectById(appCurrentLoginUser.getId());
+        List<Game> gameList = recommendFacade.recommendationB(appUser);
+        GameRecommendRule ruleB = recommendFacade.getRule("B");
+        List<GameUser> gameUsers = recommendFacade.buildGameUsers(gameList, appUser, ruleB);
+        gameUserService.saveBatch(gameUsers);
+    }
+
     /**
      * 玩家玩某游戏最高得分
      * @param gameCode

+ 9 - 7
hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameServiceImpl.java

@@ -36,19 +36,19 @@ import java.util.*;
 @Slf4j
 public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements GameService {
 
-    @Autowired
+    @Resource
     private GameMapper gameMapper;
-    @Autowired
+    @Resource
     private GameUserMapper gameUserMapper;
-    @Autowired
+    @Resource
     private GamePlayRecordService gamePlayRecordService;
-    @Autowired
+    @Resource
     private TokenUtil tokenUtil;
-    @Autowired
+    @Resource
     private SysDictDataService sysDictDataService;
-    @Autowired
+    @Resource
     private RedisClient redisClient;
-    @Autowired
+    @Resource
     private GameTaskDetailMapper gameTaskDetailMapper;
 
     @Resource
@@ -166,6 +166,7 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements Ga
             gameUser.setGameDifficultyRate(game.getGameDifficultyRate());
             gameUser.setGameDifficulty(game.getGameDifficulty());
             gameUser.setGameCoverImage(game.getGameCoverImage());
+            gameUser.setOrderNum(game.getOrderNum());
             LambdaQueryWrapper<GameUser> wrapper = new LambdaQueryWrapper<>();
             wrapper.eq(GameUser::getGameCode,gameUpdate.getGameCode());
             gameUserMapper.update(gameUser,wrapper);
@@ -229,6 +230,7 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements Ga
             gameUser.setGameDifficultyRate(game.getGameDifficultyRate());
             gameUser.setGameDuration(game.getGameDuration());
             gameUser.setGameCoverImage(game.getGameCoverImage());
+            gameUser.setOrderNum(game.getOrderNum());
             gameUsers.add(gameUser);
         }
         return gameUsers;

+ 63 - 36
hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameTaskServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mongodb.MongoClientSettings;
 import com.yingyangfly.common.domain.BaseEntity;
 import com.yingyangfly.common.dto.ResultResponse;
 import com.yingyangfly.common.utils.DateUtils;
@@ -26,10 +27,14 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import com.yingyangfly.core.service.*;
 import org.assertj.core.util.Lists;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.bson.Document;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.aggregation.*;
+import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
@@ -49,37 +54,40 @@ import java.util.stream.Collectors;
 @Slf4j
 public class GameTaskServiceImpl extends ServiceImpl<GameTaskMapper, GameTask> implements GameTaskService {
 
-    @Autowired
+    @Resource
     private GameTaskMapper gameTaskMapper;
-    @Autowired
+    @Resource
     ReviewTaskService reviewTaskService;
-    @Autowired
+    @Resource
     private GameMapper gameMapper;
-    @Autowired
+    @Resource
     private GameTaskDetailMapper gameTaskDetailMapper;
-    @Autowired
+    @Resource
     GameService gameService;
-    @Autowired
+    @Resource
     GameTaskDetailService gameTaskDetailService;
-    @Autowired
+    @Resource
     TreatmentService treatmentService;
-    @Autowired
+    @Resource
     AppUserService appUserService;
 
-    @Autowired
+    @Resource
     private AppUserMapper appUserMapper;
-    @Autowired
+    @Resource
     private TokenUtil tokenUtil;
-    @Autowired
+    @Resource
     private GamePlayRecordService gamePlayRecordService;
-    @Autowired
+    @Resource
     private MsgWarnService msgWarnService;
 
-    @Autowired
+    @Resource
     private MentalEnergyDetailRecordMapper mentalEnergyDetailRecordMapper;
-    @Autowired
+    @Resource
     private MentalEnergyDetailMapper mentalEnergyDetailMapper;
 
+    @Resource
+    private MongoTemplate mongoTemplate;
+
 
     @Override
     public GameTask findMyCurrentTask(String time, Long userId,String status) {
@@ -427,27 +435,19 @@ public class GameTaskServiceImpl extends ServiceImpl<GameTaskMapper, GameTask> i
         gameTaskDetailWrapper.like("create_time", date + "%");
         List<GameTaskDetail> gameTaskDetails = gameTaskDetailMapper.selectList(gameTaskDetailWrapper);
 
+        Set<String> upSet = new HashSet<>();
+        Set<String> downSet = new HashSet<>();
 
-        String up = "";
-        String down = "";
         for (GameTaskDetail gameTaskDetail : gameTaskDetails) {
             if (gameTaskDetail.getStatus().equals("1")) {//如果未完成,放到下降里
-                if (StringUtils.isNotBlank(down)) {
-                    down += "、" + GameTypeEnums.getInfo(gameTaskDetail.getGameType());
-                } else {
-                    down += GameTypeEnums.getInfo(gameTaskDetail.getGameType());
-                }
+                downSet.add(GameTypeEnums.getInfo(gameTaskDetail.getGameType()));
             } else {//否则放到成功里
-                if (StringUtils.isNotBlank(up)) {
-                    up += "、" + GameTypeEnums.getInfo(gameTaskDetail.getGameType());
-                } else {
-                    up += GameTypeEnums.getInfo(gameTaskDetail.getGameType());
-                }
+                upSet.add(GameTypeEnums.getInfo(gameTaskDetail.getGameType()));
             }
         }
 
-        map.put("up", up);
-        map.put("down", down);
+        map.put("up", String.join("、",upSet));
+        map.put("down", String.join("、",downSet));
 
         return map;
     }
@@ -673,15 +673,42 @@ public class GameTaskServiceImpl extends ServiceImpl<GameTaskMapper, GameTask> i
         }
 
 
-        QueryWrapper<GameTaskDetail> gameTaskDetailWrapper = new QueryWrapper();
-        gameTaskDetailWrapper.select(" sum(play_time) as gameDuration,DATE_FORMAT(create_time, '%Y-%m-%d') as time  ");
-        gameTaskDetailWrapper.eq("user_id", userId);
-        gameTaskDetailWrapper.groupBy("time");
+//        QueryWrapper<GameTaskDetail> gameTaskDetailWrapper = new QueryWrapper();
+//        gameTaskDetailWrapper.select(" sum(play_time) as gameDuration,DATE_FORMAT(create_time, '%Y-%m-%d') as time  ");
+//        gameTaskDetailWrapper.eq("user_id", userId);
+//        gameTaskDetailWrapper.groupBy("time");
+//
+//        List<Map<String, Object>> gameTaskDetailMap = gameTaskDetailMapper.selectMaps(gameTaskDetailWrapper);
+
+        Criteria criteria = Criteria.where("user_id").is(Long.parseLong(userId)).and("play_class").is("B");
+        String groupExpr = "%Y-%m-%d";
+
+        AggregationExpression dateExpression = DateOperators.DateToString
+                .dateOf("create_time")
+                .toString(groupExpr);
+
+        ProjectionOperation projectionOperation = Aggregation.project()
+                .andExclude("_id")
+                .and(dateExpression).as("date")
+                .and("user_id").as("user_id")
+                .and("duration").as("duration");
+
+        GroupOperation groupOperation = Aggregation.group("date")
+                .sum("duration").as("gameDuration")
+                .first("user_id").as("user_id")
+                .first("date").as("time");
+
+
+        Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria),projectionOperation,
+                groupOperation);
+
+        AggregationResults<Map> result = mongoTemplate.aggregate(aggregation, "game_play_record", Map.class);
+
+        List<Map> gameTaskDetailMap = result.getMappedResults();
 
-        List<Map<String, Object>> gameTaskDetailMap = gameTaskDetailMapper.selectMaps(gameTaskDetailWrapper);
         for (Map<String, Object> stringObjectMap : gameTaskDetailMap) {
-            BigDecimal gameDuration = stringObjectMap.get("gameDuration") == null?new BigDecimal(0):(BigDecimal) stringObjectMap.get("gameDuration");
-            map.put((String) stringObjectMap.get("time"), String.valueOf(gameDuration.intValue()));
+//            BigDecimal gameDuration = stringObjectMap.get("gameDuration") == null?new BigDecimal(0):(BigDecimal) stringObjectMap.get("gameDuration");
+            map.put((String) stringObjectMap.get("time"), String.valueOf(stringObjectMap.get("gameDuration")));
         }
         for (String s : day) {
             TreeMap<String, Object> m = new TreeMap<>();

+ 1 - 0
hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameUserServiceImpl.java

@@ -101,6 +101,7 @@ public class GameUserServiceImpl extends ServiceImpl<GameUserMapper, GameUser> i
         }
         queryWrapper.eq("play_class","C");
         queryWrapper.ne("status","99");
+        queryWrapper.orderByAsc("order_num");
         Page<GameUser> gameUserPage = gameUserMapper.selectPage(rowPage, queryWrapper);
         List<GameUser> gameUsers = gameUserPage.getRecords();
         for (GameUser gameUser : gameUsers) {

+ 31 - 10
hcp-core/src/main/java/com/yingyangfly/core/service/impl/ReviewServiceImpl.java

@@ -4,17 +4,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yingyangfly.common.utils.DateUtils;
-import com.yingyangfly.core.domain.AppUser;
-import com.yingyangfly.core.domain.Review;
-import com.yingyangfly.core.domain.ReviewRecord;
-import com.yingyangfly.core.domain.ReviewTask;
+import com.yingyangfly.core.domain.*;
 import com.yingyangfly.core.dto.AppCurrentLoginUser;
 import com.yingyangfly.core.enums.GameTypeEnums;
 import com.yingyangfly.core.mapper.AppUserMapper;
 import com.yingyangfly.core.mapper.ReviewMapper;
 import com.yingyangfly.core.mapper.ReviewRecordMapper;
 import com.yingyangfly.core.mapper.ReviewTaskMapper;
+import com.yingyangfly.core.recommend.RecommendFacade;
 import com.yingyangfly.core.security.util.TokenUtil;
+import com.yingyangfly.core.service.GameRecommendRecordService;
+import com.yingyangfly.core.service.GameTaskService;
 import com.yingyangfly.core.service.ReviewService;
 import com.yingyangfly.core.util.DateUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -24,6 +24,7 @@ import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
@@ -38,18 +39,27 @@ import java.util.*;
 @Service("reviewService")
 @Slf4j
 public class ReviewServiceImpl extends ServiceImpl<ReviewMapper, Review> implements ReviewService {
-    @Autowired
+    @Resource
     private ReviewRecordMapper reviewRecordMapper;
-    @Autowired
+    @Resource
     private ReviewMapper reviewMapper;
-    @Autowired
+    @Resource
     private AppUserMapper appUserMapper;
-    @Autowired
+    @Resource
     private TokenUtil tokenUtil;
 
-    @Autowired
+    @Resource
     private ReviewTaskMapper reviewTaskMapper;
 
+    @Resource
+    private RecommendFacade recommendFacade;
+
+    @Resource
+    private GameRecommendRecordService gameRecommendRecordService;
+
+    @Resource
+    private GameTaskService gameTaskService;
+
     @Override
     public List<Review> selectAllReview(Review review) {
 
@@ -99,11 +109,22 @@ public class ReviewServiceImpl extends ServiceImpl<ReviewMapper, Review> impleme
 
             appUserUpdate.setMentalEnergy(i+appUser.getMentalEnergy());
             appUserUpdate.setTestFlag("0");
+            appUserMapper.updateById(appUserUpdate);
+
+            // 完成测评任务,推荐专属任务
+            List<Game> gameList = recommendFacade.recommendationA(appUser);
+            GameRecommendRule ruleA = recommendFacade.getRule("A");
+            List<GameUser> gameUsers = recommendFacade.buildGameUsers(gameList, appUser, ruleA);
+
+            gameTaskService.generateTask(gameUsers, ruleA.getOrgCode(), ruleA.getOrgName());
+            log.info("<<<<<<<<<<<<保存推荐游戏记录>>>>>>>>>>>>>>");
+            boolean gameRecommend = gameRecommendRecordService.saveBatch(gameUsers, ruleA.getOrgCode(), ruleA.getOrgName(), ruleA.getRecommendPlayClass());
+            log.info("<<<<<<<<<<<<保存推荐游戏记录响应:{}>>>>>>>>>>>>>>",gameRecommend);
         }else{
             appUserUpdate.setMentalEnergy(i);
             appUserUpdate.setTestFlag("2");
+            appUserMapper.updateById(appUserUpdate);
         }
-        appUserMapper.updateById(appUserUpdate);
     }
 
     @Override

+ 15 - 2
hcp-core/src/main/java/com/yingyangfly/core/service/impl/ReviewTaskServiceImpl.java

@@ -120,7 +120,7 @@ public class ReviewTaskServiceImpl extends ServiceImpl<ReviewTaskMapper, ReviewT
         if(currentUser != null){
             reviewTask.setCreateBy(currentUser.getUsername());
         }else{
-            reviewTask.setCreateBy(reviewTask.getCreateBy());
+            reviewTask.setCreateBy("系统");
         }
         reviewTask.setType("MOCA");
         reviewTask.setReviewTaskName("MOCA测评任务");
@@ -140,6 +140,19 @@ public class ReviewTaskServiceImpl extends ServiceImpl<ReviewTaskMapper, ReviewT
         reviewTask2.setCreateTime(new Date());
         reviewTask2.setStatus("0");
         reviewTaskMapper.insert(reviewTask2);
+        ReviewTask reviewTaskNCSE = new ReviewTask();
+        reviewTaskNCSE.setUserId(reviewTask.getUserId());
+        reviewTaskNCSE.setReviewTaskId(taskId);
+        if(currentUser != null){
+            reviewTaskNCSE.setCreateBy(currentUser.getUsername());
+        }else{
+            reviewTaskNCSE.setCreateBy("系统");
+        }
+        reviewTaskNCSE.setType("NCSE");
+        reviewTaskNCSE.setReviewTaskName("NCSE测评任务");
+        reviewTaskNCSE.setCreateTime(new Date());
+        reviewTaskNCSE.setStatus("0");
+        reviewTaskMapper.insert(reviewTaskNCSE);
         //修改患者测评状态为未测评
         AppUser appUser = new AppUser();
         appUser.setTestFlag("1");
@@ -174,7 +187,7 @@ public class ReviewTaskServiceImpl extends ServiceImpl<ReviewTaskMapper, ReviewT
         saveReviewTask(reviewTask);
         MsgWarn warn = new MsgWarn();
         warn.setMsgTitle("在线测评任务");
-        warn.setMsgDesn("MOCA测评任务和MMSE测评任务已生成");
+        warn.setMsgDesn("您的测评任务已生成");
         warn.setUserId(reviewTask.getUserId());
         warn.setCreateTime(new Date());
         warn.setUpdateTime(new Date());

+ 3 - 0
hcp-core/src/main/java/com/yingyangfly/core/vo/GameVo.java

@@ -52,6 +52,9 @@ public class GameVo {
     @ApiModelProperty("科学原理")
     private String scientificPrinciple;
 
+    @ApiModelProperty("显示顺序")
+    private Integer orderNum;
+
 
     private Date createTime;
     private Date updateTime;

+ 2 - 2
hcp-large-screen/src/main/resources/application-dev.yml

@@ -22,9 +22,9 @@ spring:
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     name: master
-    url: jdbc:mysql://localhost:3306/hcp0524?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+    url: jdbc:mysql://47.93.254.212:3485/hcp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
     username: root
-    password: root
+    password: SkyMedic$240307
     driver-class-name: com.mysql.cj.jdbc.Driver
     filters: stat
     maxActive: 100

+ 25 - 0
hcp-platform/src/test/java/com/yingyangfly/core/recommend/RecommendFacadeTest.java

@@ -1,12 +1,19 @@
 package com.yingyangfly.core.recommend;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.yingyangfly.HcpPlatPlatformApplication;
+import com.yingyangfly.core.domain.Game;
+import com.yingyangfly.core.domain.GameUser;
+import com.yingyangfly.core.service.GameService;
+import com.yingyangfly.core.service.GameUserService;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.List;
+
 /**
  * ${TODO}
  *
@@ -26,4 +33,22 @@ class RecommendFacadeTest {
         recommendFacade.recommendGameUserJob();
 
     }
+
+    @Autowired
+    private GameService gameService;
+
+    @Autowired
+    private GameUserService gameUserService;
+
+    @Test
+    void test(){
+        List<Game> list = gameService.list();
+        for (Game game : list) {
+            GameUser gameUser = new GameUser();
+            gameUser.setOrderNum(game.getOrderNum());
+            LambdaQueryWrapper<GameUser> gameUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            gameUserLambdaQueryWrapper.eq(GameUser::getGameCode,game.getGameCode());
+            gameUserService.update(gameUser,gameUserLambdaQueryWrapper);
+        }
+    }
 }