YJ
2021-05-18 cf7a6d979229a1dbeca693429f6d539d5d254f95
vip订单
6个文件已修改
1个文件已添加
252 ■■■■■ 已修改文件
facade-vip/src/main/java/com/ks/vip/pojo/DO/VipOrder.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/pojo/DTO/PayWayInfoDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/pojo/Enums/PayWayEnum.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/service/VipOrederPayService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/manager/RedisManager.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-vip/src/main/java/com/ks/vip/util/Constant.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-vip/src/main/java/com/ks/vip/pojo/DO/VipOrder.java
@@ -12,6 +12,12 @@
@Valid
public class VipOrder implements Serializable {
    // 未支付
    public final static int STATE_INIT = 0;
    // 已支付
    public final static int STATE_PAY = 1;
    @Column(name = "o_id")
    private Long id;
facade-vip/src/main/java/com/ks/vip/pojo/DTO/PayWayInfoDTO.java
@@ -1,7 +1,7 @@
package com.ks.vip.pojo.DTO;
public class PayWayInfoDTO {
    //0-表示支付成功
    private int payWay;
    private String payUrl;
facade-vip/src/main/java/com/ks/vip/pojo/Enums/PayWayEnum.java
@@ -6,16 +6,22 @@
 */
public enum PayWayEnum {
    alipay("支付宝"),
    weChat("微信");
    alipay(1,"支付宝"),
    weChat(2,"微信");
    private final int way;
    private final String desc;
    private PayWayEnum(String desc) {
    private PayWayEnum(int way, String desc) {
        this.way = way;
        this.desc = desc;
    }
    public String getDesc() {
        return desc;
    }
    public int getWay() {
        return way;
    }
}
facade-vip/src/main/java/com/ks/vip/service/VipOrederPayService.java
@@ -20,6 +20,6 @@
     * @param id
     * @return
     */
    public VipOrder checkOrderPayState(String id);
    public VipOrder checkOrderPayState(Long id);
}
service-vip/src/main/java/com/ks/vip/service/manager/RedisManager.java
New file
@@ -0,0 +1,144 @@
package com.ks.vip.service.manager;
import org.springframework.stereotype.Component;
import org.yeshi.utils.SerializeUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.params.SetParams;
import javax.annotation.Resource;
import java.util.Set;
@Component
public class RedisManager {
    @Resource
    private JedisPool jedisPool;
    public Jedis getJedis() {
        Jedis jedis = jedisPool.getResource();
        return jedis;
    }
    private void setString(String key, String value, int seconds) {
        Jedis jedis = getJedis();
        try {
            jedis.setex(key, seconds, value);
        } finally {
            jedis.close();
        }
    }
    /**
     * 缓存字符串
     *
     * @param key
     * @param value
     */
    private void setString(String key, String value) {
        Jedis jedis = getJedis();
        try {
            jedis.set(key, value);
        } finally {
            jedis.close();
        }
    }
    public void remove(String... keys) {
        Jedis jedis = getJedis();
        try {
            jedis.del(keys);
        } finally {
            jedis.close();
        }
    }
    public void removePrefix(String... keys) {
        Jedis jedis = getJedis();
        try {
            for (String key : keys) {
                Set<String> sets = jedis.keys(key + "*");
                if (sets != null) {
                    for (String k : sets) {
                        jedis.del(k);
                    }
                }
            }
        } finally {
            jedis.close();
        }
    }
    private String getString(String key) {
        Jedis jedis = getJedis();
        try {
            return jedis.get(key);
        } finally {
            jedis.close();
        }
    }
    public String getCommonString(String key) {
        return getString(key);
    }
    public void cacheCommonString(String key, String value, int seconds) {
        setString(key, value, seconds);
    }
    public void cacheCommonString(String key, String value) {
        setString(key, value);
    }
    /**
     * 从redis缓存中查询,反序列化
     *
     * @param redisKey
     * @return
     */
    public Object getDataFromRedis(String redisKey) {
        //查询
        Jedis jedis = jedisPool.getResource();
        try {
            byte[] result = jedis.get(redisKey.getBytes());
            //如果查询没有为空
            if (null == result) {
                return null;
            }
            //查询到了,反序列化
            return SerializeUtil.unSerialize(result);
        } finally {
            jedis.close();
        }
    }
    /**
     * 将数据库中查询到的数据放入redis
     *
     * @param redisKey
     * @param obj
     */
    public void setDataToRedis(String redisKey, Object obj, Integer seconds) {
        //序列化
        byte[] bytes = SerializeUtil.serialize(obj);
        SetParams params = null;
        if (seconds != null) {
            params = new SetParams().nx().ex(seconds);
        }
        //存入redis
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.set(redisKey.getBytes(), bytes, params);
        } finally {
            jedis.close();
        }
    }
}
service-vip/src/main/java/com/ks/vip/service/remote/VipOrderPayServiceImpl.java
@@ -7,12 +7,15 @@
import com.ks.vip.pojo.DTO.PayWayInfoDTO;
import com.ks.vip.pojo.DTO.VipOrderDTO;
import com.ks.vip.pojo.Enums.OrderTypeEnum;
import com.ks.vip.pojo.Enums.PayWayEnum;
import com.ks.vip.query.VipOrderQuery;
import com.ks.vip.service.VipCenterService;
import com.ks.vip.service.VipComboService;
import com.ks.vip.service.VipOrederPayService;
import com.ks.vip.service.VipOrederService;
import com.ks.vip.service.manager.RedisManager;
import com.ks.vip.util.Constant;
import com.ks.vip.util.PayUtil;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.StringUtil;
@@ -39,14 +42,91 @@
    @Resource
    private VipCenterService vipCenterService;
    @Resource
    private RedisManager redisManager;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public PayWayInfoDTO payOrder(VipOrder order) {
        String title = Constant.ORDER_PAY_TITLE;
        String orderId = order.getId() + "";
        switch (order.getPayWay()) {
            case "alipay":
                String formAlipay = PayUtil.getVipChargeAlipayForm(orderId, title, orderId, order.getPayMoney());
                //暂存2分钟
                String id = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis());
                redisManager.cacheCommonString(id, formAlipay, 120);
                String payUrl = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + id;
                return new PayWayInfoDTO(PayWayEnum.alipay.getWay(), payUrl);
            case "weChat":
                try{
                    String formWX = PayUtil.createWXOrder(orderId, null, orderId,order.getPayMoney() ,title);
                    //暂存2分钟
                    String idwx = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis());
                    redisManager.cacheCommonString(idwx, formWX, 120);
                    String payUrlwx = Constant.HOST + "/BuWan/alipay/printPayForm?formId=" + idwx;
                    return new PayWayInfoDTO(PayWayEnum.weChat.getWay(), payUrlwx);
                } catch (Exception e) {
                }
        }
        return null;
    }
    @Override
    public VipOrder checkOrderPayState(String id) {
    @Transactional(rollbackFor = Exception.class)
    public VipOrder checkOrderPayState(Long id) {
        VipOrder vipOrder = vipOrderMapper.selectByPrimaryKey(id);
        if (vipOrder == null || vipOrder.getState() == VipOrder.STATE_PAY) {
            return vipOrder;
        }
//        OrderRecord record = vipOrderRecordDao.find(OrderRecord.class, id);
//            if (record.getState() == OrderRecord.STATE_PAY)
//                return record;
//
//            switch (record.getPayWay()) {
//                case OrderRecord.PAY_WAY_ALIPAY_GOLDCORN:
//                case OrderRecord.PAY_WAY_ALIPAY: {
//                    //支付宝
//                    AlipayTradeQueryResponse res = null;
//                    try {
//                        res = AlipayH5PayUtil.queryOrder(VipUtil.getAlipayApp(), VIPOrderUtil.getOutOrderNo(record.getOrderType(), id), null);
//                        //支付成功
//                        if (res.isSuccess() && "TRADE_SUCCESS".equalsIgnoreCase(res.getTradeStatus())) {
//                            try {
//                                return paySuccess(id, OrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date());
//                            } catch (Exception e) {
//                                e.printStackTrace();
//                            }
//                        }
//                    } catch (AlipayApiException e) {
//                        e.printStackTrace();
//                    }
//                }
//
//                break;
//                case OrderRecord.PAY_WAY_WX_GOLDCORN:
//                case OrderRecord.PAY_WAY_WX: {
//                    //微信
//                    try {
//                        WXPayOrderInfoV3 info = WXPayV3Util.getPayOrderInfo(VIPOrderUtil.getOutOrderNo(record.getOrderType(), id), VipUtil.getWXAPP());
//                        if (info != null && info.getTrade_state().equalsIgnoreCase("SUCCESS")) {
//                            paySuccess(id, record.getPayWay(), new BigDecimal(info.getAmount().getPayer_total()).divide(new BigDecimal(100), 2, RoundingMode.FLOOR), new Date());
//                            return record;
//                        }
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                    }
//                }
//                break;
//            }
        return null;
    }
service-vip/src/main/java/com/ks/vip/util/Constant.java
@@ -5,5 +5,9 @@
    // 支付地址
    public final static String HOST = "";
    // 支付地址
    public final static String ORDER_PAY_TITLE = "购买会员";
}