Ver código fonte

Merge remote-tracking branch 'origin/adapay_new' into adapay_new

Joburgess 4 anos atrás
pai
commit
0f2ef57928

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupQuitDao.java

@@ -19,8 +19,17 @@ public interface MusicGroupQuitDao extends BaseDAO<Long, MusicGroupQuit> {
 
     /**
      * 获取用户退出的乐团
+     *
      * @param userId
      * @return
      */
     List<MusicGroupQuit> getUserMusicQuit(@Param("userId") Integer userId);
+
+    /**
+     * 获取学生乐团最后一次退团记录
+     * @param musicGroupId
+     * @param userIds
+     * @return
+     */
+    List<MusicGroupQuit> getQuits(@Param("musicGroupId") String musicGroupId, @Param("userIds") List<Integer> userIds);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SellOrderDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.entity.OperatingReport;
 import com.ym.mec.biz.dal.entity.SellOrder;
 import com.ym.mec.common.dal.BaseDAO;
@@ -92,6 +93,7 @@ public interface SellOrderDao extends BaseDAO<Integer, SellOrder> {
 
     /**
      * 商品销售
+     *
      * @param startTime
      * @param endTime
      * @return
@@ -191,4 +193,11 @@ public interface SellOrderDao extends BaseDAO<Integer, SellOrder> {
      * @return
      */
     List<SellOrder> getRefundSellOrder(@Param("orderId") Long orderId);
+
+    /**
+     * 获取订单的各类型费用
+     * @param orderId
+     * @return
+     */
+    StudentPaymentOrderExportDto getFeeByType(@Param("orderId") Long orderId);
 }

+ 7 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -75,13 +75,6 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      */
     String queryNameById(@Param("userId") Integer userId);
 
-    /**
-     * 查询分部所有老师
-     *
-     * @param userIds
-     * @return
-     */
-    List<TeacherBasicDto> findTeachers(@Param("userIds") List<Integer> userIds);
 
     /**
      * @param userIds:
@@ -267,8 +260,6 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      */
     Map<String, Integer> queryOrganTeacherNum(@Param("organId") String organId);
 
-    List<Teacher> findByFlowOrganRange(Map<String, Object> params);
-
     /**
      * @param teacherIds: 教师编号里列表
      * @return java.util.List<com.ym.mec.biz.dal.entity.Teacher>
@@ -478,4 +469,11 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(@Param("organIdList") String organIdList);
 
     BasicUserDto findUserByPhone(String phone);
+
+    /**
+     * 获取流动分部老师
+     * @param organId
+     * @return
+     */
+    List<TeacherBasicDto> findByFlowOrganRangeTeachers(String organId);
 }

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

@@ -41,6 +41,9 @@ public class MusicGroupStudentsDto{
     @ApiModelProperty(value = "学员状态 NORMAL(NORMAL, 在读), LEAVE(LEAVE, 请假), QUIT(QUIT, 退班)",required = false)
     private String studentStatus;
 
+    @ApiModelProperty(value = "退团原因",required = false)
+    private String quitReason;
+
     private PaymentFlagEnum paymentStatus;
 
     @ApiModelProperty(value = "是否新增学员(1是0否)",required = false)
@@ -209,4 +212,12 @@ public class MusicGroupStudentsDto{
     public void setNextPaymentDateStr(String nextPaymentDateStr) {
         this.nextPaymentDateStr = nextPaymentDateStr;
     }
+
+    public String getQuitReason() {
+        return quitReason;
+    }
+
+    public void setQuitReason(String quitReason) {
+        this.quitReason = quitReason;
+    }
 }

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

@@ -27,6 +27,9 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     //教辅费用
     private BigDecimal teachingFee;
 
+    //维修费用
+    private BigDecimal repairFee;
+
     //手续费
     private BigDecimal transferFee;
 
@@ -193,4 +196,12 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     public void setHighOnlineCourseFee(BigDecimal highOnlineCourseFee) {
         this.highOnlineCourseFee = highOnlineCourseFee;
     }
+
+    public BigDecimal getRepairFee() {
+        return repairFee;
+    }
+
+    public void setRepairFee(BigDecimal repairFee) {
+        this.repairFee = repairFee;
+    }
 }

+ 0 - 11
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherQueryInfo.java

@@ -13,9 +13,6 @@ public class TeacherQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "机构编号")
     private String organId;
 
-    @ApiModelProperty(value = "教师编号")
-    private List<Integer> teacherId;
-
     @ApiModelProperty(value = "教师工作性质")
     private String jobNature;
 
@@ -39,14 +36,6 @@ public class TeacherQueryInfo extends QueryInfo {
         this.tenantId = tenantId;
     }
 
-    public List<Integer> getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(List<Integer> teacherId) {
-        this.teacherId = teacherId;
-    }
-
     public Integer getSubjectId() {
         return subjectId;
     }

+ 113 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -1,19 +1,127 @@
 package com.ym.mec.biz.service.impl;
 
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.dao.ChargeTypeDao;
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
+import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.dao.CooperationOrganDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentEntitiesDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPurchaseListDao;
+import com.ym.mec.biz.dal.dao.MusicGroupQuitDao;
+import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectGoodsGroupDao;
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectPlanDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.SchoolDao;
+import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
+import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.CourseFormDto;
+import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
+import com.ym.mec.biz.dal.dto.HighClassGroupDto;
+import com.ym.mec.biz.dal.dto.MusicCardDto;
+import com.ym.mec.biz.dal.dto.RegisterPayDto;
+import com.ym.mec.biz.dal.dto.SporadicPayDto;
+import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
+import com.ym.mec.biz.dal.dto.SubjectRegisterDto;
+import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
+import com.ym.mec.biz.dal.entity.ApprovalStatus;
+import com.ym.mec.biz.dal.entity.ChargeType;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.FeeType;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupPurchaseList;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.School;
+import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GoodsType;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.ClassGroupStudentMapperService;
+import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
+import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -27,18 +135,6 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
 @Service
 public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> implements MusicGroupService {
 
@@ -1935,13 +2031,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             courseScheduleTeacherSalary.setUpdateTime(new Date());
             courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
         }
