Преглед изворни кода

财务导出,文件上传

zouxuan пре 3 година
родитељ
комит
2ddbd340db

+ 6 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/UploadFileService.java

@@ -1,7 +1,10 @@
 package com.ym.mec.biz.service;
 
-import java.io.*;
-
+import com.ym.mec.common.entity.UploadReturnBean;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.thirdparty.storage.StoragePluginContext;
+import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
+import com.ym.mec.util.upload.UploadUtil;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -10,12 +13,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
-import com.ym.mec.common.entity.UploadReturnBean;
-import com.ym.mec.common.exception.BizException;
-import com.ym.mec.thirdparty.storage.StoragePluginContext;
-import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
-import com.ym.mec.util.upload.UploadUtil;
-import org.springframework.web.multipart.MultipartFile;
+import java.io.*;
 
 /** 
  * 上传工具服务层实现类

+ 42 - 75
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -44,6 +44,7 @@ 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.Function;
 import java.util.stream.Collectors;
@@ -1533,6 +1534,13 @@ public class ExportServiceImpl implements ExportService {
         return managerDownload;
     }
 
+    public BigDecimal getActualAmount(BigDecimal price,StudentPaymentOrderExportDto row){
+        if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+            return price.multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+        }
+        return BigDecimal.ZERO;
+    }
+
 
     @Override
     public void orderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns){
@@ -1660,11 +1668,7 @@ public class ExportServiceImpl implements ExportService {
                             break;
                         case MUSICAL:
                             if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
-                                BigDecimal leaseFee = BigDecimal.ZERO;
-                                if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                    leaseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                                }
-                                row.setLeaseFee(leaseFee);
+                                row.setLeaseFee(getActualAmount(orderDetail.getPrice(), row));
                             } else {
                                 row.setMusicalFee(orderDetail.getPrice());
                             }
@@ -1677,40 +1681,20 @@ public class ExportServiceImpl implements ExportService {
                             row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice()));
                             break;
                         case MAINTENANCE:
-                            BigDecimal repairFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                repairFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                            row.setMaintenanceFee(repairFee);
+                            row.setMaintenanceFee(getActualAmount(orderDetail.getPrice(), row));
                             break;
                         case CLOUD_TEACHER:
                         case CLOUD_TEACHER_PLUS:
-                            BigDecimal cloudTeacherFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                cloudTeacherFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                            row.setCloudTeacherFee(cloudTeacherFee);
+                            row.setCloudTeacherFee(getActualAmount(orderDetail.getPrice(), row));
                             break;
                         case DEGREE_REGISTRATION:
-                            BigDecimal degreeFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                degreeFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                            row.setDegreeFee(degreeFee);
+                            row.setDegreeFee(getActualAmount(orderDetail.getPrice(), row));
                             break;
                         case PRACTICE:
-                            BigDecimal practiceCourseFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                practiceCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                            row.setPracticeCourseFee(practiceCourseFee);
+                            row.setPracticeCourseFee(getActualAmount(orderDetail.getPrice(), row));
                             break;
                         case VIP:
-                            BigDecimal vipCourseFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                vipCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                            row.setVipCourseFee(vipCourseFee);
+                            row.setVipCourseFee(getActualAmount(orderDetail.getPrice(), row));
                             if(row.getTypeDesc() == null){
                                 //学员没有历史VIP课程则导出为【VIP课新增】
                                 //学员有历史VIP课程到导出为【VIP课续费]
@@ -1722,11 +1706,10 @@ public class ExportServiceImpl implements ExportService {
                             }
                             break;
                         case THEORY_COURSE:
-                            BigDecimal theoryCourseFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                theoryCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                            row.setTheoryCourseFee(theoryCourseFee);
+                            row.setTheoryCourseFee(getActualAmount(orderDetail.getPrice(), row));
+                            break;
+                        case REPAIR:
+                            row.setRepairFee(getActualAmount(orderDetail.getPrice(), row));
                             break;
                         default:
                             break;
@@ -2380,17 +2363,12 @@ public class ExportServiceImpl implements ExportService {
                             row.setMusicGroupCourseFee(row.getMusicGroupCourseFee().add(orderDetail.getPrice()));
                             break;
                         case MUSICAL:
-                        	BigDecimal income = orderDetail.getIncome();
                         	//扣除内部库存的商品销售收入统计在云教练中
                         	if(StringUtils.equals(orderDetail.getIncomeItem(), OrderDetailTypeEnum.CLOUD_TEACHER.name())){
-                        		row.setTranslatedIncome(row.getTranslatedIncome().add(income.multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN)));
+                        		row.setTranslatedIncome(row.getTranslatedIncome().add(orderDetail.getIncome()));
                         	}
                             if (orderDetail.getKitGroupPurchaseType() != null && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
-                                BigDecimal leaseFee = orderDetail.getPrice().subtract(income);
-                                if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                    leaseFee = orderDetail.getPrice().subtract(income).multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                                }
-                                row.setLeaseFee(leaseFee);
+                                row.setLeaseFee(getActualAmount(orderDetail.getPrice(),row));
                             } else {
                                 row.setMusicalFee(orderDetail.getPrice().subtract(orderDetail.getIncome()));
                             }
@@ -2398,44 +2376,28 @@ public class ExportServiceImpl implements ExportService {
                         case ACCESSORIES:
                         case TEACHING:
                         	if(StringUtils.equals(orderDetail.getIncomeItem(), OrderDetailTypeEnum.CLOUD_TEACHER.name())){
-                        		row.setTranslatedIncome(row.getTranslatedIncome().add(orderDetail.getIncome().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN)));
+                        		row.setTranslatedIncome(row.getTranslatedIncome().add(orderDetail.getIncome()));
                         	}
-                            row.setTeachingFee(row.getTeachingFee().add(orderDetail.getPrice().subtract(orderDetail.getIncome())));
+                            row.setTeachingFee(row.getTeachingFee().add(getActualAmount(orderDetail.getPrice(),row).subtract(orderDetail.getIncome())));
                             break;
                         case OTHER:
                         	if(StringUtils.equals(orderDetail.getIncomeItem(), OrderDetailTypeEnum.CLOUD_TEACHER.name())){
-                        		row.setTranslatedIncome(row.getTranslatedIncome().add(orderDetail.getIncome().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN)));
+                        		row.setTranslatedIncome(row.getTranslatedIncome().add(orderDetail.getIncome()));
                         	}
                             row.setOtherFee(row.getOtherFee().add(orderDetail.getPrice().subtract(orderDetail.getIncome())));
                             break;
                         case MAINTENANCE:
-                            BigDecimal maintenanceFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                maintenanceFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                            row.setMaintenanceFee(maintenanceFee);
+                            row.setMaintenanceFee(getActualAmount(orderDetail.getPrice(),row));
                             break;
                         case CLOUD_TEACHER:
                         case CLOUD_TEACHER_PLUS:
-                            BigDecimal cloudTeacherFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                cloudTeacherFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                    		row.setCloudTeacherFee(row.getCloudTeacherFee().add(cloudTeacherFee));
+                    		row.setCloudTeacherFee(row.getCloudTeacherFee().add(getActualAmount(orderDetail.getPrice(),row)));
                             break;
                         case DEGREE_REGISTRATION:
-                            BigDecimal degreeFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                degreeFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                            row.setDegreeFee(degreeFee);
+                            row.setDegreeFee(getActualAmount(orderDetail.getPrice(),row));
                             break;
                         case VIP:
-                            BigDecimal vipCourseFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                vipCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                            row.setVipCourseFee(vipCourseFee);
+                            row.setVipCourseFee(getActualAmount(orderDetail.getPrice(),row));
                             if(row.getTypeDesc() == null){
                                 //学员没有历史VIP课程则导出为【VIP课新增】
                                 //学员有历史VIP课程到导出为【VIP课续费]
@@ -2447,11 +2409,10 @@ public class ExportServiceImpl implements ExportService {
                             }
                             break;
                         case THEORY_COURSE:
-                            BigDecimal theoryCourseFee = BigDecimal.ZERO;
-                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
-                                theoryCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
-                            }
-                            row.setTheoryCourseFee(theoryCourseFee);
+                            row.setTheoryCourseFee(getActualAmount(orderDetail.getPrice(),row));
+                            break;
+                        case REPAIR:
+                            row.setRepairFee(getActualAmount(orderDetail.getPrice(),row));
                             break;
                         default:
                             break;
@@ -2580,7 +2541,11 @@ public class ExportServiceImpl implements ExportService {
                     }
                     //row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()).subtract(row.getCloudTeacherFee()));
                 } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
-                    row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
+                    if(row.getRepairFee().compareTo(BigDecimal.ZERO) == 0){
+                        row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
+                    }else {
+                        row.setRepairFee(row.getActualAmount().subtract(row.getTeachingFee()).subtract(row.getTranslatedIncome()));
+                    }
                 } else if (row.getType().equals(OUTORDER)) {
                     row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getRepairFee()).subtract(feeByType.getOtherFee()));
                     row.setTransferFee(BigDecimal.ZERO);
@@ -2676,12 +2641,14 @@ public class ExportServiceImpl implements ExportService {
                     order.setDegreeFee(BigDecimal.ZERO);
                     order.setMaintenanceFee(BigDecimal.ZERO);
                     order.setCloudTeacherFee(BigDecimal.ZERO);
-                    order.setRepairFee(order.getMaintenanceProductFee());
+//                    order.setRepairFee(order.getRepairFee());
+//                    order.setMaintenanceProductFee(order.getMaintenanceProductFee());
                     continue;
                 } else if (order.getSaleAmount().compareTo(BigDecimal.ZERO) == 0 && order.getServiceAmount().compareTo(BigDecimal.ZERO) > 0) {
-                    order.setRepairFee(order.getRepairFee());
-                    order.setCloudTeacherFee(order.getCloudTeacherFee());
-                    order.setMaintenanceFee(order.getMaintenanceFee());
+//                    order.setRepairFee(order.getRepairFee());
+//                    order.setMaintenanceProductFee(order.getMaintenanceProductFee());
+//                    order.setCloudTeacherFee(order.getCloudTeacherFee());
+//                    order.setMaintenanceFee(order.getMaintenanceFee());
                     order.setMusicalFee(BigDecimal.ZERO);
                     order.setTeachingFee(BigDecimal.ZERO);
 //                    order.setOtherFee(BigDecimal.ZERO);

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

@@ -301,7 +301,7 @@ calender_id_,create_time_,create_by_,update_time_,update_by_,tenant_id_,type_
         LEFT JOIN sporadic_charge_info sci on spo.music_group_id_ = sci.id_
         LEFT JOIN goods g on FIND_IN_SET(g.id_,spod.goods_id_list_)
         <include refid="queryPaymentOrder"/>
-        ORDER BY spro.id_ asc
+        ORDER BY spro.id_ asc,spro.mer_no_,spod.price_ DESC,spod.id_
     </select>
     <select id="countByTransNo" resultType="java.lang.String">
         SELECT trans_no_ FROM student_payment_route_order WHERE trans_no_ IN

+ 2 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/storage/provider/AliyunOssStoragePlugin.java

@@ -3,6 +3,7 @@ package com.ym.mec.thirdparty.storage.provider;
 import java.io.File;
 import java.io.IOException;
 
+import com.ym.mec.thirdparty.threadLocal.BucketContextHolder;
 import org.apache.commons.io.FileUtils;
 import org.apache.poi.util.IOUtils;
 import org.springframework.beans.factory.DisposableBean;
@@ -74,7 +75,7 @@ public class AliyunOssStoragePlugin implements StoragePlugin, InitializingBean,
 		if (folderName.endsWith("/")) {
 			folderName = folderName.substring(0, folderName.length() - 1);
 		}
-
+		String bucketName = BucketContextHolder.getBucket().getCode();
 		ossClient.putObject(bucketName, folderName + "/" + file.getName(), file);
 
 		return "https://" + bucketName + "." + endpoint + "/" + folderName + "/" + file.getName();

+ 14 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/threadLocal/BaseEnum.java

@@ -0,0 +1,14 @@
+package com.ym.mec.thirdparty.threadLocal;
+
+/**
+ * 枚举类基础类
+ */
+public interface BaseEnum<T, E extends Enum<E>> {
+
+	/**
+	 * 获取枚举类的code值
+	 * @return
+	 */
+	public T getCode();
+
+}

