mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-03-13 06:39:08 +08:00
代码生成:增加更全的 tree 场景下的新增/修改校验
This commit is contained in:
parent
f5ea270be3
commit
01a55b93c2
@ -324,10 +324,14 @@ public class CodegenEngine {
|
|||||||
|
|
||||||
// 特殊:树表专属逻辑
|
// 特殊:树表专属逻辑
|
||||||
if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) {
|
if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) {
|
||||||
bindingMap.put("treeParentColumn", CollUtil.findOne(columns,
|
CodegenColumnDO treeParentColumn = CollUtil.findOne(columns,
|
||||||
column -> Objects.equals(column.getId(), table.getTreeParentColumnId())));
|
column -> Objects.equals(column.getId(), table.getTreeParentColumnId()));
|
||||||
bindingMap.put("treeNameColumn", CollUtil.findOne(columns,
|
bindingMap.put("treeParentColumn", treeParentColumn);
|
||||||
column -> Objects.equals(column.getId(), table.getTreeNameColumnId())));
|
bindingMap.put("treeParentColumn_javaField_underlineCase", toUnderlineCase(treeParentColumn.getJavaField()));
|
||||||
|
CodegenColumnDO treeNameColumn = CollUtil.findOne(columns,
|
||||||
|
column -> Objects.equals(column.getId(), table.getTreeNameColumnId()));
|
||||||
|
bindingMap.put("treeNameColumn", treeNameColumn);
|
||||||
|
bindingMap.put("treeNameColumn_javaField_underlineCase", toUnderlineCase(treeNameColumn.getJavaField()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 特殊:主子表专属逻辑
|
// 特殊:主子表专属逻辑
|
||||||
|
@ -28,6 +28,11 @@ import ${BaseDOClassName};
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class ${table.className}DO extends BaseDO {
|
public class ${table.className}DO extends BaseDO {
|
||||||
|
|
||||||
|
## 特殊:树表专属逻辑
|
||||||
|
#if ( $table.templateType == 2 )
|
||||||
|
public static final Long ${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT = 0L;
|
||||||
|
|
||||||
|
#end
|
||||||
#foreach ($column in $columns)
|
#foreach ($column in $columns)
|
||||||
#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段
|
#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段
|
||||||
/**
|
/**
|
||||||
|
@ -68,9 +68,14 @@ public interface ${table.className}Mapper extends BaseMapperX<${table.className}
|
|||||||
|
|
||||||
## 特殊:树表专属逻辑
|
## 特殊:树表专属逻辑
|
||||||
#if ( $table.templateType == 2 )
|
#if ( $table.templateType == 2 )
|
||||||
#set ($ParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
|
#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
|
||||||
default Long selectCountBy${ParentJavaField}(${treeParentColumn.javaType} ${treeParentColumn.javaField}) {
|
#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写
|
||||||
return selectCount(${table.className}DO::get${ParentJavaField}, ${treeParentColumn.javaField});
|
default ${table.className}DO selectBy${TreeParentJavaField}And${TreeNameJavaField}(Long ${treeParentColumn.javaField}, String ${treeNameColumn.javaField}) {
|
||||||
|
return selectOne(${table.className}DO::get${TreeParentJavaField}, ${treeParentColumn.javaField}, ${table.className}DO::get${TreeNameJavaField}, ${treeNameColumn.javaField});
|
||||||
|
}
|
||||||
|
|
||||||
|
default Long selectCountBy${TreeParentJavaField}(${treeParentColumn.javaType} ${treeParentColumn.javaField}) {
|
||||||
|
return selectCount(${table.className}DO::get${TreeParentJavaField}, ${treeParentColumn.javaField});
|
||||||
}
|
}
|
||||||
|
|
||||||
#end
|
#end
|
||||||
|
@ -4,4 +4,7 @@ ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorC
|
|||||||
## 特殊:树表专属逻辑
|
## 特殊:树表专属逻辑
|
||||||
#if ( $table.templateType == 2 )
|
#if ( $table.templateType == 2 )
|
||||||
ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN = new ErrorCode(TODO 补充编号, "存在存在子${table.classComment},无法删除");
|
ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN = new ErrorCode(TODO 补充编号, "存在存在子${table.classComment},无法删除");
|
||||||
|
ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_NOT_EXITS = new ErrorCode(TODO 补充编号,"父级${table.classComment}不存在");
|
||||||
|
ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_ERROR = new ErrorCode(TODO 补充编号, "不能设置自己为父${table.classComment}");
|
||||||
|
ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE = new ErrorCode(TODO 补充编号, "已经存在该${treeNameColumn.columnComment}的${table.classComment}");
|
||||||
#end
|
#end
|
@ -50,6 +50,16 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
#end
|
#end
|
||||||
public ${primaryColumn.javaType} create${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) {
|
public ${primaryColumn.javaType} create${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) {
|
||||||
|
## 特殊:树表专属逻辑
|
||||||
|
#if ( $table.templateType == 2 )
|
||||||
|
#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
|
||||||
|
#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写
|
||||||
|
// 校验${treeParentColumn.columnComment}的有效性
|
||||||
|
validateParent${simpleClassName}(null, createReqVO.get${TreeParentJavaField}());
|
||||||
|
// 校验${treeNameColumn.columnComment}的唯一性
|
||||||
|
validate${simpleClassName}${TreeNameJavaField}Unique(null, createReqVO.get${TreeParentJavaField}(), createReqVO.get${TreeNameJavaField}());
|
||||||
|
|
||||||
|
#end
|
||||||
// 插入
|
// 插入
|
||||||
${table.className}DO ${classNameVar} = BeanUtils.toBean(createReqVO, ${table.className}DO.class);
|
${table.className}DO ${classNameVar} = BeanUtils.toBean(createReqVO, ${table.className}DO.class);
|
||||||
${classNameVar}Mapper.insert(${classNameVar});
|
${classNameVar}Mapper.insert(${classNameVar});
|
||||||
@ -81,6 +91,16 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
|
|||||||
public void update${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) {
|
public void update${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validate${simpleClassName}Exists(updateReqVO.getId());
|
validate${simpleClassName}Exists(updateReqVO.getId());
|
||||||
|
## 特殊:树表专属逻辑
|
||||||
|
#if ( $table.templateType == 2 )
|
||||||
|
#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
|
||||||
|
#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写
|
||||||
|
// 校验${treeParentColumn.columnComment}的有效性
|
||||||
|
validateParent${simpleClassName}(updateReqVO.getId(), updateReqVO.get${TreeParentJavaField}());
|
||||||
|
// 校验${treeNameColumn.columnComment}的唯一性
|
||||||
|
validate${simpleClassName}${TreeNameJavaField}Unique(updateReqVO.getId(), updateReqVO.get${TreeParentJavaField}(), updateReqVO.get${TreeNameJavaField}());
|
||||||
|
|
||||||
|
#end
|
||||||
// 更新
|
// 更新
|
||||||
${table.className}DO updateObj = BeanUtils.toBean(updateReqVO, ${table.className}DO.class);
|
${table.className}DO updateObj = BeanUtils.toBean(updateReqVO, ${table.className}DO.class);
|
||||||
${classNameVar}Mapper.updateById(updateObj);
|
${classNameVar}Mapper.updateById(updateObj);
|
||||||
@ -140,6 +160,59 @@ public class ${table.className}ServiceImpl implements ${table.className}Service
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## 特殊:树表专属逻辑
|
||||||
|
#if ( $table.templateType == 2 )
|
||||||
|
#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
|
||||||
|
#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写
|
||||||
|
private void validateParent${simpleClassName}(Long id, Long ${treeParentColumn.javaField}) {
|
||||||
|
if (${treeParentColumn.javaField} == null || ${simpleClassName}DO.${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT.equals(${treeParentColumn.javaField})) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 1. 不能设置自己为父${table.classComment}
|
||||||
|
if (Objects.equals(id, ${treeParentColumn.javaField})) {
|
||||||
|
throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_ERROR);
|
||||||
|
}
|
||||||
|
// 2. 父${table.classComment}不存在
|
||||||
|
${simpleClassName}DO parent${simpleClassName} = ${classNameVar}Mapper.selectById(${treeParentColumn.javaField});
|
||||||
|
if (parent${simpleClassName} == null) {
|
||||||
|
throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_NOT_EXITS);
|
||||||
|
}
|
||||||
|
// 3. 递归校验父${table.classComment},如果父${table.classComment}是自己的子${table.classComment},则报错,避免形成环路
|
||||||
|
if (id == null) { // id 为空,说明新增,不需要考虑环路
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < Short.MAX_VALUE; i++) {
|
||||||
|
// 3.1 校验环路
|
||||||
|
${treeParentColumn.javaField} = parent${simpleClassName}.get${TreeParentJavaField}();
|
||||||
|
if (Objects.equals(id, ${treeParentColumn.javaField})) {
|
||||||
|
throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_IS_CHILD);
|
||||||
|
}
|
||||||
|
// 3.2 继续递归下一级父${table.classComment}
|
||||||
|
if (${treeParentColumn.javaField} == null || ${simpleClassName}DO.${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT.equals(${treeParentColumn.javaField})) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
parent${simpleClassName} = ${classNameVar}Mapper.selectById(${treeParentColumn.javaField});
|
||||||
|
if (parent${simpleClassName} == null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validate${simpleClassName}${TreeNameJavaField}Unique(Long id, Long ${treeParentColumn.javaField}, String ${treeNameColumn.javaField}) {
|
||||||
|
${simpleClassName}DO ${classNameVar} = ${classNameVar}Mapper.selectBy${TreeParentJavaField}And${TreeNameJavaField}(${treeParentColumn.javaField}, ${treeNameColumn.javaField});
|
||||||
|
if (${classNameVar} == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 如果 id 为空,说明不用比较是否为相同 id 的${table.classComment}
|
||||||
|
if (id == null) {
|
||||||
|
throw exception(${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE);
|
||||||
|
}
|
||||||
|
if (ObjectUtil.notEqual(${classNameVar}.getId(), id)) {
|
||||||
|
throw exception(${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#end
|
||||||
@Override
|
@Override
|
||||||
public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) {
|
public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) {
|
||||||
return ${classNameVar}Mapper.selectById(id);
|
return ${classNameVar}Mapper.selectById(id);
|
||||||
|
@ -51,8 +51,7 @@ public class CodegenEngineTest extends BaseMockitoUnitTest {
|
|||||||
.setClassComment("学生").setAuthor("芋道源码")
|
.setClassComment("学生").setAuthor("芋道源码")
|
||||||
.setTemplateType(CodegenTemplateTypeEnum.TREE.getType())
|
.setTemplateType(CodegenTemplateTypeEnum.TREE.getType())
|
||||||
.setFrontType(CodegenFrontTypeEnum.VUE3.getType())
|
.setFrontType(CodegenFrontTypeEnum.VUE3.getType())
|
||||||
.setTreeParentColumnId(22L).setTreeNameColumnId(11L)
|
.setTreeParentColumnId(22L).setTreeNameColumnId(11L);
|
||||||
;
|
|
||||||
CodegenColumnDO idColumn = new CodegenColumnDO().setColumnName("id").setDataType(JdbcType.BIGINT.name())
|
CodegenColumnDO idColumn = new CodegenColumnDO().setColumnName("id").setDataType(JdbcType.BIGINT.name())
|
||||||
.setColumnComment("编号").setNullable(false).setPrimaryKey(true).setAutoIncrement(true)
|
.setColumnComment("编号").setNullable(false).setPrimaryKey(true).setAutoIncrement(true)
|
||||||
.setJavaType("Long").setJavaField("id").setExample("1024")
|
.setJavaType("Long").setJavaField("id").setExample("1024")
|
||||||
|
@ -141,7 +141,7 @@ public class DeptServiceImpl implements DeptService {
|
|||||||
if (dept == null) {
|
if (dept == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 如果 id 为空,说明不用比较是否为相同 id 的岗位
|
// 如果 id 为空,说明不用比较是否为相同 id 的部门
|
||||||
if (id == null) {
|
if (id == null) {
|
||||||
throw exception(DEPT_NAME_DUPLICATE);
|
throw exception(DEPT_NAME_DUPLICATE);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user