add auto code

plp
chenyuan 2 years ago
parent 1ea1f11eb9
commit f1c0533899

@ -168,4 +168,10 @@ ErrorCode PURCHASE_ORDER_ITEM_RETURN_FAIL_IN_EXCEED = new ErrorCode(1_030_101_00
// ========== ERP 模具 1_111_000 ========== // ========== ERP 模具 1_111_000 ==========
ErrorCode MOLD_BRAND_NOT_EXISTS = new ErrorCode(1_111_001, "模具型号不存在"); ErrorCode MOLD_BRAND_NOT_EXISTS = new ErrorCode(1_111_001, "模具型号不存在");
ErrorCode MOLD_NOT_EXISTS = new ErrorCode(1_111_002, "模具不存在"); ErrorCode MOLD_NOT_EXISTS = new ErrorCode(1_111_002, "模具不存在");
ErrorCode AUTOCODE_RECORD_NOT_EXISTS = new ErrorCode(1_111_003, "编码生成记录不存在");
ErrorCode AUTOCODE_RULE_NOT_EXISTS = new ErrorCode(1_111_004, "编码规则不存在");
ErrorCode AUTOCODE_PART_NOT_EXISTS = new ErrorCode(1_111_005, "编码规则组成不存在");
ErrorCode AUTOCODE_GEN_NOT_UNIQUE = new ErrorCode(1_111_006, "编码已存在");
} }

