|
@@ -6,8 +6,13 @@ 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.google.common.collect.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.microsvc.toolkit.middleware.payment.common.api.enums.PaymentStatus;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDao;
|
|
@@ -54,7 +59,7 @@ import java.util.stream.Collectors;
|
|
|
public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMemberRecordMapper, PaymentDivMemberRecord> implements PaymentDivMemberRecordService {
|
|
|
|
|
|
@Autowired
|
|
|
- private PaymentDivMemberService paymentDivMemberService;
|
|
|
+ private TenantMemberService tenantMemberService;
|
|
|
|
|
|
@Autowired
|
|
|
private PaymentMerchantConfigService paymentMerchantConfigService;
|
|
@@ -138,6 +143,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
@Autowired
|
|
|
private StudentService studentService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private TenantTeacherAccountRecordService tenantTeacherAccountRecordService;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 查询详情
|
|
@@ -246,7 +254,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
|
|
|
|
|
|
BigDecimal tenantAmount = tenantAlbumContent.getSalePrice().subtract(tenantAlbumContent.getOriginalPrice())
|
|
|
- .multiply(BigDecimal.valueOf(tenantAlbumContent.getBuyMultiple()));
|
|
|
+ .multiply(BigDecimal.valueOf(tenantAlbumContent.getBuyMultiple())).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
|
tenantdivMap.merge(tenantAlbumContent.getTenantId(), tenantAmount, BigDecimal::add);
|
|
|
tenantdivMap.merge(-1L, tenantAmount, BigDecimal::subtract);
|
|
@@ -297,7 +305,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
// 保存购买记录
|
|
|
musicSheetService.addMusicSheetPurchaseRecord(userPaymentOrder, actualPrice, serviceFeeAmount);
|
|
|
|
|
|
- String userAccountConfig = redisCacheService.getUserAccountConfig(userPaymentOrder.getSubOrderNo());
|
|
|
+ String userAccountConfig = userPaymentOrder.getAccountConfig();
|
|
|
UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
|
|
|
if (StringUtils.isBlank(userAccountConfig)) {
|
|
|
accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
|
|
@@ -311,13 +319,11 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
if (!musicSheet.getSourceType().getCode().equals(SourceTypeEnum.PLATFORM.getCode())) {
|
|
|
|
|
|
// 老师收入
|
|
|
- BigDecimal teacherAmount = BigDecimal.ONE.subtract(serviceFee).multiply(expectPrice);
|
|
|
+ BigDecimal teacherAmount = BigDecimal.ONE.subtract(serviceFee).multiply(expectPrice).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
|
// 判断分润给机构 还是给老师
|
|
|
// 机构ID = 0 老师设置了不分润
|
|
|
- if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() == 0) {
|
|
|
-
|
|
|
- } else if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() >0) {
|
|
|
+ if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() >0) {
|
|
|
// 分润给机构
|
|
|
tenantdivMap.merge(accountTenantTo.getIncomeTenant(), teacherAmount, BigDecimal::add);
|
|
|
tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
|
|
@@ -431,7 +437,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
log.info("buyPracticeCourseSuccess ok");
|
|
|
|
|
|
|
|
|
- String userAccountConfig = redisCacheService.getUserAccountConfig(userPaymentOrder.getSubOrderNo());
|
|
|
+ String userAccountConfig = userPaymentOrder.getAccountConfig();
|
|
|
UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
|
|
|
if (StringUtils.isBlank(userAccountConfig)) {
|
|
|
accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
|
|
@@ -442,9 +448,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
// 老师收入总金额
|
|
|
BigDecimal teacherAmount = teacherSalaryList.stream().map(CourseScheduleTeacherSalary::getActualSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
// 判断分润给机构 还是给老师
|
|
|
- if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() == 0) {
|
|
|
-
|
|
|
- } else if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() > 0) {
|
|
|
+ if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() > 0) {
|
|
|
// 分润给机构
|
|
|
tenantdivMap.merge( accountTenantTo.getIncomeTenant() , teacherAmount, BigDecimal::add);
|
|
|
tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
|
|
@@ -567,7 +571,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
courseScheduleTeacherSalaryService.getDao().insertBatch(teacherSalaryList);
|
|
|
|
|
|
|
|
|
- String userAccountConfig = redisCacheService.getUserAccountConfig(userPaymentOrder.getSubOrderNo());
|
|
|
+ String userAccountConfig = userPaymentOrder.getAccountConfig();
|
|
|
UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
|
|
|
if (StringUtils.isBlank(userAccountConfig)) {
|
|
|
accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
|
|
@@ -578,9 +582,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
// 老师收入总金额
|
|
|
BigDecimal teacherAmount = teacherSalaryList.stream().map(CourseScheduleTeacherSalary::getActualSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
// 判断分润给机构 还是给老师
|
|
|
- if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() == 0) {
|
|
|
-
|
|
|
- } else if (accountTenantTo.getIncomeTenant() !=null && accountTenantTo.getIncomeTenant() >0) {
|
|
|
+ if (accountTenantTo.getIncomeTenant() !=null && accountTenantTo.getIncomeTenant() >0) {
|
|
|
// 分润给机构
|
|
|
tenantdivMap.merge(accountTenantTo.getIncomeTenant() , teacherAmount, BigDecimal::add);
|
|
|
tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
|
|
@@ -652,7 +654,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
BigDecimal teacherAmount = expectPrice.subtract(serviceFeeAmount).setScale(2, RoundingMode.HALF_UP);
|
|
|
// 判断分润给机构 还是给老师
|
|
|
|
|
|
- String userAccountConfig = redisCacheService.getUserAccountConfig(userPaymentOrder.getSubOrderNo());
|
|
|
+ String userAccountConfig = userPaymentOrder.getAccountConfig();
|
|
|
UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
|
|
|
if (StringUtils.isBlank(userAccountConfig)) {
|
|
|
accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
|
|
@@ -660,9 +662,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
|
|
|
}
|
|
|
|
|
|
- if (accountTenantTo.getIncomeTenant() != null && accountTenantTo.getIncomeTenant() == 0) {
|
|
|
-
|
|
|
- } else if (accountTenantTo.getIncomeTenant() !=null && accountTenantTo.getIncomeTenant() >0) {
|
|
|
+ if (accountTenantTo.getIncomeTenant() !=null && accountTenantTo.getIncomeTenant() >0) {
|
|
|
// 分润给机构
|
|
|
tenantdivMap.merge(accountTenantTo.getIncomeTenant(), teacherAmount, BigDecimal::add);
|
|
|
tenantdivMap.merge(-1L, teacherAmount, BigDecimal::subtract);
|
|
@@ -795,15 +795,33 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
|
|
|
Map<Long,BigDecimal> tenantShare = new HashMap<>();
|
|
|
|
|
|
+ BigDecimal amount = bizMap.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
// 计算分润
|
|
|
- teacherAmount(userPaymentOrder, tenantdivMap, teacherMap,tenantShare, tenantdivMap.get(-1L));
|
|
|
+ teacherAmount(userPaymentOrder, tenantdivMap, teacherMap,tenantShare, tenantdivMap.get(-1L).subtract(amount));
|
|
|
+
|
|
|
+ String userAccountConfig = userPaymentOrder.getAccountConfig();
|
|
|
+ UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
|
|
|
+ if (StringUtils.isBlank(userAccountConfig)) {
|
|
|
+ accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
|
|
|
+ } else {
|
|
|
+ accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- // 写入机构收支表
|
|
|
- tenantDivRecord(userPaymentOrder, tenantdivMap,false);
|
|
|
+ if (accountTenantTo.getIncomeTenant() >0 ){
|
|
|
+
|
|
|
+ // 写入机构收支表
|
|
|
+ tenantDivRecord(userPaymentOrder, tenantdivMap,false);
|
|
|
+ // 写入平台
|
|
|
+ platformDivRecord(userPaymentOrder, tenantdivMap);
|
|
|
+ } else {
|
|
|
+ // 写入平台
|
|
|
+ platformDivRecord(userPaymentOrder, tenantdivMap);
|
|
|
+ // 写入机构收支表
|
|
|
+ tenantDivRecord(userPaymentOrder, tenantdivMap,false);
|
|
|
|
|
|
- // 写入平台
|
|
|
- platformDivRecord(userPaymentOrder, tenantdivMap);
|
|
|
+ }
|
|
|
|
|
|
// 写入机构分润
|
|
|
tenantDivRecord(userPaymentOrder, tenantShare,true);
|
|
@@ -827,6 +845,17 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
}
|
|
|
|
|
|
private void teacherBizRecord(UserOrderDetailVo userPaymentOrder, Long bizId, BigDecimal amount) {
|
|
|
+ String userAccountConfig = userPaymentOrder.getAccountConfig();
|
|
|
+ UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
|
|
|
+ if (StringUtils.isBlank(userAccountConfig)) {
|
|
|
+ accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
|
|
|
+ } else {
|
|
|
+ accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
|
|
|
+ }
|
|
|
+ if (!accountTenantTo.isIncomeTeacher()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
//获取账期时间
|
|
|
Date accountPeriodTime = userOrderService.getAccountPeriodTime(userPaymentOrder);
|
|
|
|
|
@@ -855,63 +884,66 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
UserOrderPayment newestPayment = userOrderPaymentService.getNewestPayment(null, userPaymentOrder.getOrderNo());
|
|
|
|
|
|
PaymentMerchantConfig merchantConfig = paymentMerchantConfigService.getByPaymentVendor(userPaymentOrder.getPaymentVendor());
|
|
|
- List<PaymentDivMemberRecord> paymentDivMemberRecords = new ArrayList<>();
|
|
|
- tenantdivMap.forEach((k, v) -> {
|
|
|
-
|
|
|
- if (v.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
-
|
|
|
- Boolean tenantEnterFlag = false;
|
|
|
- // 执行分账
|
|
|
- PaymentDivMember paymentDivMember = null;
|
|
|
- String divideOrderNo = IdWorker.getIdStr();
|
|
|
- BigDecimal feeAmt = BigDecimal.ZERO;
|
|
|
-// if (merchantConfig != null && newestPayment != null) {
|
|
|
-// paymentDivMember = paymentDivMemberService.getByAppIdAndTenantId(merchantConfig.getAppId(), k);
|
|
|
-// if (paymentDivMember != null) {
|
|
|
-// // 执行分账逻辑
|
|
|
-// BasePaymentService paymentService = paymentServiceContext.getPaymentService(merchantConfig.getPaymentVendor());
|
|
|
-// DivideReq.DivMember divMember = DivideReq.DivMember.builder()
|
|
|
-// .memberId(paymentDivMember.getMemberId())
|
|
|
-// .amount(v)
|
|
|
-// .feeFlag("Y")
|
|
|
-// .build();
|
|
|
-// DivideReq divideReq = DivideReq.builder()
|
|
|
-// .transNo(newestPayment.getTransNo())
|
|
|
-// .orderNo(userPaymentOrder.getOrderNo())
|
|
|
-// .divideOrderNo(divideOrderNo)
|
|
|
-// .divideAmount(v)
|
|
|
-// .divMembers(Lists.newArrayList(divMember))
|
|
|
-// .build();
|
|
|
-// try {
|
|
|
-// DivideResp divide = paymentService.divide(divideReq);
|
|
|
-// feeAmt = divide.getFeeAmount();
|
|
|
-// tenantEnterFlag = true;
|
|
|
-// } catch (Exception e) {
|
|
|
-// log.error("分账失败 分账对象 {} 分账数据 {} 分账订单号 {}", paymentDivMember, divideReq, divideOrderNo);
|
|
|
-// }
|
|
|
-//
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
- // 写入机构分账记录表
|
|
|
- PaymentDivMemberRecord paymentDivMemberRecord = PaymentDivMemberRecord.builder()
|
|
|
- .tenantId(k)
|
|
|
- .appId(merchantConfig != null ? merchantConfig.getAppId() : null)
|
|
|
- .memberId(paymentDivMember != null ? paymentDivMember.getMemberId() : null)
|
|
|
+ String userAccountConfig = userPaymentOrder.getAccountConfig();
|
|
|
+ UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
|
|
|
+ if (StringUtils.isBlank(userAccountConfig)) {
|
|
|
+ accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
|
|
|
+ } else {
|
|
|
+ accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ BigDecimal amount = tenantdivMap.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ boolean tenantEnterFlag = false;
|
|
|
+ // 执行分账
|
|
|
+ TenantMember tenantMember = null;
|
|
|
+ String divideOrderNo = IdWorker.getIdStr();
|
|
|
+ BigDecimal feeAmt = BigDecimal.ZERO;
|
|
|
+ DivideResp divide = new DivideResp();
|
|
|
+ if (merchantConfig != null && newestPayment != null) {
|
|
|
+ if (accountTenantTo.getIncomeTenant() > 0) {
|
|
|
+ tenantMember = tenantMemberService
|
|
|
+ .getByAppIdAndTenantId(merchantConfig.getAppId(), accountTenantTo.getIncomeTenant(),merchantConfig.getPayerType());
|
|
|
+ }
|
|
|
+ if (tenantMember != null) {
|
|
|
+ // 执行分账逻辑
|
|
|
+ BasePaymentService paymentService = paymentServiceContext.getPaymentService(merchantConfig.getPaymentVendor());
|
|
|
+ DivideReq.DivMember divMember = DivideReq.DivMember.builder()
|
|
|
+ .memberId(tenantMember.getMemberId())
|
|
|
+ .amount(amount)
|
|
|
+ .feeFlag("Y")
|
|
|
+ .build();
|
|
|
+ DivideReq divideReq = DivideReq.builder()
|
|
|
+ .transNo(newestPayment.getTransNo())
|
|
|
.orderNo(userPaymentOrder.getOrderNo())
|
|
|
- .divOrderNo(divideOrderNo)
|
|
|
- .transNo(newestPayment != null ? newestPayment.getTransNo() : null)
|
|
|
- .amount(v)
|
|
|
- .tenantEnterFlag(tenantEnterFlag)
|
|
|
- .status("SUCCESS")
|
|
|
- .feeFlag(true)
|
|
|
- .feeAmt(feeAmt)
|
|
|
+ .divideOrderNo(divideOrderNo)
|
|
|
+ .divideAmount(amount)
|
|
|
+ .divMembers(Lists.newArrayList(divMember))
|
|
|
.build();
|
|
|
- paymentDivMemberRecords.add(paymentDivMemberRecord);
|
|
|
- }
|
|
|
+ try {
|
|
|
+ divide = paymentService.divide(divideReq);
|
|
|
+ feeAmt = divide.getFeeAmount();
|
|
|
+ tenantEnterFlag = true;
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("分账失败 分账对象 {} 分账数据 {} 分账订单号 {}", tenantMember, divideReq, divideOrderNo);
|
|
|
+ }
|
|
|
|
|
|
- });
|
|
|
- paymentDivMemberRecordService.saveBatch(paymentDivMemberRecords);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 写入分账记录表
|
|
|
+ PaymentDivMemberRecord paymentDivMemberRecord = PaymentDivMemberRecord.builder()
|
|
|
+ .tenantId(accountTenantTo.getIncomeTenant())
|
|
|
+ .appId(merchantConfig != null ? merchantConfig.getAppId() : null)
|
|
|
+ .memberId(tenantMember != null ? tenantMember.getMemberId() : null)
|
|
|
+ .orderNo(userPaymentOrder.getOrderNo())
|
|
|
+ .divOrderNo(divideOrderNo)
|
|
|
+ .transNo(newestPayment != null ? newestPayment.getTransNo() : null)
|
|
|
+ .amount(amount)
|
|
|
+ .tenantEnterFlag(divide.getStatus()!=null && divide.getStatus().equals(PaymentStatus.SUCCESSED))
|
|
|
+ .status("SUCCESS")
|
|
|
+ .feeFlag(true)
|
|
|
+ .feeAmt(feeAmt)
|
|
|
+ .build();
|
|
|
+ paymentDivMemberRecordService.save(paymentDivMemberRecord);
|
|
|
}
|
|
|
|
|
|
private void teacherShare(UserOrderDetailVo userPaymentOrder, BigDecimal shareFee) {
|
|
@@ -935,58 +967,153 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
private void platformDivRecord(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap) {
|
|
|
// 写入平台收入表
|
|
|
Date date = new Date();
|
|
|
+ String userAccountConfig = userPaymentOrder.getAccountConfig();
|
|
|
+ UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
|
|
|
+ if (StringUtils.isBlank(userAccountConfig)) {
|
|
|
+ accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
|
|
|
+ } else {
|
|
|
+ accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
|
|
|
+ }
|
|
|
+ AccountBizTypeEnum bizTypeEnum = AccountBizTypeEnum.valueOf(userPaymentOrder.getOrderType().name());
|
|
|
BigDecimal amount = tenantdivMap.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ PostStatusEnum platformPostStatus = PostStatusEnum.RECORDED;
|
|
|
+ SourceTypeEnum sourceType = SourceTypeEnum.ORDER;
|
|
|
+ if (accountTenantTo.getIncomeTenant() >0 ){
|
|
|
+ amount = tenantdivMap.get(-1L);
|
|
|
+ platformPostStatus = PostStatusEnum.WAIT;
|
|
|
+ sourceType = SourceTypeEnum.TENANT;
|
|
|
+ }
|
|
|
|
|
|
if (amount.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
PlatformCashAccountRecord platformCashAccountRecord = new PlatformCashAccountRecord(userPaymentOrder.getUserId(), amount,
|
|
|
- InOrOutEnum.IN, PostStatusEnum.RECORDED, AccountBizTypeEnum.valueOf(userPaymentOrder.getOrderType().name()), userPaymentOrder.getBizId(),
|
|
|
+ InOrOutEnum.IN, platformPostStatus, bizTypeEnum, userPaymentOrder.getBizId(),
|
|
|
userPaymentOrder.getOrderNo(), date);
|
|
|
+ platformCashAccountRecord.setSourceType(sourceType);
|
|
|
+
|
|
|
platformCashAccountRecordService.save(platformCashAccountRecord);
|
|
|
+ if (accountTenantTo.getIncomeTenant() >0 ){
|
|
|
+ // 写入机构支出到平台
|
|
|
+ // 写入机构流水表
|
|
|
+ TenantAccountRecord tenantAccountRecord = TenantAccountRecord.builder()
|
|
|
+ .tenantId(accountTenantTo.getIncomeTenant())
|
|
|
+ .transAmount(amount)
|
|
|
+ .platformCashAccountRecordId(platformCashAccountRecord.getId())
|
|
|
+ .sourceType(SourceTypeEnum.PLATFORM)
|
|
|
+ .inOrOut(InOrOutEnum.OUT.getCode())
|
|
|
+ .postStatus(PostStatusEnum.WAIT.getCode())
|
|
|
+ .bizType(bizTypeEnum.getCode())
|
|
|
+ .bizId(userPaymentOrder.getBizId())
|
|
|
+ .bizName(userPaymentOrder.getGoodName())
|
|
|
+ .orderNo(userPaymentOrder.getOrderNo())
|
|
|
+ .build();
|
|
|
+ tenantAccountRecordService.save(tenantAccountRecord);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void tenantDivRecord(UserOrderDetailVo userPaymentOrder, Map<Long, BigDecimal> tenantdivMap,boolean share) {
|
|
|
// 写入收支表
|
|
|
- List<TenantAccountRecord> tenantAccountRecordList = new ArrayList<>();
|
|
|
Date date = new Date();
|
|
|
- tenantdivMap.forEach((tenantId, amount) -> {
|
|
|
+ for (Map.Entry<Long, BigDecimal> entry : tenantdivMap.entrySet()) {
|
|
|
+ Long tenantId = entry.getKey();
|
|
|
+ BigDecimal amount = entry.getValue();
|
|
|
+ BigDecimal tenantAmount = amount;
|
|
|
if (tenantId.equals(-1L)) {
|
|
|
- return;
|
|
|
+ continue;
|
|
|
}
|
|
|
- if (amount.compareTo(BigDecimal.ZERO) <=0) {
|
|
|
- return;
|
|
|
+ if (amount.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
+ continue;
|
|
|
}
|
|
|
- String type = userPaymentOrder.getGoodType().getCode() ;
|
|
|
+ String type = userPaymentOrder.getGoodType().getCode();
|
|
|
if (share) {
|
|
|
type = type + "_SHARE";
|
|
|
}
|
|
|
|
|
|
AccountBizTypeEnum bizTypeEnum = AccountBizTypeEnum.valueOf(type);
|
|
|
|
|
|
+ // 如果是机构入账
|
|
|
+ String userAccountConfig = userPaymentOrder.getAccountConfig();
|
|
|
+ UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
|
|
|
+ if (StringUtils.isBlank(userAccountConfig)) {
|
|
|
+ accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
|
|
|
+ } else {
|
|
|
+ accountTenantTo = JSON.parseObject(userAccountConfig, UserPaymentOrderWrapper.AccountTenantTo.class);
|
|
|
+ }
|
|
|
+ PostStatusEnum tenantPostStatus = PostStatusEnum.WAIT;
|
|
|
+ boolean isIncomeTenant = false;
|
|
|
+ if (accountTenantTo.getIncomeTenant() > 0 && tenantId.equals(accountTenantTo.getIncomeTenant()) && !share) {
|
|
|
+ tenantAmount = tenantdivMap.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ tenantPostStatus = PostStatusEnum.RECORDED;
|
|
|
+ isIncomeTenant = true;
|
|
|
+ }
|
|
|
|
|
|
- // 写入平台支出表
|
|
|
- PlatformCashAccountRecord platformCashAccountRecord2 = new PlatformCashAccountRecord(userPaymentOrder.getUserId(), amount,
|
|
|
- InOrOutEnum.OUT, PostStatusEnum.WAIT, bizTypeEnum, userPaymentOrder.getBizId(),
|
|
|
- userPaymentOrder.getOrderNo(), date);
|
|
|
- platformCashAccountRecordService.save(platformCashAccountRecord2);
|
|
|
+ Long platformCashAccountRecordId = null;
|
|
|
+ if (!isIncomeTenant) {
|
|
|
+ // 写入平台支出表
|
|
|
+ PlatformCashAccountRecord platformCashAccountRecord2 = new PlatformCashAccountRecord(userPaymentOrder.getUserId(), amount,
|
|
|
+ InOrOutEnum.OUT, PostStatusEnum.WAIT, bizTypeEnum, userPaymentOrder.getBizId(),
|
|
|
+ userPaymentOrder.getOrderNo(), date);
|
|
|
+ platformCashAccountRecord2.setSourceType(SourceTypeEnum.TENANT);
|
|
|
+ platformCashAccountRecordService.save(platformCashAccountRecord2);
|
|
|
+ platformCashAccountRecordId = platformCashAccountRecord2.getId();
|
|
|
+ }
|
|
|
|
|
|
// 写入机构流水表
|
|
|
TenantAccountRecord tenantAccountRecord = TenantAccountRecord.builder()
|
|
|
.tenantId(tenantId)
|
|
|
- .transAmount(amount)
|
|
|
- .platformCashAccountRecordId(platformCashAccountRecord2.getId())
|
|
|
+ .transAmount(tenantAmount)
|
|
|
+ .platformCashAccountRecordId(platformCashAccountRecordId)
|
|
|
+ .sourceType(SourceTypeEnum.ORDER)
|
|
|
.inOrOut(InOrOutEnum.IN.getCode())
|
|
|
- .postStatus(PostStatusEnum.WAIT.getCode())
|
|
|
+ .postStatus(tenantPostStatus.getCode())
|
|
|
.bizType(bizTypeEnum.getCode())
|
|
|
.bizId(userPaymentOrder.getBizId())
|
|
|
.bizName(userPaymentOrder.getGoodName())
|
|
|
.orderNo(userPaymentOrder.getOrderNo())
|
|
|
.build();
|
|
|
- tenantAccountRecordList.add(tenantAccountRecord);
|
|
|
|
|
|
- });
|
|
|
- tenantAccountRecordService.saveBatch(tenantAccountRecordList);
|
|
|
+ if (!isIncomeTenant) {
|
|
|
+ tenantAccountRecord.setSourceType(SourceTypeEnum.PLATFORM);
|
|
|
+ }
|
|
|
+ tenantAccountRecordService.save(tenantAccountRecord);
|
|
|
+ // 是否结算到老师, 结算到老师的,写入机构支出 和老师机构收入
|
|
|
+ if ((accountTenantTo.isIncomeTeacher()&& !share) || (share && accountTenantTo.isShareTeacher())) {
|
|
|
+ TenantAccountRecord tenantAccountRecordOut = TenantAccountRecord.builder()
|
|
|
+ .tenantId(tenantId)
|
|
|
+ .transAmount(amount)
|
|
|
+ .platformCashAccountRecordId(null)
|
|
|
+ .sourceType(SourceTypeEnum.TEACHER)
|
|
|
+ .inOrOut(InOrOutEnum.OUT.getCode())
|
|
|
+ .postStatus(PostStatusEnum.WAIT.getCode())
|
|
|
+ .bizType(bizTypeEnum.getCode())
|
|
|
+ .bizId(userPaymentOrder.getBizId())
|
|
|
+ .bizName(userPaymentOrder.getGoodName())
|
|
|
+ .orderNo(userPaymentOrder.getOrderNo())
|
|
|
+ .build();
|
|
|
+ tenantAccountRecordService.save(tenantAccountRecordOut);
|
|
|
+
|
|
|
+ TenantTeacherAccountRecord tenantTeacherAccountRecord = TenantTeacherAccountRecord.builder()
|
|
|
+ .tenantId(tenantId)
|
|
|
+ .teacherId(userPaymentOrder.getMerchId())
|
|
|
+ .accountRecordId(tenantAccountRecordOut.getId())
|
|
|
+ .sourceType(SourceTypeEnum.TENANT)
|
|
|
+ .transAmount(amount)
|
|
|
+ .inOrOut(InOrOutEnum.IN.getCode())
|
|
|
+ .postStatus(PostStatusEnum.WAIT.getCode())
|
|
|
+ .bizType(bizTypeEnum.getCode())
|
|
|
+ .bizId(userPaymentOrder.getBizId())
|
|
|
+ .bizName(userPaymentOrder.getGoodName())
|
|
|
+ .orderNo(userPaymentOrder.getOrderNo())
|
|
|
+ .build();
|
|
|
+ tenantTeacherAccountRecordService.save(tenantTeacherAccountRecord);
|
|
|
+ tenantAccountRecordOut.setPlatformCashAccountRecordId(tenantTeacherAccountRecord.getId());
|
|
|
+ tenantAccountRecordService.updateById(tenantAccountRecordOut);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -998,7 +1125,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- String userAccountConfig = redisCacheService.getUserAccountConfig(userPaymentOrder.getSubOrderNo());
|
|
|
+ String userAccountConfig = userPaymentOrder.getAccountConfig();
|
|
|
UserPaymentOrderWrapper.AccountTenantTo accountTenantTo;
|
|
|
if (StringUtils.isBlank(userAccountConfig)) {
|
|
|
accountTenantTo = new UserPaymentOrderWrapper.AccountTenantTo();
|