优化代码生成模块:1、字典与文件字段添加序列化注解;2、新增 bit-Boolean 类型的映射;新增在create_time与update_time字段上添加自动填充注解。

This commit is contained in:
zhoumingfa 2024-08-04 21:51:40 +08:00
parent 6f183c3366
commit a1043083dc
27 changed files with 255 additions and 224 deletions

View File

@ -7,10 +7,12 @@ import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter; import com.alibaba.druid.support.http.WebStatFilter;
import com.alibaba.druid.support.spring.stat.DruidStatInterceptor; import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.base.common.domain.DataScopePlugin; import net.lab1024.sa.base.common.domain.DataScopePlugin;
import net.lab1024.sa.base.handler.MybatisPlusFillHandler;
import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.aop.support.DefaultPointcutAdvisor;
@ -144,6 +146,8 @@ public class DataSourceConfig {
pluginsList.add(dataScopePlugin); pluginsList.add(dataScopePlugin);
} }
factoryBean.setPlugins(pluginsList.toArray(new Interceptor[pluginsList.size()])); factoryBean.setPlugins(pluginsList.toArray(new Interceptor[pluginsList.size()]));
// 添加字段自动填充处理
factoryBean.setGlobalConfig(new GlobalConfig().setBanner(false).setMetaObjectHandler(new MybatisPlusFillHandler()));
return factoryBean.getObject(); return factoryBean.getObject();
} }

View File

@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -43,7 +44,8 @@ public class RedisConfig {
.setSerializationInclusion(JsonInclude.Include.NON_NULL); .setSerializationInclusion(JsonInclude.Include.NON_NULL);
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); // enableDefaultTyping 官方已弃用 所以改为 activateDefaultTyping
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om); jackson2JsonRedisSerializer.setObjectMapper(om);
RedisTemplate<String, Object> template = new RedisTemplate<>(); RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory); template.setConnectionFactory(factory);

View File

@ -0,0 +1,40 @@
package net.lab1024.sa.base.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* Mybatis Plus 插入或者更新时指定字段设置值
*
* @author zhoumingfa
*/
@Component
@Slf4j
public class MybatisPlusFillHandler implements MetaObjectHandler {
public static final String CREATE_TIME = "createTime";
public static final String UPDATE_TIME = "updateTime";
@Override
public void insertFill(MetaObject metaObject) {
if (metaObject.hasSetter(CREATE_TIME)) {
this.fillStrategy(metaObject, CREATE_TIME, LocalDateTime.now());
}
if (metaObject.hasSetter(UPDATE_TIME)) {
this.fillStrategy(metaObject, UPDATE_TIME, LocalDateTime.now());
}
}
@Override
public void updateFill(MetaObject metaObject) {
if (metaObject.hasSetter(UPDATE_TIME)) {
this.fillStrategy(metaObject, UPDATE_TIME, LocalDateTime.now());
}
}
}

View File

@ -41,7 +41,7 @@ public enum CodeFrontComponentEnum implements BaseEnum {
} }
@Override @Override
public Object getValue() { public String getValue() {
return value; return value;
} }

View File

@ -32,7 +32,6 @@ public class CodeGeneratorConfigForm {
@Schema(description = "表名") @Schema(description = "表名")
private String tableName; private String tableName;
@Valid @Valid
@NotNull(message = "基础信息不能为空") @NotNull(message = "基础信息不能为空")
@Schema(description = "基础信息") @Schema(description = "基础信息")

View File

@ -39,8 +39,8 @@ public class CodeInsertAndUpdateField {
@Schema(description = "更新标识") @Schema(description = "更新标识")
private Boolean updateFlag; private Boolean updateFlag;
@SchemaEnum(value = CodeGeneratorPageTypeEnum.class) @SchemaEnum(value = CodeFrontComponentEnum.class)
@CheckEnum(value = CodeFrontComponentEnum.class, message = "3.增加、修改 增加、修改 组件类型 枚举值错误", required = true) @CheckEnum(value = CodeFrontComponentEnum.class, message = "3.增加、修改 组件类型 枚举值错误", required = true)
private String frontComponent; private String frontComponent;
} }

