Pārlūkot izejas kodu

订单导出修改

周箭河 4 gadi atpakaļ
vecāks
revīzija
1ff70738ba

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

@@ -38,7 +38,7 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     //乐团课程费用
     private BigDecimal musicGroupCourseFee = BigDecimal.ZERO;
     //网络基础训练课程费用
-    private BigDecimal HighCourseFee = BigDecimal.ZERO;
+    private BigDecimal highCourseFee = BigDecimal.ZERO;
     //VIP课程费用
     private BigDecimal vipCourseFee = BigDecimal.ZERO;
     //网管课程费用
@@ -231,11 +231,11 @@ public class StudentPaymentOrderExportDto extends StudentPaymentOrder {
     }
 
     public BigDecimal getHighCourseFee() {
-        return HighCourseFee;
+        return highCourseFee;
     }
 
     public void setHighCourseFee(BigDecimal highCourseFee) {
-        HighCourseFee = highCourseFee;
+        this.highCourseFee = highCourseFee;
     }
 
     public BigDecimal getVipCourseFee() {

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

@@ -594,7 +594,9 @@
     <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_ IS NULL || g.type_ != 'INSTRUMENT',IFNULL(so.expect_amount_,0), 0)) teachingFee
+               SUM(IF((g.type_ = 'ACCESSORIES' || g.type_ = 'TEACHING' || g.type_ = 'STAFF')  AND g.name_ !='乐器维护',IFNULL(so.expect_amount_,0), 0)) teachingFee,
+               SUM(IF((g.type_ = 'ACCESSORIES' || g.type_ = 'TEACHING' || g.type_ = 'STAFF')  AND g.name_ ='乐器维护',IFNULL(so.expect_amount_,0), 0)) repairFee,
+               SUM(IF((g.type_= 'OTHER' || g.type_ IS NULL) ,IFNULL(so.expect_amount_,0), 0)) otherFee
         FROM student_payment_order spo
                  LEFT JOIN sell_order so ON spo.id_ = so.order_id_
                  LEFT JOIN goods g ON IF(so.parent_goods_id_ IS NOT NULL,g.id_ = so.parent_goods_id_,g.id_ = so.goods_id_)

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

@@ -313,15 +313,15 @@ public class ExportController extends BaseController {
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
         }
-        if(!sysUser.getIsSuperAdmin()){
+        if (!sysUser.getIsSuperAdmin()) {
             Employee employee = employeeDao.get(sysUser.getId());
             if (StringUtils.isEmpty(queryInfo.getOrganId())) {
                 queryInfo.setOrganId(employee.getOrganIdList());
-            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
                 throw new BizException("用户所在分部异常");
-            }else {
+            } else {
                 List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
                     throw new BizException("非法请求");
                 }
             }
@@ -331,7 +331,7 @@ public class ExportController extends BaseController {
         List<MusicGroupPaymentCalenderAuditDto> rows = musicGroupPaymentCalenderService.auditList(queryInfo).getRows();
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称","分部编号","乐团编号", "乐团名称", "申请类型", "订单类型", "加课总时长(分钟)", "原现价(元)",
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "分部编号", "乐团编号", "乐团名称", "申请类型", "订单类型", "加课总时长(分钟)", "原现价(元)",
                     "申请价格(元)", "备注", "申请人", "状态", "申请时间"}, new String[]{
                     "organName", "organId", "musicGroupId", "musicGroupName", "paymentType.desc", "payUserType.desc",
                     "addCourseTotalTime", "courseCurrentPrice", "courseOriginalPrice", "memo", "operatorName", "auditStatus.desc", "createTime"}, rows);
