ソースを参照

生成代码优化

wanggaokun 11 ヶ月 前
コミット
900af42eda

+ 5 - 2
eco-modules/generator/src/main/java/org/eco/generator/domain/GenTable.java

@@ -2,15 +2,16 @@ package org.eco.generator.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
-import org.eco.common.core.constant.GenConstants;
-import org.eco.common.core.utils.StringUtils;
 import com.mybatisflex.annotation.Column;
 import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.RelationOneToMany;
 import com.mybatisflex.annotation.Table;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
 import lombok.Data;
 import org.apache.commons.lang3.ArrayUtils;
+import org.eco.common.core.constant.GenConstants;
+import org.eco.common.core.utils.StringUtils;
 
 import java.io.Serial;
 import java.io.Serializable;
@@ -124,6 +125,8 @@ public class GenTable implements Serializable {
      * 表列信息
      */
     @Valid
+    @Column(ignore = true)
+    @RelationOneToMany(selfField = "tableId", targetField = "tableId", orderBy = "sort")
     private List<GenTableColumn> columns;
 
     /**

+ 28 - 13
eco-modules/generator/src/main/resources/vm/java/controller.java.vm

@@ -8,16 +8,17 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.eco.common.core.core.domain.CommonResult;
-import org.eco.common.excel.utils.ExcelUtil;
 import org.eco.common.log.annotation.Log;
 import org.eco.common.log.enums.BusinessType;
+import org.eco.common.security.utils.LoginHelper;
+import org.eco.common.core.core.domain.model.LoginUser;
 import org.eco.common.web.annotation.RepeatSubmit;
 import org.eco.common.web.core.BaseController;
 import jakarta.annotation.Resource;
 import ${packageName}.domain.vo.${ClassName}Vo;
 import ${packageName}.domain.bo.${ClassName}Bo;
 import ${packageName}.service.I${ClassName}Service;
-
+import org.springframework.web.multipart.MultipartFile;
 #if($table.crud || $table.sub)
 import org.eco.common.core.core.page.PageResult;
 #elseif($table.tree)
@@ -37,20 +38,20 @@ public class ${ClassName}Controller extends BaseController {
     @Resource
     private I${ClassName}Service ${className}Service;
 
-    /**
-     * 查询${functionName}列表
-     */
-    @SaCheckPermission("${permissionPrefix}:list")
-    @GetMapping("/list")
+/**
+ * 查询${functionName}列表
+ */
+@SaCheckPermission("${permissionPrefix}:list")
+@GetMapping("/list")
     #if($table.crud || $table.sub)
     public CommonResult<PageResult<${ClassName}Vo>> list(${ClassName}Bo ${className}Bo) {
         return CommonResult.success(${className}Service.selectPage(${className}Bo));
     }
     #elseif($table.tree)
-    public CommonResult<List<${ClassName}Vo>> list(${ClassName}Bo ${className}Bo) {
-        List<${ClassName}Vo> list = ${className}Service.selectList(${className}Bo);
-        return CommonResult.success(list);
-    }
+        public CommonResult<List<${ClassName}Vo>> list(${ClassName}Bo ${className}Bo) {
+            List<${ClassName}Vo> list = ${className}Service.selectList(${className}Bo);
+            return CommonResult.success(list);
+        }
     #end
 
     /**
@@ -59,9 +60,23 @@ public class ${ClassName}Controller extends BaseController {
     @SaCheckPermission("${permissionPrefix}:export")
     @Log(title = "${functionName}", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(HttpServletResponse response, ${ClassName}Bo ${className}Bo) {
+    public CommonResult<Void> export(HttpServletResponse response, ${ClassName}Bo ${className}Bo) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
         List<${ClassName}Vo> list = ${className}Service.selectList(${className}Bo);
-        ExcelUtil.exportExcel(list, "${functionName}", ${ClassName}Vo.class, response);
+            ${className}Service.asyncExport(list, "${functionName}", loginUser);
+        return CommonResult.success();
+    }
+
+    /**
+     * 导入${functionName}列表
+     */
+    @Log(title = "${functionName}", businessType = BusinessType.IMPORT)
+    @SaCheckPermission("${permissionPrefix}:import")
+    @PostMapping("/importData")
+    public CommonResult<Void> importData(MultipartFile file, boolean updateSupport) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+            ${className}Service.asyncImportData(file, updateSupport, loginUser);
+        return CommonResult.success();
     }
 
     /**

+ 25 - 18
eco-modules/generator/src/main/resources/vm/java/listener.java.vm

@@ -9,6 +9,8 @@ import org.eco.common.core.utils.SpringUtils;
 import org.eco.common.core.utils.ValidatorUtils;
 import org.eco.common.excel.core.ExcelListener;
 import org.eco.common.excel.core.ExcelResult;
+import org.eco.common.excel.entity.ExcelResultRes;
+import org.eco.common.core.core.domain.model.LoginUser;
 import ${packageName}.domain.bo.${ClassName}Bo;
 import ${packageName}.domain.vo.${ClassName}ImportVo;
 import ${packageName}.domain.vo.${ClassName}Vo;
@@ -27,39 +29,41 @@ public class ${ClassName}ImportListener extends AnalysisEventListener<${ClassNam
     private final I${ClassName}Service ${className}Service;
 
     private final Boolean isUpdateSupport;
+    private final LoginUser loginUser;
     private int successNum = 0;
     private int failureNum = 0;
     private final StringBuilder successMsg = new StringBuilder();
     private final StringBuilder failureMsg = new StringBuilder();
 
-    public ${ClassName}ImportListener(Boolean isUpdateSupport) {
+    public ${ClassName}ImportListener(Boolean isUpdateSupport, LoginUser loginUser) {
         this.${className}Service = SpringUtils.getBean(I${ClassName}Service.class);
         this.isUpdateSupport = isUpdateSupport;
+        this.loginUser = loginUser;
     }
 
     @Override
     public void invoke(${ClassName}ImportVo ${className}Vo, AnalysisContext context) {
         try {
 
-            ${ClassName}Bo ${className}Bo = BeanUtil.toBean(${className}Vo, ${ClassName}Bo.class);
+                ${ClassName}Bo ${className}Bo = BeanUtil.toBean(${className}Vo, ${ClassName}Bo.class);
 
             //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
-            ${ClassName}Vo ${className}Vo1 = null;
+                ${ClassName}Vo ${className}Vo1 = null;
 
             #if($table.tree)
-            ${className}Vo1 = ${className}Service.selectById(${className}Vo.get${pkColumn.capJavaField}());
+                    ${className}Vo1 = ${className}Service.selectById(${className}Vo.get${pkColumn.capJavaField}());
             #else
-            //${className}Vo1 = ${className}Service.selectBySomefield(${className}Vo.getSomefield());
+                //${className}Vo1 = ${className}Service.selectBySomefield(${className}Vo.getSomefield());
             #end
             if (ObjectUtil.isNull(${className}Vo1)) {
                 //不存在就新增
-                ${className}Bo.setVersion(0);
+                    ${className}Bo.setVersion(0);
                 ValidatorUtils.validate(${className}Bo);
-              #if($table.tree)
-                boolean inserted = ${className}Service.insertWithPk(${className}Bo);//树表需要前台传来主键值
-              #else
-                boolean inserted = ${className}Service.insert(${className}Bo);
-              #end
+                #if($table.tree)
+                    boolean inserted = ${className}Service.insertWithPk(${className}Bo);//树表需要前台传来主键值
+                #else
+                    boolean inserted = ${className}Service.insert(${className}Bo);
+                #end
 
                 if (inserted) {
                     successNum++;
@@ -72,8 +76,8 @@ public class ${ClassName}ImportListener extends AnalysisEventListener<${ClassNam
                 }
             } else if (isUpdateSupport) {
                 //存在就更新
-                ${className}Bo.set${pkColumn.capJavaField}(${className}Vo1.get${pkColumn.capJavaField}());//主键
-                ${className}Bo.setVersion(${className}Vo1.getVersion());
+                    ${className}Bo.set${pkColumn.capJavaField}(${className}Vo1.get${pkColumn.capJavaField}());//主键
+                    ${className}Bo.setVersion(${className}Vo1.getVersion());
                 boolean updated = ${className}Service.update(${className}Bo);
                 if (updated) {
                     successNum++;
@@ -95,7 +99,7 @@ public class ${ClassName}ImportListener extends AnalysisEventListener<${ClassNam
 
     @Override
     public void doAfterAllAnalysed(AnalysisContext context) {
-
+        log.info("解析完成");
     }
 
     @Override
@@ -103,14 +107,17 @@ public class ${ClassName}ImportListener extends AnalysisEventListener<${ClassNam
         return new ExcelResult<>() {
 
             @Override
-            public String getAnalysis() {
-                if (failureNum > 0) {
+            public ExcelResultRes getAnalysis() {
+                if (failureNum > 0 && successNum == 0) {
                     failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
-                    throw new BusinessException(failureMsg.toString());
+                    return ExcelResultRes.builder().logInfo(failureMsg.toString()).status("0").build();
+                } else if (failureNum > 0 && successNum > 0) {
+                    failureMsg.insert(0, "很抱歉,部分导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    return ExcelResultRes.builder().logInfo(failureMsg.toString()).status("2").build();
                 } else {
                     successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                    return ExcelResultRes.builder().logInfo(successMsg.toString()).status("1").build();
                 }
-                return successMsg.toString();
             }
 
             @Override

+ 37 - 7
eco-modules/generator/src/main/resources/vm/java/service.java.vm

@@ -1,11 +1,13 @@
 package ${packageName}.service;
 
 import java.util.List;
-
+import org.eco.common.core.core.domain.model.LoginUser;
 import ${packageName}.domain.${ClassName};
 import ${packageName}.domain.vo.${ClassName}Vo;
 import ${packageName}.domain.bo.${ClassName}Bo;
 import org.eco.common.orm.core.service.IBaseService;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.web.multipart.MultipartFile;
 #if($table.crud || $table.sub)
 import org.eco.common.core.core.page.PageResult;
 #end
@@ -34,22 +36,30 @@ public interface I${ClassName}Service extends IBaseService<${ClassName}> {
     List<${ClassName}Vo> selectList(${ClassName}Bo ${className}Bo);
 
     #if($table.crud || $table.sub)
+        /**
+         * 分页查询${functionName}列表
+         *
+         * @param ${className}Bo ${functionName}Bo
+         * @return 分页${functionName}集合
+         */
+        PageResult<${ClassName}Vo> selectPage(${ClassName}Bo ${className}Bo);
+    #end
+
     /**
-     * 分页查询${functionName}列表
+     * 新增${functionName}
      *
      * @param ${className}Bo ${functionName}Bo
-     * @return 分页${functionName}集合
+     * @return 结果:true 操作成功,false 操作失败
      */
