|
@@ -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)){
|