From cad915058c3c53bf328a8ae9ca9bc7de099caba7 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期六, 06 二月 2021 15:27:49 +0800
Subject: [PATCH] 接口bug修改

---
 src/main/java/com/yeshi/buwan/service/imp/vip/VIPServiceImpl.java |  145 +++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 112 insertions(+), 33 deletions(-)

diff --git a/src/main/java/com/yeshi/buwan/service/imp/vip/VIPServiceImpl.java b/src/main/java/com/yeshi/buwan/service/imp/vip/VIPServiceImpl.java
index a84d00b..3aa946c 100644
--- a/src/main/java/com/yeshi/buwan/service/imp/vip/VIPServiceImpl.java
+++ b/src/main/java/com/yeshi/buwan/service/imp/vip/VIPServiceImpl.java
@@ -1,23 +1,31 @@
 package com.yeshi.buwan.service.imp.vip;
 
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.response.AlipayTradeQueryResponse;
 import com.yeshi.buwan.dao.vip.UserVIPInfoDao;
 import com.yeshi.buwan.dao.vip.VIPOrderRecordDao;
 import com.yeshi.buwan.domain.vip.UserVIPInfo;
 import com.yeshi.buwan.domain.vip.VIPOrderRecord;
 import com.yeshi.buwan.domain.vip.VIPPriceType;
+import com.yeshi.buwan.exception.PPTVException;
 import com.yeshi.buwan.exception.vip.VIPException;
+import com.yeshi.buwan.pptv.PPTVVipManager;
 import com.yeshi.buwan.service.inter.vip.VIPService;
-import org.hibernate.HibernateException;
+import com.yeshi.buwan.util.user.VipUtil;
+import com.yeshi.buwan.util.vip.VIPOrderUtil;
 import org.hibernate.LockMode;
 import org.hibernate.Query;
 import org.hibernate.Session;
-import org.springframework.orm.hibernate4.HibernateCallback;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.yeshi.utils.alipay.AlipayH5PayUtil;
+import org.yeshi.utils.entity.wx.WXPayOrderInfoV3;
+import org.yeshi.utils.wx.WXPayV3Util;
 
 import javax.annotation.Resource;
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
@@ -30,6 +38,9 @@
 
     @Resource
     private UserVIPInfoDao userVIPInfoDao;
