浏览代码

update 修改财务管理下载、订单下载的方式

周箭河 4 年之前
父节点
当前提交
2d18e8d751

+ 22 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RouteScaleDto.java

@@ -23,6 +23,12 @@ public class RouteScaleDto {
 
     private BigDecimal balance = BigDecimal.ZERO;
 
+    //销售费用
+    private BigDecimal saleAmount = BigDecimal.ZERO;
+
+    //服务费用
+    private BigDecimal serviceAmount = BigDecimal.ZERO;
+
     public Integer getOrganId() {
         return organId;
     }
@@ -55,7 +61,6 @@ public class RouteScaleDto {
         this.feeFlag = feeFlag;
     }
 
-
     public Integer getScale() {
         return scale;
     }
@@ -87,4 +92,20 @@ public class RouteScaleDto {
     public void setBalance(BigDecimal balance) {
         this.balance = balance;
     }
+
+    public BigDecimal getSaleAmount() {
+        return saleAmount;
+    }
+
+    public void setSaleAmount(BigDecimal saleAmount) {
+        this.saleAmount = saleAmount;
+    }
+
+    public BigDecimal getServiceAmount() {
+        return serviceAmount;
+    }
+
+    public void setServiceAmount(BigDecimal serviceAmount) {
+        this.serviceAmount = serviceAmount;
+    }
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -13,4 +13,13 @@ public interface ExportService {
      * @throws Exception
      */
     void orderList(Map<String, Object> params, ManagerDownload managerDownload) throws Exception;
+
+
+    /**
+     * 财务管理下载
+     * @param params
+     * @param managerDownload
+     * @throws Exception
+     */
+    void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload) throws Exception;
 }

+ 212 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -85,7 +86,7 @@ public class ExportServiceImpl implements ExportService {
             }
             row.setTransferFee(transferFee);
 
-            String goodsName = "" ;
+            String goodsName = "";
             if (row.getOrderDetailList() != null) {
                 for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
                     switch (orderDetail.getType()) {
@@ -214,14 +215,14 @@ public class ExportServiceImpl implements ExportService {
             if (row.getMusicGroupId() != null && row.getMusicGroupId().equals("null")) {
                 row.setMusicGroupId("");
             }
-            String paymentChannel = "" ;
+            String paymentChannel = "";
             if (row.getPaymentChannel() == null) {
             } else if (row.getPaymentChannel().equals("YQPAY")) {
-                paymentChannel = "双乾" ;
+                paymentChannel = "双乾";
             } else if (row.getPaymentChannel().equals("ADAPAY")) {
-                paymentChannel = "汇付" ;
+                paymentChannel = "汇付";
             } else if (row.getPaymentChannel().equals("BALANCE")) {
-                paymentChannel = "余额" ;
+                paymentChannel = "余额";
             }
             row.setPaymentChannel(paymentChannel);
             row.setId(i);
@@ -261,4 +262,210 @@ public class ExportServiceImpl implements ExportService {
             }
         }
     }
+
+    @Override
+    public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload) throws Exception {
+        List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
+        long i = 1;
+        for (StudentPaymentOrderExportDto row : studentPaymentOrderExportDtos) {
+            if (row.getActualAmount() == null) {
+                row.setActualAmount(BigDecimal.ZERO);
+            }
+            if (row.getBalancePaymentAmount() == null) {
+                row.setBalancePaymentAmount(BigDecimal.ZERO);
+            }
+            if (row.getRouteAmount() == null) {
+                row.setRouteAmount(BigDecimal.ZERO);
+            }
+            if (row.getMemo() == null) {
+                row.setMemo("");
+            }
+            BigDecimal transferFee = BigDecimal.ZERO;
+            if (row.getPaymentChannel() != null && row.getPaymentChannel().equals("ADAPAY")) {
+                FeeFlagNumDto countFeeFlagNum = studentPaymentRouteOrderDao.getCountFeeFlagNum(row.getOrderNo());
+                if (countFeeFlagNum.getTotalNum() > countFeeFlagNum.getYesNum() && row.getFeeFlag().equals("Y")) {
+                    transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+                }
+                if (countFeeFlagNum.getTotalNum().equals(countFeeFlagNum.getYesNum())) {
+                    transferFee = row.getRouteAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
+                }
+            }
+            row.setTransferFee(transferFee);
+
+            String goodsName = "";
+            if (row.getOrderDetailList() != null) {
+                for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
+                    switch (orderDetail.getType()) {
+                        case COURSE:
+                        case CLASSROOM:
+                        case SINGLE:
+                        case MIX:
+                        case COMPREHENSIVE:
+                        case ENLIGHTENMENT:
+                        case TRAINING_SINGLE:
+                        case TRAINING_MIX:
+                        case MUSIC_NETWORK:
+                        case HIGH:
+                        case HIGH_ONLINE:
+                        case HIGH_ONLINE_COURSE:
+                            row.setMusicGroupCourseFee(row.getMusicGroupCourseFee().add(orderDetail.getPrice()));
+                            break;
+                        case MUSICAL:
+                            if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
+                                BigDecimal leaseFee = orderDetail.getPrice();
+                                if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                                    leaseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                                }
+                                row.setLeaseFee(leaseFee);
+                            } else {
+                                row.setMusicalFee(orderDetail.getPrice());
+                            }
+                            break;
+                        case ACCESSORIES:
+                        case TEACHING:
+                            row.setTeachingFee(row.getTeachingFee().add(orderDetail.getPrice()));
+                            break;
+                        case OTHER:
+                            row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice()));
+                        default:
+                            break;
+                    }
+                }
+            }
+            if (row.getGoodsList() != null) {
+                goodsName = row.getGoodsList().stream().map(Goods::getName).collect(Collectors.joining("|"));
+            }
+            if (StringUtils.isNotBlank(goodsName)) {
+                row.setMemo(goodsName);
+            }
+            //专业
+            if (row.getGroupType().equals(GroupType.VIP)) {
+                row.setVipCourseFee(row.getActualAmount());
+                VipGroup vipGroupInfo = vipGroupDao.findVipGroupInfo(Integer.parseInt(row.getMusicGroupId()), row.getClassGroupId());
+                if (vipGroupInfo != null) {
+                    row.setSchoolName(vipGroupInfo.getSchoolName());
+                    row.setSubjectName(vipGroupInfo.getSubjectName());
+                }
+            } else if (row.getGroupType().equals(GroupType.SPORADIC)) {
+                //考级报名
+                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 (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                            typeFee = typeFee.multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                        }
+                        if (feeTypeStr.contains("VIP")) {
+                            row.setVipCourseFee(typeFee);
+                        } else if (feeTypeStr.contains("网管课")) {
+                            row.setPracticeCourseFee(typeFee);
+                        } else if (feeTypeStr.contains("乐理课")) {
+                            row.setTheoryCourseFee(typeFee);
+                        }
+                    }
+                    row.setDegreeFee(row.getActualAmount().subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()).subtract(row.getTheoryCourseFee()));
+                } else {
+                    if (row.getChargeType() != null && SporadicChargeTypeEnum.LEVEL.getCode().equals(row.getChargeType())) {
+                        row.setDegreeFee(row.getActualAmount());
+                    } else if (row.getChargeType() != null && SporadicChargeTypeEnum.PRACTICE_GROUP_BUY.getCode().equals(row.getChargeType())) {
+                        row.setPracticeCourseFee(row.getActualAmount());
+                    } else {
+                        row.setOtherFee(row.getActualAmount());
+                    }
+                }
+                if (row.getChargeType() != null) {
+                    for (SporadicChargeTypeEnum chargeType : SporadicChargeTypeEnum.values()) {
+                        if (!chargeType.getCode().equals(row.getChargeType())) continue;
+                        row.setSporadicType(chargeType.getMsg());
+                    }
+                }
+            } else if (row.getGroupType().equals(GroupType.PRACTICE)) {
+                row.setPracticeCourseFee(row.getActualAmount());
+                PracticeCourseDto practiceGroup = practiceGroupDao.findByGroupId(Integer.parseInt(row.getMusicGroupId()));
+                if (practiceGroup != null) {
+                    row.setSubjectName(practiceGroup.getSubjectName());
+                }
+            } 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) {
+                        row.setSubjectName(studentRegistration.getSubjectName());
+                        row.setSchoolName(studentRegistration.getSchoolName());
+                        row.setCooperationOrganName(studentRegistration.getRemark());
+                    }
+                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getRepairFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()));
+                } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
+                    row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
+                } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
+                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getRepairFee()).subtract(feeByType.getOtherFee()));
+                    row.setTransferFee(BigDecimal.ZERO);
+                }
+            }
+            //如果合作单位不存在取学员的第一个乐团的合作单位和教学点
+            if (row.getCooperationOrganName() == null) {
+                CooperationOrgan cooperationOrgan = musicGroupDao.findUserMusicGroupCooperationOrgan(row.getUserId());
+                if (cooperationOrgan != null) {
+                    row.setCooperationOrganName(cooperationOrgan.getName());
+                }
+            }
+            if (row.getMusicGroupId() != null && row.getMusicGroupId().equals("null")) {
+                row.setMusicGroupId("");
+            }
+            String paymentChannel = "";
+            if (row.getPaymentChannel() == null) {
+            } else if (row.getPaymentChannel().equals("YQPAY")) {
+                paymentChannel = "双乾";
+            } else if (row.getPaymentChannel().equals("ADAPAY")) {
+                paymentChannel = "汇付";
+            } else if (row.getPaymentChannel().equals("BALANCE")) {
+                paymentChannel = "余额";
+            }
+            row.setPaymentChannel(paymentChannel);
+            row.setId(i);
+            i++;
+        }
+
+        String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
+        File file = new File(basePath + "/" + managerDownload.getName());
+        FileOutputStream fileOutputStream = new FileOutputStream(file);
+
+        HSSFWorkbook workbook = null;
+        try {
+            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分润余额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "押金", "乐器", "教辅费用", "其它", "手续费", "到账时间",
+                    "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "备注"};
+            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance", "musicGroupCourseFee", "vipCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "leaseFee", "musicalFee", "teachingFee", "otherFee", "transferFee", "payTime", "musicGroupId",
+                    "groupType.desc", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "memo"};
+            workbook = POIUtil.exportExcel(header, body, studentPaymentOrderExportDtos);
+            workbook.write(fileOutputStream);
+            fileOutputStream.getFD().sync();
+            fileOutputStream.close();
+
+            String folder = "download/" + UploadUtil.getFileFloder();
+            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
+            //把记录插入下载表
+            managerDownload.setFileUrl(url);
+            managerDownload.setStatus(1);
+            managerDownloadDao.update(managerDownload);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                fileOutputStream.close();
+                workbook.close();
+                file.delete();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
 }

