栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

解决实际项目中优惠券到期后 自动过期问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决实际项目中优惠券到期后 自动过期问题

解决实际项目中优惠券到期后 自动过期问题
  • 前言
  • 一、DateUtil类
  • 二、service层
  • 三、task层


前言

对于实际项目中,当前时间超过了用户领取的优惠券的可使用时间,如何使得用户领取的优惠券自动过期的问题?
我们的思路是设置一个定时操作,异步执行一个方法,该方法是循环拿到优惠券,检查当前时间是否在使用时间范围内,若不在,则设置优惠券的状态属性为已过期。


提示:以下是本篇文章正文内容,下面案例可供参考

一、DateUtil类

代码如下(示例):

    public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
        if (nowTime.getTime() == startTime.getTime()
                || nowTime.getTime() == endTime.getTime()) {
            return true;
        }

        Calendar date = Calendar.getInstance();
        date.setTime(nowTime);

        Calendar begin = Calendar.getInstance();
        begin.setTime(startTime);

        Calendar end = Calendar.getInstance();
        end.setTime(endTime);

        if (date.after(begin) && date.before(end)) {
            return true;
        } else {
            return false;
        }
    }
二、service层

代码如下(示例):

    void runCouponsUserStatusTimeOutToExpired();
    @Override
    @Async
    public void runCouponsUserStatusTimeOutToExpired() {

        log.info("runCouponsUserStatusTimeOutToExpired start.......time={}",System.currentTimeMillis());
        Long startTime01 = System.currentTimeMillis();
        //查找到所有用户已领取,但未使用的用户券列表
        List couponsUserList = findListByUseStatus(CouponsUserConstant.RECEIVE_STATE);
        log.info("runCouponsUserStatusTimeOutToExpired couponsUserList.size={}",couponsUserList.size());
        if (couponsUserList.size() > 0) {
            List needCouponsUserList = new ArrayList<>();
            Date currentDate = new Date();
            for (int i = 0; i < couponsUserList.size(); i++) {
                CouponsUser couponsUser = couponsUserList.get(i);
                Date effDate = couponsUser.getEffDate();
                Date expDate = couponsUser.getExpDate();
                boolean isEffective = DateUtil.isEffectiveDate(currentDate, effDate, expDate);
                //券已失效 则修改用户券的状态为已过期
                if (!isEffective) {  
                    couponsUser.setCancelTime(currentDate);
                    couponsUser.setUseStatus(CouponsUserConstant.EXPIRED_STATE);
                    needCouponsUserList.add(couponsUser); //需要更新状态的券
                }
            }

            if (needCouponsUserList.size() > 0) {
                log.info("runCouponsUserStatusTimeOutToExpired update needCouponsUserList.size={}",needCouponsUserList.size());
                saveOrUpdateBatch(needCouponsUserList);
            }

        }

        Long endTime02 = System.currentTimeMillis();
        log.info("runCouponsUserStatusTimeOutToExpired end second={},mills={}",(endTime02-startTime01)/1000,(endTime02-startTime01)%1000);

    }
三、task层

代码如下(示例):

@Configuration
@EnableScheduling
public class CouponsUserScheduleTask {

    @Autowired
    private CouponsUserService couponsUserService;

    private static Logger log = LoggerFactory.getLogger(CouponsUserScheduleTask.class);

    @Scheduled(cron = "0 0/1 * * * ?")//每3分 //crontab -e 动态代替应用命令
    public void handlerCouponsUserStatusTimeOutToExpired(){
        log.info("handlerCouponsUserStatusTimeOutToExpired start.......time={}",System.currentTimeMillis());
        Long startTime01 = System.currentTimeMillis();
        couponsUserService.runCouponsUserStatusTimeOutToExpired();
        Long endTime02 = System.currentTimeMillis();
        log.info("handlerCouponsUserStatusTimeOutToExpired end second={},mills={}",(endTime02-startTime01)/1000,(endTime02-startTime01)%1000);
    }

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678588.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号