Browse Source

Merge remote-tracking branch 'origin/master'

Joburgess 5 years ago
parent
commit
859ffd46c2

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

@@ -322,6 +322,13 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	List<ExportTeacherSalaryDto> exportVipTeacherSalary(Map<String, Object> params);
 
 	/**
+	 * 教师陪练课课酬
+	 * @param params
+	 * @return
+	 */
+	List<ExportTeacherSalaryDto> exportPracticeTeacherSalary(Map<String, Object> params);
+
+	/**
 	 * 获取未结算的课程
 	 * @param courseScheduleIds
 	 * @return

+ 25 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportTeacherSalaryDto.java

@@ -72,16 +72,38 @@ public class ExportTeacherSalaryDto{
     private String address;
 
     //奖励金额
-    private String rewards;
+    private double rewards;
+
+    //线下课单价
+    private double offlineClassesUnitPrice;
+
+    //线上课单价
+    private double onlineClassesUnitPrice;
 
     //应到学员
     private int studentNum;
 
-    public String getRewards() {
+    public double getOfflineClassesUnitPrice() {
+        return offlineClassesUnitPrice;
+    }
+
+    public void setOfflineClassesUnitPrice(double offlineClassesUnitPrice) {
+        this.offlineClassesUnitPrice = offlineClassesUnitPrice;
+    }
+
+    public double getOnlineClassesUnitPrice() {
+        return onlineClassesUnitPrice;
+    }
+
+    public void setOnlineClassesUnitPrice(double onlineClassesUnitPrice) {
+        this.onlineClassesUnitPrice = onlineClassesUnitPrice;
+    }
+
+    public double getRewards() {
         return rewards;
     }
 
-    public void setRewards(String rewards) {
+    public void setRewards(double rewards) {
         this.rewards = rewards;
     }
 

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TaskRewardsRulesDto.java

@@ -16,6 +16,17 @@ public class TaskRewardsRulesDto{
     //课程编号列表
     private String courseScheduleIds;
 
+    //活动名称
+    private String activeName;
+
+    public String getActiveName() {
+        return activeName;
+    }
+
+    public void setActiveName(String activeName) {
+        this.activeName = activeName;
+    }
+
     public String getCourseScheduleIds() {
         return courseScheduleIds;
     }

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

@@ -80,7 +80,7 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @param queryInfo
      * @return
      */