View File

@ -94,6 +94,7 @@ public class CodeGeneratorTemplateService {
String fileName = templateFile.startsWith("java") ? upperCamel + templateSplit[templateSplit.length - 1] : lowerHyphen + "-" + templateSplit[templateSplit.length - 1]; String fileName = templateFile.startsWith("java") ? upperCamel + templateSplit[templateSplit.length - 1] : lowerHyphen + "-" + templateSplit[templateSplit.length - 1];
String fullPathFileName = templateFile.replaceAll(templateSplit[templateSplit.length - 1], fileName); String fullPathFileName = templateFile.replaceAll(templateSplit[templateSplit.length - 1], fileName);
fullPathFileName = fullPathFileName.replaceAll("java/", "java/" + basic.getModuleName().toLowerCase() + "/"); fullPathFileName = fullPathFileName.replaceAll("java/", "java/" + basic.getModuleName().toLowerCase() + "/");
fullPathFileName = fullPathFileName.replaceAll("js/", "js/" + basic.getModuleName().toLowerCase() + "/");
String fileContent = generate(tableName, templateFile, codeGeneratorConfigEntity); String fileContent = generate(tableName, templateFile, codeGeneratorConfigEntity);
File file = new File(uuid + "/" + fullPathFileName); File file = new File(uuid + "/" + fullPathFileName);

View File

@ -2,6 +2,7 @@ package net.lab1024.sa.base.module.support.codegenerator.service.variable;
import com.google.common.base.CaseFormat; import com.google.common.base.CaseFormat;
import net.lab1024.sa.base.common.util.SmartStringUtil; import net.lab1024.sa.base.common.util.SmartStringUtil;
import net.lab1024.sa.base.module.support.codegenerator.constant.CodeFrontComponentEnum;
import net.lab1024.sa.base.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; import net.lab1024.sa.base.module.support.codegenerator.domain.form.CodeGeneratorConfigForm;
import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeField; import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeField;
import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeInsertAndUpdate; import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeInsertAndUpdate;
@ -88,43 +89,33 @@ public abstract class CodeGenerateBaseVariableService {
} }
CodeInsertAndUpdateField field = first.get(); CodeInsertAndUpdateField field = first.get();
return SmartStringUtil.contains(field.getFrontComponent(), "Upload" ); return SmartStringUtil.equals(field.getFrontComponent(), CodeFrontComponentEnum.FILE_UPLOAD.getValue());
} }
/** /**
* 是否为 枚举 * 是否为 字典
*/ */
protected boolean isDict(String columnName, CodeGeneratorConfigForm form) { protected boolean isDict(String columnName, CodeGeneratorConfigForm form) {
List<CodeField> fields = form.getFields(); CodeField codeField = getCodeField(columnName, form);
if (CollectionUtils.isEmpty(fields)) { return codeField != null && codeField.getDict() != null;
return false;
}
Optional<CodeField> first = fields.stream().filter(e -> columnName.equals(e.getColumnName())).findFirst();
if (first.isPresent()) {
return false;
}
CodeField codeField = first.get();
return codeField.getDict() != null;
} }
/** /**
* 是否为 枚举 * 是否为 枚举
*/ */
protected boolean isEnum(String columnName, CodeGeneratorConfigForm form) { protected boolean isEnum(String columnName, CodeGeneratorConfigForm form) {
CodeField codeField = getCodeField(columnName, form);
return codeField != null && codeField.getEnumName() != null;
}
private CodeField getCodeField(String columnName, CodeGeneratorConfigForm form) {
List<CodeField> fields = form.getFields(); List<CodeField> fields = form.getFields();
if (CollectionUtils.isEmpty(fields)) { if (CollectionUtils.isEmpty(fields)) {
return false; return null;
} }
Optional<CodeField> first = fields.stream().filter(e -> columnName.equals(e.getColumnName())).findFirst(); Optional<CodeField> first = fields.stream().filter(e -> columnName.equals(e.getColumnName())).findFirst();
if (first.isPresent()) { return first.orElse(null);
return false;
}
CodeField codeField = first.get();
return codeField.getEnumName() != null;
} }
/** /**

View File

@ -2,6 +2,7 @@ package net.lab1024.sa.base.module.support.codegenerator.service.variable.backen
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import net.lab1024.sa.base.common.util.SmartStringUtil; import net.lab1024.sa.base.common.util.SmartStringUtil;
import net.lab1024.sa.base.module.support.codegenerator.constant.CodeFrontComponentEnum;
import net.lab1024.sa.base.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; import net.lab1024.sa.base.module.support.codegenerator.domain.form.CodeGeneratorConfigForm;
import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeField; import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeField;
import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeInsertAndUpdate; import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeInsertAndUpdate;
@ -100,7 +101,6 @@ public class AddFormVariableService extends CodeGenerateBaseVariableService {
} }
} }
//字典 //字典
if (SmartStringUtil.isNotEmpty(codeField.getDict())) { if (SmartStringUtil.isNotEmpty(codeField.getDict())) {
finalFieldMap.put("dict", "\n @JsonDeserialize(using = DictValueVoDeserializer.class)"); finalFieldMap.put("dict", "\n @JsonDeserialize(using = DictValueVoDeserializer.class)");
@ -109,7 +109,7 @@ public class AddFormVariableService extends CodeGenerateBaseVariableService {
} }
//文件上传 //文件上传
if (SmartStringUtil.contains(field.getFrontComponent(), "Upload")) { if (CodeFrontComponentEnum.FILE_UPLOAD.equalsValue(field.getFrontComponent())) {
finalFieldMap.put("file", "\n @JsonDeserialize(using = FileKeyVoDeserializer.class)"); finalFieldMap.put("file", "\n @JsonDeserialize(using = FileKeyVoDeserializer.class)");
packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;");
packageList.add("import net.lab1024.sa.base.common.json.deserializer.FileKeyVoDeserializer;"); packageList.add("import net.lab1024.sa.base.common.json.deserializer.FileKeyVoDeserializer;");

View File

@ -54,14 +54,21 @@ public class EntityVariableService extends CodeGenerateBaseVariableService {
// mybatis plus // mybatis plus
result.add("import com.baomidou.mybatisplus.annotation.TableName;"); result.add("import com.baomidou.mybatisplus.annotation.TableName;");
// 自动填充注解
boolean existCreateAndUpdate = fields.stream().anyMatch(e -> "create_time".equals(e.getColumnName()) || "update_time".equals(e.getColumnName()));
if (existCreateAndUpdate) {
result.add("import com.baomidou.mybatisplus.annotation.FieldFill;");
result.add("import com.baomidou.mybatisplus.annotation.TableField;");
}
//主键 //主键
boolean isExistPrimaryKey = fields.stream().filter(e -> e.getPrimaryKeyFlag() != null && e.getPrimaryKeyFlag()).findFirst().isPresent(); boolean isExistPrimaryKey = fields.stream().anyMatch(e -> e.getPrimaryKeyFlag() != null && e.getPrimaryKeyFlag());
if (isExistPrimaryKey) { if (isExistPrimaryKey) {
result.add("import com.baomidou.mybatisplus.annotation.TableId;"); result.add("import com.baomidou.mybatisplus.annotation.TableId;");
} }
//自增 //自增
boolean isExistAutoIncrease = fields.stream().filter(e -> e.getAutoIncreaseFlag() != null && e.getAutoIncreaseFlag()).findFirst().isPresent(); boolean isExistAutoIncrease = fields.stream().anyMatch(e -> e.getAutoIncreaseFlag() != null && e.getAutoIncreaseFlag());
if (isExistAutoIncrease) { if (isExistAutoIncrease) {
result.add("import com.baomidou.mybatisplus.annotation.IdType;"); result.add("import com.baomidou.mybatisplus.annotation.IdType;");
} }

View File

@ -3,12 +3,13 @@ package net.lab1024.sa.base.module.support.codegenerator.service.variable.backen
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import net.lab1024.sa.base.module.support.codegenerator.constant.CodeQueryFieldQueryTypeEnum; import net.lab1024.sa.base.module.support.codegenerator.constant.CodeQueryFieldQueryTypeEnum;
import net.lab1024.sa.base.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; import net.lab1024.sa.base.module.support.codegenerator.domain.form.CodeGeneratorConfigForm;
import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeInsertAndUpdateField;
import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeQueryField; import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeQueryField;
import net.lab1024.sa.base.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService; import net.lab1024.sa.base.module.support.codegenerator.service.variable.CodeGenerateBaseVariableService;
import org.apache.commons.collections4.CollectionUtils;
import java.util.*; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* @Author 1024创新实验室-主任:卓大 * @Author 1024创新实验室-主任:卓大
@ -74,20 +75,4 @@ public class MapperVariableService extends CodeGenerateBaseVariableService {
return variablesMap; return variablesMap;
} }
public List<String> getPackageList(List<CodeInsertAndUpdateField> fields, CodeGeneratorConfigForm form) {
if (CollectionUtils.isEmpty(fields)) {
return new ArrayList<>();
}
HashSet<String> packageList = new HashSet<>();
//1javabean相关的包
packageList.addAll(getJavaBeanImportClass(form));
//2dao
packageList.add("import " + form.getBasic().getJavaPackageName() + ".dao." + form.getBasic().getModuleName() + "Dao;" );
return new ArrayList<>(packageList);
}
} }

View File

@ -75,9 +75,6 @@ public class QueryFormVariableService extends CodeGenerateBaseVariableService {
CodeField codeField = null; CodeField codeField = null;
switch (queryTypeEnum) { switch (queryTypeEnum) {
case LIKE:
finalFieldMap.put("javaType", "String");
break;
case EQUAL: case EQUAL:
codeField = getCodeFieldByColumnName(field.getColumnNameList().get(0), form); codeField = getCodeFieldByColumnName(field.getColumnNameList().get(0), form);
if (codeField == null) { if (codeField == null) {
@ -119,6 +116,7 @@ public class QueryFormVariableService extends CodeGenerateBaseVariableService {
// lombok // lombok
packageList.add("import lombok.Data;"); packageList.add("import lombok.Data;");
packageList.add("import lombok.EqualsAndHashCode;");
List<String> packageNameList = packageList.stream().filter(Objects::nonNull).collect(Collectors.toList()); List<String> packageNameList = packageList.stream().filter(Objects::nonNull).collect(Collectors.toList());
Collections.sort(packageNameList); Collections.sort(packageNameList);

View File

@ -2,6 +2,7 @@ package net.lab1024.sa.base.module.support.codegenerator.service.variable.backen
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import net.lab1024.sa.base.common.util.SmartStringUtil; import net.lab1024.sa.base.common.util.SmartStringUtil;
import net.lab1024.sa.base.module.support.codegenerator.constant.CodeFrontComponentEnum;
import net.lab1024.sa.base.module.support.codegenerator.domain.form.CodeGeneratorConfigForm; import net.lab1024.sa.base.module.support.codegenerator.domain.form.CodeGeneratorConfigForm;
import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeField; import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeField;
import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeInsertAndUpdate; import net.lab1024.sa.base.module.support.codegenerator.domain.model.CodeInsertAndUpdate;
@ -123,7 +124,7 @@ public class UpdateFormVariableService extends CodeGenerateBaseVariableService {
} }
//文件上传 //文件上传
if (SmartStringUtil.contains(field.getFrontComponent(), "Upload")) { if (CodeFrontComponentEnum.FILE_UPLOAD.equalsValue(field.getFrontComponent())) {
finalFieldMap.put("file", "\n @JsonDeserialize(using = FileKeyVoDeserializer.class)"); finalFieldMap.put("file", "\n @JsonDeserialize(using = FileKeyVoDeserializer.class)");
packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;");
packageList.add("import net.lab1024.sa.base.common.json.deserializer.FileKeyVoDeserializer;"); packageList.add("import net.lab1024.sa.base.common.json.deserializer.FileKeyVoDeserializer;");

View File

@ -87,16 +87,16 @@ public class VOVariableService extends CodeGenerateBaseVariableService {
//字典 //字典
if (isDict(field.getColumnName(), form)) { if (isDict(field.getColumnName(), form)) {
finalFieldMap.put("dict", "\n @JsonDeserialize(using = DictValueVoDeserializer.class)"); finalFieldMap.put("dict", "\n @JsonSerialize(using = DictValueVoSerializer.class)");
packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); packageList.add("import com.fasterxml.jackson.databind.annotation.JsonSerialize;");
packageList.add("import net.lab1024.sa.base.common.json.deserializer.DictValueVoDeserializer;"); packageList.add("import net.lab1024.sa.base.common.json.serializer.DictValueVoSerializer;");
} }
//文件上传 //文件上传
if (isFile(field.getColumnName(), form)) { if (isFile(field.getColumnName(), form)) {
finalFieldMap.put("file", "\n @JsonDeserialize(using = FileKeyVoDeserializer.class)"); finalFieldMap.put("file", "\n @JsonSerialize(using = FileKeyVoSerializer.class)");
packageList.add("import com.fasterxml.jackson.databind.annotation.JsonDeserialize;"); packageList.add("import com.fasterxml.jackson.databind.annotation.JsonSerialize;");
packageList.add("import net.lab1024.sa.base.common.json.deserializer.FileKeyVoDeserializer;"); packageList.add("import net.lab1024.sa.base.common.json.serializer.FileKeyVoSerializer;");
} }
packageList.add(getJavaPackageName(codeField.getJavaType())); packageList.add(getJavaPackageName(codeField.getJavaType()));

View File

@ -2,6 +2,7 @@ package ${packageName};
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import net.lab1024.sa.base.common.enumeration.BaseEnum;
/** /**
* ${enumDesc} * ${enumDesc}

View File

@ -38,14 +38,15 @@ public interface ${name.upperCamel}Dao extends BaseMapper<${name.upperCamel}Enti
* 更新删除状态 * 更新删除状态
*/ */
long updateDeleted(@Param("${primaryKeyFieldName}")${primaryKeyJavaType} ${primaryKeyFieldName},@Param("${deletedFlag}")boolean deletedFlag); long updateDeleted(@Param("${primaryKeyFieldName}")${primaryKeyJavaType} ${primaryKeyFieldName},@Param("${deletedFlag}")boolean deletedFlag);
#end #end
#if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch") #if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch")
/** /**
* 批量更新删除状态 * 批量更新删除状态
*/ */
void batchUpdateDeleted(@Param("idList")List<${primaryKeyJavaType}> idList,@Param("${deletedFlag}")boolean deletedFlag); void batchUpdateDeleted(@Param("idList")List<${primaryKeyJavaType}> idList,@Param("${deletedFlag}")boolean deletedFlag);
#end
#end
#end
#end
#end
#end
} }

