Former-commit-id: 1c0f4239c38c2433454e872246ce05094781a203
master
wangbingit@outlook.com 4 years ago
parent eb224416d5
commit 985bdd5611

@ -1,16 +1,8 @@
package ${basePackage}.module.system.mgr;
import ${basePackage}.frame.auth.Token;
import ${basePackage}.module.system.req.SequenceCreateRequest;
import ${basePackage}.module.system.req.SequenceDeleteRequest;
import ${basePackage}.module.system.req.SequenceFindRequest;
import ${basePackage}.module.system.req.SequenceGetRequest;
import ${basePackage}.module.system.req.SequenceUpdateRequest;
import ${basePackage}.module.system.rsp.SequenceCreateResponse;
import ${basePackage}.module.system.rsp.SequenceDeleteResponse;
import ${basePackage}.module.system.rsp.SequenceFindResponse;
import ${basePackage}.module.system.rsp.SequenceGetResponse;
import ${basePackage}.module.system.rsp.SequenceUpdateResponse;
/**
*
@ -21,42 +13,6 @@ import ${basePackage}.module.system.rsp.SequenceUpdateResponse;
*/
public interface SequenceManager {
/**
*
*
* @param request
* @param token
* @return
*/
SequenceCreateResponse create(SequenceCreateRequest request, Token token);
/**
*
*
* @param request
* @param token
* @return
*/
SequenceDeleteResponse delete(SequenceDeleteRequest request, Token token);
/**
*
*
* @param request
* @param token
* @return
*/
SequenceUpdateResponse update(SequenceUpdateRequest request, Token token);
/**
*
*
* @param request
* @param token
* @return
*/
SequenceFindResponse find(SequenceFindRequest request, Token token);
/**
*
*

@ -1,29 +1,21 @@
package ${basePackage}.module.system.mgr;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ${basePackage}.frame.auth.Token;
import ${basePackage}.frame.base.ErrorType;
import ${basePackage}.frame.utils.IDgenerator;
import ${basePackage}.frame.utils.MapperUtil;
import ${basePackage}.frame.utils.Message;
import ${basePackage}.frame.utils.ValidationUtil;
import ${basePackage}.module.system.ent.Sequence;
import ${basePackage}.module.system.mpr.SequenceMapper;
import ${basePackage}.module.system.req.SequenceCreateRequest;
import ${basePackage}.module.system.req.SequenceDeleteRequest;
import ${basePackage}.module.system.req.SequenceFindRequest;
import ${basePackage}.module.system.req.SequenceGetRequest;
import ${basePackage}.module.system.req.SequenceUpdateRequest;
import ${basePackage}.module.system.rsp.SequenceCreateResponse;
import ${basePackage}.module.system.rsp.SequenceDeleteResponse;
import ${basePackage}.module.system.rsp.SequenceFindResponse;
import ${basePackage}.module.system.rsp.SequenceGetResponse;
import ${basePackage}.module.system.rsp.SequenceUpdateResponse;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
* SEQUENCE -
@ -34,119 +26,12 @@ import ${basePackage}.module.system.rsp.SequenceUpdateResponse;
*/
@Transactional
@Service
public class SequenceManagerImpl implements ${basePackage}.module.system.mgr.SequenceManager {
public class SequenceManagerImpl implements SequenceManager {
@Autowired
private SequenceMapper sequenceMapper;
/**
*
*
* @param request
* @param token
* @return
*/
public SequenceCreateResponse create(SequenceCreateRequest request, Token token) {
SequenceCreateResponse response = new SequenceCreateResponse();
ValidationUtil.validate(request, response);
if (response.hasError()) {
return response;
}
long id = IDgenerator.nextId();
Sequence entity = MapperUtil.map(request, Sequence.class);
entity.setId(id);
long result = sequenceMapper.insert(entity, token);
if (1L != result) {
response.addError(ErrorType.BUSINESS_ERROR, Message.CREATE_FAILURE);
return response;
}
response.setId(id);
return response;
}
/**
*
*
* @param request
* @param token
* @return
*/
public SequenceDeleteResponse delete(SequenceDeleteRequest request, Token token) {
SequenceDeleteResponse response = new SequenceDeleteResponse();
ValidationUtil.validate(request, response);
if (response.hasError()) {
return response;
}
long result = sequenceMapper.delete(request, token);
if (1L != result) {
response.addError(ErrorType.BUSINESS_ERROR, Message.DELETE_FAILURE);
return response;
}
response.setResult(result);
return response;
}
/**
*
*
* @param request
* @param token
* @return
*/
public SequenceUpdateResponse update(SequenceUpdateRequest request, Token token) {
SequenceUpdateResponse response = new SequenceUpdateResponse();
ValidationUtil.validate(request, response);
if (response.hasError()) {
return response;
}
long result = sequenceMapper.update(request, token);
if (1L != result) {
response.addError(ErrorType.BUSINESS_ERROR, Message.UPDATE_FAILURE);
return response;
}
response.setResult(result);
return response;
}
/**
*
*
* @param request
* @param token
* @return
*/
@Transactional(readOnly = true)
public SequenceFindResponse find(SequenceFindRequest request, Token token) {
SequenceFindResponse response = new SequenceFindResponse();
ValidationUtil.validate(request, response);
if (response.hasError()) {
return response;
}
if (request.getPageSize() != 0) {
PageHelper.startPage(request.getPageNumber(), request.getPageSize());
}
if (StringUtil.isNotEmpty(request.getSortKey())) {
PageHelper.orderBy(request.getSortKey() + " " + request.getSortType());
}
PageInfo<Sequence> pageInfo = new PageInfo<>(sequenceMapper.find(request, token));
response.setResult(pageInfo.getList());
response.setTotalCount(pageInfo.getTotal());
return response;
}
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
/**
*
@ -159,19 +44,68 @@ public class SequenceManagerImpl implements ${basePackage}.module.system.mgr.Seq
public SequenceGetResponse get(SequenceGetRequest request, Token token) {
SequenceGetResponse response = new SequenceGetResponse();
int value = 0;
String year = null;
String month = null;
String date = null;
String format = dateFormat.format(new Date());
if (request.getByYear()) year = format.substring(0, 4);
if (request.getByMonth()) month = format.substring(4, 6);
if (request.getByDate()) date = format.substring(6, 8);
ValidationUtil.validate(request, response);
if (response.hasError()) {
return response;
}
Sequence po = sequenceMapper.get(request, token);
if (po != null) {
response.setSequence(po);
} else {
response.addError(ErrorType.BUSINESS_ERROR, Message.GET_FAILURE);
}
int retryCount = 100;
do {
// 首先查询是否已经开始的序列
Sequence forFind = new Sequence();
forFind.setSeqName(request.getSeqName());
forFind.setYear(year);
forFind.setMonth(month);
forFind.setDate(date);
List<Sequence> sequenceList = sequenceMapper.find(forFind, token);
if (sequenceList.size() > 0) {
Sequence sequence = sequenceList.get(0);
// 检查流水是否达到上限,达到最大值或理论最大值
if (sequence.getNextValue() > request.getMaxValue()) {
response.addError(ErrorType.BUSINESS_ERROR, "流水已达上限,请等待下个周期!");
return response;
}
// 更新下一个流水号
sequence.setNextValue(sequence.getNextValue() + request.getSeqStep());
long update = sequenceMapper.update(sequence, token);
if (update == 1) {
value = sequence.getNextValue() - request.getSeqStep();
break;
}
} else {// 未开始的序列
Sequence forCreate = new Sequence();
long id = IDgenerator.nextId();
forCreate.setId(id);
forCreate.setSeqName(request.getSeqName());
forCreate.setSeqNote(request.getSeqNote());
forCreate.setYear(year);
forCreate.setMonth(month);
forCreate.setDate(date);
forCreate.setNextValue(request.getMinValue() + request.getSeqStep());
long insert = sequenceMapper.insert(forCreate, token);
if (insert == 1) {
value = request.getMinValue();
break;
}
}
retryCount--;
} while (value <= 0 && retryCount > 0);
response.setSequence(String.format(Locale.CHINA, "%s%s%s%s%0" + String.valueOf(request.getMaxValue()).length() + "d",
request.getSeqPrefix(),
year == null ? "" : year,
month == null ? "" : month,
date == null ? "" : date,
value));
return response;
}
}

@ -1,102 +0,0 @@
package ${basePackage}.module.system.req;
import org.hibernate.validator.constraints.Length;
import ${basePackage}.frame.base.BaseRequest;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* SequenceCreateRequest -
*
* @author wangbing
* @version 0.0.1
* @since 2020-06-25
*/
public class SequenceCreateRequest extends BaseRequest {
/**
* .
*/
@NotBlank(message = "[seqName]序列名称不能为空")
@Length(min = 0, max = 50, message = "[seqName]序列名称长度不合法(0-50)")
private String seqName;
/**
* .
*/
@Length(min = 0, max = 50, message = "[seqNote]序列备注长度不合法(0-50)")
private String seqNote;
/**
* .
*/
@Length(min = 0, max = 4, message = "[year]年长度不合法(0-4)")
private String year;
/**
* .
*/
@Length(min = 0, max = 2, message = "[month]月长度不合法(0-2)")
private String month;
/**
* .
*/
@Length(min = 0, max = 2, message = "[date]日长度不合法(0-2)")
private String date;
/**
* .
*/
@NotNull(message = "[nextValue]下一个值不能为NULL")
private Integer nextValue;
public String getSeqName() {
return this.seqName;
}
public void setSeqName(String seqName) {
this.seqName = seqName;
}
public String getSeqNote() {
return this.seqNote;
}
public void setSeqNote(String seqNote) {
this.seqNote = seqNote;
}
public String getYear() {
return this.year;
}
public void setYear(String year) {
this.year = year;
}
public String getMonth() {
return this.month;
}
public void setMonth(String month) {
this.month = month;
}
public String getDate() {
return this.date;
}
public void setDate(String date) {
this.date = date;
}
public Integer getNextValue() {
return this.nextValue;
}
public void setNextValue(Integer nextValue) {
this.nextValue = nextValue;
}
}

@ -1,29 +0,0 @@
package ${basePackage}.module.system.req;
import ${basePackage}.frame.base.BaseRequest;
import javax.validation.constraints.NotNull;
/**
* SequenceDeleteRequest -
*
* @author wangbing
* @version 0.0.1
* @since 2020-06-25
*/
public class SequenceDeleteRequest extends BaseRequest {
/**
* .
*/
@NotNull(message = "[id]主键不能为空")
private long id;
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
}

@ -1,93 +0,0 @@
package ${basePackage}.module.system.req;
import ${basePackage}.frame.base.BaseFindRequest;
import java.util.Date;
/**
* SequenceFindRequest -
*
* @author wangbing
* @version 0.0.1
* @since 2020-06-25
*/
public class SequenceFindRequest extends BaseFindRequest {
/**
* .
*/
private String seqName;
/**
* .
*/
private String year;
/**
* .
*/
private String month;
/**
* .
*/
private String date;
/**
*
*/
private Date startDate;
/**
*
*/
private Date endDate;
public String getSeqName() {
return this.seqName;
}
public void setSeqName(String seqName) {
this.seqName = seqName;
}
public String getYear() {
return this.year;
}
public void setYear(String year) {
this.year = year;
}
public String getMonth() {
return this.month;
}
public void setMonth(String month) {
this.month = month;
}
public String getDate() {
return this.date;
}
public void setDate(String date) {
this.date = date;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
}

@ -1,8 +1,9 @@
package ${basePackage}.module.system.req;
import org.hibernate.validator.constraints.Length;
import ${basePackage}.frame.base.BaseRequest;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotBlank;
/**
* SequenceGetRequest -
@ -14,16 +15,122 @@ import javax.validation.constraints.NotNull;
public class SequenceGetRequest extends BaseRequest {
/**
* .
* .
*/
@NotNull(message = "[id]主键不能为空")
private long id;
@NotBlank(message = "[seqName]序列名称不能为空")
@Length(min = 1, max = 50, message = "[seqName]序列名称长度不合法(1-50)")
private String seqName;
public long getId() {
return this.id;
/**
* .
*/
@Length(min = 0, max = 50, message = "[seqNote]序列备注长度不合法(0-50)")
private String seqNote;
/**
*
*/
private String seqPrefix;
/**
*
*/
private int seqStep = 1;
/**
* .
*/
private int minValue = 1;
/**
* .
*/
private int maxValue = 99999;
/**
* .
*/
private boolean byYear;
/**
* .
*/
private boolean byMonth;
/**
* .
*/
private boolean byDate;
public String getSeqName() {
return seqName;
}
public void setSeqName(String seqName) {
this.seqName = seqName;
}
public String getSeqNote() {
return seqNote;
}
public void setSeqNote(String seqNote) {
this.seqNote = seqNote;
}
public void setByYear(boolean byYear) {
this.byYear = byYear;
}
public boolean getByYear() {
return byYear;
}
public boolean getByMonth() {
return byMonth;
}
public void setByMonth(boolean byMonth) {
this.byMonth = byMonth;
}
public boolean getByDate() {
return byDate;
}
public void setByDate(boolean byDate) {
this.byDate = byDate;
}
public String getSeqPrefix() {
return seqPrefix;
}
public void setSeqPrefix(String seqPrefix) {
this.seqPrefix = seqPrefix;
}
public int getSeqStep() {
return seqStep;
}
public void setSeqStep(int seqStep) {
this.seqStep = seqStep;
}
public int getMinValue() {
return minValue;
}
public void setMinValue(int minValue) {
this.minValue = minValue;
}
public int getMaxValue() {
return maxValue;
}
public void setId(long id) {
this.id = id;
public void setMaxValue(int maxValue) {
this.maxValue = maxValue;
}
}

@ -1,116 +0,0 @@
package ${basePackage}.module.system.req;
import org.hibernate.validator.constraints.Length;
import ${basePackage}.frame.base.BaseUpdateRequest;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* SequenceUpdateRequest -
*
* @author wangbing
* @version 0.0.1
* @since 2020-06-25
*/
public class SequenceUpdateRequest extends BaseUpdateRequest {
/**
* .
*/
@NotNull(message = "[id]主键不能为NULL")
private Long id;
/**
* .
*/
@NotBlank(message = "[seqName]序列名称不能为空")
@Length(min = 0, max = 50, message = "[seqName]序列名称长度不合法(0-50)")
private String seqName;
/**
* .
*/
@Length(min = 0, max = 50, message = "[seqNote]序列备注长度不合法(0-50)")
private String seqNote;
/**
* .
*/
@Length(min = 0, max = 4, message = "[year]年长度不合法(0-4)")
private String year;
/**
* .
*/
@Length(min = 0, max = 2, message = "[month]月长度不合法(0-2)")
private String month;
/**
* .
*/
@Length(min = 0, max = 2, message = "[date]日长度不合法(0-2)")
private String date;
/**
* .
*/
@NotNull(message = "[nextValue]下一个值不能为NULL")
private Integer nextValue;
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getSeqName() {
return this.seqName;
}
public void setSeqName(String seqName) {
this.seqName = seqName;
}
public String getSeqNote() {
return this.seqNote;
}
public void setSeqNote(String seqNote) {
this.seqNote = seqNote;
}
public String getYear() {
return this.year;
}
public void setYear(String year) {
this.year = year;
}
public String getMonth() {
return this.month;
}
public void setMonth(String month) {
this.month = month;
}
public String getDate() {
return this.date;
}
public void setDate(String date) {
this.date = date;
}
public Integer getNextValue() {
return this.nextValue;
}
public void setNextValue(Integer nextValue) {
this.nextValue = nextValue;
}
}

@ -1,26 +0,0 @@
package ${basePackage}.module.system.rsp;
import ${basePackage}.frame.base.BaseResponse;
/**
* SequenceCreateResponse -
*
* @author wangbing
* @version 0.0.1
* @since 2020-06-25
*/
public class SequenceCreateResponse extends BaseResponse {
/**
*
*/
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}

@ -1,26 +0,0 @@
package ${basePackage}.module.system.rsp;
import ${basePackage}.frame.base.BaseResponse;
/**
* SequenceDeleteResponse -
*
* @author wangbing
* @version 0.0.1
* @since 2020-06-25
*/
public class SequenceDeleteResponse extends BaseResponse {
/**
*
*/
private Long result;
public Long getResult() {
return this.result;
}
public void setResult(Long result) {
this.result = result;
}
}

@ -1,14 +0,0 @@
package ${basePackage}.module.system.rsp;
import ${basePackage}.frame.base.BaseFindResponse;
import ${basePackage}.module.system.ent.Sequence;
/**
* SequenceFindResponse -
*
* @author wangbing
* @version 0.0.1
* @since 2020-06-25
*/
public class SequenceFindResponse extends BaseFindResponse<Sequence> {
}

@ -1,7 +1,6 @@
package ${basePackage}.module.system.rsp;
import ${basePackage}.frame.base.BaseResponse;
import ${basePackage}.module.system.ent.Sequence;
/**
* SequenceGetResponse -
@ -15,13 +14,13 @@ public class SequenceGetResponse extends BaseResponse {
/**
*
*/
private Sequence sequence;
private String sequence;
public Sequence getSequence() {
return this.sequence;
public String getSequence() {
return sequence;
}
public void setSequence(Sequence sequence) {
public void setSequence(String sequence) {
this.sequence = sequence;
}
}

@ -1,26 +0,0 @@
package ${basePackage}.module.system.rsp;
import ${basePackage}.frame.base.BaseResponse;
/**
* SequenceUpdateResponse -
*
* @author wangbing
* @version 0.0.1
* @since 2020-06-25
*/
public class SequenceUpdateResponse extends BaseResponse {
/**
*
*/
private Long result;
public Long getResult() {
return this.result;
}
public void setResult(Long result) {
this.result = result;
}
}

@ -0,0 +1,52 @@
package modules.SpringBoot.test.system;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import xyz.wbsite.frame.auth.Token;
import xyz.wbsite.frame.utils.MapperUtil;
import xyz.wbsite.module.system.mgr.SequenceManager;
import xyz.wbsite.module.system.req.SequenceGetRequest;
import xyz.wbsite.module.system.rsp.SequenceGetResponse;
/**
* SequenceTest - -
*
* @author wangbing
* @version 0.0.1
* @since 2020-06-25
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class SequenceTest {
@Autowired
private Token token;
@Autowired
private SequenceManager sequenceManager;
@Test
public void testGet() {
SequenceGetRequest request = new SequenceGetRequest();
request.setSeqName("测试");
request.setSeqNote("测试");
request.setSeqPrefix("CS");
request.setMaxValue(999);
request.setByYear(true);
request.setByMonth(false);
request.setByDate(false);
for (int i = 0; i < 1000; i++) {
SequenceGetResponse response = sequenceManager.get(request, token);
System.out.println("=================================================================================");
System.out.println(response.getSequence());
if (response.hasError()) System.err.println(MapperUtil.toJson(response));
System.out.println("=================================================================================");
}
}
}
Loading…
Cancel
Save

Powered by TurnKey Linux.