Browse Source

update 按费用类型增加分佣规则

周箭河 4 years ago
parent
commit
d2fee28480

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysPaymentConfigQueryInfo.java

@@ -17,6 +17,8 @@ public class SysPaymentConfigQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "是否设置按费用类型分润 1-是 0 -否", required = true)
     private Integer hasTypeRoute;
 
+    private Integer hasRouteScale;
+
     public Integer getOrganId() {
         return organId;
     }
@@ -32,4 +34,12 @@ public class SysPaymentConfigQueryInfo extends QueryInfo {
     public void setHasTypeRoute(Integer hasTypeRoute) {
         this.hasTypeRoute = hasTypeRoute;
     }
+
+    public Integer getHasRouteScale() {
+        return hasRouteScale;
+    }
+
+    public void setHasRouteScale(Integer hasRouteScale) {
+        this.hasRouteScale = hasRouteScale;
+    }
 }

+ 45 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -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;
     }
-
 }

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/SysPaymentConfigMapper.xml

@@ -160,6 +160,9 @@
             <if test='hasTypeRoute != null and hasTypeRoute.toString()=="0".toString()'>
                 AND spc.type_route_scale_ = ''
             </if>
+            <if test='hasRouteScale != null and hasRouteScale.toString()=="1".toString()'>
+                AND (spc.hf_mer_no_ !='' || spc.route_scale_ != '')
+            </if>
         </where>
     </sql>
 

+ 26 - 8
mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java

@@ -1,6 +1,7 @@
 package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
+import com.ym.mec.biz.dal.enums.AccountType;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.page.SysPaymentConfigQueryInfo;
 import com.ym.mec.biz.service.SysPaymentConfigService;
@@ -71,6 +72,9 @@ public class SysPaymentConfigController extends BaseController {
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('paymentConfig/queryPage')")
     public Object queryPage(SysPaymentConfigQueryInfo queryInfo) {
+        if (queryInfo.getHasTypeRoute() == null) {
+            queryInfo.setHasRouteScale(1);
+        }
         return succeed(sysPaymentConfigService.queryPage(queryInfo));
     }
 
@@ -89,14 +93,23 @@ public class SysPaymentConfigController extends BaseController {
         if (StringUtils.isBlank(config.getTypeRouteScale())) {
             return failed("分润配置不能为空");
         }
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.get(config.getId());
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(config.getOrganId());
         if (paymentConfig != null && StringUtils.isNotBlank(paymentConfig.getTypeRouteScale())) {
             return failed("此分部配置存在,请核查");
         }
         Date nowDate = new Date();
-        paymentConfig.setTypeRouteScale(config.getTypeRouteScale());
-        paymentConfig.setUpdateTime(nowDate);
-        sysPaymentConfigService.update(paymentConfig);
+        if (paymentConfig != null) {
+            paymentConfig.setTypeRouteScale(config.getTypeRouteScale());
+            paymentConfig.setUpdateTime(nowDate);
+            sysPaymentConfigService.update(paymentConfig);
+        } else {
+            config.setPayType(PaymentChannelEnum.ADAPAY);
+            config.setType(2);
+            config.setCreateTime(nowDate);
+            config.setUpdateTime(nowDate);
+            sysPaymentConfigService.insert(config);
+            paymentConfig = config;
+        }
         return succeed(paymentConfig);
     }
 
@@ -123,10 +136,15 @@ public class SysPaymentConfigController extends BaseController {
         if (paymentConfig == null) {
             return failed("此分部配置不存在");
         }
-        Date nowDate = new Date();
-        paymentConfig.setTypeRouteScale("");
-        paymentConfig.setUpdateTime(nowDate);
-        sysPaymentConfigService.update(paymentConfig);
+
+        if (StringUtils.isBlank(paymentConfig.getHfMerNo()) && StringUtils.isBlank(paymentConfig.getRouteScale())) {
+            sysPaymentConfigService.delete(id);
+        } else {
+            Date nowDate = new Date();
+            paymentConfig.setTypeRouteScale("");
+            paymentConfig.setUpdateTime(nowDate);
+            sysPaymentConfigService.update(paymentConfig);
+        }
         return succeed(paymentConfig);
     }