-    PageResult<${ClassName}Vo> selectPage(${ClassName}Bo ${className}Bo);
-    #end
+    boolean insert(${ClassName}Bo ${className}Bo);
 
     /**
-     * 新增${functionName}
+     * 新增${functionName},前台提供主键值,一般用于导入的场合
      *
      * @param ${className}Bo ${functionName}Bo
      * @return 结果:true 操作成功,false 操作失败
      */
-    boolean insert(${ClassName}Bo ${className}Bo);
+    boolean insertWithPk(${ClassName}Bo ${className}Bo);
 
     /**
      * 修改${functionName}
@@ -67,4 +77,24 @@ public interface I${ClassName}Service extends IBaseService<${ClassName}> {
      */
     boolean deleteByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s);
 
+    /**
+     * 异步导入
+     *
+     * @param file          导入的文件
+     * @param updateSupport 是否覆盖
+     * @param user          用户上下文信息
+     */
+    @Async
+    void asyncImportData(MultipartFile file, boolean updateSupport, LoginUser user);
+
+    /**
+     * asyncExport 异步导出
+     *
+     * @param listVo    数据列表
+     * @param sheetName 文件名称
+     * @param user      上下文
+     */
+    @Async
+    void asyncExport(List<${ClassName}Vo> listVo, String sheetName, LoginUser user);
+
 }

