Browse Source

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

zouxuan 5 năm trước cách đây
mục cha
commit
352631d252

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

@@ -384,6 +384,38 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	int countIsSettlementCourseSalarys(Map<String, Object> params);
 
 	/**
+	 * @describe 获取老师指定月份的已结算课酬编号
+	 * @author Joburgess
+	 * @date 2020/4/15
+	 * @param teacherId:
+	 * @param month:
+	 * @return java.util.List<java.lang.Long>
+	 */
+	List<Long> findTeacherSalaryIdsWithMonth(@Param("teacherId") Integer teacherId,
+											 @Param("month") String month);
+
+	/**
+	 * @describe 统计教师指定月份不同团体类型的课酬
+	 * @author Joburgess
+	 * @date 2020/4/15
+	 * @param month:
+	 * @param teacherId:
+	 * @return java.util.List<com.ym.mec.biz.dal.dto.CourseTeacherSalaryStatisticsDto>
+	 */
+	List<CourseTeacherSalaryStatisticsDto> getTeacherGroupTypeSalary(@Param("month") String month,
+																 @Param("teacherId") Integer teacherId);
+
+	/**
+	 * @describe 统计教师每月的工资
+	 * @author Joburgess
+	 * @date 2020/4/15
+	 * @param teacherId:
+	 * @return java.util.List<com.ym.mec.biz.dal.dto.CourseTeacherSalaryStatisticsDto>
+	 */
+	List<CourseTeacherSalaryStatisticsDto> getTeacherMonthSalarys(@Param("teacherId") Integer teacherId,
+																  @Param("year") String year);
+
+	/**
 	 * 调整已结算的课酬
 	 * @param modifyLog
 	 */

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/GroupDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.GroupBaseCourseInfoDto;
+import com.ym.mec.biz.dal.dto.GroupUserDto;
 import com.ym.mec.biz.dal.entity.Group;
 import com.ym.mec.biz.dal.enums.GroupType;
 import org.apache.ibatis.annotations.Param;
@@ -69,5 +70,16 @@ public interface GroupDao {
     List<GroupBaseCourseInfoDto> countGroupFinishedClassesTimes(@Param("groupIds") List<String> groupIds,
                                                   @Param("groupType") GroupType groupType);
 
+    /**
+     * @describe 获取团体学生
+     * @author Joburgess
+     * @date 2020/4/15
+     * @param groupIds:
+     * @param groupType:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.GroupUserDto>
+     */
+    List<GroupUserDto> findGroupsStudents(@Param("groupIds") List<String> groupIds,
+                                       @Param("groupType") GroupType groupType);
+
 
 }

+ 52 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseTeacherSalaryStatisticsDto.java

@@ -0,0 +1,52 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.enums.GroupType;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/4/15
+ */
+public class CourseTeacherSalaryStatisticsDto {
+
+    private GroupType groupType;
+
+    private String month;
+
+    private BigDecimal totalActualSalary;
+
+    private BigDecimal totalReduceSalary;
+
+    public String getMonth() {
+        return month;
+    }
+
+    public void setMonth(String month) {
+        this.month = month;
+    }
+
+    public GroupType getGroupType() {
+        return groupType;
+    }
+
+    public void setGroupType(GroupType groupType) {
+        this.groupType = groupType;
+    }
+
+    public BigDecimal getTotalActualSalary() {
+        return totalActualSalary;
+    }
+
+    public void setTotalActualSalary(BigDecimal totalActualSalary) {
+        this.totalActualSalary = totalActualSalary;
+    }
+
+    public BigDecimal getTotalReduceSalary() {
+        return totalReduceSalary;
+    }
+
+    public void setTotalReduceSalary(BigDecimal totalReduceSalary) {
+        this.totalReduceSalary = totalReduceSalary;
+    }
+}

+ 50 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/GroupUserDto.java