@@ -538,11 +538,11 @@ public class ExportController extends BaseController {
                     "课程分部", "课程组编号", "课程班名称", "乐团模式", "vip活动名称", "Vip课程类型", "阶梯奖励名称", "线上课/线下课", "线上课单价", "线下课单价",
                     "课程类别", "课时时长", "实际上课时长", "上课日期",
                     "上课时间", "教师签到状态", "教师签退状态", "教师签到时间", "教师签退时间", "考勤申诉处理状态", "处理意见",
-                    "主辅", "上课地点", "应到学员","学员签到时间", "学员签退时间", "课时课酬", "阶梯奖励", "扣款原因"}, new String[]{
+                    "主辅", "上课地点", "应到学员", "学员签到时间", "学员签退时间", "课时课酬", "阶梯奖励", "扣款原因"}, new String[]{
                     "courseScheduleId", "teacherId", "teacherName", "teacherOrganName", "jobType",
                     "courseScheduleOrganName", "groupId", "groupName", "changeType", "vipActiveName", "vipCategoryName", "activeName", "teachMode", "onlineClassesUnitPrice", "offlineClassesUnitPrice",
                     "courseScheduleType", "signCourseScheduleTime", "currentTime", "classDate", "courseScheduleStartTime", "signInStatus",
-                    "signOutStatus", "signInTime", "signOutTime","complaintsStatus", "disposeContent", "teacherRole", "address", "studentNum",
+                    "signOutStatus", "signInTime", "signOutTime", "complaintsStatus", "disposeContent", "teacherRole", "address", "studentNum",
                     "studentSignInTime", "studentSignOutTime", "price", "rewards", "deductionReason"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
@@ -815,16 +815,16 @@ public class ExportController extends BaseController {
             }
         }
         List<CourseScheduleEndDto> rows = scheduleService.endFindCourseSchedules(queryInfo).getRows();