+
+    @Resource
+    private PPTVVipManager pptvVipManager;
 
 
     /**
@@ -66,41 +77,46 @@
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void paySuccess(final String id, int payWay, BigDecimal payMoney, Date payTime) throws VIPException {
-        VIPException exception = (VIPException) vipOrderRecordDao.excute(new HibernateCallback() {
-            @Override
-            public VIPException doInHibernate(Session session) throws HibernateException {
-                //淇敼璁板綍
-                Query query = session.createQuery("from VIPOrderRecord as r where r.id=? ").setParameter(0, id);
-                query.setLockMode("r", LockMode.UPGRADE);
-                List<VIPOrderRecord> list = query.list();
+    public VIPOrderRecord paySuccess(final String id, int payWay, BigDecimal payMoney, Date payTime) throws VIPException, PPTVException {
 
-                if (list != null && list.size() > 0) {
-                    if (list.get(0).getState() == VIPOrderRecord.STATE_PAY)
-                        return new VIPException(1, "璁㈠崟宸茬粡鏀粯");
+        Session session = vipOrderRecordDao.getSession();
 
-                    Date[] expireDate = addExpireTime(session, list.get(0).getUid(), payTime, list.get(0).getType());
-                    if (expireDate == null) {
-                        return new VIPException(2, "娣诲姞鐢ㄦ埛浼氬憳鏃堕棿鍑洪敊");
-                    }
-                    session.createQuery("update VIPOrderRecord r set r.payWay=?,r.payMoney=?,r.payTime=?,r.updateTime=?,r.vipStartTime=?,r.vipEndTime=?,r.state=? where r.id=? ")
-                            .setParameter(0, payWay)
-                            .setParameter(1, payMoney)
-                            .setParameter(2, payTime)
-                            .setParameter(3, new Date())
-                            .setParameter(4, expireDate[0])
-                            .setParameter(5, expireDate[1])
-                            .setParameter(6, VIPOrderRecord.STATE_PAY)
-                            .setParameter(7, id).executeUpdate();
-                } else {
-                    return new VIPException(10, "璁㈠崟涓嶅瓨鍦�");
-                }
-                return null;
+        //淇敼璁板綍
+        Query query = session.createQuery("from VIPOrderRecord as r where r.id=? ").setParameter(0, id);
+        query.setLockMode("r", LockMode.UPGRADE);
+        List<VIPOrderRecord> list = query.list();
+
+        if (list != null && list.size() > 0) {
+            VIPOrderRecord record = list.get(0);
+            if (record.getState() == VIPOrderRecord.STATE_PAY)
+                throw new VIPException(1, "璁㈠崟宸茬粡鏀粯");
+
+
+            record.setPayWay(payWay);
+            record.setPayMoney(payMoney);
+            record.setPayTime(payTime);
+            record.setUpdateTime(new Date());
+
+            record.setState(VIPOrderRecord.STATE_PAY);
+
+
+            Date[] expireDate = addExpireTime(session, record.getUid(), payTime, record.getType());
+            if (expireDate == null) {
+                throw new VIPException(2, "娣诲姞鐢ㄦ埛浼氬憳鏃堕棿鍑洪敊");
             }
-        });
 
-        if (exception != null)
-            throw exception;
+            record.setVipStartTime(expireDate[0]);
+            record.setVipEndTime(expireDate[1]);
+
+            session.update(record);
+            //璐拱VIP
+            pptvVipManager.buyVIP(record);
+            return record;
+        } else {
+            throw new VIPException(10, "璁㈠崟涓嶅瓨鍦�");
+        }
+
+
     }
 
     /**
@@ -189,4 +205,67 @@
         query.state = state;
         return vipOrderRecordDao.count(query);
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public VIPOrderRecord checkOrderPayState(String id) {
+        VIPOrderRecord record = vipOrderRecordDao.find(VIPOrderRecord.class, id);
+        if (record.getState() == VIPOrderRecord.STATE_PAY)
+            return record;
+
+        switch (record.getPayWay()) {
+            case VIPOrderRecord.PAY_WAY_ALIPAY: {
+                //鏀粯瀹�
+                AlipayTradeQueryResponse res = null;
+                try {
+                    res = AlipayH5PayUtil.queryOrder(VipUtil.getAlipayApp(), VIPOrderUtil.getOutOrderNo(id), null);
+                    //鏀粯鎴愬姛
+                    if (res.isSuccess() && "TRADE_SUCCESS".equalsIgnoreCase(res.getTradeStatus())) {
+                        try {
+                            return paySuccess(id, VIPOrderRecord.PAY_WAY_ALIPAY, new BigDecimal(res.getTotalAmount()), new Date());
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+                } catch (AlipayApiException e) {
+                    e.printStackTrace();
+                }
+            }
+
+            break;
+            case VIPOrderRecord.PAY_WAY_WX: {
+                //寰俊
+                try {
+                    WXPayOrderInfoV3 info = WXPayV3Util.getPayOrderInfo(VIPOrderUtil.getOutOrderNo(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 record;
+
+    }
+
+    @Override
+    public VIPOrderRecord getOrderRecord(String id) {
+        return vipOrderRecordDao.find(VIPOrderRecord.class, id);
+    }
+
+    @Transactional
+    @Override
+    public void initUserVipInfo(String loginUid) {
+        Session session = userVIPInfoDao.getSession();
+        UserVIPInfo userVIPInfo = (UserVIPInfo) session.get(UserVIPInfo.class, loginUid);
+        if (userVIPInfo == null) {
+            userVIPInfo = new UserVIPInfo();
+            userVIPInfo.setUid(loginUid);
+            userVIPInfo.setCreateTime(new Date());
+            userVIPInfoDao.save(userVIPInfo);
+        }
+    }
 }

--
Gitblit v1.8.0