Переглянути джерело

fix:1、考勤;2、课酬

Joburgess 4 роки тому
батько
коміт
f9e745feaf

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java

@@ -506,4 +506,15 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @return
 	 */
 	List<Map<Long, String>> queryTeacherIdMap(@Param("courseScheduleIds") List<Long> courseScheduleIds, @Param("teacherRole") String teacherRole);
+
+	/**
+	 * @describe 获取指定时间段内已结算的教师课酬记录
+	 * @author Joburgess
+	 * @date 2020/12/29 0029
+	 * @param startDate:
+	 * @param endDate:
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
+	 */
+	List<CourseScheduleTeacherSalary> getIsSalaryWithDate(@Param("startDate") String startDate, @Param("endDate") String endDate);
+
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseSalaryQueryInfo4Web.java

@@ -27,6 +27,16 @@ public class CourseSalaryQueryInfo4Web extends QueryInfo {
 
     private Integer confirmStatus;
 
+    private Integer belongDaya;
+
+    public Integer getBelongDaya() {
+        return belongDaya;
+    }
+
+    public void setBelongDaya(Integer belongDaya) {
+        this.belongDaya = belongDaya;
+    }
+
     public Integer getTeacherId() {
         return teacherId;
     }

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

@@ -192,7 +192,7 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @date 2020/12/25 0025
      * @return void
      */
-    void salaryMark(String startDate, String endDate);
+    void salaryMark();
 
     /**
      * @describe 组合工资,使其最接近给定的金额

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -209,6 +209,8 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
 
     String VIP_SPECIAL_ACTIVITY_IDS = "vip_special_activity_ids";
 
+    String DAYA_BASE_SALARY_AMOUNT = "daya_base_salary_amount";
+
     /**
      * @return com.ym.mec.biz.dal.entity.SysConfig
      * @params paramName

+ 39 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -1354,11 +1354,49 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     }
 
     @Override
-    public void salaryMark(String startDate, String endDate) {
+    @Transactional(rollbackFor = Exception.class)
+    public void salaryMark() {
+        Date now = new Date();
+        Date date = DateUtil.addMonths(now, -1);
+        String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+        String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+
         int isSalaryGroupTypes = courseScheduleDao.countIsSalaryGroupTypes(startDate, endDate);
         if(isSalaryGroupTypes<3){
             return;
         }
+        List<CourseScheduleTeacherSalary> salaries = courseScheduleTeacherSalaryDao.getIsSalaryWithDate(startDate, endDate);
+        if(CollectionUtils.isEmpty(salaries)){
+            return;
+        }
+        SysConfig dayaBaseSalaryAmountConfig = sysConfigService.findByParamName(SysConfigService.DAYA_BASE_SALARY_AMOUNT);
+        BigDecimal dayaBaseSalaryAmount = new BigDecimal(4000);
+        if(Objects.nonNull(dayaBaseSalaryAmountConfig)&&StringUtils.isNotBlank(dayaBaseSalaryAmountConfig.getParanValue())){
+            dayaBaseSalaryAmount = new BigDecimal(dayaBaseSalaryAmountConfig.getParanValue());
+        }
+
+        Map<Integer, List<CourseScheduleTeacherSalary>> teacherSalariesMap = salaries.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getUserId));
+        List<CourseScheduleTeacherSalary> updateRecords = new ArrayList<>();
+        for (Map.Entry<Integer, List<CourseScheduleTeacherSalary>> teacherSalariesMapEntry : teacherSalariesMap.entrySet()) {
+            List<CourseScheduleTeacherSalary> teacherSalaries = teacherSalariesMapEntry.getValue();
+            List<BigDecimal> amounts = teacherSalaries.stream().map(CourseScheduleTeacherSalary::getActualSalary).collect(Collectors.toList());
+            List<BigDecimal> resultAmounts = salaryComposition(amounts, dayaBaseSalaryAmount);
+            for (BigDecimal resultAmount : resultAmounts) {
+                Iterator<CourseScheduleTeacherSalary> iterator = teacherSalaries.iterator();
+                while (iterator.hasNext()){
+                    CourseScheduleTeacherSalary teacherSalary = iterator.next();
+                    if(teacherSalary.getActualSalary().compareTo(resultAmount)==0){
+                        CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+                        courseScheduleTeacherSalary.setId(teacherSalary.getId());
+                        courseScheduleTeacherSalary.setBelongToDaya(true);
+                        updateRecords.add(courseScheduleTeacherSalary);
+                        iterator.remove();
+                        break;
+                    }
+                }
+            }
+        }
+        courseScheduleTeacherSalaryDao.batchUpdate(updateRecords);
     }
 
     @Override

+ 54 - 42
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -313,39 +313,58 @@ public class StudentServeServiceImpl implements StudentServeService {
         List<StudentExtracurricularExercisesSituation> results=new ArrayList<>();
 
         for (Map.Entry<Integer, List<StudentServeCourseDto>> studentCourseMapEntry : studentCourseMap.entrySet()) {
-            Map<CourseSchedule.CourseScheduleType, List<StudentServeCourseDto>> typeCourseMap = studentCourseMapEntry.getValue().stream().collect(Collectors.groupingBy(StudentServeCourseDto::getType));
-
-            if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.SINGLE)){
-                List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.SINGLE);
-                List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.SINGLE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
-                if(CollectionUtils.isEmpty(weekCourseInfo)){
-                    StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
-                            futureCourseInfo.get(0).getActualTeacherId(),nowDate.get(DateUtil.weekFields.weekOfYear()),
-                            DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
-                            "EXERCISE", null);
-                    results.add(studentExtracurricularExercisesSituation);
-                }else{
-                    Map<String, List<StudentServeCourseDto>> groupCourseInfo = weekCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId));
-                    Map<Integer, Set<Long>> teacherServiceCourseIdMap = new HashMap<>();
-                    for (Map.Entry<String, List<StudentServeCourseDto>> groupCourseInfoEntry : groupCourseInfo.entrySet()) {
-                        StudentServeCourseDto courseInfo = groupCourseInfoEntry.getValue().stream().min(Comparator.comparing(StudentServeCourseDto::getCourseStartTime)).get();
-                        if(!teacherServiceCourseIdMap.containsKey(courseInfo.getActualTeacherId())){
-                            teacherServiceCourseIdMap.put(courseInfo.getActualTeacherId(), new HashSet<>());
+//            Map<CourseSchedule.CourseScheduleType, List<StudentServeCourseDto>> typeCourseMap = studentCourseMapEntry.getValue().stream().collect(Collectors.groupingBy(StudentServeCourseDto::getType));
+
+            Map<GroupType, List<StudentServeCourseDto>> groupCourseMap = studentCourseMapEntry.getValue().stream().collect(Collectors.groupingBy(StudentServeCourseDto::getGroupType));
+
+            if(groupCourseMap.containsKey(GroupType.MUSIC)){
+                Map<String, List<StudentServeCourseDto>> groupIdCourseMap = groupCourseMap.get(GroupType.MUSIC).stream().collect(Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId));
+                for (Map.Entry<String, List<StudentServeCourseDto>> groupIdCourseMapEntry : groupIdCourseMap.entrySet()) {
+                    Map<CourseSchedule.CourseScheduleType, List<StudentServeCourseDto>> typeCourseMap = groupIdCourseMapEntry.getValue().stream().collect(Collectors.groupingBy(StudentServeCourseDto::getType));
+                    if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.SINGLE)){
+                        List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.SINGLE);
+                        List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.SINGLE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
+                        if(CollectionUtils.isEmpty(weekCourseInfo)){
+                            StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
+                                    futureCourseInfo.get(0).getActualTeacherId(),nowDate.get(DateUtil.weekFields.weekOfYear()),
+                                    DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
+                                    "EXERCISE", null);
+                            results.add(studentExtracurricularExercisesSituation);
+                        }else{
+                            Map<String, List<StudentServeCourseDto>> groupCourseInfo = weekCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId));
+                            Map<Integer, Set<Long>> teacherServiceCourseIdMap = new HashMap<>();
+                            for (Map.Entry<String, List<StudentServeCourseDto>> groupCourseInfoEntry : groupCourseInfo.entrySet()) {
+                                StudentServeCourseDto courseInfo = groupCourseInfoEntry.getValue().stream().min(Comparator.comparing(StudentServeCourseDto::getCourseStartTime)).get();
+                                if(!teacherServiceCourseIdMap.containsKey(courseInfo.getActualTeacherId())){
+                                    teacherServiceCourseIdMap.put(courseInfo.getActualTeacherId(), new HashSet<>());
+                                }
+                                teacherServiceCourseIdMap.get(courseInfo.getActualTeacherId()).add(courseInfo.getCourseScheduleId());
+                            }
+                            for (Map.Entry<Integer, Set<Long>> teacherServiceCourseIdMapEntry : teacherServiceCourseIdMap.entrySet()) {
+                                StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
+                                        teacherServiceCourseIdMapEntry.getKey(),nowDate.get(DateUtil.weekFields.weekOfYear()),
+                                        DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
+                                        "HOMEWORK", StringUtils.join(teacherServiceCourseIdMapEntry.getValue(), ","));
+                                studentExtracurricularExercisesSituation.setExpectExercisesNum(teacherServiceCourseIdMapEntry.getValue().size());
+                                results.add(studentExtracurricularExercisesSituation);
+                            }
                         }
-                        teacherServiceCourseIdMap.get(courseInfo.getActualTeacherId()).add(courseInfo.getCourseScheduleId());
-                    }
-                    for (Map.Entry<Integer, Set<Long>> teacherServiceCourseIdMapEntry : teacherServiceCourseIdMap.entrySet()) {
+                    }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.MIX)){
+                        CourseSchedule studentHistoryLastCourse = courseScheduleStudentPaymentDao.getStudentHistoryLastCourse(studentCourseMapEntry.getKey(), monDayDate.toString(), CourseSchedule.CourseScheduleType.SINGLE);
                         StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
-                                teacherServiceCourseIdMapEntry.getKey(),nowDate.get(DateUtil.weekFields.weekOfYear()),
+                                Objects.isNull(studentHistoryLastCourse)?studentCourseMapEntry.getValue().get(0).getLeadTeacherId():studentHistoryLastCourse.getActualTeacherId(),
+                                nowDate.get(DateUtil.weekFields.weekOfYear()),
                                 DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
-                                "HOMEWORK", StringUtils.join(teacherServiceCourseIdMapEntry.getValue(), ","));
-                        studentExtracurricularExercisesSituation.setExpectExercisesNum(teacherServiceCourseIdMapEntry.getValue().size());
+                                "EXERCISE", null);
+                        if(Objects.isNull(studentExtracurricularExercisesSituation.getTeacherId())){
+                            continue;
+                        }
                         results.add(studentExtracurricularExercisesSituation);
                     }
                 }
-            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.VIP)){
-                List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.VIP);
-                List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.VIP).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
+            }else if(groupCourseMap.containsKey(GroupType.VIP)){
+                List<StudentServeCourseDto> futureCourseInfo = groupCourseMap.get(GroupType.VIP);
+                List<StudentServeCourseDto> weekCourseInfo = groupCourseMap.get(GroupType.VIP).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(weekCourseInfo)){
                     StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
                             futureCourseInfo.get(0).getActualTeacherId(),nowDate.get(DateUtil.weekFields.weekOfYear()),
@@ -372,20 +391,9 @@ public class StudentServeServiceImpl implements StudentServeService {
                         results.add(studentExtracurricularExercisesSituation);
                     }
                 }
-            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.MIX)){
-                CourseSchedule studentHistoryLastCourse = courseScheduleStudentPaymentDao.getStudentHistoryLastCourse(studentCourseMapEntry.getKey(), monDayDate.toString(), CourseSchedule.CourseScheduleType.SINGLE);
-                StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
-                        Objects.isNull(studentHistoryLastCourse)?studentCourseMapEntry.getValue().get(0).getLeadTeacherId():studentHistoryLastCourse.getActualTeacherId(),
-                        nowDate.get(DateUtil.weekFields.weekOfYear()),
-                        DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
-                        "EXERCISE", null);
-                if(Objects.isNull(studentExtracurricularExercisesSituation.getTeacherId())){
-                    continue;
-                }
-                results.add(studentExtracurricularExercisesSituation);
-            }else if(typeCourseMap.containsKey(CourseSchedule.CourseScheduleType.PRACTICE)){
-                List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.PRACTICE);
-                List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.PRACTICE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
+            }else if(groupCourseMap.containsKey(GroupType.PRACTICE)){
+                List<StudentServeCourseDto> futureCourseInfo = groupCourseMap.get(GroupType.PRACTICE);
+                List<StudentServeCourseDto> weekCourseInfo = groupCourseMap.get(GroupType.PRACTICE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(weekCourseInfo)){
                     StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
                             futureCourseInfo.get(0).getActualTeacherId(),nowDate.get(DateUtil.weekFields.weekOfYear()),
@@ -453,7 +461,11 @@ public class StudentServeServiceImpl implements StudentServeService {
                     courseIds.addAll(Arrays.stream(result.getCourseIds().split(",")).map(id->Long.valueOf(id)).collect(Collectors.toList()));
                 }
                 s.setServeType(result.getServeType());
-                s.setCourseIds(StringUtils.join(courseIds, ","));
+                if(s.getServeType().equals("HOMEWORK")){
+                    s.setCourseIds(StringUtils.join(courseIds, ","));
+                }else{
+                    s.setCourseIds("");
+                }
                 if(StringUtils.isBlank(s.getCourseIds())){
                     s.setExpectExercisesNum(1);
                 }else{

+ 19 - 5
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -55,21 +55,20 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO course_schedule_teacher_salary (id_,group_type_,music_group_id_,course_schedule_id_,teacher_role_,
 		user_id_,expect_salary_,create_time_,update_time_,subsidy_,actual_salary_,settlement_time_,class_group_id_,
-		reduce_salary,confirm_status_,memo_,is_belong_to_daya_)
+		reduce_salary,confirm_status_,memo_)
 		VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{courseScheduleId},
 		#{teacherRole},#{userId},#{expectSalary},now(),now(),#{subsidy},#{actualSalary},#{settlementTime},#{classGroupId},
-		#{reduceSalary},#{confirmStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{memo},#{belongToDaya})
+		#{reduceSalary},#{confirmStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{memo})
 	</insert>
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
 		INSERT INTO course_schedule_teacher_salary (id_,group_type_,music_group_id_,course_schedule_id_,teacher_role_,
 		user_id_,expect_salary_,create_time_,update_time_,subsidy_,actual_salary_,settlement_time_,class_group_id_,
-		reduce_salary,confirm_status_,memo_,is_belong_to_daya_)
+		reduce_salary,confirm_status_,memo_)
 		VALUES
 		<foreach collection="list" item="data" separator=",">
 			(#{data.id},#{data.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.musicGroupId},#{data.courseScheduleId},
 			#{data.teacherRole},#{data.userId},#{data.expectSalary},now(),now(),#{data.subsidy},#{data.actualSalary},#{data.settlementTime},
-			#{data.classGroupId},#{data.reduceSalary},#{data.confirmStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.memo},
-			#{data.belongToDaya})
+			#{data.classGroupId},#{data.reduceSalary},#{data.confirmStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.memo})
 		</foreach>
     </insert>
 
@@ -847,6 +846,9 @@
 			<if test="search!=null">
 				AND (csts.course_schedule_id_=#{search} OR cs.name_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
+			<if test="belongDaya!=null">
+				AND csts.is_belong_to_daya_ = #{belongDaya}
+			</if>
 		</where>
 	</sql>
 
@@ -1022,4 +1024,16 @@
 		</if>
 		GROUP BY course_schedule_id_
 	</select>
+
+	<select id="getIsSalaryWithDate" resultMap="CourseScheduleTeacherSalary">
+		SELECT
+			csts.*
+		FROM
+			course_schedule_teacher_salary csts
+			LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
+		WHERE
+			cs.class_date_ BETWEEN #{startDate} AND #{endDate}
+		  AND ( cs.del_flag_ IS NULL OR cs.del_flag_ = 0 )
+		  AND csts.settlement_time_ IS NOT NULL
+	</select>
 </mapper>

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

@@ -126,18 +126,21 @@ public class TaskController extends BaseController {
 	// vip课课酬结算
 	public void vipGroupTeacherSalarySettlement() {
 		courseScheduleTeacherSalaryService.teacherSalarySettlement();
+		courseScheduleTeacherSalaryService.salaryMark();
 	}
 
 	@GetMapping("/practiceTeacherSalarySettlement")
 	// 陪练课课酬结算
 	public void practiceTeacherSalarySettlement() {
 		courseScheduleTeacherSalaryService.practiceTeacherSalarySettlement();
+		courseScheduleTeacherSalaryService.salaryMark();
 	}
 
 	// 乐团课课酬结算
 	@GetMapping("/musicGroupTeacherSalarySettlement")
 	public void musicGroupTeacherSalarySettlement() {
 		courseScheduleTeacherSalaryService.musicGroupTeacherSalarySettlement();
+		courseScheduleTeacherSalaryService.salaryMark();
 	}
 
 	@GetMapping("/updateCourseScheduleToOverStatus")