|  | @@ -1,7 +1,9 @@
 | 
	
		
			
				|  |  |  package com.ym.mec.biz.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import com.alibaba.fastjson.JSONObject;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.*;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dto.ExportTeacherSalaryDto;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.dto.RewardsRulesJsonDto;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dto.TaskRewardsRulesDto;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dto.TeacherSalaryDto;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.*;
 | 
	
	
		
			
				|  | @@ -685,11 +687,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -    public PageInfo<ExportTeacherSalaryDto> exportTeacherSalary(ExportTeacherSalaryQueryInfo queryInfo) {
 | 
	
		
			
				|  |  | -        //课时编号	老师编号	老师姓名	老师分部	工作类别	课程分部
 | 
	
		
			
				|  |  | -        //课程班名称(乐团名或者小课名)	乐团模式	活动名称	线上课/线下课	线上课单价
 | 
	
		
			
				|  |  | -        //线下课单价	上课形式	课程类别	课时时长	上课日期	上课时间	签到状态
 | 
	
		
			
				|  |  | -        //签退状态	签到时间	签退时间	课时课酬	主辅	上课地点	应到学员
 | 
	
		
			
				|  |  | +    public List<ExportTeacherSalaryDto> exportTeacherSalary(ExportTeacherSalaryQueryInfo queryInfo) {
 | 
	
		
			
				|  |  |          Map<String, Object> params = new HashMap<>();
 | 
	
		
			
				|  |  |          MapUtil.populateMap(params, queryInfo);
 | 
	
		
			
				|  |  |          Date months = DateUtil.addMonths(new Date(), -1);
 | 
	
	
		
			
				|  | @@ -697,15 +695,72 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 | 
	
		
			
				|  |  |          String lastDayOfMonth =  DateUtil.format(DateUtil.getLastDayOfMonth(months),DateUtil.ISO_EXPANDED_DATE_FORMAT);
 | 
	
		
			
				|  |  |          params.put("firstDayOfMonth",firstDayOfMonth);
 | 
	
		
			
				|  |  |          params.put("lastDayOfMonth",lastDayOfMonth);
 | 
	
		
			
				|  |  | +        List<ExportTeacherSalaryDto> exportTeacherSalaryDtos = new ArrayList<>();
 | 
	
		
			
				|  |  |          //乐团课
 | 
	
		
			
				|  |  | -        List<ExportTeacherSalaryDto> exportMusicTeacherSalaryDtos = courseScheduleTeacherSalaryDao.exportMusicTeacherSalary(params);
 | 
	
		
			
				|  |  | +        exportTeacherSalaryDtos.addAll(courseScheduleTeacherSalaryDao.exportMusicTeacherSalary(params));
 | 
	
		
			
				|  |  |          //vip课
 | 
	
		
			
				|  |  |          List<ExportTeacherSalaryDto> exportVipTeacherSalaryDtos = courseScheduleTeacherSalaryDao.exportVipTeacherSalary(params);
 | 
	
		
			
				|  |  | -        //获取有奖励的vip课
 | 
	
		
			
				|  |  | +        //获取有奖励的vip课  .collect(Collectors.toMap(Group::getId, group -> group));
 | 
	
		
			
				|  |  |          List<TaskRewardsRulesDto> rewardsRulesDtos = courseScheduleRewardsRulesService.queryVipGroupTeacherClassTimesByMonth(firstDayOfMonth,lastDayOfMonth);
 | 
	
		
			
				|  |  | +        Map<Integer,Double> rewardMap = new HashMap<>(1000);
 | 
	
		
			
				|  |  | +        Map<Integer,String> rewardNameMap = new HashMap<>(1000);
 | 
	
		
			
				|  |  | +        if(rewardsRulesDtos != null && rewardsRulesDtos.size() > 0){
 | 
	
		
			
				|  |  | +            List<Integer> activeIds = rewardsRulesDtos.stream().map(e -> e.getActiveId()).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +            List<CourseScheduleRewardsRules> rewardsRules = courseScheduleRewardsRulesService.findByIds(activeIds);
 | 
	
		
			
				|  |  | +            Map<Integer, List<CourseScheduleRewardsRules>> integerListMap = rewardsRules.stream().collect(Collectors.groupingBy(CourseScheduleRewardsRules::getId));
 | 
	
		
			
				|  |  | +            rewardsRulesDtos.forEach(e->{
 | 
	
		
			
				|  |  | +                CourseScheduleRewardsRules rewardsRule = integerListMap.get(e.getActiveId()).get(0);
 | 
	
		
			
				|  |  | +                List<RewardsRulesJsonDto> rulesJsonDtos = JSONObject.parseArray(rewardsRule.getRewardsRulesJson(), RewardsRulesJsonDto.class);
 | 
	
		
			
				|  |  | +                BigDecimal money = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +                //STAIR 阶梯, PER 累计, TOTAL
 | 
	
		
			
				|  |  | +                RewardsRulesJsonDto dto;
 | 
	
		
			
				|  |  | +                int times = e.getTimes();
 | 
	
		
			
				|  |  | +                switch (rewardsRule.getRewardMode()) {
 | 
	
		
			
				|  |  | +                    case STAIR:
 | 
	
		
			
				|  |  | +                        for (int i = 0;i< rulesJsonDtos.size();i++){
 | 
	
		
			
				|  |  | +                            dto = rulesJsonDtos.get(i);
 | 
	
		
			
				|  |  | +                            if (e.getTimes() >= dto.getMin()) {
 | 
	
		
			
				|  |  | +                                //最后一个梯度
 | 
	
		
			
				|  |  | +                                if(rulesJsonDtos.size()-1 == i){
 | 
	
		
			
				|  |  | +                                    money = money.add(dto.getMoney().multiply(new BigDecimal(times)));
 | 
	
		
			
				|  |  | +                                }else if(e.getTimes() >= dto.getMax()){
 | 
	
		
			
				|  |  | +                                    times = Math.abs(dto.getMax() - times);
 | 
	
		
			
				|  |  | +                                    money = money.add(dto.getMoney().multiply(new BigDecimal(dto.getMax()-dto.getMin()+1)));
 | 
	
		
			
				|  |  | +                                }else {
 | 
	
		
			
				|  |  | +                                    money = money.add(dto.getMoney().multiply(new BigDecimal(times)));
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    case PER:
 | 
	
		
			
				|  |  | +                        for (int i = 0;i< rulesJsonDtos.size();i++){
 | 
	
		
			
				|  |  | +                            dto = rulesJsonDtos.get(i);
 | 
	
		
			
				|  |  | +                            if (e.getTimes() >= dto.getMin()) {
 | 
	
		
			
				|  |  | +                                money = dto.getMoney().multiply(new BigDecimal(times));
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    case TOTAL:
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (money.doubleValue() > 0) {
 | 
	
		
			
				|  |  | +                    String[] split = e.getCourseScheduleIds().split(",");
 | 
	
		
			
				|  |  | +                    for (int i = 0; i < split.length; i++) {
 | 
	
		
			
				|  |  | +                        rewardMap.put(Integer.parseInt(split[i]),money.doubleValue()/split.length);
 | 
	
		
			
				|  |  | +                        rewardNameMap.put(Integer.parseInt(split[i]),e.getActiveName());
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        exportVipTeacherSalaryDtos.forEach(e->{
 | 
	
		
			
				|  |  | +            e.setRewards(rewardMap.get(e.getCourseScheduleId()));
 | 
	
		
			
				|  |  | +            e.setActiveName(rewardNameMap.get(e.getCourseScheduleId()));
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        exportTeacherSalaryDtos.addAll(exportVipTeacherSalaryDtos);
 | 
	
		
			
				|  |  |          //vip课(梯度课酬)
 | 
	
		
			
				|  |  |          //陪练课
 | 
	
		
			
				|  |  | -        return null;
 | 
	
		
			
				|  |  | +        exportTeacherSalaryDtos.addAll(courseScheduleTeacherSalaryDao.exportPracticeTeacherSalary(params));
 | 
	
		
			
				|  |  | +        return exportTeacherSalaryDtos;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 |