|
@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
|
|
|
import com.ym.mec.biz.dal.dao.SysConfigDao;
|
|
|
import com.ym.mec.biz.dal.dto.AmountChannelDto;
|
|
|
import com.ym.mec.biz.dal.dto.RouteScaleDto;
|
|
|
+import com.ym.mec.biz.dal.entity.Group;
|
|
|
import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
|
|
|
import com.ym.mec.biz.dal.entity.SysAccount;
|
|
|
import com.ym.mec.biz.dal.entity.SysPaymentConfig;
|
|
@@ -395,37 +396,70 @@ public class PayServiceImpl implements PayService {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ Map<String, BigDecimal> sellAmount = sellOrderService.getSellAmount(orderNo);
|
|
|
+ if (sellAmount == null) {
|
|
|
+ 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;
|
|
|
- }
|
|
|
+ long serviceCount = routeScaleDtos.stream().filter(e -> e.getFeeType().equals(FeeTypeEnum.SERVICE)).count();
|
|
|
+ long sellCount = routeScaleDtos.stream().filter(e -> e.getFeeType().equals(FeeTypeEnum.SELL)).count();
|
|
|
+
|
|
|
+ BigDecimal routeAmount = sellAmount.get("actualAmount");
|
|
|
+ BigDecimal routeBalance = sellAmount.get("balance");
|
|
|
+
|
|
|
+ BigDecimal serviceHasRouteMoney = BigDecimal.ZERO;
|
|
|
+ BigDecimal serviceHasRouteBalance = BigDecimal.ZERO;
|
|
|
+ BigDecimal sellHasRouteMoney = BigDecimal.ZERO;
|
|
|
+ BigDecimal sellHasRouteBalance = BigDecimal.ZERO;
|
|
|
|
|
|
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"));
|
|
|
+ if (routeScaleDto.getFeeType().equals(FeeTypeEnum.SERVICE)) {
|
|
|
+ routeAmount = amount.subtract(sellAmount.get("actualAmount"));
|
|
|
+ routeBalance = balanceAmount.subtract(sellAmount.get("balance"));
|
|
|
+ serviceCount--;
|
|
|
+ } else {
|
|
|
+ sellCount--;
|
|
|
+ }
|
|
|
+
|
|
|
+ BigDecimal routingMoney = routeAmount.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN);
|
|
|
+ BigDecimal routingBalance = routeBalance.multiply(new BigDecimal(routeScaleDto.getScale())).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN);
|
|
|
+
|
|
|
+ if (routeScaleDto.getFeeType().equals(FeeTypeEnum.SERVICE) && serviceCount == 0) {
|
|
|
+ routingMoney = routeAmount.subtract(serviceHasRouteMoney);
|
|
|
+ routingBalance = routeBalance.subtract(serviceHasRouteBalance);
|
|
|
+ } else if (routeScaleDto.getFeeType().equals(FeeTypeEnum.SELL) && sellCount == 0) {
|
|
|
+ routingMoney = routeAmount.subtract(sellHasRouteMoney);
|
|
|
+ routingBalance = routeBalance.subtract(sellHasRouteBalance);
|
|
|
+ }
|
|
|
+ routeScaleDto.setAmount(routingMoney);
|
|
|
+ routeScaleDto.setBalance(routingBalance);
|
|
|
+
|
|
|
+ if (routeScaleDto.getFeeType().equals(FeeTypeEnum.SERVICE)) {
|
|
|
+ serviceHasRouteMoney = serviceHasRouteMoney.add(routingMoney);
|
|
|
+ serviceHasRouteBalance = serviceHasRouteBalance.add(routingBalance);
|
|
|
} else {
|
|
|
- routeScaleDto.setAmount(amount.subtract(sellAmount.get("actualAmount")));
|
|
|
- routeScaleDto.setBalance(balanceAmount.subtract(sellAmount.get("balance")));
|
|
|
+ sellHasRouteMoney = sellHasRouteMoney.add(routingMoney);
|
|
|
+ sellHasRouteBalance = sellHasRouteBalance.add(routingBalance);
|
|
|
}
|
|
|
|
|
|
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) {
|
|
|
+ if (!hasFeeFlag && routeScaleDto.getAmount().compareTo(amount.divide(new BigDecimal(routeScaleDtos.size()), 2, BigDecimal.ROUND_DOWN)) >= 0) {
|
|
|
routeScaleDto.setFeeFlag("Y");
|
|
|
hasFeeFlag = true;
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
routeScaleDto.setFeeFlag("N");
|
|
|
}
|
|
|
|
|
@@ -440,5 +474,4 @@ public class PayServiceImpl implements PayService {
|
|
|
}
|
|
|
return routeScaleDtos;
|
|
|
}
|
|
|
-
|
|
|
}
|