浏览代码

支付增加每月最大金额限制

周箭河 4 年之前
父节点
当前提交
8d7c150564

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/HfMemberDao.java

@@ -18,8 +18,15 @@ public interface HfMemberDao extends BaseDAO<Integer, HfMember> {
 
 
     /**
     /**
      * 根据名字获取商户信息
      * 根据名字获取商户信息
+     *
      * @param name
      * @param name
      * @return
      * @return
      */
      */
     HfMember getByName(@Param("name") String name);
     HfMember getByName(@Param("name") String name);
+
+    /**
+     * 获取分佣账户中需要验证每月收最大金额的账户
+     * @return
+     */
+    List<HfMember> getNeedRouteMerNos();
 }
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HfMember.java

@@ -78,6 +78,9 @@ public class HfMember {
     @ApiModelProperty(value = "满额后收款账户",required = true)
     @ApiModelProperty(value = "满额后收款账户",required = true)
     private String routeMemberId;
     private String routeMemberId;
 
 
+    @ApiModelProperty(value = "满额后收款分部",required = true)
+    private Integer routeOrganId;
+
     public Integer getId() {
     public Integer getId() {
         return Id;
         return Id;
     }
     }
@@ -269,4 +272,12 @@ public class HfMember {
     public void setRouteMemberId(String routeMemberId) {
     public void setRouteMemberId(String routeMemberId) {
         this.routeMemberId = routeMemberId;
         this.routeMemberId = routeMemberId;
     }
     }
+
+    public Integer getRouteOrganId() {
+        return routeOrganId;
+    }
+
+    public void setRouteOrganId(Integer routeOrganId) {
+        this.routeOrganId = routeOrganId;
+    }
 }
 }

+ 61 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -1,15 +1,13 @@
 package com.ym.mec.biz.service.impl;
 package com.ym.mec.biz.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.ym.mec.biz.dal.dao.HfMemberDao;
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
 import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.AmountChannelDto;
 import com.ym.mec.biz.dal.dto.AmountChannelDto;
 import com.ym.mec.biz.dal.dto.RouteScaleDto;
 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;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.FeeTypeEnum;
 import com.ym.mec.biz.dal.enums.FeeTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
@@ -45,6 +43,8 @@ public class PayServiceImpl implements PayService {
     private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
     private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
     @Autowired
     @Autowired
     private SellOrderService sellOrderService;
     private SellOrderService sellOrderService;
+    @Autowired
+    private HfMemberDao hfMemberDao;
 
 
     @Override
     @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 {
     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 {
@@ -73,6 +73,11 @@ public class PayServiceImpl implements PayService {
             routeScaleDtos = getPaymentConfigChannel(organId, amount);
             routeScaleDtos = getPaymentConfigChannel(organId, amount);
         }
         }
 
 
+        //验证最大收款金额
+        for (RouteScaleDto routeScaleDto : routeScaleDtos) {
+            checkMaxReceipt(routeScaleDto, routeScaleDto.getMerNo());
+        }
+
         return getPayRoute(amount, balanceAmount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routeScaleDtos);
         return getPayRoute(amount, balanceAmount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routeScaleDtos);
     }
     }
 
 
@@ -290,6 +295,24 @@ public class PayServiceImpl implements PayService {
     }
     }
 
 
     private Map<String, Object> getPayRoute(BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, List<RouteScaleDto> routeScaleDtos) throws Exception {
     private Map<String, Object> getPayRoute(BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, List<RouteScaleDto> routeScaleDtos) throws Exception {
+        Map<String, List<RouteScaleDto>> routeScaleDtosMap = routeScaleDtos.stream().collect(Collectors.groupingBy(RouteScaleDto::getMerNo));
+
+        //合并同账号的数据
+        List<RouteScaleDto> newRouteScaleDtos = new ArrayList<>();
+        for (Map.Entry<String, List<RouteScaleDto>> groupRouteScaleDtos : routeScaleDtosMap.entrySet()) {
+            RouteScaleDto routeScaleDto = null;
+            for (RouteScaleDto scaleDto : groupRouteScaleDtos.getValue()) {
+                if (routeScaleDto == null) {
+                    routeScaleDto = scaleDto;
+                } else {
+                    routeScaleDto.setAmount(routeScaleDto.getAmount().add(scaleDto.getAmount()));
+                    routeScaleDto.setBalance(routeScaleDto.getBalance().add(scaleDto.getBalance()));
+                }
+            }
+            newRouteScaleDtos.add(routeScaleDto);
+        }
+        routeScaleDtos = newRouteScaleDtos;
+
         Map<String, Object> unionPay = new HashMap<>();
         Map<String, Object> unionPay = new HashMap<>();
         Map<String, Object> payMap = null;
         Map<String, Object> payMap = null;
 
 
@@ -498,4 +521,38 @@ public class PayServiceImpl implements PayService {
         }
         }
         return newRouteScaleDtos;
         return newRouteScaleDtos;
     }
     }
