From f788607ff771a47bc60d6a86e00b3433c40f3d2c Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 24 九月 2021 15:22:03 +0800
Subject: [PATCH] 接入视频直播

---
 src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java |  268 +++++++++++++++++++++++++++++++++++------------------
 1 files changed, 178 insertions(+), 90 deletions(-)

diff --git a/src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java b/src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java
index 290e192..d302f30 100644
--- a/src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java
+++ b/src/main/java/com/yeshi/buwan/service/imp/order/OrderServiceImpl.java
@@ -3,17 +3,17 @@
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.response.AlipayTradeQueryResponse;
 import com.yeshi.buwan.dao.vip.OrderRecordDao;
-import com.yeshi.buwan.domain.vip.OrderType;
-import com.yeshi.buwan.domain.vip.UserVIPInfo;
-import com.yeshi.buwan.domain.vip.OrderRecord;
-import com.yeshi.buwan.domain.vip.VIPPriceType;
+import com.yeshi.buwan.dao.vip.VIPPriceDao;
+import com.yeshi.buwan.domain.vip.*;
+import com.yeshi.buwan.dto.order.OrderPaySuccessForm;
 import com.yeshi.buwan.dto.order.PayWayInfoDTO;
 import com.yeshi.buwan.exception.PPTVException;
 import com.yeshi.buwan.exception.goldcorn.GoldCornException;
 import com.yeshi.buwan.exception.order.OrderException;
 import com.yeshi.buwan.exception.order.PayException;
 import com.yeshi.buwan.exception.vip.VIPException;
-import com.yeshi.buwan.pptv.PPTVVipManager;
+import com.yeshi.buwan.exception.vip.VideoBuyRecordException;
+import com.yeshi.buwan.videos.pptv.PPTVVipManager;
 import com.yeshi.buwan.service.inter.order.OrderService;
 import com.yeshi.buwan.service.manager.GoldCornManager;
 import com.yeshi.buwan.util.Constant;
@@ -21,7 +21,6 @@
 import com.yeshi.buwan.util.StringUtil;
 import com.yeshi.buwan.util.user.VipUtil;
 import com.yeshi.buwan.util.vip.VIPOrderUtil;
-import io.seata.spring.annotation.GlobalTransactional;
 import org.hibernate.Query;
 import org.hibernate.Session;
 import org.slf4j.Logger;
@@ -30,6 +29,8 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.yeshi.utils.alipay.AlipayH5PayUtil;
 import org.yeshi.utils.entity.wx.WXPayOrderInfoV3;
+import org.yeshi.utils.ios.pay.IOSPayVerifyUtil;
+import org.yeshi.utils.ios.pay.vo.IOSAPPBuyVerifyResult;
 import org.yeshi.utils.wx.WXPayV3Util;
 
 import javax.annotation.Resource;
@@ -60,10 +61,13 @@
     @Resource
     private GoldCornManager goldCornManager;
 
+    @Resource
+    private VIPPriceDao vipPriceDao;
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public OrderRecord createOrder(OrderRecord record) throws OrderException {
-        if (record.getMoney() == null || record.getType() == null || record.getOrderType() == null || record.getUid() == null) {
+        if (record.getMoney() == null || (record.getType() == null && record.getVideoCid() == null) || record.getOrderType() == null || record.getUid() == null) {
             throw new OrderException(1, "鍙傛暟涓嶅畬鏁�");
         }
 
@@ -75,6 +79,25 @@
             record.setCreateTime(new Date());
         }
 
+        if (record.getPayWay() == OrderRecord.PAY_WAY_WX) {
+            if (record.getGoldCorn() != null && record.getGoldCorn() > 0) {
+                if (record.getMoney().compareTo(new BigDecimal("0")) == 0) {
+                    record.setPayWay(OrderRecord.PAY_WAY_GOLDCORN);
+                } else {
+                    record.setPayWay(OrderRecord.PAY_WAY_WX_GOLDCORN);
+                }
+            }
+        } else if (record.getPayWay() == OrderRecord.PAY_WAY_ALIPAY) {
+            if (record.getGoldCorn() != null && record.getGoldCorn() > 0) {
+                if (record.getMoney().compareTo(new BigDecimal("0")) == 0) {
+                    record.setPayWay(OrderRecord.PAY_WAY_GOLDCORN);
+                } else {
+                    record.setPayWay(OrderRecord.PAY_WAY_ALIPAY_GOLDCORN);
+                }
+            }
+        }
+
+
         record.setMoneyPay(false);
         record.setGoldCornPay(false);
         Serializable id = vipOrderRecordDao.save(record);
@@ -84,10 +107,9 @@
     }
 
     @Transactional(rollbackFor = Exception.class)
