package com.iailab.module.infra.convert.codegen; import com.iailab.framework.common.util.collection.CollectionUtils; import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.module.infra.controller.admin.codegen.vo.CodegenDetailRespVO; import com.iailab.module.infra.controller.admin.codegen.vo.CodegenPreviewRespVO; import com.iailab.module.infra.controller.admin.codegen.vo.column.CodegenColumnRespVO; import com.iailab.module.infra.controller.admin.codegen.vo.table.CodegenTableRespVO; import com.iailab.module.infra.dal.dataobject.codegen.CodegenColumnDO; import com.iailab.module.infra.dal.dataobject.codegen.CodegenTableDO; import com.baomidou.mybatisplus.generator.config.po.TableField; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import org.apache.ibatis.type.JdbcType; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; import org.mapstruct.Named; import org.mapstruct.factory.Mappers; import java.util.List; import java.util.Map; @Mapper public interface CodegenConvert { CodegenConvert INSTANCE = Mappers.getMapper(CodegenConvert.class); // ========== TableInfo 相关 ========== @Mappings({ @Mapping(source = "name", target = "tableName"), @Mapping(source = "comment", target = "tableComment"), }) CodegenTableDO convert(TableInfo bean); List convertList(List list); @Mappings({ @Mapping(source = "name", target = "columnName"), @Mapping(source = "metaInfo.jdbcType", target = "dataType", qualifiedByName = "getDataType"), @Mapping(source = "comment", target = "columnComment"), @Mapping(source = "metaInfo.nullable", target = "nullable"), @Mapping(source = "keyFlag", target = "primaryKey"), @Mapping(source = "columnType.type", target = "javaType"), @Mapping(source = "propertyName", target = "javaField"), }) CodegenColumnDO convert(TableField bean); @Named("getDataType") default String getDataType(JdbcType jdbcType) { return jdbcType.name(); } // ========== 其它 ========== default CodegenDetailRespVO convert(CodegenTableDO table, List columns) { CodegenDetailRespVO respVO = new CodegenDetailRespVO(); respVO.setTable(BeanUtils.toBean(table, CodegenTableRespVO.class)); respVO.setColumns(BeanUtils.toBean(columns, CodegenColumnRespVO.class)); return respVO; } default List convert(Map codes) { return CollectionUtils.convertList(codes.entrySet(), entry -> new CodegenPreviewRespVO().setFilePath(entry.getKey()).setCode(entry.getValue())); } }