| admin/src/components/business/OperaShopInfoWindow.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| admin/src/views/business/shop.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| server/dmmall_service/src/main/java/com/doumee/core/utils/CodeGenerator.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| server/dmmall_service/src/main/resources/templates/controller.vm | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| server/dmmall_service/src/main/resources/templates/entity.vm | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| server/dmmall_service/src/main/resources/templates/mapper.vm | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| server/dmmall_service/src/main/resources/templates/service.vm | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| server/dmmall_service/src/main/resources/templates/serviceImpl.vm | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| server/pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
admin/src/components/business/OperaShopInfoWindow.vue
@@ -199,7 +199,6 @@ </el-table-column> <el-table-column prop="price" label="å®ä»ä»·æ ¼(å )" align="center" min-width="200px"></el-table-column> <el-table-column prop="shopSettlement" label="åºç»ç®éé¢(å )" align="center" min-width="150px"></el-table-column> <el-table-column prop="orderCode" label="åºç»ç®éé¢(å )" align="center" min-width="150px"></el-table-column> <el-table-column prop="returnMemberIntegral" label="è¿ç¨æ·ç§¯å" align="center" min-width="150px"></el-table-column> <el-table-column prop="returnCustomerIntegral" label="è¿ç»éå积å" align="center" min-width="150px"></el-table-column> <el-table-column prop="payDate" label="æ¯ä»æ¶é´" align="center" min-width="200px"></el-table-column> admin/src/views/business/shop.vue
@@ -184,7 +184,7 @@ }) }, showDetail (row) { this.$refs.OperaShopInfoWindow.open('ç»éå详æ ', row) this.$refs.OperaShopInfoWindow.open('ç»éå详æ ã'+row.name+'ã', row) } } } server/dmmall_service/src/main/java/com/doumee/core/utils/CodeGenerator.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,208 @@ package com.doumee.core.utils; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.runtime.RuntimeConstants; import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.sql.*; import java.util.Date; import java.util.*; // æ¼ç¤ºä¾åï¼æ§è¡ main æ¹æ³æ§å¶å°è¾å ¥æ¨¡å表åå车èªå¨çæå¯¹åºé¡¹ç®ç®å½ä¸ public class CodeGenerator { public static String packName ="com.doumee"; public static void main(String[] args) { // é ç½®æ°æ®åºè¿æ¥ String url = "jdbc:mysql://192.168.0.211:3306/dmmall_full"; String username = "root"; String password = "Doumee@168"; String database = "dmmall_full"; String tableName = "car_driver"; // è·å表信æ¯å¹¶çæä»£ç Map<String, Object> tableInfo = getTableInfo(url, username, password, database, tableName); generateCode(tableInfo); } public static Map<String, Object> getTableInfo(String url, String username, String password, String database, String tableName) { Map<String, Object> map = new HashMap<>(); try (Connection conn = DriverManager.getConnection(url, username, password)) { // æ¥è¯¢è¡¨æ³¨é String tableQuery = "SELECT table_comment FROM information_schema.tables WHERE table_schema = ? AND table_name = ?"; try (PreparedStatement ps = conn.prepareStatement(tableQuery)) { ps.setString(1, database); ps.setString(2, tableName); ResultSet rs = ps.executeQuery(); if (rs.next()) { map.put("tableComment", rs.getString("table_comment")); } } // æ¥è¯¢åæ®µä¿¡æ¯ auto_increment String columnQuery = "SELECT extra,column_name, column_type, column_comment FROM information_schema.columns WHERE table_schema = ? AND table_name = ? order by ordinal_position"; List<Map<String, String>> columns = new ArrayList<>(); try (PreparedStatement ps = conn.prepareStatement(columnQuery)) { ps.setString(1, database); ps.setString(2, tableName); ResultSet rs = ps.executeQuery(); int index = 1; while (rs.next()) { String javaName = toCamelCase(rs.getString("column_name")); String getJavaName = javaName.substring(0,1).toUpperCase()+javaName.substring(1); Map<String, String> columnInfo = new HashMap<>(); if(rs.getString("extra") !=null && rs.getString("extra").contains("auto_increment")){ //妿æ¯èªå¢é¿ columnInfo.put("auto","1"); // 转æ¢ä¸º Java åéå }else{ columnInfo.put("auto","0"); // 转æ¢ä¸º Java åéå } columnInfo.put("index",index++ +""); columnInfo.put("columnName", rs.getString("column_name")); columnInfo.put("javaName",javaName); // 转æ¢ä¸º Java åéå columnInfo.put("getJavaName",getJavaName); // 转æ¢ä¸º Java åéå columnInfo.put("javaType", sqlTypeToJavaType(rs.getString("column_type"))); // 转æ¢ä¸º Java ç±»å columnInfo.put("comment", rs.getString("column_comment")); columns.add(columnInfo); } } map.put("columns", columns); map.put("tableName", tableName); map.put("entityName", toCamelCase(tableName)); } catch (SQLException e) { e.printStackTrace(); } return map; } private static String sqlTypeToJavaType(String sqlType) { sqlType = sqlType.toLowerCase(); if (sqlType.contains("int")) { return "Integer"; } else if (sqlType.contains("bigint")) { return "Long"; } else if (sqlType.contains("char") || sqlType.contains("text") || sqlType.contains("varchar")) { return "String"; } else if (sqlType.contains("datetime") || sqlType.contains("timestamp")) { return "Date"; } else if (sqlType.contains("date")) { return "Date"; } else if (sqlType.contains("decimal") || sqlType.contains("double")) { return "BigDecimal"; } else { return "String"; } } private static String toCamelCase(String name) { StringBuilder result = new StringBuilder(); String[] parts = name.split("_"); for (int i = 0; i < parts.length; i++) { if (i == 0) { result.append(parts[i].toLowerCase()); } else { result.append(Character.toUpperCase(parts[i].charAt(0))).append(parts[i].substring(1).toLowerCase()); } } return result.toString(); } private static void generateCode(Map<String, Object> tableInfo) { // 读åè¡¨ä¿¡æ¯ String entityName = (String) tableInfo.get("entityName"); String tableName = (String) tableInfo.get("tableName"); String tableComment = (String) tableInfo.get("tableComment"); List<Map<String, String>> columns = (List<Map<String, String>>) tableInfo.get("columns"); String templateDir = "D:\\code\\idea\\doumee_code\\server\\src\\main\\resources\\templates"; // æ¨¡æ¿æä»¶çè·¯å¾ Properties p = new Properties(); // æå®æ¨¡æ¿çå è½½ä½ç½® p.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH, templateDir); // æå®è¾å ¥ç¼ç p.setProperty(VelocityEngine.INPUT_ENCODING, "UTF-8"); p.setProperty(RuntimeConstants.RESOURCE_LOADER, "file"); p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader"); p.setProperty("velocimacro.library", "macro_library.vm"); // 设置å®åºæä»¶å p.setProperty("velocimacro.library.autoreload", "true"); // å 许èªå¨éæ°å è½½å®åº p.setProperty("velocimacro.permissions.allow.inline.to.replace.global", "true"); // å 许å è宿¿æ¢å ¨å±å® p.setProperty("velocimacro.library", "/templates/macro_library.vm"); // 设置å®åºæä»¶å p.setProperty("velocimacro.library.autoreload", "true"); // å 许èªå¨éæ°å è½½å®åº // 设置 Velocity é ç½® VelocityEngine velocityEngine = new VelocityEngine(); velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); velocityEngine.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); velocityEngine.init(); // é 置模æ¿ç®å½ // 设置è¾åºç®å½ String outputDir = "D:\\code\\idea\\doumee_code\\server\\src\\main\\java\\com\\testcom"; // è¾åºçä»£ç æä»¶å¤¹è·¯å¾ String baseName = entityName.substring(0, 1).toUpperCase() + entityName.substring(1); // å建 Velocity ä¸ä¸æ Map<String,String> pack = new HashMap<>(); pack.put("Base",packName); pack.put("Entity",packName+".dao.businees.model"); pack.put("Controller",packName+".api.businees"); pack.put("Mapper",packName+".dao.businees"); pack.put("Service",packName+".service.businees"); pack.put("ServiceImpl",packName+".service.businees.impl"); VelocityContext context = new VelocityContext(); context.put("package",pack); // 设置å è·¯å¾ context.put("entityName", baseName); context.put("entityNameLower", entityName); context.put("entityNameLowerFull", entityName.toLowerCase()); context.put("tableName", tableName); context.put("tableComment", tableComment); context.put("columns", columns); context.put("nowDate", DateUtil.getPlusTime2(new Date())); // çæ Entity æä»¶ generateFile(velocityEngine, context, "entity.vm", baseName, outputDir + "/dao/businees/model/" , ".java"); // çæ Mapper æä»¶ generateFile(velocityEngine, context, "mapper.vm", baseName, outputDir + "/dao/businees/" , "Mapper.java"); // çæ Service æ¥å£æä»¶ generateFile(velocityEngine, context, "service.vm", baseName, outputDir + "/service/businees/" , "Service.java"); // çæ ServiceImpl æä»¶ generateFile(velocityEngine, context, "serviceImpl.vm", baseName, outputDir + "/service/businees/impl/" , "ServiceImpl.java"); // çæ Controller æä»¶ generateFile(velocityEngine, context, "controller.vm", baseName, outputDir + "/api/businees/", "Controller.java"); } private static void generateFile(VelocityEngine velocityEngine, VelocityContext context, String templateName, String baseName,String outputFilePath,String endName) { // è·åæ¨¡æ¿ File file = new File(outputFilePath); if(!file.isDirectory()){ file.mkdirs(); } System.out.println(file.isFile()); Template template = velocityEngine.getTemplate( "templates/"+templateName); // å建æä»¶è¾åºæµ try{ File f = new File(outputFilePath+baseName+endName); if(f.isFile()){ f.delete(); } f.createNewFile(); // å°ä¸ä¸ææ°æ®æ¸²æå°æ¨¡æ¿ä¸ FileWriter writer = new FileWriter(outputFilePath+baseName+endName); template.merge(context, writer); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } } server/dmmall_service/src/main/resources/templates/controller.vm
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,85 @@ package ${package.Controller}; import ${package.Base}.core.annotation.excel.ExcelExporter; import ${package.Base}.core.annotation.pr.PreventRepeat; import ${package.Base}.core.model.ApiResponse; import ${package.Base}.core.model.PageData; import ${package.Base}.core.model.PageWrap; import ${package.Entity}.${entityName}; import ${package.Base}.core.utils.Utils; import ${package.Service}.${entityName}Service; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import ${package.Base}.api.BaseController; /** * ${tableComment}Controllerå®ä¹ * @author doumee * @date ${nowDate} */ @Api(tags = "tableNameæ¥å£") @RestController @RequestMapping("/business/${entityNameLower}") public class ${entityName}Controller extends BaseController { @Autowired private ${entityName}Service ${entityNameLower}Service; @PreventRepeat @ApiOperation("æ°å»º") @PostMapping("/create") @RequiresPermissions("business:${entityNameLowerFull}:create") public ApiResponse create(@RequestBody ${entityName} ${entityNameLower}) { return ApiResponse.success(${entityNameLower}Service.create(${entityNameLower})); } @ApiOperation("æ ¹æ®IDå é¤") @GetMapping("/delete/{id}") @RequiresPermissions("business:${entityNameLowerFull}:delete") public ApiResponse deleteById(@PathVariable Integer id) { ${entityNameLower}Service.deleteById(id); return ApiResponse.success(null); } @ApiOperation("æ¹éå é¤") @GetMapping("/delete/batch") @RequiresPermissions("business:${entityNameLowerFull}:delete") public ApiResponse deleteByIdInBatch(@RequestParam String ids) { ${entityNameLower}Service.deleteByIdInBatch(this.getIdList(ids)); return ApiResponse.success(null); } @ApiOperation("æ ¹æ®IDä¿®æ¹") @PostMapping("/updateById") @RequiresPermissions("business:${entityNameLowerFull}:update") public ApiResponse updateById(@RequestBody ${entityName} ${entityNameLower}) { ${entityNameLower}Service.updateById(${entityNameLower}); return ApiResponse.success(null); } @ApiOperation("å页æ¥è¯¢") @PostMapping("/page") @RequiresPermissions("business:${entityNameLowerFull}:query") public ApiResponse<PageData<${entityName}>> findPage (@RequestBody PageWrap<${entityName}> pageWrap) { return ApiResponse.success(${entityNameLower}Service.findPage(pageWrap)); } @ApiOperation("导åºExcel") @PostMapping("/exportExcel") @RequiresPermissions("business:${entityNameLowerFull}:exportExcel") public void exportExcel (@RequestBody PageWrap<${entityName}> pageWrap, HttpServletResponse response) { ExcelExporter.build(${entityName}.class).export(${entityNameLower}Service.findPage(pageWrap).getRecords(), "æå°_ä½ä¸æä½åå²è¡¨", response); } @ApiOperation("æ ¹æ®IDæ¥è¯¢") @GetMapping("/{id}") @RequiresPermissions("business:${entityNameLowerFull}:query") public ApiResponse findById(@PathVariable Integer id) { return ApiResponse.success(${entityNameLower}Service.findById(id)); } } server/dmmall_service/src/main/resources/templates/entity.vm
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package ${package.Entity}; import com.baomidou.mybatisplus.annotation.TableField; import com.doumee.core.annotation.excel.ExcelColumn; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; import java.math.BigDecimal; /** * ${tableComment}Modelå®ä¹ * @author doumee * @date ${nowDate} */ @Data @TableName("${tableName}") @ApiModel(value = "${entityName} å®ä½ç±»") public class ${entityName} { #foreach ($column in $columns) @ApiModelProperty("${column.comment}") @ExcelColumn(name="${column.comment}",index=${column.index} ,width=10) #if(${column.auto}=='1' and (${column.javaType}=='Integer' or ${column.javaType}=='Long') ) @TableId(type = IdType.AUTO) #end private ${column.javaType} ${column.javaName}; #end } server/dmmall_service/src/main/resources/templates/mapper.vm
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ package ${package.Mapper}; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import ${package.Entity}.${entityName}; import com.github.yulichang.base.MPJBaseMapper; /** * ${tableComment}Mapperå®ä¹ * @author doumee * @date ${nowDate} */ public interface ${entityName}Mapper extends MPJBaseMapper<${entityName}> { } server/dmmall_service/src/main/resources/templates/service.vm
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,97 @@ package ${package.Service}; import ${package.Base}.core.model.PageData; import ${package.Base}.core.model.PageWrap; import ${package.Entity}.${entityName}; import java.util.List; /** * ${tableComment}Serviceå®ä¹ * @author doumee * @date ${nowDate} */ public interface ${entityName}Service { /** * å建 * * @param model å®ä½å¯¹è±¡ * @return Integer */ Integer create(${entityName} model); /** * 主é®å é¤ * * @param id ä¸»é® */ void deleteById(Integer id); /** * å é¤ * * @param model å®ä½å¯¹è±¡ */ void delete(${entityName} model); /** * æ¹é主é®å é¤ * * @param ids 主é®é */ void deleteByIdInBatch(List<Integer> ids); /** * 䏻鮿´æ° * * @param model å®ä½å¯¹è±¡ */ void updateById(${entityName} model); /** * æ¹é䏻鮿´æ° * * @param model å®ä½é */ void updateByIdInBatch(List<${entityName}> model); /** * 䏻鮿¥è¯¢ * * @param id ä¸»é® * @return model */ ${entityName} findById(Integer id); /** * æ¡ä»¶æ¥è¯¢åæ¡è®°å½ * * @param model å®ä½å¯¹è±¡ * @return ${entityName} */ ${entityName} findOne(${entityName} model); /** * æ¡ä»¶æ¥è¯¢ * * @param model å®ä½å¯¹è±¡ * @return List<${entityName}> */ List<${entityName}> findList(${entityName} model); /** * å页æ¥è¯¢ * * @param pageWrap å页对象 * @return PageData<${entityName}> */ PageData<${entityName}> findPage(PageWrap<${entityName}> pageWrap); /** * æ¡ä»¶ç»è®¡ * * @param model å®ä½å¯¹è±¡ * @return long */ long count(${entityName} model); } server/dmmall_service/src/main/resources/templates/serviceImpl.vm
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,118 @@ package ${package.ServiceImpl}; import ${package.Base}.core.model.PageData; import ${package.Base}.core.model.PageWrap; import ${package.Entity}.${entityName}; import ${package.Base}.core.utils.Utils; import ${package.Mapper}.${entityName}Mapper; import ${package.Service}.${entityName}Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.List; /** * ${tableComment}Serviceå®ç° * @author doumee * @date ${nowDate} */ @Service public class ${entityName}ServiceImpl implements ${entityName}Service { @Autowired private ${entityName}Mapper ${entityNameLower}Mapper; @Override public Integer create(${entityName} ${entityNameLower}) { ${entityNameLower}Mapper.insert(${entityNameLower}); return ${entityNameLower}.getId(); } @Override public void deleteById(Integer id) { ${entityNameLower}Mapper.deleteById(id); } @Override public void delete(${entityName} ${entityNameLower}) { UpdateWrapper<${entityName}> deleteWrapper = new UpdateWrapper<>(${entityNameLower}); ${entityNameLower}Mapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List<Integer> ids) { if (CollectionUtils.isEmpty(ids)) { return; } ${entityNameLower}Mapper.deleteBatchIds(ids); } @Override public void updateById(${entityName} ${entityNameLower}) { ${entityNameLower}Mapper.updateById(${entityNameLower}); } @Override public void updateByIdInBatch(List<${entityName}> ${entityNameLower}s) { if (CollectionUtils.isEmpty(${entityNameLower}s)) { return; } for (${entityName} ${entityNameLower}: ${entityNameLower}s) { this.updateById(${entityNameLower}); } } @Override public ${entityName} findById(Integer id) { return ${entityNameLower}Mapper.selectById(id); } @Override public ${entityName} findOne(${entityName} ${entityNameLower}) { QueryWrapper<${entityName}> wrapper = new QueryWrapper<>(${entityNameLower}).last("limit 1"); return ${entityNameLower}Mapper.selectOne(wrapper); } @Override public List<${entityName}> findList(${entityName} ${entityNameLower}) { QueryWrapper<${entityName}> wrapper = new QueryWrapper<>(${entityNameLower}); return ${entityNameLower}Mapper.selectList(wrapper); } @Override public PageData<${entityName}> findPage(PageWrap<${entityName}> pageWrap) { IPage<${entityName}> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper<${entityName}> queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); #foreach ($column in $columns) #if(${column.javaType} !='Date') queryWrapper.lambda().eq(pageWrap.getModel().get${column.getJavaName}() != null,${entityName}::get${column.getJavaName}, pageWrap.getModel().get${column.getJavaName}()); #end #if(${column.javaType} =='Date') if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().ge(${entityName}::get${column.getJavaName}, Utils.Date.getStart(pageWrap.getModel().get${column.getJavaName}())); queryWrapper.lambda().le(${entityName}::get${column.getJavaName}, Utils.Date.getEnd(pageWrap.getModel().get${column.getJavaName}())); } #end #end for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(${entityNameLower}Mapper.selectPage(page, queryWrapper)); } @Override public long count(${entityName} ${entityNameLower}) { QueryWrapper<${entityName}> wrapper = new QueryWrapper<>(${entityNameLower}); return ${entityNameLower}Mapper.selectCount(wrapper); } } server/pom.xml
@@ -92,6 +92,16 @@ </dependency> <!-- è¿æ¥æ± --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.3.1</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version>