@@ -0,0 +1,50 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.enums.GroupType;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/4/15
+ */
+public class GroupUserDto {
+
+    private String groupId;
+
+    private GroupType groupType;
+
+    private Integer userId;
+
+    private String userName;
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public GroupType getGroupType() {
+        return groupType;
+    }
+
+    public void setGroupType(GroupType groupType) {
+        this.groupType = groupType;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java

@@ -128,6 +128,16 @@ public class VipGroup {
 
 	private String educationalTeacherName;
 
+	private String userInfo;
+
+	public String getUserInfo() {
+		return userInfo;
+	}
+
+	public void setUserInfo(String userInfo) {
+		this.userInfo = userInfo;
+	}
+
 	public String getEducationalTeacherName() {
 		return educationalTeacherName;
 	}

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

@@ -100,6 +100,16 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
     List<Long> querySettlementScheduleId(String courseScheduleIds);
 
     /**
+     * @describe 确定教师指定月份的课酬
+     * @author Joburgess
+     * @date 2020/4/15
+     * @param teacherId:
+     * @param month:
+     * @return void
+     */
+    void confirmTeacherMonthSalary(Integer teacherId, String month);
+
+    /**
      * @describe 获取课酬记录
      * @author Joburgess
      * @date 2020/4/15
@@ -116,4 +126,14 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @return java.util.Map<java.lang.String,java.lang.Object>
      */
     Map<String, Object> findTeacherSettlementCourseSalarys(CourseSalaryQueryInfo4Web queryInfo4Web);
+
+    /**
+     * @describe 获取教师指定年份每月的课酬
+     * @author Joburgess
+     * @date 2020/4/15
+     * @param teacherId:
+     * @param year:
+     * @return java.util.Map<java.lang.String,java.lang.Object>
+     */
+    Map<String, Object> findTeacherYearSalarys(Integer teacherId, String year);
 }

+ 35 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -828,6 +828,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     }
 
     @Override
+    public void confirmTeacherMonthSalary(Integer teacherId, String month) {
+        if(Objects.isNull(month)){
+            month=DateUtil.dateToString(DateUtil.addMonths(new Date(), -1), "yyyy-MM");
+        }
+        courseScheduleTeacherSalaryDao.findTeacherSalaryIdsWithMonth(teacherId,month);
+    }
+
+    @Override
     public PageInfo<TeacherCourseSalaryDetail4WebDto> findIsSettlementCourseSalarys(CourseSalaryQueryInfo4Web queryInfo) {
         PageInfo<TeacherCourseSalaryDetail4WebDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();
@@ -855,6 +863,33 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         PageInfo<TeacherCourseSalaryDetail4WebDto> pageInfo = findIsSettlementCourseSalarys(queryInfo4Web);
         Map<String, Object> result=new HashMap<>();
         result.put("pageInfo",pageInfo);
+        Map<String, BigDecimal> groupTypeSalaryMap = new HashMap<>();
+        if(queryInfo4Web.getPage()<=1){
+            List<CourseTeacherSalaryStatisticsDto> teacherGroupTypeSalary = courseScheduleTeacherSalaryDao.getTeacherGroupTypeSalary(queryInfo4Web.getMonth(), queryInfo4Web.getTeacherId());
+            groupTypeSalaryMap = teacherGroupTypeSalary.stream()
+                    .collect(Collectors.toMap(c->c.getGroupType().getCode(),
+                            c -> Objects.isNull(c.getTotalReduceSalary()) ? c.getTotalActualSalary() : c.getTotalActualSalary().subtract(c.getTotalReduceSalary())));
+        }
+        result.put("stat", groupTypeSalaryMap);
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> findTeacherYearSalarys(Integer teacherId, String year) {
+        if(Objects.isNull(year)){
+            year=DateUtil.getYear(new Date());
+        }
+        List<CourseTeacherSalaryStatisticsDto> teacherMonthSalarys = courseScheduleTeacherSalaryDao.getTeacherMonthSalarys(teacherId, year);
+        BigDecimal totalSalary = BigDecimal.ZERO;
+        for (CourseTeacherSalaryStatisticsDto teacherMonthSalary : teacherMonthSalarys) {
+            if(Objects.nonNull(teacherMonthSalary.getTotalReduceSalary())){
+                teacherMonthSalary.setTotalActualSalary(teacherMonthSalary.getTotalReduceSalary().subtract(teacherMonthSalary.getTotalReduceSalary()));
+            }
+            totalSalary = totalSalary.add(teacherMonthSalary.getTotalActualSalary());
+        }
+        Map<String, Object> result=new HashMap<>();
+        result.put("monthSalarys", teacherMonthSalarys);
+        result.put("totalSalary", totalSalary);
         return result;
     }
 }

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

@@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -101,6 +102,7 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         courseHomework.setId(bean.getCourseHomeworkId());
         courseHomework.setGroupType(courseSchedule.getGroupType());
         courseHomework.setCompletedNum(studentCourseHomeworkDao.countCompletedStudentNum(bean.getCourseHomeworkId()));
+        courseHomeworkService.update(courseHomework);
 
         CourseHomework temp = courseHomeworkService.get(courseHomework.getId());
         if (temp.getExpectNum().equals(courseHomework.getCompletedNum())) {
@@ -123,7 +125,6 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
                     null,courseDate,courseSchedule.getName());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.HOMEWORK_SUBMIT_PUSH,
                     userMap, null, 0, notifyUrl, "TEACHER", courseSchedule.getName(), courseDate, user.getUsername());
-            courseHomeworkService.update(courseHomework);
         }
     }
 