View File

@ -26,6 +26,12 @@ public class ${name.upperCamel}Entity {
#if($field.primaryKeyFlag && !$field.autoIncreaseFlag) #if($field.primaryKeyFlag && !$field.autoIncreaseFlag)
@TableId @TableId
#end #end
#if($field.columnName == "create_time")
@TableField(fill = FieldFill.INSERT)
#end
#if($field.columnName == "update_time")
@TableField(fill = FieldFill.INSERT_UPDATE)
#end
private $field.javaType $field.fieldName; private $field.javaType $field.fieldName;
#end #end

View File

@ -14,6 +14,7 @@ $importClass
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false)
public class ${name.upperCamel}QueryForm extends PageParam { public class ${name.upperCamel}QueryForm extends PageParam {
#foreach ($field in $fields) #foreach ($field in $fields)

View File

@ -17,14 +17,8 @@ public class ${name.upperCamel}VO {
#foreach ($field in $fields) #foreach ($field in $fields)
#if($field.isEnum) ${field.apiModelProperty}$!{field.notEmpty}$!{field.dict}$!{field.file}
${field.apiModelProperty}
private $field.javaType $field.fieldName; private $field.javaType $field.fieldName;
#end #end
#if(!$field.isEnum)
${field.apiModelProperty}$!{field.dict}$!{field.file}
private $field.javaType $field.fieldName;
#end
#end
} }

View File

@ -2,10 +2,17 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${daoClassName}"> <mapper namespace="${daoClassName}">
<!-- 查询结果列 -->
<sql id="base_columns">
#foreach ($field in $fields)
${tableName}.${field.columnName}#if($foreach.hasNext),#end
#end
</sql>
<!-- 分页查询 --> <!-- 分页查询 -->
<select id="queryPage" resultType="${basic.javaPackageName}.domain.vo.${name.upperCamel}VO"> <select id="queryPage" resultType="${basic.javaPackageName}.domain.vo.${name.upperCamel}VO">
SELECT SELECT
* <include refid="base_columns"/>
FROM ${tableName} FROM ${tableName}
#if($queryFields.size() > 0) #if($queryFields.size() > 0)
<where> <where>
@ -23,15 +30,15 @@
#end #end
#if(${queryField.queryTypeEnum} == "Date") #if(${queryField.queryTypeEnum} == "Date")
<if test="queryForm.${queryField.fieldName} != null"> <if test="queryForm.${queryField.fieldName} != null">
AND DATE_FORMAT(${tableName}.${queryField.columnName}, '%Y-%m-%d') = #{queryForm.${queryField.fieldName}} AND ${tableName}.${queryField.columnName} = #{queryForm.${queryField.fieldName}}
</if> </if>
#end #end
#if(${queryField.queryTypeEnum} == "DateRange") #if(${queryField.queryTypeEnum} == "DateRange")
<if test="queryForm.${queryField.fieldName}Begin != null"> <if test="queryForm.${queryField.fieldName}Begin != null">
AND DATE_FORMAT(${tableName}.${queryField.columnName}, '%Y-%m-%d') &gt;= #{queryForm.${queryField.fieldName}Begin} AND ${tableName}.${queryField.columnName} &gt;= #{queryForm.${queryField.fieldName}Begin}
</if> </if>
<if test="queryForm.${queryField.fieldName}End != null"> <if test="queryForm.${queryField.fieldName}End != null">
AND DATE_FORMAT(${tableName}.${queryField.columnName}, '%Y-%m-%d') &lt;= #{queryForm.${queryField.fieldName}End} AND ${tableName}.${queryField.columnName} &lt;= #{queryForm.${queryField.fieldName}End}
</if> </if>
#end #end
#end #end
@ -39,21 +46,10 @@
#end #end
</select> </select>
#if($dao.deletedFieldUpperName != $null)
<update id="batchUpdate${dao.deletedFieldUpperName}">
update ${mapper.tableName} set ${mapper.deletedColumnName} = #{deletedFlag}
where ${mapper.mainKeyColumnName} in
<foreach collection="idList" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</update>
#end
#if($deleteInfo.isSupportDelete) #if($deleteInfo.isSupportDelete)
### 假删除 ### 假删除
#if(!${deleteInfo.isPhysicallyDeleted}) #if(!${deleteInfo.isPhysicallyDeleted})
#if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch") #if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch")
<update id="batchUpdateDeleted"> <update id="batchUpdateDeleted">
update ${tableName} set deleted_flag = #{deletedFlag} update ${tableName} set deleted_flag = #{deletedFlag}
where ${primaryKeyColumnName} in where ${primaryKeyColumnName} in
@ -71,4 +67,5 @@
#end #end
#end #end
#end #end
</mapper> </mapper>

View File

@ -64,7 +64,7 @@ public class ${name.upperCamel}Service {
#end #end
#if($deleteInfo.isSupportDelete) #if($deleteInfo.isSupportDelete)
#if($deleteInfo.deleteEnum == "BATCH" || $deleteInfo.deleteEnum == "SingleAndBatch") #if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch")
/** /**
* 批量删除 * 批量删除
* *

View File

@ -62,7 +62,7 @@
<a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}" /> <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}" />
</a-form-item> </a-form-item>
#end #end
#if($field.frontComponent == "Upload") #if($field.frontComponent == "FileUpload")
<a-form-item label="$!{field.label}" name="${field.fieldName}"> <a-form-item label="$!{field.label}" name="${field.fieldName}">
<FileUpload <FileUpload
:defaultFileList="form.$!{field.fieldName}" :defaultFileList="form.$!{field.fieldName}"
@ -122,7 +122,7 @@
<a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}" /> <a-date-picker show-time valueFormat="YYYY-MM-DD HH:mm:ss" v-model:value="form.$!{field.fieldName}" style="width: 100%" placeholder="$!{field.label}" />
</a-form-item> </a-form-item>
#end #end
#if($field.frontComponent == "Upload") #if($field.frontComponent == "FileUpload")
<a-form-item label="$!{field.label}" name="${field.fieldName}"> <a-form-item label="$!{field.label}" name="${field.fieldName}">
<FileUpload <FileUpload
:defaultFileList="form.$!{field.fieldName}" :defaultFileList="form.$!{field.fieldName}"
@ -188,7 +188,6 @@
const formRef = ref(); const formRef = ref();
const formDefault = { const formDefault = {
$!{primaryKeyFieldName}: undefined,
#foreach ($field in $formFields) #foreach ($field in $formFields)
$!{field.fieldName}: undefined, //$!{field.label} $!{field.fieldName}: undefined, //$!{field.label}
#end #end

View File

@ -99,7 +99,7 @@
:row-selection="{ selectedRowKeys: selectedRowKeyList, onChange: onSelectChange }" :row-selection="{ selectedRowKeys: selectedRowKeyList, onChange: onSelectChange }"
#end #end
> >
<template #bodyCell="{ text, record, column }"> <template #bodyCell="{ record, column }">
<template v-if="column.dataIndex === 'action'"> <template v-if="column.dataIndex === 'action'">
<div class="smart-table-operate"> <div class="smart-table-operate">
#if($insertAndUpdate.isSupportInsertAndUpdate) #if($insertAndUpdate.isSupportInsertAndUpdate)
@ -145,6 +145,7 @@
#foreach ($import in $frontImportList) #foreach ($import in $frontImportList)
$!{import} $!{import}
#end #end
// ---------------------------- 表格列 ---------------------------- // ---------------------------- 表格列 ----------------------------
const columns = ref([ const columns = ref([

View File

@ -2,6 +2,7 @@ import { convertUpperCamel } from '/@/utils/str-util';
// -------------------------------- java 类型 -------------------------------- // -------------------------------- java 类型 --------------------------------
export const JavaTypeMap = new Map(); export const JavaTypeMap = new Map();
JavaTypeMap.set('bit', 'Boolean');
JavaTypeMap.set('int', 'Integer'); JavaTypeMap.set('int', 'Integer');
JavaTypeMap.set('tinyint', 'Integer'); JavaTypeMap.set('tinyint', 'Integer');
JavaTypeMap.set('smallint', 'Integer'); JavaTypeMap.set('smallint', 'Integer');
@ -37,6 +38,7 @@ export function getJavaType(dataType) {
// -------------------------------- js 类型 -------------------------------- // -------------------------------- js 类型 --------------------------------
export const JsTypeMap = new Map(); export const JsTypeMap = new Map();
JsTypeMap.set('bit', 'Boolean');
JsTypeMap.set('int', 'Number'); JsTypeMap.set('int', 'Number');
JsTypeMap.set('tinyint', 'Number'); JsTypeMap.set('tinyint', 'Number');
JsTypeMap.set('smallint', 'Number'); JsTypeMap.set('smallint', 'Number');
@ -56,11 +58,10 @@ JsTypeMap.set('date', 'Date');
JsTypeMap.set('datetime', 'Date'); JsTypeMap.set('datetime', 'Date');
export const JsTypeList = [ export const JsTypeList = [
'Boolean', //
'Number', // 'Number', //
'String', // 'String', //
'Date', // 'Date', //
'Boolean', //
'String', //
]; ];
export function getJsType(dataType) { export function getJsType(dataType) {
@ -70,8 +71,9 @@ export function getJsType(dataType) {
// -------------------------------- 前端组件 -------------------------------- // -------------------------------- 前端组件 --------------------------------
export const FrontComponentMap = new Map(); export const FrontComponentMap = new Map();
FrontComponentMap.set('bit', 'BooleanSelect');
FrontComponentMap.set('int', 'InputNumber'); FrontComponentMap.set('int', 'InputNumber');
FrontComponentMap.set('tinyint', 'BooleanSelect'); FrontComponentMap.set('tinyint', 'InputNumber');
FrontComponentMap.set('smallint', 'InputNumber'); FrontComponentMap.set('smallint', 'InputNumber');
FrontComponentMap.set('integer', 'InputNumber'); FrontComponentMap.set('integer', 'InputNumber');
FrontComponentMap.set('year', 'Date'); FrontComponentMap.set('year', 'Date');

View File

@ -68,11 +68,12 @@
if (deletedFlagColumn) { if (deletedFlagColumn) {
deleteFlagColumnName.value = deletedFlagColumn.columnName; deleteFlagColumnName.value = deletedFlagColumn.columnName;
} }
console.log(deletedFlagColumn);
// //
let deleteInfo = config.delete; let deleteInfo = config.deleteInfo;
formData.isSupportDelete = deleteInfo && deleteInfo.isSupportDelete ? deleteInfo.isSupportDelete : true; formData.isSupportDelete = deleteInfo && deleteInfo.isSupportDelete;
formData.isPhysicallyDeleted = deleteInfo && deleteInfo.isPhysicallyDeleted ? deleteInfo.isPhysicallyDeleted : !deletedFlagColumn; formData.isPhysicallyDeleted = deleteInfo && deleteInfo.isPhysicallyDeleted ? deleteInfo.isPhysicallyDeleted : !deletedFlagColumn;
formData.deleteEnum = deleteInfo && deleteInfo.deleteEnum ? deleteInfo.deleteEnum : CODE_DELETE_ENUM.SINGLE_AND_BATCH.value; formData.deleteEnum = deleteInfo && deleteInfo.deleteEnum ? deleteInfo.deleteEnum : CODE_DELETE_ENUM.SINGLE_AND_BATCH.value;
} }

View File

@ -12,7 +12,7 @@
title="代码配置" title="代码配置"
style="" style=""
:open="visibleFlag" :open="visibleFlag"
:width="1000" :width="1500"
:footerStyle="{ textAlign: 'right' }" :footerStyle="{ textAlign: 'right' }"
@close="onClose" @close="onClose"
:maskClosable="false" :maskClosable="false"

View File

@ -11,7 +11,7 @@
<a-drawer <a-drawer
title="代码预览" title="代码预览"
:open="visibleFlag" :open="visibleFlag"
:width="1200" :width="1500"
:footerStyle="{ textAlign: 'right' }" :footerStyle="{ textAlign: 'right' }"
:bodyStyle="{ padding: '8px 24px' }" :bodyStyle="{ padding: '8px 24px' }"
@close="onClose" @close="onClose"