+ 149 - 56
eco-modules/generator/src/main/resources/vm/java/serviceImpl.java.vm

@@ -6,8 +6,15 @@ import java.util.List;
 import cn.hutool.core.util.ObjectUtil;
 import com.mybatisflex.core.paginate.Page;
 import com.mybatisflex.core.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.eco.common.core.core.domain.model.LoginUser;
+import org.eco.common.excel.entity.ExcelResultRes;
+import org.eco.common.excel.service.IExcelService;
+import org.eco.common.core.utils.bean.BeanUtils;
 import org.eco.common.core.utils.MapstructUtils;
+import org.eco.system.service.IImportExportService;
 import org.eco.common.core.utils.StringUtils;
+import org.eco.system.domain.bo.ImportExportBo;
 import org.eco.common.orm.core.page.PageQuery;
 import org.eco.common.core.core.page.PageResult;
 import org.eco.common.orm.core.service.impl.BaseServiceImpl;
@@ -19,16 +26,20 @@ import org.eco.common.orm.core.service.impl.BaseServiceImpl;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-#if($table.sub)
-import java.util.ArrayList;
-import ${packageName}.domain.${subClassName};
-import ${packageName}.mapper.${subClassName}Mapper;
-import static ${packageName}.domain.table.${subClassName}TableDef.${CapitalUnderScoreSubClassName};
-#end
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
+    #if($table.sub)
+    import java.util.ArrayList;
+    import ${packageName}.domain.${subClassName};
+    import ${packageName}.mapper.${subClassName}Mapper;
+    import static ${packageName}.domain.table.${subClassName}TableDef.${CapitalUnderScoreSubClassName};
+    #end
 import ${packageName}.mapper.${ClassName}Mapper;
 import ${packageName}.domain.${ClassName};
 import ${packageName}.domain.bo.${ClassName}Bo;
 import ${packageName}.domain.vo.${ClassName}Vo;