+
+
+    /**
+     * 收款已满转到其他收款账户
+     *
+     * @param routeScaleDto
+     * @param merNo
+     * @return
+     */
+    private RouteScaleDto checkMaxReceipt(RouteScaleDto routeScaleDto, String merNo) {
+        HfMember hfmember = hfMemberDao.getByMemberId(routeScaleDto.getMerNo());
+        if (hfmember == null || hfmember.getMonthMaxReceipt().compareTo(BigDecimal.ZERO) <= 0) {
+            return routeScaleDto;
+        }
+
+        BigDecimal monthMaxReceipt = hfmember.getMonthMaxReceipt(); //每月限定金额
+        Date monthStartTime = DateUtil.getFirstDayOfMonth(new Date());
+
+        //已收金额
+        List<PaymentChannelEnum> paymentChannelList = new ArrayList<>();
+        paymentChannelList.add(PaymentChannelEnum.ADAPAY);
+
+        BigDecimal monthHasReceipt = studentPaymentRouteOrderDao.getRouteOrderAmount(routeScaleDto.getOrganId(), paymentChannelList, monthStartTime);
+        monthHasReceipt = monthHasReceipt == null ? BigDecimal.ZERO : monthHasReceipt;
+        if (routeScaleDto.getAmount().add(monthHasReceipt).compareTo(monthMaxReceipt) > 0) {
+            routeScaleDto.setMerNo(hfmember.getRouteMemberId());
+            routeScaleDto.setOrganId(hfmember.getRouteOrganId());
+            if (routeScaleDto.getMerNo().equals(merNo)) {
+                return routeScaleDto;
+            }
+            return checkMaxReceipt(routeScaleDto, merNo);
+        }
+        return routeScaleDto;
+    }
 }
 }

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

@@ -23,6 +23,7 @@
         <result column="memo_" property="memo"/>
         <result column="memo_" property="memo"/>
         <result column="month_max_receipt_" property="monthMaxReceipt"/>
         <result column="month_max_receipt_" property="monthMaxReceipt"/>
         <result column="route_member_id_" property="routeMemberId"/>
         <result column="route_member_id_" property="routeMemberId"/>
+        <result column="route_organ_id_" property="routeOrganId"/>
         <result column="create_time_" property="createTime"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
         <result column="update_time_" property="updateTime"/>
     </resultMap>
     </resultMap>
@@ -30,7 +31,9 @@
         <!--@mbg.generated-->
         <!--@mbg.generated-->
         id_, name_, member_id_, prov_code_, area_code_, social_credit_code_, social_credit_code_expires_,
         id_, name_, member_id_, prov_code_, area_code_, social_credit_code_, social_credit_code_expires_,
         business_scope_, legal_person_, legal_cert_id_, legal_cert_id_expires_, legal_mp_,
         business_scope_, legal_person_, legal_cert_id_, legal_cert_id_expires_, legal_mp_,
-        address_, zip_code_, card_no_, bank_code_,settle_account_id_,status_,month_max_receipt_,route_member_id_, create_time_, update_time_
+        address_, zip_code_, card_no_,
+        bank_code_,settle_account_id_,status_,month_max_receipt_,route_member_id_,route_organ_id_, create_time_,
+        update_time_
     </sql>
     </sql>
     <select id="get" parameterType="java.lang.Integer" resultMap="hfMember">
     <select id="get" parameterType="java.lang.Integer" resultMap="hfMember">
         <!--@mbg.generated-->
         <!--@mbg.generated-->
@@ -124,6 +127,9 @@
             <if test="routeMemberId != null">
             <if test="routeMemberId != null">
                 route_member_id_ = #{routeMemberId},
                 route_member_id_ = #{routeMemberId},
             </if>
             </if>
+            <if test="routeOrganId != null">
+                route_organ_id_ = #{routeOrganId},
+            </if>
             <if test="createTime != null">
             <if test="createTime != null">
                 create_time_ = #{createTime},
                 create_time_ = #{createTime},
             </if>
             </if>
@@ -175,4 +181,10 @@
         WHERE name_ = #{name}
         WHERE name_ = #{name}
         LIMIT 1
         LIMIT 1
     </select>
     </select>
+
+    <select id="getNeedRouteMerNos" resultMap="hfMember">
+        SELECT *
+        FROM hf_member
+        WHERE month_max_receipt_ > 0
+    </select>
 </mapper>
 </mapper>

+ 2 - 1
mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java

@@ -243,13 +243,14 @@ public class AdapayController extends BaseController {
     @ApiOperation("修改每月最大收款金额(succeeded 状态才能使用)")
     @ApiOperation("修改每月最大收款金额(succeeded 状态才能使用)")
     @PostMapping(value = "updateMonthMaxReceipt")
     @PostMapping(value = "updateMonthMaxReceipt")
     @PreAuthorize("@pcs.hasPermissions('adapay/updateMonthMaxReceipt')")
     @PreAuthorize("@pcs.hasPermissions('adapay/updateMonthMaxReceipt')")
-    public HttpResponseResult<HfMember> updateMonthMaxReceipt(Integer id, BigDecimal monthMaxReceipt, String routeMemberId) throws Exception {
+    public HttpResponseResult<HfMember> updateMonthMaxReceipt(Integer id, BigDecimal monthMaxReceipt, String routeMemberId,Integer organId) throws Exception {
         HfMember hfMember = hfMemberService.get(id);
         HfMember hfMember = hfMemberService.get(id);
         if (hfMember == null) {
         if (hfMember == null) {
             return failed("您修改的数据不存在");
             return failed("您修改的数据不存在");
         }
         }
         hfMember.setMonthMaxReceipt(monthMaxReceipt);
         hfMember.setMonthMaxReceipt(monthMaxReceipt);
         hfMember.setRouteMemberId(routeMemberId);
         hfMember.setRouteMemberId(routeMemberId);
+        hfMember.setRouteOrganId(organId);
         if (hfMemberService.update(hfMember) <= 0) {
         if (hfMemberService.update(hfMember) <= 0) {
             return failed("修改失败,请重试");
             return failed("修改失败,请重试");
         }
         }