实习工作之定时任务

需求:在当天晚上12点定时将过期数据的状态置为冻结状态

  1. 版本一代码实现[相当于是一个死代码,因为不能自动调度]
public void updateStatus() throws CommonException, ParseException {
        String date_str = "2023-07-01 00:00:00";
        Date expireTime = DateUtils.toDate(date_str);
        if(userCardMapper.countExpiredDate(userCardPageReqList,expireTime)<=0){
            throw ExceptionUtils.create(CenterErrorEnum.PROJECT_CODE_NOT_BLANK);
        }
        List<UserCard> userCards = userCardMapper.queryExpiredDate(expireTime);
        userCards = userCards.stream()
                .map(userCard-> {
                    userCard.setEquityUseStatus(EquityUseStatus.FREEZE_06);
                    return userCard;
                }).collect(Collectors.toList());
        userCardMapper.updateStatus(userCards);
    }

mybatis的查询

<select id="countExpiredDate" resultType="java.lang.Integer">
    select count(*) from table
    <where>
        del_flag = 0
        <if test="expireTime != null">
            and expire_time &lt;= #{expireTime,VARCHAR=TIMESTAMP}
        </if>
    </where>
  </select>

 <select id="queryExpiredDate" resultType="UserCard">
    select * from table2
    <where>
      del_flag = 0
      <if test="expireTime != null">
        and expire_time &lt;= #{expireTime,VARCHAR=TIMESTAMP}
      </if>
    </where>
  </select>
  1. 版本二的更新
    问题点:不能写死时间
    采用XxlJob任务调度中心调度
    首先设置时间,使用cron表达式设置定时时间
    实习工作之定时任务_第1张图片

然后设置过期任务

 @XxlJob("updateStatus")
    public ReturnT<String> updateStatus(String param) {
        log.info("===开始===");
        baseMapper.updateStatus();
        log.info("===结束===");
        return ReturnT.SUCCESS;
    }
<update id="updateStatus" >
    update table
    set
    status = '06' where status in ('00','01') expire_time &lt;= #{expireTime,VARCHAR=TIMESTAMP}
  </update>

扩充知识点

  1. Java日期操作
    格式转换器:SimpleDateFormate
SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd HH:mm E");
Date now=new Date();
System.out.println(format1.format(now));
 
out: 2022/10/12 14:28 星期三

String 转Date

String date_str = "2023-07-01 00:00:00";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date expireTime = simpleDateFormat.parse(date_str);
  1. Java实现定时任务[Timer类实现该方法]

https://blog.51cto.com/u_14152/6305966

  1. mybatis大于小于等格式

https://blog.csdn.net/p1830095583/article/details/116019413

实习工作之定时任务_第2张图片
4. sql查询日期

https://blog.csdn.net/qq_37075841/article/details/123117720

<select id="method" resultMap="BaseResultMap">
  select  *  from table_a
  where date_format(create_time,'%Y-%m-%d') = #{createTime}
</select>
  1. java.util.Date 和 java.sql.Date区别

https://blog.csdn.net/Yuan_Hang723/article/details/109688772

java.util.Date通常情况下获取日期
java.sql.Date针对sql,只能获取日期,不能获取时间

  1. cron表达式

https://blog.csdn.net/weixin_42408447/article/details/117422084

你可能感兴趣的:(实习工作,java)