|
@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.dto.RouteScaleDto;
|
|
|
import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
|
|
|
import com.ym.mec.biz.dal.entity.SysAccount;
|
|
|
import com.ym.mec.biz.dal.entity.SysPaymentConfig;
|
|
|
+import com.ym.mec.biz.dal.enums.FeeTypeEnum;
|
|
|
import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
|
|
|
import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
|
|
|
import com.ym.mec.biz.service.*;
|
|
@@ -41,6 +42,8 @@ public class PayServiceImpl implements PayService {
|
|
|
private SysPaymentConfigService sysPaymentConfigService;
|
|
|
@Autowired
|
|
|
private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
|
|
|
+ @Autowired
|
|
|
+ private SellOrderService sellOrderService;
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> getPayMap(BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, Integer organId, String receiver) throws Exception {
|
|
@@ -51,6 +54,11 @@ public class PayServiceImpl implements PayService {
|
|
|
routeScaleDtos = noUsePaymentConfig(amount);
|
|
|
}
|
|
|
|
|
|
+ //根据费用类型
|
|
|
+ if (routeScaleDtos == null) {
|
|
|
+ routeScaleDtos = getTypeRouteChannel(organId, orderNo, amount, balanceAmount);
|
|
|
+ }
|
|
|
+
|
|
|
//根据金额获取分润
|
|
|
if (routeScaleDtos == null) {
|
|
|
routeScaleDtos = getAmountChannel(organId, amount, receiver);
|
|
@@ -305,9 +313,20 @@ public class PayServiceImpl implements PayService {
|
|
|
if (routeScaleDto.getPayType().equals(PaymentChannelEnum.YQPAY)) {
|
|
|
routingAmount = yqAmount;
|
|
|
}
|
|
|
- BigDecimal routingFee = routingAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
- BigDecimal routeBalanceAmount = balanceAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
- BigDecimal routingMoney = amount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
+ BigDecimal routingFee = null;
|
|
|
+ BigDecimal routeBalanceAmount = null;
|
|
|
+ BigDecimal routingMoney = null;
|
|
|
+
|
|
|
+ if (routeScaleDto.getFeeType() == null) {
|
|
|
+ routingFee = routingAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ routeBalanceAmount = balanceAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ routingMoney = amount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ } else {
|
|
|
+ routingFee = routeScaleDto.getAmount();
|
|
|
+ routeBalanceAmount = routeScaleDto.getBalance();
|
|
|
+ routingMoney = routeScaleDto.getAmount();
|
|
|
+ }
|
|
|
if (i == routeScaleDtos.size()) {
|
|
|
routingFee = routingAmount.subtract(hasRouteAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
routeBalanceAmount = balanceAmount.subtract(hasRouteBalanceAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
@@ -364,4 +383,62 @@ public class PayServiceImpl implements PayService {
|
|
|
return unionPay;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param organId
|
|
|
+ * @param orderNo
|
|
|
+ * @param amount
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<RouteScaleDto> getTypeRouteChannel(Integer organId, String orderNo, BigDecimal amount, BigDecimal balanceAmount) {
|
|
|
+ SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
|
|
|
+ if (paymentConfig == null || StringUtils.isBlank(paymentConfig.getTypeRouteScale())) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ String typeRouteScale = paymentConfig.getTypeRouteScale();
|
|
|
+ List<RouteScaleDto> routeScaleDtos = JSON.parseArray(typeRouteScale, RouteScaleDto.class);
|
|
|
+ List<Integer> organIds = routeScaleDtos.stream().map(RouteScaleDto::getOrganId).collect(Collectors.toList());
|
|
|
+ List<SysPaymentConfig> paymentConfigByOrganIds = sysPaymentConfigService.findPaymentConfigByOrganIds(organIds);
|
|
|
+
|
|
|
+ Map<String, BigDecimal> sellAmount = sellOrderService.getSellAmount(orderNo);
|
|
|
+ if (sellAmount == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ Iterator<RouteScaleDto> iterator = routeScaleDtos.iterator();
|
|
|
+ boolean hasFeeFlag = false;
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ RouteScaleDto routeScaleDto = iterator.next();
|
|
|
+ routeScaleDto.setPayType(paymentConfig.getPayType());
|
|
|
+ if (routeScaleDto.getFeeType().equals(FeeTypeEnum.SELL)) {
|
|
|
+ routeScaleDto.setAmount(sellAmount.get("actualAmount"));
|
|
|
+ routeScaleDto.setBalance(sellAmount.get("balance"));
|
|
|
+ } else {
|
|
|
+ routeScaleDto.setAmount(amount.subtract(sellAmount.get("actualAmount")));
|
|
|
+ routeScaleDto.setBalance(balanceAmount.subtract(sellAmount.get("balance")));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (routeScaleDto.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
+ iterator.remove();
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!hasFeeFlag && routeScaleDto.getAmount().compareTo(amount.divide(new BigDecimal(2), 2, BigDecimal.ROUND_DOWN)) >= 0) {
|
|
|
+ routeScaleDto.setFeeFlag("Y");
|
|
|
+ hasFeeFlag = true;
|
|
|
+ }else {
|
|
|
+ routeScaleDto.setFeeFlag("N");
|
|
|
+ }
|
|
|
+
|
|
|
+ for (SysPaymentConfig paymentConfigByOrganId : paymentConfigByOrganIds) {
|
|
|
+ if (!paymentConfigByOrganId.getOrganId().equals(routeScaleDto.getOrganId())) continue;
|
|
|
+ if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
|
|
|
+ routeScaleDto.setMerNo(paymentConfigByOrganId.getYqMerNo());
|
|
|
+ } else {
|
|
|
+ routeScaleDto.setMerNo(paymentConfigByOrganId.getHfMerNo());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return routeScaleDtos;
|
|
|
+ }
|
|
|
+
|
|
|
}
|