src/main/java/com/taoke/autopay/controller/client/OrderController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/taoke/autopay/entity/OrderChannelEnum.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/taoke/autopay/manager/OrderPayFailProcessor.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/taoke/autopay/manager/PayCountVerifyManager.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/taoke/autopay/service/KeyOrderService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/taoke/autopay/service/impl/KeyOrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/taoke/autopay/service/impl/UserSettingServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/test/java/com/taoke/autopay/KeyTest.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/test/java/com/taoke/autopay/WxUserTests.java | ●●●●● 补丁 | 查看 | 原始文档 | 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;