-        for(CourseScheduleEndDto row : rows){
-        	row.setIsComplaints(StringUtils.equals(row.getIsComplaints(), "1") ? "有" : "无");
+        for (CourseScheduleEndDto row : rows) {
+            row.setIsComplaints(StringUtils.equals(row.getIsComplaints(), "1") ? "有" : "无");
         }
         OutputStream ouputStream = null;
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "课程编号", "开始时间", "结束时间",
                     "班级名称", "班级声部", "课程名称", "课程类型", "教学模式",
-                    "教学点", "课程状态", "指导老师", "学员编号", "是否点名","是否有考勤申诉"}, new String[]{
+                    "教学点", "课程状态", "指导老师", "学员编号", "是否点名", "是否有考勤申诉"}, new String[]{
                     "organName", "id", "startClassTime", "endClassTime", "classGroupName", "subjectName", "name",
-                    "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName", "studentId", "isCallNames.msg","isComplaints"}, rows);
+                    "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName", "studentId", "isCallNames.msg", "isComplaints"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             ouputStream = response.getOutputStream();
@@ -1057,40 +1057,21 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         long i = 1;
         for (StudentPaymentOrderExportDto row : studentPaymentOrderExportDtos) {
-            if (queryInfo.getOrderType().equals("1")) {
-                BigDecimal comAmount = row.getComAmount() == null ? BigDecimal.ZERO : row.getComAmount();
-                row.setActualAmount(comAmount);
-            } else if (queryInfo.getOrderType().equals("2")) {
-                BigDecimal perAmount = row.getPerAmount() == null ? BigDecimal.ZERO : row.getPerAmount();
-                row.setActualAmount(perAmount);
-            }
             if (row.getActualAmount() == null) {
                 row.setActualAmount(BigDecimal.ZERO);
             }
             if (row.getBalancePaymentAmount() == null) {
                 row.setBalancePaymentAmount(BigDecimal.ZERO);
             }
+            if (row.getMemo() == null) {
+                row.setMemo("");
+            }
             BigDecimal transferFee = (row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP);
             row.setTransferFee(transferFee);
-            BigDecimal musicalFee = BigDecimal.ZERO;
-            BigDecimal teachingFee = BigDecimal.ZERO;
-            BigDecimal courseFee = BigDecimal.ZERO;
-            BigDecimal leaseFee = BigDecimal.ZERO;
-            BigDecimal highOnlineCourseFee = BigDecimal.ZERO;
-
-            BigDecimal musicGroupCourseFee = BigDecimal.ZERO; //乐团课程费用
-            BigDecimal highCourseFee = BigDecimal.ZERO; //网络基础训练课程费用
-            BigDecimal vipCourseFee = BigDecimal.ZERO; //VIP课程费用
-            BigDecimal practiceCourseFee = BigDecimal.ZERO; //网管课程费用
-            BigDecimal theoryCourseFee = BigDecimal.ZERO; //乐理课程费用
-            BigDecimal degreeFee = BigDecimal.ZERO; //考级费用
-            BigDecimal repairFee = BigDecimal.ZERO; //维修费用
-            BigDecimal otherFee = BigDecimal.ZERO; //其它费用
-
             String goodsName = "";
             if (row.getOrderDetailList() != null) {
                 for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
-                    switch (orderDetail.getType()){
+                    switch (orderDetail.getType()) {
                         case COURSE:
                         case CLASSROOM:
                         case SINGLE:
@@ -1100,24 +1081,25 @@ public class ExportController extends BaseController {
                         case TRAINING_SINGLE:
                         case TRAINING_MIX:
                         case MUSIC_NETWORK:
-                            musicGroupCourseFee = musicGroupCourseFee.add(orderDetail.getPrice());
+                            row.setMusicGroupCourseFee(row.getMusicGroupCourseFee().add(orderDetail.getPrice()));
                             break;
                         case HIGH:
                         case HIGH_ONLINE:
-                            highCourseFee = highCourseFee.add(orderDetail.getPrice());
+                        case HIGH_ONLINE_COURSE:
+                            row.setHighCourseFee(row.getHighCourseFee().add(orderDetail.getPrice()));
                         case MUSICAL:
                             if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
-                                leaseFee = orderDetail.getPrice();
+                                row.setLeaseFee(orderDetail.getPrice());
                             } else {
-                                musicalFee = orderDetail.getPrice();
+                                row.setMusicalFee(orderDetail.getPrice());
                             }
                             break;
                         case ACCESSORIES:
                         case TEACHING:
-                            teachingFee = teachingFee.add(orderDetail.getPrice());
+                            row.setTeachingFee(row.getTeachingFee().add(orderDetail.getPrice()));
                             break;
                         case OTHER:
-                            otherFee = otherFee.add(orderDetail.getPrice());
+                            row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice()));
                         default:
                             break;
                     }
@@ -1126,12 +1108,9 @@ public class ExportController extends BaseController {
             if (row.getGoodsList() != null) {
                 goodsName = row.getGoodsList().stream().map(Goods::getName).collect(Collectors.joining("|"));
             }
-            row.setCourseFee(courseFee);
-            row.setMusicalFee(musicalFee);
-            row.setTeachingFee(teachingFee);
-            row.setLeaseFee(leaseFee);
-            row.setMemo(goodsName);
-            row.setHighOnlineCourseFee(highOnlineCourseFee);
+            if (StringUtils.isNotBlank(goodsName)) {
+                row.setMemo(goodsName);
+            }
             //专业
             if (row.getGroupType().equals(GroupType.VIP)) {
                 row.setVipCourseFee(row.getActualAmount());
@@ -1140,11 +1119,29 @@ public class ExportController extends BaseController {
                     row.setSchoolName(vipGroupInfo.getSchoolName());
                     row.setSubjectName(vipGroupInfo.getSubjectName());
                 }
-
             } else if (row.getGroupType().equals(GroupType.SPORADIC)) {
-                row.setSporadicAmount(row.getActualAmount());
-                row.setMusicalFee(BigDecimal.ZERO);
-                row.setTeachingFee(BigDecimal.ZERO);
+                //考级报名
+                if (row.getType().equals(OrderTypeEnum.DEGREE_REGISTRATION)) {
+                    String[] feeTypes = row.getMemo().split(";");
+                    List<String> feeTypeList = Arrays.asList(feeTypes);
+                    for (String feeTypeStr : feeTypeList) {
+                        int index = feeTypeStr.lastIndexOf(":");
+                        if (index < 0) {
+                            continue;
+                        }
+                        BigDecimal typeFee = new BigDecimal(feeTypeStr.substring(index + 1));
+                        if (feeTypeStr.contains("VIP")) {
+                            row.setVipCourseFee(typeFee);
+                        } else if (feeTypeStr.contains("网管课")) {
+                            row.setPracticeCourseFee(typeFee);
+                        } else if (feeTypeStr.contains("乐理课")) {
+                            row.setTheoryCourseFee(typeFee);
+                        }
+                    }
+                    row.setDegreeFee(row.getExpectAmount().subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()).subtract(row.getTheoryCourseFee()));
+                } else {
+                    row.setOtherFee(row.getExpectAmount());
+                }
                 if (row.getChargeType() != null) {
                     for (SporadicChargeTypeEnum chargeType : SporadicChargeTypeEnum.values()) {
                         if (!chargeType.getCode().equals(row.getChargeType())) continue;
@@ -1156,7 +1153,7 @@ public class ExportController extends BaseController {
                     row.setSchoolName(userSchool.getName());
                 }
             } else if (row.getGroupType().equals(GroupType.PRACTICE)) {
-                row.setCourseFee(row.getActualAmount());
+                row.setPracticeCourseFee(row.getActualAmount());
                 School userSchool = musicGroupDao.findUserSchool(row.getUserId());
                 if (userSchool != null) {
                     row.setSchoolName(userSchool.getName());
@@ -1169,6 +1166,8 @@ public class ExportController extends BaseController {
                 StudentPaymentOrderExportDto feeByType = sellOrderDao.getFeeByType(row.getId());
                 row.setMusicalFee(feeByType.getMusicalFee());
                 row.setTeachingFee(feeByType.getTeachingFee());
+                row.setRepairFee(feeByType.getRepairFee());
+                row.setOtherFee(feeByType.getOtherFee());
                 if (row.getGroupType().equals(GroupType.MUSIC)) {
                     StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
                     if (studentRegistration != null) {
@@ -1176,19 +1175,20 @@ public class ExportController extends BaseController {
                         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()));
-                    }
+                    row.setMusicGroupCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getRepairFee()).subtract(feeByType.getOtherFee()).subtract(row.getHighCourseFee()));
                 } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
-                    row.setRepairFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                    row.setRepairFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                 } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
-                    row.setCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                    row.setMusicGroupCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getRepairFee()).subtract(feeByType.getOtherFee()));
                     row.setTransferFee(BigDecimal.ZERO);
                 }
             }