+import ${packageName}.domain.vo.${ClassName}ImportVo;
+import ${packageName}.listener.${ClassName}ImportListener;
 import ${packageName}.service.I${ClassName}Service;
 import static ${packageName}.domain.table.${ClassName}TableDef.${CapitalUnderScoreClassName};
 
@@ -39,12 +50,19 @@ import static ${packageName}.domain.table.${ClassName}TableDef.${CapitalUnderSco
  * @date ${datetime}
  */
 @Service
+@Slf4j
 public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper, ${ClassName}> implements I${ClassName}Service {
     @Resource
     private ${ClassName}Mapper ${className}Mapper;
-    #if($table.sub)
+
     @Resource
-    private ${subClassName}Mapper ${subclassName}Mapper;
+    private IExcelService excelService;
+
+    @Resource
+    private IImportExportService importExportService;
+    #if($table.sub)
+        @Resource
+        private ${subClassName}Mapper ${subclassName}Mapper;
     #end
 
     @Override
@@ -63,17 +81,17 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
                 #set($capitalColumnName=$column.columnName.toUpperCase())
                 #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
                 #set($mpMethod=$column.queryType.toLowerCase())
-    #if($queryType != 'BETWEEN')
-        queryWrapper.and(${CapitalUnderScoreClassName}.${capitalColumnName}.$mpMethod
-        (${className}Bo.get$AttrName()));
-    #else
-        queryWrapper.and(${CapitalUnderScoreClassName}.${capitalColumnName}.$mpMethod
-        (${className}Bo.getParams().get("begin$AttrName"), ${className}Bo.getParams().get("end$AttrName")));
-    #end
+                #if($queryType != 'BETWEEN')
+                    queryWrapper.and(${CapitalUnderScoreClassName}.${capitalColumnName}.$mpMethod
+                    (${className}Bo.get$AttrName()));
+                #else
+                    queryWrapper.and(${CapitalUnderScoreClassName}.${capitalColumnName}.$mpMethod
+                    (${className}Bo.getParams().get("begin$AttrName"), ${className}Bo.getParams().get("end$AttrName")));
+                #end
             #end
         #end
         #if($table.tree)
-        queryWrapper.orderBy(${CapitalUnderScoreClassName}.ORDER_NUM.asc());
+            queryWrapper.orderBy(${CapitalUnderScoreClassName}.ORDER_NUM.asc());
         #end
 
         return queryWrapper;
@@ -113,26 +131,50 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
     }
 
     #if($table.crud || $table.sub)
+        /**
+         * 分页查询${functionName}列表
+         *
+         * @param ${className}Bo ${functionName}Bo
+         * @return 分页${functionName}集合
+         */
+        @Override
+        public PageResult<${ClassName}Vo> selectPage(${ClassName}Bo ${className}Bo) {
+            QueryWrapper queryWrapper = buildQueryWrapper(${className}Bo);
+            #if($table.sub)
+                Page<${ClassName}Vo> page = ${className}Mapper.paginateWithRelationsAs(PageQuery.build(), queryWrapper, ${ClassName}Vo.class);
+            #else
+                Page<${ClassName}Vo> page = this.pageAs(PageQuery.build(), queryWrapper, ${ClassName}Vo.class);
+            #end
+            return PageResult.build(page);
+        }
+    #end
+
     /**
-     * 分页查询${functionName}列表
+     * 新增${functionName}
      *
      * @param ${className}Bo ${functionName}Bo
-     * @return 分页${functionName}集合
+     * @return 结果:true 操作成功,false 操作失败
      */
+        #if($table.sub)
+        @Transactional
+        #end
     @Override
-    public PageResult<${ClassName}Vo> selectPage(${ClassName}Bo ${className}Bo) {
-        QueryWrapper queryWrapper = buildQueryWrapper(${className}Bo);
+    public boolean insert(${ClassName}Bo ${className}Bo) {
+        ${ClassName} ${className} =MapstructUtils.convert(${className}Bo, ${ClassName}. class);
+
         #if($table.sub)
-            Page<${ClassName}Vo> page = ${className}Mapper.paginateWithRelationsAs(PageQuery.build(), queryWrapper, ${ClassName}Vo.class);
+            boolean inserted = this.save(${className});//使用全局配置的雪花算法主键生成器生成ID值
+            if (inserted && ObjectUtil.isNotNull(${className})) {
+                return insert${subClassName}(${className});
+            }
+            return false;
         #else
-            Page<${ClassName}Vo> page = this.pageAs(PageQuery.build(), queryWrapper, ${ClassName}Vo.class);
+            return this.save(${className});//使用全局配置的雪花算法主键生成器生成ID值
         #end
-        return PageResult.build(page);
     }
-    #end
 
     /**
-     * 新增${functionName}
+     * 新增${functionName},前台提供主键值,一般用于导入的场合
      *
      * @param ${className}Bo ${functionName}Bo
      * @return 结果:true 操作成功,false 操作失败
@@ -141,18 +183,34 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
         @Transactional
         #end
     @Override
-    public boolean insert(${ClassName}Bo ${className}Bo) {
-    ${ClassName} ${className} =MapstructUtils.convert(${className}Bo, ${ClassName}. class);
+    public boolean insertWithPk(${ClassName}Bo ${className}Bo)
+    {
+        ${ClassName} ${className} = MapstructUtils.convert(${className}Bo, ${ClassName}.class);
+
+        #if($table.tree)
+            //获取祖级列表字段
+            Long parentId = ${className}.getParentId();
+            if (parentId == 0) {
+                ${className}.setAncestors("0");
+            } else {
+                    ${ClassName}Vo parent${ClassName} = selectById(${className}Bo.getParentId());
+                if (ObjectUtil.isNotNull(parent${ClassName})) {
+                    ${className}.setAncestors(parent${ClassName}.getAncestors()+"," +parentId);
+                } else {
+                    ${className}.setAncestors("0");
+                }
+            }
+        #end
 
         #if($table.sub)
-        boolean inserted = this.save(${className});//使用全局配置的雪花算法主键生成器生成ID值
-        if (inserted && ObjectUtil.isNotNull(${className})) {
-            return insert${subClassName}(${className});
-        }
-        return false;
-    #else
-        return this.save(${className});//使用全局配置的雪花算法主键生成器生成ID值
-    #end
+            boolean inserted = ${className}Mapper.insertWithPk(${className}) > 0;//前台传来主键
+            if (inserted && ObjectUtil.isNotNull(${className})) {
+                return insert${subClassName}(${className});
+            }
+            return false;
+        #else
+            return ${className}Mapper.insertWithPk(${className}) > 0;//前台传来主键
+        #end
     }
 
     /**
@@ -183,6 +241,40 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
         return false;
     }
 
+    @Override
+    public void asyncImportData(MultipartFile file, boolean updateSupport, LoginUser loginUser) {
+        ExcelResultRes result;
+        try {
+            String name = file.getOriginalFilename();
+            result = excelService.importExcel(file.getInputStream(), name, ${ClassName}ImportVo.class, new ${ClassName}ImportListener(updateSupport, loginUser));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        ImportExportBo bo = new ImportExportBo();
+        BeanUtils.copyProperties(result, bo);
+        bo.setUpdateBy(loginUser.getUserId());
+        bo.setCreateBy(loginUser.getUserId());
+        bo.setType("0");
+        boolean flag = importExportService.insert(bo);
+        if (flag) {
+            log.info("异步导入日志写入成功");
+        }
+    }
+
+    @Override
+    public void asyncExport(List<${ClassName}Vo> listVo, String sheetName, LoginUser loginUser) {
+        ExcelResultRes result = excelService.exportExcel(listVo, sheetName, ${ClassName}Vo.class);
+        ImportExportBo bo = new ImportExportBo();
+        BeanUtils.copyProperties(result, bo);
+        bo.setUpdateBy(loginUser.getUserId());
+        bo.setCreateBy(loginUser.getUserId());
+        bo.setType("1");
+        boolean flag = importExportService.insert(bo);
+        if (flag) {
+            log.info("异步导出日志写入成功");
+        }
+    }
+
     /**
      * 批量删除${functionName}
      *
@@ -193,33 +285,34 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
     @Override
     public boolean deleteByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s) {
         #if($table.sub)
-        QueryWrapper queryWrapper = QueryWrapper.create().from(${CapitalUnderScoreSubClassName}).where(${CapitalUnderScoreSubClassName}.${CapitalUnderScoreSubTableFkClassName}.
-        in(Arrays.asList(${pkColumn.javaField}s)));
-            ${subclassName}Mapper.deleteByQuery(queryWrapper);
+            QueryWrapper queryWrapper = QueryWrapper.create().from(${CapitalUnderScoreSubClassName}).where(${CapitalUnderScoreSubClassName}.${CapitalUnderScoreSubTableFkClassName}.
+            in(Arrays.asList(${pkColumn.javaField}s)));
+                ${subclassName}Mapper.deleteByQuery(queryWrapper);
         #end
         return this.removeByIds(Arrays.asList(${pkColumn.javaField}s));
     }
 
     #if($table.sub)
-    /**
-     * 新增${subTable.functionName}信息
-     *
-     * @param ${className} ${functionName}对象
-     */
-    private boolean insert${subClassName}(${ClassName} ${className}) {
-        List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
-        ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
-        if (StringUtils.isNotNull(${subclassName}List)) {
-            List<${subClassName}> list = new ArrayList<>();
-            for (${subClassName} ${subclassName} :${subclassName}List){
-                ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
-                list.add(${subclassName});
-            }
-            if (list.size() > 0) {
-                return ${subclassName}Mapper.insertBatch(list) > 0;
+        /**
+         * 新增${subTable.functionName}信息
+         *
+         * @param ${className} ${functionName}对象
+         */
+        private boolean insert${subClassName}(${ClassName} ${className}) {
+            List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
+            ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
+            if (StringUtils.isNotNull(${subclassName}List)) {
+                List<${subClassName}> list = new ArrayList<>();
+                for (${subClassName} ${subclassName} :${subclassName}List){
+                    ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField});
+                    list.add(${subclassName});
+                }
+                if (list.size() > 0) {
+                    return ${subclassName}Mapper.insertBatch(list) > 0;
+                }
             }
+            return true;
         }
-        return true;
-    }
+
     #end
 }