package com.zy.asrs.task.handler; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; /** * Created by vincent on 2020/7/7 */ @Service public class OverYearLogHandler extends AbstractHandler { @Autowired private JdbcTemplate jdbcTemplate; @Transactional public ReturnT start() { try { batchDelete("asr_stk_hplc", 180); batchDelete("asr_wrk_detl_log", 360); batchDelete("asr_wrk_mast_log", 360); batchDelete("cust_wait_pakin_log", 360); } catch (Exception e) { e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } return SUCCESS; } private void batchDelete(String tableName, int days) { int batchSize = 1000; int affected; do { String sql = String.format( "WITH cte AS (SELECT TOP (%d) * FROM %s WHERE dateadd(day, %d, appe_time) <= getdate()) DELETE FROM cte", batchSize, tableName, days ); affected = jdbcTemplate.update(sql); } while (affected > 0); } }