浏览代码

Merge branch 'teacher_client_salary'

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/dal/enums/DeductReasonEnum.java
#	mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherIncomeQueryInfo.java
Joburgess 4 年之前
父节点
当前提交
3bc5da308a

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -1832,4 +1832,13 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     List<CourseSchedule> getMusicGroupsHasStartCourseNum(@Param("ids") List<String> ids);
+
+    /**
+     * @describe 根据主课查询被合并的课程
+     * @author Joburgess
+     * @date 2021/5/10 0010
+     * @param courseIds:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+     */
+    List<CourseSchedule> getBeMergeCourseWithMainCourseIds(@Param("courseIds") List<Long> courseIds);
 }

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LocalDateBigDecimalMapDto.java

@@ -14,6 +14,8 @@ public class LocalDateBigDecimalMapDto {
 
     private String dateStr;
 
+    private BigDecimal subsidy = new BigDecimal("0");
+
     private BigDecimal amount;
 
     public LocalDateBigDecimalMapDto(Date date, String dateStr, BigDecimal amount) {
@@ -22,6 +24,13 @@ public class LocalDateBigDecimalMapDto {
         this.amount = amount;
     }
 
+    public LocalDateBigDecimalMapDto(Date date, String dateStr, BigDecimal subsidy, BigDecimal amount) {
+        this.date = date;
+        this.dateStr = dateStr;
+        this.subsidy = subsidy;
+        this.amount = amount;
+    }
+
     public LocalDateBigDecimalMapDto() {
     }
 
@@ -41,6 +50,14 @@ public class LocalDateBigDecimalMapDto {
         this.dateStr = dateStr;
     }
 
+    public BigDecimal getSubsidy() {
+        return subsidy;
+    }
+
+    public void setSubsidy(BigDecimal subsidy) {
+        this.subsidy = subsidy;
+    }
+
     public BigDecimal getAmount() {
         return amount;
     }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherSalaryDeductReasonDto.java

@@ -12,10 +12,16 @@ public class TeacherSalaryDeductReasonDto {
 
     private DeductReasonEnum deductReason;
 
+    private String deductReasonMsg;
+
+    private String deductReasonStrDesc;
+
     private BigDecimal amount;
 
     public TeacherSalaryDeductReasonDto(DeductReasonEnum deductReason, BigDecimal amount) {
         this.deductReason = deductReason;
+        this.deductReasonMsg = deductReason.getMsg();
+        this.deductReasonStrDesc = deductReason.getDesc();
         this.amount = amount.setScale(2, BigDecimal.ROUND_DOWN);
     }
 
@@ -34,4 +40,20 @@ public class TeacherSalaryDeductReasonDto {
     public void setAmount(BigDecimal amount) {
         this.amount = amount.setScale(2, BigDecimal.ROUND_DOWN);
     }
+
+    public String getDeductReasonMsg() {
+        return deductReasonMsg;
+    }
+
+    public void setDeductReasonMsg(String deductReasonMsg) {
+        this.deductReasonMsg = deductReasonMsg;
+    }
+
+    public String getDeductReasonStrDesc() {
+        return deductReasonStrDesc;
+    }
+
+    public void setDeductReasonStrDesc(String deductReasonStrDesc) {
+        this.deductReasonStrDesc = deductReasonStrDesc;
+    }
 }

+ 17 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/DeductReasonEnum.java

@@ -7,18 +7,22 @@ import com.ym.mec.common.enums.BaseEnum;
  * @Date 2021/4/16 0016
  **/
 public enum DeductReasonEnum implements BaseEnum<String,DeductReasonEnum> {
-    SIGN_IN_TIME_ERR("SIGN_IN_TIME_ERR", "签到时间异常"),
-    SIGN_OUT_TIME_ERR("SIGN_OUT_TIME_ERR", "签退时间异常"),
-    GPS_ERR("GPS_ERR", "位置异常"),
-    TRAIL("TRAIL", "试用期扣减");
+    SIGN_IN_TIME_ERR("SIGN_IN_TIME_ERR", "签到时间异常", ""),
+    SIGN_OUT_TIME_ERR("SIGN_OUT_TIME_ERR", "签退时间异常", ""),
+    GPS_ERR("GPS_ERR", "位置异常", ""),
+    NOT_SETTLEMENT("NOT_SETTLEMENT", "不结算课酬", "特殊老师不结算课酬"),
+    TRAIL("TRAIL", "试用期扣减", "试用期老师课酬按正式老师的80%计算");
 
     private String code;
 
     private String msg;
 
-    DeductReasonEnum(String code, String msg) {
+    private String desc;
+
+    DeductReasonEnum(String code, String msg, String desc) {
         this.code = code;
         this.msg = msg;
+        this.desc = desc;
     }
 
     @Override
@@ -37,4 +41,12 @@ public enum DeductReasonEnum implements BaseEnum<String,DeductReasonEnum> {
     public void setMsg(String msg) {
         this.msg = msg;
     }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherIncomeQueryInfo.java

@@ -17,7 +17,7 @@ public class TeacherIncomeQueryInfo extends QueryInfo {
 
     private CourseStatusEnum courseStatus;
 
-    private Boolean updated;
+    private Boolean updated = false;
 
     public Integer getTeacherId() {
         return teacherId;

+ 15 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java

@@ -233,7 +233,7 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @return void
      */
     void calMusicCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
-                                           List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange);
+                                           List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated);
 
     /**
      * @describe 计算VIP课教师实际课酬
@@ -244,7 +244,7 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @return void
      */
     void calVipCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
-                                         List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange);
+                                         List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated);
 
     /**
      * @describe 计算网管课教师实际课酬
@@ -255,7 +255,7 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @return void
      */
     void calPracticeTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
-                                        List<TeacherAttendance> teacherAttendances, School school, Teacher teacher);
+                                        List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, Boolean updated);
 
     /**
      * @describe
@@ -264,7 +264,7 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @param teacherId: 获取教师收入总览
      * @return com.ym.mec.biz.dal.dto.TeacherIncomeReviewDto
      */
-    TeacherIncomeReviewDto getTeacherSalaryOverview(Integer teacherId);
+    TeacherIncomeReviewDto getTeacherSalaryOverview(TeacherIncomeQueryInfo queryInfo);
 
     /**
      * @describe 查询教师课酬记录
@@ -281,10 +281,21 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @date 2021/4/16 0016
      * @param year:
      * @return java.util.Map<java.lang.String,java.math.BigDecimal>
+     * 移动端全部更新后将废弃
      */
+    @Deprecated
     Map<String, Object> teacherIncomeStat(Integer teacherId, Integer year, Integer month);
 
     /**
+     * @describe 收入统计
+     * @author Joburgess
+     * @date 2021/4/16 0016
+     * @param year:
+     * @return java.util.Map<java.lang.String,java.math.BigDecimal>
+     */
+    Map<String, Object> teacherIncomeStatNew(Integer teacherId, Integer year, Integer month);
+
+    /**
      * @describe 推送查看今日收入提醒
      * @author Joburgess
      * @date 2021/4/19 0019

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -1221,6 +1221,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         BigDecimal originUnitPrice = new BigDecimal(0);
         CourseScheduleType courseType = null;
         for (ClassGroup classGroup : classGroupList) {
+            if(HIGH_ONLINE.equals(classGroup.getType())){
+                Integer studentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
+                if(Objects.nonNull(studentNum)&&studentNum>=6){
+                    throw new BizException("线上基础技能班班级最大人数为6人");
+                }
+            }
+
             // 1、增加班级人数
             classGroupDao.addStudentNum(classGroup);
 

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -4274,7 +4274,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 		if (updateList.size() > 0) {
             courseScheduleDao.batchUpdate(updateList);
-        }
+			List<Long> courseIds = updateList.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+			List<CourseSchedule> beMergeCourses = courseScheduleDao.getBeMergeCourseWithMainCourseIds(courseIds);
+			if(!CollectionUtils.isEmpty(beMergeCourses)){
+				beMergeCourses.forEach(c->c.setStatus(CourseStatusEnum.OVER));
+				courseScheduleDao.batchUpdate(beMergeCourses);
+			}
+		}
 
         // 更新班级已上课次
         if (classGroupIds.size() > 0) {

+ 145 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -1601,10 +1601,16 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
     @Override
     public void calMusicCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
-                                                  List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange) {
+                                                  List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated) {
 
         if(StringUtils.isNotBlank(courseScheduleTeacherSalary.getDeductionReason())&&"不结算课酬".equals(courseScheduleTeacherSalary.getDeductionReason())){
             //不结算课酬
+            if(updated){
+                List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>();
+                courseScheduleTeacherSalary.setActualSalary(BigDecimal.ZERO);
+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.NOT_SETTLEMENT, courseScheduleTeacherSalary.getExpectSalary().abs()));
+                courseScheduleTeacherSalary.setDeductReasons(deductReasons);
+            }
             return;
         }
 
@@ -1836,11 +1842,16 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
     @Override
     public void calVipCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
-                                                List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange) {
+                                                List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated) {
         List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>();
 
         if(StringUtils.isNotBlank(courseScheduleTeacherSalary.getDeductionReason())&&"不结算课酬".equals(courseScheduleTeacherSalary.getDeductionReason())){
             //不结算课酬
+            if(updated){
+                courseScheduleTeacherSalary.setActualSalary(BigDecimal.ZERO);
+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.NOT_SETTLEMENT, courseScheduleTeacherSalary.getExpectSalary().abs()));
+                courseScheduleTeacherSalary.setDeductReasons(deductReasons);
+            }
             return;
         }
         
@@ -1943,11 +1954,16 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
     @Override
     public void calPracticeTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
-                                               List<TeacherAttendance> teacherAttendances, School school, Teacher teacher) {
+                                               List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, Boolean updated) {
         List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>();
 
         if(StringUtils.isNotBlank(courseScheduleTeacherSalary.getDeductionReason())&&"不结算课酬".equals(courseScheduleTeacherSalary.getDeductionReason())){
             //不结算课酬
+            if(updated){
+                courseScheduleTeacherSalary.setActualSalary(BigDecimal.ZERO);
+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.NOT_SETTLEMENT, courseScheduleTeacherSalary.getExpectSalary().abs()));
+                courseScheduleTeacherSalary.setDeductReasons(deductReasons);
+            }
             return;
         }
         
@@ -2041,12 +2057,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     }
 
     @Override
-    public TeacherIncomeReviewDto getTeacherSalaryOverview(Integer teacherId) {
+    public TeacherIncomeReviewDto getTeacherSalaryOverview(TeacherIncomeQueryInfo queryInfo) {
         LocalDate nowDate = LocalDate.now();
-        LocalDate monthFirstDay = nowDate.with(TemporalAdjusters.firstDayOfMonth());
-        LocalDate monthLastDay = nowDate.with(TemporalAdjusters.lastDayOfMonth());
 
-        TeacherIncomeReviewDto teacherSalaryOverview = courseScheduleTeacherSalaryDao.getTeacherSalaryOverview(teacherId, monthFirstDay.toString(), monthLastDay.toString(), "2021-03-01", null);
+        TeacherIncomeReviewDto teacherSalaryOverview = courseScheduleTeacherSalaryDao.getTeacherSalaryOverview(queryInfo.getTeacherId(), queryInfo.getStartDay(), queryInfo.getEndDay(), "2021-03-01", null);
         if(Objects.isNull(teacherSalaryOverview)){
             teacherSalaryOverview = new TeacherIncomeReviewDto();
         }
@@ -2054,7 +2068,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             teacherSalaryOverview.setThisMonthExpectIncome(BigDecimal.ZERO);
         }
 
-        List<CourseSchedule> teacherCourses = courseScheduleDao.getTeacherCourseWithClassDate(teacherId, monthFirstDay.toString(), monthLastDay.toString(), CourseStatusEnum.OVER);
+        List<CourseSchedule> teacherCourses = courseScheduleDao.getTeacherCourseWithClassDate(queryInfo.getTeacherId(), queryInfo.getStartDay(), queryInfo.getEndDay(), CourseStatusEnum.OVER);
         if(CollectionUtils.isEmpty(teacherCourses)){
             return teacherSalaryOverview;
         }
@@ -2063,7 +2077,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
         //课程教师课酬
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseIds);
-        List<CourseScheduleTeacherSalary> teacherSalaries = courseScheduleTeacherSalaries.stream().filter(c -> teacherId.equals(c.getUserId())).collect(Collectors.toList());
+        List<CourseScheduleTeacherSalary> teacherSalaries = courseScheduleTeacherSalaries.stream().filter(c -> queryInfo.getTeacherId().equals(c.getUserId())).collect(Collectors.toList());
         if(CollectionUtils.isEmpty(teacherSalaries)){
             return teacherSalaryOverview;
         }
@@ -2094,7 +2108,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
         //教师签到记录
         List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseIds);
-        Map<Long, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().filter(c->teacherId.equals(c.getTeacherId())).collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
+        Map<Long, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().filter(c->queryInfo.getTeacherId().equals(c.getTeacherId())).collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
 
         //教师信息
         Set<Integer> teacherIds = teacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toSet());
@@ -2111,15 +2125,19 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             //教师
             Teacher teacher = idTeacherMap.get(teacherSalary.getUserId());
 
+            if(Objects.nonNull(teacherSalary.getActualSalary())){
+                continue;
+            }
+
             switch (courseSchedule.getGroupType()){
                 case MUSIC:
-                    calMusicCourseTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, attendanceRange);
+                    calMusicCourseTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, attendanceRange, false);
                     break;
                 case VIP:
-                    calVipCourseTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, vipAttendanceRange);
+                    calVipCourseTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, vipAttendanceRange, false);
                     break;
                 case PRACTICE:
-                    calPracticeTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher);
+                    calPracticeTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, false);
                     break;
             }
         }
@@ -2217,13 +2235,13 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
                 switch (courseSchedule.getGroupType()){
                     case MUSIC:
-                        calMusicCourseTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, attendanceRange);
+                        calMusicCourseTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, attendanceRange, queryInfo.getUpdated());
                         break;
                     case VIP:
-                        calVipCourseTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, vipAttendanceRange);
+                        calVipCourseTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, vipAttendanceRange, queryInfo.getUpdated());
                         break;
                     case PRACTICE:
-                        calPracticeTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher);
+                        calPracticeTeacherActualSalary(courseSchedule, teacherSalary, teacherAttendances, school, teacher, queryInfo.getUpdated());
                         break;
                 }
 
@@ -2338,6 +2356,117 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     }
 
     @Override
+    public Map<String, Object> teacherIncomeStatNew(Integer teacherId, Integer year, Integer month) {
+        if(Objects.isNull(year)){
+            year = LocalDate.now().get(ChronoField.YEAR);
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("total", BigDecimal.ZERO);
+
+        LocalDate minDate = LocalDate.of(2021, 3, 1);
+        LocalDate startDate = LocalDate.of(year, Objects.isNull(month)?1:month, 1);
+
+        if(year<=2021&&Objects.isNull(month)){
+            startDate = startDate.withMonth(3);
+        }
+
+        List<Map<String, Object>> data = new ArrayList<>();
+
+        Map<String, Object> salaryResult = new HashMap<>();
+        salaryResult.put("desc", "课酬");
+        salaryResult.put("amount", BigDecimal.ZERO);
+        salaryResult.put("data", Collections.emptyList());
+
+        Map<String, Object> subsidyResult = new HashMap<>();
+        subsidyResult.put("desc", "教学点补贴");
+        subsidyResult.put("amount", BigDecimal.ZERO);
+        subsidyResult.put("data", Collections.emptyList());
+
+        Map<String, Object> saleRewardResult = new HashMap<>();
+        saleRewardResult.put("desc", "销售奖励");
+        saleRewardResult.put("amount", BigDecimal.ZERO);
+        saleRewardResult.put("data", Collections.emptyList());
+
+        data.add(salaryResult);
+        data.add(subsidyResult);
+        data.add(saleRewardResult);
+
+        result.put("data", data);
+
+        if(startDate.compareTo(minDate)<0){
+            return result;
+        }
+
+        List<LocalDateBigDecimalMapDto> monthIncomeMapList = courseScheduleTeacherSalaryDao.teacherIncomeStat(teacherId, year, month);
+
+        if(CollectionUtils.isEmpty(monthIncomeMapList)){
+            return result;
+        }
+
+        if(Objects.isNull(month)){
+            Set<String> months = monthIncomeMapList.stream().map(e -> DateUtil.dateToString(e.getDate(), "yyyy-MM")).collect(Collectors.toSet());
+
+            LocalDate now = LocalDate.now();
+            now = now.plusMonths(-1);
+            DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
+            while (startDate.compareTo(now)<=0&&year.equals(startDate.get(ChronoField.YEAR))){
+                String dateStr = dateFormatter.format(startDate);
+                if(!months.contains(dateStr)){
+                    monthIncomeMapList.add(new LocalDateBigDecimalMapDto(Date.from(startDate.atStartOfDay(DateUtil.zoneId).toInstant()), dateStr, BigDecimal.ZERO));
+                }
+                startDate = startDate.plusMonths(1);
+            }
+        }else{
+            Set<String> dates = monthIncomeMapList.stream().map(e -> DateUtil.dateToString(e.getDate(), "yyyy-MM-dd")).collect(Collectors.toSet());
+
+            Integer oldMonth = Objects.isNull(month)?new Integer(1):month;
+            while (oldMonth.equals(startDate.get(ChronoField.MONTH_OF_YEAR))){
+                String dateStr = DateUtil.dateFormatter.format(startDate);
+                if(!dates.contains(dateStr)){
+                    monthIncomeMapList.add(new LocalDateBigDecimalMapDto(Date.from(startDate.atStartOfDay(DateUtil.zoneId).toInstant()), dateStr, BigDecimal.ZERO));
+                }
+                startDate = startDate.plusDays(1);
+            }
+        }
+
+        monthIncomeMapList.sort(Comparator.comparing(LocalDateBigDecimalMapDto::getDate));
+
+        BigDecimal reduce = monthIncomeMapList.stream().map(LocalDateBigDecimalMapDto::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        BigDecimal subsidy = monthIncomeMapList.stream().map(LocalDateBigDecimalMapDto::getSubsidy).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        result.put("total", reduce.add(subsidy));
+        salaryResult.put("amount", reduce);
+        salaryResult.put("data", monthIncomeMapList);
+
+        List<LocalDateBigDecimalMapDto> subsidyList = new ArrayList<>();
+        List<LocalDateBigDecimalMapDto> saleRewardList = new ArrayList<>();
+        for (LocalDateBigDecimalMapDto localDateBigDecimalMapDto : monthIncomeMapList) {
+            if(localDateBigDecimalMapDto.getAmount().compareTo(BigDecimal.ZERO)<0){
+                localDateBigDecimalMapDto.setAmount(BigDecimal.ZERO);
+            }
+
+            LocalDateBigDecimalMapDto subsidyData = new LocalDateBigDecimalMapDto();
+            BeanUtils.copyProperties(localDateBigDecimalMapDto, subsidyData);
+            subsidyData.setAmount(subsidyData.getSubsidy());
+            subsidyList.add(subsidyData);
+
+            LocalDateBigDecimalMapDto saleRewardData = new LocalDateBigDecimalMapDto();
+            BeanUtils.copyProperties(localDateBigDecimalMapDto, saleRewardData);
+            saleRewardData.setAmount(BigDecimal.ZERO);
+            saleRewardList.add(saleRewardData);
+        }
+
+        subsidyResult.put("amount", subsidy);
+        subsidyResult.put("data", subsidyList);
+
+        saleRewardResult.put("data", saleRewardList);
+
+        return result;
+    }
+
+    @Override
     public void todayIncomeRemind() {
         List<Integer> teacherIds = courseScheduleTeacherSalaryDao.getTodayHasCourseTeacherIds();
         if(CollectionUtils.isEmpty(teacherIds)){

+ 6 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -556,8 +556,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			//服务指标异常
 			Map<String, Object> params = new HashMap<>();
 			LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
-			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
-			LocalDate sunDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue());
+			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue()).plusDays(-7);
+			LocalDate sunDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue()).plusDays(-7);
 			params.put("organIds", organIds);
 			params.put("monday",monDayDate.toString());
 			params.put("sunday",sunDayDate.toString());
@@ -699,8 +699,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			//服务指标异常
 			Map<String, Object> params = new HashMap<>();
 			LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
-			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
-			LocalDate sunDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue());
+			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue()).plusDays(-7);
+			LocalDate sunDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue()).plusDays(-7);
 			params.put("organIds", organIds);
 			params.put("monday",monDayDate.toString());
 			params.put("sunday",sunDayDate.toString());
@@ -977,8 +977,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		if(!flag4){
 			Map<String, Object> params = new HashMap<>();
 			LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
-			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
-			LocalDate sunDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue());
+			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue()).plusDays(-7);
+			LocalDate sunDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue()).plusDays(-7);
 			params.put("organIds", organIds);
 			params.put("monday",monDayDate.toString());
 			params.put("sunday",sunDayDate.toString());

+ 12 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -657,10 +657,18 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			teacherAttendance.setTeacherId(teacherAttendanceInfo.getTeacherId());
 			teacherAttendance.setCreateTime(date);
 		}
-		teacherAttendance.setSignInTime(date);
-		teacherAttendance.setSignInStatus(teacherAttendanceInfo.getSignInStatus());
-		teacherAttendance.setSignOutTime(date);
-		teacherAttendance.setSignOutStatus(teacherAttendanceInfo.getSignOutStatus());
+
+		if(Objects.isNull(teacherAttendance.getSignInStatus())||teacherAttendance.getSignInStatus().equals(YesOrNoEnum.NO)){
+			int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
+			Date add20Minutes = DateUtil.addMinutes(courseSchedule.getStartClassTime(), advanceSignMinutes * -1);
+			teacherAttendance.setSignInTime(add20Minutes);
+			teacherAttendance.setSignInStatus(teacherAttendanceInfo.getSignInStatus());
+		}
+
+		if(Objects.isNull(teacherAttendance.getSignOutStatus())||teacherAttendance.getSignOutStatus().equals(YesOrNoEnum.NO)) {
+			teacherAttendance.setSignOutTime(courseSchedule.getEndClassTime());
+			teacherAttendance.setSignOutStatus(teacherAttendanceInfo.getSignOutStatus());
+		}
 
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		StringBuilder remark=new StringBuilder("补签到,");

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

@@ -3756,7 +3756,12 @@
             AND (cs.is_lock_=0 OR cs.is_lock_ IS NULL)
             AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
             AND csts.user_id_ = #{teacherId}
-            AND cs.class_date_ BETWEEN #{startDay} AND #{endDay}
+            <if test="startDay!=null and startDay!=''">
+                AND cs.class_date_ &gt;= #{startDay}
+            </if>
+            <if test="endDay!=null and endDay!=''">
+                AND cs.class_date_ &lt;= #{endDay}
+            </if>
             <if test="courseStatus!=null">
                 AND cs.status_ = #{courseStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
@@ -3802,4 +3807,17 @@
         LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
         <include refid="queryTeacherCourseCondition"></include>
     </select>
+
+    <select id="getBeMergeCourseWithMainCourseIds" resultMap="CourseSchedule">
+        SELECT
+        <include refid="resultSql" />
+        FROM
+        course_schedule cs
+        WHERE
+            cs.new_course_id_ != cs.id_
+            AND cs.new_course_id_ IN
+            <foreach collection="courseIds" item="courseId" open="(" close=")" separator=",">
+                #{courseId}
+            </foreach>
+    </select>
 </mapper>

+ 10 - 2
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -1082,7 +1082,14 @@
     <select id="getTeacherSalaryOverview" resultType="com.ym.mec.biz.dal.dto.TeacherIncomeReviewDto">
 		SELECT
 			SUM(csts.actual_salary_) totalIncome,
-			SUM((CASE DATE_FORMAT(cs.class_date_, '%Y-%m') WHEN DATE_FORMAT(#{startDay}, '%Y-%m') THEN csts.expect_salary_ + IF(s.subsidy_ IS NULL, 0, s.subsidy_) ELSE 0 END)) thisMonthExpectIncome
+			SUM((CASE WHEN 1=1
+					<if test="startClassDay!=null and startClassDay!=''">
+			    		AND cs.class_date_ &gt;= #{startDay}
+					</if>
+					<if test="endDay!=null and endDay!=''">
+						AND cs.class_date_ &lt;= #{endDay}
+					</if>
+			    THEN csts.expect_salary_ + IF(s.subsidy_ IS NULL, 0, s.subsidy_) ELSE 0 END)) thisMonthExpectIncome
 		FROM
 			course_schedule_teacher_salary csts
 			LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
@@ -1110,7 +1117,8 @@
 				DATE_FORMAT( cs.class_date_, '%Y-%m-%d' ) date,
 				DATE_FORMAT( cs.class_date_, '%Y-%m-%d' ) dateStr,
 			</if>
-			SUM( csts.actual_salary_ ) amount
+		    SUM(csts.subsidy_) subsidy,
+			SUM( csts.actual_salary_ - csts.subsidy_ ) amount
 		FROM
 			course_schedule_teacher_salary csts
 				LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_

+ 17 - 2
mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseScheduleTeacherSalaryController.java

@@ -84,12 +84,17 @@ public class CourseScheduleTeacherSalaryController extends BaseController {
 
     @ApiOperation(value = "获取教师收入总览")
     @GetMapping("/getTeacherSalaryOverview")
-    public HttpResponseResult getTeacherSalaryOverview(){
+    public HttpResponseResult getTeacherSalaryOverview(TeacherIncomeQueryInfo queryInfo){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
-        return succeed(courseScheduleTeacherSalaryService.getTeacherSalaryOverview(sysUser.getId()));
+        queryInfo.setTeacherId(sysUser.getId());
+        queryInfo.setCourseStatus(CourseStatusEnum.OVER);
+        if(StringUtils.isBlank(queryInfo.getStartDay())){
+            queryInfo.setStartDay("2021-03-01");
+        }
+        return succeed(courseScheduleTeacherSalaryService.getTeacherSalaryOverview(queryInfo));
     }
 
     @ApiOperation(value = "查询教师课酬记录")
@@ -117,4 +122,14 @@ public class CourseScheduleTeacherSalaryController extends BaseController {
         return succeed(courseScheduleTeacherSalaryService.teacherIncomeStat(sysUser.getId(), year, month));
     }
 
+    @ApiOperation(value = "收入统计")
+    @GetMapping("/teacherIncomeStatNew")
+    public HttpResponseResult teacherIncomeStatNew(Integer year, Integer month){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(courseScheduleTeacherSalaryService.teacherIncomeStatNew(sysUser.getId(), year, month));
+    }
+
 }