|  | @@ -6,12 +6,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 | 
	
		
			
				|  |  |  import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
	
		
			
				|  |  | -import com.beust.jcommander.internal.Lists;
 | 
	
		
			
				|  |  |  import com.google.common.collect.Maps;
 | 
	
		
			
				|  |  | -import com.microsvc.toolkit.middleware.payment.common.api.BasePaymentService;
 | 
	
		
			
				|  |  |  import com.microsvc.toolkit.middleware.payment.common.api.PaymentServiceContext;
 | 
	
		
			
				|  |  | -import com.microsvc.toolkit.middleware.payment.common.api.entity.DivideReq;
 | 
	
		
			
				|  |  | -import com.microsvc.toolkit.middleware.payment.common.api.entity.DivideResp;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDao;
 | 
	
	
		
			
				|  | @@ -32,7 +28,6 @@ import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.wrapper.course.CourseRelationWrapper;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.constant.SysConfigConstant;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.entity.HttpResponseResult;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.common.enums.ESettlementFrom;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.enums.EStatus;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.enums.PostStatusEnum;
 | 
	
		
			
				|  |  |  import com.yonge.toolset.base.exception.BizException;
 | 
	
	
		
			
				|  | @@ -42,7 +37,6 @@ import org.apache.commons.lang.StringUtils;
 | 
	
		
			
				|  |  |  import org.joda.time.DateTime;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | -import org.springframework.transaction.annotation.Propagation;
 | 
	
		
			
				|  |  |  import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.math.BigDecimal;
 | 
	
	
		
			
				|  | @@ -262,13 +256,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |          // 计算老师分润数据  平台的真实收益
 | 
	
		
			
				|  |  |          BigDecimal platformFee = tenantdivMap.getOrDefault(-1L, BigDecimal.ZERO);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 计算分润
 | 
	
		
			
				|  |  | -        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, platformFee);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          tenantAlbumService.orderSuccess(userPaymentOrder);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap );
 | 
	
		
			
				|  |  | +        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap ,platformFee);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -354,9 +344,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // 计算分润
 | 
	
		
			
				|  |  | -        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
 | 
	
		
			
				|  |  | -        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
 | 
	
		
			
				|  |  | +        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private boolean checkSendMessage(Long userId, ClientEnum orderClient) {
 | 
	
	
		
			
				|  | @@ -465,10 +453,8 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |                  // 分润给老师
 | 
	
		
			
				|  |  |                  bizMap.merge(userPaymentOrder.getBizId(), teacherAmount, BigDecimal::add);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            // 计算分润
 | 
	
		
			
				|  |  | -            teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
 | 
	
		
			
				|  |  | +            saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Set<Long> studentIds = new HashSet();
 | 
	
	
		
			
				|  | @@ -604,10 +590,8 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |                  bizMap.merge(userPaymentOrder.getBizId(), teacherAmount, BigDecimal::add);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            // 计算分润
 | 
	
		
			
				|  |  | -            teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
 | 
	
		
			
				|  |  | +            saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          log.info("buyLiveCourseSuccess ok");
 | 
	
		
			
				|  |  |          //课程购买成功后进行消息推送
 | 
	
	
		
			
				|  | @@ -688,10 +672,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |              bizMap.merge(userPaymentOrder.getBizId(), teacherAmount, BigDecimal::add);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // 计算分润
 | 
	
		
			
				|  |  | -        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
 | 
	
		
			
				|  |  | +        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 平台学生 发送推送
 | 
	
	
		
			
				|  | @@ -771,12 +752,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |          //服务费  原价的平台服务费 ,减去优惠券金额
 | 
	
		
			
				|  |  |          BigDecimal serviceFeeAmount = userPaymentOrder.getActualPrice();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // 计算分润
 | 
	
		
			
				|  |  | -        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          memberPriceSettingsService.orderSuccess(userPaymentOrder,checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient()));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
 | 
	
		
			
				|  |  | +        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
	
		
			
				|  | @@ -796,18 +774,15 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |          //服务费  原价的平台服务费 ,减去优惠券金额
 | 
	
		
			
				|  |  |          BigDecimal serviceFeeAmount = userPaymentOrder.getActualPrice();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // 计算分润
 | 
	
		
			
				|  |  | -        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap, serviceFeeAmount);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          activityPlanService.orderSuccess(userPaymentOrder,checkSendMessage(userPaymentOrder.getUserId(),userPaymentOrder.getOrderClient()));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap);
 | 
	
		
			
				|  |  | +        saveData(userPaymentOrder, tenantdivMap, teacherMap, bizMap, serviceFeeAmount);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // 写入数据库
 | 
	
		
			
				|  |  | -    private void saveData(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap, Map<Long, BigDecimal> teacherMap, Map<Long, BigDecimal> bizMap) {
 | 
	
		
			
				|  |  | +    private void saveData(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap, Map<Long, BigDecimal> teacherMap, Map<Long, BigDecimal> bizMap, BigDecimal serviceFeeAmount) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 判断金额是否和支付金额一致
 | 
	
	
		
			
				|  | @@ -816,14 +791,23 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |              log.error("分账金额不一致 orderNo:{} totalAmount:{} actualPrice:{}", userPaymentOrder.getOrderNo(), totalAmount, userPaymentOrder.getActualPrice());
 | 
	
		
			
				|  |  |  //            return;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        // 机构分润
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Map<Long,BigDecimal> tenantShare = new HashMap<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 计算分润
 | 
	
		
			
				|  |  | +        teacherAmount(userPaymentOrder, tenantdivMap, teacherMap,tenantShare, serviceFeeAmount);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 写入机构收支表
 | 
	
		
			
				|  |  | -        tenantDivRecord(userPaymentOrder, tenantdivMap);
 | 
	
		
			
				|  |  | +        tenantDivRecord(userPaymentOrder, tenantdivMap,false);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 写入平台
 | 
	
		
			
				|  |  |          platformDivRecord(userPaymentOrder, tenantdivMap);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        // 写入机构分润
 | 
	
		
			
				|  |  | +        tenantDivRecord(userPaymentOrder, tenantShare,true);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //写入老师收入
 | 
	
		
			
				|  |  |          //  老师分润
 | 
	
		
			
				|  |  |          for (Map.Entry<Long, BigDecimal> e : bizMap.entrySet()) {
 | 
	
	
		
			
				|  | @@ -959,7 +943,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |          platformCashAccountRecordService.save(platformCashAccountRecord);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    private void tenantDivRecord(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap) {
 | 
	
		
			
				|  |  | +    private void tenantDivRecord(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap,boolean share) {
 | 
	
		
			
				|  |  |          // 写入收支表
 | 
	
		
			
				|  |  |          List<TenantAccountRecord> tenantAccountRecordList = new ArrayList<>();
 | 
	
		
			
				|  |  |          Date date = new Date();
 | 
	
	
		
			
				|  | @@ -970,13 +954,17 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |              if (amount.compareTo(BigDecimal.ZERO) <=0) {
 | 
	
		
			
				|  |  |                  return;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            String type = userPaymentOrder.getGoodType().getCode() ;
 | 
	
		
			
				|  |  | +            if (share) {
 | 
	
		
			
				|  |  | +                type = type + "_SHARE";
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            AccountBizTypeEnum bizTypeEnum = AccountBizTypeEnum.valueOf(userPaymentOrder.getGoodType().getCode());
 | 
	
		
			
				|  |  | +            AccountBizTypeEnum bizTypeEnum = AccountBizTypeEnum.valueOf(type);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              // 写入平台支出表
 | 
	
		
			
				|  |  |              PlatformCashAccountRecord platformCashAccountRecord2 = new PlatformCashAccountRecord(userPaymentOrder.getUserId(), amount,
 | 
	
		
			
				|  |  | -                    InOrOutEnum.OUT, PostStatusEnum.WAIT, AccountBizTypeEnum.valueOf(userPaymentOrder.getOrderType().name()), userPaymentOrder.getBizId(),
 | 
	
		
			
				|  |  | +                    InOrOutEnum.OUT, PostStatusEnum.WAIT, bizTypeEnum, userPaymentOrder.getBizId(),
 | 
	
		
			
				|  |  |                      userPaymentOrder.getOrderNo(), date);
 | 
	
		
			
				|  |  |              platformCashAccountRecordService.save(platformCashAccountRecord2);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1000,7 +988,8 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // 计算分润
 | 
	
		
			
				|  |  | -    private void teacherAmount(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap, Map<Long, BigDecimal> teacherMap, BigDecimal platformFee) {
 | 
	
		
			
				|  |  | +    private void teacherAmount(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap, Map<Long, BigDecimal> teacherMap,
 | 
	
		
			
				|  |  | +                               Map<Long, BigDecimal> tenantShare, BigDecimal platformFee) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (platformFee.compareTo(BigDecimal.ZERO) <= 0) {
 | 
	
		
			
				|  |  |              return;
 | 
	
	
		
			
				|  | @@ -1030,7 +1019,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  } else if (accountTenantTo.getShareTenant() !=null && accountTenantTo.getShareTenant() > 0) {
 | 
	
		
			
				|  |  |                      // 分润给机构
 | 
	
		
			
				|  |  | -                    tenantdivMap.merge(accountTenantTo.getShareTenant(), shareFee, BigDecimal::add);
 | 
	
		
			
				|  |  | +                    tenantShare.merge(accountTenantTo.getShareTenant(), shareFee, BigDecimal::add);
 | 
	
		
			
				|  |  |                      tenantdivMap.merge(-1L, shareFee, BigDecimal::subtract);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  } else {
 |