hurixing 1 yıl önce
ebeveyn
işleme
6771fd9427
17 değiştirilmiş dosya ile 432 ekleme ve 93 silme
  1. 0 29
      hcp-app/src/main/resources/application-dev.yml
  2. 0 25
      hcp-app/src/main/resources/application-prod.yml
  3. 36 0
      hcp-core/src/main/java/com/yingyangfly/core/domain/GameRecommendationRecord.java
  4. 16 0
      hcp-core/src/main/java/com/yingyangfly/core/dto/DealPackageDto.java
  5. 8 0
      hcp-core/src/main/java/com/yingyangfly/core/mapper/GameRecommendationRecordMapper.java
  6. 183 3
      hcp-core/src/main/java/com/yingyangfly/core/recommend/RecommendFacade.java
  7. 12 0
      hcp-core/src/main/java/com/yingyangfly/core/service/GameRecommendationRecordService.java
  8. 72 0
      hcp-core/src/main/java/com/yingyangfly/core/service/impl/AppUserService.java
  9. 28 16
      hcp-core/src/main/java/com/yingyangfly/core/service/impl/GamePlayRecordServiceImpl.java
  10. 41 0
      hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameRecommendationRecordServiceImpl.java
  11. 5 2
      hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameServiceImpl.java
  12. 3 1
      hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameTaskServiceImpl.java
  13. 4 2
      hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameUserServiceImpl.java
  14. 8 10
      hcp-core/src/main/java/com/yingyangfly/core/service/impl/ReviewServiceImpl.java
  15. 1 0
      hcp-core/src/main/java/com/yingyangfly/core/service/impl/ReviewTaskServiceImpl.java
  16. 14 4
      hcp-platform/src/main/java/com/yingyangfly/platform/controller/PatientController.java
  17. 1 1
      hcp-platform/src/main/java/com/yingyangfly/platform/sys/controller/UploadFileController.java

+ 0 - 29
hcp-app/src/main/resources/application-dev.yml

@@ -97,35 +97,6 @@ yingyang:
   security:
     check-pwd: false
 
-security:
-  ignored:
-    urls: #安全路径白名单
-      - /swagger-ui/
-      - /swagger-resources/**
-      - /v2/**
-      - /doc.html
-      - /**/*.html
-      - /**/*.js
-      - /**/*.css
-      - /**/*.png
-      - /**/*.map
-      - /favicon.ico
-      - /actuator/**
-      - /druid/**
-      - /app/login
-      - /app/register
-      - /app/login
-      - /app/loginMsg
-      - /app/getCheckCode
-      - /app/loginMsg
-      - /app/logout
-      - /info
-      - /logout
-      - /pub/app/**
-      - /app/task/**
-      - /im/**
-      - /game_voice/**
-
 baidu:
   appId: 55480265
   apiKey: px002Mxrj5K2CGyanMoQUcZU

+ 0 - 25
hcp-app/src/main/resources/application-prod.yml

@@ -97,31 +97,6 @@ yingyang:
   security:
     check-pwd: false
 
-security:
-  ignored:
-    urls: #安全路径白名单
-      - /**/*.html
-      - /**/*.js
-      - /**/*.css
-      - /**/*.png
-      - /**/*.map
-      - /favicon.ico
-      - /actuator/**
-      - /druid/**
-      - /app/login
-      - /app/register
-      - /app/login
-      - /app/loginMsg
-      - /app/getCheckCode
-      - /app/loginMsg
-      - /app/logout
-      - /info
-      - /logout
-      - /pub/app/**
-      - /app/task/**
-      - /im/**
-      - /game_voice/**
-
 baidu:
   appId: 55480265
   apiKey: px002Mxrj5K2CGyanMoQUcZU

+ 36 - 0
hcp-core/src/main/java/com/yingyangfly/core/domain/GameRecommendationRecord.java

@@ -0,0 +1,36 @@
+package com.yingyangfly.core.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class GameRecommendationRecord {
+
+    @TableId(value = "id")
+    private Long id;
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+    @ApiModelProperty(value = "游戏编码")
+    private String gameCodes;
+    @ApiModelProperty(value = "机构编码")
+    private String orgCode;
+    @ApiModelProperty(value = "机构名字")
+    private String orgName;
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    @ApiModelProperty(value = "玩的业务渠道")
+    private String playClass;
+    @ApiModelProperty(value = "评估任务id")
+    private String reviewTaskId;
+
+    @ApiModelProperty(value = "批次id")
+    private Integer recommendNum;
+
+    @ApiModelProperty(value = "推荐完全部游戏的次数")
+    private Integer frequency;
+}

+ 16 - 0
hcp-core/src/main/java/com/yingyangfly/core/dto/DealPackageDto.java

@@ -0,0 +1,16 @@
+package com.yingyangfly.core.dto;
+
+import lombok.Data;
+
+@Data
+public class DealPackageDto {
+    /**
+     * 患者用户id
+     */
+    private Long appUserId;
+
+    /**
+     * 套餐id
+     */
+    private Long packageId;
+}

