Explorar o código

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

zouxuan %!s(int64=4) %!d(string=hai) anos
pai
achega
1fb8148897
Modificáronse 25 ficheiros con 1003 adicións e 726 borrados
  1. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java
  2. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  3. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  4. 31 25
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java
  5. 5 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  6. 9 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  7. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupRegisterDto.java
  8. 112 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrderByTypeExportDto.java
  9. 0 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherCourseSalaryDto.java
  10. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipBuyResultDto.java
  11. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  12. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  13. 28 33
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  14. 6 49
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  15. 48 52
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  16. 11 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  17. 17 15
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  18. 19 8
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  19. 10 0
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  20. 27 2
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  21. 386 367
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  22. 18 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/CorpMember.java
  23. 7 107
      mec-util/src/main/java/com/ym/mec/util/excel/POIUtil.java
  24. 227 48
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  25. 1 3
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java

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

@@ -268,6 +268,17 @@ public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStud
     Integer countClassGroupNormalStudentNum(@Param("classGroupId") Integer classGroupId);
 
     /**
+     * @describe 统计课程组上状态正常的学员数量
+     * @author Joburgess
+     * @date 2020.08.05
+     * @param groupType:
+     * @param groupId:
+     * @return int
+     */
+    int countGroupNormalStudentNum(@Param("groupType") GroupType groupType,
+                                   @Param("groupId") String groupId);
+
+    /**
      * @describe 统计vip课或乐团下的学生人数
      * @author Joburgess
      * @date 2019/12/14

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

@@ -354,14 +354,14 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
     /**
      * @param month:
-     * @param organIdList:
+     * @param classGroupIds:
      * @return java.util.List<java.util.Date>
      * @describe 获取当月有课的日期
      * @author Joburgess
      * @date 2019/10/18
      */
     List<Date> getCourseScheduleDate(@Param("month") Date month,
-                                     @Param("organIdList") String organIdList,
+                                     @Param("classGroupIds") List<Integer> classGroupIds,
                                      @Param("type") String type);
 
     /**

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -7,6 +7,8 @@ import com.ym.mec.biz.dal.dto.RegisterSubjectDto;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.School;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupModel;
 import org.apache.ibatis.annotations.Param;
@@ -241,9 +243,9 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      */
     List<Map<Integer, String>> queryUserMusicStatus(@Param("userIds") Set<Integer> userIds);
 
-    List<MusicGroupRegisterDto> getMusicGroupRegister(@Param("organIds") String organIds);
+    List<MusicGroupRegisterDto> getMusicGroupRegister(@Param("musicGroupStatusList") List<MusicGroupStatusEnum> musicGroupStatusList, @Param("organIds") String organIds);
 
-    List<RegisterSubjectDto> getRegisterSubjectNum(@Param("musicGroupIds") List<String> musicGroupIds);
+    List<RegisterSubjectDto> getRegisterSubjectNum(@Param("musicGroupIds") List<String> musicGroupIds, @Param("studentMusicGroupStatus") StudentMusicGroupStatusEnum studentMusicGroupStatus);
 
     List<MusicGroupRegisterDto> getMusicGroupRegisterOrder(@Param("musicGroupIds") List<String> musicGroupIds);
 

+ 31 - 25
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java

@@ -99,11 +99,11 @@ public interface PracticeGroupDao extends com.ym.mec.common.dal.BaseDAO<Long, Pr
                                         @Param("groupId") Long groupId);
 
     /**
+     * @param studentId:
+     * @return int
      * @describe 统计指定学员购买收费网管课的数量
      * @author Joburgess
      * @date 2020/4/24
-     * @param studentId:
-     * @return int
      */
     int checkStudentExitChargePractice(@Param("studentId") Integer studentId);
 
@@ -239,28 +239,30 @@ public interface PracticeGroupDao extends com.ym.mec.common.dal.BaseDAO<Long, Pr
 
     /**
      * 获取导出网管课信息
+     *
      * @param organIds
      * @return
      */
     List<CourseGroupExportDto> getPracticeGroupExport(@Param("organIds") String organIds);
 
     /**
+     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
      * @describe 获取转化失败的学员-之前有免费网管课,但是之后没有线上课的学员
      * @author Joburgess
      * @date 2020/4/23
-     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
      */
     List<SimpleUserDto> findConvertDefeatStudents(Map<String, Object> params);
+
     int countConvertDefeatStudents(Map<String, Object> params);
 
     /**
+     * @param studentOrganId: 学生分部编号
+     * @param subjectId:      声部编号
+     * @param studentId:      学生编号
+     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
      * @describe 获取可以指派试听课的老师列表
      * @author Joburgess
      * @date 2020/4/23
-     * @param studentOrganId: 学生分部编号
-     * @param subjectId: 声部编号
-     * @param studentId: 学生编号
-     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
      */
     List<SimpleUserDto> findEnableAssignTeachers(@Param("studentOrganId") Integer studentOrganId,
                                                  @Param("subjectId") Integer subjectId,
@@ -269,86 +271,90 @@ public interface PracticeGroupDao extends com.ym.mec.common.dal.BaseDAO<Long, Pr
 
     /**
      * 修改网管课备注
+     *
      * @param groupId
      * @param memo
      */
     void updateMemo(@Param("groupId") Long groupId, @Param("memo") String memo);
 
     /**
+     * @param studentId:
+     * @return java.lang.Integer
      * @describe 获取学生最后一节网管课对应的声部
      * @author Joburgess
      * @date 2020/4/23
-     * @param studentId:
-     * @return java.lang.Integer
      */
     Integer findLastPracticeSubject(@Param("studentId") Integer studentId);
 
     /**
+     * @param studentId:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.PracticeGroup>
      * @describe 获取学生的网管试听课
      * @author Joburgess
      * @date 2020/4/24
-     * @param studentId:
-     * @return java.util.List<com.ym.mec.biz.dal.entity.PracticeGroup>
      */
     List<PracticeGroup> findStudentTrialPractices(@Param("studentId") Integer studentId);
+
     int countStudentTrialPractices(@Param("studentId") Integer studentId);
 
     /**
+     * @param studentId:
+     * @return int
      * @describe 统计学生进行中的试听课数量
      * @author Joburgess
      * @date 2020.04.28
-     * @param studentId:
-     * @return int
      */
     int countStudentIngTrialPractices(@Param("studentId") Integer studentId);
 
     /**
-     * @describe 获取老师
-     * @author Joburgess
-     * @date 2020/4/24
      * @param studentId:
      * @param teacherId:
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
+     * @describe 获取老师
+     * @author Joburgess
+     * @date 2020/4/24
      */
     List<CourseSchedule> findStudentAndTeacherTrialPractices(@Param("studentId") Integer studentId,
                                                              @Param("teacherId") Integer teacherId);
 
     /**
-     * @describe 统计指定老师和学生是否存在关联的试听课
-     * @author Joburgess
-     * @date 2020/4/24
      * @param studentId:
      * @param teacherId:
      * @return int
+     * @describe 统计指定老师和学生是否存在关联的试听课
+     * @author Joburgess
+     * @date 2020/4/24
      */
     int countStudentAndTeacherTrialPractices(@Param("studentId") Integer studentId,
                                              @Param("teacherId") Integer teacherId);
 
     /**
+     * @return java.util.List<com.ym.mec.biz.dal.entity.PracticeGroup>
      * @describe 获取需要提醒续费网管课的用户列表
      * @author Joburgess
      * @date 2020.05.29
-     * @return java.util.List<com.ym.mec.biz.dal.entity.PracticeGroup>
      */
     List<Integer> getNeedRemindPracticeUsers();
 
     /**
+     * @param studentIds:
+     * @return java.util.List<java.util.Map < java.lang.Integer, java.lang.String>>
      * @describe 获取用户和需要提醒的网管课map
      * @author Joburgess
      * @date 2020.05.29
-     * @param studentIds:
-     * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.String>>
      */
     List<Map<Integer, String>> getUserNeedRemindPracticeIdMap(@Param("studentIds") List<Integer> studentIds);
 
     /**
-     * @describe 批量修改网管课续费提醒状态
-     * @author Joburgess
-     * @date 2020.05.29
      * @param practiceIds:
      * @param remindStatus:
      * @return int
+     * @describe 批量修改网管课续费提醒状态
+     * @author Joburgess
+     * @date 2020.05.29
      */
     int batchUpdatePracticeRemindStatus(@Param("practiceIds") List<Integer> practiceIds,
                                         @Param("remindStatus") Integer remindStatus);
+
+    List<PracticeCourseDto> getPracticeGroupByIds(@Param("practiceIds") List<Long> practiceIds);
 }

