Administrator
2025-02-09 696a46908ba2e824dacb115377ed14d44857b307
单数限制修改
1个文件已添加
8个文件已修改
118 ■■■■ 已修改文件
src/main/java/com/taoke/autopay/controller/client/OrderController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/taoke/autopay/entity/OrderChannelEnum.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/taoke/autopay/manager/PayCountVerifyManager.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/taoke/autopay/service/KeyOrderService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/taoke/autopay/service/impl/UserSettingServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/taoke/autopay/KeyTest.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/taoke/autopay/WxUserTests.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/taoke/autopay/controller/client/OrderController.java
@@ -15,6 +15,7 @@
import com.taoke.autopay.exception.WxOrderCountException;
import com.taoke.autopay.factory.OrderFactory;
import com.taoke.autopay.manager.OrderPayFailProcessor;
import com.taoke.autopay.manager.PayCountVerifyManager;
import com.taoke.autopay.service.*;
import com.taoke.autopay.utils.*;
import com.taoke.autopay.utils.order.DYOrderApi;
@@ -94,6 +95,9 @@
    @Resource
    private UserSettingService userSettingService;
    @Resource
    private PayCountVerifyManager payCountVerifyManager;
    @ResponseBody
@@ -236,18 +240,7 @@
            // 验证渠道支付次数是否达到上限
            if (order.getUid() != null) {
                OrderCountTypeEnum orderCountType=null;
                if(orderType==Constant.ORDER_TYPE_DY){
                    orderCountType=OrderCountTypeEnum.DY_ORDER_PAY;
                }else if(orderType==Constant.ORDER_TYPE_KS){
                    orderCountType=OrderCountTypeEnum.KS_ORDER_PAY;
                }
                long todayCount = wxUserOrderCountService.sum(order.getUid(), orderCountType, orderChannel, TimeUtil.getGernalTime(System.currentTimeMillis(), Constant.DB_DAY_FORMAT));
                long totalCount = wxUserOrderCountService.sum(order.getUid(), orderCountType, null, null);
                int maxPayCount = userSettingService.getLimitCountByTotalCount(orderType, totalCount, orderChannel);
                if (todayCount >= maxPayCount) {
                    throw new Exception(String.format("老铁今日已达支付次数(%s)上限:%s", orderChannel.getName(), maxPayCount));
                }
                payCountVerifyManager.verifyPayCount(order.getUid(), orderType, orderChannel);
            }
            // 设置进入
@@ -311,7 +304,7 @@
        }
        OrderChannelEnum orderChannel = OrderChannelUtil.getChannelByKey(keyOrder.getOrderChannel());
        if (orderChannel != OrderChannelEnum.unknown) {
            // 不是卡金额的订单可直接支付
            // 确定渠道的订单可直接支付
            return JsonUtil.loadTrueResult("");
        }
@@ -329,14 +322,25 @@
            // 目前只判断超享佣
            boolean isCanPay = OrderChannelApiUtil.isMerchantCanPay(payMoneySetting.getVerifyMerchantChannel(), merchant, keyOrder.getOrderMoney());
            if (isCanPay) {
                // 更新渠道
                try {
                    payCountVerifyManager.verifyPayCount(keyOrder.getUid(), keyOrder.getOrderType(), payMoneySetting.getVerifyMerchantChannel());
                }catch (KeyOrderException ee){
                    // 拒绝支付
                    keyOrderService.rejectPay(keyOrder.getId(), ee.getMessage());
                    return JsonUtil.loadFalseResult(ee.getMessage());
                }finally {
                    // 更新渠道
                    KeyOrder update = new KeyOrder();
                    update.setId(keyOrder.getId());
                    update.setOrderChannel(payMoneySetting.getVerifyMerchantChannel().getKey());
                    keyOrderService.update(update);
                }
                return JsonUtil.loadTrueResult("");
            } else {
                return JsonUtil.loadFalseResult("商家校验未通过");
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return JsonUtil.loadFalseResult(e.getMessage());
        }
    }
src/main/java/com/taoke/autopay/entity/OrderChannelEnum.java
@@ -11,6 +11,7 @@
    cyx("huohuo","超佣享"),
    bps("bps","爆品社"),
    own("own","自有渠道"),
    // 未知渠道
    unknown("unknown","卡金額")
    ;
src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java
@@ -19,7 +19,7 @@
/**
 * @author hxh
 * @title: OrderPayFailProcessor
 * @description: TODO
 * @description: 订单支付失败处理器
 * @date 2024/7/26 21:27
 */