-        Teacher teacher = teacherDao.get(teacherId);
-        MusicGroup musicGroup = musicGroupDao.get(classGroupDao.findByCourseSchedule(courseScheduleId.intValue(), 0).getMusicGroupId());
-        Set<Integer> roleIds = new HashSet<>(1);
-        roleIds.add(SysUserRole.SECTION_MANAGER);
-
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_TEACHER_AMOUNT_CHANGE, "",
-                teacher.getRealName(), musicGroup.getName(), scope.equals("all") ? "所有" : "本次");
         return true;
     }
 

+ 96 - 84
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java

@@ -121,55 +121,55 @@ public class StudentManageServiceImpl implements StudentManageService {
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
         PageInfo<StudentManageListDto> pageInfo = new PageInfo<StudentManageListDto>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-		
-		List<StudentManageListDto> dataList = null;
-		int count = studentManageDao.countStudentByOrganId(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = studentManageDao.findStudentsByOrganId(params);
-		}
-		if (dataList == null) {
-			dataList = new ArrayList<StudentManageListDto>();
-		}
-		pageInfo.setRows(dataList);
-		
-		if(dataList.size() == 0){
-			return pageInfo;
-		}
-		
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<StudentManageListDto> dataList = null;
+        int count = studentManageDao.countStudentByOrganId(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = studentManageDao.findStudentsByOrganId(params);
+        }
+        if (dataList == null) {
+            dataList = new ArrayList<StudentManageListDto>();
+        }
+        pageInfo.setRows(dataList);
+
+        if (dataList.size() == 0) {
+            return pageInfo;
+        }
+
         Set<Integer> userIds = dataList.stream().map(StudentManageListDto::getUserId).collect(Collectors.toSet());
-		
-		List<StudentListCourseDto> studentListCourseDtoList = studentManageDao.queryStudentRemianCourse(userIds);
-		Map<Integer,StudentListCourseDto> StudentListCourseDtoMap = studentListCourseDtoList.stream().collect(Collectors.toMap(StudentListCourseDto::getUserId, studentListCourseDto -> studentListCourseDto));
-		
-		StudentListCourseDto studentListCourseDto = null;
-		for (StudentManageListDto dto : dataList) {
-			studentListCourseDto = StudentListCourseDtoMap.get(dto.getUserId());
-			if (studentListCourseDto != null) {
-				if (studentListCourseDto.getRemainCourseNum() > 0) {
-					dto.setHasCourse(YesOrNoEnum.YES);
-				} else {
-					dto.setHasCourse(YesOrNoEnum.NO);
-				}
-				if (studentListCourseDto.getRemainPracticeNum() > 0) {
-					dto.setHasPracticeCourse(YesOrNoEnum.YES);
-				} else {
-					dto.setHasPracticeCourse(YesOrNoEnum.NO);
-				}
-			} else {
-				dto.setHasCourse(YesOrNoEnum.NO);
-				dto.setHasPracticeCourse(YesOrNoEnum.NO);
-			}
-		}
-		
-		if (queryInfo.getIsExport()) {
-			if (count > 50000) {
-				throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
-			}
-			//获取所在乐团
+
+        List<StudentListCourseDto> studentListCourseDtoList = studentManageDao.queryStudentRemianCourse(userIds);
+        Map<Integer, StudentListCourseDto> StudentListCourseDtoMap = studentListCourseDtoList.stream().collect(Collectors.toMap(StudentListCourseDto::getUserId, studentListCourseDto -> studentListCourseDto));
+
+        StudentListCourseDto studentListCourseDto = null;
+        for (StudentManageListDto dto : dataList) {
+            studentListCourseDto = StudentListCourseDtoMap.get(dto.getUserId());
+            if (studentListCourseDto != null) {
+                if (studentListCourseDto.getRemainCourseNum() > 0) {
+                    dto.setHasCourse(YesOrNoEnum.YES);
+                } else {
+                    dto.setHasCourse(YesOrNoEnum.NO);
+                }
+                if (studentListCourseDto.getRemainPracticeNum() > 0) {
+                    dto.setHasPracticeCourse(YesOrNoEnum.YES);
+                } else {
+                    dto.setHasPracticeCourse(YesOrNoEnum.NO);
+                }
+            } else {
+                dto.setHasCourse(YesOrNoEnum.NO);
+                dto.setHasPracticeCourse(YesOrNoEnum.NO);
+            }
+        }
+
+        if (queryInfo.getIsExport()) {
+            if (count > 50000) {
+                throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
+            }
+            //获取所在乐团
             Map<Integer, String> musicGroupNames = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicNames(userIds));
             //获取所在vip
             Map<Integer, String> vipGroupNames = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipNames(userIds));
@@ -177,15 +177,15 @@ public class StudentManageServiceImpl implements StudentManageService {
             Map<Integer, String> musicGroupStatus = MapUtil.convertMybatisMap(musicGroupDao.queryUserMusicStatus(userIds));
             //获取所在vip状态
             Map<Integer, String> vipGroupStatus = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipStatus(userIds));
-            
+
             dataList.forEach(e -> {
                 e.setMusicGroupName(musicGroupNames.get(e.getUserId().longValue()));
                 e.setVipGroupName(vipGroupNames.get(e.getUserId()));
                 e.setMusicGroupStatus(musicGroupStatus.get(e.getUserId().longValue()));
                 e.setVipGroupStatus(vipGroupStatus.get(e.getUserId()));
             });
-		}
-		pageInfo.setRows(dataList);
+        }
+        pageInfo.setRows(dataList);
         return pageInfo;
     }
 
