Browse Source

Merge remote-tracking branch 'origin/adapay_new' into adapay_new

Joburgess 4 years ago
parent
commit
1c84bb5b55

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

+ 47 - 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,72 @@ 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 {
+                routeAmount = sellAmount.get("actualAmount");
+                routeBalance = sellAmount.get("balance");
+                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 +476,4 @@ public class PayServiceImpl implements PayService {
         }
         return routeScaleDtos;
     }
-
 }

+ 13 - 13
mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml

@@ -188,7 +188,7 @@
         SELECT SUM(route_amount_)
         FROM student_payment_order spo
         LEFT JOIN student_payment_route_order spro ON spo.order_no_ = spro.order_no_
-        WHERE spro.route_organ_id_ = #{routeOrganId} AND spo.payment_channel_ IN
+        WHERE spro.route_organ_id_ = #{routeOrganId} AND spo.status_ IN ('SUCCESS','ING') AND spo.payment_channel_ IN
         <foreach collection="paymentChannelEnumList" item="paymentChannel" open="(" close=")" separator=",">
             #{paymentChannel,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         </foreach>
@@ -226,19 +226,19 @@
             keyColumn="id" keyProperty="id">
         INSERT INTO student_payment_order
         (id_, group_type_, user_id_, organ_id_, routing_organ_id_, type_, expect_amount_, actual_amount_, com_amount_,
-        per_amount_,
-        balance_payment_amount_, remit_fee_, course_remit_fee_, trans_no_,
-        status_, memo_, create_time_, update_time_, payment_channel_, payment_business_channel_,
-        payment_account_no_, mer_nos_, order_no_, music_group_id_, class_group_id_, pay_time_)
+         per_amount_,
+         balance_payment_amount_, remit_fee_, course_remit_fee_, trans_no_,
+         status_, memo_, create_time_, update_time_, payment_channel_, payment_business_channel_,
+         payment_account_no_, mer_nos_, order_no_, music_group_id_, class_group_id_, pay_time_)
         VALUES (#{id}, #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{userId}, #{organId}, #{routingOrganId},
-        #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{expectAmount}, #{actualAmount}, #{comAmount}, #{perAmount}, #{balancePaymentAmount},
-        #{remitFee}, #{courseRemitFee}, #{transNo},
-        #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{memo}, #{createTime}, now(),
-        #{paymentChannel}, #{paymentBusinessChannel}, #{paymentAccountNo}, #{merNos}, #{orderNo},
-        #{musicGroupId},
-        #{classGroupId}, #{payTime})
+                #{userId}, #{organId}, #{routingOrganId},
+                #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+                #{expectAmount}, #{actualAmount}, #{comAmount}, #{perAmount}, #{balancePaymentAmount},
+                #{remitFee}, #{courseRemitFee}, #{transNo},
+                #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{memo}, #{createTime}, now(),
+                #{paymentChannel}, #{paymentBusinessChannel}, #{paymentAccountNo}, #{merNos}, #{orderNo},
+                #{musicGroupId},
+                #{classGroupId}, #{payTime})
     </insert>
 
 </mapper>

+ 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);
     }