admin
2021-03-02 4011b8d0b377af33e2bc435f7726329630d706cb
src/main/java/com/yeshi/buwan/service/imp/vip/VIPServiceImpl.java
@@ -11,11 +11,13 @@
import com.yeshi.buwan.exception.vip.VIPException;
import com.yeshi.buwan.pptv.PPTVVipManager;
import com.yeshi.buwan.service.inter.vip.VIPService;
import com.yeshi.buwan.util.log.LoggerUtil;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.alipay.AlipayH5PayUtil;
@@ -26,12 +28,15 @@
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@Service
public class VIPServiceImpl implements VIPService {
    Logger logger = LoggerFactory.getLogger(VIPServiceImpl.class);
    @Resource
    private VIPOrderRecordDao vipOrderRecordDao;
@@ -78,12 +83,12 @@
    @Transactional(rollbackFor = Exception.class)
    @Override
    public VIPOrderRecord paySuccess(final String id, int payWay, BigDecimal payMoney, Date payTime) throws VIPException, PPTVException {
        LoggerUtil.getTestLogger().info("支付成功:开始执行{}", id);
        Session session = vipOrderRecordDao.getSession();
        //修改记录
        Query query = session.createQuery("from VIPOrderRecord as r where r.id=? ").setParameter(0, id);
        query.setLockMode("r", LockMode.UPGRADE);
        Query query = session.createSQLQuery("select * from wk_vip_order_record r where r.id=? for update").addEntity(VIPOrderRecord.class).setCacheable(false).setParameter(0, id);
        List<VIPOrderRecord> list = query.list();
        if (list != null && list.size() > 0) {
@@ -91,6 +96,7 @@
            if (record.getState() == VIPOrderRecord.STATE_PAY)
                throw new VIPException(1, "订单已经支付");
            session.createSQLQuery("insert into wk_vip_order_pay_success(id,create_time) value(?,now())").setParameter(0, id).executeUpdate();
            record.setPayWay(payWay);
            record.setPayMoney(payMoney);
@@ -109,8 +115,12 @@
            record.setVipEndTime(expireDate[1]);
            session.update(record);
            LoggerUtil.getTestLogger().info("支付成功:修改记录{}", id);
            //购买VIP
            pptvVipManager.buyVIP(record);
            LoggerUtil.getTestLogger().info("支付成功:购买VIP成功{}", id);
            return record;
        } else {
            throw new VIPException(10, "订单不存在");
@@ -131,7 +141,7 @@
    private Date[] addExpireTime(Session session, String uid, Date payTime, VIPPriceType type) {
        if (type == null || uid == null)
            return null;
        List list = session.createQuery("from UserVIPInfo i where i.uid=?").setParameter(0, uid).setLockMode("i", LockMode.UPGRADE).list();
        List list = session.createSQLQuery("select * from wk_user_vip i where i.uid=? for update").addEntity(UserVIPInfo.class).setParameter(0, uid).list();
        if (list == null || list.size() == 0) {
            //新增
            UserVIPInfo vip = new UserVIPInfo();
@@ -146,7 +156,7 @@
            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();
            return new Date[]{vipInfo.getExpireDate(), expireDate};
            return new Date[]{vipInfo.getExpireDate() == null ? new Date() : vipInfo.getExpireDate(), expireDate};
        }
    }
@@ -268,4 +278,43 @@
            userVIPInfoDao.save(userVIPInfo);
        }
    }
    @Override
    public List<UserVIPInfo> listVIPUser(Date minVIPExpireDate, Date maxVIPExpireDate, int page, int pageSize) {
        List<Serializable> list = new ArrayList<>();
        String hql = "from UserVIPInfo vip where 1=1";
        if (minVIPExpireDate != null) {
            hql += " and vip.expireDate>=?";
            list.add(minVIPExpireDate);
        }
        if (maxVIPExpireDate != null) {
            hql += " and vip.expireDate<?";
            list.add(maxVIPExpireDate);
        }
        hql += " order by vip.createTime desc";
        Serializable[] params = new Serializable[list.size()];
        list.toArray(params);
        return userVIPInfoDao.list(hql, (page - 1) * pageSize, pageSize, params);
    }
    @Override
    public long countVIPUser(Date minVIPExpireDate, Date maxVIPExpireDate) {
        List<Serializable> list = new ArrayList<>();
        String hql = "from UserVIPInfo vip where 1=1";
        if (minVIPExpireDate != null) {
            hql += " and vip.expireDate>=?";
            list.add(minVIPExpireDate);
        }
        if (maxVIPExpireDate != null) {
            hql += " and vip.expireDate<?";
            list.add(maxVIPExpireDate);
        }
        hql += " order by vip.createTime desc";
        Serializable[] params = new Serializable[list.size()];
        list.toArray(params);
        return userVIPInfoDao.getCount(hql, params);
    }
}