@@ -375,6 +375,18 @@ public class StudentManageServiceImpl implements StudentManageService {
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = studentManageDao.queryMusicGroupStudent(params);
+            //退团的学生
+            List<Integer> quitUserIds = dataList.stream().filter(e -> e.getStudentStatus().equals("QUIT")).map(MusicGroupStudentsDto::getUserId).collect(Collectors.toList());
+
+            if (quitUserIds.size() > 0) {
+                List<MusicGroupQuit> quits = musicGroupQuitDao.getQuits(queryInfo.getMusicGroupId(), quitUserIds);
+                for (MusicGroupStudentsDto musicGroupStudentsDto : dataList) {
+                    for (MusicGroupQuit quit : quits) {
+                        if (!quit.getUserId().equals(musicGroupStudentsDto.getUserId())) continue;
+                        musicGroupStudentsDto.setQuitReason(quit.getReason());
+                    }
+                }
+            }
 //            Map<Integer,String> maps = MapUtil.convertIntegerMap(musicGroupStudentFeeDao.findPaymentStatusMap(queryInfo.getMusicGroupId()));
 //            dataList.forEach(e->{
 //                e.setPaymentStatus(maps.get(e.getUserId()));
@@ -465,39 +477,39 @@ public class StudentManageServiceImpl implements StudentManageService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-	public int studentRegister(Student student) {
-		if (student == null || StringUtils.isEmpty(student.getPhone())) {
-			throw new BizException("参数校验失败");
-		}
-		Date date = new Date();
-		SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
-		if (sysUser != null) {
-			if (sysUser.getUserType().contains("STUDENT")) {
-				throw new BizException("手机号已被占用");
-			} else {
-				student.setId(sysUser.getId());
-				student.setUserType(sysUser.getUserType() + ",STUDENT");
-				student.setUpdateTime(date);
-				sysUserFeignService.updateSysUser(student);
-			}
-		} else {
-			student.setUpdateTime(date);
-			student.setCreateTime(date);
-			student.setUserType("STUDENT");
-			HttpResponseResult<Integer> result = sysUserFeignService.addUser(student);
-			student.setId(result.getData());
-
-			ImResult register = imFeignService.register(new ImUserModel(student.getId().toString(), student.getPhone(), null));
-			student.setImToken(register.getToken());
-			sysUserFeignService.updateSysUser(student);
-
-			sysUserCashAccountDao.insert(new SysUserCashAccount(student.getId(), "CNY"));
-		}
-		student.setUserId(student.getId());
-
-		studentService.upSet(student);
-		return student.getId();
-	}
+    public int studentRegister(Student student) {
+        if (student == null || StringUtils.isEmpty(student.getPhone())) {
+            throw new BizException("参数校验失败");
+        }
+        Date date = new Date();
+        SysUser sysUser = sysUserFeignService.queryUserByMobile(student.getPhone());
+        if (sysUser != null) {
+            if (sysUser.getUserType().contains("STUDENT")) {
+                throw new BizException("手机号已被占用");
+            } else {
+                student.setId(sysUser.getId());
+                student.setUserType(sysUser.getUserType() + ",STUDENT");
+                student.setUpdateTime(date);
+                sysUserFeignService.updateSysUser(student);
+            }
+        } else {
+            student.setUpdateTime(date);
+            student.setCreateTime(date);
+            student.setUserType("STUDENT");
+            HttpResponseResult<Integer> result = sysUserFeignService.addUser(student);
+            student.setId(result.getData());
+
+            ImResult register = imFeignService.register(new ImUserModel(student.getId().toString(), student.getPhone(), null));
+            student.setImToken(register.getToken());
+            sysUserFeignService.updateSysUser(student);
+
+            sysUserCashAccountDao.insert(new SysUserCashAccount(student.getId(), "CNY"));
+        }
+        student.setUserId(student.getId());
+
+        studentService.upSet(student);
+        return student.getId();
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)

+ 1 - 26
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java

@@ -236,17 +236,7 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 
     @Override
     public List<TeacherBasicDto> findTeachers(String organId) {
-		List<Teacher> teacherList = teacherDao.findByFlowOrganRange(null);
-		if(StringUtils.isNotEmpty(organId)){
-			Set<String> list = new HashSet<>(Arrays.asList(organId.split(",")));
-			teacherList = teacherList.stream().
-					filter(teacher -> !Collections.disjoint(new ArrayList<>(Arrays.asList(teacher.getFlowOrganRange().split(","))),list)).collect(Collectors.toList());
-		}
-		List<Integer> userIds = teacherList.stream().map(e -> e.getId()).collect(Collectors.toList());
-		if(userIds != null && userIds.size() > 0){
-			return teacherDao.findTeachers(userIds);
-		}
-		return new ArrayList<>();
+		return teacherDao.findByFlowOrganRangeTeachers(organId);
     }
 
 	@Override
@@ -422,21 +412,6 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 	public PageInfo<Teacher> queryPageDetail(TeacherQueryInfo queryInfo) {
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
-		List<Teacher> teacherList = teacherDao.findByFlowOrganRange(params);
-		if(teacherList == null || teacherList.size() < 1){
-			return new PageInfo<>();
-		}
-		if(StringUtils.isNotEmpty(queryInfo.getOrganId())){
-			Set<String> list = new HashSet<>(Arrays.asList(queryInfo.getOrganId().split(",")));
-			teacherList = teacherList.stream().
-					filter(teacher -> !Collections.disjoint(new ArrayList<>(Arrays.asList(teacher.getFlowOrganRange().split(","))),list)).collect(Collectors.toList());
-		}
-		List<Integer> collect = teacherList.stream().map(e -> e.getId()).collect(Collectors.toList());
-		if(collect == null || collect.size() < 1){
-			return new PageInfo<>();
-		}
-		queryInfo.setTeacherId(collect);
-
 		PageInfo<Teacher> pageInfo = queryPage(queryInfo);
 		List<Teacher> rows = pageInfo.getRows();
 		if(rows != null && rows.size() > 0){

+ 104 - 85
mec-biz/src/main/resources/config/mybatis/MusicGroupQuitMapper.xml

@@ -3,97 +3,116 @@
 <!-- 这个文件是自动生成的。 不要修改此文件。所有改动将在下次重新自动生成时丢失。 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.MusicGroupQuitDao">
 
-	<resultMap type="com.ym.mec.biz.dal.entity.MusicGroupQuit"
-		id="MusicGroupQuit">
-		<result column="id_" property="id" />
-		<result column="user_id_" property="userId" />
-		<result column="music_group_id_" property="musicGroupId" />
-		<result column="join_date_" property="joinDate" />
-		<result column="quit_date_" property="quitDate" />
-		<result column="create_time_" property="createTime" />
-		<result column="reason_" property="reason" />
-		<result column="status_" property="status"
-			typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
-	</resultMap>
+    <resultMap type="com.ym.mec.biz.dal.entity.MusicGroupQuit"
+               id="MusicGroupQuit">
+        <result column="id_" property="id"/>
+        <result column="user_id_" property="userId"/>
+        <result column="music_group_id_" property="musicGroupId"/>
+        <result column="join_date_" property="joinDate"/>
+        <result column="quit_date_" property="quitDate"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="reason_" property="reason"/>
+        <result column="status_" property="status"
+                typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+    </resultMap>
 
-	<!-- 根据主键查询一条记录 -->
-	<select id="get" resultMap="MusicGroupQuit">
-		SELECT * FROM
-		music_group_quit WHERE id_ = #{id}
-	</select>
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="MusicGroupQuit">
+        SELECT *
+        FROM music_group_quit
+        WHERE id_ = #{id}
+    </select>
 
-	<!-- 全查询 -->
-	<select id="findAll" resultMap="MusicGroupQuit">
-		SELECT * FROM music_group_quit
-		ORDER BY id_
-	</select>
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="MusicGroupQuit">
+        SELECT *
+        FROM music_group_quit
+        ORDER BY id_
+    </select>
 
-	<!-- 向数据库增加一条记录 -->
-	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit"
-		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
-			AS ID FROM DUAL </selectKey> -->
-		INSERT INTO music_group_quit
-		(id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,status_)
-		VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
-	</insert>
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit"
+            useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+        <!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval
+            AS ID FROM DUAL </selectKey> -->
+        INSERT INTO music_group_quit
+        (id_,user_id_,music_group_id_,join_date_,quit_date_,create_time_,reason_,status_)
+        VALUES(#{id},#{userId},#{musicGroupId},#{joinDate},#{quitDate},#{createTime},#{reason},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+    </insert>
 
-	<!-- 根据主键查询一条记录 -->
-	<update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit">
-		UPDATE music_group_quit
-		<set>
-			<if test="userId != null">
-				user_id_ = #{userId},
-			</if>
-			<if test="id != null">
-				id_ = #{id},
-			</if>
-			<if test="joinDate != null">
-				join_date_ = #{joinDate},
-			</if>
-			<if test="reason != null">
-				reason_ = #{reason},
-			</if>
-			<if test="quitDate != null">
-				quit_date_ = #{quitDate},
-			</if>
-			<if test="musicGroupId != null">
-				music_group_id_ = #{musicGroupId},
-			</if>
-			<if test="createTime != null">
-				create_time_ = #{createTime},
-			</if>
-			<if test="status != null">
-				status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-			</if>
-		</set>
-		WHERE id_ = #{id}
-	</update>
+    <!-- 根据主键查询一条记录 -->
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupQuit">
+        UPDATE music_group_quit
+        <set>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
+            <if test="id != null">
+                id_ = #{id},
+            </if>
+            <if test="joinDate != null">
+                join_date_ = #{joinDate},
+            </if>
+            <if test="reason != null">
+                reason_ = #{reason},
+            </if>
+            <if test="quitDate != null">
+                quit_date_ = #{quitDate},
+            </if>
+            <if test="musicGroupId != null">
+                music_group_id_ = #{musicGroupId},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="status != null">
+                status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+        </set>
+        WHERE id_ = #{id}
+    </update>
 
-	<!-- 根据主键删除一条记录 -->
-	<delete id="delete">
-		DELETE FROM music_group_quit WHERE id_ =
-		#{id}
-	</delete>
+    <!-- 根据主键删除一条记录 -->
+    <delete id="delete">
+        DELETE
+        FROM music_group_quit
+        WHERE id_ =
+              #{id}
+    </delete>
 
-	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="MusicGroupQuit" parameterType="map">
-		SELECT * FROM music_group_quit ORDER BY id_
-		<include refid="global.limit" />
-	</select>
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="MusicGroupQuit" parameterType="map">
+        SELECT * FROM music_group_quit ORDER BY id_
+        <include refid="global.limit"/>
+    </select>
 
-	<!-- 查询当前表的总记录数 -->
-	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM
-		music_group_quit
-	</select>
-	<select id="countMusicGroupQuitNum" resultType="int">
-		SELECT COUNT( * )
-		FROM music_group_quit
-		WHERE music_group_id_=#{musicGroupId} AND status_='APPROVED'
-	</select>
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM music_group_quit
+    </select>
+    <select id="countMusicGroupQuitNum" resultType="int">
+        SELECT COUNT(*)
+        FROM music_group_quit
+        WHERE music_group_id_ = #{musicGroupId}
+          AND status_ = 'APPROVED'
+    </select>
 
-	<select id="getUserMusicQuit" resultMap="MusicGroupQuit">
-		SELECT * FROM music_group_quit WHERE user_id_=#{userId} AND status_='APPROVED' ORDER BY id_ ASC
-	</select>
+    <select id="getUserMusicQuit" resultMap="MusicGroupQuit">
+        SELECT *
+        FROM music_group_quit
+        WHERE user_id_ = #{userId}
+          AND status_ = 'APPROVED'
+        ORDER BY id_ ASC
+    </select>
+
+    <select id="getQuits" resultMap="MusicGroupQuit">
+        SELECT * FROM music_group_quit WHERE id_ IN (
+        SELECT MAX(id_) FROM music_group_quit WHERE music_group_id_=#{musicGroupId} AND user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+        GROUP BY user_id_
+        )
+    </select>
 </mapper>

+ 11 - 1
mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml

@@ -481,7 +481,7 @@
         FROM student_payment_order spo
                  LEFT JOIN sell_order so on so.order_id_ = spo.id_
         WHERE spo.status_ = 'SUCCESS'
-          AND spo.group_type_ ='GOODS_SELL'
+          AND spo.group_type_ = 'GOODS_SELL'
           AND spo.create_time_ >= #{startTime}
           AND spo.create_time_ <= #{endTime}
         GROUP BY spo.organ_id_, so.cooperation_organ_id_
@@ -586,4 +586,14 @@
             #{sellOrderId}
         </foreach>
     </select>
+
+    <select id="getFeeByType" resultType="com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto">
+        SELECT MAX(spo.expect_amount_)                                expectAmount,
+               SUM(IF(g.type_ = 'INSTRUMENT', so.expect_amount_, 0))  musicalFee,
+               SUM(IF(g.type_ != 'INSTRUMENT', so.expect_amount_, 0)) teachingFee
+        FROM student_payment_order spo
+                 LEFT JOIN sell_order so ON spo.id_ = so.order_id_
+                 LEFT JOIN goods g ON g.id_ = so.goods_id_
+        WHERE spo.id_ = #{orderId}
+    </select>
 </mapper>

+ 9 - 7
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -542,7 +542,7 @@
     </select>
     <sql id="exportStudentAttendancesQueryPageSql">
         <where>
-            <if test="organId != null">
+            <if test="organId != null and organId != ''">
                 AND FIND_IN_SET(cs.organ_id_,#{organId})
             </if>
             <if test="groupType != null">
@@ -558,14 +558,15 @@
     </sql>
     <select id="exportStudentAttendancesQueryPage"
             resultMap="ExportStudentAttendanceDtoMap">
-        SELECT o.name_ organ_name_,o.id_ organ_id_,cs.music_group_id_,mg.name_ music_group_name_,su.username_,cssp.user_id_,
-        cs.name_ course_schedule_name_,cs.id_ course_schedule_id_,
-        cs.class_date_,cs.start_class_time_,cs.end_class_time_,su2.real_name_ guide_teacher_name_,st.teacher_id_ guide_teacher_id_
-        ,su1.real_name_ educational_teacher_name_,mg.educational_teacher_id_,cs.group_type_,
-        CASE WHEN sa.id_ IS NULL THEN 'TRUANT' ELSE sa.status_ END attendance_status_
+        SELECT MAX(o.name_) organ_name_,MAX(o.id_) organ_id_,MAX(cs.music_group_id_) music_group_id_,MAX(mg.name_) music_group_name_,MAX(su.username_) username_,MAX(cssp.user_id_) user_id_,
+        MAX(cs.name_) course_schedule_name_,MAX(cs.id_) course_schedule_id_,
+        MAX(cs.class_date_) class_date_,MAX(cs.start_class_time_) start_class_time_,MAX(cs.end_class_time_) end_class_time_,
+        MAX(su2.real_name_) guide_teacher_name_,MAX(st.teacher_id_) guide_teacher_id_
+        ,MAX(su1.real_name_) educational_teacher_name_,MAX(mg.educational_teacher_id_) educational_teacher_id_,MAX(cs.group_type_) group_type_,
+        CASE WHEN MAX(sa.id_) IS NULL THEN 'TRUANT' ELSE MAX(sa.status_) END attendance_status_
         FROM course_schedule_student_payment cssp
         LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-        LEFT JOIN student_attendance sa ON cssp.course_schedule_id_ = sa.course_schedule_id_
+        LEFT JOIN student_attendance sa ON cssp.course_schedule_id_ = sa.course_schedule_id_ AND sa.user_id_ = cssp.user_id_
         <if test="groupType == 'MUSIC'">
             LEFT JOIN music_group mg ON mg.id_ = cssp.music_group_id_
         </if>
@@ -581,6 +582,7 @@
         LEFT JOIN sys_user su ON su.id_ = cssp.user_id_
         LEFT JOIN sys_user su2 ON su2.id_ = st.teacher_id_
         <include refid="exportStudentAttendancesQueryPageSql"/>
+        GROUP BY cssp.id_
         ORDER BY cssp.music_group_id_ DESC,cssp.id_ DESC
         <include refid="global.limit"/>
     </select>

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

@@ -281,7 +281,7 @@
                 AND cs.status_ = #{courseScheduleStatus}
             </if>
             <if test="organId != null and organId != ''">
-                AND FIND_IN_SET(t.organ_id_,#{organId})
+                AND FIND_IN_SET(cs.organ_id_,#{organId})
             </if>
         </where>
     </sql>

+ 37 - 47
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -279,9 +279,9 @@
     <select id="queryPage" resultMap="Teacher" parameterType="map">
         SELECT t.id_,su.real_name_,su.lock_flag_,t.subject_id_,su.phone_,t.organ_id_ teacher_organ_id_,t.organ_id_,t.is_support_extra_practice_lesson_,
         t.job_nature_,t.is_probation_period_,t.memo_,GROUP_CONCAT(s.name_) subject_name_,su.del_flag_
-        FROM teacher t LEFT JOIN sys_user su ON t.id_ = su.id_
+        FROM teacher t
+        LEFT JOIN sys_user su ON t.id_ = su.id_
         LEFT JOIN `subject` s ON FIND_IN_SET(s.id_,t.subject_id_)
-        WHERE su.del_flag_ = 0
         <include refid="queryPageMap"/>
         GROUP BY t.id_
         ORDER BY t.id_ DESC
@@ -291,26 +291,40 @@
     <select id="queryCount" resultType="int">
         SELECT COUNT(DISTINCT t.id_)
         FROM teacher t LEFT JOIN sys_user su ON t.id_ = su.id_
-        WHERE su.del_flag_ = 0
         <include refid="queryPageMap"/>
     </select>
 
     <sql id="queryPageMap">
-        <if test="lockFlag != null">
-            AND su.lock_flag_ = #{lockFlag}
-        </if>
-        <if test="teacherId != null">
-            AND t.id_ IN
-            <foreach collection="teacherId" separator="," open="(" close=")" item="item">
-                #{item}
-            </foreach>
-        </if>
-        <if test="search != null">
-            AND (su.real_name_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%') OR t.id_ = #{search})
-        </if>
-        <if test="isSupportExtraPracticeLesson != null">
-            AND is_support_extra_practice_lesson_ = #{isSupportExtraPracticeLesson}
-        </if>
+        <where>
+            su.del_flag_ = 0
+            <if test="organId != null and organId != ''">
+                AND (INTE_ARRAY(#{organId},t.flow_organ_range_) OR FIND_IN_SET(t.organ_id_,#{organId}))
+            </if>
+            <if test="subjectId != null">
+                AND FIND_IN_SET(#{subjectId},t.subject_id_)
+            </if>
+            <if test="jobNature != null">
+                AND t.job_nature_ = #{jobNature}
+            </if>
+            <if test="isProbationPeriod != null">
+                AND t.is_probation_period_ = #{isProbationPeriod}
+            </if>
+            <if test="isSupportExtraPracticeLesson != null">
+                AND t.is_support_extra_practice_lesson_ = #{isSupportExtraPracticeLesson}
+            </if>
+            <if test="lockFlag != null">
+                AND su.lock_flag_ = #{lockFlag}
+            </if>
+            <if test="teacherId != null">
+                AND t.id_ IN
+                <foreach collection="teacherId" separator="," open="(" close=")" item="item">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="search != null">
+                AND (su.real_name_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%') OR t.id_ = #{search})
+            </if>
+        </where>
     </sql>
 
     <!-- 根据证件号查询老师 -->
@@ -361,18 +375,6 @@
         <result property="subjectNames" column="subject_names_"/>
         <result property="introduction" column="introduction_"/>
     </resultMap>
-    <select id="findTeachers" resultMap="TeacherBasicDto">
-        SELECT su.id_,su.username_,su.real_name_,t.organ_id_ FROM sys_user su
-        LEFT JOIN teacher t ON su.id_=t.id_
-        <where>
-            <if test="userIds != null">
-                su.id_ IN
-                <foreach collection="userIds" separator="," open="(" close=")" item="item">
-                    #{item}
-                </foreach>
-            </if>
-        </where>
-    </select>
 
     <select id="findSimpleTeachers" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
         SELECT su.id_ userId,su.real_name_ userName FROM sys_user su
@@ -759,23 +761,10 @@
                 and FIND_IN_SET(organ_id_,#{organId})
             </if>
     </select>
-    <select id="findByFlowOrganRange" resultMap="Teacher">
-        SELECT id_,CONCAT(IF(flow_organ_range_ IS NULL OR flow_organ_range_ = '',0,flow_organ_range_),",",
-        IF(organ_id_ IS NULL OR organ_id_ = '',0,organ_id_)) flow_organ_range_ FROM teacher t
-        <where>
-            <if test="subjectId != null">
-                AND FIND_IN_SET(#{subjectId},t.subject_id_)
-            </if>
-            <if test="jobNature != null">
-                AND t.job_nature_ = #{jobNature}
-            </if>
-            <if test="isProbationPeriod != null">
-                AND t.is_probation_period_ = #{isProbationPeriod}
-            </if>
-            <if test="isSupportExtraPracticeLesson != null">
-                AND t.is_support_extra_practice_lesson_ = #{isSupportExtraPracticeLesson}
-            </if>
-        </where>
+    <select id="findByFlowOrganRangeTeachers" resultMap="TeacherBasicDto">
+        SELECT su.id_,su.username_,su.real_name_,t.organ_id_ FROM teacher t
+        LEFT JOIN sys_user su ON t.id_ = su.id_
+        WHERE su.del_flag_ = 0 AND (INTE_ARRAY(#{organId},t.flow_organ_range_) OR FIND_IN_SET(t.organ_id_,#{organId}))
     </select>
 
     <select id="findByTeacherIds" resultMap="Teacher">
@@ -1212,4 +1201,5 @@
         gender_,user_type_
         FROM sys_user WHERE phone_ = #{phone}
     </select>
+
 </mapper>

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

@@ -107,6 +107,8 @@ public class ExportController extends BaseController {
     private MusicGroupBuildLogDao musicGroupBuildLogDao;
     @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+    @Autowired
+    private SellOrderDao sellOrderDao;
 
     @ApiOperation(value = "学员考勤记录导出")
     @PostMapping("export/exportStudentAttendances")
@@ -135,7 +137,7 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部编号", "分部名称", "课程组类型", "课程组编号", "课程组名称", "学员姓名",
-                    "学员编号", "课程编号", "课程名称", "上课日期", "上课开始时间","上课结束时间","指导老师名称","指导老师编号","教务老师名称","教务老师编号","学员考勤状态"}, new String[]{
+                    "学员编号", "课程编号", "课程名称", "上课日期", "上课开始时间", "上课结束时间", "指导老师名称", "指导老师编号", "教务老师名称", "教务老师编号", "学员考勤状态"}, new String[]{
                     "organId", "organName", "groupType.desc", "groupId", "groupName", "username",
                     "userId", "courseScheduleId", "courseScheduleName", "classDate", "startClassTime", "endClassTime", "guideTeacherName", "guideTeacherId"
                     , "educationalTeacherName", "educationalTeacherId", "studentAttendanceStatus.msg"}, rows);
@@ -937,14 +939,7 @@ public class ExportController extends BaseController {
             row.setMemo(goodsName);
             row.setHighOnlineCourseFee(highOnlineCourseFee);
             //专业
-            if (row.getGroupType().equals(GroupType.MUSIC)) {
-                StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
-                if (studentRegistration != null) {
-                    row.setSubjectName(studentRegistration.getSubjectName());
-                    row.setSchoolName(studentRegistration.getSchoolName());
-                    row.setCooperationOrganName(studentRegistration.getRemark());
-                }
-            } else if (row.getGroupType().equals(GroupType.VIP)) {
+            if (row.getGroupType().equals(GroupType.VIP)) {
                 row.setCourseFee(row.getActualAmount());
                 VipGroup vipGroupInfo = vipGroupDao.findVipGroupInfo(Integer.parseInt(row.getMusicGroupId()), row.getClassGroupId());
                 if (vipGroupInfo != null) {
@@ -976,6 +971,25 @@ public class ExportController extends BaseController {
                 if (practiceGroup != null) {
                     row.setSubjectName(practiceGroup.getSubjectName());
                 }
+            } else {
+                StudentPaymentOrderExportDto feeByType = sellOrderDao.getFeeByType(row.getId());
+                row.setMusicalFee(feeByType.getMusicalFee());
+                row.setTeachingFee(feeByType.getTeachingFee());
+                if (row.getGroupType().equals(GroupType.MUSIC)) {
+                    StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
+                    if (studentRegistration != null) {
+                        row.setSubjectName(studentRegistration.getSubjectName());
+                        row.setSchoolName(studentRegistration.getSchoolName());
+                        row.setCooperationOrganName(studentRegistration.getRemark());
+                    }
+                    if (row.getCourseFee().compareTo(BigDecimal.ZERO) == 0) {
+                        row.setCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                    }
+                } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
+                    row.setRepairFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
+                    row.setCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                }
             }
             String paymentChannel = "";
             if (row.getPaymentChannel() == null) {
@@ -993,9 +1007,9 @@ public class ExportController extends BaseController {
 
         try {
             String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "到账时间",
-                    "关联乐团ID/VIP课ID", "课程形态", "课程费用", "新生专享课程费用", "乐器减免费用", "课程减免费用", "押金", "乐器", "教辅费用", "零星收款费用", "零星收款类别", "手续费", "专业", "分部", "单位/学校", "合作机构", "备注"};
+                    "关联乐团ID/VIP课ID", "课程形态", "课程费用", "新生专享课程费用", "乐器减免费用", "课程减免费用", "押金", "乐器", "教辅费用", "维修费用", "零星收款费用", "零星收款类别", "手续费", "专业", "分部", "单位/学校", "合作机构", "备注"};
             String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "payTime", "musicGroupId",
-                    "groupType.desc", "courseFee", "highOnlineCourseFee", "remitFee", "courseRemitFee", "leaseFee", "musicalFee", "teachingFee", "sporadicAmount", "sporadicType", "transferFee", "subjectName", "organName", "schoolName", "cooperationOrganName", "memo"};
+                    "groupType.desc", "courseFee", "highOnlineCourseFee", "remitFee", "courseRemitFee", "leaseFee", "musicalFee", "teachingFee", "repairFee", "sporadicAmount", "sporadicType", "transferFee", "subjectName", "organName", "schoolName", "cooperationOrganName", "memo"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
@@ -1270,7 +1284,7 @@ public class ExportController extends BaseController {
         Set<Integer> studentIds = vipGroupExports.stream().map(CourseGroupExportDto::getStudentId).collect(Collectors.toSet());
         List<Map<Integer, Date>> studentLastCourseSchedule = courseScheduleStudentPaymentDao.findStudentLastCourseSchedule(new ArrayList<>(studentIds));
         Map<Integer, String> studentLastCourseMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(studentLastCourseSchedule)){
+        if (!CollectionUtils.isEmpty(studentLastCourseSchedule)) {
             studentLastCourseMap = MapUtil.convertMybatisMap(studentLastCourseSchedule);
         }
         List<CourseGroupExportDto> studentCourseInfos = courseScheduleDao.getStudentVipCourseInfo(studentIds);
@@ -1279,7 +1293,7 @@ public class ExportController extends BaseController {
         for (CourseGroupExportDto vipGroupExport : vipGroupExports) {
 
             String lastClassDateStr = studentLastCourseMap.get(vipGroupExport.getStudentId());
-            if(StringUtils.isNotBlank(lastClassDateStr)){
+            if (StringUtils.isNotBlank(lastClassDateStr)) {
                 vipGroupExport.setLastClassDate(DateUtil.stringToDate(lastClassDateStr));
             }
 
@@ -2005,14 +2019,7 @@ public class ExportController extends BaseController {
             row.setLeaseFee(leaseFee);
             row.setMemo(goodsName);
             //专业
-            if (row.getGroupType().equals(GroupType.MUSIC)) {
-                StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
-                if (studentRegistration != null) {
-                    row.setSubjectName(studentRegistration.getSubjectName());
-                    row.setSchoolName(studentRegistration.getSchoolName());
-                    row.setCooperationOrganName(studentRegistration.getRemark());
-                }
-            } else if (row.getGroupType().equals(GroupType.VIP)) {
+            if (row.getGroupType().equals(GroupType.VIP)) {
                 row.setCourseFee(row.getActualAmount());
                 VipGroup vipGroupInfo = vipGroupDao.findVipGroupInfo(Integer.parseInt(row.getMusicGroupId()), row.getClassGroupId());
                 if (vipGroupInfo != null) {
@@ -2025,27 +2032,9 @@ public class ExportController extends BaseController {
                 row.setMusicalFee(BigDecimal.ZERO);
                 row.setTeachingFee(BigDecimal.ZERO);
                 if (row.getChargeType() != null) {
-
-                    if (row.getChargeType().equals(1)) {
-                        row.setSporadicType("考级");
-                    } else if (row.getChargeType().equals(2)) {
-                        row.setSporadicType("声部更改");
-                    } else if (row.getChargeType().equals(3)) {
-                        row.setSporadicType("乐器更换");
-                    } else if (row.getChargeType().equals(4)) {
-                        row.setSporadicType("配件销售");
-                    } else if (row.getChargeType().equals(5)) {
-                        row.setSporadicType("维修费");
-                    } else if (row.getChargeType().equals(6)) {
-                        row.setSporadicType("福袋活动");
-                    } else if (row.getChargeType().equals(7)) {
-                        row.setSporadicType("上门费");
-                    } else if (row.getChargeType().equals(9)) {
-                        row.setSporadicType("账户充值");
-                    } else if (row.getChargeType().equals(10)) {
-                        row.setSporadicType("乐保服务");
-                    } else if (row.getChargeType().equals(11)) {
-                        row.setSporadicType("其他");
+                    for (SporadicChargeTypeEnum chargeType : SporadicChargeTypeEnum.values()) {
+                        if (!chargeType.getCode().equals(row.getChargeType())) continue;
+                        row.setSporadicType(chargeType.getMsg());
                     }
                 }
                 School userSchool = musicGroupDao.findUserSchool(row.getUserId());
@@ -2062,6 +2051,25 @@ public class ExportController extends BaseController {
                 if (practiceGroup != null) {
                     row.setSubjectName(practiceGroup.getSubjectName());
                 }
+            }else {
+                StudentPaymentOrderExportDto feeByType = sellOrderDao.getFeeByType(row.getId());
+                row.setMusicalFee(feeByType.getMusicalFee());
+                row.setTeachingFee(feeByType.getTeachingFee());
+                if (row.getGroupType().equals(GroupType.MUSIC)) {
+                    StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
+                    if (studentRegistration != null) {
+                        row.setSubjectName(studentRegistration.getSubjectName());
+                        row.setSchoolName(studentRegistration.getSchoolName());
+                        row.setCooperationOrganName(studentRegistration.getRemark());
+                    }
+                    if (row.getCourseFee().compareTo(BigDecimal.ZERO) == 0) {
+                        row.setCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                    }
+                } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
+                    row.setRepairFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
+                    row.setCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                }
             }
             String paymentChannel = "";
             if (row.getPaymentChannel() == null) {
@@ -2079,9 +2087,9 @@ public class ExportController extends BaseController {
 
         try {
             String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分润余额", "到账时间",
-                    "关联乐团ID/VIP课ID", "课程形态", "课程费用", "减免费用", "押金", "乐器", "教辅费用", "零星收款费用", "零星收款类别", "手续费", "专业", "分部", "单位/学校", "合作机构", "备注"};
+                    "关联乐团ID/VIP课ID", "课程形态", "课程费用", "减免费用", "押金", "乐器", "教辅费用", "维修费用", "零星收款费用", "零星收款类别", "手续费", "专业", "分部", "单位/学校", "合作机构", "备注"};
             String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance", "payTime", "musicGroupId",
-                    "groupType.desc", "courseFee", "remitFee", "leaseFee", "musicalFee", "teachingFee", "sporadicAmount", "sporadicType", "transferFee", "subjectName", "organName", "schoolName", "cooperationOrganName", "memo"};
+                    "groupType.desc", "courseFee", "remitFee", "leaseFee", "musicalFee", "teachingFee","repairFee", "sporadicAmount", "sporadicType", "transferFee", "subjectName", "organName", "schoolName", "cooperationOrganName", "memo"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls"); //    //收款账户