|
@@ -45,6 +45,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.Consumer;
|
|
|
import java.util.function.Function;
|
|
@@ -2259,17 +2260,148 @@ public class ExportServiceImpl implements ExportService {
|
|
|
if (!CollectionUtils.isEmpty(orderDetails)) {
|
|
|
orderDetailMap = orderDetails.stream().collect(Collectors.groupingBy(StudentPaymentOrderDetail::getPaymentOrderId));
|
|
|
}
|
|
|
+ //获取零星收费订单(订单类型是SPORADIC)
|
|
|
+// Map<String, Integer> chargeTypeMap = new HashMap<>();
|
|
|
+// if(studentPaymentOrderExportDtos.stream().anyMatch(e-> e.getGroupType() == GroupType.SPORADIC && e.getType() != OrderTypeEnum.DEGREE_REGISTRATION)){
|
|
|
+// String sporadicIds = studentPaymentOrderExportDtos.stream().filter(e -> e.getGroupType() == GroupType.SPORADIC && e.getType() != OrderTypeEnum.DEGREE_REGISTRATION)
|
|
|
+// .map(e -> e.getMusicGroupId()).collect(Collectors.joining(","));
|
|
|
+// chargeTypeMap = sporadicChargeInfoService.getMap("sporadic_charge_info","id_","charge_type_",sporadicIds,String.class,Integer.class);
|
|
|
+// }
|
|
|
+ //获取对外订单关联的合作单位
|
|
|
+ Map<Integer, String> cooperationOrganMap = new HashMap<>();
|
|
|
+ List<Integer> cooperationOrganIds = studentPaymentOrderExportDtos.stream()
|
|
|
+ .filter(e -> OUTORDER.equals(e.getType()))
|
|
|
+ .filter(e -> e.getMusicGroupId() != null)
|
|
|
+ .map(e -> Integer.valueOf(e.getMusicGroupId()))
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (cooperationOrganIds.size() > 0) {
|
|
|
+ List<CooperationOrgan> cooperationOrgans = cooperationOrganDao.getCooperationOrganByIds(cooperationOrganIds);
|
|
|
+ cooperationOrganMap = cooperationOrgans.stream().collect(Collectors.toMap(CooperationOrgan::getId, CooperationOrgan::getName));
|
|
|
+ }
|
|
|
+ //计算手续费
|
|
|
+ Map<String,BigDecimal> serviceChargeMap = new HashMap<>();
|
|
|
+ Map<String,Integer> orderCountMap = new HashMap<>();
|
|
|
+ Integer tenantId = (Integer) params.get("tenantId");
|
|
|
+ TenantConfig tenantConfig = tenantConfigService.queryByTenantId(tenantId);
|
|
|
+ //获取乐团信息
|
|
|
+ List<Long> calenderIds = studentPaymentOrderExportDtos.stream().map(e -> e.getCalenderId()).filter(e -> e != null).distinct().collect(Collectors.toList());
|
|
|
+ Map<Long, Integer> calenderCooperationMap = new HashMap<>();
|
|
|
+ Map<Integer, String> firstMusicMap = new HashMap<>();
|
|
|
+ if(calenderIds != null && calenderIds.size() > 0){
|
|
|
+ //获取缴费项目关联的合作单位
|
|
|
+ calenderCooperationMap = musicGroupPaymentCalenderService.findCooperationByIds(calenderIds);
|
|
|
+ //获取合作单位第一个乐团
|
|
|
+ firstMusicMap = MapUtil.convertMybatisMap(cooperationOrganDao.findFirstMusic());
|
|
|
+ }
|
|
|
+ List<Integer> studentIds = studentPaymentOrderExportDtos.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
|
|
|
+ //获取学员第一个课程组编号
|
|
|
+ Map<Integer, String> userFirstVipMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.findUserFirstVipMap("VIP",studentIds));
|
|
|
+ //获取学员最近加入的一个乐团编号
|
|
|
+ Map<Integer, String> userLastMusicIdMap = MapUtil.convertMybatisMap(studentRegistrationDao.getLastMusicGroupId(studentIds));
|
|
|
+ Map<Integer, String> userLastMusicNameMap = MapUtil.convertMybatisMap(studentRegistrationDao.getLastMusicGroupName(studentIds));
|
|
|
+ Set<String> musicGroupIds = studentPaymentOrderExportDtos.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
|
|
|
+ Map<String, String> musicGroupNameMap = new HashMap<>();
|
|
|
+ if(musicGroupIds != null && musicGroupIds.size() > 0){
|
|
|
+ musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
|
|
|
+ }
|
|
|
+ //获取学员名称
|
|
|
+ Map<Integer, String> studentNameMap = studentService.getMap("sys_user", "id_", "username_", studentIds, tenantId, Integer.class, String.class);
|
|
|
+
|
|
|
|
|
|
for (StudentPaymentOrderExportDto basicOrder : studentPaymentOrderExportDtos) {
|
|
|
if(basicOrder.getRouteAmount().compareTo(BigDecimal.ZERO) == 0){
|
|
|
continue;
|
|
|
}
|
|
|
+ basicOrder.getUser().setUsername(studentNameMap.get(basicOrder.getUserId()));
|
|
|
+ //填充业务数据
|
|
|
+ //计算手续费
|
|
|
+ this.calcPlatformFee(basicOrder,serviceChargeMap,orderCountMap,tenantConfig);
|
|
|
+ //获取乐团信息
|
|
|
+ this.initMusicGroupInfo(basicOrder,musicGroupNameMap,firstMusicMap,userLastMusicIdMap,userLastMusicNameMap,calenderCooperationMap);
|
|
|
+ //备注信息
|
|
|
+ if (basicOrder.getGoodsList() != null) {
|
|
|
+ String goodsName = basicOrder.getGoodsList().stream().map(Goods::getName).collect(Collectors.joining("|"));
|
|
|
+ basicOrder.setMemo(goodsName);
|
|
|
+ }
|
|
|
+ if (basicOrder.getType() == OUTORDER && StringUtils.isNotEmpty(basicOrder.getMusicGroupId())) {
|
|
|
+ if (cooperationOrganMap.containsKey(Integer.valueOf(basicOrder.getMusicGroupId()))) {
|
|
|
+ basicOrder.setCooperationOrganName(cooperationOrganMap.get(Integer.valueOf(basicOrder.getMusicGroupId())));
|
|
|
+ CooperationOrgan cooperationOrganEduTeacher = musicGroupDao.findCooperationOrganEduTeacher(Integer.valueOf(basicOrder.getMusicGroupId()));
|
|
|
+ if (cooperationOrganEduTeacher != null) {
|
|
|
+ basicOrder.setEduTeacher(cooperationOrganEduTeacher.getLinkman());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //VIP课程组相关
|
|
|
+ if(basicOrder.getGroupType() == GroupType.VIP){
|
|
|
+ if(StringUtils.isNotEmpty(basicOrder.getMusicGroupId()) && basicOrder.getClassGroupId() != null) {
|
|
|
+ VipGroup vipGroupInfo = vipGroupDao.findVipGroupInfo(Integer.parseInt(basicOrder.getMusicGroupId()), basicOrder.getClassGroupId());
|
|
|
+ if (vipGroupInfo != null) {
|
|
|
+ basicOrder.setSchoolName(vipGroupInfo.getSchoolName());
|
|
|
+ basicOrder.setSubjectName(vipGroupInfo.getSubjectName());
|
|
|
+ basicOrder.setEduTeacher(vipGroupInfo.getEducationalTeacherName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(basicOrder.getTypeDesc() == null){
|
|
|
+ //学员没有历史VIP课程则导出为【VIP课新增】
|
|
|
+ //学员有历史VIP课程到导出为【VIP课续费]
|
|
|
+ if(Objects.equals(userFirstVipMap.get(basicOrder.getUserId()),basicOrder.getMusicGroupId())){
|
|
|
+ basicOrder.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_VIP);
|
|
|
+ }else {
|
|
|
+ basicOrder.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RENEW_VIP);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(basicOrder.getGroupType() == GroupType.SPORADIC && basicOrder.getType() != OrderTypeEnum.DEGREE_REGISTRATION){
|
|
|
+// basicOrder.setChargeType(chargeTypeMap.get(basicOrder.getMusicGroupId()));
|
|
|
+ if (basicOrder.getChargeType() != null) {
|
|
|
+ for (SporadicChargeTypeEnum chargeType : SporadicChargeTypeEnum.values()) {
|
|
|
+ if (!chargeType.getCode().equals(basicOrder.getChargeType())) continue;
|
|
|
+ basicOrder.setSporadicType(chargeType.getMsg());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(basicOrder.getGroupType() == GroupType.PRACTICE && StringUtils.isNotEmpty(basicOrder.getMusicGroupId())){
|
|
|
+ PracticeCourseDto practiceGroup = practiceGroupDao.findByGroupId(Integer.parseInt(basicOrder.getMusicGroupId()));
|
|
|
+ if (practiceGroup != null) {
|
|
|
+ basicOrder.setSubjectName(practiceGroup.getSubjectName());
|
|
|
+ basicOrder.setEduTeacher(practiceGroup.getEduTeacherName());
|
|
|
+ }
|
|
|
+ }else if(basicOrder.getGroupType() == GroupType.REPLACEMENT && StringUtils.isNotEmpty(basicOrder.getMusicGroupId())){
|
|
|
+ ReplacementInstrumentActivityStatDto info = replacementInstrumentActivityDao.getInfo(Integer.parseInt(basicOrder.getMusicGroupId()));
|
|
|
+ if (info != null) {
|
|
|
+ basicOrder.setSubjectName(info.getSubjectName());
|
|
|
+ basicOrder.setCooperationOrganName(info.getCooperationOrganName());
|
|
|
+ basicOrder.setMemo(info.getBrand() + "(" + info.getSpecification() + ")");
|
|
|
+ CooperationOrgan cooperationOrganEduTeacher = musicGroupDao.findCooperationOrganEduTeacher(info.getCooperationOrganId());
|
|
|
+ if (cooperationOrganEduTeacher != null) {
|
|
|
+ basicOrder.setEduTeacher(cooperationOrganEduTeacher.getLinkman());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if (basicOrder.getGroupType() == GroupType.MUSIC) {
|
|
|
+ StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(basicOrder.getMusicGroupId(), basicOrder.getUserId());
|
|
|
+ if (studentRegistration != null) {
|
|
|
+ basicOrder.setSubjectName(studentRegistration.getSubjectName());
|
|
|
+ basicOrder.setSchoolName(studentRegistration.getSchoolName());
|
|
|
+ basicOrder.setCooperationOrganName(studentRegistration.getRemark());
|
|
|
+ basicOrder.setEduTeacher(studentRegistration.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(basicOrder.getTypeDesc() == null){
|
|
|
+ if(basicOrder.getGroupType().equals(GroupType.SUBJECT_CHANGE)){
|
|
|
+ basicOrder.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_MUSIC);
|
|
|
+ }else if(basicOrder.getGroupType().equals(GroupType.REPAIR)){
|
|
|
+ basicOrder.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.REPAIR);
|
|
|
+ }else {
|
|
|
+ basicOrder.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.OTHER);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//如果有订单详情
|
|
|
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);
|
|
|
+ Consumer<StudentPaymentOrderDetail> con = (orderDetail)->this.setServiceFee(basicOrder,orderDetail,userFirstVipMap);
|
|
|
detailList.stream().forEach(con);
|
|
|
}else if(basicOrder.getSaleAmount().compareTo(BigDecimal.ZERO) > 0){
|
|
|
//计算销售收入
|
|
@@ -2301,45 +2433,51 @@ public class ExportServiceImpl implements ExportService {
|
|
|
//如果只有订单,那么按分类统计
|
|
|
if(basicOrder.getServiceAmount().compareTo(BigDecimal.ZERO) > 0){
|
|
|
//计算服务收入
|
|
|
- this.setServiceFee(basicOrder);
|
|
|
+ Optional.ofNullable(groupTypeConsumerMap.get(basicOrder.getGroupType())).ifPresent(c->c.accept(basicOrder));
|
|
|
}else if(basicOrder.getSaleAmount().compareTo(BigDecimal.ZERO) > 0){
|
|
|
//计算销售收入
|
|
|
this.setSaleFee(basicOrder);
|
|
|
- }else {
|
|
|
- this.setServiceFee(basicOrder);
|
|
|
- this.setSaleFee(basicOrder);
|
|
|
}
|
|
|
+ String paymentChannel = "";
|
|
|
+ if (basicOrder.getPaymentChannel() == null) {
|
|
|
+ } else if (basicOrder.getPaymentChannel().equals("YQPAY")) {
|
|
|
+ paymentChannel = "双乾";
|
|
|
+ } else if (basicOrder.getPaymentChannel().equals("ADAPAY")) {
|
|
|
+ paymentChannel = "汇付";
|
|
|
+ } else if (basicOrder.getPaymentChannel().equals("BALANCE")) {
|
|
|
+ paymentChannel = "余额";
|
|
|
+ }
|
|
|
+ basicOrder.setPaymentChannel(paymentChannel);
|
|
|
+ basicOrder.setOrderAmount(basicOrder.getExpectAmount().add(basicOrder.getCouponRemitFee()));
|
|
|
}
|
|
|
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));
|
|
|
- }
|
|
|
- }
|
|
|
+ Map<GroupType,Consumer<StudentPaymentOrderExportDto>> groupTypeConsumerMap = new HashMap<>(GroupType.values().length);
|
|
|
+ @PostConstruct
|
|
|
+ public void initGroupTypeConsumerMap(){
|
|
|
+ groupTypeConsumerMap.put(GroupType.ACTIVITY,(orderDto)->orderDto.setVipCourseFee(orderDto.getVipCourseFee().add(orderDto.getActualAmount())));
|
|
|
+ groupTypeConsumerMap.put(GroupType.VIP,(orderDto)->orderDto.setVipCourseFee(orderDto.getVipCourseFee().add(orderDto.getActualAmount())));
|
|
|
+ groupTypeConsumerMap.put(GroupType.MEMBER,(orderDto)->orderDto.setCloudTeacherFee(orderDto.getCloudTeacherFee().add(orderDto.getActualAmount())));
|
|
|
+ groupTypeConsumerMap.put(GroupType.MUSIC,(orderDto)->orderDto.setMusicGroupCourseFee(orderDto.getMusicGroupCourseFee().add(orderDto.getActualAmount())));
|
|
|
+ groupTypeConsumerMap.put(GroupType.PRACTICE,(orderDto)->orderDto.setPracticeCourseFee(orderDto.getPracticeCourseFee().add(orderDto.getActualAmount())));
|
|
|
+ groupTypeConsumerMap.put(GroupType.REPAIR,(orderDto)->orderDto.setRepairFee(orderDto.getRepairFee().add(orderDto.getActualAmount())));
|
|
|
+ groupTypeConsumerMap.put(GroupType.SPORADIC, this::accept);
|
|
|
}
|
|
|
+
|
|
|
+ Map<Integer,Consumer<StudentPaymentOrderExportDto>> chargeTypeConsumerMap = new HashMap<>(SporadicChargeTypeEnum.values().length);
|
|
|
+ @PostConstruct
|
|
|
+ public void initChargeTypeConsumerMap(){
|
|
|
+ chargeTypeConsumerMap.put(SporadicChargeTypeEnum.LEVEL.getCode(),(orderDto)->orderDto.setDegreeFee(orderDto.getDegreeFee().add(orderDto.getActualAmount())));
|
|
|
+ chargeTypeConsumerMap.put(SporadicChargeTypeEnum.PRACTICE_GROUP_BUY.getCode(),(orderDto)->orderDto.setPracticeCourseFee(orderDto.getPracticeCourseFee().add(orderDto.getActualAmount())));
|
|
|
+ chargeTypeConsumerMap.put(SporadicChargeTypeEnum.MUSIC_UPKEEP.getCode(),(orderDto)->orderDto.setMaintenanceFee(orderDto.getMaintenanceFee().add(orderDto.getActualAmount())));
|
|
|
+ chargeTypeConsumerMap.put(SporadicChargeTypeEnum.VISITING_FEE.getCode(),(orderDto)->orderDto.setVisitFee(orderDto.getVisitFee().add(orderDto.getActualAmount())));
|
|
|
+ chargeTypeConsumerMap.put(SporadicChargeTypeEnum.RECHARGE.getCode(),(orderDto)->orderDto.setRechargeFee(orderDto.getRechargeFee().add(orderDto.getActualAmount())));
|
|
|
+ chargeTypeConsumerMap.put(SporadicChargeTypeEnum.HIGH_ONLINE_ACTIVITY.getCode(),(orderDto)->orderDto.setRechargeFee(orderDto.getRechargeFee().add(orderDto.getActualAmount())));
|
|
|
+ chargeTypeConsumerMap.put(SporadicChargeTypeEnum.CLOUD_TEACHER_BUY.getCode(),(orderDto)->orderDto.setCloudTeacherFee(orderDto.getCloudTeacherFee().add(orderDto.getActualAmount())));
|
|
|
+ }
|
|
|
+
|
|
|
public void setSaleFee(StudentPaymentOrderExportDto basicOrder){
|
|
|
BigDecimal actualAmount = basicOrder.getActualAmount();
|
|
|
switch (basicOrder.getGroupType()) {
|
|
@@ -2360,42 +2498,44 @@ public class ExportServiceImpl implements ExportService {
|
|
|
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;
|
|
|
+
|
|
|
+ Map<OrderDetailTypeEnum,BiConsumer<StudentPaymentOrderExportDto,StudentPaymentOrderDetail>> orderDetailTypeServiceConsumerMap = new HashMap<>(OrderDetailTypeEnum.values().length);
|
|
|
+ @PostConstruct
|
|
|
+ public void initOrderDetailTypeServiceConsumerMap() {
|
|
|
+ BiConsumer<StudentPaymentOrderExportDto,StudentPaymentOrderDetail> con1 = (orderDto, detail) -> orderDto.setMusicGroupCourseFee(orderDto.getMusicGroupCourseFee().add(detail.getPrice()));
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.COURSE, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.CLASSROOM, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.SINGLE, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.MIX, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.COMPREHENSIVE, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.ENLIGHTENMENT, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.TRAINING_SINGLE, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.TRAINING_MIX, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.MUSIC_NETWORK, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.HIGH, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.HIGH_ONLINE, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.HIGH_ONLINE_COURSE, con1);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.DEGREE_REGISTRATION, (orderDto, detail) -> orderDto.setDegreeFee(orderDto.getDegreeFee().add(detail.getPrice())));
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.MAINTENANCE, (orderDto, detail) -> orderDto.setMaintenanceFee(orderDto.getMaintenanceFee().add(detail.getPrice())));
|
|
|
+ BiConsumer<StudentPaymentOrderExportDto,StudentPaymentOrderDetail> con2 = (orderDto, detail) -> orderDto.setCloudTeacherFee(orderDto.getCloudTeacherFee().add(detail.getPrice()));
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.CLOUD_TEACHER,con2);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.CLOUD_TEACHER_PLUS,con2);
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.THEORY_COURSE,(orderDto, detail) -> orderDto.setTheoryCourseFee(orderDto.getTheoryCourseFee().add(detail.getPrice())));
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.PRACTICE,(orderDto, detail) -> orderDto.setPracticeCourseFee(orderDto.getPracticeCourseFee().add(detail.getPrice())));
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.VIP,(orderDto, detail) -> orderDto.setVipCourseFee(orderDto.getVipCourseFee().add(detail.getPrice())));
|
|
|
+ orderDetailTypeServiceConsumerMap.put(OrderDetailTypeEnum.REPAIR,(orderDto, detail) -> orderDto.setRepairFee(orderDto.getRepairFee().add(detail.getPrice())));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setServiceFee(StudentPaymentOrderExportDto basicOrder, StudentPaymentOrderDetail orderDetail,Map<Integer, String> userFirstVipMap){
|
|
|
+ Optional.ofNullable(orderDetailTypeServiceConsumerMap.get(orderDetail.getType())).ifPresent(consumer -> consumer.accept(basicOrder, orderDetail));
|
|
|
+ if(orderDetail.getType() == OrderDetailTypeEnum.VIP && basicOrder.getTypeDesc() == null){
|
|
|
+ //学员没有历史VIP课程则导出为【VIP课新增】
|
|
|
+ //学员有历史VIP课程到导出为【VIP课续费]
|
|
|
+ if(Objects.equals(userFirstVipMap.get(basicOrder.getUserId()),basicOrder.getMusicGroupId())){
|
|
|
+ basicOrder.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_VIP);
|
|
|
+ }else {
|
|
|
+ basicOrder.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RENEW_VIP);
|
|
|
+ }
|
|
|
}
|
|
|
//如果是内部库存转化部分收入为云教练收入
|
|
|
if(orderDetail.getType() == OrderDetailTypeEnum.MUSICAL ||
|
|
@@ -2447,6 +2587,75 @@ public class ExportServiceImpl implements ExportService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //计算汇付手续费和平台手续费
|
|
|
+ public void calcPlatformFee(StudentPaymentOrderExportDto row,Map<String,BigDecimal> serviceChargeMap,
|
|
|
+ Map<String,Integer> orderCountMap,TenantConfig tenantConfig){
|
|
|
+ BigDecimal currentFee = BigDecimal.ZERO;
|
|
|
+ if (row.getPaymentChannel() != null && row.getPaymentChannel().equals("ADAPAY")) {
|
|
|
+ FeeFlagNumDto countFeeFlagNum = studentPaymentRouteOrderDao.getCountFeeFlagNum(row.getOrderNo());
|
|
|
+
|
|
|
+ Integer times = orderCountMap.get(row.getOrderNo());
|
|
|
+ if (times == null) {
|
|
|
+ times = 1;
|
|
|
+ } else {
|
|
|
+ ++times;
|
|
|
+ }
|
|
|
+ orderCountMap.put(row.getOrderNo(), times);
|
|
|
+
|
|
|
+ currentFee = row.getServiceFee();
|
|
|
+
|
|
|
+ //兼容2022年之前的数据
|
|
|
+ if (currentFee == null || (currentFee.floatValue() == 0 && row.getCreateTime().before(DateUtil.stringToDate("2022-01-01 00:00:00")))) {
|
|
|
+ BigDecimal transferFee = serviceChargeMap.get(row.getOrderNo());
|
|
|
+ if (transferFee == null) {
|
|
|
+ transferFee = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
+ currentFee = row.getRouteAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal totalFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ if (totalFee.subtract(transferFee.add(currentFee)).doubleValue() < 0 || times == countFeeFlagNum.getTotalNum()) {
|
|
|
+ currentFee = totalFee.subtract(transferFee);
|
|
|
+ serviceChargeMap.put(row.getOrderNo(), totalFee);
|
|
|
+ } else {
|
|
|
+ serviceChargeMap.put(row.getOrderNo(), transferFee.add(currentFee));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ row.setTransferFee(currentFee);
|
|
|
+ row.setPlatformFee(row.getActualAmount().multiply(tenantConfig.getChargeRate()).divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取乐团信息
|
|
|
+ public void initMusicGroupInfo(StudentPaymentOrderExportDto row,Map<String, String> musicGroupNameMap,Map<Integer, String> firstMusicMap
|
|
|
+ ,Map<Integer, String> userLastMusicIdMap,Map<Integer, String> userLastMusicNameMap,Map<Long, Integer> calenderCooperationMap ){
|
|
|
+ Long calenderId = row.getCalenderId();
|
|
|
+ if(calenderId != null){
|
|
|
+ row.setFeeMusicGroupId(row.getMusicGroupId());
|
|
|
+ row.setFeeMusicGroupName(musicGroupNameMap.get(row.getMusicGroupId()));
|
|
|
+ OrderTypeEnum orderTypeEnum = row.getType();
|
|
|
+ if(orderTypeEnum == OrderTypeEnum.APPLY || orderTypeEnum == OrderTypeEnum.ADD_STUDENT){
|
|
|
+ Integer cooperationId = calenderCooperationMap.get(calenderId);
|
|
|
+ if(cooperationId != null){
|
|
|
+ String firstMusicId = firstMusicMap.get(cooperationId);
|
|
|
+ if(StringUtils.isEmpty(firstMusicId)){
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_MUSIC);
|
|
|
+ }else {
|
|
|
+ if(Objects.equals(firstMusicId,row.getMusicGroupId())){
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.NEW_MUSIC);
|
|
|
+ }else {
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.ADD_MUSIC);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ row.setTypeDesc(StudentPaymentOrderExportDto.TypeDesc.RENEW_MUSIC);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ row.setFeeMusicGroupId(userLastMusicIdMap.get(row.getUserId()));
|
|
|
+ row.setFeeMusicGroupName(userLastMusicNameMap.get(row.getUserId()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void routeOrderList(Map<String, Object> params, ManagerDownload managerDownload,List<String> headColumns){
|
|
|
List<StudentPaymentOrderExportDto> studentPaymentOrderExportDtos = studentPaymentRouteOrderDao.ExportQueryPage(params);
|
|
@@ -2813,42 +3022,6 @@ public class ExportServiceImpl implements ExportService {
|
|
|
}
|
|
|
row.setPaymentChannel(paymentChannel);
|
|
|
row.setOrderAmount(row.getExpectAmount().add(row.getCouponRemitFee()));
|
|
|
- BigDecimal freeFee = row.getRouteAmount().subtract(row.getMusicGroupCourseFee()).subtract(row.getVipCourseFee()).subtract(row.getPracticeCourseFee()).
|
|
|
- subtract(row.getTheoryCourseFee()).subtract(row.getDegreeFee()).subtract(row.getRepairFee()).subtract(row.getMaintenanceFee())
|
|
|
- .subtract(row.getCloudTeacherFee()).subtract(row.getLeaseFee()).subtract(row.getMusicalFee()).subtract(row.getTeachingFee())
|
|
|
- .subtract(row.getVisitFee()).subtract(row.getRechargeFee()).subtract(row.getOtherFee());
|
|
|
- if(freeFee.compareTo(BigDecimal.ZERO) > 0){
|
|
|
- //获取不为空的金额
|
|
|
- if(row.getMusicGroupCourseFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setMusicGroupCourseFee(freeFee.add(row.getMusicGroupCourseFee()));
|
|
|
- }else if(row.getVipCourseFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setVipCourseFee(freeFee.add(row.getVipCourseFee()));
|
|
|
- }else if(row.getPracticeCourseFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setPracticeCourseFee(freeFee.add(row.getPracticeCourseFee()));
|
|
|
- }else if(row.getTheoryCourseFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setTheoryCourseFee(freeFee.add(row.getTheoryCourseFee()));
|
|
|
- }else if(row.getDegreeFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setDegreeFee(freeFee.add(row.getDegreeFee()));
|
|
|
- }else if(row.getRepairFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setRepairFee(freeFee.add(row.getRepairFee()));
|
|
|
- }else if(row.getMaintenanceFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setMaintenanceFee(freeFee.add(row.getMaintenanceFee()));
|
|
|
- }else if(row.getCloudTeacherFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setCloudTeacherFee(freeFee.add(row.getCloudTeacherFee()));
|
|
|
- }else if(row.getLeaseFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setLeaseFee(freeFee.add(row.getLeaseFee()));
|
|
|
- }else if(row.getMusicalFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setMusicalFee(freeFee.add(row.getMusicalFee()));
|
|
|
- }else if(row.getTeachingFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setTeachingFee(freeFee.add(row.getTeachingFee()));
|
|
|
- }else if(row.getVisitFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setVisitFee(freeFee.add(row.getVisitFee()));
|
|
|
- }else if(row.getRechargeFee().compareTo(BigDecimal.ZERO) > 0){
|
|
|
- row.setRechargeFee(freeFee.add(row.getRechargeFee()));
|
|
|
- }else {
|
|
|
- row.setOtherFee(freeFee.add(row.getOtherFee()));
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
//查询商品收款账户配置
|
|
@@ -3236,4 +3409,17 @@ public class ExportServiceImpl implements ExportService {
|
|
|
succeed.setMsg(excelName + "导出申请已提交,请到【报表中心-下载列表查看】");
|
|
|
return succeed;
|
|
|
}
|
|
|
+
|
|
|
+ private void accept(StudentPaymentOrderExportDto orderDto) {
|
|
|
+ if (orderDto.getType() == OrderTypeEnum.DEGREE_REGISTRATION) {
|
|
|
+ orderDto.setDegreeFee(orderDto.getDegreeFee().add(orderDto.getActualAmount()));
|
|
|
+ } else {
|
|
|
+ Consumer<StudentPaymentOrderExportDto> dtoConsumer = chargeTypeConsumerMap.get(orderDto.getChargeType());
|
|
|
+ if (dtoConsumer != null) {
|
|
|
+ dtoConsumer.accept(orderDto);
|
|
|
+ } else {
|
|
|
+ orderDto.setOtherFee(orderDto.getOtherFee().add(orderDto.getActualAmount()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|