@Component
src/main/java/com/taoke/autopay/manager/PayCountVerifyManager.java
New file
@@ -0,0 +1,49 @@
package com.taoke.autopay.manager;
import com.taoke.autopay.entity.OrderChannelEnum;
import com.taoke.autopay.entity.OrderCountTypeEnum;
import com.taoke.autopay.exception.KeyOrderException;
import com.taoke.autopay.service.UserSettingService;
import com.taoke.autopay.service.WxUserOrderCountService;
import com.taoke.autopay.utils.Constant;
import com.taoke.autopay.utils.TimeUtil;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
 * 支付次数管理器
 */
@Component
public class PayCountVerifyManager {
    @Resource
    private WxUserOrderCountService wxUserOrderCountService;
    @Resource
    private UserSettingService userSettingService;
    /**
     *  验证支付次数
     * @param uid
     * @param orderType
     * @param orderChannel
     * @throws Exception
     */
    public void verifyPayCount(long uid, int orderType, OrderChannelEnum orderChannel) throws KeyOrderException {
        OrderCountTypeEnum orderCountType=null;
        if(orderType== Constant.ORDER_TYPE_DY){
            orderCountType=OrderCountTypeEnum.DY_ORDER_PAY;
        }else if(orderType==Constant.ORDER_TYPE_KS){
            orderCountType=OrderCountTypeEnum.KS_ORDER_PAY;
        }
        long todayCount = wxUserOrderCountService.sum(uid, orderCountType, orderChannel, TimeUtil.getGernalTime(System.currentTimeMillis(), Constant.DB_DAY_FORMAT));
        long totalCount = wxUserOrderCountService.sum(uid, orderCountType, null, null);
        int maxPayCount = userSettingService.getLimitCountByTotalCount(orderType, totalCount, orderChannel);
        if (todayCount >= maxPayCount) {
            throw new KeyOrderException(String.format("老铁今日已达支付次数(%s)上限:%s", orderChannel.getName(), maxPayCount));
        }
    }
}
src/main/java/com/taoke/autopay/service/KeyOrderService.java
@@ -159,4 +159,11 @@
     **/
    public long countUserNotDoOrder(Long uid, Date minCreateTime);
    /**
     * 拒绝支付
     * @param id
     * @param rejectMsg
     */
    public void rejectPay(String id,String rejectMsg);
}
src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java
@@ -445,4 +445,14 @@
        daoQuery.minCreateTime = minCreateTime;
        return keyOrderMapper.count(daoQuery);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void rejectPay(String id, String rejectMsg) {
        KeyOrder keyOrder=new KeyOrder();
        keyOrder.setId(id);
        keyOrder.setState(KeyOrder.STATE_REJECT_PAY);
        keyOrder.setStateDesc(rejectMsg);
        update(keyOrder);
    }
}
src/main/java/com/taoke/autopay/service/impl/UserSettingServiceImpl.java
@@ -57,7 +57,7 @@
    @Override
    public int getLimitCountByTotalCount(int orderType, long beforeCount, OrderChannelEnum orderChannel) {
        List<UserSubmitKeyLimitDto> list = getUserSubmitKeyCountList(true);
        if (list.size() == 0) {
        if (list.isEmpty()) {
            return Integer.MAX_VALUE;
        }
        for (UserSubmitKeyLimitDto t : list) {
src/test/java/com/taoke/autopay/KeyTest.java
@@ -187,4 +187,12 @@
    }
    @Test
    public void testOrderCount(){
        long wxUid = 15834L;
        long notProcessCount = keyOrderService.countUserNotDoOrder(wxUid, new Date(System.currentTimeMillis() - 1000*60*300));
        System.out.println(notProcessCount);
    }
}
src/test/java/com/taoke/autopay/WxUserTests.java
@@ -39,10 +39,10 @@
    public void getPercount() {
        int[] tc = new int[]{1000, 500, 400, 300, 200, 100};
        for (int t : tc) {
            System.out.println(t + "=>" + userSettingService.getLimitCountByTotalCount(1, t, OrderChannelEnum.bps));
            System.out.println("============================");
            System.out.println(t + "=>" + userSettingService.getLimitCountByTotalCount(Constant.ORDER_TYPE_KS, t, OrderChannelEnum.bps));
        }
    }
    @Resource
    private WxUserOrderCountService wxUserOrderCountService;
@@ -51,7 +51,6 @@
    @Test
    public void testAdd() throws WxOrderCountException {
        long uid = 2L;
        String day="20240926";
        OrderChannelEnum orderChannel= OrderChannelEnum.bps;