+ 5 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -1,9 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
-import com.ym.mec.biz.dal.dto.OrderStatisDto;
-import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
-import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
-import com.ym.mec.biz.dal.dto.UserGoodsDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
@@ -305,4 +302,8 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
 
      */
     Integer findOrganPayOrderNum(@Param("organId") Integer organId);
+
+    List<OrderByTypeExportDto> getOrderByMonthAndType(@Param("organIds") String organIds,
+                                                      @Param("orderTypeList") List<OrderTypeEnum> orderTypeList,
+                                                      @Param("startTime") Date startTime, @Param("endTime") Date endTime);
 }

+ 9 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java

@@ -322,28 +322,33 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
     List<VipGroup> queryNormalStatusList();
 
     int countUserRepeatVipGroupInCourseStartEndTime(@Param("userId") Integer userId,
-                                                    @Param("courseStartDate")Date courseStartDate,
+                                                    @Param("courseStartDate") Date courseStartDate,
                                                     @Param("courseEndDate") Date courseEndDate);
 
     VipGroup findVipGroupInfo(@Param("id") Integer id, @Param("classGroupId") Integer classGroupId);
 
     /**
      * 获取用户所在vip名
+     *
      * @param userIds
      * @return
      */
-    List<Map<Integer,String>> queryUserVipNames(@Param("userIds") Set<Integer> userIds);
+    List<Map<Integer, String>> queryUserVipNames(@Param("userIds") Set<Integer> userIds);
 
     /**
      * 获取用户所在vip状态
+     *
      * @param userIds
      * @return
      */
-    List<Map<Integer,String>> queryUserVipStatus(@Param("userIds") Set<Integer> userIds);
-    
+    List<Map<Integer, String>> queryUserVipStatus(@Param("userIds") Set<Integer> userIds);
+
     /**
      * 临时用
+     *
      * @return
      */
     List<VipCourseStudentInfoDto> queryVipCourseStudentInfo();
+
+    List<VipBuyResultDto> getGroupTeachers(@Param("groupIds") List<Long> groupIds);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupRegisterDto.java

@@ -16,6 +16,8 @@ public class MusicGroupRegisterDto {
 
     private Integer registerNum=0;
 
+    private Integer normalNum = 0;
+
     private Integer GroupBuyMusicalNum = 0;
 
     private Integer registerPayNum = 0;
@@ -87,4 +89,11 @@ public class MusicGroupRegisterDto {
         this.totalMoney = totalMoney;
     }
 
+    public Integer getNormalNum() {
+        return normalNum;
+    }
+
+    public void setNormalNum(Integer normalNum) {
+        this.normalNum = normalNum;
+    }
 }

+ 112 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrderByTypeExportDto.java