+ 8 - 0
hcp-core/src/main/java/com/yingyangfly/core/mapper/GameRecommendationRecordMapper.java

@@ -0,0 +1,8 @@
+package com.yingyangfly.core.mapper;
+
+import com.yingyangfly.core.domain.GameRecommendationRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface GameRecommendationRecordMapper extends CommonMapper<GameRecommendationRecord>{
+}

+ 183 - 3
hcp-core/src/main/java/com/yingyangfly/core/recommend/RecommendFacade.java

@@ -5,7 +5,9 @@ import cn.hutool.core.lang.Assert;
 import cn.hutool.core.thread.ThreadUtil;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.yingyangfly.common.utils.DateUtils;
@@ -13,12 +15,14 @@ import com.yingyangfly.core.domain.*;
 import com.yingyangfly.core.dto.RuleDto;
 import com.yingyangfly.core.enums.RecommendRuleEnums;
 import com.yingyangfly.core.enums.StatusEnums;
+import com.yingyangfly.core.mapper.ReviewRecordMapper;
 import com.yingyangfly.core.security.util.TokenUtil;
 import com.yingyangfly.core.service.*;
 import com.yingyangfly.core.service.impl.AppUserService;
 import com.yingyangfly.core.service.impl.SysDictDataService;
 import com.yingyangfly.redis.client.RedisClient;
 import lombok.extern.slf4j.Slf4j;