@ -0,0 +1,94 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.module.erp.service.autocode.AutocodePartService;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
@Tag(name = "管理后台 - 编码规则组成")
@RestController
@RequestMapping("/erp/autocode-part")
@Validated
public class AutocodePartController {
@Resource
private AutocodePartService autocodePartService;
@PostMapping("/create")
@Operation(summary = "创建编码规则组成")
@PreAuthorize("@ss.hasPermission('erp:autocode-part:create')")
public CommonResult<Long> createAutocodePart(@Valid @RequestBody AutocodePartSaveReqVO createReqVO) {
return success(autocodePartService.createAutocodePart(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新编码规则组成")
@PreAuthorize("@ss.hasPermission('erp:autocode-part:update')")
public CommonResult<Boolean> updateAutocodePart(@Valid @RequestBody AutocodePartSaveReqVO updateReqVO) {
autocodePartService.updateAutocodePart(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除编码规则组成")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('erp:autocode-part:delete')")
public CommonResult<Boolean> deleteAutocodePart(@RequestParam("id") Long id) {
autocodePartService.deleteAutocodePart(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得编码规则组成")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('erp:autocode-part:query')")
public CommonResult<AutocodePartRespVO> getAutocodePart(@RequestParam("id") Long id) {
AutocodePartDO autocodePart = autocodePartService.getAutocodePart(id);
return success(BeanUtils.toBean(autocodePart, AutocodePartRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得编码规则组成分页")
@PreAuthorize("@ss.hasPermission('erp:autocode-part:query')")
public CommonResult<PageResult<AutocodePartRespVO>> getAutocodePartPage(@Valid AutocodePartPageReqVO pageReqVO) {
PageResult<AutocodePartDO> pageResult = autocodePartService.getAutocodePartPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, AutocodePartRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出编码规则组成 Excel")
@PreAuthorize("@ss.hasPermission('erp:autocode-part:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportAutocodePartExcel(@Valid AutocodePartPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<AutocodePartDO> list = autocodePartService.getAutocodePartPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "编码规则组成.xls", "数据", AutocodePartRespVO.class,
BeanUtils.toBean(list, AutocodePartRespVO.class));
}
}

@ -0,0 +1,121 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil;
import io.swagger.v3.oas.annotations.Parameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRecordDO;
import cn.iocoder.yudao.module.erp.service.autocode.AutocodeRecordService;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
@Tag(name = "管理后台 - 编码生成记录")
@RestController
@RequestMapping("/erp/autocode-record")
@Validated
public class AutocodeRecordController {
@Resource
private AutocodeRecordService autocodeRecordService;
@PostMapping("/create")
@Operation(summary = "创建编码生成记录")
@PreAuthorize("@ss.hasPermission('erp:autocode-record:create')")
public CommonResult<Long> createAutocodeRecord(@Valid @RequestBody AutocodeRecordSaveReqVO createReqVO) {
return success(autocodeRecordService.createAutocodeRecord(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新编码生成记录")
@PreAuthorize("@ss.hasPermission('erp:autocode-record:update')")
public CommonResult<Boolean> updateAutocodeRecord(@Valid @RequestBody AutocodeRecordSaveReqVO updateReqVO) {
autocodeRecordService.updateAutocodeRecord(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除编码生成记录")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('erp:autocode-record:delete')")
public CommonResult<Boolean> deleteAutocodeRecord(@RequestParam("id") Long id) {
autocodeRecordService.deleteAutocodeRecord(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得编码生成记录")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('erp:autocode-record:query')")
public CommonResult<AutocodeRecordRespVO> getAutocodeRecord(@RequestParam("id") Long id) {
AutocodeRecordDO autocodeRecord = autocodeRecordService.getAutocodeRecord(id);
return success(BeanUtils.toBean(autocodeRecord, AutocodeRecordRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得编码生成记录分页")
@PreAuthorize("@ss.hasPermission('erp:autocode-record:query')")
public CommonResult<PageResult<AutocodeRecordRespVO>> getAutocodeRecordPage(@Valid AutocodeRecordPageReqVO pageReqVO) {
PageResult<AutocodeRecordDO> pageResult = autocodeRecordService.getAutocodeRecordPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, AutocodeRecordRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出编码生成记录 Excel")
@PreAuthorize("@ss.hasPermission('erp:autocode-record:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportAutocodeRecordExcel(@Valid AutocodeRecordPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<AutocodeRecordDO> list = autocodeRecordService.getAutocodeRecordPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "编码生成记录.xls", "数据", AutocodeRecordRespVO.class,
BeanUtils.toBean(list, AutocodeRecordRespVO.class));
}
@Autowired
private AutoCodeUtil autoCodeUtil;
@Operation(summary = "获取一个自动生成的编码")
@Parameters({
@Parameter(name = "ruleCode", description = "规则编码", required = true),
@Parameter(name = "inputCharacter", description = "输入字符", required = false)
})
@GetMapping(value = "/getAutoCode")
public CommonResult<String> getAutoCode(@RequestParam("ruleCode") String ruleCode, String inputCharacter){
String code = autoCodeUtil.genSerialCode(ruleCode,inputCharacter);
return CommonResult.success(code);
}
@Operation(summary = "测试自动生成的编码")
@Parameters({
@Parameter(name = "ruleCode", description = "规则编码", required = true),
@Parameter(name = "inputCharacter", description = "输入字符", required = false)
})
@GetMapping(value = "/getTest")
public CommonResult<String> getAutoCodeTest(@RequestParam("ruleCode") String ruleCode,String inputCharacter){
String code = autoCodeUtil.genSerialCodeTest(ruleCode,inputCharacter);
return CommonResult.success(code);
}
}

@ -0,0 +1,106 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRuleDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.module.erp.service.autocode.AutocodeRuleService;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
@Tag(name = "管理后台 - 编码规则")
@RestController
@RequestMapping("/erp/autocode-rule")
@Validated
public class AutocodeRuleController {
@Resource
private AutocodeRuleService autocodeRuleService;
@PostMapping("/create")
@Operation(summary = "创建编码规则")
@PreAuthorize("@ss.hasPermission('erp:autocode-rule:create')")
public CommonResult<Long> createAutocodeRule(@Valid @RequestBody AutocodeRuleSaveReqVO createReqVO) {
return success(autocodeRuleService.createAutocodeRule(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新编码规则")
@PreAuthorize("@ss.hasPermission('erp:autocode-rule:update')")
public CommonResult<Boolean> updateAutocodeRule(@Valid @RequestBody AutocodeRuleSaveReqVO updateReqVO) {
autocodeRuleService.updateAutocodeRule(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除编码规则")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('erp:autocode-rule:delete')")
public CommonResult<Boolean> deleteAutocodeRule(@RequestParam("id") Long id) {
autocodeRuleService.deleteAutocodeRule(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得编码规则")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('erp:autocode-rule:query')")
public CommonResult<AutocodeRuleRespVO> getAutocodeRule(@RequestParam("id") Long id) {
AutocodeRuleDO autocodeRule = autocodeRuleService.getAutocodeRule(id);
return success(BeanUtils.toBean(autocodeRule, AutocodeRuleRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得编码规则分页")
@PreAuthorize("@ss.hasPermission('erp:autocode-rule:query')")
public CommonResult<PageResult<AutocodeRuleRespVO>> getAutocodeRulePage(@Valid AutocodeRulePageReqVO pageReqVO) {
PageResult<AutocodeRuleDO> pageResult = autocodeRuleService.getAutocodeRulePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, AutocodeRuleRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出编码规则 Excel")
@PreAuthorize("@ss.hasPermission('erp:autocode-rule:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportAutocodeRuleExcel(@Valid AutocodeRulePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<AutocodeRuleDO> list = autocodeRuleService.getAutocodeRulePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "编码规则.xls", "数据", AutocodeRuleRespVO.class,
BeanUtils.toBean(list, AutocodeRuleRespVO.class));
}
// ==================== 子表(编码规则组成) ====================
@GetMapping("/autocode-part/list-by-rule-id")
@Operation(summary = "获得编码规则组成列表")
@Parameter(name = "ruleId", description = "规则ID")
@PreAuthorize("@ss.hasPermission('erp:autocode-rule:query')")
public CommonResult<List<AutocodePartDO>> getAutocodePartListByRuleId(@RequestParam("ruleId") Long ruleId) {
return success(autocodeRuleService.getAutocodePartListByRuleId(ruleId));
}
}

@ -0,0 +1,186 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.util;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.AutocodeRecordSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRecordDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRuleDO;
import cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodeRecordMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodeRuleMapper;
import cn.iocoder.yudao.module.erp.service.autocode.AutocodePartService;
import cn.iocoder.yudao.module.erp.service.autocode.AutocodeRecordService;
import cn.iocoder.yudao.module.erp.service.autocode.AutocodeRuleService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.AUTOCODE_GEN_NOT_UNIQUE;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.AUTOCODE_RULE_NOT_EXISTS;
@Service
public class AutoCodeUtil {
public static ThreadLocal<Boolean> threadLocal = new ThreadLocal<>();
@Autowired
private AutocodeRuleService iAutoCodeRuleService;
@Autowired
private AutocodePartService iAutoCodePartService;
@Autowired
private AutocodeRecordService iAutoCodeResultService;
@Resource
private AutocodeRecordMapper autocodeRecordMapper;
@Autowired
private PartTypeHandler partTypeHandler;
private String lastSerialNo;
//@Log(title = "生成业务编号",businessType = BusinessType.INSERT)
synchronized
public String genSerialCode(String ruleCode,String inputCharacter){
//查找编码规则
AutocodeRuleDO rule = iAutoCodeRuleService.getAutocodeRuleByRuleCode(ruleCode);
if (rule==null)
throw exception(AUTOCODE_RULE_NOT_EXISTS);
//Assert.notNull(rule,"未获取到指定类型:[{}]的业务编码生成规则",ruleCode);
//查找规则组成
List<AutocodePartDO> parts = iAutoCodeRuleService.getAutocodePartListByRuleId(rule.getId());
List<AutocodePartDO> collect = parts.stream().filter(part->PartTypeEnum.PART_TYPE_SERIALNO.getCode().equals(part.getPartType())).collect(Collectors.toList());
if(collect.size()>1)
throw exception(AUTOCODE_GEN_NOT_UNIQUE);
//Assert.isTrue(collect.size()<2,"编码规则[{}]流水号方式的组成只能存在一个",ruleCode);
StringBuilder buff = new StringBuilder();
parts.forEach(codePart ->{
codePart.setInputCharacter(inputCharacter);
//根据当前组成部分,获取当前组成部分的结果
String partStr = partTypeHandler.choiceExecute(codePart);
//如果是流水号部分,则进行记录
if(StringUtils.equals(codePart.getPartType(),PartTypeEnum.PART_TYPE_SERIALNO.getCode())){
lastSerialNo = partStr;
}
//将获取到的部分组装进整体编码中
buff.append(partStr);
});
// Assert.notBlank(buff.toString(),"规则:[{}]生成的编码为空!",ruleCode);
String autoCode = "NO"+DateUtil.format(new Date(),"yyyyMMddHHmmssSSS");
if(StringUtils.isNotBlank(buff.toString()))
autoCode = paddingStr(rule,buff);
//将生成结果保存到数据库
saveAutoCodeResult(rule,autoCode,inputCharacter);
return autoCode;
}
/**
*
* @param rule
* @param sb
* @return
*/
private String paddingStr(AutocodeRuleDO rule,StringBuilder sb){
String isPadding = rule.getIsPadded();
if("Y".equals(isPadding)){
int maxLength = rule.getMaxLength();
String paddingChar = rule.getPaddedChar();
StringBuilder resultStr = new StringBuilder();
long length = maxLength - sb.length();
Assert.isTrue(maxLength>sb.length(),"生成的编码[{}]已经超出规则中配置的最大长度:[{}]",sb.toString(),maxLength);
if("L".equals(rule.getPaddedMethod())){
//左补齐
//使用指定字符补齐左侧后,再将生成的编码添加到右侧
for(;length>0;length --){
resultStr.append(paddingChar);
}
resultStr.append(sb);
}else{
//右补齐
//将生成的编码添加到左侧后,再使用指定字符补齐右侧
resultStr.append(sb);
for(;length>0;length --){
resultStr.append(paddingChar);
}
}
return resultStr.toString();
}
return sb.toString(); //如果不需要补齐,则直接返回
}
private void saveAutoCodeResult(AutocodeRuleDO rule,String autoCode,String inputChar){
Boolean flag = threadLocal.get(); //针对当前线程的判断 flag = true则数据库中没有当前规则的生成记录
if(flag !=null && flag){
AutocodeRecordSaveReqVO rs = new AutocodeRecordSaveReqVO();
rs.setRuleId(rule.getId());
rs.setGenDate(DateUtil.format(LocalDateTime.now(),"yyyyMMddHHmmss"));
rs.setLastResult(autoCode);
rs.setGenIndex(1);
rs.setLastSerialNo(Integer.parseInt(lastSerialNo));
rs.setLastInputChar(inputChar);
iAutoCodeResultService.createAutocodeRecord(rs);
}else{
//直接更新对应的记录我们默认非流水号模式下一个RULE_CODE只有一种方式
List<AutocodeRecordDO> results = iAutoCodeResultService.selectListByRuleId(rule.getId());
Assert.notEmpty(results,"未查询到规则{[]}对应的结果记录",rule.getRuleCode());
AutocodeRecordDO rs = results.get(0);
rs.setLastResult(autoCode);
rs.setGenDate(DateUtil.format(LocalDateTime.now(),"yyyyMMddHHmmss"));
rs.setGenIndex(rs.getGenIndex()+1);
rs.setLastSerialNo(Integer.parseInt(lastSerialNo));
rs.setLastInputChar(inputChar);
autocodeRecordMapper.updateById(rs);
}
}
public String genSerialCodeTest(String ruleCode,String inputCharacter){
//查找编码规则
AutocodeRuleDO rule = iAutoCodeRuleService.getAutocodeRuleByRuleCode(ruleCode);
if (rule==null)
throw exception(AUTOCODE_RULE_NOT_EXISTS);
//Assert.notNull(rule,"未获取到指定类型:[{}]的业务编码生成规则",ruleCode);
//查找规则组成
List<AutocodePartDO> parts = iAutoCodeRuleService.getAutocodePartListByRuleId(rule.getId());
List<AutocodePartDO> collect = parts.stream().filter(part->PartTypeEnum.PART_TYPE_SERIALNO.getCode().equals(part.getPartType())).collect(Collectors.toList());
if(collect.size()>1)
throw exception(AUTOCODE_GEN_NOT_UNIQUE);
//Assert.isTrue(collect.size()<2,"编码规则[{}]流水号方式的组成只能存在一个",ruleCode);
StringBuilder buff = new StringBuilder();
parts.forEach(codePart ->{
codePart.setInputCharacter(inputCharacter);
//根据当前组成部分,获取当前组成部分的结果
String partStr = partTypeHandler.choiceExecute(codePart);
//如果是流水号部分,则进行记录
if(StringUtils.equals(codePart.getPartType(),PartTypeEnum.PART_TYPE_SERIALNO.getCode())){
lastSerialNo = partStr;
}
//将获取到的部分组装进整体编码中
buff.append(partStr);
});
// Assert.notBlank(buff.toString(),"规则:[{}]生成的编码为空!",ruleCode);
String autoCode = "NO"+DateUtil.format(new Date(),"yyyyMMddHHmmssSSS");
if(StringUtils.isNotBlank(buff.toString()))
autoCode = paddingStr(rule,buff);
return autoCode;
}
}

@ -0,0 +1,44 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.util;
public enum CycleMethodMnum {
CYCLE_METHOD_YEAR("YEAR","按年"),
CYCLE_METHOD_MONTH("MONTH","按月"),
CYCLE_METHOD_DAY("DAY","按日"),
CYCLE_METHOD_HOUR("HOUR","按小时"),
CYCLE_METHOD_MINUTE("MINUTE","按分钟"),
CYCLE_METHOD_OTHER("OTHER","其他");
private String code;
private String name;
CycleMethodMnum(String code,String name){
this.code=code;
this.name=name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static CycleMethodMnum getByCode(String code){
for(CycleMethodMnum value : CycleMethodMnum.values()){
if(value.getCode().equals(code)){
return value;
}
}
return CYCLE_METHOD_OTHER;
}
}

@ -0,0 +1,42 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.util;
public enum PartTypeEnum {
PART_TYPE_INPUTCHAR("INPUTCHAR","传入字符",0),
PART_TYPE_NOWDATE("NOWDATE","当前日期",1),
PART_TYPE_FIXCHAR("FIXCHAR","固定字符",2),
PART_TYPE_SERIALNO("SERIALNO","流水号",3),
PART_TYPE_OTHER("OTHER","其他",99);
private final String code;
private final String name;
private final Integer beanIndex;
PartTypeEnum(String code,String name,Integer beanIndex){
this.code = code;
this.name = name;
this.beanIndex = beanIndex;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
public Integer getBeanIndex() {
return beanIndex;
}
public static PartTypeEnum getByCode(String code){
for(PartTypeEnum value: PartTypeEnum.values()){
if(value.getCode().equals(code)){
return value;
}
}
return PART_TYPE_OTHER;
}
}

@ -0,0 +1,14 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.util;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Order(2)
public class PartTypeFixCharHandler implements PartTypeTemplate {
@Override
public String partHandle(AutocodePartDO sysAutoCodePart) {
return sysAutoCodePart.getFixCharacter();
}
}

@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.util;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class PartTypeHandler {
@Autowired
List<PartTypeTemplate> partTypeTemplates;
public String choiceExecute(AutocodePartDO sysAutoCodePart){
String partType = sysAutoCodePart.getPartType();
return partTypeTemplates.get(PartTypeEnum.getByCode(partType).getBeanIndex()).partHandle(sysAutoCodePart);
}
}

@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.util;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
@Component
@Order(0)
public class PartTypeInputCharHandler implements PartTypeTemplate {
@Override
public String partHandle(AutocodePartDO sysAutoCodePart) {
String inputCharacter = sysAutoCodePart.getInputCharacter();
Assert.notNull(inputCharacter,"编码规则传入字符不能为空!");
Assert.isTrue(inputCharacter.length() == sysAutoCodePart.getPartLength(),"传入字符的长度错误!");
return inputCharacter;
}
}

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.util;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Component
@Order(1)
public class PartTypeNowDateHandler implements PartTypeTemplate {
@Override
public String partHandle(AutocodePartDO sysAutoCodePart) {
String formatDate = sysAutoCodePart.getDatetimeFormat();
return DateTimeFormatter.ofPattern(formatDate).format(LocalDateTime.now());
}
}

@ -0,0 +1,101 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.util;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRecordDO;
import cn.iocoder.yudao.module.erp.service.autocode.AutocodeRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
@Component
@Order(3)
public class PartTypeSerialNoHandler implements PartTypeTemplate {
@Autowired
private AutocodeRecordService iAutoCodeResultService;
@Override
public String partHandle(AutocodePartDO sysAutoCodePart) {
if("Y".equals(sysAutoCodePart.getCycleFlag())){
return cycleY(sysAutoCodePart);
}else{
return cycleN(sysAutoCodePart);
}
}
//循环方式(要传入当前的循环规则参数)
private String cycleY(AutocodePartDO sysAutoCodePart){
String method = sysAutoCodePart.getCycleMethod();
String param ="";
if(CycleMethodMnum.CYCLE_METHOD_OTHER.getCode().equals(method)){
param = sysAutoCodePart.getInputCharacter();
}else{
switch (CycleMethodMnum.getByCode(method)){
case CYCLE_METHOD_YEAR:
param = cn.hutool.core.date.DateUtil.format(LocalDateTime.now(),"yyyy");
break;
case CYCLE_METHOD_MONTH:
param = cn.hutool.core.date.DateUtil.format(LocalDateTime.now(),"yyyyMM");
break;
case CYCLE_METHOD_DAY:
param = cn.hutool.core.date.DateUtil.format(LocalDateTime.now(),"yyyyMMdd");
break;
case CYCLE_METHOD_HOUR:
param = cn.hutool.core.date.DateUtil.format(LocalDateTime.now(),"yyyyMMddHH");
break;
case CYCLE_METHOD_MINUTE:
param = cn.hutool.core.date.DateUtil.format(LocalDateTime.now(),"yyyyMMddHHmm");
break;
default:
break;
}
}
List<AutocodeRecordDO> rs = getAutoCodeResult(sysAutoCodePart.getRuleId(),param,method);
if(CollectionUtil.isNotEmpty(rs)){
//如果在编码记录表中有记录,则在最后一个流水号上加上步长,返回新的流水号
AutoCodeUtil.threadLocal.set(false);
Integer lastSerialNo = rs.get(0).getLastSerialNo();
return String.format("%0"+sysAutoCodePart.getPartLength()+"d",lastSerialNo+sysAutoCodePart.getSeriaStep());
}else {
//如果在编码记录表中不存在,则直接返回起始流水号
AutoCodeUtil.threadLocal.set(true);
return String.format("%0"+sysAutoCodePart.getPartLength()+"d",sysAutoCodePart.getSeriaStartNo());
}
}
//不循环方式
private String cycleN(AutocodePartDO sysAutoCodePart){
List<AutocodeRecordDO> rs = getAutoCodeResult(sysAutoCodePart.getRuleId(),"","");
if(CollectionUtil.isNotEmpty(rs)){
//存在记录则在当前记录加上步长
Integer lastSerialNo = rs.get(0).getLastSerialNo();
return String.format("%0"+sysAutoCodePart.getPartLength()+"d",lastSerialNo+sysAutoCodePart.getSeriaStep());
}else{
//不存在记录则从头开始
AutoCodeUtil.threadLocal.set(true);
return String.format("%0"+sysAutoCodePart.getPartLength()+"d",sysAutoCodePart.getSeriaStartNo());
}
}
//从编码结果记录表中查找当前指定循环规则的流水号记录
private List<AutocodeRecordDO> getAutoCodeResult(Long ruleId,String param,String cycleMethod){
AutocodeRecordDO queryParam = new AutocodeRecordDO();
queryParam.setRuleId(ruleId);//ruleId要一致
if(CycleMethodMnum.CYCLE_METHOD_OTHER.getCode().equals(cycleMethod)){
//如果循环方式是手工输入指定的字符
queryParam.setLastInputChar(param);
}else{
//如果循环方式是按格式化的日期
queryParam.setGenDate(param);//这里的param将按照 gen_date like #{param}+'%' 的方式进行模糊查询数据库中记录的永远都是yyyMMddHHmmss格式的
}
return iAutoCodeResultService.list(queryParam);
}
}

@ -0,0 +1,13 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.util;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
public interface PartTypeTemplate {
/**
*
* @param autocodePartDO
* @return
*/
String partHandle(AutocodePartDO autocodePartDO);
}

@ -0,0 +1,70 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 编码规则组成分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class AutocodePartPageReqVO extends PageParam {
@Schema(description = "规则ID", example = "11153")
private Long ruleId;
@Schema(description = "分段序号")
private Integer partIndex;
@Schema(description = "分段类型", example = "1")
private String partType;
@Schema(description = "分段编号")
private String partCode;
@Schema(description = "分段名称", example = "芋艿")
private String partName;
@Schema(description = "分段长度")
private Integer partLength;
@Schema(description = "日期时间格式")
private String datetimeFormat;
@Schema(description = "输入字符")
private String inputCharacter;
@Schema(description = "固定字符")
private String fixCharacter;
@Schema(description = "流水号起始值")
private Integer seriaStartNo;
@Schema(description = "流水号步长")
private Integer seriaStep;
@Schema(description = "流水号当前值")
private Integer seriaNowNo;
@Schema(description = "流水号是否循环")
private String cycleFlag;
@Schema(description = "循环方式")
private String cycleMethod;
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "是否启用")
private Boolean isEnable;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,92 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
@Schema(description = "管理后台 - 编码规则组成 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AutocodePartRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19165")
@ExcelProperty("ID")
private Long id;
@Schema(description = "规则ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11153")
@ExcelProperty("规则ID")
private Long ruleId;
@Schema(description = "分段序号", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("分段序号")
private Integer partIndex;
@Schema(description = "分段类型", example = "1")
@ExcelProperty("分段类型")
private String partType;
@Schema(description = "分段编号")
@ExcelProperty("分段编号")
private String partCode;
@Schema(description = "分段名称", example = "芋艿")
@ExcelProperty("分段名称")
private String partName;
@Schema(description = "分段长度", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("分段长度")
private Integer partLength;
@Schema(description = "日期时间格式")
@ExcelProperty("日期时间格式")
private String datetimeFormat;
@Schema(description = "输入字符")
@ExcelProperty("输入字符")
private String inputCharacter;
@Schema(description = "固定字符")
@ExcelProperty("固定字符")
private String fixCharacter;
@Schema(description = "流水号起始值")
@ExcelProperty("流水号起始值")
private Integer seriaStartNo;
@Schema(description = "流水号步长")
@ExcelProperty("流水号步长")
private Integer seriaStep;
@Schema(description = "流水号当前值")
@ExcelProperty("流水号当前值")
private Integer seriaNowNo;
@Schema(description = "流水号是否循环")
@ExcelProperty("流水号是否循环")
private String cycleFlag;
@Schema(description = "循环方式")
@ExcelProperty(value = "循环方式", converter = DictConvert.class)
@DictFormat("erp__autocode_cyclemethod") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String cycleMethod;
@Schema(description = "备注", example = "你说的对")
@ExcelProperty("备注")
private String remark;
@Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty(value = "是否启用", converter = DictConvert.class)
@DictFormat("infra_boolean_string") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Boolean isEnable;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,67 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 编码规则组成新增/修改 Request VO")
@Data
public class AutocodePartSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19165")
private Long id;
@Schema(description = "规则ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11153")
@NotNull(message = "规则ID不能为空")
private Long ruleId;
@Schema(description = "分段序号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "分段序号不能为空")
private Integer partIndex;
@Schema(description = "分段类型", example = "1")
private String partType;
@Schema(description = "分段编号")
private String partCode;
@Schema(description = "分段名称", example = "芋艿")
private String partName;
@Schema(description = "分段长度", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "分段长度不能为空")
private Integer partLength;
@Schema(description = "日期时间格式")
private String datetimeFormat;
@Schema(description = "输入字符")
private String inputCharacter;
@Schema(description = "固定字符")
private String fixCharacter;
@Schema(description = "流水号起始值")
private Integer seriaStartNo;
@Schema(description = "流水号步长")
private Integer seriaStep;
@Schema(description = "流水号当前值")
private Integer seriaNowNo;
@Schema(description = "流水号是否循环")
private String cycleFlag;
@Schema(description = "循环方式")
private String cycleMethod;
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "是否启用不能为空")
private Boolean isEnable;
}

@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 编码生成记录分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class AutocodeRecordPageReqVO extends PageParam {
@Schema(description = "规则ID", example = "10883")
private Long ruleId;
@Schema(description = "生成日期时间")
private String genDate;
@Schema(description = "最后产生的序号")
private Integer genIndex;
@Schema(description = "最后产生的值")
private String lastResult;
@Schema(description = "最后产生的流水号")
private Integer lastSerialNo;
@Schema(description = "最后传入的参数")
private String lastInputChar;
@Schema(description = "备注", example = "你猜")
private String remark;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
@Schema(description = "管理后台 - 编码生成记录 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AutocodeRecordRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16081")
@ExcelProperty("ID")
private Long id;
@Schema(description = "规则ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10883")
@ExcelProperty("规则ID")
private Long ruleId;
@Schema(description = "生成日期时间")
@ExcelProperty("生成日期时间")
private String genDate;
@Schema(description = "最后产生的序号")
@ExcelProperty("最后产生的序号")
private Integer genIndex;
@Schema(description = "最后产生的值")
@ExcelProperty("最后产生的值")
private String lastResult;
@Schema(description = "最后产生的流水号")
@ExcelProperty("最后产生的流水号")
private Integer lastSerialNo;
@Schema(description = "最后传入的参数")
@ExcelProperty("最后传入的参数")
private String lastInputChar;
@Schema(description = "备注", example = "你猜")
@ExcelProperty("备注")
private String remark;
@Schema(description = "是否启用")
@ExcelProperty(value = "是否启用", converter = DictConvert.class)
@DictFormat("infra_boolean_string") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Boolean isEnable;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 编码生成记录新增/修改 Request VO")
@Data
public class AutocodeRecordSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16081")
private Long id;
@Schema(description = "规则ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10883")
@NotNull(message = "规则ID不能为空")
private Long ruleId;
@Schema(description = "生成日期时间")
private String genDate;
@Schema(description = "最后产生的序号")
private Integer genIndex;
@Schema(description = "最后产生的值")
private String lastResult;
@Schema(description = "最后产生的流水号")
private Integer lastSerialNo;
@Schema(description = "最后传入的参数")
private String lastInputChar;
@Schema(description = "备注", example = "你猜")
private String remark;
@Schema(description = "是否启用")
private Boolean isEnable;
}

@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 编码规则分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class AutocodeRulePageReqVO extends PageParam {
@Schema(description = "规则编码")
private String ruleCode;
@Schema(description = "规则名称", example = "张三")
private String ruleName;
@Schema(description = "描述")
private String ruleDesc;
@Schema(description = "最大长度")
private Integer maxLength;
@Schema(description = "是否补齐")
private String isPadded;
@Schema(description = "补齐字符")
private String paddedChar;
@Schema(description = "补齐方式")
private String paddedMethod;
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "是否启用")
private Boolean isEnable;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,65 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
@Schema(description = "管理后台 - 编码规则 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AutocodeRuleRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1078")
@ExcelProperty("ID")
private Long id;
@Schema(description = "规则编码")
@ExcelProperty("规则编码")
private String ruleCode;
@Schema(description = "规则名称", example = "张三")
@ExcelProperty("规则名称")
private String ruleName;
@Schema(description = "描述")
@ExcelProperty("描述")
private String ruleDesc;
@Schema(description = "最大长度")
@ExcelProperty("最大长度")
private Integer maxLength;
@Schema(description = "是否补齐")
@ExcelProperty(value = "是否补齐", converter = DictConvert.class)
@DictFormat("erp_autocode_is_padding") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String isPadded;
@Schema(description = "补齐字符")
@ExcelProperty("补齐字符")
private String paddedChar;
@Schema(description = "补齐方式")
@ExcelProperty(value = "补齐方式", converter = DictConvert.class)
@DictFormat("erp_autocode_padding_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private String paddedMethod;
@Schema(description = "备注", example = "你说的对")
@ExcelProperty("备注")
private String remark;
@Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty(value = "是否启用", converter = DictConvert.class)
@DictFormat("infra_boolean_string") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
private Boolean isEnable;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.erp.controller.admin.autocode.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 编码规则新增/修改 Request VO")
@Data
public class AutocodeRuleSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1078")
private Long id;
@Schema(description = "规则编码")
private String ruleCode;
@Schema(description = "规则名称", example = "张三")
private String ruleName;
@Schema(description = "描述")
private String ruleDesc;
@Schema(description = "最大长度")
private Integer maxLength;
@Schema(description = "是否补齐")
private String isPadded;
@Schema(description = "补齐字符")
private String paddedChar;
@Schema(description = "补齐方式")
private String paddedMethod;
@Schema(description = "备注", example = "你说的对")
private String remark;
@Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "是否启用不能为空")
private Boolean isEnable;
@Schema(description = "编码规则组成列表")
private List<AutocodePartDO> autocodeParts;
}

@ -0,0 +1,99 @@
package cn.iocoder.yudao.module.erp.dal.dataobject.autocode;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("erp_autocode_part")
@KeySequence("erp_autocode_part_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AutocodePartDO extends BaseDO {
/**
* ID
*/
@TableId
private Long id;
/**
* ID
*/
private Long ruleId;
/**
*
*/
private Integer partIndex;
/**
*
*/
private String partType;
/**
*
*/
private String partCode;
/**
*
*/
private String partName;
/**
*
*/
private Integer partLength;
/**
*
*/
private String datetimeFormat;
/**
*
*/
private String inputCharacter;
/**
*
*/
private String fixCharacter;
/**
*
*/
private Integer seriaStartNo;
/**
*
*/
private Integer seriaStep;
/**
*
*/
private Integer seriaNowNo;
/**
*
*/
private String cycleFlag;
/**
*
*
* {@link TODO erp__autocode_cyclemethod }
*/
private String cycleMethod;
/**
*
*/
private String remark;
/**
*
*
* {@link TODO infra_boolean_string }
*/
private Boolean isEnable;
}

@ -0,0 +1,65 @@
package cn.iocoder.yudao.module.erp.dal.dataobject.autocode;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("erp_autocode_record")
@KeySequence("erp_autocode_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AutocodeRecordDO extends BaseDO {
/**
* ID
*/
@TableId
private Long id;
/**
* ID
*/
private Long ruleId;
/**
*
*/
private String genDate;
/**
*
*/
private Integer genIndex;
/**
*
*/
private String lastResult;
/**
*
*/
private Integer lastSerialNo;
/**
*
*/
private String lastInputChar;
/**
*
*/
private String remark;
/**
*
*
* {@link TODO infra_boolean_string }
*/
private Boolean isEnable;
}

@ -0,0 +1,73 @@
package cn.iocoder.yudao.module.erp.dal.dataobject.autocode;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* DO
*
* @author
*/
@TableName("erp_autocode_rule")
@KeySequence("erp_autocode_rule_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AutocodeRuleDO extends BaseDO {
/**
* ID
*/
@TableId
private Long id;
/**
*
*/
private String ruleCode;
/**
*
*/
private String ruleName;
/**
*
*/
private String ruleDesc;
/**
*
*/
private Integer maxLength;
/**
*
*
* {@link TODO erp_autocode_is_padding }
*/
private String isPadded;
/**
*
*/
private String paddedChar;
/**
*
*
* {@link TODO erp_autocode_padding_type }
*/
private String paddedMethod;
/**
*
*/
private String remark;
/**
*
*
* {@link TODO infra_boolean_string }
*/
private Boolean isEnable;
}

@ -0,0 +1,34 @@
package cn.iocoder.yudao.module.erp.dal.mysql.autocode;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldDO;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper
*
* @author
*/
@Mapper
public interface AutocodePartMapper extends BaseMapperX<AutocodePartDO> {
default PageResult<AutocodePartDO> selectPage(PageParam reqVO, Long ruleId) {
return selectPage(reqVO, new LambdaQueryWrapperX<AutocodePartDO>()
.eq(AutocodePartDO::getRuleId, ruleId)
.orderByDesc(AutocodePartDO::getId));
}
default List<AutocodePartDO> selectListByRuleId(Long ruleId) {
return selectList(AutocodePartDO::getRuleId, ruleId);
}
default int deleteByRuleId(Long ruleId) {
return delete(AutocodePartDO::getRuleId, ruleId);
}
}

@ -0,0 +1,43 @@
package cn.iocoder.yudao.module.erp.dal.mysql.autocode;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRecordDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface AutocodeRecordMapper extends BaseMapperX<AutocodeRecordDO> {
default PageResult<AutocodeRecordDO> selectPage(AutocodeRecordPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<AutocodeRecordDO>()
.eqIfPresent(AutocodeRecordDO::getRuleId, reqVO.getRuleId())
.eqIfPresent(AutocodeRecordDO::getGenDate, reqVO.getGenDate())
.eqIfPresent(AutocodeRecordDO::getGenIndex, reqVO.getGenIndex())
.eqIfPresent(AutocodeRecordDO::getLastResult, reqVO.getLastResult())
.eqIfPresent(AutocodeRecordDO::getLastSerialNo, reqVO.getLastSerialNo())
.eqIfPresent(AutocodeRecordDO::getLastInputChar, reqVO.getLastInputChar())
.eqIfPresent(AutocodeRecordDO::getRemark, reqVO.getRemark())
.betweenIfPresent(AutocodeRecordDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(AutocodeRecordDO::getId));
}
default List<AutocodeRecordDO> selectListByRuleId(Long ruleId) {
return selectList(AutocodeRecordDO::getRuleId, ruleId);
}
default public List<AutocodeRecordDO> selectRecordList(AutocodeRecordDO reqVO){
return selectList(new LambdaQueryWrapperX<AutocodeRecordDO>()
.eqIfPresent(AutocodeRecordDO::getRuleId, reqVO.getRuleId())
.eqIfPresent(AutocodeRecordDO::getLastInputChar, reqVO.getLastInputChar())
.likeRight(reqVO.getGenDate() !=null,AutocodeRecordDO::getGenDate, reqVO.getGenDate())
.orderByDesc(AutocodeRecordDO::getGenDate));
}
}

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.erp.dal.mysql.autocode;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRuleDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface AutocodeRuleMapper extends BaseMapperX<AutocodeRuleDO> {
default PageResult<AutocodeRuleDO> selectPage(AutocodeRulePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<AutocodeRuleDO>()
.eqIfPresent(AutocodeRuleDO::getRuleCode, reqVO.getRuleCode())
.likeIfPresent(AutocodeRuleDO::getRuleName, reqVO.getRuleName())
.eqIfPresent(AutocodeRuleDO::getRuleDesc, reqVO.getRuleDesc())
.eqIfPresent(AutocodeRuleDO::getMaxLength, reqVO.getMaxLength())
.eqIfPresent(AutocodeRuleDO::getIsPadded, reqVO.getIsPadded())
.eqIfPresent(AutocodeRuleDO::getPaddedChar, reqVO.getPaddedChar())
.eqIfPresent(AutocodeRuleDO::getPaddedMethod, reqVO.getPaddedMethod())
.eqIfPresent(AutocodeRuleDO::getRemark, reqVO.getRemark())
.eqIfPresent(AutocodeRuleDO::getIsEnable, reqVO.getIsEnable())
.betweenIfPresent(AutocodeRuleDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(AutocodeRuleDO::getId));
}
}

@ -0,0 +1,56 @@
package cn.iocoder.yudao.module.erp.service.autocode;
import java.util.*;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import javax.validation.Valid;
/**
* Service
*
* @author
*/
public interface AutocodePartService {
/**
*
*
* @param createReqVO
* @return
*/
Long createAutocodePart(@Valid AutocodePartSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateAutocodePart(@Valid AutocodePartSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteAutocodePart(Long id);
/**
*
*
* @param id
* @return
*/
AutocodePartDO getAutocodePart(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<AutocodePartDO> getAutocodePartPage(AutocodePartPageReqVO pageReqVO);
}

@ -0,0 +1,75 @@
package cn.iocoder.yudao.module.erp.service.autocode;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodePartMapper;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class AutocodePartServiceImpl implements AutocodePartService {
@Resource
private AutocodePartMapper autocodePartMapper;
@Override
public Long createAutocodePart(AutocodePartSaveReqVO createReqVO) {
// 插入
AutocodePartDO autocodePart = BeanUtils.toBean(createReqVO, AutocodePartDO.class);
autocodePartMapper.insert(autocodePart);
// 返回
return autocodePart.getId();
}
@Override
public void updateAutocodePart(AutocodePartSaveReqVO updateReqVO) {
// 校验存在
validateAutocodePartExists(updateReqVO.getId());
// 更新
AutocodePartDO updateObj = BeanUtils.toBean(updateReqVO, AutocodePartDO.class);
autocodePartMapper.updateById(updateObj);
}
@Override
public void deleteAutocodePart(Long id) {
// 校验存在
validateAutocodePartExists(id);
// 删除
autocodePartMapper.deleteById(id);
}
private void validateAutocodePartExists(Long id) {
if (autocodePartMapper.selectById(id) == null) {
throw exception(AUTOCODE_PART_NOT_EXISTS);
}
}
@Override
public AutocodePartDO getAutocodePart(Long id) {
return autocodePartMapper.selectById(id);
}
@Override
public PageResult<AutocodePartDO> getAutocodePartPage(AutocodePartPageReqVO pageReqVO) {
return autocodePartMapper.selectPage(pageReqVO,pageReqVO.getRuleId());
}
}

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.erp.service.autocode;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRecordDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import javax.validation.Valid;
import java.util.List;
/**
* Service
*
* @author
*/
public interface AutocodeRecordService {
/**
*
*
* @param createReqVO
* @return
*/
Long createAutocodeRecord(@Valid AutocodeRecordSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateAutocodeRecord(@Valid AutocodeRecordSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteAutocodeRecord(Long id);
/**
*
*
* @param id
* @return
*/
AutocodeRecordDO getAutocodeRecord(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<AutocodeRecordDO> getAutocodeRecordPage(AutocodeRecordPageReqVO pageReqVO);
List<AutocodeRecordDO> selectListByRuleId(Long ruleId);
List<AutocodeRecordDO> list(AutocodeRecordDO sysAutoCodeResult);
}

@ -0,0 +1,85 @@
package cn.iocoder.yudao.module.erp.service.autocode;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRecordDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodeRecordMapper;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class AutocodeRecordServiceImpl implements AutocodeRecordService {
@Resource
private AutocodeRecordMapper autocodeRecordMapper;
@Override
public Long createAutocodeRecord(AutocodeRecordSaveReqVO createReqVO) {
// 插入
AutocodeRecordDO autocodeRecord = BeanUtils.toBean(createReqVO, AutocodeRecordDO.class);
autocodeRecordMapper.insert(autocodeRecord);
// 返回
return autocodeRecord.getId();
}
@Override
public void updateAutocodeRecord(AutocodeRecordSaveReqVO updateReqVO) {
// 校验存在
validateAutocodeRecordExists(updateReqVO.getId());
// 更新
AutocodeRecordDO updateObj = BeanUtils.toBean(updateReqVO, AutocodeRecordDO.class);
autocodeRecordMapper.updateById(updateObj);
}
@Override
public void deleteAutocodeRecord(Long id) {
// 校验存在
validateAutocodeRecordExists(id);
// 删除
autocodeRecordMapper.deleteById(id);
}
private void validateAutocodeRecordExists(Long id) {
if (autocodeRecordMapper.selectById(id) == null) {
throw exception(AUTOCODE_RECORD_NOT_EXISTS);
}
}
@Override
public AutocodeRecordDO getAutocodeRecord(Long id) {
return autocodeRecordMapper.selectById(id);
}
@Override
public PageResult<AutocodeRecordDO> getAutocodeRecordPage(AutocodeRecordPageReqVO pageReqVO) {
return autocodeRecordMapper.selectPage(pageReqVO);
}
@Override
public List<AutocodeRecordDO> selectListByRuleId(Long ruleId) {
return autocodeRecordMapper.selectListByRuleId(ruleId);
}
@Override
public List<AutocodeRecordDO> list(AutocodeRecordDO sysAutoCodeResult) {
return autocodeRecordMapper.selectRecordList(sysAutoCodeResult);
}
}

@ -0,0 +1,69 @@
package cn.iocoder.yudao.module.erp.service.autocode;
import java.util.*;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRuleDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import javax.validation.Valid;
/**
* Service
*
* @author
*/
public interface AutocodeRuleService {
/**
*
*
* @param createReqVO
* @return
*/
Long createAutocodeRule(@Valid AutocodeRuleSaveReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateAutocodeRule(@Valid AutocodeRuleSaveReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteAutocodeRule(Long id);
/**
*
*
* @param id
* @return
*/
AutocodeRuleDO getAutocodeRule(Long id);
AutocodeRuleDO getAutocodeRuleByRuleCode(String ruleCode);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<AutocodeRuleDO> getAutocodeRulePage(AutocodeRulePageReqVO pageReqVO);
// ==================== 子表(编码规则组成) ====================
/**
*
*
* @param ruleId ID
* @return
*/
List<AutocodePartDO> getAutocodePartListByRuleId(Long ruleId);
}

@ -0,0 +1,115 @@
package cn.iocoder.yudao.module.erp.service.autocode;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRuleDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodeRuleMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodePartMapper;
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
/**
* Service
*
* @author
*/
@Service
@Validated
public class AutocodeRuleServiceImpl implements AutocodeRuleService {
@Resource
private AutocodeRuleMapper autocodeRuleMapper;
@Resource
private AutocodePartMapper autocodePartMapper;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createAutocodeRule(AutocodeRuleSaveReqVO createReqVO) {
// 插入
AutocodeRuleDO autocodeRule = BeanUtils.toBean(createReqVO, AutocodeRuleDO.class);
autocodeRuleMapper.insert(autocodeRule);
// 插入子表
createAutocodePartList(autocodeRule.getId(), createReqVO.getAutocodeParts());
// 返回
return autocodeRule.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateAutocodeRule(AutocodeRuleSaveReqVO updateReqVO) {
// 校验存在
validateAutocodeRuleExists(updateReqVO.getId());
// 更新
AutocodeRuleDO updateObj = BeanUtils.toBean(updateReqVO, AutocodeRuleDO.class);
autocodeRuleMapper.updateById(updateObj);
// 更新子表
updateAutocodePartList(updateReqVO.getId(), updateReqVO.getAutocodeParts());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteAutocodeRule(Long id) {
// 校验存在
validateAutocodeRuleExists(id);
// 删除
autocodeRuleMapper.deleteById(id);
// 删除子表
deleteAutocodePartByRuleId(id);
}
private void validateAutocodeRuleExists(Long id) {
if (autocodeRuleMapper.selectById(id) == null) {
throw exception(AUTOCODE_RULE_NOT_EXISTS);
}
}
@Override
public AutocodeRuleDO getAutocodeRule(Long id) {
return autocodeRuleMapper.selectById(id);
}
@Override
public AutocodeRuleDO getAutocodeRuleByRuleCode(String ruleCode) {
return autocodeRuleMapper.selectOne(AutocodeRuleDO::getRuleCode, ruleCode);
}
@Override
public PageResult<AutocodeRuleDO> getAutocodeRulePage(AutocodeRulePageReqVO pageReqVO) {
return autocodeRuleMapper.selectPage(pageReqVO);
}
// ==================== 子表(编码规则组成) ====================
@Override
public List<AutocodePartDO> getAutocodePartListByRuleId(Long ruleId) {
return autocodePartMapper.selectListByRuleId(ruleId);
}
private void createAutocodePartList(Long ruleId, List<AutocodePartDO> list) {
list.forEach(o -> o.setRuleId(ruleId));
autocodePartMapper.insertBatch(list);
}
private void updateAutocodePartList(Long ruleId, List<AutocodePartDO> list) {
deleteAutocodePartByRuleId(ruleId);
list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
createAutocodePartList(ruleId, list);
}
private void deleteAutocodePartByRuleId(Long ruleId) {
autocodePartMapper.deleteByRuleId(ruleId);
}
}

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodePartMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodeRecordMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodeRuleMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,189 @@
package cn.iocoder.yudao.module.erp.service.autocode;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodePartDO;
import cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodePartMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.springframework.context.annotation.Import;
import javax.annotation.Resource;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link AutocodePartServiceImpl}
*
* @author
*/
@Import(AutocodePartServiceImpl.class)
public class AutocodePartServiceImplTest extends BaseDbUnitTest {
@Resource
private AutocodePartServiceImpl autocodePartService;
@Resource
private AutocodePartMapper autocodePartMapper;
@Test
public void testCreateAutocodePart_success() {
// 准备参数
AutocodePartSaveReqVO createReqVO = randomPojo(AutocodePartSaveReqVO.class).setId(null);
// 调用
Long autocodePartId = autocodePartService.createAutocodePart(createReqVO);
// 断言
assertNotNull(autocodePartId);
// 校验记录的属性是否正确
AutocodePartDO autocodePart = autocodePartMapper.selectById(autocodePartId);
assertPojoEquals(createReqVO, autocodePart, "id");
}
@Test
public void testUpdateAutocodePart_success() {
// mock 数据
AutocodePartDO dbAutocodePart = randomPojo(AutocodePartDO.class);
autocodePartMapper.insert(dbAutocodePart);// @Sql: 先插入出一条存在的数据
// 准备参数
AutocodePartSaveReqVO updateReqVO = randomPojo(AutocodePartSaveReqVO.class, o -> {
o.setId(dbAutocodePart.getId()); // 设置更新的 ID
});
// 调用
autocodePartService.updateAutocodePart(updateReqVO);
// 校验是否更新正确
AutocodePartDO autocodePart = autocodePartMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, autocodePart);
}
@Test
public void testUpdateAutocodePart_notExists() {
// 准备参数
AutocodePartSaveReqVO updateReqVO = randomPojo(AutocodePartSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> autocodePartService.updateAutocodePart(updateReqVO), AUTOCODE_PART_NOT_EXISTS);
}
@Test
public void testDeleteAutocodePart_success() {
// mock 数据
AutocodePartDO dbAutocodePart = randomPojo(AutocodePartDO.class);
autocodePartMapper.insert(dbAutocodePart);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbAutocodePart.getId();
// 调用
autocodePartService.deleteAutocodePart(id);
// 校验数据不存在了
assertNull(autocodePartMapper.selectById(id));
}
@Test
public void testDeleteAutocodePart_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> autocodePartService.deleteAutocodePart(id), AUTOCODE_PART_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetAutocodePartPage() {
// mock 数据
AutocodePartDO dbAutocodePart = randomPojo(AutocodePartDO.class, o -> { // 等会查询到
o.setRuleId(null);
o.setPartIndex(null);
o.setPartType(null);
o.setPartCode(null);
o.setPartName(null);
o.setPartLength(null);
o.setDatetimeFormat(null);
o.setInputCharacter(null);
o.setFixCharacter(null);
o.setSeriaStartNo(null);
o.setSeriaStep(null);
o.setSeriaNowNo(null);
o.setCycleFlag(null);
o.setCycleMethod(null);
o.setRemark(null);
o.setIsEnable(null);
o.setCreateTime(null);
});
autocodePartMapper.insert(dbAutocodePart);
// 测试 ruleId 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setRuleId(null)));
// 测试 partIndex 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setPartIndex(null)));
// 测试 partType 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setPartType(null)));
// 测试 partCode 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setPartCode(null)));
// 测试 partName 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setPartName(null)));
// 测试 partLength 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setPartLength(null)));
// 测试 datetimeFormat 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setDatetimeFormat(null)));
// 测试 inputCharacter 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setInputCharacter(null)));
// 测试 fixCharacter 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setFixCharacter(null)));
// 测试 seriaStartNo 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setSeriaStartNo(null)));
// 测试 seriaStep 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setSeriaStep(null)));
// 测试 seriaNowNo 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setSeriaNowNo(null)));
// 测试 cycleFlag 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setCycleFlag(null)));
// 测试 cycleMethod 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setCycleMethod(null)));
// 测试 remark 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setRemark(null)));
// 测试 isEnable 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setIsEnable(null)));
// 测试 createTime 不匹配
autocodePartMapper.insert(cloneIgnoreId(dbAutocodePart, o -> o.setCreateTime(null)));
// 准备参数
AutocodePartPageReqVO reqVO = new AutocodePartPageReqVO();
reqVO.setRuleId(null);
reqVO.setPartIndex(null);
reqVO.setPartType(null);
reqVO.setPartCode(null);
reqVO.setPartName(null);
reqVO.setPartLength(null);
reqVO.setDatetimeFormat(null);
reqVO.setInputCharacter(null);
reqVO.setFixCharacter(null);
reqVO.setSeriaStartNo(null);
reqVO.setSeriaStep(null);
reqVO.setSeriaNowNo(null);
reqVO.setCycleFlag(null);
reqVO.setCycleMethod(null);
reqVO.setRemark(null);
reqVO.setIsEnable(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<AutocodePartDO> pageResult = autocodePartService.getAutocodePartPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbAutocodePart, pageResult.getList().get(0));
}
}

@ -0,0 +1,158 @@
package cn.iocoder.yudao.module.erp.service.autocode;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRecordDO;
import cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodeRecordMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.springframework.context.annotation.Import;
import javax.annotation.Resource;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link AutocodeRecordServiceImpl}
*
* @author
*/
@Import(AutocodeRecordServiceImpl.class)
public class AutocodeRecordServiceImplTest extends BaseDbUnitTest {
@Resource
private AutocodeRecordServiceImpl autocodeRecordService;
@Resource
private AutocodeRecordMapper autocodeRecordMapper;
@Test
public void testCreateAutocodeRecord_success() {
// 准备参数
AutocodeRecordSaveReqVO createReqVO = randomPojo(AutocodeRecordSaveReqVO.class).setId(null);
// 调用
Long autocodeRecordId = autocodeRecordService.createAutocodeRecord(createReqVO);
// 断言
assertNotNull(autocodeRecordId);
// 校验记录的属性是否正确
AutocodeRecordDO autocodeRecord = autocodeRecordMapper.selectById(autocodeRecordId);
assertPojoEquals(createReqVO, autocodeRecord, "id");
}
@Test
public void testUpdateAutocodeRecord_success() {
// mock 数据
AutocodeRecordDO dbAutocodeRecord = randomPojo(AutocodeRecordDO.class);
autocodeRecordMapper.insert(dbAutocodeRecord);// @Sql: 先插入出一条存在的数据
// 准备参数
AutocodeRecordSaveReqVO updateReqVO = randomPojo(AutocodeRecordSaveReqVO.class, o -> {
o.setId(dbAutocodeRecord.getId()); // 设置更新的 ID
});
// 调用
autocodeRecordService.updateAutocodeRecord(updateReqVO);
// 校验是否更新正确
AutocodeRecordDO autocodeRecord = autocodeRecordMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, autocodeRecord);
}
@Test
public void testUpdateAutocodeRecord_notExists() {
// 准备参数
AutocodeRecordSaveReqVO updateReqVO = randomPojo(AutocodeRecordSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> autocodeRecordService.updateAutocodeRecord(updateReqVO), AUTOCODE_RECORD_NOT_EXISTS);
}
@Test
public void testDeleteAutocodeRecord_success() {
// mock 数据
AutocodeRecordDO dbAutocodeRecord = randomPojo(AutocodeRecordDO.class);
autocodeRecordMapper.insert(dbAutocodeRecord);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbAutocodeRecord.getId();
// 调用
autocodeRecordService.deleteAutocodeRecord(id);
// 校验数据不存在了
assertNull(autocodeRecordMapper.selectById(id));
}
@Test
public void testDeleteAutocodeRecord_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> autocodeRecordService.deleteAutocodeRecord(id), AUTOCODE_RECORD_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetAutocodeRecordPage() {
// mock 数据
AutocodeRecordDO dbAutocodeRecord = randomPojo(AutocodeRecordDO.class, o -> { // 等会查询到
o.setRuleId(null);
o.setGenDate(null);
o.setGenIndex(null);
o.setLastResult(null);
o.setLastSerialNo(null);
o.setLastInputChar(null);
o.setRemark(null);
o.setCreateTime(null);
});
autocodeRecordMapper.insert(dbAutocodeRecord);
// 测试 ruleId 不匹配
autocodeRecordMapper.insert(cloneIgnoreId(dbAutocodeRecord, o -> o.setRuleId(null)));
// 测试 genDate 不匹配
autocodeRecordMapper.insert(cloneIgnoreId(dbAutocodeRecord, o -> o.setGenDate(null)));
// 测试 genIndex 不匹配
autocodeRecordMapper.insert(cloneIgnoreId(dbAutocodeRecord, o -> o.setGenIndex(null)));
// 测试 lastResult 不匹配
autocodeRecordMapper.insert(cloneIgnoreId(dbAutocodeRecord, o -> o.setLastResult(null)));
// 测试 lastSerialNo 不匹配
autocodeRecordMapper.insert(cloneIgnoreId(dbAutocodeRecord, o -> o.setLastSerialNo(null)));
// 测试 lastInputChar 不匹配
autocodeRecordMapper.insert(cloneIgnoreId(dbAutocodeRecord, o -> o.setLastInputChar(null)));
// 测试 remark 不匹配
autocodeRecordMapper.insert(cloneIgnoreId(dbAutocodeRecord, o -> o.setRemark(null)));
// 测试 createTime 不匹配
autocodeRecordMapper.insert(cloneIgnoreId(dbAutocodeRecord, o -> o.setCreateTime(null)));
// 准备参数
AutocodeRecordPageReqVO reqVO = new AutocodeRecordPageReqVO();
reqVO.setRuleId(null);
reqVO.setGenDate(null);
reqVO.setGenIndex(null);
reqVO.setLastResult(null);
reqVO.setLastSerialNo(null);
reqVO.setLastInputChar(null);
reqVO.setRemark(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<AutocodeRecordDO> pageResult = autocodeRecordService.getAutocodeRecordPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbAutocodeRecord, pageResult.getList().get(0));
}
}

@ -0,0 +1,160 @@
package cn.iocoder.yudao.module.erp.service.autocode;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.autocode.AutocodeRuleDO;
import cn.iocoder.yudao.module.erp.dal.mysql.autocode.AutocodeRuleMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import org.springframework.context.annotation.Import;
import javax.annotation.Resource;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link AutocodeRuleServiceImpl}
*
* @author
*/
@Import(AutocodeRuleServiceImpl.class)
public class AutocodeRuleServiceImplTest extends BaseDbUnitTest {
@Resource
private AutocodeRuleServiceImpl autocodeRuleService;
@Resource
private AutocodeRuleMapper autocodeRuleMapper;
@Test
public void testCreateAutocodeRule_success() {
// 准备参数
AutocodeRuleSaveReqVO createReqVO = randomPojo(AutocodeRuleSaveReqVO.class).setId(null);
// 调用
Long autocodeRuleId = autocodeRuleService.createAutocodeRule(createReqVO);
// 断言
assertNotNull(autocodeRuleId);
// 校验记录的属性是否正确
AutocodeRuleDO autocodeRule = autocodeRuleMapper.selectById(autocodeRuleId);
assertPojoEquals(createReqVO, autocodeRule, "id");
}
@Test
public void testUpdateAutocodeRule_success() {
// mock 数据
AutocodeRuleDO dbAutocodeRule = randomPojo(AutocodeRuleDO.class);
autocodeRuleMapper.insert(dbAutocodeRule);// @Sql: 先插入出一条存在的数据
// 准备参数
AutocodeRuleSaveReqVO updateReqVO = randomPojo(AutocodeRuleSaveReqVO.class, o -> {
o.setId(dbAutocodeRule.getId()); // 设置更新的 ID
});
// 调用
autocodeRuleService.updateAutocodeRule(updateReqVO);
// 校验是否更新正确
AutocodeRuleDO autocodeRule = autocodeRuleMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, autocodeRule);
}
@Test
public void testUpdateAutocodeRule_notExists() {
// 准备参数
AutocodeRuleSaveReqVO updateReqVO = randomPojo(AutocodeRuleSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> autocodeRuleService.updateAutocodeRule(updateReqVO), AUTOCODE_RULE_NOT_EXISTS);
}
@Test
public void testDeleteAutocodeRule_success() {
// mock 数据
AutocodeRuleDO dbAutocodeRule = randomPojo(AutocodeRuleDO.class);
autocodeRuleMapper.insert(dbAutocodeRule);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbAutocodeRule.getId();
// 调用
autocodeRuleService.deleteAutocodeRule(id);
// 校验数据不存在了
assertNull(autocodeRuleMapper.selectById(id));
}
@Test
public void testDeleteAutocodeRule_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> autocodeRuleService.deleteAutocodeRule(id), AUTOCODE_RULE_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetAutocodeRulePage() {
// mock 数据
AutocodeRuleDO dbAutocodeRule = randomPojo(AutocodeRuleDO.class, o -> { // 等会查询到
o.setRuleCode(null);
o.setRuleName(null);
o.setRuleDesc(null);
o.setMaxLength(null);
o.setIsPadded(null);
o.setPaddedChar(null);
o.setPaddedMethod(null);
o.setRemark(null);
o.setIsEnable(null);
o.setCreateTime(null);
});
autocodeRuleMapper.insert(dbAutocodeRule);
// 测试 ruleCode 不匹配
autocodeRuleMapper.insert(cloneIgnoreId(dbAutocodeRule, o -> o.setRuleCode(null)));
// 测试 ruleName 不匹配
autocodeRuleMapper.insert(cloneIgnoreId(dbAutocodeRule, o -> o.setRuleName(null)));
// 测试 ruleDesc 不匹配
autocodeRuleMapper.insert(cloneIgnoreId(dbAutocodeRule, o -> o.setRuleDesc(null)));
// 测试 maxLength 不匹配
autocodeRuleMapper.insert(cloneIgnoreId(dbAutocodeRule, o -> o.setMaxLength(null)));
// 测试 isPadded 不匹配
autocodeRuleMapper.insert(cloneIgnoreId(dbAutocodeRule, o -> o.setIsPadded(null)));
// 测试 paddedChar 不匹配
autocodeRuleMapper.insert(cloneIgnoreId(dbAutocodeRule, o -> o.setPaddedChar(null)));
// 测试 paddedMethod 不匹配
autocodeRuleMapper.insert(cloneIgnoreId(dbAutocodeRule, o -> o.setPaddedMethod(null)));
// 测试 remark 不匹配
autocodeRuleMapper.insert(cloneIgnoreId(dbAutocodeRule, o -> o.setRemark(null)));
// 测试 isEnable 不匹配
autocodeRuleMapper.insert(cloneIgnoreId(dbAutocodeRule, o -> o.setIsEnable(null)));
// 测试 createTime 不匹配
autocodeRuleMapper.insert(cloneIgnoreId(dbAutocodeRule, o -> o.setCreateTime(null)));
// 准备参数
AutocodeRulePageReqVO reqVO = new AutocodeRulePageReqVO();
reqVO.setRuleCode(null);
reqVO.setRuleName(null);
reqVO.setRuleDesc(null);
reqVO.setMaxLength(null);
reqVO.setIsPadded(null);
reqVO.setPaddedChar(null);
reqVO.setPaddedMethod(null);
reqVO.setRemark(null);
reqVO.setIsEnable(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<AutocodeRuleDO> pageResult = autocodeRuleService.getAutocodeRulePage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbAutocodeRule, pageResult.getList().get(0));
}
}
Loading…
Cancel
Save