From bd33d9649906e88271725a7d450b0c49afd54df5 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 20 一月 2026 15:30:16 +0800
Subject: [PATCH] 经销商管理

---
 admin/src/views/business/shop.vue                                            |    2 
 server/dmmall_service/src/main/resources/templates/controller.vm             |   85 ++++++++
 admin/src/components/business/OperaShopInfoWindow.vue                        |    1 
 server/dmmall_service/src/main/resources/templates/service.vm                |   97 +++++++++
 server/pom.xml                                                               |   10 +
 server/dmmall_service/src/main/resources/templates/entity.vm                 |   32 +++
 server/dmmall_service/src/main/resources/templates/serviceImpl.vm            |  118 +++++++++++
 server/dmmall_service/src/main/java/com/doumee/core/utils/CodeGenerator.java |  208 ++++++++++++++++++++
 server/dmmall_service/src/main/resources/templates/mapper.vm                 |   12 +
 9 files changed, 563 insertions(+), 2 deletions(-)

diff --git a/admin/src/components/business/OperaShopInfoWindow.vue b/admin/src/components/business/OperaShopInfoWindow.vue
index ce95283..ca299db 100644
--- a/admin/src/components/business/OperaShopInfoWindow.vue
+++ b/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>
diff --git a/admin/src/views/business/shop.vue b/admin/src/views/business/shop.vue
index 3f77ae9..301effe 100644
--- a/admin/src/views/business/shop.vue
+++ b/admin/src/views/business/shop.vue
@@ -184,7 +184,7 @@
         })
     },
     showDetail (row) {
-      this.$refs.OperaShopInfoWindow.open('缁忛攢鍟嗚鎯�', row)
+      this.$refs.OperaShopInfoWindow.open('缁忛攢鍟嗚鎯呫��'+row.name+'銆�', row)
     }
   }
 }
diff --git a/server/dmmall_service/src/main/java/com/doumee/core/utils/CodeGenerator.java b/server/dmmall_service/src/main/java/com/doumee/core/utils/CodeGenerator.java
new file mode 100644
index 0000000..7e38616
--- /dev/null
+++ b/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";
+        // 鑾峰彇琛ㄤ俊鎭苟鐢熸垚浠g爜
+        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();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/server/dmmall_service/src/main/resources/templates/controller.vm b/server/dmmall_service/src/main/resources/templates/controller.vm
new file mode 100644
index 0000000..77255ce
--- /dev/null
+++ b/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));
+    }
+}
diff --git a/server/dmmall_service/src/main/resources/templates/entity.vm b/server/dmmall_service/src/main/resources/templates/entity.vm
new file mode 100644
index 0000000..dd73b45
--- /dev/null
+++ b/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
+}
diff --git a/server/dmmall_service/src/main/resources/templates/mapper.vm b/server/dmmall_service/src/main/resources/templates/mapper.vm
new file mode 100644
index 0000000..b250d65
--- /dev/null
+++ b/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}> {
+}
diff --git a/server/dmmall_service/src/main/resources/templates/service.vm b/server/dmmall_service/src/main/resources/templates/service.vm
new file mode 100644
index 0000000..33ea31b
--- /dev/null
+++ b/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);
+}
diff --git a/server/dmmall_service/src/main/resources/templates/serviceImpl.vm b/server/dmmall_service/src/main/resources/templates/serviceImpl.vm
new file mode 100644
index 0000000..5ff71f2
--- /dev/null
+++ b/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);
+    }
+}
diff --git a/server/pom.xml b/server/pom.xml
index 9be2e51..b078b94 100644
--- a/server/pom.xml
+++ b/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>

--
Gitblit v1.9.3