+            if(row.getMusicGroupId()==null){
+                row.setMusicGroupId("");
+            }
             String paymentChannel = "";
-            if (row.getPaymentChannel() == null) {
-            } else if (row.getPaymentChannel().equals("YQPAY")) {
+            if(row.getPaymentChannel() == null) {
+            }else if (row.getPaymentChannel().equals("YQPAY")) {
                 paymentChannel = "双乾";
             } else if (row.getPaymentChannel().equals("ADAPAY")) {
                 paymentChannel = "汇付";
@@ -1201,10 +1201,10 @@ public class ExportController extends BaseController {
         }
 
         try {
-            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "创建时间", "到账时间",
-                    "关联乐团ID/VIP课ID", "课程形态", "课程费用", "网络基础训练", "乐器减免费用", "课程减免费用", "押金", "乐器", "教辅费用", "维修费用", "零星收款费用", "零星收款类别", "手续费", "专业", "分部", "单位/学校", "合作机构", "备注"};
-            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "createTime", "payTime", "musicGroupId",
-                    "groupType.desc", "courseFee", "highCourseFee", "remitFee", "courseRemitFee", "leaseFee", "musicalFee", "teachingFee", "repairFee", "sporadicAmount", "sporadicType", "transferFee", "subjectName", "organName", "schoolName", "cooperationOrganName", "memo"};
+            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "乐团课", "网络基础训练", "VIP课", "网管课", "乐理课", "考级", "维修费用", "押金", "乐器", "教辅费用", "其它", "手续费", "到账时间",
+                    "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "备注"};
+            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "musicGroupCourseFee", "highCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "leaseFee", "musicalFee", "teachingFee", "otherFee", "transferFee", "payTime", "musicGroupId",
+                    "groupType.desc", "sporadicType", "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");
@@ -1706,9 +1706,9 @@ public class ExportController extends BaseController {
                     row.setSignOutStatusStr(signOutTimeStr + "(异常签退)");
                 }
             }
-            if(row.getBelongDaya()==1){
+            if (row.getBelongDaya() == 1) {
                 row.setSalaryType("基本课酬");
-            }else{
+            } else {
                 row.setSalaryType("其它课酬");
             }
         }