+ 10 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -308,6 +308,8 @@ public class PayServiceImpl implements PayService {
                 } else {
                     routeScaleDto.setAmount(routeScaleDto.getAmount().add(scaleDto.getAmount()));
                     routeScaleDto.setBalance(routeScaleDto.getBalance().add(scaleDto.getBalance()));
+                    routeScaleDto.setSaleAmount(routeScaleDto.getSaleAmount().add(scaleDto.getSaleAmount()));
+                    routeScaleDto.setServiceAmount(routeScaleDto.getServiceAmount().add(scaleDto.getServiceAmount()));
                 }
             }
             newRouteScaleDtos.add(routeScaleDto);
@@ -327,7 +329,6 @@ public class PayServiceImpl implements PayService {
         List<Map<String, Object>> tempRoutingList = new ArrayList<>();
 
         PaymentChannelEnum payType = null;
-        boolean feeFlag = false;
         Set<String> routingMerNoSet = new HashSet<>();
         for (RouteScaleDto routeScaleDto : routeScaleDtos) {
             payType = routeScaleDto.getPayType();
@@ -382,6 +383,8 @@ public class PayServiceImpl implements PayService {
             studentPaymentRouteOrder.setRouteAmount(routingMoney);
             studentPaymentRouteOrder.setRouteBalanceAmount(routeBalanceAmount);
             studentPaymentRouteOrder.setMerNo(routeScaleDto.getMerNo());
+            studentPaymentRouteOrder.setSaleAmount(routeScaleDto.getSaleAmount());
+            studentPaymentRouteOrder.setServiceAmount(routeScaleDto.getServiceAmount());
             RouteOrders.add(studentPaymentRouteOrder);
             routingMerNoSet.add(routeScaleDto.getMerNo());
         }
@@ -470,9 +473,11 @@ public class PayServiceImpl implements PayService {
             if (routeScaleDto.getFeeType().equals(FeeTypeEnum.SERVICE)) {
                 serviceHasRouteMoney = serviceHasRouteMoney.add(routingMoney);
                 serviceHasRouteBalance = serviceHasRouteBalance.add(routingBalance);
+                routeScaleDto.setServiceAmount(routingMoney);
             } else {
                 sellHasRouteMoney = sellHasRouteMoney.add(routingMoney);
                 sellHasRouteBalance = sellHasRouteBalance.add(routingBalance);
+                routeScaleDto.setSaleAmount(routingMoney);
             }
 
             if (routeScaleDto.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
@@ -492,7 +497,6 @@ public class PayServiceImpl implements PayService {
         Map<String, List<RouteScaleDto>> routeScaleDtosMap = routeScaleDtos.stream().collect(Collectors.groupingBy(RouteScaleDto::getMerNo));
 
         //合并同账号的数据
-        BigDecimal maxAmount = BigDecimal.ZERO;
         List<RouteScaleDto> newRouteScaleDtos = new ArrayList<>();
         for (Map.Entry<String, List<RouteScaleDto>> groupRouteScaleDtos : routeScaleDtosMap.entrySet()) {
             RouteScaleDto routeScaleDto = null;
@@ -502,24 +506,12 @@ public class PayServiceImpl implements PayService {
                 } else {
                     routeScaleDto.setAmount(routeScaleDto.getAmount().add(scaleDto.getAmount()));
                     routeScaleDto.setBalance(routeScaleDto.getBalance().add(scaleDto.getBalance()));
+                    routeScaleDto.setSaleAmount(routeScaleDto.getSaleAmount().add(scaleDto.getSaleAmount()));
+                    routeScaleDto.setServiceAmount(routeScaleDto.getServiceAmount().add(scaleDto.getServiceAmount()));
                 }
             }
-            if (routeScaleDto != null && routeScaleDto.getAmount().compareTo(maxAmount) > 0) {
-                maxAmount = routeScaleDto.getAmount();
-            }
             newRouteScaleDtos.add(routeScaleDto);
         }
-
-        //金额最大的账号承担手续费
-        boolean hasFeeFlag = false;
-        for (RouteScaleDto routeScaleDto : newRouteScaleDtos) {
-            if (!hasFeeFlag && routeScaleDto.getAmount().compareTo(maxAmount) == 0) {
-                routeScaleDto.setFeeFlag("Y");
-                hasFeeFlag = true;
-            } else {
-                routeScaleDto.setFeeFlag("N");
-            }
-        }
         return newRouteScaleDtos;
     }
 
@@ -556,14 +548,13 @@ public class PayServiceImpl implements PayService {
 //                redisTemplate.expire(key, 600, TimeUnit.SECONDS);// 保留10分钟内的key
 //            }
 //        }else {
-            BigDecimal monthHasReceipt = studentPaymentRouteOrderDao.getRouteOrderAmount(routeScaleDto.getOrganId(), paymentChannelList, dayStartTime);
-            monthHasReceipt = monthHasReceipt == null ? BigDecimal.ZERO : monthHasReceipt;
+        BigDecimal monthHasReceipt = studentPaymentRouteOrderDao.getRouteOrderAmount(routeScaleDto.getOrganId(), paymentChannelList, dayStartTime);
+        monthHasReceipt = monthHasReceipt == null ? BigDecimal.ZERO : monthHasReceipt;
 //            monthHasReceipt.multiply(new BigDecimal(100));
 //
 //        }
 
 
-
         if (routeScaleDto.getAmount().add(monthHasReceipt).compareTo(monthMaxReceipt) > 0) {
             routeScaleDto.setMerNo(hfmember.getRouteMemberId());
             routeScaleDto.setOrganId(hfmember.getRouteOrganId());

+ 12 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java

@@ -78,7 +78,7 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
         //已分配的商品余额
         BigDecimal hasRouteBalance = BigDecimal.ZERO;
         //已分配的商品现金
-        BigDecimal hasRouteActualAmount= BigDecimal.ZERO;
+        BigDecimal hasRouteActualAmount = BigDecimal.ZERO;
         //商品占用的的余额
         BigDecimal goodsTotalBalance = totalAmount.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : goodsTotalPrice.multiply(balance).divide(totalAmount, 2, BigDecimal.ROUND_DOWN);
         //商品占用的总现金
@@ -396,6 +396,13 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
                 return sellAmount;
             }
 
+            BigDecimal totalAmount = order.getExpectAmount().add(repairInfo.getExemptionAmount());
+            if (totalAmount.compareTo(BigDecimal.ZERO) <= 0) {
+                sellAmount.put("actualAmount", BigDecimal.ZERO);
+                sellAmount.put("balance", BigDecimal.ZERO);
+                return sellAmount;
+            }
+
             BigDecimal goodsTotalPrice = BigDecimal.ZERO;
             goodies = goodsDao.getGoodies(goodsIds);
             int i = 1;
@@ -408,8 +415,10 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
                 }
             }
             BigDecimal balance = order.getBalancePaymentAmount() == null ? BigDecimal.ZERO : order.getBalancePaymentAmount();
-            BigDecimal goodsTotalBalance = goodsTotalPrice.multiply(balance).divide(order.getExpectAmount(), 2, BigDecimal.ROUND_HALF_UP);
-            sellAmount.put("actualAmount", goodsTotalPrice.subtract(goodsTotalBalance));
+
+            BigDecimal goodsTotalBalance = goodsTotalPrice.multiply(balance).divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal goodsTotalActualAmount = goodsTotalPrice.multiply(order.getActualAmount()).divide(totalAmount, 2, BigDecimal.ROUND_HALF_UP);
+            sellAmount.put("actualAmount", goodsTotalActualAmount);
             sellAmount.put("balance", goodsTotalBalance);
             return sellAmount;
         }

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

@@ -1112,8 +1112,8 @@ public class ExportController extends BaseController {
             return failed("数据集太大,不能导出.最大数据集不能超过50000");
         }
         Date nowDate = new Date();
-        String no = idGeneratorService.generatorId("download") + "" ;
-        String fileName = "orderList-"+no+"-" + DateUtil.getDate(nowDate) + ".xls" ;
+        String no = idGeneratorService.generatorId("download") + "";
+        String fileName = "orderList-" + no + "-" + DateUtil.getDate(nowDate) + ".xls";
         ManagerDownload managerDownload = new ManagerDownload();
         managerDownload.setUserId(sysUser.getId());
         managerDownload.setName(fileName);
@@ -1121,7 +1121,7 @@ public class ExportController extends BaseController {
         managerDownload.setCreateTime(nowDate);
         managerDownload.setUpdateTime(nowDate);
         managerDownloadDao.insert(managerDownload);
-        exportService.orderList(params,managerDownload);
+        exportService.orderList(params, managerDownload);
         return succeed("数据导出中,请到下载列表查看");
     }
 
@@ -2016,7 +2016,7 @@ public class ExportController extends BaseController {
     @ApiOperation(value = "财务管理导出")
     @RequestMapping("export/routeOrderList")
     @PreAuthorize("@pcs.hasPermissions('export/routeOrderList')")
-    public void routeOrderList(StudentPaymentOrderQueryInfo queryInfo, HttpServletResponse response) throws IOException {
+    public HttpResponseResult routeOrderList(StudentPaymentOrderQueryInfo queryInfo) throws Exception {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         Employee employee = employeeDao.get(sysUser.getId());
         if (StringUtils.isEmpty(queryInfo.getRoutingOrganId()) && queryInfo.getOrderType().equals("3")) {
@@ -2038,203 +2038,27 @@ public class ExportController extends BaseController {
         queryInfo.setOrderType("3");
         Map<String, Object> params = new HashMap<String, Object>();
         MapUtil.populateMap(params, queryInfo);
-        List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
-        if (studentPaymentOrderExportDtos.size() > 50000) {
-            throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
-        }
-        OutputStream outputStream = response.getOutputStream();
-        long i = 1;
-        for (StudentPaymentOrderExportDto row : studentPaymentOrderExportDtos) {
-            if (row.getActualAmount() == null) {
-                row.setActualAmount(BigDecimal.ZERO);
-            }
-            if (row.getBalancePaymentAmount() == null) {
-                row.setBalancePaymentAmount(BigDecimal.ZERO);
-            }
-            if (row.getRouteAmount() == null) {
-                row.setRouteAmount(BigDecimal.ZERO);
-            }
-            if (row.getMemo() == null) {
-                row.setMemo("");
-            }
-            BigDecimal transferFee = BigDecimal.ZERO;
-            if (row.getPaymentChannel() != null && row.getPaymentChannel().equals("ADAPAY")) {
-                FeeFlagNumDto countFeeFlagNum = studentPaymentRouteOrderDao.getCountFeeFlagNum(row.getOrderNo());
-                if (countFeeFlagNum.getTotalNum() > countFeeFlagNum.getYesNum() && row.getFeeFlag().equals("Y")) {
-                    transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
-                }
-                if (countFeeFlagNum.getTotalNum().equals(countFeeFlagNum.getYesNum())) {
-                    transferFee = row.getRouteAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
-                }
-            }
-            row.setTransferFee(transferFee);
-
-            String goodsName = "";
-            if (row.getOrderDetailList() != null) {
-                for (StudentPaymentOrderDetail orderDetail : row.getOrderDetailList()) {
-                    switch (orderDetail.getType()) {
-                        case COURSE:
-                        case CLASSROOM:
-                        case SINGLE:
-                        case MIX:
-                        case COMPREHENSIVE:
-                        case ENLIGHTENMENT:
-                        case TRAINING_SINGLE:
-                        case TRAINING_MIX:
-                        case MUSIC_NETWORK:
-                        case HIGH:
-                        case HIGH_ONLINE:
-                        case HIGH_ONLINE_COURSE:
-                            row.setMusicGroupCourseFee(row.getMusicGroupCourseFee().add(orderDetail.getPrice()));
-                            break;
-                        case MUSICAL:
-                            if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
-                                BigDecimal leaseFee = orderDetail.getPrice();
-                                if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                    leaseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                                }
-                                row.setLeaseFee(leaseFee);
-                            } else {
-                                row.setMusicalFee(orderDetail.getPrice());
-                            }
-                            break;
-                        case ACCESSORIES:
-                        case TEACHING:
-                            row.setTeachingFee(row.getTeachingFee().add(orderDetail.getPrice()));
-                            break;
-                        case OTHER:
-                            row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice()));
-                        default:
-                            break;
-                    }
-                }
-            }
-            if (row.getGoodsList() != null) {
-                goodsName = row.getGoodsList().stream().map(Goods::getName).collect(Collectors.joining("|"));
-            }
-            if (StringUtils.isNotBlank(goodsName)) {
-                row.setMemo(goodsName);
-            }
-            //专业
-            if (row.getGroupType().equals(GroupType.VIP)) {
-                row.setVipCourseFee(row.getActualAmount());
-                VipGroup vipGroupInfo = vipGroupDao.findVipGroupInfo(Integer.parseInt(row.getMusicGroupId()), row.getClassGroupId());
-                if (vipGroupInfo != null) {
-                    row.setSchoolName(vipGroupInfo.getSchoolName());
-                    row.setSubjectName(vipGroupInfo.getSubjectName());
-                }
-            } else if (row.getGroupType().equals(GroupType.SPORADIC)) {
-                //考级报名
-                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 (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                            typeFee = typeFee.multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                        }
-                        if (feeTypeStr.contains("VIP")) {
-                            row.setVipCourseFee(typeFee);
-                        } else if (feeTypeStr.contains("网管课")) {
-                            row.setPracticeCourseFee(typeFee);
-                        } else if (feeTypeStr.contains("乐理课")) {
-                            row.setTheoryCourseFee(typeFee);
-                        }
-                    }
-                    row.setDegreeFee(row.getActualAmount().subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()).subtract(row.getTheoryCourseFee()));
-                } else {
-                    if (row.getChargeType() != null && SporadicChargeTypeEnum.LEVEL.getCode().equals(row.getChargeType())) {
-                        row.setDegreeFee(row.getActualAmount());
-                    } else if (row.getChargeType() != null && SporadicChargeTypeEnum.PRACTICE_GROUP_BUY.getCode().equals(row.getChargeType())) {
-                        row.setPracticeCourseFee(row.getActualAmount());
-                    } else {
-                        row.setOtherFee(row.getActualAmount());
-                    }
-                }
-                if (row.getChargeType() != null) {
-                    for (SporadicChargeTypeEnum chargeType : SporadicChargeTypeEnum.values()) {
-                        if (!chargeType.getCode().equals(row.getChargeType())) continue;
-                        row.setSporadicType(chargeType.getMsg());
-                    }
-                }
-            } else if (row.getGroupType().equals(GroupType.PRACTICE)) {
-                row.setPracticeCourseFee(row.getActualAmount());
-                PracticeCourseDto practiceGroup = practiceGroupDao.findByGroupId(Integer.parseInt(row.getMusicGroupId()));
-                if (practiceGroup != null) {
-                    row.setSubjectName(practiceGroup.getSubjectName());
-                }
-            } 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) {
-                        row.setSubjectName(studentRegistration.getSubjectName());
-                        row.setSchoolName(studentRegistration.getSchoolName());
-                        row.setCooperationOrganName(studentRegistration.getRemark());
-                    }
-                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getRepairFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()));
-                } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
-                    row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
-                } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
-                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getRepairFee()).subtract(feeByType.getOtherFee()));
-                    row.setTransferFee(BigDecimal.ZERO);
-                }
-            }
-            //如果合作单位不存在取学员的第一个乐团的合作单位和教学点
-            if (row.getCooperationOrganName() == null) {
-                CooperationOrgan cooperationOrgan = musicGroupDao.findUserMusicGroupCooperationOrgan(row.getUserId());
-                if (cooperationOrgan != null) {
-                    row.setCooperationOrganName(cooperationOrgan.getName());
-                }
-            }
-            if (row.getMusicGroupId() != null && row.getMusicGroupId().equals("null")) {
-                row.setMusicGroupId("");
-            }
-            String paymentChannel = "";
-            if (row.getPaymentChannel() == null) {
-            } else if (row.getPaymentChannel().equals("YQPAY")) {
-                paymentChannel = "双乾";
-            } else if (row.getPaymentChannel().equals("ADAPAY")) {
-                paymentChannel = "汇付";
-            } else if (row.getPaymentChannel().equals("BALANCE")) {
-                paymentChannel = "余额";
-            }
-            row.setPaymentChannel(paymentChannel);
-            row.setId(i);
-            i++;
+
+        int count = studentPaymentRouteOrderDao.queryCount(params);
+        if (count <= 0) {
+            return failed("没有可导出的数据");
         }
 
