facade-vip/src/main/java/com/ks/vip/exception/OrderPayException.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
facade-vip/src/main/java/com/ks/vip/exception/VipOrderException.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
facade-vip/src/main/java/com/ks/vip/pojo/DTO/PayWayInfoDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
facade-vip/src/main/java/com/ks/vip/service/VipOrederPayService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-lijin/src/test/java/com/ks/LuckyTest.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-lijin/src/test/java/com/ks/MyBatisTest.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-vip/src/main/java/com/ks/vip/util/PayUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
service-vip/src/main/resources/mapper/VipCenterRecordMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
facade-vip/src/main/java/com/ks/vip/exception/OrderPayException.java
New file @@ -0,0 +1,27 @@ package com.ks.vip.exception; import com.ks.lib.common.exception.BaseException; public class OrderPayException extends BaseException { //已经支付 public final static int CODE_ALREADY_PAY = 10001; //创建支付订单失败 public final static int CODE_CREATE_PAY_ORDER_FAIL = 20001; public OrderPayException(int code, String msg) { super(code, msg); } public OrderPayException() { super(); } @Override public synchronized Throwable fillInStackTrace() { return this; } } facade-vip/src/main/java/com/ks/vip/exception/VipOrderException.java
@@ -4,6 +4,9 @@ public class VipOrderException extends BaseException { //创建支付订单失败 public final static int CODE_CREATE_PAY_ORDER_FAIL = 10001; public VipOrderException(int code, String msg) { super(code, msg); } facade-vip/src/main/java/com/ks/vip/pojo/DTO/PayWayInfoDTO.java
@@ -6,9 +6,21 @@ private String payUrl; public PayWayInfoDTO(int payWay, String payUrl) { private String alipayFormId; public PayWayInfoDTO(int payWay, String payUrl,String alipayFormId) { this.payWay = payWay; this.payUrl = payUrl; this.alipayFormId=alipayFormId; } public String getAlipayFormId() { return alipayFormId; } public void setAlipayFormId(String alipayFormId) { this.alipayFormId = alipayFormId; } public int getPayWay() { facade-vip/src/main/java/com/ks/vip/service/VipOrederPayService.java
@@ -1,6 +1,7 @@ package com.ks.vip.service; import com.ks.vip.exception.OrderPayException; import com.ks.vip.exception.VipOrderException; import com.ks.vip.pojo.DO.VipOrder; import com.ks.vip.pojo.DTO.PayWayInfoDTO; @@ -11,22 +12,34 @@ /** * 创建支付订单-并返回支付链接 * * @param t * @throws VipOrderException */ public PayWayInfoDTO addOrderByBuy(VipOrderDTO t) throws VipOrderException; public PayWayInfoDTO addOrderWithPay(VipOrderDTO t, String notifyUrl, String returnUrl) throws VipOrderException; /** * 订单支付 * * @param order * @return */ public PayWayInfoDTO payOrder(VipOrder order); public PayWayInfoDTO payOrder(VipOrder order, String notifyUrl, String returnUrl) throws OrderPayException; /** * 根据formId获取支付宝的支付表单 * * @param formId * @return */ public String getAlipayForm(String formId); /** * 检查订单支付状态 * * @param id * @return */ service-lijin/src/test/java/com/ks/LuckyTest.java
@@ -1,79 +1,29 @@ package com.ks; import com.ks.lijin.LiJinApplication; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.test.context.ContextConfiguration; import javax.annotation.Resource; import java.util.*; @SpringBootTest(classes = LiJinApplication.class) public class LuckyTest { @Resource private RedisTemplate redisTemplate; @Test public void test() { Map<Long, Integer> map = new HashMap<>(); int total = 0; int personCount = 1000000; for (int i = 0; i < personCount; i++) { map.put(10000L + i, i == 0 ? 0 : (int) (1 + 10 * Math.random())); total += map.get(10000L + i); } Set<Long> sets = choujiang(map, 100); int percent = total / personCount; int upCount = 0; for (Long uid : sets) { if (map.get(uid) > percent) upCount += 1; System.out.println(uid + "-" + map.get(uid) + "是否大于均值:" + (map.get(uid) > percent)); } System.out.println("大于均值数量:" + upCount); System.out.println("数量:" + sets.size()); } String key="lijinaccountmoney-20210526-1"; redisTemplate.opsForValue().increment(key,123); private Set<Long> choujiang(Map<Long, Integer> map, int number) { Object obj = redisTemplate.opsForValue().get("lijinaccountmoney-20210526-1"); System.out.println(obj); List<Long> mList = new ArrayList<>(); for (Iterator<Long> its = map.keySet().iterator(); its.hasNext(); ) { Long uid = its.next(); int c = map.get(uid); for (int i = 0; i < c; i++) { mList.add(uid); } } Set<Long> luckyUids = new HashSet<>(); for (int i = 0; i < number; i++) { if(mList.size()==0) break; long startTime = System.currentTimeMillis(); int p = (int) (mList.size() * Math.random()); long uid = mList.get(p); luckyUids.add(uid); //移除列表右面的相同uid while (mList.size() > p && mList.get(p) == uid) { mList.remove(p); } //查询相同uid的列表左侧起点 for (int j = p - 1; j >= 0; j--) { if (mList.get(j).longValue() != uid) { p = j + 1; break; } else if (j == 0) { p = 0; } } //删除左侧相同uid while (mList.size() > p && mList.get(p) == uid) { mList.remove(p); } System.out.println("运行时间:" + (System.currentTimeMillis() - startTime)); } System.out.println(luckyUids); return luckyUids; } service-lijin/src/test/java/com/ks/MyBatisTest.java
@@ -1,12 +1,15 @@ package com.ks; import com.ks.lijin.pojo.DO.LiJinProviderTaoKeAccount; import org.junit.jupiter.api.Test; import org.yeshi.utils.generater.mybatis.ColumnParseUtil; import org.yeshi.utils.generater.mybatis.MyBatisMapperUtil; public class MyBatisTest { @Test public void test(){ ColumnParseUtil.parseColumn(LiJinProviderTaoKeAccount.class,"D:\\项目\\返利券\\特价\\tejia\\service-lijin\\src\\main\\resources\\mapper\\LiJinProviderTaoKeAccountMapper.xml"); // MyBatisMapperUtil.createMapper(LiJinGoofsDepotFirstOrder.class); } } service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java
@@ -2,6 +2,7 @@ import com.alipay.api.AlipayApiException; import com.alipay.api.response.AlipayTradeQueryResponse; import com.ks.vip.exception.OrderPayException; import com.ks.vip.exception.VipOrderException; import com.ks.vip.mapper.VipOrderMapper; import com.ks.vip.pojo.DO.VipCombo; @@ -45,7 +46,7 @@ @Override @Transactional(rollbackFor = Exception.class) public PayWayInfoDTO addOrderByBuy(VipOrderDTO t) throws VipOrderException { public PayWayInfoDTO addOrderWithPay(VipOrderDTO t, String notifyUrl, String returnUrl) throws VipOrderException { if (t.getComboId() == null || t.getComboId() <= 0) { throw new VipOrderException(1, "套餐ID不能为空"); } @@ -83,43 +84,48 @@ vipOrderMapper.insertSelective(newOrder); // 支付方式 return payOrder(newOrder); try { return payOrder(newOrder, notifyUrl, returnUrl); } catch (OrderPayException e) { e.printStackTrace(); throw new VipOrderException(VipOrderException.CODE_CREATE_PAY_ORDER_FAIL, e.getMsg()); } } @Override @Transactional(rollbackFor = Exception.class) public PayWayInfoDTO payOrder(VipOrder order) { public PayWayInfoDTO payOrder(VipOrder order, String notifyUrl, String returnUrl) throws OrderPayException { if (order.getState() == VipOrder.STATE_PAY) { throw new OrderPayException(OrderPayException.CODE_ALREADY_PAY, "已经完成支付"); } String goodsTitle = Constant.ORDER_PAY_TITLE; String orderId = order.getId() + ""; switch (order.getPayWay()) { case "alipay": //生成支付宝支付订单 if (order.getState() == VipOrder.STATE_PAY) { return new PayWayInfoDTO(PayWayEnum.alipay.getWay(), PayUtil.getPaySuccessUrl(orderId)); //生成支付宝支付订单 case "alipay": String form = PayUtil.getVipChargeAlipayForm(orderId, goodsTitle, orderId, order.getPayMoney(), notifyUrl, returnUrl); if (StringUtil.isNullOrEmpty(form)) { throw new OrderPayException(OrderPayException.CODE_CREATE_PAY_ORDER_FAIL, "创建支付宝支付订单失败"); } String form = PayUtil.getVipChargeAlipayForm(orderId, goodsTitle, orderId, order.getPayMoney()); //暂存2分钟 String id = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis()); redisManager.cacheCommonString(id, form, 120); String payUrl = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + id; return new PayWayInfoDTO(PayWayEnum.alipay.getWay(), payUrl); return new PayWayInfoDTO(PayWayEnum.alipay.getWay(), null, id); case "weChat": try { if (order.getState() == VipOrder.STATE_PAY) { return new PayWayInfoDTO(PayWayEnum.weChat.getWay(), PayUtil.getPaySuccessUrl(orderId)); } String formWX = PayUtil.createWXOrder(orderId, null, orderId, order.getPayMoney(), goodsTitle); //暂存2分钟 String idWX = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis()); redisManager.cacheCommonString(formWX, formWX, 120); String payUrlWX = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + idWX; return new PayWayInfoDTO(PayWayEnum.weChat.getWay(), payUrlWX); String payUrl = PayUtil.createWXOrder(null, orderId, order.getPayMoney(), goodsTitle, notifyUrl, returnUrl); return new PayWayInfoDTO(PayWayEnum.weChat.getWay(), payUrl, null); } catch (Exception e) { throw new OrderPayException(OrderPayException.CODE_CREATE_PAY_ORDER_FAIL, e.getMessage()); } } return null; } @Override public String getAlipayForm(String formId) { return redisManager.getCommonString(formId); } @@ -131,7 +137,8 @@ return order; } switch (order.getPayWay()) { case "alipay": //支付宝 //支付宝 case "alipay": AlipayTradeQueryResponse res = null; try { res = AlipayH5PayUtil.queryOrder(PayUtil.getAlipayApp(), id + "", null); @@ -146,7 +153,8 @@ } catch (AlipayApiException e) { e.printStackTrace(); } case "weChat": //微信 //微信 case "weChat": try { WXPayOrderInfoV3 info = WXPayV3Util.getPayOrderInfo(id + "", PayUtil.getWXAPP()); if (info != null && info.getTrade_state().equalsIgnoreCase("SUCCESS")) { service-vip/src/main/java/com/ks/vip/util/PayUtil.java
@@ -71,10 +71,8 @@ * @param money * @return */ public static String getVipChargeAlipayForm(String id, String goodsTitle, String orderNo, BigDecimal money) { public static String getVipChargeAlipayForm(String id, String goodsTitle, String orderNo, BigDecimal money,String notifyUrl,String returnUrl) { try { String returnUrl = getPaySuccessUrl(id); String notifyUrl = Constant.HOST + "/BuWan/alipay/pay"; AlipayAppInfo appInfo = getAlipayApp(); String form = AlipayH5PayUtil.createOrderForm(appInfo, orderNo, money, goodsTitle, returnUrl, notifyUrl); return form; @@ -84,10 +82,6 @@ return null; } public static String getPaySuccessUrl(String id) { return "http://vip.ysdq.yeshitv.com/pay_success.html?id=" + id; } /** @@ -100,15 +94,14 @@ * @return * @throws Exception */ public static String createWXOrder(String id, String ip, String orderNo, BigDecimal money, String title) throws Exception { public static String createWXOrder(String ip, String orderNo, BigDecimal money, String title,String notifyUrl,String returnUrl) throws Exception { WXPlaceOrderParams params = new WXPlaceOrderParams(); params.setIp(ip); params.setOrderNo(orderNo); params.setNotifyUrl(Constant.HOST + "/BuWan/wx/pay/vip"); params.setNotifyUrl(notifyUrl); params.setFee(money); params.setBody(title); params.setApp(getWXAPP()); String returnUrl = "http://vip.ysdq.yeshitv.com/pay_finish.html?id=" + id; String payUrl = WXPayV3Util.createH5Order(params, returnUrl); return payUrl; } service-vip/src/main/resources/mapper/VipCenterRecordMapper.xml
@@ -27,7 +27,7 @@ </if> <if test="query.date!=null"> AND #{query.date}>=r_start_time AND r_end_time>#{query.date}; AND #{query.date}>=r_start_time AND r_end_time>#{query.date} </if>