|
|
@@ -1,24 +1,134 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.CLOSE;
|
|
|
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Iterator;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.Optional;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Propagation;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import com.google.common.collect.Lists;
|
|
|
import com.microsvc.toolkit.common.tools.ThreadPool;
|
|
|
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.*;
|
|
|
+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.entity.PaymentClose;
|
|
|
+import com.microsvc.toolkit.middleware.payment.common.api.entity.PaymentResp;
|
|
|
+import com.microsvc.toolkit.middleware.payment.common.api.entity.RefundOrder;
|
|
|
+import com.microsvc.toolkit.middleware.payment.common.api.entity.RefundResp;
|
|
|
import com.microsvc.toolkit.middleware.payment.common.api.enums.PaymentStatus;
|
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
|
-import com.ym.mec.biz.dal.dao.*;
|
|
|
-import com.ym.mec.biz.dal.dto.*;
|
|
|
-import com.ym.mec.biz.dal.entity.*;
|
|
|
-import com.ym.mec.biz.dal.enums.*;
|
|
|
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
|
|
|
+import com.ym.mec.biz.dal.dao.GoodsProcurementDao;
|
|
|
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
|
|
|
+import com.ym.mec.biz.dal.dao.SellOrderDao;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentDao;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentGoodsSellDao;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
|
|
|
+import com.ym.mec.biz.dal.dao.StudentRepairDao;
|
|
|
+import com.ym.mec.biz.dal.dao.SysConfigDao;
|
|
|
+import com.ym.mec.biz.dal.dto.GoodsOrderItemVO;
|
|
|
+import com.ym.mec.biz.dal.dto.OperatingTotalIncomeDto;
|
|
|
+import com.ym.mec.biz.dal.dto.PageInfoOrder;
|
|
|
+import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
|
|
|
+import com.ym.mec.biz.dal.dto.StudentGoodsSellDto;
|
|
|
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderDto;
|
|
|
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
|
|
|
+import com.ym.mec.biz.dal.entity.ActivityUserMapper;
|
|
|
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
|
|
|
+import com.ym.mec.biz.dal.entity.Goods;
|
|
|
+import com.ym.mec.biz.dal.entity.GoodsProcurement;
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroup;
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderAddress;
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderMember;
|
|
|
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
|
|
|
+import com.ym.mec.biz.dal.entity.SellOrder;
|
|
|
+import com.ym.mec.biz.dal.entity.StudentGoodsSell;
|
|
|
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
|
|
|
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
|
|
|
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
|
|
|
+import com.ym.mec.biz.dal.entity.StudentRegistration;
|
|
|
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
|
|
|
+import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
|
|
|
+import com.ym.mec.biz.dal.entity.TenantConfig;
|
|
|
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
|
|
|
+import com.ym.mec.biz.dal.enums.AccountType;
|
|
|
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.GoodsType;
|
|
|
+import com.ym.mec.biz.dal.enums.GroupType;
|
|
|
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.PayStatus;
|
|
|
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.SellStatus;
|
|
|
+import com.ym.mec.biz.dal.enums.SellTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
|
|
|
+import com.ym.mec.biz.dal.enums.StockType;
|
|
|
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
|
|
|
import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
|
|
|
import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
|
|
|
import com.ym.mec.biz.dal.vo.StudentPaymentOrderVo;
|
|
|
-import com.ym.mec.biz.service.*;
|
|
|
+import com.ym.mec.biz.service.ActivityUserMapperService;
|
|
|
+import com.ym.mec.biz.service.ChildrenDayReserveService;
|
|
|
+import com.ym.mec.biz.service.CloudTeacherOrderService;
|
|
|
+import com.ym.mec.biz.service.ContractService;
|
|
|
+import com.ym.mec.biz.service.DegreeRegistrationService;
|
|
|
+import com.ym.mec.biz.service.GoodsService;
|
|
|
+import com.ym.mec.biz.service.HfMerchantConfigService;
|
|
|
+import com.ym.mec.biz.service.MemberRankSettingService;
|
|
|
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderAddressService;
|
|
|
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderMemberService;
|
|
|
+import com.ym.mec.biz.service.MusicGroupService;
|
|
|
+import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
|
|
|
+import com.ym.mec.biz.service.PayService;
|
|
|
+import com.ym.mec.biz.service.PracticeGroupService;
|
|
|
+import com.ym.mec.biz.service.ReplacementInstrumentActivityService;
|
|
|
+import com.ym.mec.biz.service.SporadicChargeInfoService;
|
|
|
+import com.ym.mec.biz.service.StudentInstrumentService;
|
|
|
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
|
|
|
+import com.ym.mec.biz.service.StudentPaymentOrderService;
|
|
|
+import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
|
|
|
+import com.ym.mec.biz.service.StudentRegistrationService;
|
|
|
+import com.ym.mec.biz.service.StudentRepairService;
|
|
|
+import com.ym.mec.biz.service.SubjectChangeService;
|
|
|
+import com.ym.mec.biz.service.SysConfigService;
|
|
|
+import com.ym.mec.biz.service.SysCouponCodeService;
|
|
|
+import com.ym.mec.biz.service.SysPaymentConfigService;
|
|
|
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
|
|
|
+import com.ym.mec.biz.service.SysUserCashAccountService;
|
|
|
+import com.ym.mec.biz.service.TempDirectorTrainingCampDetailService;
|
|
|
+import com.ym.mec.biz.service.TenantConfigService;
|
|
|
+import com.ym.mec.biz.service.VipGroupActivityService;
|
|
|
+import com.ym.mec.biz.service.VipGroupService;
|
|
|
import com.ym.mec.common.controller.BaseController;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
import com.ym.mec.common.entity.HttpResponseResult;
|
|
|
@@ -34,30 +144,12 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
import com.ym.mec.common.tenant.TenantContextHolder;
|
|
|
import com.ym.mec.thirdparty.adapay.ConfigInit;
|
|
|
import com.ym.mec.thirdparty.adapay.entity.BaseResult;
|
|
|
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
|
|
|
import com.ym.mec.thirdparty.yqpay.DateUtils;
|
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.apache.commons.collections.CollectionUtils;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.context.annotation.Lazy;
|
|
|
-import org.springframework.http.HttpStatus;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.transaction.annotation.Propagation;
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
-
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.math.RoundingMode;
|
|
|
-import java.util.*;
|
|
|
-import java.util.concurrent.atomic.AtomicInteger;
|
|
|
-import java.util.function.Function;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.CLOSE;
|
|
|
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
@@ -151,6 +243,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
private MusicGroupPaymentCalenderMemberService musicGroupPaymentCalenderMemberService;
|
|
|
@Autowired
|
|
|
private PaymentServiceContext paymentServiceContext;
|
|
|
+ @Autowired
|
|
|
+ private HfMerchantConfigService hfMerchantConfigService;
|
|
|
|
|
|
private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
@Override
|
|
|
@@ -525,18 +619,19 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean confirmOrder(StudentPaymentOrder order) {
|
|
|
- // 只有大雅延迟分账,其他实时分账
|
|
|
- if (order.getTenantId() != 1) {
|
|
|
- return true;
|
|
|
- }
|
|
|
Date date = new Date();
|
|
|
|
|
|
List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderService.getDao().getRouteOrders(order.getOrderNo());
|
|
|
|
|
|
- /*HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(order.getTenantId(), order.getPaymentChannel());
|
|
|
+ HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(order.getTenantId(), order.getPaymentChannel());
|
|
|
if(hfMerchantConfig == null){
|
|
|
throw new BizException("机构[{}][{}]商户信息找不到", order.getTenantId(), order.getPaymentChannel());
|
|
|
- }*/
|
|
|
+ }
|
|
|
+ BigDecimal plateformServiceFeeRate = BigDecimal.ZERO;
|
|
|
+ TenantConfig tenantConfig = tenantConfigService.queryByTenantId(order.getTenantId());
|
|
|
+ if(tenantConfig != null) {
|
|
|
+ plateformServiceFeeRate = tenantConfig.getChargeRate();
|
|
|
+ }
|
|
|
BasePaymentService paymentService = paymentServiceContext.getPaymentService(order.getPaymentChannel() + "_" + order.getTenantId());
|
|
|
for (StudentPaymentRouteOrder routeOrder : routeOrders) {
|
|
|
if (routeOrder.getRouteAmount().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
@@ -545,18 +640,41 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
|
|
|
studentPaymentRouteOrderService.getDao().update(routeOrder);
|
|
|
continue;
|
|
|
}
|
|
|
+
|
|
|
+ BigDecimal routeAmount = routeOrder.getRouteAmount();
|
|
|
+ //计算平台手续费
|
|
|
+ BigDecimal plateformServiceFee = BigDecimal.ZERO;
|
|
|
+ if(plateformServiceFeeRate.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ plateformServiceFee = routeAmount.multiply(plateformServiceFeeRate).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ }
|
|
|
+
|
|
|
+ routeAmount = routeAmount.subtract(plateformServiceFee);
|
|
|
+
|
|
|
+ List<DivideReq.DivMember> divMembers = new ArrayList<DivideReq.DivMember>();
|
|
|
+
|
|
|
+ if(plateformServiceFee.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ DivideReq.DivMember divMember = DivideReq.DivMember.builder()
|
|
|
+ .memberId(hfMerchantConfig.getPlatformPayeeMemberId())
|
|
|
+ .amount(plateformServiceFee)
|
|
|
+ .feeFlag("N")
|
|
|
+ .build();
|
|
|
+ divMembers.add(divMember);
|
|
|
+ }
|
|
|
+
|
|
|
// 执行分账逻辑
|
|
|
DivideReq.DivMember divMember = DivideReq.DivMember.builder()
|
|
|
.memberId(routeOrder.getMerNo().equals(ConfigInit.merNo) ? "0" : routeOrder.getMerNo())
|
|
|
- .amount(routeOrder.getRouteAmount().setScale(2, RoundingMode.HALF_UP))
|
|
|
+ .amount(routeAmount)
|
|
|
.feeFlag("Y")
|
|
|
.build();
|
|
|
+ divMembers.add(divMember);
|
|
|
+
|
|
|
DivideReq divideReq = DivideReq.builder()
|
|
|
.transNo(order.getTransNo())
|
|
|
.orderNo(order.getOrderNo())
|
|
|
.divideOrderNo(idGeneratorService.generatorId("payment") + "")
|
|
|
- .divideAmount(divMember.getAmount())
|
|
|
- .divMembers(Lists.newArrayList(divMember))
|
|
|
+ .divideAmount(routeOrder.getRouteAmount())
|
|
|
+ .divMembers(divMembers)
|
|
|
.build();
|
|
|
try {
|
|
|
DivideResp divide = paymentService.divide(divideReq);
|