+ 25 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/threadLocal/BucketContextHolder.java

@@ -0,0 +1,25 @@
+package com.ym.mec.thirdparty.threadLocal;
+
+
+public class BucketContextHolder {
+
+
+	private static final ThreadLocal<BucketEnum> bucketContextHolder = new ThreadLocal<>();
+
+	public static void setBucket(BucketEnum bucket) {
+		bucketContextHolder.set(bucket);
+	}
+
+	public static BucketEnum getBucket() {
+		BucketEnum bucket = bucketContextHolder.get();
+		if (bucket == null){
+			return BucketEnum.daya;
+		}
+		return bucketContextHolder.get();
+	}
+
+	public static void clearBucket() {
+		bucketContextHolder.remove();
+	}
+
+}

+ 16 - 12
mec-web/src/main/java/com/ym/mec/web/controller/UploadFileController.java

@@ -1,14 +1,13 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.service.UploadFileService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.UploadReturnBean;
+import com.ym.mec.thirdparty.threadLocal.BucketEnum;
+import com.ym.mec.thirdparty.threadLocal.BucketContextHolder;
+import com.ym.mec.util.upload.UploadUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiParam;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Random;
-
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -20,10 +19,11 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
-import com.ym.mec.biz.service.UploadFileService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.UploadReturnBean;
-import com.ym.mec.util.upload.UploadUtil;
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
 
 /** 
  * 上传控制层
@@ -40,8 +40,10 @@ public class UploadFileController extends BaseController {
 	private SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
 
 	@PostMapping(value = "uploadFile")
-	public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) {
+	public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file,
+							 @RequestParam("bucket") BucketEnum bucket){
 		try {
+			BucketContextHolder.setBucket(bucket);
 			if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {
 				UploadReturnBean bean = uploadFileService.uploadFile(file.getInputStream(), UploadUtil.getExtension(file.getOriginalFilename()));
 				bean.setSize(file.getSize());
@@ -53,6 +55,8 @@ public class UploadFileController extends BaseController {
 			}
 		} catch (Exception e) {
 			LOGGER.error("上传失败", e);
+		}finally {
+			BucketContextHolder.clearBucket();
 		}
 		return failed("上传失败");
 	}