|
@@ -24,6 +24,8 @@ import com.ym.mec.util.collection.MapUtil;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
import com.ym.mec.util.web.EParallelStream;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -34,9 +36,7 @@ import java.time.DayOfWeek;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
-import java.util.concurrent.CompletableFuture;
|
|
|
-import java.util.concurrent.ExecutorService;
|
|
|
-import java.util.concurrent.Executors;
|
|
|
+import java.util.concurrent.*;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -70,7 +70,13 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
private SysEmployeePositionService employeePositionService;
|
|
|
@Autowired
|
|
|
private MusicGroupCalenderRefundPeriodDao musicGroupCalenderRefundPeriodDao;
|
|
|
- private static final ExecutorService exportExecutorService = Executors.newFixedThreadPool(10);
|
|
|
+ private static final ExecutorService exportExecutorService = new ThreadPoolExecutor(
|
|
|
+ 20, 20, 0L, TimeUnit.MILLISECONDS,
|
|
|
+ new LinkedBlockingQueue<>(),
|
|
|
+ Executors.defaultThreadFactory(),
|
|
|
+ new ThreadPoolExecutor.CallerRunsPolicy()
|
|
|
+ );;
|
|
|
+ private static final Logger businessLogger = LoggerFactory.getLogger(IndexBaseMonthDataServiceImpl.class);
|
|
|
|
|
|
private static ThreadLocal<Set<Integer>> organIds = new ThreadLocal<Set<Integer>>(){
|
|
|
@Override
|
|
@@ -497,263 +503,227 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void indexBaseDataTask(Integer tenantId, String dayStr, Set<IndexDataType> dataTypes) {
|
|
|
- LocalDate nowDate = LocalDate.now();
|
|
|
-
|
|
|
- List<Organization> allOrgans = organizationService.findAllOrgans(tenantId);
|
|
|
- this.organIds.get().clear();
|
|
|
- this.organIds.get().addAll(allOrgans.stream().map(Organization::getId).collect(Collectors.toSet()));
|
|
|
|
|
|
- if(StringUtils.isBlank(dayStr)){
|
|
|
- dayStr = nowDate.plusDays(-1).toString();
|
|
|
- }
|
|
|
+ public void runByBewTransactional(List<Runnable> tasks) {
|
|
|
+ List<CompletableFuture<Void>> futures = tasks.stream()
|
|
|
+ .map(task -> CompletableFuture.runAsync(() -> {
|
|
|
+ try {
|
|
|
+ task.run();
|
|
|
+ } catch (Exception e) {
|
|
|
+ businessLogger.error("indexBaseDataTask error: {}", e.getMessage());
|
|
|
+ }
|
|
|
+ }, exportExecutorService))
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
- LocalDate day = LocalDate.parse(dayStr, DateUtil.dateFormatter);
|
|
|
- LocalDate monday = day.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
|
|
|
+ CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]))
|
|
|
+ .join();
|
|
|
+ }
|
|
|
|
|
|
- //学员数据
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.STUDENT_REGISTRATION_NUM)){
|
|
|
- saveData(indexBaseMonthDataDao.getStudentRegistrationData(dayStr,tenantId), dayStr, IndexDataType.STUDENT_REGISTRATION_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.CHARGE_STUDENT_CHANGE_RATE)) {
|
|
|
- saveData(indexBaseMonthDataDao.getChargeStudentChangeData(dayStr,tenantId), dayStr, IndexDataType.CHARGE_STUDENT_CHANGE_RATE, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.ACTIVATION_RATE)) {
|
|
|
- saveData(indexBaseMonthDataDao.getStudentSignUpData(dayStr, nowDate.plusMonths(-6).toString(),tenantId), dayStr, IndexDataType.ACTIVATION_RATE, tenantId);
|
|
|
- }
|
|
|
|
|
|
- //运营数据
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.SCHOOL)) {
|
|
|
- saveData(indexBaseMonthDataDao.getSchoolData(dayStr,tenantId), dayStr, IndexDataType.SCHOOL, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.PROGRESS_MUSIC_GROUP_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getMusicData(dayStr,tenantId), dayStr, IndexDataType.PROGRESS_MUSIC_GROUP_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(TRANSACTION_TEACHER_NUM)) {
|
|
|
- Map<String, List<SimpleUserDto>> organPosition = employeePositionService.findOrganPosition(null, tenantId);
|
|
|
- List<SimpleUserDto> transactionTeachers = organPosition.get(SysUserRoleEnum.JOIN_TEACHER.name());
|
|
|
- Map<Integer, Integer> organTeacherNumMap = new HashMap<>();
|
|
|
- if (transactionTeachers != null) {
|
|
|
- for (SimpleUserDto transactionTeacher : transactionTeachers) {
|
|
|
- Set<Integer> organIds = Arrays.stream(transactionTeacher.getOrganIds().split(","))
|
|
|
- .map(s -> Integer.valueOf(s))
|
|
|
- .collect(Collectors.toSet());
|
|
|
- for (Integer organId : organIds) {
|
|
|
- if (organTeacherNumMap.containsKey(organId)) {
|
|
|
- organTeacherNumMap.put(organId, organTeacherNumMap.get(organId) + 1);
|
|
|
- } else {
|
|
|
- organTeacherNumMap.put(organId, 1);
|
|
|
- }
|
|
|
+ //学员数据
|
|
|
+ public void studentData(String dayStr,Integer tenantId,LocalDate nowDate){
|
|
|
+ saveData(indexBaseMonthDataDao.getStudentRegistrationData(dayStr,tenantId), dayStr, IndexDataType.STUDENT_REGISTRATION_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getChargeStudentChangeData(dayStr,tenantId), dayStr, IndexDataType.CHARGE_STUDENT_CHANGE_RATE, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getStudentSignUpData(dayStr, nowDate.plusMonths(-6).toString(),tenantId), dayStr, IndexDataType.ACTIVATION_RATE, tenantId);
|
|
|
+ }
|
|
|
+ //运营数据
|
|
|
+ public void operateData(String dayStr,Integer tenantId){
|
|
|
+ saveData(indexBaseMonthDataDao.getSchoolData(dayStr,tenantId), dayStr, IndexDataType.SCHOOL, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getMusicData(dayStr,tenantId), dayStr, IndexDataType.PROGRESS_MUSIC_GROUP_NUM, tenantId);
|
|
|
+ Map<String, List<SimpleUserDto>> organPosition = employeePositionService.findOrganPosition(null, tenantId);
|
|
|
+ List<SimpleUserDto> transactionTeachers = organPosition.get(SysUserRoleEnum.JOIN_TEACHER.name());
|
|
|
+ Map<Integer, Integer> organTeacherNumMap = new HashMap<>();
|
|
|
+ if (transactionTeachers != null) {
|
|
|
+ for (SimpleUserDto transactionTeacher : transactionTeachers) {
|
|
|
+ Set<Integer> organIds = Arrays.stream(transactionTeacher.getOrganIds().split(","))
|
|
|
+ .map(s -> Integer.valueOf(s))
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ for (Integer organId : organIds) {
|
|
|
+ if (organTeacherNumMap.containsKey(organId)) {
|
|
|
+ organTeacherNumMap.put(organId, organTeacherNumMap.get(organId) + 1);
|
|
|
+ } else {
|
|
|
+ organTeacherNumMap.put(organId, 1);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- List<IndexBaseMonthData> datas = new ArrayList<>();
|
|
|
- Date month = DateUtil.stringToDate(dayStr, "yyyy-MM-dd");
|
|
|
- for (Map.Entry<Integer, Integer> organTeacherNumMapEntry : organTeacherNumMap.entrySet()) {
|
|
|
- IndexBaseMonthData data = new IndexBaseMonthData();
|
|
|
- data.setOrganId(organTeacherNumMapEntry.getKey());
|
|
|
- data.setMonth(month);
|
|
|
- BigDecimal num = new BigDecimal(organTeacherNumMapEntry.getValue());
|
|
|
- data.setTotalNum(num);
|
|
|
- data.setActivateNum(num);
|
|
|
- data.setPercent(num);
|
|
|
- datas.add(data);
|
|
|
- }
|
|
|
- saveData(datas, dayStr, IndexDataType.TRANSACTION_TEACHER_NUM, tenantId);
|
|
|
- }
|
|
|
-
|
|
|
- //人事数据
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.TEACHER_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getTeacherData(dayStr, null, null,tenantId), dayStr, IndexDataType.TEACHER_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.FULL_TIME_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getTeacherData(dayStr, JobNatureEnum.FULL_TIME, null,tenantId), dayStr, IndexDataType.FULL_TIME_NUM, tenantId);
|
|
|
}
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.PART_TIME_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getTeacherData(dayStr, JobNatureEnum.PART_TIME, null,tenantId), dayStr, IndexDataType.PART_TIME_NUM, tenantId);
|
|
|
+ List<IndexBaseMonthData> datas = new ArrayList<>();
|
|
|
+ Date month = DateUtil.stringToDate(dayStr, "yyyy-MM-dd");
|
|
|
+ for (Map.Entry<Integer, Integer> organTeacherNumMapEntry : organTeacherNumMap.entrySet()) {
|
|
|
+ IndexBaseMonthData data = new IndexBaseMonthData();
|
|
|
+ data.setOrganId(organTeacherNumMapEntry.getKey());
|
|
|
+ data.setMonth(month);
|
|
|
+ BigDecimal num = new BigDecimal(organTeacherNumMapEntry.getValue());
|
|
|
+ data.setTotalNum(num);
|
|
|
+ data.setActivateNum(num);
|
|
|
+ data.setPercent(num);
|
|
|
+ datas.add(data);
|
|
|
}
|
|
|
-// saveData(indexBaseMonthDataDao.getTeacherData(dayStr, null, true), dayStr, IndexDataType.DIMISSION_NUM);
|
|
|
+ saveData(datas, dayStr, IndexDataType.TRANSACTION_TEACHER_NUM, tenantId);
|
|
|
+ }
|
|
|
|
|
|
- //剩余课时
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.SURPLUS_COURSE_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, null, CourseStatusEnum.NOT_START,tenantId), dayStr, IndexDataType.SURPLUS_COURSE_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.SURPLUS_MUSIC_COURSE_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.MUSIC, CourseStatusEnum.NOT_START,tenantId), dayStr, IndexDataType.SURPLUS_MUSIC_COURSE_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.SURPLUS_VIP_COURSE_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.VIP, CourseStatusEnum.NOT_START,tenantId), dayStr, IndexDataType.SURPLUS_VIP_COURSE_NUM, tenantId);
|
|
|
+ //人事数据
|
|
|
+ public void personnelData(String dayStr,Integer tenantId){
|
|
|
+ saveData(indexBaseMonthDataDao.getTeacherData(dayStr, null, null,tenantId), dayStr, IndexDataType.TEACHER_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getTeacherData(dayStr, JobNatureEnum.FULL_TIME, null,tenantId), dayStr, IndexDataType.FULL_TIME_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getTeacherData(dayStr, JobNatureEnum.PART_TIME, null,tenantId), dayStr, IndexDataType.PART_TIME_NUM, tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ //剩余课时
|
|
|
+ public void subCourseData(String dayStr,Integer tenantId){
|
|
|
+ saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, null, CourseStatusEnum.NOT_START,tenantId), dayStr, IndexDataType.SURPLUS_COURSE_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.MUSIC, CourseStatusEnum.NOT_START,tenantId), dayStr, IndexDataType.SURPLUS_MUSIC_COURSE_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.VIP, CourseStatusEnum.NOT_START,tenantId), dayStr, IndexDataType.SURPLUS_VIP_COURSE_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.PRACTICE, CourseStatusEnum.NOT_START,tenantId), dayStr, IndexDataType.SURPLUS_PRACTICE_COURSE_NUM, tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ //已消耗课时
|
|
|
+ public void consumeCourseData(String dayStr,Integer tenantId){
|
|
|
+ saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, null, CourseStatusEnum.OVER,tenantId), dayStr, IndexDataType.OVER_COURSE_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.MUSIC, CourseStatusEnum.OVER,tenantId), dayStr, IndexDataType.OVER_MUSIC_COURSE_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.VIP, CourseStatusEnum.OVER,tenantId), dayStr, IndexDataType.OVER_VIP_COURSE_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.PRACTICE, CourseStatusEnum.OVER,tenantId), dayStr, IndexDataType.OVER_PRACTICE_COURSE_NUM, tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ //业务数据
|
|
|
+ public void businessData(String dayStr,Integer tenantId,LocalDate monday){
|
|
|
+ saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, null,tenantId), monday.toString(), IndexDataType.HOMEWORK_CREATE_RATE, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "submit",tenantId), monday.toString(), IndexDataType.HOMEWORK_SUBMIT_RATE, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "comment",tenantId), monday.toString(), IndexDataType.HOMEWORK_COMMENT_RATE, tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ //课程数据
|
|
|
+ public void courseData(String dayStr,Integer tenantId){
|
|
|
+ saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, null, null, GroupType.MUSIC, null, null, null,tenantId), dayStr, IndexDataType.MUSIC_GROUP_COURSE, tenantId);
|
|
|
+
|
|
|
+ List<IndexBaseMonthData> vipCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, null, null, GroupType.VIP, null, null, null,tenantId);
|
|
|
+ List<OrganVipGroupCategoryCourseNumDto> vipGroupCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, null, null, GroupType.VIP, null, null, null,tenantId);
|
|
|
+ Map<Integer, Map<String, Integer>> organCategoryCourseMap = new HashMap<>();
|
|
|
+ if (!CollectionUtils.isEmpty(vipGroupCategoryCourseData)) {
|
|
|
+ organCategoryCourseMap = vipGroupCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
|
|
|
}
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.SURPLUS_PRACTICE_COURSE_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getGroupCourseData(dayStr, GroupType.PRACTICE, CourseStatusEnum.NOT_START,tenantId), dayStr, IndexDataType.SURPLUS_PRACTICE_COURSE_NUM, tenantId);
|
|
|
+ for (IndexBaseMonthData vipCourseDatum : vipCourseData) {
|
|
|
+ if (organCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())) {
|
|
|
+ vipCourseDatum.setExtendInfo(JSON.toJSONString(organCategoryCourseMap.get(vipCourseDatum.getOrganId())));
|
|
|
+ }
|
|
|
}
|
|
|
+ saveData(vipCourseData, dayStr, IndexDataType.VIP_GROUP_COURSE, tenantId);
|
|
|
|
|
|
- //已消耗课时
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.OVER_COURSE_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, null, CourseStatusEnum.OVER,tenantId), dayStr, IndexDataType.OVER_COURSE_NUM, tenantId);
|
|
|
+ List<IndexBaseMonthData> vipOnlineCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, null, null, GroupType.VIP, null, TeachModeEnum.ONLINE, null,tenantId);
|
|
|
+ List<OrganVipGroupCategoryCourseNumDto> vipGroupOnlineCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, null, null, GroupType.VIP, null, TeachModeEnum.ONLINE, null,tenantId);
|
|
|
+ Map<Integer, Map<String, Integer>> organOnlineCategoryCourseMap = new HashMap<>();
|
|
|
+ if (!CollectionUtils.isEmpty(vipGroupOnlineCategoryCourseData)) {
|
|
|
+ organOnlineCategoryCourseMap = vipGroupOnlineCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
|
|
|
}
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.OVER_MUSIC_COURSE_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.MUSIC, CourseStatusEnum.OVER,tenantId), dayStr, IndexDataType.OVER_MUSIC_COURSE_NUM, tenantId);
|
|
|
+ for (IndexBaseMonthData vipCourseDatum : vipOnlineCourseData) {
|
|
|
+ if (organOnlineCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())) {
|
|
|
+ vipCourseDatum.setExtendInfo(JSON.toJSONString(organOnlineCategoryCourseMap.get(vipCourseDatum.getOrganId())));
|
|
|
+ }
|
|
|
}
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.OVER_VIP_COURSE_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.VIP, CourseStatusEnum.OVER,tenantId), dayStr, IndexDataType.OVER_VIP_COURSE_NUM, tenantId);
|
|
|
+ saveData(vipOnlineCourseData, dayStr, IndexDataType.VIP_GROUP_ONLINE_COURSE, tenantId);
|
|
|
+
|
|
|
+ List<IndexBaseMonthData> vipOfflineCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, null, null, GroupType.VIP, null, TeachModeEnum.OFFLINE, null,tenantId);
|
|
|
+ List<OrganVipGroupCategoryCourseNumDto> vipGroupOfflineCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, null, null, GroupType.VIP, null, TeachModeEnum.OFFLINE, null,tenantId);
|
|
|
+ Map<Integer, Map<String, Integer>> organOfflineCategoryCourseMap = new HashMap<>();
|
|
|
+ if (!CollectionUtils.isEmpty(vipGroupOfflineCategoryCourseData)) {
|
|
|
+ organOfflineCategoryCourseMap = vipGroupOfflineCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
|
|
|
}
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.OVER_PRACTICE_COURSE_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getGroupSurplusCourseData(dayStr, GroupType.PRACTICE, CourseStatusEnum.OVER,tenantId), dayStr, IndexDataType.OVER_PRACTICE_COURSE_NUM, tenantId);
|
|
|
+ for (IndexBaseMonthData vipCourseDatum : vipOfflineCourseData) {
|
|
|
+ if (organOfflineCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())) {
|
|
|
+ vipCourseDatum.setExtendInfo(JSON.toJSONString(organOfflineCategoryCourseMap.get(vipCourseDatum.getOrganId())));
|
|
|
+ }
|
|
|
}
|
|
|
+ saveData(vipOfflineCourseData, dayStr, IndexDataType.VIP_GROUP_OFFLINE_COURSE, tenantId);
|
|
|
|
|
|
- //经营数据
|
|
|
+ saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, null, null, GroupType.PRACTICE, null, null, null,tenantId), dayStr, IndexDataType.PRACTICE_GROUP_COURSE, tenantId);
|
|
|
+ }
|
|
|
|
|
|
-// List<IndexBaseMonthData> financePayData = indexBaseMonthDataDao.getFinancePayData(dayStr);
|
|
|
-// List<IndexBaseMonthData> financeBalanceData = indexBaseMonthDataDao.getFinanceBalanceData(dayStr);
|
|
|
-// List<IndexBaseMonthData> financeActualData = indexBaseMonthDataDao.getFinanceActualData(dayStr);
|
|
|
-//
|
|
|
-// saveData(financePayData,dayStr,IndexDataType.FINANCE_PAY);
|
|
|
-// saveData(financeBalanceData,dayStr,IndexDataType.FINANCE_BALANCE_AMOUNT);
|
|
|
-// saveData(financeActualData,dayStr,IndexDataType.FINANCE_AMOUNT);
|
|
|
-// saveData(totalAmountData,dayStr,IndexDataType.TOTAL_AMOUNT);
|
|
|
+ //小课数据统计
|
|
|
+ public void smallCourseData(String dayStr,Integer tenantId){
|
|
|
+ saveData(indexBaseMonthDataDao.getStudentVipOrderNum(dayStr,tenantId), dayStr, IndexDataType.STUDENT_VIP_ORDER_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getStudentTheoryOrderNum(dayStr,tenantId), dayStr, IndexDataType.STUDENT_THEORY_ORDER_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getStudentPracticeOrderNum(dayStr,tenantId), dayStr, IndexDataType.STUDENT_PRACTICE_ORDER_NUM, tenantId);
|
|
|
+ }
|
|
|
|
|
|
- //业务数据
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.HOMEWORK_CREATE_RATE)) {
|
|
|
- saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, null,tenantId), monday.toString(), IndexDataType.HOMEWORK_CREATE_RATE, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.HOMEWORK_SUBMIT_RATE)) {
|
|
|
- saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "submit",tenantId), monday.toString(), IndexDataType.HOMEWORK_SUBMIT_RATE, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.HOMEWORK_COMMENT_RATE)) {
|
|
|
- saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "comment",tenantId), monday.toString(), IndexDataType.HOMEWORK_COMMENT_RATE, tenantId);
|
|
|
- }
|
|
|
+ //学员变动
|
|
|
+ public void studentChangeData(String dayStr,Integer tenantId,LocalDate nowDate){
|
|
|
+ saveData(indexBaseMonthDataDao.getAddStudentRegistrationData(dayStr,tenantId), dayStr, IndexDataType.ADD_STUDENT_REGISTRATION_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getMusicStudentData(dayStr, null,tenantId), dayStr, IndexDataType.MUSIC_GROUP_STUDENT, tenantId);
|
|
|
+ saveData(null, nowDate.toString(), IndexDataType.NEWLY_STUDENT_NUM, tenantId);
|
|
|
+ saveData(null, nowDate.toString(), IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getOtherStudentData(dayStr,tenantId), dayStr, IndexDataType.VIP_PRACTICE_STUDENT_NUM, tenantId);
|
|
|
+ saveData(indexBaseMonthDataDao.getVipPracticeAddStudentData(dayStr,tenantId), dayStr, IndexDataType.VIP_PRACTICE_ADD_STUDENT_NUM, tenantId);
|
|
|
+ }
|
|
|
|
|
|
- //课程数据
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.MUSIC_GROUP_COURSE)) {
|
|
|
- saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, null, null, GroupType.MUSIC, null, null, null,tenantId), dayStr, IndexDataType.MUSIC_GROUP_COURSE, tenantId);
|
|
|
+ //云教练相关
|
|
|
+ public void cloudTeacherData(String dayStr,Integer tenantId){
|
|
|
+ //分部学员质量
|
|
|
+ saveData(indexBaseMonthDataDao.getOrgansStudentNumData(dayStr,tenantId), dayStr, IndexDataType.ORGAN_TOTAL_STUDENT_NUM, tenantId);
|
|
|
+ //会员数量
|
|
|
+ saveData(indexBaseMonthDataDao.getMemberStudentNumData(dayStr,tenantId), dayStr, IndexDataType.MEMBER_STUDENT_NUM, tenantId);
|
|
|
+ //新增会员数量
|
|
|
+ saveData(indexBaseMonthDataDao.getNewMemberStudentNumData(dayStr,tenantId), dayStr, IndexDataType.NEW_MEMBER_STUDENT_NUM, tenantId);
|
|
|
+ //试用会员数量
|
|
|
+ saveData(indexBaseMonthDataDao.getExperienceMemberStudentNumData(dayStr,tenantId), dayStr, IndexDataType.EXPERIENCE_MEMBER_STUDENT_NUM, tenantId);
|
|
|
+ //云教练使用用户
|
|
|
+ saveData(indexBaseMonthDataDao.getCloudStudyDayUseStudentNumData(dayStr,tenantId), dayStr, IndexDataType.CLOUD_STUDY_DAY_USE_STUDENT_NUM, tenantId);
|
|
|
+ //活跃用户
|
|
|
+ saveData(indexBaseMonthDataDao.getCloudStudyLivelyStudentNumData(dayStr,tenantId), dayStr, IndexDataType.CLOUD_STUDY_LIVELY_STUDENT_NUM, tenantId);
|
|
|
+ //云教练新增人数
|
|
|
+ saveData(indexBaseMonthDataDao.getCloudStudyNewStudentNumData(dayStr,tenantId), dayStr, IndexDataType.CLOUD_STUDY_NEW_STUDENT_NUM, tenantId);
|
|
|
+ //云教练新用户人数
|
|
|
+ List<Integer> studentIdList = studentRegistrationDao.findStudentIds(tenantId);
|
|
|
+ if(!CollectionUtils.isEmpty(studentIdList)){
|
|
|
+ saveData(studentDao.groupOrganId(null,studentIdList),LocalDate.now().toString(),IndexDataType.CLOUD_NEW_STUDENT_NUM, tenantId);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- //小课数据统计
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(STUDENT_VIP_ORDER_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getStudentVipOrderNum(dayStr,tenantId), dayStr, IndexDataType.STUDENT_VIP_ORDER_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(STUDENT_THEORY_ORDER_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getStudentTheoryOrderNum(dayStr,tenantId), dayStr, IndexDataType.STUDENT_THEORY_ORDER_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(STUDENT_PRACTICE_ORDER_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getStudentPracticeOrderNum(dayStr,tenantId), dayStr, IndexDataType.STUDENT_PRACTICE_ORDER_NUM, tenantId);
|
|
|
- }
|
|
|
+ @Override
|
|
|
+ public void indexBaseDataTask(Integer tenantId) {
|
|
|
+ LocalDate nowDate = LocalDate.now();
|
|
|
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.VIP_GROUP_COURSE)) {
|
|
|
- List<IndexBaseMonthData> vipCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, null, null, GroupType.VIP, null, null, null,tenantId);
|
|
|
- List<OrganVipGroupCategoryCourseNumDto> vipGroupCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, null, null, GroupType.VIP, null, null, null,tenantId);
|
|
|
- Map<Integer, Map<String, Integer>> organCategoryCourseMap = new HashMap<>();
|
|
|
- if (!CollectionUtils.isEmpty(vipGroupCategoryCourseData)) {
|
|
|
- organCategoryCourseMap = vipGroupCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
|
|
|
- }
|
|
|
- for (IndexBaseMonthData vipCourseDatum : vipCourseData) {
|
|
|
- if (organCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())) {
|
|
|
- vipCourseDatum.setExtendInfo(JSON.toJSONString(organCategoryCourseMap.get(vipCourseDatum.getOrganId())));
|
|
|
- }
|
|
|
- }
|
|
|
- saveData(vipCourseData, dayStr, IndexDataType.VIP_GROUP_COURSE, tenantId);
|
|
|
- }
|
|
|
+ List<Organization> allOrgans = organizationService.findAllOrgans(tenantId);
|
|
|
+ this.organIds.get().clear();
|
|
|
+ this.organIds.get().addAll(allOrgans.stream().map(Organization::getId).collect(Collectors.toSet()));
|
|
|
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.VIP_GROUP_ONLINE_COURSE)) {
|
|
|
- List<IndexBaseMonthData> vipOnlineCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, null, null, GroupType.VIP, null, TeachModeEnum.ONLINE, null,tenantId);
|
|
|
- List<OrganVipGroupCategoryCourseNumDto> vipGroupOnlineCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, null, null, GroupType.VIP, null, TeachModeEnum.ONLINE, null,tenantId);
|
|
|
- Map<Integer, Map<String, Integer>> organOnlineCategoryCourseMap = new HashMap<>();
|
|
|
- if (!CollectionUtils.isEmpty(vipGroupOnlineCategoryCourseData)) {
|
|
|
- organOnlineCategoryCourseMap = vipGroupOnlineCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
|
|
|
- }
|
|
|
- for (IndexBaseMonthData vipCourseDatum : vipOnlineCourseData) {
|
|
|
- if (organOnlineCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())) {
|
|
|
- vipCourseDatum.setExtendInfo(JSON.toJSONString(organOnlineCategoryCourseMap.get(vipCourseDatum.getOrganId())));
|
|
|
- }
|
|
|
- }
|
|
|
- saveData(vipOnlineCourseData, dayStr, IndexDataType.VIP_GROUP_ONLINE_COURSE, tenantId);
|
|
|
- }
|
|
|
+ String dayStr = nowDate.plusDays(-1).toString();
|
|
|
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.VIP_GROUP_OFFLINE_COURSE)) {
|
|
|
- List<IndexBaseMonthData> vipOfflineCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, null, null, GroupType.VIP, null, TeachModeEnum.OFFLINE, null,tenantId);
|
|
|
- List<OrganVipGroupCategoryCourseNumDto> vipGroupOfflineCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, null, null, GroupType.VIP, null, TeachModeEnum.OFFLINE, null,tenantId);
|
|
|
- Map<Integer, Map<String, Integer>> organOfflineCategoryCourseMap = new HashMap<>();
|
|
|
- if (!CollectionUtils.isEmpty(vipGroupOfflineCategoryCourseData)) {
|
|
|
- organOfflineCategoryCourseMap = vipGroupOfflineCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
|
|
|
- }
|
|
|
- for (IndexBaseMonthData vipCourseDatum : vipOfflineCourseData) {
|
|
|
- if (organOfflineCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())) {
|
|
|
- vipCourseDatum.setExtendInfo(JSON.toJSONString(organOfflineCategoryCourseMap.get(vipCourseDatum.getOrganId())));
|
|
|
- }
|
|
|
- }
|
|
|
- saveData(vipOfflineCourseData, dayStr, IndexDataType.VIP_GROUP_OFFLINE_COURSE, tenantId);
|
|
|
- }
|
|
|
+ LocalDate day = LocalDate.parse(dayStr, DateUtil.dateFormatter);
|
|
|
+ LocalDate monday = day.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
|
|
|
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.PRACTICE_GROUP_COURSE)) {
|
|
|
- saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, null, null, GroupType.PRACTICE, null, null, null,tenantId), dayStr, IndexDataType.PRACTICE_GROUP_COURSE, tenantId);
|
|
|
- }
|
|
|
+ List<Runnable> tasks = new ArrayList<>();
|
|
|
|
|
|
//学员变动
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.ADD_STUDENT_REGISTRATION_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getAddStudentRegistrationData(dayStr,tenantId), dayStr, IndexDataType.ADD_STUDENT_REGISTRATION_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.MUSIC_GROUP_STUDENT)) {
|
|
|
- saveData(indexBaseMonthDataDao.getMusicStudentData(dayStr, null,tenantId), dayStr, IndexDataType.MUSIC_GROUP_STUDENT, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.NEWLY_STUDENT_NUM)) {
|
|
|
- saveData(null, nowDate.toString(), IndexDataType.NEWLY_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM)) {
|
|
|
- saveData(null, nowDate.toString(), IndexDataType.QUIT_MUSIC_GROUP_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.VIP_PRACTICE_STUDENT_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getOtherStudentData(dayStr,tenantId), dayStr, IndexDataType.VIP_PRACTICE_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.VIP_PRACTICE_ADD_STUDENT_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getVipPracticeAddStudentData(dayStr,tenantId), dayStr, IndexDataType.VIP_PRACTICE_ADD_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
+ tasks.add(() -> this.studentChangeData(dayStr, tenantId, nowDate));
|
|
|
+
|
|
|
+ //小课数据统计
|
|
|
+ tasks.add(() -> this.smallCourseData(dayStr, tenantId));
|
|
|
|
|
|
//云教练相关
|
|
|
- //分部学员数量
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.ORGAN_TOTAL_STUDENT_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getOrgansStudentNumData(dayStr,tenantId), dayStr, IndexDataType.ORGAN_TOTAL_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
+ tasks.add(() -> this.cloudTeacherData(dayStr, tenantId));
|
|
|
|
|
|
- //会员数量
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.MEMBER_STUDENT_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getMemberStudentNumData(dayStr,tenantId), dayStr, IndexDataType.MEMBER_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
+ //课程数据
|
|
|
+ tasks.add(() -> this.courseData(dayStr, tenantId));
|
|
|
|
|
|
- //新增会员数量
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.NEW_MEMBER_STUDENT_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getNewMemberStudentNumData(dayStr,tenantId), dayStr, IndexDataType.NEW_MEMBER_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
+ //业务数据
|
|
|
+ tasks.add(() -> this.businessData(dayStr, tenantId, monday));
|
|
|
|
|
|
- //试用会员数量
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.EXPERIENCE_MEMBER_STUDENT_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getExperienceMemberStudentNumData(dayStr,tenantId), dayStr, IndexDataType.EXPERIENCE_MEMBER_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
+ //学员数据
|
|
|
+ tasks.add(() -> this.studentData(dayStr, tenantId, nowDate));
|
|
|
|
|
|
- //云教练使用用户
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.CLOUD_STUDY_DAY_USE_STUDENT_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getCloudStudyDayUseStudentNumData(dayStr,tenantId), dayStr, IndexDataType.CLOUD_STUDY_DAY_USE_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
+ //运营数据
|
|
|
+ tasks.add(() -> this.operateData(dayStr, tenantId));
|
|
|
|
|
|
- //活跃用户
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.CLOUD_STUDY_LIVELY_STUDENT_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getCloudStudyLivelyStudentNumData(dayStr,tenantId), dayStr, IndexDataType.CLOUD_STUDY_LIVELY_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
+ //人事数据
|
|
|
+ tasks.add(() -> this.personnelData(dayStr, tenantId));
|
|
|
|
|
|
- //云教练新增人数
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.CLOUD_STUDY_NEW_STUDENT_NUM)) {
|
|
|
- saveData(indexBaseMonthDataDao.getCloudStudyNewStudentNumData(dayStr,tenantId), dayStr, IndexDataType.CLOUD_STUDY_NEW_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
+ //剩余课时
|
|
|
+ tasks.add(() -> this.subCourseData(dayStr, tenantId));
|
|
|
|
|
|
- //云教练新用户人数
|
|
|
- if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.CLOUD_NEW_STUDENT_NUM)) {
|
|
|
- List<Integer> studentIdList = studentRegistrationDao.findStudentIds(tenantId);
|
|
|
- if(!CollectionUtils.isEmpty(studentIdList)){
|
|
|
- saveData(studentDao.groupOrganId(null,studentIdList),LocalDate.now().toString(),IndexDataType.CLOUD_NEW_STUDENT_NUM, tenantId);
|
|
|
- }
|
|
|
- }
|
|
|
+ //已消耗课时
|
|
|
+ tasks.add(() -> this.consumeCourseData(dayStr, tenantId));
|
|
|
+
|
|
|
+ this.runByBewTransactional(tasks);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -803,6 +773,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> getIndexErrData(String organIdsStr, IndexErrorType errorType) {
|
|
|
+ businessLogger.info("getIndexErrData-----organIdsStr:{},errorType:{}",organIdsStr,errorType);
|
|
|
//只筛选指定时间之后的数据
|
|
|
Date date = new Date();
|
|
|
String startTime = DateUtil.format(DateUtil.getFirstDayOfMonth(DateUtil.addMonths(date, -1)),DateUtil.ISO_EXPANDED_DATE_FORMAT);
|
|
@@ -826,36 +797,38 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
Integer educationId = educationUserId;
|
|
|
List<Long> classGroupIdList = classGroupIds;
|
|
|
Integer tenantId = TenantContextHolder.getTenantId();
|
|
|
+ List<Runnable> tasks;
|
|
|
if(IndexErrorType.MUSIC_PATROL.equals(errorType)){
|
|
|
IndexErrInfoDto<IndexErrInfoDto> one = new IndexErrInfoDto<>();
|
|
|
one.setErrorType(IndexErrorType.MUSIC_PATROL);
|
|
|
one.setDesc(IndexErrorType.MUSIC_PATROL.getMsg());
|
|
|
List<IndexErrInfoDto> oneChild = new ArrayList<>();
|
|
|
+ tasks = new ArrayList<>();
|
|
|
//基础技能班学员数量异常
|
|
|
- CompletableFuture future1 = this.async(()->{
|
|
|
+ tasks.add(()->{
|
|
|
oneChild.add(new IndexErrInfoDto(IndexErrorType.HIGH_CLASS_STUDENT_LESS_THAN_THREE,
|
|
|
indexBaseMonthDataDao.countLessThenThreeClassGroupNum(organIdList,educationId,tenantId,false)));
|
|
|
});
|
|
|
//乐团巡查事项异常
|
|
|
- CompletableFuture future2 = this.async(()->{
|
|
|
+ tasks.add(()->{
|
|
|
oneChild.add(new IndexErrInfoDto(IndexErrorType.MUSIC_PATROL_ITEM,
|
|
|
indexBaseMonthDataDao.queryErrInspection(organIdList,startTime,tenantId)));
|
|
|
});
|
|
|
//未加入任何班级学员
|
|
|
- CompletableFuture future3 = this.async(()-> {
|
|
|
+ tasks.add(()-> {
|
|
|
IndexErrInfoDto noClassMusicGroupStudentInfo = indexBaseMonthDataDao.getNoClassMusicGroupStudentInfo(organIdList,educationId,tenantId,true);
|
|
|
noClassMusicGroupStudentInfo.setErrorType(IndexErrorType.NO_CLASS_MUSIC_GROUP_STUDENT_ERROR);
|
|
|
noClassMusicGroupStudentInfo.setDesc(IndexErrorType.NO_CLASS_MUSIC_GROUP_STUDENT_ERROR.getMsg());
|
|
|
oneChild.add(noClassMusicGroupStudentInfo);
|
|
|
});
|
|
|
//学校巡堂
|
|
|
- CompletableFuture future4 = this.async(()-> {
|
|
|
+ tasks.add(()-> {
|
|
|
IndexErrInfoDto schoolPatrolError = indexBaseMonthDataDao.getSchoolPatrolError(organIdList,tenantId);
|
|
|
schoolPatrolError.setErrorType(IndexErrorType.SCHOOL_PATROL);
|
|
|
schoolPatrolError.setDesc(IndexErrorType.SCHOOL_PATROL.getMsg());
|
|
|
oneChild.add(schoolPatrolError);
|
|
|
});
|
|
|
- future1.join();future2.join();future3.join();future4.join();
|
|
|
+ this.runByBewTransactional(tasks);
|
|
|
one.setNum(oneChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
|
|
|
one.setResult(oneChild);
|
|
|
all.add(one);
|
|
@@ -867,17 +840,25 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
two.setErrorType(IndexErrorType.STUDENT_INFO);
|
|
|
two.setDesc(IndexErrorType.STUDENT_INFO.getMsg());
|
|
|
List<IndexErrInfoDto> twoChild = new ArrayList<>();
|
|
|
+ tasks = new ArrayList<>();
|
|
|
+ Date now = new Date();
|
|
|
//学员请假异常提醒(只提醒本月的异常)
|
|
|
- CompletableFuture future1 = this.async(() -> {
|
|
|
+ tasks.add(() -> {
|
|
|
int studentErrorLeave = 0;
|
|
|
String studentErrorLeaveNum = sysTenantConfigService.getTenantConfigValue(SysConfigService.STUDENT_ERROR_LEAVE_NUM, tenantId);
|
|
|
if (StringUtils.isNotEmpty(studentErrorLeaveNum)) {
|
|
|
- String format1 = DateUtil.format(new Date(), DateUtil.ISO_YEAR_MONTH_FORMAT);
|
|
|
- studentErrorLeave = indexBaseMonthDataDao.countStudentErrorLeave(organIdList, format1, classGroupIdList, Integer.parseInt(studentErrorLeaveNum), tenantId);
|
|
|
+ String firstDay = DateUtil.format(DateUtil.getFirstDayOfMonth(now), DateUtil.ISO_YEAR_MONTH_FORMAT);
|
|
|
+ String lastDay = DateUtil.format(DateUtil.getLastDayOfMonth(now), DateUtil.ISO_YEAR_MONTH_FORMAT);
|
|
|
+ studentErrorLeave = indexBaseMonthDataDao.countStudentErrorLeave(organIdList,
|
|
|
+ firstDay,
|
|
|
+ lastDay,
|
|
|
+ classGroupIdList,
|
|
|
+ Integer.parseInt(studentErrorLeaveNum),
|
|
|
+ tenantId);
|
|
|
}
|
|
|
twoChild.add(new IndexErrInfoDto(IndexErrorType.STUDENT_ERROR_LEAVE,studentErrorLeave));
|
|
|
});
|
|
|
- CompletableFuture future2 = this.async(() -> {
|
|
|
+ tasks.add(() -> {
|
|
|
//未缴费学员数
|
|
|
twoChild.add(new IndexErrInfoDto(IndexErrorType.STUDENT_ARREARAGE,
|
|
|
indexBaseMonthDataDao.countNoPaymentStudentNum(organIdList,educationId,tenantId,true), Arrays.asList(educationId)));
|
|
@@ -889,14 +870,14 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
});
|
|
|
|
|
|
//合作单位回款异常
|
|
|
- CompletableFuture future3 = this.async(() -> {
|
|
|
+ tasks.add(() -> {
|
|
|
Map<String, Object> params1 = new HashMap<>();
|
|
|
params1.put("organId", organIdsStr);
|
|
|
params1.put("errorType", "COOPERATION_PAYMENT_ERROR");
|
|
|
twoChild.add(new IndexErrInfoDto(IndexErrorType.COOPERATION_PAYMENT_ERROR
|
|
|
, musicGroupCalenderRefundPeriodDao.countCoopRefund(params1)));
|
|
|
});
|
|
|
- future1.join();future2.join();future3.join();
|
|
|
+ this.runByBewTransactional(tasks);
|
|
|
two.setNum(twoChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
|
|
|
two.setResult(twoChild);
|
|
|
all.add(two);
|
|
@@ -913,24 +894,24 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
userId = sysUser.getId();
|
|
|
}
|
|
|
Integer userId1 = userId;
|
|
|
- CompletableFuture future1 = this.async(() -> {
|
|
|
+ tasks = new ArrayList<>();
|
|
|
+ tasks.add(() -> {
|
|
|
//乐团巡查任务未计划
|
|
|
int inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr,startTime,userId1,tenantId);
|
|
|
threeChild.add(new IndexErrInfoDto(IndexErrorType.INSPECTION_ITEM,inspectionItem));
|
|
|
});
|
|
|
- CompletableFuture future2 = this.async(() -> {
|
|
|
+ tasks.add(() -> {
|
|
|
//乐团巡查任务未提交
|
|
|
int inspectionItemPlan = indexBaseMonthDataDao.queryInspectionItemPlan(organIdsStr,startTime,tenantId);
|
|
|
threeChild.add(new IndexErrInfoDto(IndexErrorType.INSPECTION_ITEM_PLAN,inspectionItemPlan));
|
|
|
|
|
|
});
|
|
|
- CompletableFuture future3 = this.async(() -> {
|
|
|
+ tasks.add(() -> {
|
|
|
//回访任务未完成
|
|
|
int studentVisit = indexBaseMonthDataDao.queryStudentVisit(organIdsStr,startTime,userId1,tenantId);
|
|
|
threeChild.add(new IndexErrInfoDto(IndexErrorType.STUDENT_VISIT,studentVisit));
|
|
|
});
|
|
|
- future1.join();future2.join();future3.join();
|
|
|
-
|
|
|
+ this.runByBewTransactional(tasks);
|
|
|
three.setNum(threeChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
|
|
|
three.setResult(threeChild);
|
|
|
all.add(three);
|
|
@@ -941,8 +922,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
four.setErrorType(IndexErrorType.ATTENDANCE_SERVE);
|
|
|
four.setDesc(IndexErrorType.ATTENDANCE_SERVE.getMsg());
|
|
|
List<IndexErrInfoDto> fourChild = new ArrayList<>();
|
|
|
-
|
|
|
- CompletableFuture future1 = this.async(() -> {
|
|
|
+ tasks = new ArrayList<>();
|
|
|
+ tasks.add(() -> {
|
|
|
String month = DateUtil.format(date,DateUtil.ISO_YEAR_MONTH_FORMAT);
|
|
|
//当月排课异常: (1)剩余课时(未开始+排课资格)4的学员,本月排课节数少于4节
|
|
|
int currentCourseError = indexBaseMonthDataDao.getCurrentCourseError(month,organIdList);
|
|
@@ -951,14 +932,14 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
CompletableFuture future2 = null;
|
|
|
CompletableFuture future3 = null;
|
|
|
if(classGroupIds == null || classGroupIds.size() > 0) {
|
|
|
- future2 = this.async(() -> {
|
|
|
+ tasks.add(() -> {
|
|
|
//课程考勤异常
|
|
|
int teacherAttendanceError = indexBaseMonthDataDao.getTeacherAttendanceError(organIdList, startTime, classGroupIdList, tenantId);
|
|
|
int studentAttendanceError = indexBaseMonthDataDao.getStudentAttendanceError(organIdList, startTime, classGroupIdList, tenantId);
|
|
|
fourChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_EXCEPTION_ATTENDANCE, teacherAttendanceError));
|
|
|
fourChild.add(new IndexErrInfoDto(IndexErrorType.STUDENT_EXCEPTION_ATTENDANCE, studentAttendanceError));
|
|
|
});
|
|
|
- future3 = this.async(() -> {
|
|
|
+ tasks.add(() -> {
|
|
|
int noAttendance = indexBaseMonthDataDao.getNoAttendance(organIdList, startTime, classGroupIdList, tenantId);
|
|
|
//课程异常
|
|
|
fourChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_NOT_A_CLASS, noAttendance));
|
|
@@ -969,10 +950,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
//课程异常
|
|
|
fourChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_NOT_A_CLASS, 0));
|
|
|
}
|
|
|
- if(classGroupIds == null || classGroupIds.size() > 0) {
|
|
|
- future2.join();future3.join();
|
|
|
- }
|
|
|
- future1.join();
|
|
|
+ this.runByBewTransactional(tasks);
|
|
|
four.setNum(fourChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
|
|
|
four.setResult(fourChild);
|
|
|
all.add(four);
|
|
@@ -1346,8 +1324,14 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
|
|
|
int studentErrorLeave = 0;
|
|
|
String studentErrorLeaveNum = sysTenantConfigService.getTenantConfigValue(SysConfigService.STUDENT_ERROR_LEAVE_NUM, tenantId);
|
|
|
if(StringUtils.isNotEmpty(studentErrorLeaveNum)){
|
|
|
- String format1 = DateUtil.format(new Date(), DateUtil.ISO_YEAR_MONTH_FORMAT);
|
|
|
- studentErrorLeave = indexBaseMonthDataDao.countStudentErrorLeave(organIds, format1, classGroupIds,Integer.parseInt(studentErrorLeaveNum), tenantId);
|
|
|
+ String firstDay = DateUtil.format(DateUtil.getFirstDayOfMonth(date), DateUtil.ISO_YEAR_MONTH_FORMAT);
|
|
|
+ String lastDay = DateUtil.format(DateUtil.getLastDayOfMonth(date), DateUtil.ISO_YEAR_MONTH_FORMAT);
|
|
|
+ studentErrorLeave = indexBaseMonthDataDao.countStudentErrorLeave(organIds,
|
|
|
+ firstDay,
|
|
|
+ lastDay,
|
|
|
+ classGroupIds,
|
|
|
+ Integer.parseInt(studentErrorLeaveNum),
|
|
|
+ tenantId);
|
|
|
}
|
|
|
if(studentErrorLeave > 0){
|
|
|
flag2 = true;
|