@@ -233,11 +234,13 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = studentCourseHomeworkDao.findStudentHomeworkRecord(params);
-            List<Integer> teacherIds = dataList.stream().map(StudentHomeworkRecordDto::getTeacherId).collect(Collectors.toList());
-            List<SimpleUserDto> teachers = teacherDao.findSimpleTeachers(teacherIds);
-            Map<Integer, String> idNameMap = teachers.stream().collect(Collectors.toMap(SimpleUserDto::getUserId, u -> u.getUserName()));
-            for (StudentHomeworkRecordDto studentHomeworkRecordDto : dataList) {
-                studentHomeworkRecordDto.setTeacherName(idNameMap.get(studentHomeworkRecordDto.getTeacherId()));
+            if(!CollectionUtils.isEmpty(dataList)){
+                List<Integer> teacherIds = dataList.stream().map(StudentHomeworkRecordDto::getTeacherId).collect(Collectors.toList());
+                List<SimpleUserDto> teachers = teacherDao.findSimpleTeachers(teacherIds);
+                Map<Integer, String> idNameMap = teachers.stream().collect(Collectors.toMap(SimpleUserDto::getUserId, u -> u.getUserName()));
+                for (StudentHomeworkRecordDto studentHomeworkRecordDto : dataList) {
+                    studentHomeworkRecordDto.setTeacherName(idNameMap.get(studentHomeworkRecordDto.getTeacherId()));
+                }
             }
         }
         if (count == 0) {

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -124,6 +124,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private StudentAttendanceDao studentAttendanceDao;
 	@Autowired
 	private EmployeeDao employeeDao;
+	@Autowired
+	private GroupDao groupDao;
 
 	private static final Logger LOGGER = LoggerFactory
 			.getLogger(VipGroup.class);
@@ -588,6 +590,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 					idNameMap = educationalUsers.stream().filter(e->Objects.nonNull(e.getUserId())&&Objects.nonNull(e.getUserName())).collect(Collectors.toMap(SimpleUserDto::getUserId, user -> user.getUserName()));
 				}
 