@@ -0,0 +1,112 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class OrderByTypeExportDto {
+
+    private String organName;
+
+    private Integer studentId;
+
+    private String studentName;
+
+    private String teacherName;
+
+    private String eduTeacherName;
+
+    private OrderTypeEnum orderType;
+
+    private BigDecimal actualAmount;
+
+    private Long musicGroupId;
+
+    private GroupType groupType;
+
+    private Date createTime;
+
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getEduTeacherName() {
+        return eduTeacherName;
+    }
+
+    public void setEduTeacherName(String eduTeacherName) {
+        this.eduTeacherName = eduTeacherName;
+    }
+
+    public OrderTypeEnum getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(OrderTypeEnum orderType) {
+        this.orderType = orderType;
+    }
+
+    public BigDecimal getActualAmount() {
+        return actualAmount;
+    }
+
+    public void setActualAmount(BigDecimal actualAmount) {
+        this.actualAmount = actualAmount;
+    }
+
+    public Long getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(Long musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public GroupType getGroupType() {
+        return groupType;
+    }
+
+    public void setGroupType(GroupType groupType) {
+        this.groupType = groupType;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

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


+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipBuyResultDto.java

@@ -14,6 +14,8 @@ public class VipBuyResultDto {
 
     private String teacherName;
 
+    private String eduTeacherName;
+
     private Integer classTimes;
 
     private Date startClassTime;
@@ -67,4 +69,12 @@ public class VipBuyResultDto {
     public void setEndClassTime(Date endClassTime) {
         this.endClassTime = endClassTime;
     }
+
+    public String getEduTeacherName() {
+        return eduTeacherName;
+    }
+
+    public void setEduTeacherName(String eduTeacherName) {
+        this.eduTeacherName = eduTeacherName;
+    }
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java

@@ -10,7 +10,7 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
 	RENEW("RENEW", "续费"),
 	SPORADIC("SPORADIC", "零星收费"),
 	OTHER("OTHER", "其他"),
-	SMALL_CLASS_TO_BUY("SMALL_CLASS_TO_BUY", "小课购买"),
+	SMALL_CLASS_TO_BUY("SMALL_CLASS_TO_BUY", "VIP购买"),
 	PRACTICE_GROUP_BUY("PRACTICE_GROUP_BUY", "网管课购买"),
 	PRACTICE_GROUP_RENEW("PRACTICE_GROUP_RENEW", "网管课续费"),
 	COURSE_GROUP_BUY("COURSE_GROUP_BUY","对外课程购买"),

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

@@ -178,12 +178,12 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @param computeTotalPrice: 是否计算课程购买总价
      * @return java.util.Map
      */
-    <K extends VipGroup> Map countVipGroupPredictFee(K vipGroup,
+    <K extends VipGroup> Map<String, BigDecimal> countVipGroupPredictFee(K vipGroup,
                                                      Integer teacherId,
                                                      BigDecimal onlineClassesUnitPrice,
-                                                     BigDecimal offlineClassesUnitPrice,
-                                                     boolean computeTotalPrice,
-                                                     boolean useDefaultTeacherSalary);
+                                                     BigDecimal offlineClassesUnitPrice);
+
+
 
     /**
      * @Author: Joburgess

+ 28 - 33
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -779,7 +779,28 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
     @Override
     public List<Date> getCourseScheduleDates(Date month, String organIdList, String type) {
-        return courseScheduleDao.getCourseScheduleDate(month, organIdList,type);
+		Map<String, Object> params = new HashMap<>();
+		params.put("organIdList", organIdList);
+
+		List<Group> groups = groupDao.searchGroups(params);
+		List<Integer> classGroupIds=new ArrayList<>();
+		if(!CollectionUtils.isEmpty(groups)){
+			Map<GroupType, List<Group>> groupTypeGroupsMap = groups.stream().collect(Collectors.groupingBy(Group::getGroupType));
+			for (Map.Entry<GroupType, List<Group>> groupTypeListEntry : groupTypeGroupsMap.entrySet()) {
+				List<String> groupIds = groupTypeListEntry.getValue().stream().map(Group::getId).collect(Collectors.toList());
+				List<ClassGroup> classGroups = classGroupDao.findByMusicGroupsAndType(groupIds, groupTypeListEntry.getKey().getCode());
+				if(!CollectionUtils.isEmpty(classGroups)){
+					List<Integer> tempClassGroupIds=classGroups.stream().map(ClassGroup::getId).collect(Collectors.toList());
+					classGroupIds.addAll(tempClassGroupIds);
+				}
+			}
+			if(CollectionUtils.isEmpty(classGroupIds)){
+				return Collections.EMPTY_LIST;
+			}
+		}else{
+			return Collections.EMPTY_LIST;
+		}
+        return courseScheduleDao.getCourseScheduleDate(month, classGroupIds,type);
     }
 
     @Override
@@ -2711,27 +2732,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						}
 
 					} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
-						Map<Integer, TeacherDefaultVipGroupSalary> map = vipGroupSalaryMap.get(teacherId);
-						if (map == null) {
-							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
-						}
-						if (vipGroup == null) {
-							throw new BizException("课程[{}]记录存在异常,请联系管理员", courseScheduleId);
-						}
+						Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, teacherId, null, null);
 
 						BigDecimal teacherSalary=BigDecimal.ZERO;
 
-						ClassGroupTeacherSalary classGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroup.getId().intValue(), teacherId);
-
-						if(Objects.nonNull(classGroupTeacherSalary)){
-							teacherSalary=newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?classGroupTeacherSalary.getSalary():classGroupTeacherSalary.getOnlineClassesSalary();
-						}
-						if(Objects.isNull(teacherSalary)||teacherSalary.compareTo(BigDecimal.ZERO)<=0){
-							TeacherDefaultVipGroupSalary tdvs = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(teacherId,vipGroup.getVipGroupCategoryId());
-							if (tdvs == null||Objects.isNull(tdvs.getOfflineClassesSalary())) {
-								throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
-							}
-							teacherSalary=tdvs.getOfflineClassesSalary();
+						if(Objects.nonNull(salaryMap)){
+							teacherSalary=newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary");
 						}
 
 						ts.setExpectSalary(teacherSalary);
@@ -2938,25 +2944,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
                     BigDecimal onlineTeacherSalary = new BigDecimal(0), offlineTeacherSalary = new BigDecimal(0);
 
-                    if (teacherIsChange) {
-                        TeacherDefaultVipGroupSalary byTeacherAndCategory = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(newCourseSchedule.getActualTeacherId(), byCourseSchedule.getVipGroupCategoryId());
-                        if (Objects.nonNull(byTeacherAndCategory)) {
-                            onlineTeacherSalary = byTeacherAndCategory.getOfflineClassesSalary();
-                            offlineTeacherSalary = byTeacherAndCategory.getOfflineClassesSalary();
-                        }
-                    } else {
-                        ClassGroupTeacherSalary byClassGroupAndTeacher = classGroupTeacherSalaryDao.findByClassGroupAndTeacher(oldCourseSchedule.getClassGroupId(), newCourseSchedule.getActualTeacherId());
-                        if (Objects.nonNull(byClassGroupAndTeacher)) {
-                            onlineTeacherSalary = byClassGroupAndTeacher.getOnlineClassesSalary();
-                            offlineTeacherSalary = byClassGroupAndTeacher.getSalary();
-                        }
-                    }
+					Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(byCourseSchedule, newCourseSchedule.getActualTeacherId(), null, null);
 
                     List<CourseSchedule> courseSchedules = new ArrayList<>();
                     courseSchedules.add(newCourseSchedule);
                     courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(byCourseSchedule,
                             courseSchedules,
-                            onlineTeacherSalary, offlineTeacherSalary);
+							salaryMap.get("onlineTeacherSalary"),
+							salaryMap.get("offlineTeacherSalary"));
                     if (Objects.nonNull(oldCourseSchedule.getActualTeacherId()) && teacherIsChange) {
                         beReplaceTeacherIds.add(oldCourseSchedule.getActualTeacherId().intValue());
                     }

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

@@ -738,57 +738,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     public void updateVipGroupCourseTeacherSalary(Integer vipGroupId, Integer oldTeacherId) {
         VipGroup vipGroup = vipGroupService.get(vipGroupId.longValue());
 
-        Integer studentNum = classGroupStudentMapperDao.countGroupStudentNum(vipGroupId.toString(), GroupType.VIP.getCode());
+        BigDecimal onlineTeacherSalary=BigDecimal.ZERO,
+                offlineTeacherSalary=BigDecimal.ZERO;
 
-        if(Objects.isNull(oldTeacherId)){
-            oldTeacherId=vipGroup.getUserId();
-        }
-
-        ClassGroupTeacherSalary classGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroupId, oldTeacherId);
-
-        if(Objects.isNull(classGroupTeacherSalary)){
-            throw new BizException("教师课酬异常");
-        }
-        ClassGroupTeacherSalary newClassGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroupId, vipGroup.getUserId());
-        if(!oldTeacherId.equals(vipGroup.getUserId())&&Objects.isNull(newClassGroupTeacherSalary)){
-            newClassGroupTeacherSalary=new ClassGroupTeacherSalary();
-            BeanUtils.copyProperties(classGroupTeacherSalary,newClassGroupTeacherSalary);
-            newClassGroupTeacherSalary.setUserId(vipGroup.getUserId());
-            classGroupTeacherSalaryDao.insert(newClassGroupTeacherSalary);
-        }
-
-        TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroup.getUserId(), vipGroup.getVipGroupCategoryId());
+        Map<String, BigDecimal> salary = vipGroupService.countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), null, null);
 
-        BigDecimal onlineTeacherSalary,
-                offlineTeacherSalary;
-
-        onlineTeacherSalary=classGroupTeacherSalary.getOnlineClassesSalary();
-        if(Objects.isNull(onlineTeacherSalary)){
-            onlineTeacherSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
-        }
-        offlineTeacherSalary=classGroupTeacherSalary.getSalary();
-        if(Objects.isNull(offlineTeacherSalary)){
-            offlineTeacherSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
-        }
-
-        if(Objects.isNull(onlineTeacherSalary)||Objects.isNull(offlineTeacherSalary)){
-            throw new BizException("教师课酬异常");
-        }
-
-        VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
-
-        BigDecimal studentNumDecimal = new BigDecimal(studentNum);
-        BigDecimal oldStudentNumDecimal = new BigDecimal(vipGroupCategory.getStudentNum());
-
-        if(Objects.nonNull(onlineTeacherSalary)||onlineTeacherSalary.compareTo(BigDecimal.ZERO)<=0){
-            onlineTeacherSalary = onlineTeacherSalary
-                    .divide(oldStudentNumDecimal, CommonConstants.DECIMAL_PLACE,BigDecimal.ROUND_DOWN)
-                    .multiply(studentNumDecimal).setScale(0, BigDecimal.ROUND_HALF_UP);
-        }
-        if(Objects.nonNull(offlineTeacherSalary)||offlineTeacherSalary.compareTo(BigDecimal.ZERO)<=0){
-            offlineTeacherSalary = offlineTeacherSalary
-                    .divide(oldStudentNumDecimal,CommonConstants.DECIMAL_PLACE,BigDecimal.ROUND_DOWN)
-                    .multiply(studentNumDecimal).setScale(0,BigDecimal.ROUND_HALF_UP);
+        if(Objects.nonNull(salary)){
+            onlineTeacherSalary=salary.get("onlineTeacherSalary");
+            offlineTeacherSalary=salary.get("offlineTeacherSalary");
         }
 
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByGroupWithNotStart(vipGroupId.toString(), GroupType.VIP.getCode());

+ 48 - 52
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -273,9 +273,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		Map<String, BigDecimal> costInfo = countVipGroupPredictFee(vipGroupApplyBaseInfoDto,
 				vipGroupApplyBaseInfoDto.getUserId(),
 				vipGroupApplyBaseInfoDto.getOnlineClassesUnitPrice(),
-				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice(),
-				true,
-				true);
+				vipGroupApplyBaseInfoDto.getOfflineClassesUnitPrice());
 
 //		BigDecimal offlineClassNum=new BigDecimal(vipGroupApplyBaseInfoDto.getOfflineClassesNum());
 //		BigDecimal onlineClassNum=new BigDecimal(vipGroupApplyBaseInfoDto.getOnlineClassesNum());
@@ -976,9 +974,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     public <K extends VipGroup> Map<String,BigDecimal> countVipGroupPredictFee(K vipGroup,
 																			   Integer teacherId,
 																			   BigDecimal onlineClassesUnitPrice,
-																			   BigDecimal offlineClassesUnitPrice,
-																			   boolean computeTotalPrice,
-																			   boolean useDefaultTeacherSalary){
+																			   BigDecimal offlineClassesUnitPrice){
 
 		if(Objects.isNull(teacherId)){
 			throw new BizException("请指定教师");
@@ -988,10 +984,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("请指定课程形式");
 		}
 
-		if(Objects.isNull(vipGroup.getSingleClassMinutes())){
-			throw new BizException("请指定课程时长");
-		}
-
 		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
 		if(Objects.isNull(vipGroupCategory)){
 			throw new BizException("未找到课程形式");
@@ -1000,6 +992,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(teacherId,
 				vipGroup.getVipGroupCategoryId());
 
+		if(Objects.isNull(teacherDefaultVipGroupSalary)){
+			throw new BizException("请设置教师课酬");
+		}
+
 		if(Objects.isNull(vipGroup.getVipGroupActivityId())){
 			throw new BizException("请指定活动方案");
 		}
@@ -1010,6 +1006,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("指定的活动方案不存在");
 		}
 
+		Teacher teacher = teacherDao.get(teacherId);
+
 		VipGroupSalarySettlementDto vipGroupSalarySettlementDto = JSON.parseObject(vipGroupActivity.getSalarySettlementJson(), VipGroupSalarySettlementDto.class);
 
 		if(Objects.isNull(vipGroupSalarySettlementDto)){
@@ -1018,12 +1016,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		Map<String,BigDecimal> results=new HashMap<>(1);
 
-		//课程时长与结算单位时长占比
 		BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
 		BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
-		onlineClassesUnitPrice=Objects.isNull(onlineClassesUnitPrice)?new BigDecimal(0):onlineClassesUnitPrice;
+		onlineClassesUnitPrice=Objects.isNull(onlineClassesUnitPrice)?vipGroup.getOnlineClassesUnitPrice():onlineClassesUnitPrice;
+		if(Objects.isNull(onlineClassesUnitPrice)){
+			onlineClassesUnitPrice = BigDecimal.ZERO;
+		}
 		BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
-		offlineClassesUnitPrice=Objects.isNull(offlineClassesUnitPrice)?new BigDecimal(0):offlineClassesUnitPrice;
+		offlineClassesUnitPrice=Objects.isNull(offlineClassesUnitPrice)?vipGroup.getOfflineClassesUnitPrice():offlineClassesUnitPrice;
+		if(Objects.isNull(offlineClassesUnitPrice)){
+			offlineClassesUnitPrice = BigDecimal.ZERO;
+		}
 		BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
 		BigDecimal totalClassNum=offlineClassNum.add(onlineClassNum);
 		BigDecimal teacherOnlineSalary=null,teacherOfflineSalary=null;
@@ -1067,13 +1070,25 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		results.put("totalPrice",totalPrice.setScale(0,BigDecimal.ROUND_CEILING));
 
+		if(JobNatureEnum.PART_TIME.equals(teacher.getJobNature())||vipGroupCategory.getStudentNum()>1){
+			int normalStudentNum = 0;
+			BigDecimal ots = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
+			BigDecimal ofts = teacherDefaultVipGroupSalary.getOfflineClassesSalary();
+			if(Objects.nonNull(vipGroup.getId())){
+				normalStudentNum = classGroupStudentMapperDao.countGroupNormalStudentNum(GroupType.VIP, vipGroup.getId().toString());
+			}
+			if(normalStudentNum>0&&normalStudentNum!=vipGroupCategory.getStudentNum()){
+				ots = ots.divide(new BigDecimal(vipGroupCategory.getStudentNum()),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+				ofts = ofts.divide(new BigDecimal(vipGroupCategory.getStudentNum()),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(normalStudentNum)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
+			}
+
+			results.put("onlineTeacherSalary", ots);
+			results.put("offlineTeacherSalary", ofts);
+			return results;
+		}
+
 		//教师课酬线上单课酬计算
 		if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
-			if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary
-					&&vipGroupActivity.getSalaryReadonlyFlag().equals("1")){
-				teacherOnlineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOnlineTeacherSalary();
-				results.put("onlineTeacherSalary",teacherOnlineSalary);
-			}
 			if(Objects.isNull(teacherOnlineSalary)){
 				switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
 					case TEACHER_DEFAULT:
@@ -1100,14 +1115,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				}
 
 			}
-		}else{
-			results.put("onlineTeacherSalary", new BigDecimal(0));
 		}
 
 		//教师线下单课酬计算
 		if(Objects.nonNull(vipGroupSalarySettlementDto.getOfflineSalarySettlement())){
-			if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary
-					&&vipGroupActivity.getSalaryReadonlyFlag().equals("1")){
+			if(vipGroup instanceof VipGroupApplyBaseInfoDto){
 				teacherOfflineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOfflineTeacherSalary();
 				results.put("offlineTeacherSalary",teacherOfflineSalary);
 			}
@@ -1132,8 +1144,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 						throw new BizException("未指定课酬结算标准!");
 				}
 			}
-		}else{
-			results.put("offlineTeacherSalary", new BigDecimal(0));
 		}
 
         return results;
@@ -1876,12 +1886,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			}
 			courseScheduleService.batchAddCourseSchedule(newCourseSchedules);
 
-			TeacherDefaultVipGroupSalary teacherDefaultVipGroupSalary = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroup.getUserId(), vipGroup.getVipGroupCategoryId());
-
-			if(Objects.isNull(teacherDefaultVipGroupSalary)){
-				throw new BizException("请设置默认课酬");
-			}
-
 			ClassGroupTeacherMapper oldClassGroupTeacherMapper = classGroupTeacherMapperDao.findByClassGroupAndTeacher(classGroup.getId(),oldTeacherId);
 			if(Objects.nonNull(oldClassGroupTeacherMapper)){
 				ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
@@ -1893,11 +1897,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
 			}
 
+			Map<String, BigDecimal> salaryMap = countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), null, null);
+
 			//创建老师单节课课酬信息
 			courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroup,
 					newCourseSchedules,
-					teacherDefaultVipGroupSalary.getOfflineClassesSalary(),
-					teacherDefaultVipGroupSalary.getOfflineClassesSalary());
+					salaryMap.get("onlineTeacherSalary"),
+					salaryMap.get("offlineTeacherSalary"));
 		}
 
 		BigDecimal surplusCourseFee = new BigDecimal(0);
@@ -2524,12 +2530,15 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		courseScheduleService.batchAddCourseSchedule(vipGroupApplyDto.getCourseSchedules());
 
-        ClassGroupTeacherSalary classGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroup.getId().intValue(), vipGroup.getUserId());
+		Map<String, BigDecimal> map = countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), null, null);
+
+		BigDecimal teacherSalary=BigDecimal.ZERO;
 
 		BigDecimal onlineTeacherSalary=null,offlineTeacherSalary=null,zero=new BigDecimal(0);
-		if(Objects.nonNull(classGroupTeacherSalary)){
-            onlineTeacherSalary=classGroupTeacherSalary.getOnlineClassesSalary();
-            offlineTeacherSalary=classGroupTeacherSalary.getSalary();
+
+		if(Objects.nonNull(map)){
+			onlineTeacherSalary=map.get("onlineTeacherSalary");
+			offlineTeacherSalary=map.get("offlineTeacherSalary");
 		}
 
 		if(Objects.isNull(onlineTeacherSalary)){
@@ -2540,19 +2549,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			offlineTeacherSalary = new BigDecimal(0);
 		}
 
-		TeacherDefaultVipGroupSalary byTeacherAndCategory = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroup.getUserId(), vipGroup.getVipGroupCategoryId());
-
-		if(onlineTeacherSalary.compareTo(zero)<=0){
-            if(Objects.nonNull(byTeacherAndCategory)){
-                onlineTeacherSalary=byTeacherAndCategory.getOfflineClassesSalary();
-            }
-		}
-		if(offlineTeacherSalary.compareTo(zero)<=0){
-			if(Objects.nonNull(byTeacherAndCategory)){
-				offlineTeacherSalary=byTeacherAndCategory.getOfflineClassesSalary();
-			}
-		}
-
 		//创建老师单节课课酬信息
 		courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroup,
 				vipGroupApplyDto.getCourseSchedules(),
@@ -2650,13 +2646,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(courseNum==0){
 				courseScheduleService.batchAddCourseSchedule(courseSchedules);
 
-				ClassGroupTeacherSalary classGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroupId.intValue(), vipGroup.getUserId());
+				Map<String, BigDecimal> salaryMap = countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), null, null);
 
 				//创建老师单节课课酬信息
 				courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroup,
 						courseSchedules,
-						classGroupTeacherSalary.getOnlineClassesSalary(),
-						classGroupTeacherSalary.getSalary());
+						salaryMap.get("onlineTeacherSalary"),
+						salaryMap.get("offlineTeacherSalary"));
 			}
             imGroupMemberList.add(new ImGroupMember(vipGroup.getUserId().toString()));
 		}

+ 11 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml

@@ -354,6 +354,17 @@
             AND status_!='QUIT' AND status_!='QUIT_SCHOOL'
     </select>
 
+    <select id="countGroupNormalStudentNum" resultType="int">
+        SELECT
+            COUNT( user_id_ )
+        FROM
+          class_group_student_mapper
+        WHERE
+            group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+	        AND music_group_id_= #{groupId}
+            AND status_='NORMAL'
+    </select>
+
     <select id="countGroupStudentNum" resultType="int">
         SELECT
             COUNT( user_id_ )

+ 17 - 15
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -955,23 +955,25 @@
 
     <select id="getCourseScheduleDate" resultType="java.util.Date">
         SELECT
-        cs.class_date_
+            cs.class_date_
         FROM
-        music_group mg
-        LEFT JOIN class_group cg ON mg.id_ = cg.music_group_id_
-        LEFT JOIN course_schedule cs ON cg.id_ = cs.class_group_id_
+            course_schedule cs
+            LEFT JOIN teacher t ON cs.actual_teacher_id_=t.id_
         WHERE
-        (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
-        AND FIND_IN_SET(mg.organ_id_,#{organIdList}) AND cs.id_ IS NOT NULL
-        <if test="month==null">
-            AND DATE_FORMAT( NOW(), '%Y%m' ) = DATE_FORMAT( cs.class_date_, '%Y%m' )
-        </if>
-        <if test="month!=null">
-            AND DATE_FORMAT( #{month}, '%Y%m' ) = DATE_FORMAT( cs.class_date_, '%Y%m' )
-        </if>
-        <if test="type!=null and type!=''">
-            AND cs.type_=#{type}
-        </if>
+            (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
+            AND cs.class_group_id_ IN
+            <foreach collection="classGroupIds" item="classGroupId" separator="," open="(" close=")">
+                #{classGroupId}
+            </foreach>
+            <if test="month==null">
+                AND DATE_FORMAT( NOW(), '%Y%m' ) = DATE_FORMAT( cs.class_date_, '%Y%m' )
+            </if>
+            <if test="month!=null">
+                AND DATE_FORMAT( #{month}, '%Y%m' ) = DATE_FORMAT( cs.class_date_, '%Y%m' )
+            </if>
+            <if test="type!=null and type!=''">
+                AND cs.group_type_=#{type}
+            </if>
         GROUP BY
         cs.class_date_
     </select>

+ 19 - 8
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -68,7 +68,7 @@
          bill_start_date_, improvent_classes_num_, enroll_classes_, payment_expire_date_, is_extra_class_,
          settlement_type_, cooperation_organ_id_, enlightenment_course_time_,
          parent_meeting_time_, img_, director_user_id_, is_classroom_lessons_, memo_, expect_start_group_date_,
-         ownership_type_, repair_user_id_, fee_type_,del_flag_)
+         ownership_type_, repair_user_id_, fee_type_, del_flag_)
         VALUES (#{id}, #{name}, #{organId}, #{schoolId}, #{applyExpireDate}, #{teamTeacherId}, #{educationalTeacherId},
                 #{chargeTypeId}, #{courseForm}, now(), now(),
                 #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{billStartDate},
@@ -78,7 +78,7 @@
                 #{cooperationOrganId}, #{enlightenmentCourseTime}, #{parentMeetingTime}, #{img}, #{directorUserId},
                 #{isClassroomLessons}, #{memo}, #{expectStartGroupDate},
                 #{ownershipType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{repairUserId},
-                #{feeType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{delFlag})
+                #{feeType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{delFlag})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -187,7 +187,7 @@
 
     <sql id="musicGroupQueryPageSql">
         <where>
-        	del_flag_ = 0
+            del_flag_ = 0
             <if test="organId != null">
                 AND FIND_IN_SET(organ_id_,#{organId})
             </if>
@@ -507,14 +507,22 @@
 
     <select id="getMusicGroupRegister" resultType="com.ym.mec.biz.dal.dto.MusicGroupRegisterDto">
         SELECT mg.id_ musicGroupId ,o.name_ organName, mg.name_ musicGroupName, mg.status_ musicGroupStatus,
-        COUNT(sr.id_) registerNum
+        COUNT(sr.id_) registerNum,SUM(IF(sr.music_group_status_='NORMAL',1,0)) normalNum
         FROM student_registration sr
         LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
         LEFT JOIN organization o on o.id_ = mg.organ_id_
-        WHERE mg.status_ IN ('APPLY', 'PAY')
-        <if test="organIds != null">
-            AND FIND_IN_SET (mg.organ_id_,#{organIds})
-        </if>
+        <where>
+            <if test="musicGroupStatusList != null">
+                mg.status_ IN
+                <foreach collection="musicGroupStatusList" item="musicGroupStatus" open="(" close=")"
+                         separator=",">
+                    #{musicGroupStatus}
+                </foreach>
+            </if>
+            <if test="organIds != null">
+                AND FIND_IN_SET (mg.organ_id_,#{organIds})
+            </if>
+        </where>
         GROUP BY sr.music_group_id_
     </select>
 
@@ -526,6 +534,9 @@
         <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
             #{musicGroupId}
         </foreach>
+        <if test="studentMusicGroupStatus != null">
+            AND sr.music_group_status_ = #{studentMusicGroupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        </if>
         AND sr.payment_status_ = 2
         GROUP BY sr.music_group_id_,sr.actual_subject_id_
     </select>

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -695,4 +695,14 @@
                 #{studentId}
             </foreach>
     </select>
+
+    <select id="getPracticeGroupByIds" resultMap="PracticeCourseDto">
+        SELECT pg.id_,t.real_name_,et.real_name_ edu_teacher_name_ FROM practice_group pg
+        LEFT JOIN sys_user t ON pg.user_id_ = t.id_
+        LEFT JOIN sys_user et ON et.id_ = pg.educational_teacher_id_
+        WHERE pg.id_ IN
+        <foreach collection="practiceIds" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
 </mapper>

+ 27 - 2
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -654,11 +654,36 @@
 
     <!-- 查找支付成功和支付中订单 -->
     <select id="findOrganPayOrderNum" resultType="int">
-        <![CDATA[
         SELECT COUNT(*)
         FROM student_payment_order
         WHERE organ_id_ = #{organId}
           AND status_ IN ('SUCCESS', 'ING')
-        ]]>
+    </select>
+
+    <!-- 获取每月用户的对应类型订单订单 -->
+    <select id="getOrderByMonthAndType" resultType="com.ym.mec.biz.dal.dto.OrderByTypeExportDto">
+        SELECT o.name_ organName, spo.user_id_ studentId,su.username_ studentName,spo.type_ orderType,
+        spo.actual_amount_ actualAmount,spo.music_group_id_ musicGroupId,spo.group_type_ groupType,spo.create_time_
+        createTime
+        FROM student_payment_order spo
+        LEFT JOIN sys_user su on spo.user_id_ = su.id_
+        LEFT JOIN organization o ON o.id_ = spo.id_
+        WHERE spo.status_ = 'SUCCESS'
+        <if test="organIds != null">
+            AND FIND_IN_SET (spo.organ_id_,#{organIds})
+        </if>
+        <if test="orderTypeList != null">
+            AND spo.type_ IN
+            <foreach collection="orderTypeList" item="orderType" open="(" close=")"
+                     separator=",">
+                #{orderType}
+            </foreach>
+        </if>
+        <if test="startTime != null">
+            AND spo.create_time_ >= #{startTime}
+        </if>
+        <if test="endTime != null"><![CDATA[
+        AND spo.create_time_ <= #{endTime}
+        ]]></if>
     </select>
 </mapper>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 386 - 367
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml


+ 18 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/CorpMember.java

@@ -173,5 +173,23 @@ public class CorpMember extends ConfigInit {
         return member;
     }
 
+    /**
+     * 创建 CorpMember
+     *
+     * @return 创建的CorpMember 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeCreateMember(Map<String,Object> info,File file) throws Exception {
+        System.out.println("=======execute Create CorpMember begin=======");
+        Map<String, Object> memberParams = new HashMap<String, Object>();
+        memberParams.put("app_id", appId);
+        memberParams.putAll(info);
+
+        System.out.println("创建企业用户,请求参数:" + JSON.toJSONString(memberParams) );
+        Map<String, Object> member = com.huifu.adapay.model.CorpMember.create(memberParams, file);
+        System.out.println("创建企业用户,返回参数:" + JSON.toJSONString(member) );
+        return member;
+    }
+
 
 }

+ 7 - 107
mec-util/src/main/java/com/ym/mec/util/excel/POIUtil.java

@@ -6,8 +6,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -17,30 +15,21 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.commons.beanutils.ConvertUtils;
 import org.apache.commons.beanutils.NestedNullException;
 import org.apache.commons.beanutils.PropertyUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
-import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.BasicCookieStore;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.message.BasicNameValuePair;
-import org.apache.http.ssl.SSLContextBuilder;
-import org.apache.http.ssl.TrustStrategy;
-import org.apache.http.util.EntityUtils;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
 import org.apache.poi.hssf.usermodel.HSSFFont;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
@@ -539,95 +528,6 @@ public class POIUtil {
 		return result;
 	}
 
-	public static void main(String[] args) {
-		File file = new File("e:/reward.xlsx");
-		String sheetName = "reward";
-		Map<String, List<Map<String, Object>>> map = null;
-		try {
-			map = POIUtil.importExcel(file, 1);
-		} catch (IOException e) {
-			e.printStackTrace();
-			return;
-		}
-		if (map != null) {
-			// Map<String, Object> loginParam = new HashMap<String, Object>();
-
-			SSLContextBuilder builder = new SSLContextBuilder();
-			try {
-				builder.loadTrustMaterial(null, new TrustStrategy() {
-
-					@Override
-					public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
-						return true;
-					}
-				});
-			} catch (Exception e) {
-				e.printStackTrace();
-				return;
-			}
-
-			HttpPost httpPost = null;
-			CloseableHttpClient httpClient = null;
-			try {
-				SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build());
-				httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).setDefaultCookieStore(new BasicCookieStore()).build();
-				// 登陆
-				httpPost = new HttpPost("https://ehjinrong.com/manage/admin/login.do?userName=sadmin&password=Hello@ehjr&captcha=411049");
-
-				HttpResponse httpResponse = httpClient.execute(httpPost);
-				HttpEntity httpEntity = httpResponse.getEntity();
-				String str = EntityUtils.toString(httpEntity);
-				System.out.println("--------" + str);
-				EntityUtils.consume(httpEntity);
-
-				// 发放奖励
-				for (Map<String, Object> row : map.get(sheetName)) {
-					try {
-						Long arg0 = Long.parseLong(row.get("user_id_").toString());
-						double arg1 = Double.parseDouble(row.get("reward").toString());
-						//String arg2 = row.get("tender_id_").toString();
-
-						Map<String, Object> parameterMap = new HashMap<String, Object>();
-						parameterMap.put("userId", arg0);
-						parameterMap.put("amount", arg1);
-						parameterMap.put("memo", "结清");
-
-						List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
-						if (parameterMap != null) {
-							for (Entry<String, Object> entry : parameterMap.entrySet()) {
-								String name = entry.getKey();
-								String value = ConvertUtils.convert(entry.getValue());
-								if (StringUtils.isNotEmpty(name)) {
-									nameValuePairs.add(new BasicNameValuePair(name, value));
-								}
-							}
-						}
-						httpPost = new HttpPost("https://ehjinrong.com/manage/sysAccount/fundAllocate.do");
-						httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
-						httpResponse = httpClient.execute(httpPost);
-						httpEntity = httpResponse.getEntity();
-						EntityUtils.toString(httpEntity);
-						EntityUtils.consume(httpEntity);
-
-						System.out.println("  userId:" + arg0 + "  reward:" + arg1);
-					} catch (Exception e) {
-						e.printStackTrace();
-					}
-				}
-			} catch (Exception e) {
-				e.printStackTrace();
-			} finally {
-				httpPost.releaseConnection();
-				try {
-					httpClient.close();
-				} catch (IOException e) {
-					e.printStackTrace();
-				}
-			}
-
-		}
-	}
-
 	/**
 	 * 创建excel文档
 	 *

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

@@ -94,6 +94,8 @@ public class ExportController extends BaseController {
     private CooperationOrganService cooperationOrganService;
     @Autowired
     private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
+    @Autowired
+    private StudentPaymentOrderDao studentPaymentOrderDao;
 
     @Autowired
     private TeacherService teacherService;
@@ -279,7 +281,7 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"课时编号", "老师编号", "老师姓名", "老师分部", "工作类别",
-                    "课程分部", "课程组编号", "课程班名称", "乐团模式", "vip活动名称","Vip课程类型", "阶梯奖励名称", "线上课/线下课", "线上课单价", "线下课单价",
+                    "课程分部", "课程组编号", "课程班名称", "乐团模式", "vip活动名称", "Vip课程类型", "阶梯奖励名称", "线上课/线下课", "线上课单价", "线下课单价",
                     "课程类别", "课时时长", "实际上课时长", "上课日期",
                     "上课时间", "教师签到状态", "教师签退状态", "教师签到时间", "教师签退时间",
                     "主辅", "上课地点", "应到学员", "学员签到时间", "学员签退时间", "课时课酬", "阶梯奖励"}, new String[]{
@@ -601,12 +603,12 @@ public class ExportController extends BaseController {
         List<SporadicChargeInfo> rows = sporadicChargeInfoService.queryDetailPage(queryInfo).getRows();
         for (SporadicChargeInfo row : rows) {
             row.setOpenFlagStr(row.getOpenFlag().equals(0) ? "开启" : "关闭");
-            row.setOrderType(row.getUserId() ==null ? "公用" : "个人");
+            row.setOrderType(row.getUserId() == null ? "公用" : "个人");
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "收费类型", "标题", "收费状态", "金额", "时间", "学生姓名","订单类型", "创建人"}, new String[]{
-                    "organName", "chargeType.msg", "title", "openFlagStr", "amount", "createTime", "userName", "orderType","operatorName"}, rows);
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "收费类型", "标题", "收费状态", "金额", "时间", "学生姓名", "订单类型", "创建人"}, new String[]{
+                    "organName", "chargeType.msg", "title", "openFlagStr", "amount", "createTime", "userName", "orderType", "operatorName"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             response.flushBuffer();
@@ -1705,7 +1707,11 @@ public class ExportController extends BaseController {
                 organIds = employee.getOrganIdList();
             }
         }
-        List<MusicGroupRegisterDto> musicGroupRegisters = musicGroupDao.getMusicGroupRegister(organIds);
+        List<MusicGroupStatusEnum> musicGroupStatusList = new ArrayList<>();
+        musicGroupStatusList.add(MusicGroupStatusEnum.APPLY);
+        musicGroupStatusList.add(MusicGroupStatusEnum.PAY);
+
+        List<MusicGroupRegisterDto> musicGroupRegisters = musicGroupDao.getMusicGroupRegister(musicGroupStatusList,organIds);
 
         if (musicGroupRegisters.size() <= 0) {
             response.setStatus(200);
@@ -1716,7 +1722,7 @@ public class ExportController extends BaseController {
         }
         List<String> musicGroupIds = musicGroupRegisters.stream().map(MusicGroupRegisterDto::getMusicGroupId).collect(Collectors.toList());
 
-        List<RegisterSubjectDto> registerSubjects = musicGroupDao.getRegisterSubjectNum(musicGroupIds);
+        List<RegisterSubjectDto> registerSubjects = musicGroupDao.getRegisterSubjectNum(musicGroupIds,null);
         List<MusicGroupRegisterDto> musicGroupRegisterOrders = musicGroupDao.getMusicGroupRegisterOrder(musicGroupIds);
         List<MusicGroupRegisterDto> musicGroupRegisterTotalMoneys = musicGroupDao.getMusicGroupRegisterTotalMoney(musicGroupIds);
 
@@ -1980,46 +1986,219 @@ public class ExportController extends BaseController {
     @ApiOperation(value = "老师默认课酬导出")
     @RequestMapping("export/teacherDefaultSalary")
     @PreAuthorize("@pcs.hasPermissions('export/teacherDefaultSalary')")
-	public void exportTeacherDefaultSalary(String organIdList, HttpServletResponse response) throws IOException {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			throw new IOException("用户信息获取失败");
-		}
-		List<TeacherDefaultSalaryDto> pageList = teacherService.queryTeacherDefaultSalary(organIdList);
-		if (pageList.size() <= 0) {
-			response.setStatus(200);
-			response.setContentType("Content-Type: application/json;charset=UTF-8");
-			response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
-			response.flushBuffer();
-			return;
-		}
-		OutputStream outputStream = response.getOutputStream();
-		try {
-
-			String[] header = { "老师编号", "姓名", "分部", "工作类型", "在职状态", "老师状态", "1v1", "1v2", "1v3", "1v4", "1v5", "1v6", "1v7", "网管课", "单技课2.0", "合奏课2.0", "综合课2.0", "集训单技课2.0", "集训合奏课2.0",
-					"基础技能课2.0", "课堂课2.0", "单技课3.0", "合奏课3.0", "综合课3.0", "集训单技课3.0", "集训合奏课3.0",
-					"基础技能课3.0", "课堂课3.0", "线上基础技能课1v3", "线上基础技能课1v4", "线上基础技能课1v5", "乐团网管课1v1" };
-			String[] body = { "userId", "realName", "organName", "jobNature", "demissionStatus", "status", "vip1", "vip2", "vip3", "vip4", "vip5", "vip6", "vip7",
-					"practiceSalary", "singleSalary2", "mixSalary2", "comprehensiveSalary2", "traningSigleSalary2", "traningMixSalary2", "highSalary2",
-					"classroomSalary2", "singleSalary", "mixSalary", "comprehensiveSalary", "traningSigleSalary", "traningMixSalary", "highSalary",
-					"classroomSalary", "highOnline3Salary", "highOnline4Salary", "highOnline5Salary", "musicNetwork1Salary" };
-			HSSFWorkbook workbook = POIUtil.exportExcel(header, body, pageList);
-			response.setContentType("application/octet-stream");
-			response.setHeader("Content-Disposition", "attachment;filename=teacherDefaultSalary-" + DateUtil.getDate(new Date()) + ".xls");
-			response.flushBuffer();
-			outputStream = response.getOutputStream();
-			workbook.write(outputStream);
-			outputStream.flush();
-		} catch (Exception e) {
-			e.printStackTrace();
-		} finally {
-			if (outputStream != null) {
-				try {
-					outputStream.close();
-				} catch (IOException e) {
-					e.printStackTrace();
-				}
-			}
-		}
-	}
+    public void exportTeacherDefaultSalary(String organIdList, HttpServletResponse response) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new IOException("用户信息获取失败");
+        }
+        List<TeacherDefaultSalaryDto> pageList = teacherService.queryTeacherDefaultSalary(organIdList);
+        if (pageList.size() <= 0) {
+            response.setStatus(200);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+
+            String[] header = {"老师编号", "姓名", "分部", "工作类型", "在职状态", "老师状态", "1v1", "1v2", "1v3", "1v4", "1v5", "1v6", "1v7", "网管课", "单技课2.0", "合奏课2.0", "综合课2.0", "集训单技课2.0", "集训合奏课2.0",
+                    "基础技能课2.0", "课堂课2.0", "单技课3.0", "合奏课3.0", "综合课3.0", "集训单技课3.0", "集训合奏课3.0",
+                    "基础技能课3.0", "课堂课3.0", "线上基础技能课1v3", "线上基础技能课1v4", "线上基础技能课1v5", "乐团网管课1v1"};
+            String[] body = {"userId", "realName", "organName", "jobNature", "demissionStatus", "status", "vip1", "vip2", "vip3", "vip4", "vip5", "vip6", "vip7",
+                    "practiceSalary", "singleSalary2", "mixSalary2", "comprehensiveSalary2", "traningSigleSalary2", "traningMixSalary2", "highSalary2",
+                    "classroomSalary2", "singleSalary", "mixSalary", "comprehensiveSalary", "traningSigleSalary", "traningMixSalary", "highSalary",
+                    "classroomSalary", "highOnline3Salary", "highOnline4Salary", "highOnline5Salary", "musicNetwork1Salary"};
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, pageList);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=teacherDefaultSalary-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+
+    @ApiOperation(value = "乐团声部在读人数导出")
+    @RequestMapping("export/musicGroupNormalStudentNum")
+    @PreAuthorize("@pcs.hasPermissions('export/musicGroupNormalStudentNum')")
+    public void musicGroupNormalStudentNum(String organIds, HttpServletResponse response) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isBlank(organIds)) {
+                organIds = employee.getOrganIdList();
+            }
+        }
+        List<MusicGroupRegisterDto> musicGroupRegisters = musicGroupDao.getMusicGroupRegister(null,organIds);
+
+        if (musicGroupRegisters.size() <= 0) {
+            response.setStatus(200);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        List<String> musicGroupIds = musicGroupRegisters.stream().map(MusicGroupRegisterDto::getMusicGroupId).collect(Collectors.toList());
+
+        List<RegisterSubjectDto> registerSubjects = musicGroupDao.getRegisterSubjectNum(musicGroupIds,StudentMusicGroupStatusEnum.NORMAL);
+
+        HashSet<Integer> added = new HashSet<>();
+        List<String> header = new ArrayList<>();
+        header.add("分部");
+        header.add("乐团名称");
+        header.add("乐团状态");
+        header.add("在读总人数");
+        List<String> body = new ArrayList<>();
+        body.add("organName");
+        body.add("musicGroupName");
+        body.add("musicGroupStatus");
+        body.add("normalNum");
+        for (RegisterSubjectDto registerSubject : registerSubjects) {
+            if (!added.contains(registerSubject.getSubjectId())) {
+                added.add(registerSubject.getSubjectId());
+                header.add(registerSubject.getSubjectName());
+                body.add("subject" + registerSubject.getSubjectId());
+            }
+        }
+
+        List<Map<String, Object>> data = new ArrayList<>();
+        for (MusicGroupRegisterDto musicGroupRegister : musicGroupRegisters) {
+            added.clear();
+            HashMap<String, Object> musicGroupRegisterMap = new HashMap<>();
+
+            musicGroupRegisterMap.put("organName", musicGroupRegister.getOrganName());
+            musicGroupRegisterMap.put("musicGroupName", musicGroupRegister.getMusicGroupName());
+            musicGroupRegisterMap.put("musicGroupStatus", musicGroupRegister.getMusicGroupStatus().getMsg());
+            musicGroupRegisterMap.put("normalNum", musicGroupRegister.getNormalNum());
+
+            for (RegisterSubjectDto registerSubject : registerSubjects) {
+                if (registerSubject.getMusicGroupId().equals(musicGroupRegister.getMusicGroupId())) {
+                    added.add(registerSubject.getSubjectId());
+                    musicGroupRegisterMap.put("subject" + registerSubject.getSubjectId(), registerSubject.getNum());
+                }
+                if (!added.contains(registerSubject.getSubjectId())) {
+                    musicGroupRegisterMap.put("subject" + registerSubject.getSubjectId(), 0);
+                }
+            }
+            data.add(musicGroupRegisterMap);
+        }
+
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            String[] headerStr = header.toArray(new String[header.size()]);
+            String[] bodyStr = body.toArray(new String[body.size()]);
+
+            HSSFWorkbook workbook = POIUtil.exportExcel(headerStr, bodyStr, data);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    @ApiOperation(value = "回款统计")
+    @RequestMapping("export/studentOrder")
+    @PreAuthorize("@pcs.hasPermissions('export/studentOrder')")
+    public void studentOrder(String organIds,Date date, HttpServletResponse response) throws IOException {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isBlank(organIds)) {
+                organIds = employee.getOrganIdList();
+            }
+        }
+        Date startTime = DateUtil.getFirstDayOfMonth(date);
+        Date EndTime = DateUtil.getLastSecondWithDay(DateUtil.getLastDayOfMonth(date));
+
+        List<OrderTypeEnum> orderTypeList = new  ArrayList<>();
+        orderTypeList.add(OrderTypeEnum.SPORADIC);
+        orderTypeList.add(OrderTypeEnum.PRACTICE_GROUP_BUY);
+        orderTypeList.add(OrderTypeEnum.PRACTICE_GROUP_RENEW);
+        orderTypeList.add(OrderTypeEnum.SMALL_CLASS_TO_BUY);
+        List<OrderByTypeExportDto> orders = studentPaymentOrderDao.getOrderByMonthAndType(organIds, orderTypeList,startTime,EndTime);
+
+        if (orders.size() <= 0) {
+            response.setStatus(200);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        List<Long> vipGroupIds = orders.stream().filter(e -> e.getGroupType().equals(GroupType.VIP)).map(OrderByTypeExportDto::getMusicGroupId).collect(Collectors.toList());
+        List<Long> practiceGroupIds = orders.stream().filter(e -> e.getGroupType().equals(GroupType.PRACTICE)).map(OrderByTypeExportDto::getMusicGroupId).collect(Collectors.toList());
+
+        List<VipBuyResultDto> vipGroupTeachers = new ArrayList<>();
+        List<PracticeCourseDto> practiceGroupsTeacher = new ArrayList<>();
+        if(vipGroupIds.size() > 0){
+            vipGroupTeachers = vipGroupDao.getGroupTeachers(vipGroupIds);
+        }
+
+        if(practiceGroupIds.size() >0){
+            practiceGroupsTeacher = practiceGroupDao.getPracticeGroupByIds(practiceGroupIds);
+        }
+
+        for (OrderByTypeExportDto order : orders) {
+            for (VipBuyResultDto vipGroupTeacher : vipGroupTeachers) {
+                if(order.getGroupType().equals(GroupType.VIP) && order.getMusicGroupId().equals(vipGroupTeacher.getVipGroupId().longValue())){
+                    order.setTeacherName(vipGroupTeacher.getTeacherName());
+                    order.setEduTeacherName(vipGroupTeacher.getEduTeacherName());
+                }
+            }
+            for (PracticeCourseDto practiceCourseDto : practiceGroupsTeacher) {
+                if(order.getGroupType().equals(GroupType.PRACTICE) && order.getMusicGroupId().equals(practiceCourseDto.getId())){
+                    order.setTeacherName(practiceCourseDto.getTeacherName());
+                    order.setEduTeacherName(practiceCourseDto.getEduTeacherName());
+                }
+            }
+
+        }
+
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            String[] header = {"学员编号", "学员姓名", "指导老师", "教务老师", "订单日期", "交易类型", "实际金额"};
+            String[] body = {"studentId", "studentName", "teacherName", "eduTeacherName", "createTime", "orderType.msg", "actualAmount"};
+
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, orders);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 }

+ 1 - 3
mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java

@@ -285,9 +285,7 @@ public class VipGroupManageController extends BaseController {
         Map results = vipGroupService.countVipGroupPredictFee(vipGroup,
                 vipGroup.getUserId(),
                 vipGroup.getOnlineClassesUnitPrice(),
-                vipGroup.getOfflineClassesUnitPrice(),
-                true,
-                false);
+                vipGroup.getOfflineClassesUnitPrice());
         return succeed(results);
     }
 

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio