package jnpf.base.mapper;
|
|
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import jnpf.base.Pagination;
|
import jnpf.base.entity.BillRuleEntity;
|
import jnpf.base.model.billrule.BillRulePagination;
|
import jnpf.exception.DataException;
|
import jnpf.util.*;
|
import lombok.extern.slf4j.Slf4j;
|
|
import java.util.List;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
|
/**
|
* 单据规则
|
*
|
* @author JNPF开发平台组
|
* @version V3.1.0
|
* @copyright 引迈信息技术有限公司
|
* @date 2019年9月27日 上午9:18
|
*/
|
|
public interface BillRuleMapper extends SuperMapper<BillRuleEntity> {
|
|
default List<BillRuleEntity> getList(BillRulePagination pagination) {
|
// 定义变量判断是否需要使用修改时间倒序
|
boolean flag = false;
|
QueryWrapper<BillRuleEntity> queryWrapper = new QueryWrapper<>();
|
if (!StringUtil.isEmpty(pagination.getKeyword())) {
|
flag = true;
|
queryWrapper.lambda().and(
|
t -> t.like(BillRuleEntity::getFullName, pagination.getKeyword())
|
.or().like(BillRuleEntity::getEnCode, pagination.getKeyword())
|
);
|
}
|
if (!StringUtil.isEmpty(pagination.getCategoryId())) {
|
flag = true;
|
queryWrapper.lambda().and(
|
t -> t.like(BillRuleEntity::getCategory, pagination.getCategoryId())
|
);
|
}
|
if (pagination.getEnabledMark() != null) {
|
flag = true;
|
queryWrapper.lambda().eq(BillRuleEntity::getEnabledMark, pagination.getEnabledMark());
|
}
|
// 排序
|
queryWrapper.lambda().orderByAsc(BillRuleEntity::getSortCode).orderByDesc(BillRuleEntity::getCreatorTime);
|
if (flag) {
|
queryWrapper.lambda().orderByDesc(BillRuleEntity::getLastModifyTime);
|
}
|
Page<BillRuleEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
|
IPage<BillRuleEntity> userPage = this.selectPage(page, queryWrapper);
|
return pagination.setData(userPage.getRecords(), page.getTotal());
|
}
|
|
default List<BillRuleEntity> getList() {
|
QueryWrapper<BillRuleEntity> queryWrapper = new QueryWrapper<>();
|
queryWrapper.lambda().eq(BillRuleEntity::getEnabledMark, 1);
|
// 排序
|
queryWrapper.lambda().orderByAsc(BillRuleEntity::getSortCode).orderByDesc(BillRuleEntity::getCreatorTime);
|
return this.selectList(queryWrapper);
|
}
|
|
default BillRuleEntity getInfo(String id) {
|
QueryWrapper<BillRuleEntity> queryWrapper = new QueryWrapper<>();
|
queryWrapper.lambda().eq(BillRuleEntity::getId, id);
|
return this.selectOne(queryWrapper);
|
}
|
|
default boolean isExistByFullName(String fullName, String id) {
|
QueryWrapper<BillRuleEntity> queryWrapper = new QueryWrapper<>();
|
queryWrapper.lambda().eq(BillRuleEntity::getFullName, fullName);
|
if (!StringUtil.isEmpty(id)) {
|
queryWrapper.lambda().ne(BillRuleEntity::getId, id);
|
}
|
return this.selectCount(queryWrapper) > 0;
|
}
|
|
default boolean isExistByEnCode(String enCode, String id) {
|
QueryWrapper<BillRuleEntity> queryWrapper = new QueryWrapper<>();
|
queryWrapper.lambda().eq(BillRuleEntity::getEnCode, enCode);
|
if (!StringUtil.isEmpty(id)) {
|
queryWrapper.lambda().ne(BillRuleEntity::getId, id);
|
}
|
return this.selectCount(queryWrapper) > 0;
|
}
|
|
|
default String getNumber(String enCode) throws DataException {
|
QueryWrapper<BillRuleEntity> queryWrapper = new QueryWrapper<>();
|
queryWrapper.lambda().eq(BillRuleEntity::getEnCode, enCode);
|
queryWrapper.last("FOR UPDATE");
|
BillRuleEntity entity = this.selectOne(queryWrapper);
|
if (entity != null) {
|
String number = buildNumber(entity);
|
this.updateById(entity);
|
return number;
|
} else {
|
throw new DataException("单据规则不存在");
|
}
|
}
|
|
default String previewNumber(String enCode) throws DataException {
|
QueryWrapper<BillRuleEntity> queryWrapper = new QueryWrapper<>();
|
queryWrapper.lambda().eq(BillRuleEntity::getEnCode, enCode);
|
BillRuleEntity entity = this.selectOne(queryWrapper);
|
if (entity == null) throw new DataException("单据规则不存在");
|
return buildNumber(entity);
|
}
|
|
default Map<String, Object> claimNumber(String enCode, String expectedNumber) throws DataException {
|
QueryWrapper<BillRuleEntity> queryWrapper = new QueryWrapper<>();
|
queryWrapper.lambda().eq(BillRuleEntity::getEnCode, enCode);
|
queryWrapper.last("FOR UPDATE");
|
BillRuleEntity entity = this.selectOne(queryWrapper);
|
if (entity == null) throw new DataException("单据规则不存在");
|
Map<String, Object> result = new HashMap<>();
|
// 随机和 UUID 编号没有流水冲突,直接确认展示中的值。
|
if (ObjectUtil.equal(entity.getType(), 2) || ObjectUtil.equal(entity.getType(), 3)) {
|
entity.setOutputNumber(expectedNumber);
|
this.updateById(entity);
|
result.put("claimed", true);
|
result.put("number", expectedNumber);
|
return result;
|
}
|
String number = buildNumber(entity);
|
boolean claimed = ObjectUtil.equal(number, expectedNumber);
|
if (claimed) this.updateById(entity);
|
result.put("claimed", claimed);
|
result.put("number", number);
|
return result;
|
}
|
|
default String buildNumber(BillRuleEntity entity) {
|
StringBuilder strNumber = new StringBuilder();
|
Integer startNumber = StringUtil.isEmpty(entity.getStartNumber()) ? 0 : Integer.parseInt(entity.getStartNumber());
|
strNumber.append(StringUtil.isNotEmpty(entity.getPrefix()) ? entity.getPrefix() : "");
|
if (ObjectUtil.equal(entity.getType(), 2)) {
|
if (ObjectUtil.equal(entity.getRandomType(), 1)) {
|
strNumber.append(cn.hutool.core.util.RandomUtil.randomNumbers(entity.getRandomDigit()));
|
} else {
|
strNumber.append(cn.hutool.core.util.RandomUtil.randomStringUpper(entity.getRandomDigit()));
|
}
|
} else if (ObjectUtil.equal(entity.getType(), 3)) {
|
strNumber.append(IdUtil.randomUUID().toUpperCase());
|
} else {
|
String dateFor = entity.getDateFormat();
|
String dateForValue = "no";
|
switch (dateFor) {
|
case "YYYY": dateForValue = "yyyy"; break;
|
case "YYYYMM": dateForValue = "yyyyMM"; break;
|
case "YYYYMMDD": dateForValue = "yyyyMMdd"; break;
|
case "YYYYMMDDHH": dateForValue = "yyyyMMddHH"; break;
|
case "YYYYMMDDHHmm": dateForValue = "yyyyMMddHHmm"; break;
|
case "YYYYMMDDHHmmss": dateForValue = "yyyyMMddHHmmss"; break;
|
case "YYYYMMDDHHmmssSSS": dateForValue = "yyyyMMddHHmmssSSS"; break;
|
default: break;
|
}
|
if (entity.getOutputNumber() != null) {
|
String serialDate = "";
|
entity.setThisNumber(entity.getThisNumber() + 1);
|
if (!"no".equals(dateForValue)) {
|
String thisDate = DateUtil.dateNow(dateForValue);
|
int suffixLength = entity.getSuffix() != null ? entity.getSuffix().length() : 0;
|
try {
|
serialDate = entity.getOutputNumber().substring(entity.getOutputNumber().length() - dateForValue.length() - entity.getDigit() - suffixLength, entity.getOutputNumber().length() - entity.getDigit() - suffixLength);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
if (!serialDate.equals(thisDate)) entity.setThisNumber(0);
|
}
|
} else {
|
entity.setThisNumber(0);
|
}
|
if (!"no".equals(dateForValue)) strNumber.append(DateUtil.dateNow(dateForValue));
|
strNumber.append(PadUtil.padRight(String.valueOf(startNumber + entity.getThisNumber()), entity.getDigit(), '0'));
|
}
|
strNumber.append(StringUtil.isNotEmpty(entity.getSuffix()) ? entity.getSuffix() : "");
|
entity.setOutputNumber(strNumber.toString());
|
return strNumber.toString();
|
}
|
|
default void create(BillRuleEntity entity) {
|
entity.setId(RandomUtil.uuId());
|
entity.setCreatorUserId(UserProvider.getUser().getUserId());
|
this.insert(entity);
|
}
|
|
default List<BillRuleEntity> getListByCategory(String id, Pagination pagination) {
|
// 定义变量判断是否需要使用修改时间倒序
|
boolean flag = false;
|
QueryWrapper<BillRuleEntity> queryWrapper = new QueryWrapper<>();
|
if (!StringUtil.isEmpty(pagination.getKeyword())) {
|
flag = true;
|
queryWrapper.lambda().and(
|
t -> t.like(BillRuleEntity::getFullName, pagination.getKeyword())
|
.or().like(BillRuleEntity::getEnCode, pagination.getKeyword())
|
);
|
}
|
if (!StringUtil.isEmpty(id)) {
|
flag = true;
|
queryWrapper.lambda().eq(BillRuleEntity::getCategory, id);
|
}
|
queryWrapper.lambda().eq(BillRuleEntity::getEnabledMark, 1);
|
// 排序
|
queryWrapper.lambda().orderByAsc(BillRuleEntity::getSortCode).orderByDesc(BillRuleEntity::getCreatorTime);
|
if (flag) {
|
queryWrapper.lambda().orderByDesc(BillRuleEntity::getLastModifyTime);
|
}
|
Page<BillRuleEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
|
IPage<BillRuleEntity> userPage = this.selectPage(page, queryWrapper);
|
return pagination.setData(userPage.getRecords(), page.getTotal());
|
}
|
}
|