+import org.jacoco.agent.rt.internal_035b120.core.internal.flow.IFrame;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -67,6 +71,19 @@ public class RecommendFacade {
     @Resource
     RecommendRandom recommendRandom;
 
+
+    @Resource
+    ReviewTaskService reviewTaskService;
+
+    @Resource
+    ReviewRecordMapper reviewRecordMapper;
+
+    @Resource
+    ReviewService reviewService;
+
+    @Resource
+    GameRecommendationRecordService gameRecommendationRecordService;
+
     /**
      * 给用户推荐 畅游蓝豚和 首页推荐
      *
@@ -113,7 +130,7 @@ public class RecommendFacade {
            log.info("{}", TransactionSynchronizationManager.getCurrentTransactionName());
            GameRecommendRule ruleA = getRule("A");
            GameRecommendRule ruleB = getRule("B");
-           GameRecommendRule ruleC = getRule("C");
+//           GameRecommendRule ruleC = getRule("C");
            try {
                log.info("<<<<<<<<<<<<<<<推荐理疗任务开始>>>>>>>>>>>>>>");
                recommendTaskByRule(ruleA);
@@ -160,7 +177,7 @@ public class RecommendFacade {
                 String thName = Thread.currentThread().getName();
                 log.info("形成gameUser Thread: {}", thName);
                 for (AppUser appUser : appUsers) {
-                    List<Game> games = getGameAccordingByRules(rule, appUser);
+                    List<Game> games = recommendationA(appUser);
                     if (CollectionUtil.isEmpty(games)) {
                         continue;
                     }
@@ -354,4 +371,167 @@ public class RecommendFacade {
         }
         return randomElements;
     }
-}
+
+    private List<Game> recommendationA(AppUser appUser){
+        // 以生成理疗任务的返回空
+        List<Game> gameList = Lists.newArrayList();
+
+        QueryWrapper<GameTask> gameTaskWrapper = new QueryWrapper();
+        gameTaskWrapper.eq("user_id", appUser.getId());
+        gameTaskWrapper.eq("task_start_time", DateUtil.today());
+        GameTask gameTasks = gameTaskService.getOne(gameTaskWrapper);
+        if (ObjectUtils.isNotNull(gameTasks)){
+            return null;
+        }
+        log.info("=======================今日理疗任务为空继续执行======================");
+        //  测评有问题的 类型
+        Set<String> typeSet = new HashSet<>();
+        // 查询用户最近测评任务
+        LambdaQueryWrapper<ReviewTask> mocaWrapper = new LambdaQueryWrapper<>();
+        mocaWrapper.eq(ReviewTask::getUserId,appUser.getId());
+        mocaWrapper.orderByDesc(ReviewTask::getReviewTime)
+                .last("limit 1");
+        mocaWrapper.eq(ReviewTask::getType,"MOCA");
+        mocaWrapper.eq(ReviewTask::getStatus,"1");
+        ReviewTask mocaReviewTask = reviewTaskService.getOne(mocaWrapper);
+
+        LambdaQueryWrapper<ReviewTask> mmseWrapper = new LambdaQueryWrapper<>();
+        mmseWrapper.eq(ReviewTask::getUserId,appUser.getId());
+        mmseWrapper.orderByDesc(ReviewTask::getReviewTime)
+                .last("limit 1");
+        mmseWrapper.eq(ReviewTask::getType,"MMSE");
+        mmseWrapper.eq(ReviewTask::getStatus,"1");
+        ReviewTask mmseReviewTask = reviewTaskService.getOne(mmseWrapper);
+
+        String reviewTaskId  = null;
+
+        if (ObjectUtils.isNotNull(mocaReviewTask)){
+            reviewTaskId = mocaReviewTask.getReviewTaskId();
+            LambdaQueryWrapper<ReviewRecord> mocaReviewRecordWrapper = new LambdaQueryWrapper<>();
+            mocaReviewRecordWrapper.eq(ReviewRecord::getUserId,appUser.getId());
+            mocaReviewRecordWrapper.eq(ReviewRecord::getReviewTaskId,mocaReviewTask.getId());
+            mocaReviewRecordWrapper.eq(ReviewRecord::getCorrect,"0");
+            List<ReviewRecord> mocaReviewRecords = reviewRecordMapper.selectList(mocaReviewRecordWrapper);
+            for (ReviewRecord mocaReviewRecord : mocaReviewRecords) {
+                Review mocaReview = reviewService.getById(mocaReviewRecord.getReviewId());
+                typeSet.add(mocaReview.getViewType());
+            }
+        }
+
+        if (ObjectUtils.isNotNull(mmseReviewTask)){
+            reviewTaskId = mmseReviewTask.getReviewTaskId();
+            LambdaQueryWrapper<ReviewRecord> mocaReviewRecordWrapper = new LambdaQueryWrapper<>();
+            mocaReviewRecordWrapper.eq(ReviewRecord::getUserId,appUser.getId());
+            mocaReviewRecordWrapper.eq(ReviewRecord::getReviewTaskId,mmseReviewTask.getId());
+            mocaReviewRecordWrapper.eq(ReviewRecord::getCorrect,"0");
+            List<ReviewRecord> mmseReviewRecords = reviewRecordMapper.selectList(mocaReviewRecordWrapper);
+            for (ReviewRecord mmseReviewRecord : mmseReviewRecords) {
+                Review mocaReview = reviewService.getById(mmseReviewRecord.getReviewId());
+                typeSet.add(mocaReview.getViewType());
+            }
+        }
+        if (ObjectUtils.isNull(reviewTaskId)){
+            return null;
+        }
+
+        Integer frequency = 1;
+        Integer recommendNum = 1;
+
+        // 获取这个评估任务以前推荐的游戏
+        LambdaQueryWrapper<GameRecommendationRecord> gameRecommendationRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        gameRecommendationRecordLambdaQueryWrapper.eq(GameRecommendationRecord::getReviewTaskId,reviewTaskId);
+        gameRecommendationRecordLambdaQueryWrapper.orderByDesc(GameRecommendationRecord::getCreateTime)
+                .last("limit 1");
+        GameRecommendationRecord one = gameRecommendationRecordService.getOne(gameRecommendationRecordLambdaQueryWrapper);
+        if (ObjectUtils.isNotNull(one)){
+            // 不为空,判断是否推荐了7次
+            if (one.getRecommendNum() != 7) {
+                List<String> GameCodes = Arrays.stream(one.getGameCodes().split(","))
+                        .collect(Collectors.toList());
+                for (String gameCode : GameCodes) {
+                    LambdaQueryWrapper<Game> gameWrapper = new LambdaQueryWrapper<>();
+                    gameWrapper.eq(Game::getGameCode,gameCode).last("limit 1");
+                    Game game = gameService.getOne(gameWrapper);
+                    if (ObjectUtils.isNotNull(game)){
+                        gameList.add(game);
+                    }
+                }
+                frequency = one.getFrequency();
+                recommendNum = one.getRecommendNum() + 1;
+            } else {
+                //  为空当作已经推荐了7次,排除已经推荐后的游戏再推荐
+                // 存在两种情况  一种 所有游戏已经全部推荐完了,再次随机推荐,  第二种情况  还有游戏没有推荐,排除已经推荐的,对没有推荐的游戏随机推荐
+
+                // 获取已推荐的所有游戏
+                LambdaQueryWrapper<GameRecommendationRecord> gameRecommendationRecordQueryWrapper = new LambdaQueryWrapper<>();
+                gameRecommendationRecordQueryWrapper.eq(GameRecommendationRecord::getReviewTaskId,reviewTaskId);
+                gameRecommendationRecordQueryWrapper.eq(GameRecommendationRecord::getFrequency,one.getFrequency());
+                List<GameRecommendationRecord> gameRecommendationRecordList = gameRecommendationRecordService.list(gameRecommendationRecordLambdaQueryWrapper);
+                List<String> gameCodes = new ArrayList<>();
+                for (GameRecommendationRecord gameRecommendationRecord : gameRecommendationRecordList) {
+                    gameCodes.addAll(Arrays.stream(gameRecommendationRecord.getGameCodes().split(",")).collect(Collectors.toList()));
+                }
+                Map<String,Game> gameMap = new HashMap<>();
+                // 测评有问题的 类型的所有游戏
+                for (String type : typeSet) {
+                    LambdaQueryWrapper<Game> gameLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                    gameLambdaQueryWrapper.eq(Game::getGameType,type);
+                    List<Game> gameTypes = gameService.list(gameLambdaQueryWrapper);
+                    if (CollectionUtil.isNotEmpty(gameTypes)){
+                        Map<String, Game> map = gameTypes.stream().collect(Collectors.toMap(Game::getGameCode, game -> game));
+                        gameMap.putAll(map);
+                    }
+                }
+                // 清除已经推荐的游戏
+                gameCodes.forEach(gameMap::remove);
+                // 判断是否已经全部推荐过一次了
+                if (gameMap.isEmpty()){
+                    // 已全部推荐过一次 ,重新随机推荐
+                    frequency = one.getFrequency()+1;
+                    for (String type : typeSet) {
+                        LambdaQueryWrapper<Game> gameLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                        gameLambdaQueryWrapper.eq(Game::getGameType,type).last("limit 1");
+                        Game game = gameService.getOne(gameLambdaQueryWrapper);
+                        if (ObjectUtils.isNotNull(game)){
+                            gameList.add(game);
+                        }
+                    }
+                }else {
+                    // 从剩余的里面 根据缺陷类型各随机选取一款
+                    frequency = one.getFrequency();
+                    List<Game> games = gameMap.values().stream().collect(Collectors.toList());
+                    for (String type : typeSet) {
+                        int i = 0;
+                        for (Game game : games) {
+                            if (game.getGameType().equals(type)){
+                                if (i == 0){
+                                    gameList.add(game);
+                                    i++;
+                                }
+                            }
+                        }
+                    }
+                }
+
+            }
+        }else {
+            // 为空 代表该评估任务没有推荐记录 随机进行推荐
+            if (typeSet.size() == 0){
+                return null;
+            }
+            for (String type : typeSet) {
+                LambdaQueryWrapper<Game> gameLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                gameLambdaQueryWrapper.eq(Game::getGameType,type).last("limit 1");
+                Game game = gameService.getOne(gameLambdaQueryWrapper);
+                if (ObjectUtils.isNotNull(game)){
+                    gameList.add(game);
+                }
+            }
+        }
+        if (CollectionUtil.isNotEmpty(gameList)){
+            gameRecommendationRecordService.saveBatch(gameList,appUser.getId(),"A",reviewTaskId,recommendNum,frequency);
+        }
+        return gameList;
+    }
+
+}

+ 12 - 0
hcp-core/src/main/java/com/yingyangfly/core/service/GameRecommendationRecordService.java

@@ -0,0 +1,12 @@
+package com.yingyangfly.core.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yingyangfly.core.domain.Game;
+import com.yingyangfly.core.domain.GameRecommendationRecord;
+
+import java.util.List;
+
+public interface GameRecommendationRecordService extends IService<GameRecommendationRecord> {
+
+    boolean saveBatch(List<Game> games, Long userId , String playClass, String reviewtaskId, Integer recommendNum,Integer frequency);
+}

+ 72 - 0
hcp-core/src/main/java/com/yingyangfly/core/service/impl/AppUserService.java

@@ -42,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -105,6 +106,9 @@ public class AppUserService extends ServiceImpl<AppUserMapper, AppUser> implemen
     @Autowired
     private DepartmentService departmentService;
 
+    @Resource
+    private ReviewTaskService reviewTaskService;
+
     @Value("${query-daily-trai}")
     private String queryDailyTrai;
     /**
@@ -728,4 +732,72 @@ public class AppUserService extends ServiceImpl<AppUserMapper, AppUser> implemen
         appUserMapper.updateById(appUser);
         return ResultResponse.success();
     }
+
+    /**
+     * 按钮开通  患者套餐
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void dealPackage(Long packageId,Long appUserId){
+        // 获取患者信息
+        AppUser appUser = appUserMapper.selectById(appUserId);
+        //获取 套餐信息
+        LearningPackage learningPackage = learnPackageMapper.selectById(packageId);
+        appUser.setPackageName(learningPackage.getPackageName());
+        appUser.setPackageId(packageId);
+        if(org.apache.commons.lang3.StringUtils.isEmpty(appUser.getOrderStartTime())){
+            appUser.setOrderStartTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,new Date()));
+        }
+        Date endDate = org.apache.commons.lang3.StringUtils.isEmpty(appUser.getOrderEndTime())? new Date(): DateUtils.parseDate(appUser.getOrderEndTime());
+        Date  orderEndTime = DateUtils.addDays(endDate,learningPackage.getDays());
+        log.info("<<<<<<<<<<<<<<<<套餐结束时间:{}>>>>>>>>>>>>>",orderEndTime);
+        String packageEndDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, orderEndTime);
+        //记录更换套餐历史
+        log.info("<<<<<<<<<<<<<<记录购买套餐历史>>>>>>>>>>>>>>>");
+        AppUserPackageHis appUserPackageHis = new AppUserPackageHis();
+        appUserPackageHis.setCreateTime(new Date());
+        appUserPackageHis.setUpdateTime(new Date());
+        appUserPackageHis.setOrgCode(appUser.getOrgCode());
+        appUserPackageHis.setOrgName(appUser.getOrgName());
+        appUserPackageHis.setPackagePrice(learningPackage.getPrice());
+        appUserPackageHis.setPackageType(learningPackage.getPackageType());
+        appUserPackageHis.setPackageName(learningPackage.getPackageName());
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(appUser.getOrderEndTime())){
+            appUserPackageHis.setPackageStartTime(appUser.getOrderEndTime());
+        }else{
+            appUserPackageHis.setPackageStartTime(appUser.getOrderStartTime());
+        }
+
+        appUserPackageHis.setPackageEndTime(packageEndDate);
+        appUserPackageHis.setUserId(appUser.getId());
+        appUserPackageHis.setPackageId(learningPackage.getId());
+        appUserPackageHis.setLastId(appUser.getPackageRelationId());
+        appUserPackageHis.setRefundStatus("0");
+        appUserPackageHisService.saveAppUserPackageHis(appUserPackageHis);
+        appUser.setOrderEndTime(packageEndDate);
+        appUser.setPackageRelationId(appUserPackageHis.getId());
+        if ("1".equals(appUser.getTestFlag())){
+            // 删除未完成的测评任务
+            log.info("<<<<<<<<<<<<删除未完成的测评任务用户信息:{}>>>>>>>>>>",JSON.toJSONString(appUser));
+            List<ReviewTask> reviewTaskList =  reviewTaskService.selectUnDoneReviewTaskByUserId(appUser.getId());
+            List<Long> ids = reviewTaskList.stream().map(e -> e.getId()).collect(Collectors.toList());
+            log.info("<<<<<<<<<<<<<删除未完成的测评任务ids:{}>>>>>>>>>>>>>",JSON.toJSONString(ids));
+            reviewTaskService.removeBatchByIds(ids);
+            ReviewTask reviewTask = new ReviewTask();
+            reviewTask.setUserId(appUser.getId());
+            reviewTask.setCreateBy(appUser.getCreateBy());
+            //生成测评任务
+            reviewTaskService.saveReviewTask(reviewTask);
+            // 记录测评任务消息
+            log.info("<<<<<<<<<<<<<发送测评任务>>用户信息:{}>>>>>>>>>>>>",JSON.toJSONString(appUser));
+            msgWarnService.save(buildMsgWarn(appUser.getId(),"B","在线测评任务", "MOCA测评任务和MMSE测评任务已生成",appUser.getOrgCode(),appUser.getOrgName()));
+            log.info("<<<<<<<<<<<<续费IM>>用户信息:{}>>>>>>>>>>",JSON.toJSONString(appUser));
+            String msgDesn = String.format("尊敬的%s,您好,您购买的%s,已经生效,截止日期为%s",appUser.getName(),learningPackage.getPackageName(),appUser.getOrderEndTime());
+            msgWarnService.save(buildMsgWarn(appUser.getId(),"A","缴费通知",msgDesn,appUser.getOrgCode(),appUser.getOrgName()));
+        }else {
+            log.info("<<<<<<<<<<<<<<im续费>>用户信息:{}>>>>>>>>>>>>>>>>>",JSON.toJSONString(appUser));
+            String msgDesn = String.format("尊敬的%s,您好,您购买的%s,已经生效,截止日期为%s",appUser.getName(),learningPackage.getPackageName(),appUser.getOrderEndTime());
+            msgWarnService.save(buildMsgWarn(appUser.getId(),"A","缴费通知",msgDesn,appUser.getOrgCode(),appUser.getOrgName()));
+        }
+        appUserMapper.updateById(appUser);
+    }
 }

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

@@ -113,26 +113,38 @@ public class GamePlayRecordServiceImpl implements GamePlayRecordService {
                     gameUserMapper.updateById(gameUser);
                     gamePlayRecord.setGameRelevancyId(gameUser.getId());
                 }
-                //如果是任务 则更新当前关卡
-                if ("A".equals(gamePlayRecord.getPlayClass())) {
-                    if(gamePlayRecord.getIsPass().equals("0")){
+            }
+            //如果是任务 则更新当前关卡
+            if ("A".equals(gamePlayRecord.getPlayClass())) {
+                GameTask gameTask = gameTaskService.findMyCurrentTask(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,new Date()), appCurrentLoginUser.getId(),"1");
+                QueryWrapper<GameTaskDetail> queryWrapper = new QueryWrapper<>();
+                queryWrapper.eq("game_code", gamePlayRecord.getGameCode());
+                queryWrapper.eq("user_id", appCurrentLoginUser.getId());
+                queryWrapper.eq("status", "1");
+                queryWrapper.eq("task_id", gameTask.getId());
+                GameTaskDetail gameTaskDetail = gameTaskDetailMapper.selectOne(queryWrapper);
+                gamePlayRecord.setGameRelevancyId(gameTaskDetail.getId());
+                if ("0".equals(gamePlayRecord.getIsPass())  ){
+                    Integer currentLevel = gamePlayRecord.getGameLevel();
+                    gameTaskDetail.setGameLevel(currentLevel + 1 > gameTaskDetail.getTotalNum().intValue() ? currentLevel : currentLevel + 1);
+                    Integer gameScore = gamePlayRecord.getGameScore()+gameTaskDetail.getGameScore();
+                    gameTaskDetail.setGameScore(gameScore);
+                    Integer playTime = gamePlayRecord.getDuration();
+                    if (ObjectUtils.isNotNull(gameTaskDetail.getPlayTime())){
+                        playTime = playTime + gameTaskDetail.getPlayTime();
+                    }
+                    gameTaskDetail.setPlayTime(playTime);
+                    if (gameTaskDetail.getTotalNum().intValue() == currentLevel) {
+                        gameTaskDetail.setStatus("0");
+                        gameTaskDetail.setIsPass(gamePlayRecord.getIsPass());
+                        //更新任务当前进度
+                        updateTaskProgress(gameTaskDetail);
                         //如果当前游戏是任务,并且成功,获取当前用户脑力值并+1
                         updateUserMentalEnergy(appCurrentLoginUser, gamePlayRecord);
                     }
-
+                    gameTaskDetailMapper.updateById(gameTaskDetail);
                 }
-            }
-            //如果是任务 则更新当前关卡
-            if ("A".equals(gamePlayRecord.getPlayClass())) {
-                if ("0".equals(gamePlayRecord.getIsPass()) || "1".equals(gamePlayRecord.getIsPass())){
-                    GameTask gameTask = gameTaskService.findMyCurrentTask(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,new Date()), appCurrentLoginUser.getId(),"1");
-                    QueryWrapper<GameTaskDetail> queryWrapper = new QueryWrapper<>();
-                    queryWrapper.eq("game_code", gamePlayRecord.getGameCode());
-                    queryWrapper.eq("user_id", appCurrentLoginUser.getId());
-                    queryWrapper.eq("status", "1");
-                    queryWrapper.eq("task_id", gameTask.getId());
-                    GameTaskDetail gameTaskDetail = gameTaskDetailMapper.selectOne(queryWrapper);
-                    gamePlayRecord.setGameRelevancyId(gameTaskDetail.getId());
+                if ("1".equals(gamePlayRecord.getIsPass())) {
                     gameTaskDetail.setStatus("0");
                     gameTaskDetail.setIsPass(gamePlayRecord.getIsPass());
                     gameTaskDetail.setGameScore(gamePlayRecord.getGameScore());

+ 41 - 0
hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameRecommendationRecordServiceImpl.java

@@ -0,0 +1,41 @@
+package com.yingyangfly.core.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yingyangfly.core.domain.Game;
+import com.yingyangfly.core.domain.GameRecommendationRecord;
+import com.yingyangfly.core.domain.GameUser;
+import com.yingyangfly.core.mapper.GameRecommendationRecordMapper;
+import com.yingyangfly.core.service.GameRecommendationRecordService;
+import io.jsonwebtoken.lang.Strings;
+import io.swagger.models.auth.In;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+public class GameRecommendationRecordServiceImpl extends ServiceImpl<GameRecommendationRecordMapper, GameRecommendationRecord> implements GameRecommendationRecordService {
+
+
+    @Override
+    public boolean saveBatch(List<Game> games, Long userId, String playClass, String reviewtaskId, Integer recommendNum,Integer frequency) {
+        List<String> gameCodes = games.stream()
+                .map(Game::getGameCode)
+                .collect(Collectors.toList());
+        GameRecommendationRecord gameRecommendationRecord = new GameRecommendationRecord();
+        gameRecommendationRecord.setCreateBy("平台");
+        gameRecommendationRecord.setCreateTime(new Date());
+        gameRecommendationRecord.setUserId(userId);
+        gameRecommendationRecord.setGameCodes(gameCodes.stream().collect(Collectors.joining(",")));
+        gameRecommendationRecord.setPlayClass(playClass);
+        gameRecommendationRecord.setReviewTaskId(reviewtaskId);
+        gameRecommendationRecord.setRecommendNum(recommendNum);
+        gameRecommendationRecord.setFrequency(frequency);
+        gameRecommendationRecord.setOrgName("平台");
+        gameRecommendationRecord.setOrgCode("system");
+        baseMapper.insert(gameRecommendationRecord);
+        return true;
+    }
+}

+ 5 - 2
hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameServiceImpl.java

@@ -78,6 +78,8 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements Ga
         QueryWrapper<GameUser> queryWrapper = new QueryWrapper<>();
         GameDto gameDto =new GameDto();
         String gameCode = "";
+        //游戏总得分
+        Integer scoreSum = 0;
         if("C".equals(playClass) || "B".equals(playClass)){
             GameUser gameUser = gameUserMapper.selectById(id);
             gameCode = gameUser.getGameCode();
@@ -86,6 +88,8 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements Ga
             gameDto.setGameLevel(gameUser.getCurrentLevel());
             Integer gameDuration =gameUser.getGameDuration()* 60;
             gameDto.setGameDuration(gameDuration);
+            //游戏总得分
+            scoreSum = gamePlayRecordService.sumTotalScoreByUserIdAndGameCode(currentUser.getId(),gameCode,playClass);
         }
         if("A".equals(playClass)){
             QueryWrapper<GameTaskDetail> queryWrapperTaskDetail = new QueryWrapper<>();
@@ -116,8 +120,7 @@ public class GameServiceImpl extends ServiceImpl<GameMapper, Game> implements Ga
         //游戏标签
         SysDictData sysDictData = sysDictDataService.selectByDictTypeAndValue("game_type", game.getGameType());
         gameDto.setGameType(sysDictData.getDictLabel());
-        //游戏总得分
-        Integer scoreSum = gamePlayRecordService.sumTotalScoreByUserIdAndGameCode(currentUser.getId(),gameCode,playClass);
+
         gameDto.setGameTotalScore(scoreSum.toString());
         Integer scoreSumMax = gamePlayRecordService.sumMaxScoreByGameCode(gameCode,playClass,currentUser.getOrgCode());
         gameDto.setGameMaxScore(String.valueOf(scoreSumMax));

+ 3 - 1
hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameTaskServiceImpl.java

@@ -256,9 +256,11 @@ public class GameTaskServiceImpl extends ServiceImpl<GameTaskMapper, GameTask> i
                     gameTaskDetail.setGameCode(gameCode);
                     gameTaskDetail.setGameName(game.getGameName());
                     //根据脑力值计算游戏关卡
-                    int gameLevel = getGameLevel(appUser.getMentalEnergy(), game.getTotalNum());
+                    int gameLevel = 1;
+//                            getGameLevel(appUser.getMentalEnergy(), game.getTotalNum());
                     gameTaskDetail.setGameLevel(gameLevel);
                     gameTaskDetail.setGameCoverImage(game.getGameCoverImage());
+                    gameTaskDetail.setTotalNum(game.getTotalNum());
                     gameTaskDetail.setGameType(game.getGameType());
                     gameTaskDetail.setStatus("1");
                     gameTaskDetail.setCreateTime(new Date());

+ 4 - 2
hcp-core/src/main/java/com/yingyangfly/core/service/impl/GameUserServiceImpl.java

@@ -1,6 +1,7 @@
 package com.yingyangfly.core.service.impl;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@@ -292,8 +293,9 @@ public class GameUserServiceImpl extends ServiceImpl<GameUserMapper, GameUser> i
 
     @Override
     public void removeDelUserGameDone() {
-        QueryWrapper<GameUser> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("status","0");
+        LambdaQueryWrapper<GameUser> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(GameUser::getStatus,"0");
+        queryWrapper.eq(GameUser::getPlayClass,"B");
         GameUser gameUser = new GameUser();
         gameUser.setStatus("99");
         int updateCount = gameUserMapper.update(gameUser, queryWrapper);

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

@@ -96,15 +96,9 @@ public class ReviewServiceImpl extends ServiceImpl<ReviewMapper, Review> impleme
         AppUser appUser = appUserMapper.selectById(appCurrentLoginUser.getId());
         appUserUpdate.setId(appUser.getId());
         if(appUser.getTestFlag().equals("2")){
-            ReviewTask reviewTask1 = reviewTaskMapper.selectById(list.get(0).getReviewTaskId());
-            LambdaQueryWrapper<ReviewTask> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-            lambdaQueryWrapper.eq(ReviewTask::getReviewTaskId,reviewTask1.getReviewTaskId());
-            lambdaQueryWrapper.eq(ReviewTask::getStatus,"0");
-            Long aLong = reviewTaskMapper.selectCount(lambdaQueryWrapper);
-            if (aLong==0){
-                appUserUpdate.setTestFlag("0");
-            }
+
             appUserUpdate.setMentalEnergy(i+appUser.getMentalEnergy());
+            appUserUpdate.setTestFlag("0");
         }else{
             appUserUpdate.setMentalEnergy(i);
             appUserUpdate.setTestFlag("2");
@@ -302,7 +296,9 @@ public class ReviewServiceImpl extends ServiceImpl<ReviewMapper, Review> impleme
                 }
 
             }else{
-                i += Integer.parseInt(record.getScore());
+                if (record.getCorrect().equals("1")){
+                    i += Integer.parseInt(record.getScore());
+                }
             }
         }
         if(h == 1){
@@ -338,7 +334,9 @@ public class ReviewServiceImpl extends ServiceImpl<ReviewMapper, Review> impleme
                 }
 
             }else{
-                i += Integer.parseInt(record.getScore());
+                if (record.getCorrect().equals("1")){
+                    i += Integer.parseInt(record.getScore());
+                }
             }
         }
         if(h == 1){

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

@@ -144,6 +144,7 @@ public class ReviewTaskServiceImpl extends ServiceImpl<ReviewTaskMapper, ReviewT
         AppUser appUser = new AppUser();
         appUser.setTestFlag("1");
         appUser.setId(reviewTask.getUserId());
+        appUser.setMentalEnergy(0);
         appUserMapper.updateById(appUser);
     }
 

+ 14 - 4
hcp-platform/src/main/java/com/yingyangfly/platform/controller/PatientController.java

@@ -8,10 +8,7 @@ import com.yingyangfly.common.log.annotation.TraceLog;
 import com.yingyangfly.core.annotation.Log;
 import com.yingyangfly.core.domain.AppUser;
 import com.yingyangfly.core.domain.Equipment;
-import com.yingyangfly.core.dto.CurrentLoginUser;
-import com.yingyangfly.core.dto.FindPayParamDto;
-import com.yingyangfly.core.dto.GameDto;
-import com.yingyangfly.core.dto.PatientDto;
+import com.yingyangfly.core.dto.*;
 import com.yingyangfly.core.security.util.TokenUtil;
 import com.yingyangfly.core.service.impl.AppUserService;
 import com.yingyangfly.core.service.EquipmentService;
@@ -166,5 +163,18 @@ public class PatientController {
         return ResultResponse.success();
     }
 
+    /**
+     * 不付费开通理疗功能
+     * @param dealPackageDto
+     * @return
+     */
+    @PreAuthorize("@SSPermissionChecker.hasPermission('deal_apckage')")
+    @Log(title = "不付费开通理疗功能")
+    @PostMapping("/deal/package")
+    public ResultResponse dealPackage(@RequestBody DealPackageDto dealPackageDto){
+        appUserService.dealPackage(dealPackageDto.getPackageId(),dealPackageDto.getAppUserId());
+        return ResultResponse.success();
+    }
+
 
 }

+ 1 - 1
hcp-platform/src/main/java/com/yingyangfly/platform/sys/controller/UploadFileController.java

@@ -32,7 +32,7 @@ public class UploadFileController {
     private FileClient fileClient;
 
     // 允许上传的文件类型
-    private static final List<String> ALLOWED_FILE_TYPES = Arrays.asList("png", "jpg", "jpeg", "doc", "xls", "ppt", "mp4", "pdf", "apk");
+    private static final List<String> ALLOWED_FILE_TYPES = Arrays.asList("png", "jpg", "jpeg", "doc", "xls", "ppt", "mp4", "pdf", "apk", "mp3", "wav");
 
     /**
      * 通用上传