Explorar o código

Merge branch 'zx_saas_cbsDetail_0317' of http://git.dayaedu.com/yonge/mec into test

zouxuan hai 5 meses
pai
achega
a8cd14810a
Modificáronse 21 ficheiros con 216 adicións e 63 borrados
  1. 16 4
      mec-application/src/main/java/com/ym/mec/student/controller/MusicPracticeRecordController.java
  2. 5 2
      mec-application/src/main/java/com/ym/mec/student/controller/MusicSheetController.java
  3. 15 4
      mec-application/src/main/java/com/ym/mec/teacher/controller/MusicPracticeRecordController.java
  4. 4 1
      mec-application/src/main/java/com/ym/mec/teacher/controller/MusicSheetController.java
  5. 3 0
      mec-application/src/main/java/com/ym/mec/vo/MusicSheetVo.java
  6. 15 4
      mec-application/src/main/java/com/ym/mec/web/controller/MusicPracticeRecordController.java
  7. 4 2
      mec-application/src/main/java/com/ym/mec/web/controller/MusicSheetController.java
  8. 8 0
      mec-application/src/main/java/com/ym/mec/web/controller/TaskController.java
  9. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  10. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java
  11. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreService.java
  12. 5 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  13. 14 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  14. 46 33
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java
  15. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectServiceImpl.java
  16. 29 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java
  17. 8 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  18. 1 1
      mec-biz/src/main/resources/config/mybatis/UserMusicCompareCampDayDataMapper.xml
  19. 3 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  20. 5 1
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  21. 21 0
      mec-task/src/main/java/com/ym/mec/task/jobs/BalanceRelationTask.java

+ 16 - 4
mec-application/src/main/java/com/ym/mec/student/controller/MusicPracticeRecordController.java

@@ -7,13 +7,11 @@ import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.microsvc.toolkit.config.validator.group.ValidGroups;
+import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.entity.UserMusic;
 import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.wrapper.MusicPracticeRecordWrapper;