@@ -2176,43 +2176,29 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         long i = 1;
         for (StudentPaymentOrderExportDto row : studentPaymentOrderExportDtos) {
-            if (queryInfo.getOrderType().equals("1")) {
-                BigDecimal comAmount = row.getComAmount() == null ? BigDecimal.ZERO : row.getComAmount();
-                row.setActualAmount(comAmount);
-            } else if (queryInfo.getOrderType().equals("2")) {
-                BigDecimal perAmount = row.getPerAmount() == null ? BigDecimal.ZERO : row.getPerAmount();
-                row.setActualAmount(perAmount);
-            }
             if (row.getActualAmount() == null) {
                 row.setActualAmount(BigDecimal.ZERO);
             }
             if (row.getBalancePaymentAmount() == null) {
                 row.setBalancePaymentAmount(BigDecimal.ZERO);
             }
-            BigDecimal transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP);
+            if (row.getRouteAmount() == null) {
+                row.setRouteAmount(BigDecimal.ZERO);
+            }
+            if (row.getMemo() == null) {
+                row.setMemo("");
+            }
+            BigDecimal transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
             String delayRouteStartDate = sysConfigDao.findConfigValue("delay_route_start_date");
             if (row.getCreateTime().after(Objects.requireNonNull(DateUtil.stringToDate(delayRouteStartDate, "yyyy-MM-dd HH:mm:ss")))) {
-                transferFee = row.getRouteAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100),2,BigDecimal.ROUND_HALF_UP);
+                transferFee = row.getRouteAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
             }
             row.setTransferFee(transferFee);
-            BigDecimal musicalFee = BigDecimal.ZERO; //乐器费用
-            BigDecimal teachingFee = BigDecimal.ZERO; //教辅费用
-            BigDecimal courseFee = BigDecimal.ZERO; //课程费用
-            BigDecimal leaseFee = BigDecimal.ZERO; //押金费用
-
-            BigDecimal musicGroupCourseFee = BigDecimal.ZERO; //乐团课程费用
-            BigDecimal highCourseFee = BigDecimal.ZERO; //网络基础训练课程费用
-            BigDecimal vipCourseFee = BigDecimal.ZERO; //VIP课程费用
-            BigDecimal practiceCourseFee = BigDecimal.ZERO; //网管课程费用
-            BigDecimal theoryCourseFee = BigDecimal.ZERO; //乐理课程费用
-            BigDecimal degreeFee = BigDecimal.ZERO; //考级费用
-            BigDecimal repairFee = BigDecimal.ZERO; //维修费用
-            BigDecimal otherFee = BigDecimal.ZERO; //其它费用
 
             String goodsName = "";
             if (row.getOrderDetailList() != null) {
                 for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
-                    switch (orderDetail.getType()){
+                    switch (orderDetail.getType()) {
                         case COURSE:
                         case CLASSROOM:
                         case SINGLE:
@@ -2222,25 +2208,25 @@ public class ExportController extends BaseController {
                         case TRAINING_SINGLE:
                         case TRAINING_MIX:
                         case MUSIC_NETWORK:
-                            musicGroupCourseFee = musicGroupCourseFee.add(orderDetail.getPrice());
+                            row.setMusicGroupCourseFee(row.getMusicGroupCourseFee().add(orderDetail.getPrice()));
                             break;
                         case HIGH:
                         case HIGH_ONLINE:
                         case HIGH_ONLINE_COURSE:
-                            highCourseFee = highCourseFee.add(orderDetail.getPrice());
+                            row.setHighCourseFee(row.getHighCourseFee().add(orderDetail.getPrice()));
                         case MUSICAL:
                             if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
-                                leaseFee = orderDetail.getPrice();
+                                row.setLeaseFee(orderDetail.getPrice());
                             } else {
-                                musicalFee = orderDetail.getPrice();
+                                row.setMusicalFee(orderDetail.getPrice());
                             }
                             break;
                         case ACCESSORIES:
                         case TEACHING:
-                            teachingFee = teachingFee.add(orderDetail.getPrice());
+                            row.setTeachingFee(row.getTeachingFee().add(orderDetail.getPrice()));
                             break;
                         case OTHER:
-                            otherFee = otherFee.add(orderDetail.getPrice());
+                            row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice()));
                         default:
                             break;
                     }
