|
@@ -28,6 +28,7 @@ import com.ym.mec.util.ini.IniFileUtil;
|
|
|
import com.ym.mec.util.upload.UploadUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
+import org.snaker.engine.entity.Order;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.boot.system.ApplicationHome;
|
|
@@ -44,8 +45,8 @@ import java.util.*;
|
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
import java.util.concurrent.Executors;
|
|
|
-import java.util.function.BiConsumer;
|
|
|
import java.util.function.BiFunction;
|
|
|
+import java.util.function.Consumer;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -1391,7 +1392,7 @@ public class ExportServiceImpl implements ExportService {
|
|
|
}
|
|
|
// queryInfo.setRoutingOrganId(null);
|
|
|
ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.ROUTE_ORDER,sysUser.getId());
|
|
|
- return this.asyncExport(() -> this.routeOrderList(params, managerDownload, headColumns),
|
|
|
+ return this.asyncExport(() -> this.routeOrderList1(params, managerDownload, headColumns),
|
|
|
managerDownload.getName());
|
|
|
}
|
|
|
|
|
@@ -2225,6 +2226,227 @@ public class ExportServiceImpl implements ExportService {
|
|
|
exportManagerDownload(workbook,managerDownload);
|
|
|
}
|
|
|
|
|
|
+ public BigDecimal subtract(BigDecimal a, BigDecimal b) {
|
|
|
+ BigDecimal subtract = a.subtract(b);
|
|
|
+ if (subtract.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+ subtract = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ return subtract;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void routeOrderList1(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns){
|
|
|
+ //获取分润订单(不包含订单详情)(纯余额支付不处理)
|
|
|
+ List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage1(params);
|
|
|
+ if (CollectionUtils.isEmpty(studentPaymentOrderExportDtos)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Set<Long> paymentOrderIds = studentPaymentOrderExportDtos.stream().map(e -> e.getId()).collect(Collectors.toSet());
|
|
|
+ //获取商品订单详情
|
|
|
+ List<SellOrder> sellOrders = sellOrderDao.querySellOrderByOrderIds(paymentOrderIds);
|
|
|
+ Map<Long, List<SellOrder>> sellOrderMap = new HashMap<>();
|
|
|
+ Map<Integer, Goods> goodsMap = new HashMap<>();
|
|
|
+ if(!CollectionUtils.isEmpty(sellOrders)){
|
|
|
+ sellOrderMap = sellOrders.stream().collect(Collectors.groupingBy(SellOrder::getOrderId));
|
|
|
+ //获取商品列表
|
|
|
+ List<Goods> goodsList = goodsService.findGoodsByIds(sellOrders.stream().map(e -> e.getGoodsId().toString()).distinct().collect(Collectors.joining(",")));
|
|
|
+ goodsMap = goodsList.stream().collect(Collectors.toMap(Goods::getId, Function.identity()));
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取订单详情
|
|
|
+ List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.getDao().getOrderDetailByOrderId(new ArrayList<>(paymentOrderIds));
|
|
|
+ Map<Long, List<StudentPaymentOrderDetail>> orderDetailMap = new HashMap<>();
|
|
|
+ //订单详情塞到对应的订单中
|
|
|
+ if (!CollectionUtils.isEmpty(orderDetails)) {
|
|
|
+ orderDetailMap = orderDetails.stream().collect(Collectors.groupingBy(StudentPaymentOrderDetail::getPaymentOrderId));
|
|
|
+ }
|
|
|
+
|
|
|
+ for (StudentPaymentOrderExportDto basicOrder : studentPaymentOrderExportDtos) {
|
|
|
+ if(basicOrder.getRouteAmount().compareTo(BigDecimal.ZERO) == 0){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //如果有订单详情
|
|
|
+ List<StudentPaymentOrderDetail> detailList = orderDetailMap.get(basicOrder.getId());
|
|
|
+ if (!CollectionUtils.isEmpty(detailList)) {
|
|
|
+ if(basicOrder.getServiceAmount().compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ //计算服务收入
|
|
|
+ Consumer<StudentPaymentOrderDetail> con = (orderDetail)->this.setServiceFee(basicOrder,orderDetail);
|
|
|
+ detailList.stream().forEach(con);
|
|
|
+ }else if(basicOrder.getSaleAmount().compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ //计算销售收入
|
|
|
+ Consumer<StudentPaymentOrderDetail> con = (orderDetail)->this.setSaleFee(basicOrder,orderDetail);
|
|
|
+ detailList.stream().forEach(con);
|
|
|
+ }else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //如果没有订单详情,则计算商品收入
|
|
|
+ List<SellOrder> sellOrderList = sellOrderMap.get(basicOrder.getId());
|
|
|
+ if (!CollectionUtils.isEmpty(sellOrderList)) {
|
|
|
+ if(basicOrder.getServiceAmount().compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ //计算服务收入(如果商品编号是76)那么算乐器保养费用
|
|
|
+ if(sellOrderList.stream().anyMatch(e -> e.getGoodsId().equals("76"))){
|
|
|
+ sellOrderList.stream().forEach(e->basicOrder.setMaintenanceProductFee(basicOrder.getMaintenanceProductFee().add(e.getActualAmount())));
|
|
|
+ }
|
|
|
+ }else if(basicOrder.getSaleAmount().compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ //计算销售收入,排除商品编号是76的商品,其他的商品按分类统计
|
|
|
+ for (SellOrder e : sellOrderList) {
|
|
|
+ this.setSaleFee(basicOrder,e,goodsMap.get(e.getGoodsId()));
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //如果只有订单,那么按分类统计
|
|
|
+ if(basicOrder.getServiceAmount().compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ //计算服务收入
|
|
|
+ this.setServiceFee(basicOrder);
|
|
|
+ }else if(basicOrder.getSaleAmount().compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ //计算销售收入
|
|
|
+ this.setSaleFee(basicOrder);
|
|
|
+ }else {
|
|
|
+ this.setServiceFee(basicOrder);
|
|
|
+ this.setSaleFee(basicOrder);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ HSSFWorkbook workbook = getHSSFWorkbook(studentPaymentOrderExportDtos,headColumns,ExportEnum.ROUTE_ORDER_LIST1);
|
|
|
+ exportManagerDownload(workbook,managerDownload);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setServiceFee(StudentPaymentOrderExportDto basicOrder){
|
|
|
+ BigDecimal actualAmount = basicOrder.getActualAmount();
|
|
|
+ switch (basicOrder.getGroupType()) {
|
|
|
+ case ACTIVITY:
|
|
|
+ case VIP:
|
|
|
+ basicOrder.setVipCourseFee(basicOrder.getVipCourseFee().add(actualAmount));
|
|
|
+ break;
|
|
|
+ case MEMBER:
|
|
|
+ basicOrder.setCloudTeacherFee(basicOrder.getCloudTeacherFee().add(actualAmount));
|
|
|
+ break;
|
|
|
+ case MUSIC:
|
|
|
+ //历史订单无法区分,统一放在乐团课下,原来的财务导出明细都是空的
|
|
|
+ basicOrder.setMusicGroupCourseFee(basicOrder.getMusicGroupCourseFee().add(actualAmount));
|
|
|
+ break;
|
|
|
+ case PRACTICE:
|
|
|
+ basicOrder.setPracticeCourseFee(basicOrder.getPracticeCourseFee().add(actualAmount));
|
|
|
+ break;
|
|
|
+ case REPAIR:
|
|
|
+ basicOrder.setRepairFee(basicOrder.getRepairFee().add(actualAmount));
|
|
|
+ break;
|
|
|
+ case SPORADIC:
|
|
|
+ if(basicOrder.getType() == OrderTypeEnum.DEGREE_REGISTRATION){
|
|
|
+ basicOrder.setDegreeFee(basicOrder.getDegreeFee().add(actualAmount));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void setSaleFee(StudentPaymentOrderExportDto basicOrder){
|
|
|
+ BigDecimal actualAmount = basicOrder.getActualAmount();
|
|
|
+ switch (basicOrder.getGroupType()) {
|
|
|
+ case GOODS_SELL:
|
|
|
+ basicOrder.setMusicalFee(basicOrder.getMusicalFee().add(actualAmount));
|
|
|
+ break;
|
|
|
+ case REPLACEMENT:
|
|
|
+ //乐器置换统一算到乐器收入
|
|
|
+ basicOrder.setMusicalFee(basicOrder.getMusicalFee().add(actualAmount));
|
|
|
+ break;
|
|
|
+ case SPORADIC:
|
|
|
+ if(basicOrder.getType() != OrderTypeEnum.DEGREE_REGISTRATION){
|
|
|
+ basicOrder.setOtherFee(basicOrder.getOtherFee().add(actualAmount));
|
|
|
+ }
|
|
|
+ case SUBJECT_CHANGE:
|
|
|
+ //有一部分声部更换没有定义,放到辅件里面
|
|
|
+ basicOrder.setTeachingFee(basicOrder.getTeachingFee().add(actualAmount));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void setServiceFee(StudentPaymentOrderExportDto basicOrder, StudentPaymentOrderDetail orderDetail){
|
|
|
+ BigDecimal price = orderDetail.getPrice();
|
|
|
+ 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:
|
|
|
+ basicOrder.setMusicGroupCourseFee(basicOrder.getMusicGroupCourseFee().add(price));
|
|
|
+ break;
|
|
|
+ case DEGREE_REGISTRATION:
|
|
|
+ basicOrder.setDegreeFee(basicOrder.getDegreeFee().add(price));
|
|
|
+ break;
|
|
|
+ case CLOUD_TEACHER:
|
|
|
+ case CLOUD_TEACHER_PLUS:
|
|
|
+ basicOrder.setCloudTeacherFee(basicOrder.getCloudTeacherFee().add(price));
|
|
|
+ break;
|
|
|
+ case THEORY_COURSE:
|
|
|
+ basicOrder.setTheoryCourseFee(basicOrder.getTheoryCourseFee().add(price));
|
|
|
+ break;
|
|
|
+ case PRACTICE:
|
|
|
+ basicOrder.setPracticeCourseFee(basicOrder.getPracticeCourseFee().add(price));
|
|
|
+ break;
|
|
|
+ case VIP:
|
|
|
+ basicOrder.setVipCourseFee(basicOrder.getVipCourseFee().add(price));
|
|
|
+ break;
|
|
|
+ case REPAIR:
|
|
|
+ basicOrder.setRepairFee(basicOrder.getRepairFee().add(price));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //如果是内部库存转化部分收入为云教练收入
|
|
|
+ if(orderDetail.getType() == OrderDetailTypeEnum.MUSICAL ||
|
|
|
+ orderDetail.getType() == OrderDetailTypeEnum.TEACHING ||
|
|
|
+ orderDetail.getType() == OrderDetailTypeEnum.OTHER ||
|
|
|
+ orderDetail.getType() == OrderDetailTypeEnum.ACCESSORIES){
|
|
|
+ basicOrder.setCloudTeacherFee(basicOrder.getCloudTeacherFee().add(orderDetail.getIncome()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public void setSaleFee(StudentPaymentOrderExportDto basicOrder,StudentPaymentOrderDetail orderDetail){
|
|
|
+ BigDecimal price = orderDetail.getPrice();
|
|
|
+ switch (orderDetail.getType()) {
|
|
|
+ case OTHER:
|
|
|
+ basicOrder.setOtherFee(basicOrder.getOtherFee().add(price));
|
|
|
+ break;
|
|
|
+ case MAINTENANCE:
|
|
|
+ basicOrder.setMaintenanceFee(basicOrder.getMaintenanceFee().add(price));
|
|
|
+ break;
|
|
|
+ case MUSICAL:
|
|
|
+ if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
|
|
|
+ basicOrder.setLeaseFee(price);
|
|
|
+ } else {
|
|
|
+ basicOrder.setMusicalFee(this.subtract(price,orderDetail.getIncome()));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case TEACHING:
|
|
|
+ case ACCESSORIES:
|
|
|
+ basicOrder.setTeachingFee(basicOrder.getTeachingFee().add(price));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setSaleFee(StudentPaymentOrderExportDto basicOrder,SellOrder sellOrder,Goods goods){
|
|
|
+ if(sellOrder.getOrderId().equals("76")){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ switch (goods.getType()) {
|
|
|
+ case ACCESSORIES:
|
|
|
+ case TEACHING:
|
|
|
+ case STAFF:
|
|
|
+ basicOrder.setTeachingFee(basicOrder.getTeachingFee().add(sellOrder.getActualAmount()));
|
|
|
+ break;
|
|
|
+ case INSTRUMENT:
|
|
|
+ basicOrder.setMusicalFee(basicOrder.getMusicalFee().add(sellOrder.getActualAmount()));
|
|
|
+ break;
|
|
|
+ case OTHER:
|
|
|
+ basicOrder.setOtherFee(basicOrder.getOtherFee().add(sellOrder.getActualAmount()));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns){
|
|
|
List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
|