-import com.ym.mec.biz.service.MusicPracticeRecordService;
-import com.ym.mec.biz.service.SysMusicScoreService;
-import com.ym.mec.biz.service.SysUserService;
-import com.ym.mec.biz.service.UserMusicService;
+import com.ym.mec.biz.service.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -38,6 +36,9 @@ public class MusicPracticeRecordController {
     private MusicPracticeRecordService musicPracticeRecordService;
 
     @Autowired
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
+
+    @Autowired
     private UserMusicService userMusicService;
 
     @Autowired
@@ -105,6 +106,17 @@ public class MusicPracticeRecordController {
         return R.from(musicPracticeRecordService.add(from));
     }
 
+
+    @ApiOperation(value = "修改", notes = "曲目练习记录- 传入 MusicPracticeRecordVo.MusicPracticeRecord")
+    @PostMapping("/update")
+    public R update(@RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record) {
+        SysMusicCompareRecord sysMusicCompareRecord = new SysMusicCompareRecord();
+        sysMusicCompareRecord.setId(record.getId());
+        sysMusicCompareRecord.setRecordFilePath(record.getRecordFilePath());
+        sysMusicCompareRecordService.update(sysMusicCompareRecord);
+        return R.defaultR();
+    }
+
     @ApiOperation(value = "用户最后一次评测数据")
     @ApiImplicitParams({
         @ApiImplicitParam(name = "recordId", value = "曲目练习记录Id", dataType = "long")

+ 5 - 2
mec-application/src/main/java/com/ym/mec/student/controller/MusicSheetController.java

@@ -68,7 +68,7 @@ public class MusicSheetController {
     public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id,Boolean simpleFlag) {
         CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id, simpleFlag);
         musicSheet.setBizId(Long.valueOf(id));
-
+        Integer userId = sysUserService.getUserId();
         MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
         SysMusicScore detail = musicSheetService.get(id);
         if (detail == null) {
@@ -82,6 +82,9 @@ public class MusicSheetController {
             musicSheetDetail.setIsConvertibleScore(detail.getIsConvertibleScore());
         }
 
+        //是否使用原生评测服务
+        musicSheetDetail.setUseNativeEvaluation(musicSheetService.getUseNativeEvaluationService(userId));
+
         // 如果是合奏 并且乐器ID = 2268
         musicSheetDetail.setSpecialPercussionFlag(false);
         if ("2268".equals(musicSheetDetail.getMusicalInstrumentIds()) && musicSheetDetail.getMusicSheetType() == EMusicSheetType.CONCERT) {
@@ -106,7 +109,7 @@ public class MusicSheetController {
         }
         MusicSheetWrapper.ClientMusicSheetInfoQuery query = new MusicSheetWrapper.ClientMusicSheetInfoQuery();
         query.setUserType(ClientEnum.STUDENT);
-        query.setUserId(sysUserService.getUserId());
+        query.setUserId(userId);
         query.setMusicSheetId(id);
         MusicSheetWrapper.ClientMusicSheetInfo clientMusicSheetInfo = musicSheetService.queryMusicScoreDetail(query);
         if (clientMusicSheetInfo != null) {

+ 15 - 4
mec-application/src/main/java/com/ym/mec/teacher/controller/MusicPracticeRecordController.java

@@ -7,13 +7,11 @@ import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.microsvc.toolkit.config.validator.group.ValidGroups;
+import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.entity.UserMusic;
 import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.wrapper.MusicPracticeRecordWrapper;
-import com.ym.mec.biz.service.MusicPracticeRecordService;
-import com.ym.mec.biz.service.SysMusicScoreService;
-import com.ym.mec.biz.service.SysUserService;
-import com.ym.mec.biz.service.UserMusicService;
+import com.ym.mec.biz.service.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -36,6 +34,9 @@ import java.util.Objects;
 public class MusicPracticeRecordController {
 
     @Autowired
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
+
+    @Autowired
     private MusicPracticeRecordService musicPracticeRecordService;
 
     @Autowired
@@ -106,6 +107,16 @@ public class MusicPracticeRecordController {
         return R.from(musicPracticeRecordService.add(from));
     }
 
+    @ApiOperation(value = "修改", notes = "曲目练习记录- 传入 MusicPracticeRecordVo.MusicPracticeRecord")
+    @PostMapping("/update")
+    public R update(@RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record) {
+        SysMusicCompareRecord sysMusicCompareRecord = new SysMusicCompareRecord();
+        sysMusicCompareRecord.setId(record.getId());
+        sysMusicCompareRecord.setRecordFilePath(record.getRecordFilePath());
+        sysMusicCompareRecordService.update(sysMusicCompareRecord);
+        return R.defaultR();
+    }
+
     @ApiOperation(value = "用户最后一次评测数据")
     @ApiImplicitParams({
         @ApiImplicitParam(name = "recordId", value = "曲目练习记录Id", dataType = "long")

+ 4 - 1
mec-application/src/main/java/com/ym/mec/teacher/controller/MusicSheetController.java

@@ -82,6 +82,9 @@ public class MusicSheetController {
             musicSheetDetail.setScoreType(detail.getScoreType());
             musicSheetDetail.setIsConvertibleScore(detail.getIsConvertibleScore());
         }
+        Integer userId = sysUserService.getUserId();
+        //是否使用原生评测服务
+        musicSheetDetail.setUseNativeEvaluation(musicSheetService.getUseNativeEvaluationService(userId));
 
         // 如果是合奏 并且乐器ID = 2268
         musicSheetDetail.setSpecialPercussionFlag(false);
@@ -107,7 +110,7 @@ public class MusicSheetController {
         }
         MusicSheetWrapper.ClientMusicSheetInfoQuery query = new MusicSheetWrapper.ClientMusicSheetInfoQuery();
         query.setUserType(ClientEnum.TEACHER);
-        query.setUserId(sysUserService.getUserId());
+        query.setUserId(userId);
         query.setMusicSheetId(id);
         MusicSheetWrapper.ClientMusicSheetInfo clientMusicSheetInfo = musicSheetService.queryMusicScoreDetail(query);
         if (clientMusicSheetInfo != null) {

+ 3 - 0
mec-application/src/main/java/com/ym/mec/vo/MusicSheetVo.java

@@ -404,6 +404,9 @@ public class MusicSheetVo {
         @ApiModelProperty("是否是特殊打击乐")
         private Boolean specialPercussionFlag;
 
+        @ApiModelProperty("是否使用原生评测服务")
+        private Boolean useNativeEvaluation = false;
+
     }
 
     @Data

+ 15 - 4
mec-application/src/main/java/com/ym/mec/web/controller/MusicPracticeRecordController.java

@@ -7,13 +7,11 @@ import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.microsvc.toolkit.config.validator.group.ValidGroups;
+import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.entity.UserMusic;
 import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.wrapper.MusicPracticeRecordWrapper;
-import com.ym.mec.biz.service.MusicPracticeRecordService;
-import com.ym.mec.biz.service.SysMusicScoreService;
-import com.ym.mec.biz.service.SysUserService;
-import com.ym.mec.biz.service.UserMusicService;
+import com.ym.mec.biz.service.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -37,6 +35,9 @@ public class MusicPracticeRecordController {
     private MusicPracticeRecordService musicPracticeRecordService;
 
     @Autowired
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
+
+    @Autowired
     private UserMusicService userMusicService;
 
     @Autowired
@@ -104,6 +105,16 @@ public class MusicPracticeRecordController {
         return R.from(musicPracticeRecordService.add(from));
     }
 
+    @ApiOperation(value = "修改", notes = "曲目练习记录- 传入 MusicPracticeRecordVo.MusicPracticeRecord")
+    @PostMapping("/update")
+    public R update(@RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record) {
+        SysMusicCompareRecord sysMusicCompareRecord = new SysMusicCompareRecord();
+        sysMusicCompareRecord.setId(record.getId());
+        sysMusicCompareRecord.setRecordFilePath(record.getRecordFilePath());
+        sysMusicCompareRecordService.update(sysMusicCompareRecord);
+        return R.defaultR();
+    }
+
     @ApiOperation(value = "用户最后一次评测数据")
     @ApiImplicitParams({
         @ApiImplicitParam(name = "recordId", value = "曲目练习记录Id", dataType = "long")

+ 4 - 2
mec-application/src/main/java/com/ym/mec/web/controller/MusicSheetController.java

@@ -64,7 +64,7 @@ public class MusicSheetController {
     public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id,Boolean simpleFlag) {
         CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id, simpleFlag);
         musicSheet.setBizId(Long.valueOf(id));
-
+        Integer userId = sysUserService.getUserId();
         MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
         SysMusicScore detail = musicSheetService.get(id);
         if (detail == null) {
@@ -77,6 +77,8 @@ public class MusicSheetController {
             musicSheetDetail.setScoreType(detail.getScoreType());
             musicSheetDetail.setIsConvertibleScore(detail.getIsConvertibleScore());
         }
+        //是否使用原生评测服务
+        musicSheetDetail.setUseNativeEvaluation(musicSheetService.getUseNativeEvaluationService(userId));
 
         // 如果是合奏 并且乐器ID = 2268
         musicSheetDetail.setSpecialPercussionFlag(false);
@@ -102,7 +104,7 @@ public class MusicSheetController {
         }
         MusicSheetWrapper.ClientMusicSheetInfoQuery query = new MusicSheetWrapper.ClientMusicSheetInfoQuery();
         query.setUserType(ClientEnum.SCHOOL);
-        query.setUserId(sysUserService.getUserId());
+        query.setUserId(userId);
         query.setMusicSheetId(id);
         MusicSheetWrapper.ClientMusicSheetInfo clientMusicSheetInfo = musicSheetService.queryMusicScoreDetail(query);
         if (clientMusicSheetInfo != null) {

+ 8 - 0
mec-application/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -765,4 +765,12 @@ public class TaskController extends BaseController {
     public void deleteOverdueHomework(){
         studentCourseHomeworkService.deleteOverdueHomework();
     }
+
+    /**
+     * 平衡关系定时任务
+     */
+    @GetMapping("/balanceRelation")
+	public void balanceRelation(){
+		studentService.balanceRelation();
+	}
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -403,4 +403,8 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
     List<Integer> queryByCoopIds(@Param("coopId") Integer coopId);
 
     void updateCloudTeacherEndTime(@Param("studentId") Integer studentId);
+
+    void balanceRelation(@Param("lastDayOfLastMonth") String lastDayOfLastMonth,
+                         @Param("firstDayOfThisMonth") String firstDayOfThisMonth,
+                         @Param("firstDayOfLastMonth") String firstDayOfLastMonth);
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java

@@ -248,4 +248,9 @@ public interface StudentService extends BaseService<Integer, Student> {
     PageInfo<Student> queryBaseInfoByPage(QueryInfo queryInfo);
 
     Map<Integer,SysUser> getUserMapByIds(List<Integer> userIds);
+
+    /**
+     * 平衡关系定时任务
+     */
+    void balanceRelation();
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreService.java

@@ -77,4 +77,7 @@ public interface SysMusicScoreService extends BaseService<Integer, SysMusicScore
      * @return List<MusicSheetWrapper.InstrumentCode>
      */
     List<MusicSheetWrapper.InstrumentCode> getAllInstrumentCode();
+
+    //判断当前用户是否使用原生评测功能
+    Boolean getUseNativeEvaluationService(Integer userId);
 }

+ 5 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -391,6 +391,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	@Override
 	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds) {
+
 		Map<Integer, List<CourseSchedule>> memberCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getMemberFlag));
 		Map<Long,List<Long>> courseCalenderMap = new HashMap<>(10);
 		for (Integer memberFlag : memberCourseMap.keySet()) {
@@ -424,7 +425,6 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 						}
 						courseTypeCourseDurationMap.put(typeCoursesEntry.getKey(), sdMap);
 					}
-
 					List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
 
 					for (Integer studentId : studentIds) {
@@ -463,7 +463,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 								cssp.setUserId(studentId);
 								//扣除可排课时长
 								//处理经营报表
-								this.calcCourseMinutes(musicGroupPaymentStudentCourseDetails,courseDuration,cssp,musicGroupPaymentCalenders,courseCalenderMap);
+								this.calcCourseMinutes(musicGroupPaymentStudentCourseDetails,courseDuration,
+										cssp,musicGroupPaymentCalenders,courseCalenderMap);
 								typeCourseStudentPayments.add(cssp);
 							}
 							courseScheduleStudentPayments.addAll(typeCourseStudentPayments);
@@ -485,8 +486,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	private Boolean calcCourseMinutes(List<MusicGroupPaymentStudentCourseDetail> courseDetails,
 									  Integer courseDuration,
 									  CourseScheduleStudentPayment studentPayment,
-									  List<MusicGroupPaymentCalender> musicGroupPaymentCalenders,
-									  Map<Long,List<Long>> courseCalenderMap){
+									  List<MusicGroupPaymentCalender> musicGroupPaymentCalenders,Map<Long,List<Long>> courseCalenderMap){
 		Boolean result = true;
 		Integer courseMinutes = courseDuration;
 		Map<Long, List<MusicGroupPaymentCalender>> calenderMap = musicGroupPaymentCalenders.stream().collect(Collectors.groupingBy(MusicGroupPaymentCalender::getId));
@@ -540,6 +540,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 //					operatingReportCloudService.updateSet(calender,courseIds);
 				}
 				if(courseMinutes == 0){
+
 					return result;
 				}
 			}

+ 14 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -67,8 +67,6 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     @Autowired
     private MemberRankSettingService memberRankSettingService;
     @Autowired
-    private SysConfigDao sysConfigDao;
-    @Autowired
     private SysTenantConfigService sysTenantConfigService;
     @Autowired
     private SysMessageService sysMessageService;
@@ -1671,6 +1669,20 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         return sysUsers.stream().collect(Collectors.toMap(SysUser::getId, Function.identity()));
     }
 
+    @Override
+    public void balanceRelation() {
+        Date now = new Date();
+        //获取上个月最后一天
+        String lastDayOfLastMonth = DateUtil.format(DateUtil.getLastDayOfMonth(DateUtil.addMonths(now, -1)), DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        //获取上个月第一天
+        String firstDayOfLastMonth = DateUtil.format(DateUtil.getFirstDayOfMonth(DateUtil.addMonths(now, -1)), DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        //获取当月第一天
+        String firstDayOfThisMonth = DateUtil.format(DateUtil.getFirstDayOfMonth(now), DateUtil.ISO_EXPANDED_DATE_FORMAT);
+        //汇总平衡关系
+        studentDao.balanceRelation(lastDayOfLastMonth, firstDayOfThisMonth,firstDayOfLastMonth);
+
+    }
+
     private int queryBaseInfoCount(Map<String, Object> params) {
         return studentDao.queryBaseInfoCount(params);
     }

+ 46 - 33
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java

@@ -17,6 +17,8 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RAtomicLong;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
@@ -34,7 +36,7 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 	@Autowired
 	private StudentBasicInfoDao studentBasicInfoDao;
 	@Autowired
-	private RedisCache<String,Integer> redisCache;
+	private RedissonClient redissonClient;
 
 	@Override
 	public BaseDAO<Integer, StudentStatistics> getDAO() {
@@ -48,54 +50,65 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 
     @Override
 	public void updateStudentStatistics() {
-		//更新学员基本信息
+		// 更新学员基本信息
 		studentBasicInfoDao.updateStudentBasicInfo();
-		RedisTemplate<String, Integer> redisTemplate = redisCache.getRedisTemplate();
-		Integer num = redisTemplate.opsForValue().get("updateStudentStatisticsNum:");
-		if(num == null || num == 1){
-			if(num == null){
-				num = 1;
-			}
-			//更新未排课总数
+
+		// 获取 Redis 中的 AtomicLong 对象,表示统计数字
+		RAtomicLong atomicLong = redissonClient.getAtomicLong("updateStudentStatisticsNum:");
+
+		// 获取当前计数值
+		long num = atomicLong.get();
+
+		if (num == 0) {
+			// 设置初始值为 1 如果 num 为空
+			atomicLong.set(1);
+			num = 1; // 初始值为 1
+		}
+
+		// 根据 num 的值更新学员统计数据
+		if (num == 1) {
+			// 更新未排课总数
 			studentStatisticsDao.updateNoCourseNum();
-		}else if (num == 2){
-			//更新未开始价值总和
+		} else if (num == 2) {
+			// 更新未开始价值总和
 			studentStatisticsDao.updateNotStartCourseFee();
-		}else if (num == 3){
-			//更新未排课价值
+		} else if (num == 3) {
+			// 更新未排课价值
 			studentStatisticsDao.updateNoCourseFee();
-		}else if (num == 4){
-			//更新第一次课的时间\最近一次课时间
+		} else if (num == 4) {
+			// 更新第一次课的时间、最近一次课时间
 			studentStatisticsDao.updateFirstAndLastCourseTime();
-		}else if (num == 5){
-			//更新进行中课程组数量
+		} else if (num == 5) {
+			// 更新进行中课程组数量
 			studentStatisticsDao.updateNormalGroupNum();
-		}else if (num == 6){
-			//更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
+		} else if (num == 6) {
+			// 更新总课时数、已完成、剩余课时数、最近30天课耗、最近1年课耗
 			studentStatisticsDao.updateCourseNum();
-		}else if (num == 7){
-			//更新声部班老师
+		} else if (num == 7) {
+			// 更新声部班老师
 			studentBasicInfoDao.updateSubjectTeacher();
-		}else if (num == 8){
-			//更新乐团主管、指导老师
+		} else if (num == 8) {
+			// 更新乐团主管、指导老师
 			studentStatisticsDao.updateTeacherAndEdu();
-		}else if (num == 8){
-			//更新学员合作单位
-			studentStatisticsDao.updateCooperationOrgan();
 		} else if (num == 9) {
-			//更新第一次付费时间
+			// 更新学员合作单位
+			studentStatisticsDao.updateCooperationOrgan();
+		} else if (num == 10) {
+			// 更新第一次付费时间
 			studentStatisticsDao.updateFirstOrderTime();
-			num = 0;
+			// 重置 num 为 0 完成所有更新
+			atomicLong.set(0);
 		}
-		num++;
-		redisTemplate.opsForValue().set("updateStudentStatisticsNum:",num);
+
+		// 递增 num 的值,进入下一个步骤
+		atomicLong.incrementAndGet();
 	}
 
 	public int countStatistics(StudentStatisticsQueryInfo queryInfo){
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 		if(StringUtils.isNotEmpty(queryInfo.getOrganId())){
-			List<Integer> organIdList = Arrays.stream(queryInfo.getOrganId().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+			List<Integer> organIdList = Arrays.stream(queryInfo.getOrganId().split(",")).map(Integer::valueOf).collect(Collectors.toList());
 			params.put("organIdList",organIdList);
 		}
 		return studentStatisticsDao.countStatistics(params);
@@ -128,7 +141,7 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
     public StudentStatisticsSumDto studentSmallClassStatisticsSum(String groupType,String organId) {
 		List<Integer> organIdList = new ArrayList<>();
 		if(StringUtils.isNotEmpty(organId)){
-			organIdList = Arrays.stream(organId.split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+			organIdList = Arrays.stream(organId.split(",")).map(Integer::valueOf).collect(Collectors.toList());
 		}
 		StudentStatisticsSumDto dto = studentStatisticsDao.studentSmallClassStatisticsSum(groupType, organIdList);
 		//获取进行中的学员数量
@@ -144,7 +157,7 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 		StudentStatisticsSumForDateDto sumForDateDto = new StudentStatisticsSumForDateDto();
 		List<Integer> organIdList = new ArrayList<>();
 		if(StringUtils.isNotEmpty(organId)){
-			organIdList = Arrays.stream(organId.split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+			organIdList = Arrays.stream(organId.split(",")).map(Integer::valueOf).collect(Collectors.toList());
 		}
 		//获取流失人数
 //		sumForDateDto.setLostNum(studentStatisticsDao.countLostStudentNum(groupType,startDate,endDate,organIdList));

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectServiceImpl.java

@@ -315,7 +315,8 @@ public class SubjectServiceImpl extends BaseServiceImpl<Integer, Subject> implem
         List<StudentSubjectDto> subjects = subjectDao.getSubjectByStudentId(studentIds);
         Map<Integer, StudentSubjectDto> map = new HashMap<>();
         if (!CollectionUtils.isEmpty(subjects)) {
-            map = subjects.stream().collect(Collectors.toMap(StudentSubjectDto::getStudentId, Function.identity()));
+            map = subjects.stream().filter(o->o.getSubjectId() !=null)
+                    .collect(Collectors.toMap(StudentSubjectDto::getStudentId, Function.identity()));
         }
         return map;
     }

+ 29 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java

@@ -14,10 +14,8 @@ import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApplicationExtendCli
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.musicInstrument.CbsMusicalInstrumentWrapper;
 import com.microsvc.toolkit.common.response.template.R;
-import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
-import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
-import com.ym.mec.biz.dal.dao.SysMusicScoreCategoriesDao;
-import com.ym.mec.biz.dal.dao.SysMusicScoreDao;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.ReasonDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ClientEnum;
@@ -74,6 +72,11 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
     @Autowired
     private MemberRankCategoryMapperService memberRankCategoryMapperService;
 
+    @Resource
+    private SysConfigDao sysConfigDao;
+    @Resource
+    private TeacherDao teacherDao;
+
     @Value("${openfeign-client.app-id:1745637981387108354}")
     public Long applicationId;
 
@@ -842,4 +845,26 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         }).collect(Collectors.toList());
 
     }
+
+    @Override
+    public Boolean getUseNativeEvaluationService(Integer userId) {
+        //是否使用原生评测服务
+        String useNativeEvaluationService = sysConfigDao.findConfigValue("use_native_evaluation_service");
+        if (StringUtils.isEmpty(useNativeEvaluationService) || "0".equals(useNativeEvaluationService)) {
+            return false;
+        }else {
+            //获取使用原生评测服务的分部
+            String useNativeEvaluationServiceOrganIds = sysConfigDao.findConfigValue("use_native_evaluation_service_organ");
+            if (StringUtils.isEmpty(useNativeEvaluationServiceOrganIds)) {
+                return true;
+            }else {
+                SysUser user = teacherDao.getUser(userId);
+                if (user == null) {
+                    return false;
+                }
+                List<String> organIds = Arrays.stream(useNativeEvaluationServiceOrganIds.split(",")) .collect(Collectors.toList());
+                return organIds.contains(user.getOrganId().toString());
+            }
+        }
+    }
 }

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -1559,4 +1559,12 @@
         and mg.status_ = 'PROGRESS'
         and mg.cooperation_organ_id_ = #{coopId}
     </select>
+    <update id="balanceRelation">
+        select firstMonthVipReportStatis(#{firstDayOfThisMonth});
+        select firstMonthMusicClassReportStatis(#{firstDayOfThisMonth});
+        select currentMonthVipReportStatis(#{firstDayOfLastMonth},#{lastDayOfLastMonth});
+        select currentMonthMusicClassReportStatis(#{firstDayOfLastMonth},#{lastDayOfLastMonth});
+        select lastMonthVipReportStatis(#{lastDayOfLastMonth});
+        select lastMonthMusicClassReportStatis(#{lastDayOfLastMonth});
+    </update>
 </mapper>

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/UserMusicCompareCampDayDataMapper.xml

@@ -8,6 +8,6 @@
         a.train_time_ = a.train_time_ + #{playTime}
         where a.user_id_ = #{userId}
         and a.camp_id_ = #{campId}
-        and a.day_ = date_format(now(), '%Y-%m-%d')
+        and a.day_ = CURDATE()
     </update>
 </mapper>

+ 3 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -331,4 +331,7 @@ public interface TaskRemoteService {
     @GetMapping("/task/deleteOverdueHomework")
     void deleteOverdueHomework();
 
+    @GetMapping("task/balanceRelation")
+    void balanceRelation();
+
 }

+ 5 - 1
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -1,6 +1,5 @@
 package com.ym.mec.task.fallback;
 
-import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.task.TaskRemoteService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -381,4 +380,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
     public void deleteOverdueHomework() {
         logger.error("删除过期作业失败");
     }
+
+    @Override
+    public void balanceRelation() {
+        logger.error("平衡关系更新失败");
+    }
 }

+ 21 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/BalanceRelationTask.java

@@ -0,0 +1,21 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BalanceRelationTask extends BaseTask {
+
+    @Autowired
+    private TaskRemoteService taskRemoteService;
+
+    @Override
+    public void execute() throws TaskException {
+        taskRemoteService.balanceRelation();
+    }
+
+}
+