@@ -2249,12 +2235,9 @@ public class ExportController extends BaseController {
             if (row.getGoodsList() != null) {
                 goodsName = row.getGoodsList().stream().map(Goods::getName).collect(Collectors.joining("|"));
             }
-            row.setCourseFee(courseFee);
-            row.setMusicGroupCourseFee(musicGroupCourseFee);
-            row.setMusicalFee(musicalFee);
-            row.setTeachingFee(teachingFee);
-            row.setLeaseFee(leaseFee);
-            row.setMemo(goodsName);
+            if (StringUtils.isNotBlank(goodsName)) {
+                row.setMemo(goodsName);
+            }
             //专业
             if (row.getGroupType().equals(GroupType.VIP)) {
                 row.setVipCourseFee(row.getActualAmount());
@@ -2264,9 +2247,28 @@ public class ExportController extends BaseController {
                     row.setSubjectName(vipGroupInfo.getSubjectName());
                 }
             } else if (row.getGroupType().equals(GroupType.SPORADIC)) {
-                row.setSporadicAmount(row.getActualAmount());
-                row.setMusicalFee(BigDecimal.ZERO);
-                row.setTeachingFee(BigDecimal.ZERO);
+                //考级报名
+                if (row.getType().equals(OrderTypeEnum.DEGREE_REGISTRATION)) {
+                    String[] feeTypes = row.getMemo().split(";");
+                    List<String> feeTypeList = Arrays.asList(feeTypes);
+                    for (String feeTypeStr : feeTypeList) {
+                        int index = feeTypeStr.lastIndexOf(":");
+                        if (index < 0) {
+                            continue;
+                        }
+                        BigDecimal typeFee = new BigDecimal(feeTypeStr.substring(index + 1));
+                        if (feeTypeStr.contains("VIP")) {
+                            row.setVipCourseFee(typeFee);
+                        } else if (feeTypeStr.contains("网管课")) {
+                            row.setPracticeCourseFee(typeFee);
+                        } else if (feeTypeStr.contains("乐理课")) {
+                            row.setTheoryCourseFee(typeFee);
+                        }
+                    }
+                    row.setDegreeFee(row.getExpectAmount().subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()).subtract(row.getTheoryCourseFee()));
+                } else {
+                    row.setOtherFee(row.getExpectAmount());
+                }
                 if (row.getChargeType() != null) {
                     for (SporadicChargeTypeEnum chargeType : SporadicChargeTypeEnum.values()) {
                         if (!chargeType.getCode().equals(row.getChargeType())) continue;
@@ -2287,10 +2289,12 @@ public class ExportController extends BaseController {
                 if (practiceGroup != null) {
                     row.setSubjectName(practiceGroup.getSubjectName());
                 }
-            }else {
+            } else {
                 StudentPaymentOrderExportDto feeByType = sellOrderDao.getFeeByType(row.getId());
                 row.setMusicalFee(feeByType.getMusicalFee());
                 row.setTeachingFee(feeByType.getTeachingFee());
+                row.setRepairFee(feeByType.getRepairFee());
+                row.setOtherFee(feeByType.getOtherFee());
                 if (row.getGroupType().equals(GroupType.MUSIC)) {
                     StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
                     if (studentRegistration != null) {
@@ -2298,19 +2302,20 @@ public class ExportController extends BaseController {
                         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()));
-                    }
+                    row.setMusicGroupCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getRepairFee()).subtract(feeByType.getOtherFee()).subtract(row.getHighCourseFee()));
                 } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
-                    row.setRepairFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                    row.setRepairFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                 } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
-                    row.setMusicGroupCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()));
+                    row.setMusicGroupCourseFee(feeByType.getExpectAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getRepairFee()).subtract(feeByType.getOtherFee()));
                     row.setTransferFee(BigDecimal.ZERO);
                 }
             }
+            if(row.getMusicGroupId()==null){
+                row.setMusicGroupId("");
+            }
             String paymentChannel = "";