-    @GlobalTransactional(timeoutMills = 30000, name = "buwan-order", rollbackFor = Exception.class)
+//    @GlobalTransactional(timeoutMills = 30000, name = "buwan-order", rollbackFor = Exception.class)
     @Override
-    public PayWayInfoDTO payOrder(OrderRecord record) throws OrderException, GoldCornException, PayException {
-        //TODO 褰辫璞嗘敮浠�
+    public PayWayInfoDTO payOrder(OrderRecord record) throws OrderException, GoldCornException, PayException, VIPException, PPTVException, VideoBuyRecordException {
         String orderNo = VIPOrderUtil.getOutOrderNo(record.getOrderType(), record.getId());
         switch (record.getPayWay()) {
             case OrderRecord
@@ -98,12 +120,16 @@
                 } catch (Exception e) {
                     throw new GoldCornException(1, "褰辫璞嗘墸闄ゅ嚭閿�");
                 }
+                paySuccess(new OrderPaySuccessForm(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date()));
 
                 orderLogger.info("璁㈠崟褰辫璞嗘敮浠樻垚鍔燂細id-{}", record.getId());
             case OrderRecord
                     .PAY_WAY_ALIPAY: {
+                if (record.getMoney() != null && record.getMoney().compareTo(new BigDecimal(0)) == 0) {
+                    return new PayWayInfoDTO(0, VipUtil.getPaySuccessUrl(record.getId()));
+                }
                 //鐢熸垚鏀粯瀹濇敮浠樿鍗�
-                String form = VipUtil.getVipChargeAlipayForm(record.getId(), orderNo, record.getMoney());
+                String form = VipUtil.getVipChargeAlipayForm(record.getId(), record.getOrderType(), orderNo, record.getMoney());
                 //鏆傚瓨2鍒嗛挓
                 String id = StringUtil.Md5(UUID.randomUUID().toString() + "#" + System.currentTimeMillis());
                 redisManager.cacheCommonString(id, form, 120);
@@ -116,12 +142,17 @@
                     .PAY_WAY_WX_GOLDCORN:
                 try {
                     goldCornManager.consumeGoldCorn(record, record.getGoldCorn());
+
                 } catch (Exception e) {
                     throw new GoldCornException(1, "褰辫璞嗘墸闄ゅ嚭閿�");
                 }
+                paySuccess(new OrderPaySuccessForm(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date()));
                 orderLogger.info("璁㈠崟褰辫璞嗘敮浠樻垚鍔燂細id-{} 绫诲瀷-{}", record.getId(), record.getOrderType().name());
             case OrderRecord
                     .PAY_WAY_WX: {
+                if (record.getMoney() != null && record.getMoney().compareTo(new BigDecimal(0)) == 0) {
+                    return new PayWayInfoDTO(0, VipUtil.getPaySuccessUrl(record.getId()));
+                }
                 //鐢熸垚寰俊鏀粯璁㈠崟
                 try {
                     String title = "";
@@ -142,12 +173,15 @@
             case OrderRecord.PAY_WAY_GOLDCORN: {
                 try {
                     goldCornManager.consumeGoldCorn(record, record.getGoldCorn());
+                    orderLogger.info("璁㈠崟褰辫璞嗘敮浠樻垚鍔燂細id-{}", record.getId());
                 } catch (Exception e) {
                     throw new GoldCornException(1, "褰辫璞嗘墸闄ゅ嚭閿�");
                 }
-                orderLogger.info("璁㈠崟褰辫璞嗘敮浠樻垚鍔燂細id-{}", record.getId());
+                paySuccess(new OrderPaySuccessForm(record.getId(), OrderRecord.PAY_WAY_GOLDCORN, null, new Date()));
+                return new PayWayInfoDTO(0, VipUtil.getPaySuccessUrl(record.getId()));
             }
-            break;
+            case OrderRecord.PAY_WAY_IAPP:
+                return new PayWayInfoDTO(OrderRecord.PAY_WAY_IAPP, null);
         }
         throw new OrderException(1, "鏀粯鏂瑰紡涓嶅瓨鍦�");
     }
@@ -171,6 +205,11 @@
                     return OrderRecord.STATE_PAY;
                 else
                     return OrderRecord.STATE_NOT_PAY;
+            case OrderRecord.PAY_WAY_IAPP:
+                if (record.getMoneyPay())
+                    return OrderRecord.STATE_PAY;
+                else
+                    return OrderRecord.STATE_NOT_PAY;
         }
         return OrderRecord.STATE_NOT_PAY;
     }
@@ -178,78 +217,78 @@
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public OrderRecord paySuccess(String id, int payWay, BigDecimal payMoney, Date payTime) throws
-            VIPException, PPTVException {
-        orderLogger.info("璁㈠崟鏀粯鎴愬姛鐩殑鎵ц锛歩d-{}锛屾敮浠樻柟寮�-{},鏀粯閲戦-{}锛屾敮浠樻椂闂�-{}", id, payWay, payMoney, payTime.getTime());
+    public OrderRecord paySuccess(OrderPaySuccessForm successForm) throws
+            VIPException, PPTVException, VideoBuyRecordException, OrderException {
+        orderLogger.info("璁㈠崟鏀粯鎴愬姛鐩殑鎵ц锛歩d-{}锛屾敮浠樻柟寮�-{},鏀粯閲戦-{}锛屾敮浠樻椂闂�-{}", successForm.getId(), successForm.getPayWay(), successForm.getPayMoney(), successForm.getPayTime());
 
         Session session = vipOrderRecordDao.getSession();
 
         //淇敼璁板綍
-        Query query = session.createSQLQuery("select * from wk_vip_order_record r where r.id=? for update").addEntity(OrderRecord.class).setCacheable(false).setParameter(0, id);
+        Query query = session.createSQLQuery("select * from wk_vip_order_record r where r.id=? for update").addEntity(OrderRecord.class).setCacheable(false).setParameter(0, successForm.getId());
         List<OrderRecord> list = query.list();
+        if (list == null || list.size() == 0)
+            throw new OrderException(10, "璁㈠崟涓嶅瓨鍦�");
 
-        if (list != null && list.size() > 0) {
-            OrderRecord record = list.get(0);
-            if (record.getState() != OrderRecord.STATE_NOT_PAY)
-                throw new VIPException(1, "璁㈠崟鏈浜庡緟鏀粯鐘舵��");
+        OrderRecord record = list.get(0);
+        if (record.getState() != OrderRecord.STATE_NOT_PAY)
+            throw new OrderException(1, "璁㈠崟鏈浜庡緟鏀粯鐘舵��");
 
 
-            if (record.getPayWay() != OrderRecord.PAY_WAY_GOLDCORN) {
-                record.setPayMoney(payMoney);
-                record.setMoneyPay(true);
-            } else {
-                record.setGoldCornPay(true);
-            }
-
-            record.setPayTime(payTime);
-            record.setUpdateTime(new Date());
-            record.setState(getPayState(record));
-
-            //宸茬粡鏀粯鎴愬姛
-            if (record.getState() == OrderRecord.STATE_PAY) {
-                session.createSQLQuery("insert into wk_vip_order_pay_success(id,create_time) value(?,now())").setParameter(0, id).executeUpdate();
-
-            }
-
-            if (record.getOrderType() == OrderType.vip) {
-                Date[] expireDate = addExpireTime(session, record.getUid(), payTime, record.getType());
-                record.setVipStartTime(expireDate[0]);
-                record.setVipEndTime(expireDate[1]);
-                if (expireDate == null) {
-                    throw new VIPException(2, "娣诲姞鐢ㄦ埛浼氬憳鏃堕棿鍑洪敊");
-                }
-                session.update(record);
-
-
-                if (record.getState() == OrderRecord.STATE_PAY) {
-                    orderLogger.info("璁㈠崟鍏ㄩ儴鏀粯鎴愬姛锛歩d-{}", id);
-                    //璐拱VIP
-                    pptvVipManager.buyVIP(record);
-                    orderLogger.info("璐拱VIP鎴愬姛锛歩d-{}", id);
-                } else {
-                    orderLogger.info("璁㈠崟閮ㄥ垎鏀粯鎴愬姛锛歩d-{}", id);
-                }
-
-            } else if (record.getOrderType() == OrderType.video) {
-                record.setVipStartTime(payTime);
-                //7澶╀箣鍐呮湁鏁�
-                record.setVipEndTime(new Date(payTime.getTime() + 1000 * 60 * 60L * 24 * 7));
-                session.update(record);
-                //鍗曠墖璐拱鎴愬姛锛�7澶╂湁鏁堟湡锛�
-                if (record.getState() == OrderRecord.STATE_PAY) {
-                    orderLogger.info("璁㈠崟鍏ㄩ儴鏀粯鎴愬姛锛歩d-{}", id);
-                    //璐拱鍗曠墖
-                    pptvVipManager.buyVideo(record);
-                    orderLogger.info("璐拱鍗曠墖鎴愬姛锛歩d-{}", id);
-                } else {
-                    orderLogger.info("璁㈠崟閮ㄥ垎鏀粯鎴愬姛锛歩d-{}", id);
-                }
-            }
-
-            return record;
+        if (successForm.getPayWay() != OrderRecord.PAY_WAY_GOLDCORN) {
+            record.setPayMoney(successForm.getPayMoney());
+            record.setMoneyPay(true);
+            record.setAppleTransactionId(successForm.getAppleTransactionId());
+            record.setAppleOriginalTransactionId(successForm.getAppleOriginalTransactionId());
         } else {
-            throw new VIPException(10, "璁㈠崟涓嶅瓨鍦�");
+            record.setGoldCornPay(true);
         }
+
+        record.setPayTime(successForm.getPayTime());
+        record.setUpdateTime(new Date());
+        record.setState(getPayState(record));
+
+        //宸茬粡鏀粯鎴愬姛
+        if (record.getState() == OrderRecord.STATE_PAY) {
+            session.createSQLQuery("insert into wk_vip_order_pay_success(id,create_time) value(?,now())").setParameter(0, successForm.getId()).executeUpdate();
+        }
+
+        if (record.getOrderType() == OrderType.vip) {
+            Date[] expireDate = addExpireTime(session, record.getUid(), successForm.getPayTime(), record.getType());
+            record.setVipStartTime(expireDate[0]);
+            record.setVipEndTime(expireDate[1]);
+            if (expireDate == null) {
+                throw new VIPException(2, "娣诲姞鐢ㄦ埛浼氬憳鏃堕棿鍑洪敊");
+            }
+            session.update(record);
+
+
+            if (record.getState() == OrderRecord.STATE_PAY) {
+                orderLogger.info("璁㈠崟鍏ㄩ儴鏀粯鎴愬姛锛歩d-{}", successForm.getId());
+                //璐拱VIP
+                pptvVipManager.buyVIP(record);
+                orderLogger.info("璐拱VIP鎴愬姛锛歩d-{}", successForm.getId());
+            } else {
+                orderLogger.info("璁㈠崟閮ㄥ垎鏀粯鎴愬姛锛歩d-{}", successForm.getId());
+            }
+
+        } else if (record.getOrderType() == OrderType.video) {
+            record.setVipStartTime(successForm.getPayTime());
+            //7澶╀箣鍐呮湁鏁�
+            record.setVipEndTime(new Date(successForm.getPayTime().getTime() + 1000 * 60 * 60L * 24 * 7));
+            session.update(record);
+            //鍗曠墖璐拱鎴愬姛锛�7澶╂湁鏁堟湡锛�
+            if (record.getState() == OrderRecord.STATE_PAY) {
+                orderLogger.info("璁㈠崟鍏ㄩ儴鏀粯鎴愬姛锛歩d-{}", successForm.getId());
+                //璐拱鍗曠墖
+                pptvVipManager.buyVideo(record);
+                orderLogger.info("璐拱鍗曠墖鎴愬姛锛歩d-{}", successForm.getId());
+            } else {
+                orderLogger.info("璁㈠崟閮ㄥ垎鏀粯鎴愬姛锛歩d-{}", successForm.getId());
+            }
+        }
+
+        return record;
+
     }
 
 
@@ -277,7 +316,7 @@
             try {
                 goldCornManager.drawbackGoldCorn(record);
             } catch (Exception e) {
-                throw new GoldCornException(1, "褰辫璞嗛��娆炬垚鍔�");
+                throw new GoldCornException(1, "褰辫璞嗛��娆惧け璐�");
             }
         }
 
@@ -285,8 +324,20 @@
         record.setState(OrderRecord.STATE_CANCEL);
         record.setUpdateTime(new Date());
         record.setRemarks(reason);
-        vipOrderRecordDao.update(record);
+        session.update(record);
         orderLogger.info("鍙栨秷璁㈠崟鎴愬姛锛歩d-{}", id);
+    }
+
+    @Override
+    public List<OrderRecord> getCanCancelOrderList(int page, int pageSize) {
+
+        OrderRecordDao.DaoQuery daoQuery = new OrderRecordDao.DaoQuery();
+        daoQuery.state = OrderRecord.STATE_NOT_PAY;
+        //30鍒嗛挓鏈敮浠樺彇娑堣鍗�
+        daoQuery.maxCreateTime = new Date(System.currentTimeMillis() - 1000 * 60 * 30);
+        daoQuery.minCreateTime = new Date(daoQuery.maxCreateTime.getTime() - 1000 * 60 * 60L * 24);
+
+        return vipOrderRecordDao.list(daoQuery);
     }
 
 
@@ -298,6 +349,7 @@
             return record;
 
         switch (record.getPayWay()) {
+            case OrderRecord.PAY_WAY_ALIPAY_GOLDCORN:
             case OrderRecord.PAY_WAY_ALIPAY: {
                 //鏀粯瀹�
                 AlipayTradeQueryResponse res = null;
@@ -306,7 +358,7 @@
                     //鏀粯鎴愬姛
                     if (res.isSuccess() && "TRADE_SUCCESS".equalsIgnoreCase(res.getTradeStatus())) {
                         try {
-                            return paySuccess(id, OrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date());
+                            return paySuccess(new OrderPaySuccessForm(id, OrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date()));
                         } catch (Exception e) {
                             e.printStackTrace();
                         }
@@ -317,12 +369,13 @@
             }
 
             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());
+                        paySuccess(new OrderPaySuccessForm(id, record.getPayWay(), new BigDecimal(info.getAmount().getPayer_total()).divide(new BigDecimal(100), 2, RoundingMode.FLOOR), new Date()));
                         return record;
                     }
                 } catch (Exception e) {
@@ -335,24 +388,52 @@
 
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public OrderRecord checkApplePay(String orderNo, String receipt) throws Exception {
+        OrderRecord orderRecord = vipOrderRecordDao.find(OrderRecord.class, orderNo);
+        if (orderRecord == null) {
+            throw new OrderException(1, "璁㈠崟鍙蜂笉瀛樺湪");
+        }
+
+        if (!StringUtil.isNullOrEmpty(orderRecord.getAppleTransactionId())) {
+            throw new OrderException(2, "璁㈠崟宸叉敮浠�");
+        }
+
+        IOSAPPBuyVerifyResult result = IOSPayVerifyUtil.buyAppVerify(receipt, "28ca52e358b94c4eba3de41dfa7dd023", false);
+        List<IOSAPPBuyVerifyResult.OrderInfo> orderInfoList = result.getLatestReceiptInfo();
+        IOSAPPBuyVerifyResult.OrderInfo orderInfo = orderInfoList.get(0);
+        String productId = orderInfo.getProduct_id();
+        VIPPrice vipPrice = vipPriceDao.selectByIOSProductId(productId);
+        if (vipPrice == null)
+            throw new Exception("鍟嗗搧ID涓嶅瓨鍦�");
+        if (orderRecord.getType() != vipPrice.getType())
+            throw new Exception("浠锋牸绫诲瀷涓嶅尮閰�");
+//String id, int payWay, BigDecimal payMoney, Date payTime, String appleTransactionId, String appleOriginalTransactionId
+        OrderPaySuccessForm successForm = new OrderPaySuccessForm(orderRecord.getId(), OrderRecord.PAY_WAY_IAPP, new BigDecimal(0), new Date(orderInfo.getPurchaseDateMs()), orderInfo.getTransactionId(), orderInfo.getOriginalTransactionId());
+        paySuccess(successForm);
+        return null;
+    }
+
 
     @Override
-    public List<OrderRecord> listOrderRecord(String uid, Integer state, int page, int pageSize) {
+    public List<OrderRecord> listOrderRecord(String uid, OrderType orderType, Integer state, int page, int pageSize) {
 
         OrderRecordDao.DaoQuery query = new OrderRecordDao.DaoQuery();
         query.start = (page - 1) * pageSize;
         query.count = pageSize;
         query.uid = uid;
         query.state = state;
-
+        query.orderType = orderType;
         return vipOrderRecordDao.list(query);
     }
 
     @Override
-    public long countOrderRecord(String uid, Integer state) {
+    public long countOrderRecord(String uid, OrderType orderType, Integer state) {
         OrderRecordDao.DaoQuery query = new OrderRecordDao.DaoQuery();
         query.uid = uid;
         query.state = state;
+        query.orderType = orderType;
         return vipOrderRecordDao.count(query);
     }
 
@@ -380,16 +461,18 @@
             UserVIPInfo vip = new UserVIPInfo();
             vip.setUid(uid);
             vip.setCreateTime(new Date());
-            vip.setExpireDate(getExpireTime(payTime, null, type));
+
+            Date[] expireDate = getExpireTime(payTime, null, type);
+            vip.setExpireDate(expireDate[1]);
             session.save(vip);
-            return new Date[]{payTime, vip.getExpireDate()};
+            return expireDate;
         } else {
             //淇敼
             UserVIPInfo vipInfo = (UserVIPInfo) list.get(0);
-            Date expireDate = getExpireTime(payTime, vipInfo.getExpireDate(), type);
-            session.createQuery("update UserVIPInfo i set i.expireDate=? ,i.updateTime=? where i.uid=?").setParameter(0, expireDate).setParameter(1, new Date()).setParameter(2, uid).executeUpdate();
+            Date[] expireDate = getExpireTime(payTime, vipInfo.getExpireDate(), type);
+            session.createQuery("update UserVIPInfo i set i.expireDate=? ,i.updateTime=? where i.uid=?").setParameter(0, expireDate[1]).setParameter(1, new Date()).setParameter(2, uid).executeUpdate();
 
-            return new Date[]{vipInfo.getExpireDate() == null ? new Date() : vipInfo.getExpireDate(), expireDate};
+            return expireDate;
         }
     }
 
@@ -401,13 +484,18 @@
      * @param type
      * @return
      */
-    private Date getExpireTime(Date payTime, Date expireTime, VIPPriceType type) {
+    private Date[] getExpireTime(Date payTime, Date expireTime, VIPPriceType type) {
         Calendar calendar = Calendar.getInstance();
         if (expireTime != null) {
-            calendar.setTimeInMillis(expireTime.getTime());
+            //涔嬪墠缁湡鏃堕棿鏄惁澶т簬浠樻鏃堕棿
+            if (payTime.getTime() < expireTime.getTime())
+                calendar.setTimeInMillis(expireTime.getTime());
+            else
+                calendar.setTimeInMillis(payTime.getTime());
         } else {
             calendar.setTimeInMillis(payTime.getTime());
         }
+        long startTime = calendar.getTimeInMillis();
         if (type == VIPPriceType.day) {
             calendar.add(Calendar.DAY_OF_WEEK, 1);
         } else if (type == VIPPriceType.week) {
@@ -421,7 +509,7 @@
         } else if (type == VIPPriceType.year) {
             calendar.add(Calendar.YEAR, 1);
         }
-        return new Date(calendar.getTimeInMillis());
+        return new Date[]{new Date(startTime), new Date(calendar.getTimeInMillis())};
     }
 
 

--
Gitblit v1.8.0