From 011e37c1a3bdf063049dce5d2abd7a11a6951fec Mon Sep 17 00:00:00 2001 From: yhl452493373 Date: Tue, 15 Feb 2022 09:47:37 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=20clear()=E5=92=8C?= =?UTF-8?q?clear(begin,end)=E6=96=B9=E6=B3=95=EF=BC=8C=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E5=9C=A8=E6=9F=90=E4=BA=9B=E6=83=85=E5=86=B5=E4=B8=8B=E6=B8=85?= =?UTF-8?q?=E7=90=86unlock=E5=92=8Cunused=E8=A1=A8=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E4=BB=96=E4=BB=AC=E8=B6=8A=E6=9D=A5=E8=B6=8A=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 ++++++--- pom.xml | 2 +- .../seq/dao/SequencesUnusedDao.java | 11 ++++ .../seq/dao/impl/SequencesUnusedDaoImpl.java | 50 +++++++++++++------ .../yanghuanglin/seq/generator/Generator.java | 10 ++++ .../generator/impl/SequencesGenerator.java | 18 +++++-- .../yanghuanglin/seq/po/SequencesUnused.java | 20 ++++++++ 7 files changed, 109 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 2f5b14e..54b39d8 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ 使用方法: -+ 在项目中放置jar包的地方把seq-1.4.1.jar、seq-1.4.1-sources.jar、seq-1.4.1-pom.xml复制过去 ++ 在项目中放置jar包的地方把seq-1.5.1.jar、seq-1.5.1-sources.jar、seq-1.5.1-pom.xml复制过去 + 在pom.xml中增加以下内容,然后执行maven命令:mvn clean ```xml @@ -18,7 +18,7 @@ com.yanghuanglin seq - 1.4.1 + 1.5.1 @@ -50,13 +50,13 @@ - ${project.basedir}/lib/seq-1.4.1.jar - ${pom.basedir}/lib/seq-1.4.1-pom.xml - ${project.basedir}/lib/seq-1.4.1-sources.jar + ${project.basedir}/lib/seq-1.5.1.jar + ${pom.basedir}/lib/seq-1.5.1-pom.xml + ${project.basedir}/lib/seq-1.5.1-sources.jar default com.yanghuanglin seq - 1.4.1 + 1.5.1 jar true @@ -484,6 +484,15 @@ public interface Generator { * @param sequences 需要释放的序号。一般是一个通过{@link Sequences#setKey(String)}、{@link Sequences#setType(String)}、{@link Sequences#setSeq(Long)}三方法一起手动构建或通过{@link Sequences#Sequences(String, String, Long)}构造方法构建的实例对象 */ void release(Sequences sequences); -} + /** + * 清空所有闲置序号和未锁定序号 + */ + void clear(); + + /** + * 清空指定时间段内闲置序号和未锁定序号 + */ + void clear(Date begin, Date end); +} ``` \ No newline at end of file diff --git a/pom.xml b/pom.xml index d1d95b2..4fda1fb 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.yanghuanglin seq - 1.4.1 + 1.5.1 seq seq diff --git a/src/main/java/com/yanghuanglin/seq/dao/SequencesUnusedDao.java b/src/main/java/com/yanghuanglin/seq/dao/SequencesUnusedDao.java index 84c5c8c..ea81308 100644 --- a/src/main/java/com/yanghuanglin/seq/dao/SequencesUnusedDao.java +++ b/src/main/java/com/yanghuanglin/seq/dao/SequencesUnusedDao.java @@ -2,6 +2,7 @@ package com.yanghuanglin.seq.dao; import com.yanghuanglin.seq.po.SequencesUnused; +import java.util.Date; import java.util.List; /** @@ -36,4 +37,14 @@ public interface SequencesUnusedDao { boolean saveBatch(List sequencesUnusedList); void createTable(); + + /** + * 删除所有闲置的序号 + */ + boolean deleteAll(); + + /** + * 删除指定时间段内使用中的序号 + */ + boolean deleteByDate(Date begin, Date end); } diff --git a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnusedDaoImpl.java b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnusedDaoImpl.java index 786558f..4244612 100644 --- a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnusedDaoImpl.java +++ b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesUnusedDaoImpl.java @@ -10,6 +10,8 @@ import org.springframework.jdbc.core.RowMapper; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.Date; import java.util.List; /** @@ -28,7 +30,7 @@ public class SequencesUnusedDaoImpl implements SequencesUnusedDao { @Override public SequencesUnused findMinSeq(SequencesUnused sequencesUnused) { - String sql = "select * from `%s_ununsed` where `%s`=? and `%s`=? order by `%s` asc limit 0,1"; + String sql = "select * from `%s_unused` where `%s`=? and `%s`=? order by `%s` asc limit 0,1"; sql = String.format(sql, tableConfig.getTable(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn(), tableConfig.getSeqColumn()); try { return this.jdbcTemplate.queryForObject(sql, rowMapper(), sequencesUnused.getKey(), sequencesUnused.getType()); @@ -40,7 +42,7 @@ public class SequencesUnusedDaoImpl implements SequencesUnusedDao { @Override public SequencesUnused findMaxSeq(SequencesUnused sequencesUnused) { try { - String sql = "select * from `%s_ununsed` where `%s`=? and `%s`=? order by `%s` desc limit 0,1"; + String sql = "select * from `%s_unused` where `%s`=? and `%s`=? order by `%s` desc limit 0,1"; sql = String.format(sql, tableConfig.getTable(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn(), tableConfig.getSeqColumn()); return this.jdbcTemplate.queryForObject(sql, rowMapper(), sequencesUnused.getKey(), sequencesUnused.getType()); } catch (EmptyResultDataAccessException ignored) { @@ -50,7 +52,7 @@ public class SequencesUnusedDaoImpl implements SequencesUnusedDao { @Override public boolean delete(SequencesUnused sequencesUnused) { - String sql = "delete from `%s_ununsed` where `%s`=? and `%s`=? and `%s`=?"; + String sql = "delete from `%s_unused` where `%s`=? and `%s`=? and `%s`=?"; sql = String.format(sql, tableConfig.getTable(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn(), tableConfig.getSeqColumn()); int result = this.jdbcTemplate.update(sql, sequencesUnused.getKey(), sequencesUnused.getType(), sequencesUnused.getSeq()); return result != 0; @@ -58,16 +60,16 @@ public class SequencesUnusedDaoImpl implements SequencesUnusedDao { @Override public boolean save(SequencesUnused sequencesUnused) { - String sql = "insert into `%s_ununsed`(`%s`,`%s`,`%s`) values(?,?,?)"; - sql = String.format(sql, tableConfig.getTable(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn(), tableConfig.getSeqColumn()); - int result = this.jdbcTemplate.update(sql, sequencesUnused.getKey(), sequencesUnused.getType(), sequencesUnused.getSeq()); + String sql = "insert into `%s_unused`(`%s`,`%s`,`%s`,`%s`) values(?,?,?,?)"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn(), tableConfig.getSeqColumn(), tableConfig.getCreateTimeColumn()); + int result = this.jdbcTemplate.update(sql, sequencesUnused.getKey(), sequencesUnused.getType(), sequencesUnused.getSeq(), sequencesUnused.getCreateTime()); return result != 0; } @Override public boolean saveBatch(List sequencesUnusedList) { - String sql = "insert into `%s_ununsed`(`%s`,`%s`,`%s`) values(?,?,?)"; - sql = String.format(sql, tableConfig.getTable(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn(), tableConfig.getSeqColumn()); + String sql = "insert into `%s_unused`(`%s`,`%s`,`%s`,`%s`) values(?,?,?,?)"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn(), tableConfig.getSeqColumn(), tableConfig.getCreateTimeColumn()); int[] result = this.jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { @@ -75,6 +77,7 @@ public class SequencesUnusedDaoImpl implements SequencesUnusedDao { ps.setString(1, sequencesUnused.getKey()); ps.setString(2, sequencesUnused.getType()); ps.setLong(3, sequencesUnused.getSeq()); + ps.setTimestamp(4, new Timestamp(sequencesUnused.getCreateTime().getTime())); } @Override @@ -87,29 +90,48 @@ public class SequencesUnusedDaoImpl implements SequencesUnusedDao { @Override public void createTable() { - String sql = "CREATE TABLE IF NOT EXISTS `%s_ununsed` ( " + + String sql = "CREATE TABLE IF NOT EXISTS `%s_unused` ( " + " `%s` VARCHAR ( 255 ) NOT NULL COMMENT '序号英文名称'," + " `%s` VARCHAR ( 255 ) NOT NULL COMMENT '序号类型'," + " `%s` BIGINT ( 2 ) NOT NULL COMMENT '闲置的的序号'," + + " `%s` DATETIME NOT NULL COMMENT '设为闲置序号的时间'," + " PRIMARY KEY ( `%s`, `%s`, `%s` ) " + " ) COMMENT '闲置序号表'"; sql = String.format(sql, tableConfig.getTable(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn(), tableConfig.getSeqColumn(), + tableConfig.getCreateTimeColumn(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn(), tableConfig.getSeqColumn()); this.jdbcTemplate.execute(sql); } + @Override + public boolean deleteAll() { + String sql = "delete from `%s_unused`"; + sql = String.format(sql, tableConfig.getTable()); + int result = this.jdbcTemplate.update(sql); + return result != 0; + } + + @Override + public boolean deleteByDate(Date begin, Date end) { + String sql = "delete from `%s_unused` where `%s`>=? and `%s`<=?"; + sql = String.format(sql, tableConfig.getTable(), tableConfig.getCreateTimeColumn(), tableConfig.getCreateTimeColumn()); + int result = this.jdbcTemplate.update(sql, begin, end); + return result != 0; + } + private RowMapper rowMapper() { return (rs, rowNum) -> { - SequencesUnused result = new SequencesUnused(); - result.setKey(rs.getString(tableConfig.getKeyColumn())); - result.setType(rs.getString(tableConfig.getTypeColumn())); - result.setSeq(rs.getLong(tableConfig.getSeqColumn())); - return result; + SequencesUnused sequencesUnused = new SequencesUnused(); + sequencesUnused.setKey(rs.getString(tableConfig.getKeyColumn())); + sequencesUnused.setType(rs.getString(tableConfig.getTypeColumn())); + sequencesUnused.setSeq(rs.getLong(tableConfig.getSeqColumn())); + sequencesUnused.setCreateTime(rs.getDate(tableConfig.getCreateTimeColumn())); + return sequencesUnused; }; } } diff --git a/src/main/java/com/yanghuanglin/seq/generator/Generator.java b/src/main/java/com/yanghuanglin/seq/generator/Generator.java index b9cdbca..ff24fb9 100644 --- a/src/main/java/com/yanghuanglin/seq/generator/Generator.java +++ b/src/main/java/com/yanghuanglin/seq/generator/Generator.java @@ -190,4 +190,14 @@ public interface Generator { * @param sequences 需要释放的序号。一般是一个通过{@link Sequences#setKey(String)}、{@link Sequences#setType(String)}、{@link Sequences#setSeq(Long)}三方法一起手动构建或通过{@link Sequences#Sequences(String, String, Long)}构造方法构建的实例对象 */ void release(Sequences sequences); + + /** + * 清空所有闲置序号和未锁定序号 + */ + void clear(); + + /** + * 清空指定时间段内闲置序号和未锁定序号 + */ + void clear(Date begin, Date end); } diff --git a/src/main/java/com/yanghuanglin/seq/generator/impl/SequencesGenerator.java b/src/main/java/com/yanghuanglin/seq/generator/impl/SequencesGenerator.java index 49f53f4..e9e8ea0 100644 --- a/src/main/java/com/yanghuanglin/seq/generator/impl/SequencesGenerator.java +++ b/src/main/java/com/yanghuanglin/seq/generator/impl/SequencesGenerator.java @@ -249,7 +249,7 @@ public class SequencesGenerator implements Generator { List sequencesUnusedList = new ArrayList<>(); for (SequencesUnlock sequencesUnlock : sequencesUnlockList) { - sequencesUnusedList.add(new SequencesUnused(sequencesUnlock)); + sequencesUnusedList.add(new SequencesUnused(sequencesUnlock, new Date())); } //将使用中表的序号放到空闲表中 @@ -265,7 +265,7 @@ public class SequencesGenerator implements Generator { List sequencesUnusedList = new ArrayList<>(); for (SequencesUnlock sequencesUnlock : sequencesUnlockList) { - sequencesUnusedList.add(new SequencesUnused(sequencesUnlock)); + sequencesUnusedList.add(new SequencesUnused(sequencesUnlock, new Date())); } //将指定时间段内使用中表的序号放到空闲表中 @@ -279,6 +279,18 @@ public class SequencesGenerator implements Generator { if (sequences == null) return; sequencesUnlockDao.delete(new SequencesUnlock(sequences)); - sequencesUnusedDao.save(new SequencesUnused(sequences)); + sequencesUnusedDao.save(new SequencesUnused(sequences, new Date())); + } + + @Override + public void clear() { + sequencesUnlockDao.deleteAll(); + sequencesUnusedDao.deleteAll(); + } + + @Override + public void clear(Date begin, Date end) { + sequencesUnlockDao.deleteByDate(begin, end); + sequencesUnusedDao.deleteByDate(begin, end); } } diff --git a/src/main/java/com/yanghuanglin/seq/po/SequencesUnused.java b/src/main/java/com/yanghuanglin/seq/po/SequencesUnused.java index e18280b..60133a6 100644 --- a/src/main/java/com/yanghuanglin/seq/po/SequencesUnused.java +++ b/src/main/java/com/yanghuanglin/seq/po/SequencesUnused.java @@ -1,6 +1,8 @@ package com.yanghuanglin.seq.po; +import java.util.Date; + /** * 闲置序号 * @@ -8,6 +10,8 @@ package com.yanghuanglin.seq.po; * @since 2022/1/28 */ public class SequencesUnused extends Sequences { + private Date createTime; + public SequencesUnused() { } @@ -17,12 +21,28 @@ public class SequencesUnused extends Sequences { this.seq = sequences.getSeq(); } + public SequencesUnused(Sequences sequences, Date createTime) { + this.key = sequences.getKey(); + this.type = sequences.getType(); + this.seq = sequences.getSeq(); + this.createTime = createTime; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + @Override public String toString() { return "SequencesUnused{" + "key='" + key + '\'' + ", type='" + type + '\'' + ", seq=" + seq + + ", createTime=" + createTime + '}'; } }