Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

Joburgess 4 lat temu
rodzic
commit
65c656b20f

+ 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
      * @return
      */
     HfMember getByName(@Param("name") String name);
+
+    /**
+     * 获取分佣账户中需要验证每月收最大金额的账户
+     * @return
+     */
+    List<HfMember> getNeedRouteMerNos();
 }

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.entity;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 public class HfMember {
@@ -71,6 +72,15 @@ public class HfMember {
     @ApiModelProperty(value = "备注",required = true)
     private String memo;
 
+    @ApiModelProperty(value = "每月最大收款金额",required = true)
+    private BigDecimal monthMaxReceipt;
+
+    @ApiModelProperty(value = "满额后收款账户",required = true)
+    private String routeMemberId;
+
+    @ApiModelProperty(value = "满额后收款分部",required = true)
+    private Integer routeOrganId;
+
     public Integer getId() {
         return Id;
     }
@@ -246,4 +256,28 @@ public class HfMember {
     public void setMemo(String memo) {
         this.memo = memo;
     }
+
+    public BigDecimal getMonthMaxReceipt() {
+        return monthMaxReceipt;
+    }
+
+    public void setMonthMaxReceipt(BigDecimal monthMaxReceipt) {
+        this.monthMaxReceipt = monthMaxReceipt;
+    }
+
+    public String getRouteMemberId() {
+        return routeMemberId;
+    }
+
+    public void setRouteMemberId(String 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;
 
 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.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;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.FeeTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
@@ -45,6 +43,8 @@ public class PayServiceImpl implements PayService {
     private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
     @Autowired
     private SellOrderService sellOrderService;
+    @Autowired
+    private HfMemberDao hfMemberDao;
 
     @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 {
@@ -73,6 +73,11 @@ public class PayServiceImpl implements PayService {
             routeScaleDtos = getPaymentConfigChannel(organId, amount);
         }
 
+        //验证最大收款金额
+        for (RouteScaleDto routeScaleDto : routeScaleDtos) {
+            checkMaxReceipt(routeScaleDto, routeScaleDto.getMerNo());
+        }
+
         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 {
+        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> payMap = null;
 
@@ -498,4 +521,38 @@ public class PayServiceImpl implements PayService {
         }
         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;
+    }
 }

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

@@ -21,6 +21,9 @@
         <result column="settle_account_id_" property="settleAccountId"/>
         <result column="status_" property="status"/>
         <result column="memo_" property="memo"/>
+        <result column="month_max_receipt_" property="monthMaxReceipt"/>
+        <result column="route_member_id_" property="routeMemberId"/>
+        <result column="route_organ_id_" property="routeOrganId"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
     </resultMap>
@@ -28,7 +31,9 @@
         <!--@mbg.generated-->
         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_,
-        address_, zip_code_, card_no_, bank_code_,settle_account_id_,status_, 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>
     <select id="get" parameterType="java.lang.Integer" resultMap="hfMember">
         <!--@mbg.generated-->
@@ -116,6 +121,15 @@
             <if test="status != null">
                 status_ = #{status},
             </if>
+            <if test="monthMaxReceipt != null">
+                month_max_receipt_ = #{monthMaxReceipt},
+            </if>
+            <if test="routeMemberId != null">
+                route_member_id_ = #{routeMemberId},
+            </if>
+            <if test="routeOrganId != null">
+                route_organ_id_ = #{routeOrganId},
+            </if>
             <if test="createTime != null">
                 create_time_ = #{createTime},
             </if>
@@ -167,4 +181,10 @@
         WHERE name_ = #{name}
         LIMIT 1
     </select>
+
+    <select id="getNeedRouteMerNos" resultMap="hfMember">
+        SELECT *
+        FROM hf_member
+        WHERE month_max_receipt_ > 0
+    </select>
 </mapper>

+ 24 - 7
mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java

@@ -168,21 +168,21 @@ public class AdapayController extends BaseController {
                         paymentMap.put("status", "交易失败");
                     }
                     if (paymentMap.get("pay_mode").equals("delay")) {
-                        if(!paymentMap.containsKey("payment_confirms")){
+                        if (!paymentMap.containsKey("payment_confirms")) {
                             Map<String, Object> confirmMap = Payment.queryConfirmList(paymentMap.get("id").toString());
-                            if(confirmMap.containsKey("payment_confirms")) {
+                            if (confirmMap.containsKey("payment_confirms")) {
                                 paymentMap.put("payment_confirms", confirmMap.get("payment_confirms"));
                             }
                         }
-                        if(!paymentMap.containsKey("payment_confirms")){
-                            paymentMap.put("memo","没有提交分账信息,请联系技术核查");
+                        if (!paymentMap.containsKey("payment_confirms")) {
+                            paymentMap.put("memo", "没有提交分账信息,请联系技术核查");
                             data.add(paymentMap);
                             continue;
                         }
                         JSONArray confirms = (JSONArray) paymentMap.get("payment_confirms");
                         for (Object confirm : confirms) {
                             Map<String, Object> divMemberMap = (Map<String, Object>) confirm;
-                            paymentMap.put("fee_amt",divMemberMap.get("fee_amt"));
+                            paymentMap.put("fee_amt", divMemberMap.get("fee_amt"));
                             divMemberMap.putAll(paymentMap);
 
                             JSONArray divMembers = (JSONArray) divMemberMap.get("div_members");
@@ -217,8 +217,8 @@ public class AdapayController extends BaseController {
 
         OutputStream outputStream = response.getOutputStream();
         try {
-            String[] header = {"支付流水号", "订单号", "支付渠道", "交易金额", "商户号", "分润金额", "是否承担手续费", "手续费", "第三方订单号", "支付宝/微信订单号", "交易时间", "交易状态","备注"};
-            String[] body = {"id", "order_no", "pay_channel", "pay_amt", "member_id", "amount", "fee_flag", "fee_amt", "party_order_id", "out_trans_id", "created_time", "status",""};
+            String[] header = {"支付流水号", "订单号", "支付渠道", "交易金额", "商户号", "分润金额", "是否承担手续费", "手续费", "第三方订单号", "支付宝/微信订单号", "交易时间", "交易状态", "备注"};
+            String[] body = {"id", "order_no", "pay_channel", "pay_amt", "member_id", "amount", "fee_flag", "fee_amt", "party_order_id", "out_trans_id", "created_time", "status", ""};
 
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, data);
             response.setContentType("application/octet-stream");
@@ -239,4 +239,21 @@ public class AdapayController extends BaseController {
             }
         }
     }
+
+    @ApiOperation("修改每月最大收款金额(succeeded 状态才能使用)")
+    @PostMapping(value = "updateMonthMaxReceipt")
+    @PreAuthorize("@pcs.hasPermissions('adapay/updateMonthMaxReceipt')")
+    public HttpResponseResult<HfMember> updateMonthMaxReceipt(Integer id, BigDecimal monthMaxReceipt, String routeMemberId,Integer organId) throws Exception {
+        HfMember hfMember = hfMemberService.get(id);
+        if (hfMember == null) {
+            return failed("您修改的数据不存在");
+        }
+        hfMember.setMonthMaxReceipt(monthMaxReceipt);
+        hfMember.setRouteMemberId(routeMemberId);
+        hfMember.setRouteOrganId(organId);
+        if (hfMemberService.update(hfMember) <= 0) {
+            return failed("修改失败,请重试");
+        }
+        return succeed(hfMember);
+    }
 }