-    PageInfo<ExportTeacherSalaryDto> exportTeacherSalary(ExportTeacherSalaryQueryInfo queryInfo);
+    List<ExportTeacherSalaryDto> exportTeacherSalary(ExportTeacherSalaryQueryInfo queryInfo);
 
     /**
      * 获取未结算的编号

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -3141,9 +3141,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         }
         LOGGER.info("清空老师和学生考勤,user:{},参数:{}",user.getId(),courseScheduleIds);
         List<Long> courseScheduleId = courseScheduleTeacherSalaryService.querySettlementScheduleId(courseScheduleIds);
-        if(courseScheduleId != null && courseScheduleId.size() > 0){
-            teacherAttendanceDao.batchCleanCourseTeacherSignInfo(courseScheduleId);
-            studentAttendanceDao.deleteByCourseSchedules(courseScheduleId);
+        if(courseScheduleId == null || courseScheduleId.size() == 0){
+            throw new BizException("没有可修改的课程");
         }
+        teacherAttendanceDao.batchCleanCourseTeacherSignInfo(courseScheduleId);
+        studentAttendanceDao.deleteByCourseSchedules(courseScheduleId);
     }
 }

+ 63 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

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

+ 2 - 2
mec-biz/src/main/resources/config/contracts/practice.ftl

@@ -95,9 +95,9 @@
             </tr>
             <tr>
                 <td style="text-align: center;">网管课</td>
-                <td style="text-align: center;">${courseSectionNum}</td>
+                <td style="text-align: center;">${courseSectionNum}</td>
                 <td style="text-align: center;">${startDate?string("yyyy-MM-dd")}/${endDate?string("yyyy-MM-dd")}</td>
-                <td style="text-align: center;">${fee?string("0.00")}</td>
+                <td style="text-align: center;">${fee?string("0.00")}</td>
             </tr>
         </table>
         2.2 用户购课后,需在有效期内完成所购全部课程(以课程后台有效期为准)。除本协议另有约定外,若用户未能在课程有效期内上完课程,则课程自动结束,本公司不再提供课程。<br />

+ 4 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleRewardsMapper.xml

@@ -144,9 +144,12 @@
 		<result property="teacherId" column="actual_teacher_id_"/>
 		<result property="times" column="times_"/>
 		<result property="activeId" column="active_id_"/>
+		<result property="courseScheduleIds" column="courseScheduleIds"/>
+		<result property="activeName" column="active_name_"/>
 	</resultMap>
     <select id="queryVipGroupTeacherClassTimesByMonth" resultMap="TaskRewardsRulesDtoMap">
-		SELECT COUNT(cs.id_) times_,cs.actual_teacher_id_,csrr.id_ active_id_ FROM course_schedule_rewards_rules csrr
+		SELECT COUNT(cs.id_) times_,cs.actual_teacher_id_,csrr.id_ active_id_,GROUP_CONCAT(cs.id_) courseScheduleIds,csrr.name_ active_name_
+		FROM course_schedule_rewards_rules csrr
 		LEFT JOIN vip_group vg ON FIND_IN_SET(vg.vip_group_category_id_,csrr.vip_group_category_id_list_)
 		LEFT JOIN course_schedule cs ON vg.id_ = cs.music_group_id_
 		LEFT JOIN class_group cg ON cg.id_ = cs.class_group_id_

+ 32 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -507,6 +507,8 @@
 		<result property="signCourseScheduleTime" column="signCourseScheduleTime"/>
 		<result property="currentTime" column="currentTime"/>
 		<result property="teacherOrganName" column="teacherOrganName"/>
+		<result property="onlineClassesUnitPrice" column="online_classes_unit_price_"/>
+		<result property="offlineClassesUnitPrice" column="offline_classes_unit_price_"/>
  	</resultMap>
     <select id="exportMusicTeacherSalary" resultMap="ExportTeacherSalaryDtoMap">
 		SELECT cs.`id_` courseScheduleId,u.id_ teacherId,mgo.name_ courseOrganName,mg.name_ groupName,
@@ -552,7 +554,8 @@
 		CASE WHEN ta.sign_in_status_ = 0 THEN '异常' WHEN ta.sign_in_status_ = 1 THEN '正常' END signInStatus,
 		CASE WHEN ta.sign_out_status_=0 THEN '异常' WHEN ta.sign_out_status_ = 1 THEN '正常' END signOutStatus,
 		ROUND((UNIX_TIMESTAMP(ta.sign_out_time_)-UNIX_TIMESTAMP(ta.sign_in_time_))/60) currentTime,
-		ta.sign_in_time_ signInTime,ta.sign_out_time_ signOutTime,COUNT(sp.id_) studentNum
+		ta.sign_in_time_ signInTime,ta.sign_out_time_ signOutTime,COUNT(sp.id_) studentNum,
+		vg.online_classes_unit_price_,vg.offline_classes_unit_price_
 		FROM course_schedule_teacher_salary ts
 		LEFT JOIN course_schedule cs ON ts.course_schedule_id_ = cs.id_
 		LEFT JOIN `teacher_attendance` ta ON ta.`teacher_id_` = ts.`user_id_` AND ta.`course_schedule_id_` = ts.`course_schedule_id_`
@@ -571,4 +574,32 @@
 		SELECT DISTINCT csts.course_schedule_id_ FROM course_schedule_teacher_salary csts
 		WHERE csts.settlement_time_ IS NULL AND FIND_IN_SET(csts.course_schedule_id_,#{courseScheduleIds})
 	</select>
+	<select id="exportPracticeTeacherSalary" resultMap="ExportTeacherSalaryDtoMap">
+		SELECT cs.`id_` courseScheduleId,u.id_ teacherId,pgo.name_ courseOrganName,pg.name_ groupName,
+		u.real_name_ teacherName,o.name_ teacherOrganName,
+		CASE WHEN cs.teach_mode_ = 'OFFLINE' THEN '线下' WHEN cs.teach_mode_ = 'ONLINE' THEN '线上' END teach_mode_,
+		CASE WHEN t.job_nature_ = 'PART_TIME' THEN '兼职' WHEN t.job_nature_ = 'FULL_TIME' THEN '全职' ELSE '零时工' END jobType,
+		'陪练课' courseScheduleType,
+		cs.class_date_ classDate,cs.start_class_time_ courseScheduleStartTime,cs.end_class_time_ courseScheduleEndTime,
+		ROUND((UNIX_TIMESTAMP(cs.end_class_time_)-UNIX_TIMESTAMP(cs.start_class_time_))/60) signCourseScheduleTime,
+		ts.actual_salary_ price,s.name_ address,
+		CASE WHEN ts.teacher_role_ = 'TEACHING' THEN '助教' ELSE '主教' END teacherRole,
+		CASE WHEN ta.sign_in_status_ = 0 THEN '异常' WHEN ta.sign_in_status_ = 1 THEN '正常' END signInStatus,
+		CASE WHEN ta.sign_out_status_= 0 THEN '异常' WHEN ta.sign_out_status_ = 1 THEN '正常' END signOutStatus,
+		ROUND((UNIX_TIMESTAMP(ta.sign_out_time_)-UNIX_TIMESTAMP(ta.sign_in_time_))/60) currentTime,
+		ta.sign_in_time_ signInTime,ta.sign_out_time_ signOutTime,COUNT(sp.id_) studentNum
+		FROM course_schedule_teacher_salary ts
+		LEFT JOIN course_schedule cs ON ts.course_schedule_id_ = cs.id_
+		LEFT JOIN `teacher_attendance` ta ON ta.`teacher_id_` = ts.`user_id_` AND ta.`course_schedule_id_` = ts.`course_schedule_id_`
+		LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
+		LEFT JOIN sys_user u ON ts.user_id_= u.id_
+		LEFT JOIN teacher t ON t.id_ = ts.user_id_
+		LEFT JOIN organization o ON o.id_ = t.organ_id_
+		LEFT JOIN school s ON s.id_ = cs.schoole_id_
+		LEFT JOIN course_schedule_student_payment sp ON sp.course_schedule_id_ = ts.course_schedule_id_
+		LEFT JOIN practice_group pg ON (pg.id_ = ts.music_group_id_ AND ts.group_type_ = 'PRACTICE')
+		LEFT JOIN organization pgo ON pgo.id_ = pg.organ_id_
+		WHERE cs.class_date_ BETWEEN #{firstDayOfMonth} AND #{lastDayOfMonth} AND cs.`del_flag_` != 1 AND cs.group_type_ = 'PRACTICE'
+		GROUP BY ts.course_schedule_id_,ts.`user_id_`
+	</select>
 </mapper>

+ 0 - 1
mec-web/src/main/java/com/ym/mec/web/controller/AppVersionInfoController.java

@@ -37,7 +37,6 @@ public class AppVersionInfoController extends BaseController {
 	}
 
 	@ApiOperation("根据app客户端查询对象")
-	@PreAuthorize("@pcs.hasPermissions('appVersionInfo/queryByPlatform')")
 	@ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path")
 	@GetMapping(value = "/queryByPlatform")
 	public Object queryByPlatform(String platform) {

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

@@ -77,14 +77,17 @@ public class ExportController extends BaseController {
             throw new BizException("用户信息获取失败");
         }
         queryInfo.setIsExport(true);
-        List<ExportTeacherSalaryDto> rows = courseScheduleTeacherSalaryService.exportTeacherSalary(queryInfo).getRows();
+        List<ExportTeacherSalaryDto> rows = courseScheduleTeacherSalaryService.exportTeacherSalary(queryInfo);
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "学员姓名", "性别", "家长姓名",
-                    "家长联系电话", "是否激活", "是否有课", "是否预约陪练课","是否有陪练课", "课程余额(元)",
-                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态"}, new String[]{
-                    "organName", "userId", "username", "gender.description", "parentsName", "parentsPhone",
-                    "isActive.msg","hasCourse.msg","isMake.msg","hasPracticeCourse.msg","courseBalance","musicGroupName",
-                    "subjectName","musicGroupStatus","vipGroupName","vipGroupStatus"}, rows);
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课时编号", "老师编号", "老师姓名", "老师分部", "工作类别",
+                    "课程分部", "课程班名称", "乐团模式", "活动名称","线上课/线下课", "线上课单价", "线下课单价",
+                    "课程类别", "课时时长", "实际上课时长", "上课日期",
+                    "上课时间", "签到状态", "签退状态", "签到时间", "签退时间",
+                    "主辅", "上课地点", "应到学员","课时课酬","阶梯奖励"}, new String[]{
+                    "courseScheduleId", "teacherId", "teacherName", "teacherOrganName", "jobType",
+                    "courseOrganName", "groupName", "changeType", "activeName", "teachMode", "onlineClassesUnitPrice", "offlineClassesUnitPrice",
+                    "courseScheduleType","signCourseScheduleTime","currentTime","classDate","start_class_time_","signInStatus",
+                    "signOutStatus","signInTime","signOutTime","teacherRole","address","studentNum","price","rewards"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();