-            if (row.getPaymentChannel() == null) {
-            } else if (row.getPaymentChannel().equals("YQPAY")) {
+            if(row.getPaymentChannel() == null) {
+            }else if (row.getPaymentChannel().equals("YQPAY")) {
                 paymentChannel = "双乾";
             } else if (row.getPaymentChannel().equals("ADAPAY")) {
                 paymentChannel = "汇付";
@@ -2323,10 +2328,10 @@ public class ExportController extends BaseController {
         }
 
         try {
-            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分润余额", "到账时间",
-                    "关联乐团ID/VIP课ID", "课程形态", "课程费用", "减免费用", "押金", "乐器", "教辅费用", "维修费用", "零星收款费用", "零星收款类别", "手续费", "专业", "分部", "教学点", "合作单位", "备注"};
-            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance", "payTime", "musicGroupId",
-                    "groupType.desc", "musicGroupCourseFee", "remitFee", "leaseFee", "musicalFee", "teachingFee","repairFee", "sporadicAmount", "sporadicType", "transferFee", "subjectName", "organName", "schoolName", "cooperationOrganName", "memo"};
+            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分润余额", "乐团课", "网络基础训练", "VIP课", "网管课", "乐理课", "考级", "维修费用", "押金", "乐器", "教辅费用", "其它", "手续费", "到账时间",
+                    "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "备注"};
+            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance", "musicGroupCourseFee", "highCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "leaseFee", "musicalFee", "teachingFee", "otherFee", "transferFee", "payTime", "musicGroupId",
+                    "groupType.desc", "sporadicType", "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"); //    //收款账户
@@ -2374,12 +2379,12 @@ public class ExportController extends BaseController {
                     "基础技能课2.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","mainSingleSalary2", "mainMixSalary2", "mainComprehensiveSalary2", "mainTraningSigleSalary2", "mainTraningMixSalary2",
-                    "mainHighSalary2","mainClassroomSalary2", "mainSingleSalary", "mainMixSalary", "mainComprehensiveSalary", "mainTraningSigleSalary", "mainTraningMixSalary",
+                    "practiceSalary", "mainSingleSalary2", "mainMixSalary2", "mainComprehensiveSalary2", "mainTraningSigleSalary2", "mainTraningMixSalary2",
+                    "mainHighSalary2", "mainClassroomSalary2", "mainSingleSalary", "mainMixSalary", "mainComprehensiveSalary", "mainTraningSigleSalary", "mainTraningMixSalary",
                     "mainHighSalary",
                     "assistantSingleSalary2", "assistantMixSalary2", "assistantComprehensiveSalary2", "assistantTraningSigleSalary2", "assistantTraningMixSalary2",
-                    "assistantHighSalary2","assistantClassroomSalary2", "assistantSingleSalary", "assistantMixSalary", "assistantComprehensiveSalary", "assistantTraningSigleSalary", "assistantTraningMixSalary",
-                    "assistantHighSalary","highOnline3Salary", "highOnline4Salary", "highOnline5Salary", "musicNetwork1Salary"};
+                    "assistantHighSalary2", "assistantClassroomSalary2", "assistantSingleSalary", "assistantMixSalary", "assistantComprehensiveSalary", "assistantTraningSigleSalary", "assistantTraningMixSalary",
+                    "assistantHighSalary", "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");
@@ -2620,11 +2625,11 @@ public class ExportController extends BaseController {
         queryInfo.setRows(49999);
         List<SellOrder> rows = sellOrderService.queryPage(queryInfo).getRows();
         for (SellOrder row : rows) {
-            if(StringUtils.isNoneBlank(row.getPaymentChannel())){
+            if (StringUtils.isNoneBlank(row.getPaymentChannel())) {
                 row.setPaymentChannelStr(PaymentChannelEnum.valueOf(row.getPaymentChannel()).getDesc());
             }
-            row.setAccountTypeStr(AccountType.INTERNAL.equals(row.getAccountType())?"对内":"对外");
-            switch (row.getReceiveStatus()){
+            row.setAccountTypeStr(AccountType.INTERNAL.equals(row.getAccountType()) ? "对内" : "对外");
+            switch (row.getReceiveStatus()) {
                 case "NO_RECEIVE":
                     row.setReceiveStatusStr("未确认");
                     break;
@@ -2639,8 +2644,8 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{
-                    "交易流水号", "订单号", "销售日期", "销售类型", "商品名称", "数量","应付金额(元)", "余额支付(元)",
-                    "现金支付(元)", "销售成本(元)", "学员姓名","交易方式", "收款账户", "账户类型", "扣减库存", "所属分部",
+                    "交易流水号", "订单号", "销售日期", "销售类型", "商品名称", "数量", "应付金额(元)", "余额支付(元)",
+                    "现金支付(元)", "销售成本(元)", "学员姓名", "交易方式", "收款账户", "账户类型", "扣减库存", "所属分部",
                     "所属学校", "教务老师", "确认收货", "状态"}, new String[]{
                     "transNo", "orderNo", "sellTime", "type.desc", "goodsName", "num", "expectAmount", "balanceAmount",
                     "actualAmount", "sellCost", "userName", "paymentChannelStr", "merNo", "accountTypeStr", "stockType.msg", "organName",