+				Map<String, List<GroupUserDto>> groupStudentsMap = new HashMap<>();
+				if(queryInfo.getIsExport()){
+					List<GroupUserDto> groupsStudents = groupDao.findGroupsStudents(vipGroupIds, GroupType.VIP);
+					groupStudentsMap=groupsStudents.stream().collect(Collectors.groupingBy(GroupUserDto::getGroupId));
+				}
+
 				for (VipGroup vipGroup : dataList) {
 					Integer overCourses = vipGroupOverCourseMaps.get(vipGroup.getId().toString());
 					ClassGroup classGroup = vipGroupClassGroupMap.get(vipGroup.getId().toString());
@@ -602,6 +610,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 					vipGroup.setEducationalTeacherName(idNameMap.get(vipGroup.getEducationalTeacherId()));
 
+					if(queryInfo.getIsExport()){
+						List<GroupUserDto> groupStudents = groupStudentsMap.get(vipGroup.getId().toString());
+						if(!CollectionUtils.isEmpty(groupStudents)){
+							List<String> userInfos = groupStudents.stream().map(u->u.getUserName()+ "(" + u.getUserId() + ")").collect(Collectors.toList());
+							vipGroup.setUserInfo(StringUtils.join(userInfos, ","));
+						}
+					}
+
 					Integer totalClassTimes=vipGroup.getTotalClassTimes();
 					if(Objects.isNull(totalClassTimes) || Objects.isNull(overCourses)){
 						vipGroup.setMonthConsumeRate(0);

+ 51 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -817,4 +817,55 @@
 		ORDER BY csts.id_ DESC
 		<include refid="global.limit"/>
 	</select>
+
+	<resultMap id="CourseTeacherSalaryStatisticsDto" type="com.ym.mec.biz.dal.dto.CourseTeacherSalaryStatisticsDto">
+		<result property="groupType" column="group_type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result property="month" column="month_"/>
+		<result property="totalActualSalary" column="total_actual_salary_"/>
+		<result property="totalReduceSalary" column="total_reduce_salary_"/>
+	</resultMap>
+
+    <select id="getTeacherGroupTypeSalary" resultMap="CourseTeacherSalaryStatisticsDto">
+		SELECT
+			csts.group_type_,
+			SUM(actual_salary_) total_actual_salary_,
+			SUM(reduce_salary) total_reduce_salary_
+		FROM
+			course_schedule_teacher_salary csts
+			LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
+		WHERE
+			( cs.del_flag_ IS NULL OR cs.del_flag_ = 0 )
+			AND csts.settlement_time_ IS NOT NULL
+			AND csts.user_id_ = #{teacherId}
+			AND DATE_FORMAT( cs.class_date_, '%Y-%m' ) = #{month}
+			GROUP BY csts.group_type_
+	</select>
+	<select id="getTeacherMonthSalarys" resultMap="CourseTeacherSalaryStatisticsDto">
+		SELECT
+			DATE_FORMAT( cs.class_date_, '%Y-%m' ) month_,
+			SUM(actual_salary_) total_actual_salary_,
+			SUM(reduce_salary) total_reduce_salary_
+		FROM
+			course_schedule_teacher_salary csts
+			LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
+		WHERE
+			( cs.del_flag_ IS NULL OR cs.del_flag_ = 0 )
+			AND csts.settlement_time_ IS NOT NULL
+			AND csts.user_id_ = #{teacherId}
+			AND DATE_FORMAT( cs.class_date_, '%Y' ) = #{year}
+		GROUP BY DATE_FORMAT( cs.class_date_, '%Y-%m' )
+	</select>
+	<select id="findTeacherSalaryIdsWithMonth" resultType="java.lang.Long">
+		SELECT
+			csts.id_
+		FROM
+			course_schedule_teacher_salary csts
+			LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
+		WHERE
+			( cs.del_flag_ IS NULL OR cs.del_flag_ = 0 )
+			AND csts.settlement_time_ IS NOT NULL
+			AND csts.user_id_ = #{teacherId}
+			AND DATE_FORMAT( cs.class_date_, '%Y-%m' ) = #{month}
+	</select>
+
 </mapper>

+ 23 - 0
mec-biz/src/main/resources/config/mybatis/GroupMapper.xml

@@ -206,4 +206,27 @@
         GROUP BY music_group_id_;
     </select>
 
+    <resultMap id="GroupUserDto" type="com.ym.mec.biz.dal.dto.GroupUserDto">
+        <result property="groupId" column="group_id_"/>
+        <result property="groupType" column="group_type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="userId" column="user_id_"/>
+        <result property="userName" column="username_"/>
+    </resultMap>
+
+    <select id="findGroupsStudents" resultMap="GroupUserDto">
+        SELECT
+          music_group_id_ group_id_,
+          group_type_,
+          cgsm.user_id_,
+          su.username_
+        FROM class_group_student_mapper cgsm
+        LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
+        WHERE group_type_=#{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        AND status_ IN ('NORMAL', 'QUIT_SCHOOL')
+        AND music_group_id_ IN
+        <foreach collection="groupIds" item="groupId" open="(" close=")" separator=",">
+            #{groupId}
+        </foreach>
+    </select>
+
 </mapper>

+ 21 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseScheduleTeacherSalaryController.java

@@ -28,6 +28,17 @@ public class CourseScheduleTeacherSalaryController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @ApiOperation(value = "确定教师指定月份的课酬")
+    @GetMapping("confirmTeacherMonthSalary")
+    public HttpResponseResult confirmTeacherMonthSalary(String month){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        courseScheduleTeacherSalaryService.confirmTeacherMonthSalary(sysUser.getId(), month);
+        return succeed();
+    }
+
     @ApiOperation(value = "获取老师指定月份课酬信息")
     @GetMapping("findTeacherSettlementCourseSalarys")
     public HttpResponseResult findTeacherSettlementCourseSalarys(CourseSalaryQueryInfo4Web queryInfo) {
@@ -39,4 +50,14 @@ public class CourseScheduleTeacherSalaryController extends BaseController {
         return succeed(courseScheduleTeacherSalaryService.findTeacherSettlementCourseSalarys(queryInfo));
     }
 
+    @ApiOperation(value = "获取教师指定年份每月的课酬")
+    @GetMapping("findTeacherYearSalarys")
+    public HttpResponseResult findTeacherYearSalarys(String year){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(courseScheduleTeacherSalaryService.findTeacherYearSalarys(sysUser.getId(), year));
+    }
+
 }

+ 2 - 2
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -344,10 +344,10 @@ public class ExportController extends BaseController {
         }
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"VIP编号", "课程名称", "课程状态", "指导老师", "指导老师", "班级人数", "先上课单价", "线下课单价",
-                    "活动方案", "当前课次", "总课次", "剩余课次", "月消耗", "开课时间", "结束时间", "申请时间"}, new String[]{
+                    "活动方案", "当前课次", "总课次", "剩余课次", "月消耗", "开课时间", "结束时间", "申请时间", "学生姓名"}, new String[]{
                     "id", "name", "status.msg", "userName", "educationalTeacherName", "studentNum", "onlineClassesUnitPrice",
                     "offlineClassesUnitPrice", "vipGroupActivityName", "currentClassTimes", "totalClassTimes", "subClassTimes", "monthConsumeRate",
-                    "courseStartDate", "coursesExpireDate", "registrationStartTime"}, rows);
+                    "courseStartDate", "coursesExpireDate", "registrationStartTime", "userInfo"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();