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