-        try {
-            String[] header = {"序号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分润余额", "乐团课", "VIP课", "网管课", "乐理课", "考级", "维修费用", "押金", "乐器", "教辅费用", "其它", "手续费", "到账时间",
-                    "关联乐团ID/VIP课ID", "课程形态", "零星收款类别", "专业", "分部", "教学点", "合作单位", "备注"};
-            String[] body = {"id", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance", "musicGroupCourseFee", "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"); //    //收款账户
-            response.flushBuffer();
-            outputStream = response.getOutputStream();
-            workbook.write(outputStream);
-            outputStream.flush();
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (outputStream != null) {
-                try {
-                    outputStream.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
+        if (count > 50000) {
+            return failed("数据集太大,不能导出.最大数据集不能超过50000");
         }
+        Date nowDate = new Date();
+        String no = idGeneratorService.generatorId("download") + "";
+        String fileName = "routeOrderList-" + no + "-" + DateUtil.getDate(nowDate) + ".xls";
+        ManagerDownload managerDownload = new ManagerDownload();
+        managerDownload.setUserId(sysUser.getId());
+        managerDownload.setName(fileName);
+        managerDownload.setFileUrl("");
+        managerDownload.setCreateTime(nowDate);
+        managerDownload.setUpdateTime(nowDate);
+        managerDownloadDao.insert(managerDownload);
+        exportService.routeOrderList(params, managerDownload);
+        return succeed(fileName + "下载中,请到下载列表查看");
     }