admin
2025-05-09 6159dc58f50d3e4680779b7989bbd4d49a76bad5
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
@@ -177,7 +181,7 @@
    @ResponseBody
    @RequestMapping("setOrderNoV2")
    public String setOrderNoV2(AcceptData acceptData, String id, String orderNoDesc, String orderStatus, String money) {
        loggerPay.info("setOrderNo: {}-{}-{}-{}", id, orderNoDesc, orderStatus, money);
        loggerPay.info("setOrderNo[{}]: {}-{}-{}-{}", acceptData.getUid(), id, orderNoDesc, orderStatus, money);
        if (StringUtil.isNullOrEmpty(id)) {
            return JsonUtil.loadFalseResult("请上传id");
        }
@@ -229,19 +233,14 @@
            OrderChannelEnum orderChannel = null;
            if (dyOrderDto != null) {
                orderChannel =OrderChannelUtil.getChannelByKey(dyOrderDto.getOrderChannel());
            }else{
                orderChannel = OrderChannelUtil.getChannelByKey(dyOrderDto.getOrderChannel());
            } else {
                orderChannel = OrderChannelEnum.unknown;
            }
           // 验证渠道支付次数是否达到上限
            // 验证渠道支付次数是否达到上限
            if (order.getUid() != null) {
                long todayCount = wxUserOrderCountService.sum(order.getUid(), null,orderChannel, TimeUtil.getGernalTime(System.currentTimeMillis(), Constant.DB_DAY_FORMAT));
                    long totalCount =  wxUserOrderCountService.sum(order.getUid(), null,orderChannel,null);
                    int maxPayCount =  userSettingService.getLimitCountByTotalCount(totalCount, orderChannel);
                    if(todayCount>=maxPayCount){
                        throw new Exception( String.format("老铁今日已达支付次数(%s)上限:%s" ,orderChannel.getName(), maxPayCount));
                    }
                payCountVerifyManager.verifyPayCount(order.getUid(), orderType, orderChannel);
            }
            // 设置进入
@@ -284,10 +283,20 @@
        }
    }
    /**
     * @author hxh
     * @description 设置商家是否可支付
     * @date 1:26 2025/2/8
     * @param: acceptData
     * @param: id
     * @param: merchant
     * @return java.lang.String
     **/
    @ResponseBody
    @RequestMapping("isMerchantCanPay")
    public String isMerchantCanPay(AcceptData acceptData, String id, String merchant) {
        loggerPay.info("isMerchantCanPay: {}-{}", id, merchant);
        loggerPay.info("isMerchantCanPay[{}]: {}-{}", acceptData.getUid(), id, merchant);
        // 判断是否为卡金额
        KeyOrder keyOrder = keyOrderService.selectById(id);
        if (keyOrder == null) {
@@ -295,30 +304,73 @@
        }
        OrderChannelEnum orderChannel = OrderChannelUtil.getChannelByKey(keyOrder.getOrderChannel());
        if (orderChannel != OrderChannelEnum.unknown) {
            // 不是卡金额的订单可直接支付
            // 确定渠道的订单可直接支付
            return JsonUtil.loadTrueResult("");
        }
        // 获取卡金额的设置信息
        PayMoneySetting payMoneySetting =  payMoneySettingService.getSettingByMoney(keyOrder.getOrderMoney());
        if(payMoneySetting == null){
            return JsonUtil.loadFalseResult("该金额不属于卡金额范围");
        PayMoneySetting payMoneySetting = payMoneySettingService.getSettingByMoney(keyOrder.getOrderMoney());
        if (payMoneySetting == null) {
            keyOrderService.rejectPay(keyOrder.getId(),"付款金额不属于卡金额范围");
            return JsonUtil.loadFalseResult("付款金额不属于卡金额范围");
        }
        if(payMoneySetting.getVerifyMerchantChannel()==null||payMoneySetting.getVerifyMerchantChannel()==OrderChannelEnum.unknown){
        if (payMoneySetting.getVerifyMerchantChannel() == null || payMoneySetting.getVerifyMerchantChannel() == OrderChannelEnum.unknown) {
            // 没有设置校验渠道
            return JsonUtil.loadTrueResult("");
        }
        try {
            // 目前只判断超享佣
            boolean isCanPay = OrderChannelApiUtil.isMerchantCanPay(payMoneySetting.getVerifyMerchantChannel(), merchant);
            if(isCanPay){
            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{
            } else {
                // 未通过商家校验
                keyOrderService.rejectPay(keyOrder.getId(),"商家校验未通过");
                return JsonUtil.loadFalseResult("商家校验未通过");
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return JsonUtil.loadFalseResult(e.getMessage());
        }
    }
    /**
     * @return java.lang.String
     * @author hxh
     * @description 是否可以执行支付
     * @date 0:22 2024/12/28
     * @param: acceptData
     * @param: id
     **/
    @ResponseBody
    @RequestMapping("canExcutePay")
    public String canExcutePay(AcceptData acceptData, String id) {
        try {
            KeyOrder keyOrder = keyOrderService.selectByIdForUpdate(id);
            if (keyOrder == null) {
                throw new Exception("订单不存在");
            }
            if (keyOrder.getState() == KeyOrder.STATE_PAY) {
                throw new Exception("订单已支付");
            }
            loggerPay.info("canExcutePay[{}]: {}-{}", acceptData.getUid(), id, "可以支付");
            return JsonUtil.loadTrueResult("");
        } catch (Exception e) {
            loggerPay.error("canExcutePay[{}]: {}-{}", acceptData.getUid(), id, "不可以支付:" + e.getMessage());
            return JsonUtil.loadFalseResult(e.getMessage());
        }
    }
@@ -326,8 +378,8 @@
    @ResponseBody
    @RequestMapping("setPayResult")
    public String setPayResult(AcceptData acceptData, String id, boolean paySuccess, String msg,String payMerchant) {
        loggerPay.info("setPayResult: {}-{}-{}-{}", id, paySuccess, msg, payMerchant);
    public String setPayResult(AcceptData acceptData, String id, boolean paySuccess, String msg, String payMerchant) {
        loggerPay.info("setPayResult[{}]: {}-{}-{}-{}", acceptData.getUid(), id, paySuccess, msg, payMerchant);
        if (StringUtil.isNullOrEmpty(id)) {
            return JsonUtil.loadFalseResult("请上传id");
        }
@@ -349,7 +401,7 @@
                    KeyOrder orderUpdate = new KeyOrder();
                    orderUpdate.setId(id);
                    orderUpdate.setState(KeyOrder.STATE_NOT_PAY);
                    orderUpdate.setStateDesc("支付失败:"+msg);
                    orderUpdate.setStateDesc("支付失败:" + msg);
                    orderUpdate.setPayMerchant(payMerchant);
                    keyOrderService.update(orderUpdate);
                }
@@ -371,8 +423,8 @@
    @ResponseBody
    @RequestMapping("rejectPay")
    public String rejectPay(AcceptData acceptData, Long uid, String id) {
        loggerPay.info("rejectPay: {}-{}", uid, id);
    public String rejectPay(AcceptData acceptData, String id) {
        loggerPay.info("rejectPay: {}-{}", acceptData.getUid(), id);
        if (StringUtil.isNullOrEmpty(id)) {
            return JsonUtil.loadFalseResult("请上传id");
        }