x1ongzhu 6 năm trước cách đây
mục cha
commit
0906c7bc2c
23 tập tin đã thay đổi với 453 bổ sung392 xóa
  1. 1 1
      src/main/java/com/izouma/awesomeadmin/dao/CheckinRecordMapper.java
  2. 25 3
      src/main/java/com/izouma/awesomeadmin/dao/CheckinRecordMapper.xml
  3. 8 0
      src/main/java/com/izouma/awesomeadmin/model/CheckinRecord.java
  4. 3 1
      src/main/java/com/izouma/awesomeadmin/service/CheckinRecordService.java
  5. 27 2
      src/main/java/com/izouma/awesomeadmin/service/impl/CheckinRecordServiceImpl.java
  6. 19 42
      src/main/java/com/izouma/awesomeadmin/web/CheckinRecordController.java
  7. 1 0
      src/main/java/com/izouma/awesomeadmin/web/GenCodeController.java
  8. 8 22
      src/main/java/com/izouma/codegenerator/ControllerGenerator.java
  9. 86 9
      src/main/java/com/izouma/codegenerator/GeneratorTool.java
  10. 8 22
      src/main/java/com/izouma/codegenerator/MapperGenerator.java
  11. 11 29
      src/main/java/com/izouma/codegenerator/MapperXmlGenerator.java
  12. 1 2
      src/main/java/com/izouma/codegenerator/ModelGenerator.java
  13. 8 22
      src/main/java/com/izouma/codegenerator/ServiceGenerator.java
  14. 8 22
      src/main/java/com/izouma/codegenerator/ServiceImplGenerator.java
  15. 4 1
      src/main/resources/templates/ControllerTemplate.vm
  16. 2 1
      src/main/resources/templates/MapperSqlServerTemplate.vm
  17. 3 1
      src/main/resources/templates/MapperTemplate.vm
  18. 178 172
      src/main/resources/templates/MapperXmlTemplate.vm
  19. 4 0
      src/main/resources/templates/ModelTemplate.vm
  20. 15 35
      src/main/resources/templates/ServiceImplTemplate.vm
  21. 2 1
      src/main/resources/templates/ServiceTemplate.vm
  22. 14 4
      src/main/vue/src/pages/CheckinRecord.vue
  23. 17 0
      src/main/vue/src/pages/CheckinRecords.vue

+ 1 - 1
src/main/java/com/izouma/awesomeadmin/dao/CheckinRecordMapper.java

@@ -32,7 +32,7 @@ public interface CheckinRecordMapper {
 
     List<CheckinRecord> query(CheckinRecord record);
 
-    List<CheckinRecord> queryTodayRecord(@Param("userId") Integer userId);
+    CheckinRecord queryDayRecord(@Param("userId") Integer userId, @Param("date") String date);
 
     List<CheckinRecord> queryMonthRecord(@Param("userId") Integer userId, @Param("yearMonth") String yearMonth);
 }

+ 25 - 3
src/main/java/com/izouma/awesomeadmin/dao/CheckinRecordMapper.xml

@@ -6,9 +6,10 @@
         <result column="del_flag" property="delFlag" jdbcType="CHAR"/>
         <result column="user_id" property="userId" jdbcType="INTEGER"/>
         <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
+        <result column="continuous" property="continuous" jdbcType="INTEGER"/>
     </resultMap>
     <sql id="Base_Column_List">
-        id, del_flag, user_id, create_time    </sql>
+        id, del_flag, user_id, create_time, continuous    </sql>
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
         select
         <include refid="Base_Column_List"/>
@@ -36,6 +37,9 @@
             <if test="createTime!= null">
                 create_time,
             </if>
+            <if test="continuous!= null">
+                continuous,
+            </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">
@@ -50,6 +54,9 @@
             <if test="createTime != null">
                 #{createTime,jdbcType=TIMESTAMP},
             </if>
+            <if test="continuous != null">
+                #{continuous,jdbcType=INTEGER},
+            </if>
         </trim>
     </insert>
     <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.CheckinRecord">
@@ -67,6 +74,9 @@
             <if test="createTime != null">
                 create_time= #{createTime,jdbcType=TIMESTAMP},
             </if>
+            <if test="continuous != null">
+                continuous= #{continuous,jdbcType=INTEGER},
+            </if>
         </set>
         where
         <if test="id != null and !&quot;&quot;.equals(id)">
@@ -99,9 +109,13 @@
             <if test="record.createTime != null and !&quot;&quot;.equals(record.createTime)">
                 and create_time = #{record.createTime}
             </if>
+            <if test="record.continuous != null and !&quot;&quot;.equals(record.continuous)">
+                and continuous = #{record.continuous}
+            </if>
             <if test="record.searchKey != null and !&quot;&quot;.equals(record.searchKey)">
                 <trim prefix="and (" suffix=")" prefixOverrides="OR">
                     OR user_id LIKE concat('%',#{record.searchKey},'%')
+                    OR continuous LIKE concat('%',#{record.searchKey},'%')
                 </trim>
             </if>
 
@@ -179,9 +193,13 @@
             <if test="createTime != null and !&quot;&quot;.equals(createTime)">
                 and create_time = #{createTime}
             </if>
+            <if test="continuous != null and !&quot;&quot;.equals(continuous)">
+                and continuous = #{continuous}
+            </if>
             <if test="searchKey != null and !&quot;&quot;.equals(searchKey)">
                 <trim prefix="and (" suffix=")" prefixOverrides="OR">
                     OR user_id LIKE concat('%',#{searchKey},'%')
+                    OR continuous LIKE concat('%',#{searchKey},'%')
                 </trim>
             </if>
             <if test="advancedQuery != null and !&quot;&quot;.equals(advancedQuery)">
@@ -255,6 +273,9 @@
             <if test="createTime != null and !&quot;&quot;.equals(createTime)">
                 and create_time = #{createTime}
             </if>
+            <if test="continuous != null and !&quot;&quot;.equals(continuous)">
+                and continuous = #{continuous}
+            </if>
 
         </where>
         LIMIT 1
@@ -279,10 +300,11 @@
         </where>
         order by id desc
     </select>
-    <select id="queryTodayRecord" resultType="com.izouma.awesomeadmin.model.CheckinRecord">
+    <select id="queryDayRecord" resultType="com.izouma.awesomeadmin.model.CheckinRecord">
         SELECT
         <include refid="Base_Column_List"/>
-        FROM checkin_record WHERE del_flag = 'N' AND to_days(create_time) = to_days(now()) AND user_id = #{userId}
+        FROM checkin_record WHERE del_flag = 'N' AND to_days(create_time) = to_days(#{date}) AND user_id = #{userId}
+        LIMIT 1
     </select>
     <select id="queryMonthRecord" resultType="com.izouma.awesomeadmin.model.CheckinRecord">
         SELECT

+ 8 - 0
src/main/java/com/izouma/awesomeadmin/model/CheckinRecord.java

@@ -12,6 +12,7 @@ public class CheckinRecord{
     private String delFlag;
     private Integer userId;
     private Date createTime;
+    private Integer continuous;
 
     private String idStr;
 
@@ -55,6 +56,13 @@ public class CheckinRecord{
     public void setCreateTime(Date createTime){
         this.createTime = createTime;
     }
+    public Integer getContinuous(){
+        return this.continuous;
+    }
+
+    public void setContinuous(Integer continuous){
+        this.continuous = continuous;
+    }
 
     public String getSearchKey() {
         return searchKey;

+ 3 - 1
src/main/java/com/izouma/awesomeadmin/service/CheckinRecordService.java

@@ -25,7 +25,9 @@ public interface CheckinRecordService {
 
     boolean updateCheckinRecord(CheckinRecord record);
 
-    Map<String,Object> checkin();
+    Map<String, Object> checkin();
+
+    int continuousDays();
 
     List<CheckinRecord> getMonthCheckinRecord(String yearMonth);
 }

+ 27 - 2
src/main/java/com/izouma/awesomeadmin/service/impl/CheckinRecordServiceImpl.java

@@ -7,6 +7,8 @@ import com.izouma.awesomeadmin.model.UserInfo;
 import com.izouma.awesomeadmin.service.IntegralRecordService;
 import com.izouma.awesomeadmin.service.SystemConfigService;
 import com.izouma.awesomeadmin.service.UserInfoService;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.apache.commons.lang3.time.DateUtils;
 import org.apache.log4j.Logger;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -155,14 +157,18 @@ public class CheckinRecordServiceImpl implements CheckinRecordService {
             Map<String, Object> map = new HashMap<>();
             UserInfo userInfo = (UserInfo) SecurityUtils.getSubject().getPrincipal();
             userInfo = userInfoService.getUserInfoById(userInfo.getId().toString());
-            List<CheckinRecord> list = checkinRecordMapper.queryTodayRecord(userInfo.getId());
-            if (list != null && list.size() > 0) {
+            CheckinRecord record = checkinRecordMapper.queryDayRecord(userInfo.getId(), DateFormatUtils.format(new Date(), "yyyy-MM-dd"));
+            if (record != null) {
                 throw new RuntimeException("您今日已签到");
             }
             int checkinIntegral = systemConfigService.getInt("checkin_integral", 50);
+            record = checkinRecordMapper.queryDayRecord(userInfo.getId(), DateFormatUtils.format(DateUtils.addDays(new Date(), -1), "yyyy-MM-dd"));
 
             CheckinRecord checkinRecord = new CheckinRecord();
             checkinRecord.setUserId(userInfo.getId());
+            if (record != null) {
+                record.setContinuous(record.getContinuous() + 1);
+            }
             createCheckinRecord(checkinRecord);
 
             UserInfo u = new UserInfo();
@@ -187,6 +193,25 @@ public class CheckinRecordServiceImpl implements CheckinRecordService {
         return null;
     }
 
+    @Override
+    public int continuousDays() {
+        logger.info("continuousDays");
+        try {
+            UserInfo userInfo = (UserInfo) SecurityUtils.getSubject().getPrincipal();
+            CheckinRecord record = checkinRecordMapper.queryDayRecord(userInfo.getId(), DateFormatUtils.format(new Date(), "yyyy-MM-dd"));
+            if (record != null) {
+                return record.getContinuous();
+            }
+            record = checkinRecordMapper.queryDayRecord(userInfo.getId(), DateFormatUtils.format(DateUtils.addDays(new Date(), -1), "yyyy-MM-dd"));
+            if (record != null) {
+                return record.getContinuous();
+            }
+        } catch (Exception e) {
+            logger.error("continuousDays", e);
+        }
+        return 0;
+    }
+
     @Override
     public List<CheckinRecord> getMonthCheckinRecord(String yearMonth) {
         logger.info("getMonthCheckinRecord");

+ 19 - 42
src/main/java/com/izouma/awesomeadmin/web/CheckinRecordController.java

@@ -1,9 +1,11 @@
 package com.izouma.awesomeadmin.web;
 
 import java.util.*;
+import java.util.function.Function;
 
 import com.izouma.awesomeadmin.util.ExportExcelUtil;
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
 import org.apache.shiro.authz.annotation.RequiresAuthentication;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -17,9 +19,6 @@ import com.izouma.awesomeadmin.service.CheckinRecordService;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-/**
- * controller类
- */
 @Controller
 @RequestMapping("/checkinRecord")
 public class CheckinRecordController {
@@ -27,9 +26,6 @@ public class CheckinRecordController {
     @Autowired
     private CheckinRecordService checkinRecordService;
 
-    /**
-     * <p>获取全部记录。</p>
-     */
     @RequiresAuthentication
     @RequestMapping(value = "/all", method = RequestMethod.GET)
     @ResponseBody
@@ -38,9 +34,6 @@ public class CheckinRecordController {
         return new Result(true, pp);
     }
 
-    /**
-     * <p>根据Id。</p>
-     */
     @RequestMapping(value = "/getCheckinRecord", method = RequestMethod.GET)
     @ResponseBody
     public Result getCheckinRecord(@RequestParam(required = false, value = "id") String id) {
@@ -48,9 +41,6 @@ public class CheckinRecordController {
         return new Result(true, data);
     }
 
-    /**
-     * <p>根据条件获取。</p>
-     */
     @RequestMapping(value = "/getOne", method = RequestMethod.GET)
     @ResponseBody
     public Result getOne(CheckinRecord record) {
@@ -58,10 +48,6 @@ public class CheckinRecordController {
         return new Result(true, data);
     }
 
-
-    /**
-     * <p>分页查询。</p>
-     */
     @RequestMapping(value = "/page", method = RequestMethod.GET)
     @ResponseBody
     public Result page(Page page, CheckinRecord record) {
@@ -74,10 +60,6 @@ public class CheckinRecordController {
         return new Result(true, result);
     }
 
-
-    /**
-     * <p>保存。</p>
-     */
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @ResponseBody
     public Result save(CheckinRecord record) {
@@ -88,9 +70,6 @@ public class CheckinRecordController {
         return new Result(false, "保存异常");
     }
 
-    /**
-     * <p>更新信息。</p>
-     */
     @RequestMapping(value = "/update", method = RequestMethod.POST)
     @ResponseBody
     public Result updateCheckinRecord(CheckinRecord record) {
@@ -101,9 +80,6 @@ public class CheckinRecordController {
         return new Result(false, "保存异常");
     }
 
-    /**
-     * <p>删除。</p>
-     */
     @RequestMapping(value = "/del", method = RequestMethod.POST)
     @ResponseBody
     public Result deleteCheckinRecord(CheckinRecord record) {
@@ -115,38 +91,28 @@ public class CheckinRecordController {
         return new Result(false, "删除异常");
     }
 
-    /**
-     * 导出Excel
-     *
-     * @param request
-     * @param response
-     * @param record
-     * @throws Exception
-     */
     @RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
     @ResponseBody
     public void exportExcel(HttpServletRequest request, HttpServletResponse response, CheckinRecord record) throws Exception {
 
         List<CheckinRecord> checkinRecords = checkinRecordService.getCheckinRecordList(record);
 
-
         String sheetName = "checkin_record";
         String titleName = "签到记录数据表";
         String fileName = "签到记录表";
-        int columnNumber = 4;
-        int[] columnWidth = {20, 20, 20, 20};
-        String[] columnName = {"", "删除标识", "用户id", "创建时间"};
-        String[][] dataList = new String[checkinRecords.size()][4];
+        int columnNumber = 5;
+        int[] columnWidth = {20, 20, 20, 20, 20};
+        String[] columnName = {"", "删除标识", "用户id", "创建时间", "连续天数"};
+        String[][] dataList = new String[checkinRecords.size()][5];
 
         for (int i = 0; i < checkinRecords.size(); i++) {
-
             dataList[i][0] = String.valueOf(checkinRecords.get(i).getId());
             dataList[i][1] = String.valueOf(checkinRecords.get(i).getDelFlag());
             dataList[i][2] = String.valueOf(checkinRecords.get(i).getUserId());
             dataList[i][3] = String.valueOf(checkinRecords.get(i).getCreateTime());
+            dataList[i][4] = String.valueOf(checkinRecords.get(i).getContinuous());
         }
 
-
         ExportExcelUtil.ExportWithResponse(sheetName, titleName, fileName,
                 columnNumber, columnWidth, columnName, dataList, response);
     }
@@ -162,13 +128,24 @@ public class CheckinRecordController {
         return new Result(false, "签到失败");
     }
 
+    @RequestMapping("/continuousDays")
+    @ResponseBody
+    @RequiresAuthentication
+    public Result continuousDays() {
+        int continuousDays = checkinRecordService.continuousDays();
+        return new Result(true, continuousDays);
+    }
+
     @RequestMapping("/monthRecord")
     @ResponseBody
     @RequiresAuthentication
     public Result monthRecord(String yearMonth) {
         List<CheckinRecord> list = checkinRecordService.getMonthCheckinRecord(yearMonth);
         if (list != null) {
-            return new Result(true, list);
+            list.sort(Comparator.comparing(CheckinRecord::getCreateTime));
+            String[] arr = list.stream().map(checkinRecord -> DateFormatUtils.format(checkinRecord.getCreateTime(), "yyyyMMdd"))
+                    .toArray(String[]::new);
+            return new Result(true, arr);
         }
         return new Result(false, "失败");
     }

+ 1 - 0
src/main/java/com/izouma/awesomeadmin/web/GenCodeController.java

@@ -114,6 +114,7 @@ public class GenCodeController {
     @ResponseBody
     public Result updateGenCode(@RequestBody GenCode record) {
         try {
+            record.setUpdate(true);
             Gson gson = new Gson();
             record.setGenJson(gson.toJson(record));
             genCode(record);

+ 8 - 22
src/main/java/com/izouma/codegenerator/ControllerGenerator.java

@@ -2,6 +2,7 @@ package com.izouma.codegenerator;
 
 
 import com.izouma.awesomeadmin.model.GenCode;
+import org.apache.log4j.Logger;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
@@ -12,42 +13,27 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 public class ControllerGenerator {
+    private static final Logger LOGGER = Logger.getLogger(ControllerGenerator.class);
+
     public static void GenController(GenCode model) {
         try {
             List<String> imports = new ArrayList<>();
             imports = GeneratorTool.removeDuplicated(imports);
 
-            String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
-            Properties pro = new Properties();
-            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
-            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
-            Velocity.init(pro);
             ToolManager manager = new ToolManager(true, true);
             VelocityContext context = new VelocityContext(manager.createContext());
             context.put("imports", imports);
             context.put("model", model);
             Template t = Velocity.getTemplate("ControllerTemplate.vm");
 
-            String targetFile = model.getClassName() + "Controller.java";
-            File file = new File(model.getJavaPath() + "/web", targetFile);
-            if (!file.getParentFile().exists())
-                file.getParentFile().mkdirs();
-            if (!file.exists())
-                file.createNewFile();
-
-            FileOutputStream outStream = new FileOutputStream(file);
-            OutputStreamWriter writer = new OutputStreamWriter(outStream,
-                    "UTF-8");
-            BufferedWriter sw = new BufferedWriter(writer);
-            t.merge(context, sw);
-            sw.flush();
-            sw.close();
-            outStream.close();
-            System.out.println("成功生成Controller:" + file.getAbsolutePath());
-
+            Path targetFile = Paths.get(model.getJavaPath(), "web", model.getClassName() + "Controller.java").toAbsolutePath();
+            GeneratorTool.merge(targetFile, context, t, model.getUpdate());
+            LOGGER.info("成功生成Controller:" + targetFile.toString());
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 86 - 9
src/main/java/com/izouma/codegenerator/GeneratorTool.java

@@ -2,12 +2,35 @@ package com.izouma.codegenerator;
 
 import com.izouma.awesomeadmin.model.GenCode;
 import com.izouma.awesomeadmin.model.TableField;
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.text.CaseUtils;
-
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.velocity.Template;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.context.Context;
+import org.hibernate.validator.internal.util.privilegedactions.GetResource;
+
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class GeneratorTool {
+    public static void initVelocity() {
+        String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
+        Properties pro = new Properties();
+        pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
+        pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
+        Velocity.init(pro);
+    }
+
     public static List<String> getImports(GenCode model) {
         List<String> imports = new ArrayList<>();
         for (TableField field : model.getFields()) {
@@ -75,18 +98,17 @@ public class GeneratorTool {
         return jdbcType.toUpperCase();
     }
 
-    public static List removeDuplicated(List list) {
-        List newList = new ArrayList();
-        for (Object obj : list) {
-            if (!newList.contains(obj)) {
-                newList.add(obj);
+    public static List<String> removeDuplicated(List<String> list) {
+        List<String> newList = new ArrayList<>();
+        for (String s : list) {
+            if (!newList.contains(s)) {
+                newList.add(s);
             }
         }
         return newList;
     }
 
 
-
     public static String SqlServerJdbcType2Mysql(String jdbcType) {
 
         if (jdbcType.equalsIgnoreCase("int identity")) {
@@ -95,15 +117,70 @@ public class GeneratorTool {
             return "varchar";
         } else if (jdbcType.equalsIgnoreCase("ntext")) {
             return "text";
-        }else if (jdbcType.equalsIgnoreCase("nchar")) {
+        } else if (jdbcType.equalsIgnoreCase("nchar")) {
             return "char";
         }
         return jdbcType;
     }
 
-    public static void main(String[] args) {
+    public static void writeFile(Path path, Context context, Template template) {
+        Logger logger = Logger.getLogger(GeneratorTool.class);
+        try {
+            StringWriter stringWriter = new StringWriter();
+            template.merge(context, stringWriter);
+            writeFile(path, stringWriter.toString());
+        } catch (Exception e) {
+            logger.error(e);
+        }
+    }
 
+    public static void merge(Path path, Context context, Template template, boolean update) {
+        String oldContent = null;
+        StringWriter stringWriter = new StringWriter();
+        template.merge(context, stringWriter);
+        String newContent = stringWriter.toString();
+        try {
+            oldContent = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
+        } catch (Exception ignored) {
+        }
+        if (StringUtils.isEmpty(oldContent)) {
+            update = false;
+        }
+        if (!update) {
+            writeFile(path, newContent);
+        } else {
+            String merged = replaceGeneratedCode(oldContent, newContent);
+            writeFile(path, merged);
+        }
     }
 
+    public static void writeFile(Path path, String content) {
+        Logger logger = Logger.getLogger(GeneratorTool.class);
+        logger.log(Level.INFO, "writeFile: " + path);
+        try {
+            Files.createDirectories(path.getParent());
+            if (Files.notExists(path)) {
+                Files.createFile(path);
+            }
+            Files.write(path, content.getBytes(StandardCharsets.UTF_8));
+        } catch (Exception e) {
+            logger.error(e);
+        }
+    }
 
+    public static String replaceGeneratedCode(String src, String dst) {
+        String regex = "<!--generatedStart-->[\\s\\S]*?<!--generatedEnd-->|/\\*generatedStart\\*/[\\s\\S]*?\\*generatedEnd\\*/";
+        Pattern pattern = Pattern.compile(regex);
+        Matcher srcMatcher = pattern.matcher(src);
+        Matcher dstMatcher = pattern.matcher(dst);
+        List<String> list = new ArrayList<>();
+        int lastIndex = 0;
+        while (srcMatcher.find() && dstMatcher.find()) {
+            list.add(src.substring(lastIndex, srcMatcher.start()));
+            list.add(dst.substring(dstMatcher.start(), dstMatcher.end()));
+            lastIndex = srcMatcher.end();
+        }
+        list.add(src.substring(lastIndex));
+        return StringUtils.join(list, "");
+    }
 }

+ 8 - 22
src/main/java/com/izouma/codegenerator/MapperGenerator.java

@@ -2,6 +2,7 @@ package com.izouma.codegenerator;
 
 
 import com.izouma.awesomeadmin.model.GenCode;
+import org.apache.log4j.Logger;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
@@ -12,19 +13,18 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 public class MapperGenerator {
+    private static final Logger LOGGER = Logger.getLogger(MapperGenerator.class);
+
     public static void GenMapper(GenCode model) {
         try {
             List<String> imports = new ArrayList<>();
             imports = GeneratorTool.removeDuplicated(imports);
 
-            String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
-            Properties pro = new Properties();
-            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
-            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
-            Velocity.init(pro);
             ToolManager manager = new ToolManager(true, true);
             VelocityContext context = new VelocityContext(manager.createContext());
             context.put("imports", imports);
@@ -37,23 +37,9 @@ public class MapperGenerator {
 //            }
 
             Template t = Velocity.getTemplate(templateName);
-
-            String targetFile = model.getClassName() + "Mapper.java";
-            File file = new File(model.getJavaPath() + "/dao", targetFile);
-            if (!file.getParentFile().exists())
-                file.getParentFile().mkdirs();
-            if (!file.exists())
-                file.createNewFile();
-
-            FileOutputStream outStream = new FileOutputStream(file);
-            OutputStreamWriter writer = new OutputStreamWriter(outStream,
-                    "UTF-8");
-            BufferedWriter sw = new BufferedWriter(writer);
-            t.merge(context, sw);
-            sw.flush();
-            sw.close();
-            outStream.close();
-            System.out.println("成功生成Mapper:" + file.getAbsolutePath());
+            Path targetFile = Paths.get(model.getJavaPath(), "dao", model.getClassName() + "Mapper.java").toAbsolutePath();
+            GeneratorTool.merge(targetFile, context, t, model.getUpdate());
+            LOGGER.info("成功生成Mapper:" + targetFile.toString());
 
         } catch (Exception e) {
             e.printStackTrace();

+ 11 - 29
src/main/java/com/izouma/codegenerator/MapperXmlGenerator.java

@@ -2,28 +2,26 @@ package com.izouma.codegenerator;
 
 
 import com.izouma.awesomeadmin.model.GenCode;
+import org.apache.log4j.Logger;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
 import org.apache.velocity.tools.ToolManager;
 import org.hibernate.validator.internal.util.privilegedactions.GetResource;
 
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 public class MapperXmlGenerator {
+    private static final Logger LOGGER = Logger.getLogger(MapperXmlGenerator.class);
+
     public static void GenXml(GenCode model) {
         try {
             List<String> imports = new ArrayList<>();
 
-            String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
-            Properties pro = new Properties();
-            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
-            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
-            Velocity.init(pro);
             ToolManager manager = new ToolManager(true, true);
             VelocityContext context = new VelocityContext(manager.createContext());
             context.put("imports", imports);
@@ -33,28 +31,12 @@ public class MapperXmlGenerator {
             if ("SqlServer".equals(model.getDataBaseType())) {
                 templateName = "MapperXmlSqlServerTemplate.vm";
             }
-
             Template t = Velocity.getTemplate(templateName);
-
-            String targetFile = model.getClassName() + "Mapper.xml";
-            File file = new File(model.getJavaPath() + "/dao", targetFile);
-            if (!file.getParentFile().exists())
-                file.getParentFile().mkdirs();
-            if (!file.exists())
-                file.createNewFile();
-
-            FileOutputStream outStream = new FileOutputStream(file);
-            OutputStreamWriter writer = new OutputStreamWriter(outStream,
-                    "UTF-8");
-            BufferedWriter sw = new BufferedWriter(writer);
-            t.merge(context, sw);
-            sw.flush();
-            sw.close();
-            outStream.close();
-            System.out.println("成功生成MapperXml:" + file.getAbsolutePath());
-
+            Path targetFile = Paths.get(model.getJavaPath(), "dao", model.getClassName() + "Mapper.xml").toAbsolutePath();
+            GeneratorTool.merge(targetFile, context, t, model.getUpdate());
+            LOGGER.info("成功生成MapperXml:" + targetFile.toString());
         } catch (Exception e) {
-            e.printStackTrace();
+            LOGGER.error(e);
         }
     }
 }

+ 1 - 2
src/main/java/com/izouma/codegenerator/ModelGenerator.java

@@ -17,8 +17,7 @@ import java.util.*;
 public class ModelGenerator {
     public static void GenModel(GenCode model) {
         try {
-            List<String> imports = new ArrayList<>();
-            imports.addAll(GeneratorTool.getImports(model));
+            List<String> imports = new ArrayList<>(GeneratorTool.getImports(model));
             imports = GeneratorTool.removeDuplicated(imports);
 
             String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();

+ 8 - 22
src/main/java/com/izouma/codegenerator/ServiceGenerator.java

@@ -2,6 +2,7 @@ package com.izouma.codegenerator;
 
 
 import com.izouma.awesomeadmin.model.GenCode;
+import org.apache.log4j.Logger;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
@@ -12,42 +13,27 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 public class ServiceGenerator {
+    private static final Logger LOGGER = Logger.getLogger(ServiceGenerator.class);
+
     public static void GenService(GenCode model) {
         try {
             List<String> imports = new ArrayList<>();
             imports = GeneratorTool.removeDuplicated(imports);
 
-            String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
-            Properties pro = new Properties();
-            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
-            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
-            Velocity.init(pro);
             ToolManager manager = new ToolManager(true, true);
             VelocityContext context = new VelocityContext(manager.createContext());
             context.put("imports", imports);
             context.put("model", model);
             Template t = Velocity.getTemplate("ServiceTemplate.vm");
 
-            String targetFile = model.getClassName() + "Service.java";
-            File file = new File(model.getJavaPath() + "/service", targetFile);
-            if (!file.getParentFile().exists())
-                file.getParentFile().mkdirs();
-            if (!file.exists())
-                file.createNewFile();
-
-            FileOutputStream outStream = new FileOutputStream(file);
-            OutputStreamWriter writer = new OutputStreamWriter(outStream,
-                    "UTF-8");
-            BufferedWriter sw = new BufferedWriter(writer);
-            t.merge(context, sw);
-            sw.flush();
-            sw.close();
-            outStream.close();
-            System.out.println("成功生成Service:" + file.getAbsolutePath());
-
+            Path targetFile = Paths.get(model.getJavaPath(), "service", model.getClassName() + "Service.java").toAbsolutePath();
+            GeneratorTool.merge(targetFile, context, t, model.getUpdate());
+            LOGGER.info("成功生成Service:" + targetFile.toString());
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 8 - 22
src/main/java/com/izouma/codegenerator/ServiceImplGenerator.java

@@ -2,6 +2,7 @@ package com.izouma.codegenerator;
 
 
 import com.izouma.awesomeadmin.model.GenCode;
+import org.apache.log4j.Logger;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
@@ -12,42 +13,27 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 public class ServiceImplGenerator {
+    private static final Logger LOGGER = Logger.getLogger(ServiceImplGenerator.class);
+
     public static void GemServicelImpl(GenCode model) {
         try {
             List<String> imports = new ArrayList<>();
             imports = GeneratorTool.removeDuplicated(imports);
 
-            String templatePath = GetResource.class.getClassLoader().getResource("templates").getPath();
-            Properties pro = new Properties();
-            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
-            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
-            Velocity.init(pro);
             ToolManager manager = new ToolManager(true, true);
             VelocityContext context = new VelocityContext(manager.createContext());
             context.put("imports", imports);
             context.put("model", model);
             Template t = Velocity.getTemplate("ServiceImplTemplate.vm");
 
-            String targetFile = model.getClassName() + "ServiceImpl.java";
-            File file = new File(model.getJavaPath() + "/service/impl", targetFile);
-            if (!file.getParentFile().exists())
-                file.getParentFile().mkdirs();
-            if (!file.exists())
-                file.createNewFile();
-
-            FileOutputStream outStream = new FileOutputStream(file);
-            OutputStreamWriter writer = new OutputStreamWriter(outStream,
-                    "UTF-8");
-            BufferedWriter sw = new BufferedWriter(writer);
-            t.merge(context, sw);
-            sw.flush();
-            sw.close();
-            outStream.close();
-            System.out.println("成功生成ServiceImpl:" + file.getAbsolutePath());
-
+            Path targetFile = Paths.get(model.getJavaPath(), "service","impl", model.getClassName() + "ServiceImpl.java").toAbsolutePath();
+            GeneratorTool.merge(targetFile, context, t, model.getUpdate());
+            LOGGER.info("成功生成ServiceImpl:" + targetFile.toString());
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 4 - 1
src/main/resources/templates/ControllerTemplate.vm

@@ -23,10 +23,12 @@ import javax.servlet.http.HttpServletResponse;
 @Controller
 @RequestMapping("/$display.uncapitalize($model.className)")
 public class ${model.className}Controller {
-
+    /*generatedStart*/
     @Autowired
     private ${model.className}Service $display.uncapitalize(${model.className})Service;
+    /*generatedEnd*/
 
+    /*generatedStart*/
     @RequiresAuthentication
     @RequestMapping(value = "/all", method = RequestMethod.GET)
     @ResponseBody
@@ -115,5 +117,6 @@ public class ${model.className}Controller {
         ExportExcelUtil.ExportWithResponse(sheetName, titleName, fileName,
                 columnNumber, columnWidth, columnName, dataList, response);
     }
+    /*generatedEnd*/
 }
 

+ 2 - 1
src/main/resources/templates/MapperSqlServerTemplate.vm

@@ -15,7 +15,7 @@ import com.izouma.awesomeadmin.model.${model.className};
 @DataSource("dataSourceSqlserver")
 @Repository("com.zoumaframe.dao.${model.className}Mapper")
 public interface ${model.className}Mapper{
-
+    /*generatedStart*/
     int deleteByPrimaryKey(Integer id);
 
     int insertSelective(${model.className} record);
@@ -33,5 +33,6 @@ public interface ${model.className}Mapper{
     ${model.className} query${model.className}(${model.className} record);
 
     List<${model.className}> query(${model.className} record);
+    /*generatedEnd*/
 }
 

+ 3 - 1
src/main/resources/templates/MapperTemplate.vm

@@ -17,7 +17,7 @@ import com.izouma.awesomeadmin.model.${model.className};
 #end
 @Repository("com.zoumaframe.dao.${model.className}Mapper")
 public interface ${model.className}Mapper{
-
+    /*generatedStart*/
     int deleteByPrimaryKey(Integer id);
 
     int insertSelective(${model.className} record);
@@ -35,5 +35,7 @@ public interface ${model.className}Mapper{
     ${model.className} query${model.className}(${model.className} record);
 
     List<${model.className}> query(${model.className} record);
+    /*generatedEnd*/
+
 }
 

+ 178 - 172
src/main/resources/templates/MapperXmlTemplate.vm

@@ -1,87 +1,105 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.izouma.awesomeadmin.dao.${model.className}Mapper" >
-    <resultMap id="BaseResultMap" type="com.izouma.awesomeadmin.model.${model.className}" >
-#foreach($field in $model.fields)
-        #if(${field.name}=='id')
-        <id column="id" property="id" jdbcType="INTEGER" />
-        #end
-        #if(${field.name}!='id')
-        <result column="${field.name}" property="$field.modelName" jdbcType="$field.sqlType" />
-        #end
-#end
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.izouma.awesomeadmin.dao.${model.className}Mapper">
+    <resultMap id="BaseResultMap" type="com.izouma.awesomeadmin.model.${model.className}">
+        <!--generatedStart-->
+#*    *##foreach($field in $model.fields)
+#*        *##if(${field.name}=='id')
+#*    *#        <id column="id" property="id" jdbcType="INTEGER"/>
+#*        *##end
+#*        *##if(${field.name}!='id')
+#*    *#        <result column="${field.name}" property="$field.modelName" jdbcType="$field.sqlType"/>
+#*        *##end
+#*    *##end
+        <!--generatedEnd-->
     </resultMap>
-    <sql id="Base_Column_List" >
-        #foreach($field in $model.fields)#if(${foreach.index}!=0), #end${field.name}#end
+
+    <sql id="Base_Column_List">
+        <!--generatedStart-->
+        #foreach($field in $model.fields)
+#*        *#${field.name}#if( $foreach.hasNext ), #end
+#*    *##end
+        <!--generatedEnd-->
     </sql>
-    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
-        select
-        <include refid="Base_Column_List" />
-        from $model.tableName
-        where id = #{id,jdbcType=INTEGER}
+
+    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM $model.tableName
+        WHERE id = #{id,jdbcType=INTEGER}
     </select>
-    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
-        delete from $model.tableName
-        where id = #{id,jdbcType=INTEGER}
+
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+        DELETE
+        FROM $model.tableName
+        WHERE id = #{id,jdbcType=INTEGER}
     </delete>
+
     <insert id="insertSelective" parameterType="com.izouma.awesomeadmin.model.${model.className}" useGeneratedKeys="true" keyProperty="id">
-        insert into $model.tableName
-        <trim prefix="(" suffix=")" suffixOverrides="," >
-    #foreach($field in $model.fields)
-            <if test="$field.modelName!= null" >
-                ${field.name},
-            </if>
-    #end
+        INSERT INTO $model.tableName
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <!--generatedStart-->
+#*        *##foreach($field in $model.fields)
+#**#            <if test="$field.modelName!= null">
+#**#                ${field.name},
+#**#            </if>
+#*        *##end
+            <!--generatedEnd-->
         </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides="," >
-        #foreach($field in $model.fields)
-            <if test="$field.modelName != null" >
-                #{$field.modelName,jdbcType=${field.sqlType}},
-            </if>
-        #end
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <!--generatedStart-->
+#*        *##foreach($field in $model.fields)
+#**#            <if test="$field.modelName != null">
+#**#                #{$field.modelName,jdbcType=${field.sqlType}},
+#**#            </if>
+#*        *##end
+            <!--generatedEnd-->
         </trim>
     </insert>
-    <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.${model.className}" >
-        update $model.tableName
-        <set >
-        #foreach($field in $model.fields)
-            <if test="$field.modelName != null" >
-               ${field.name}= #{$field.modelName,jdbcType=${field.sqlType}},
-            </if>
-         #end
+
+    <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.${model.className}">
+        UPDATE $model.tableName
+        <set>
+            <!--generatedStart-->
+#*        *##foreach($field in $model.fields)
+#**#            <if test="$field.modelName != null">
+#**#                ${field.name}= #{$field.modelName,jdbcType=${field.sqlType}},
+#**#            </if>
+#*        *##end
+            <!--generatedEnd-->
         </set>
-        where
+        WHERE
         <if test="id != null and !&quot;&quot;.equals(id)">
             id = #{id,jdbcType=INTEGER}
         </if>
-
         <if test="idStr != null and !&quot;&quot;.equals(idStr)">
-            id in (${esc.d}{idStr})
+            id IN (${esc.d}{idStr})
         </if>
     </update>
+
     <select id="query${model.className}ByPage" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.${model.className}">
-        select <include refid="Base_Column_List"/> from ${model.tableName}
+        SELECT <include refid="Base_Column_List"/> FROM ${model.tableName}
         <where>
-            and del_flag = 'N'
+            AND del_flag = 'N'
             <if test="record.idStr != null and !&quot;&quot;.equals(record.idStr)">
-                and id in (${esc.d}{record.idStr})
+                AND id IN (${esc.d}{record.idStr})
             </if>
-        #foreach($field in $model.fields)
+            <!--generatedStart-->
+#*        *##foreach($field in $model.fields)
             <if test="record.$field.modelName != null and !&quot;&quot;.equals(record.$field.modelName)">
-                and  ${field.name} = #{record.$field.modelName}
+                AND ${field.name} = #{record.$field.modelName}
+            </if>
+#*        *##end
+            <!--generatedEnd-->
+            <if test="record.searchKey != null and !&quot;&quot;.equals(record.searchKey)">
+                <trim prefix="and (" suffix=")" prefixOverrides="OR">
+                    <!--generatedStart-->
+#*                *##foreach($field in $model.fields)#if(${field.name}!='id'&&${field.name}!='ID'&&${field.searchable})
+#**#                    OR ${field.name} LIKE concat('%',#{record.searchKey},'%')
+#*                *##end#end
+                    <!--generatedEnd-->
+                </trim>
             </if>
-         #end
-         <if test="record.searchKey != null and !&quot;&quot;.equals(record.searchKey)">
-             <trim prefix="and (" suffix=")" prefixOverrides="OR" >
-             #foreach($field in $model.fields)
-                 #if(${field.name}!='id'&&${field.name}!='ID')
-                  #if(${field.searchable})
-                 OR  ${field.name} LIKE concat('%',#{record.searchKey},'%')
-                  #end
-                 #end
-             #end
-             </trim>
-         </if>
 
             <if test="record.advancedQuery != null and !&quot;&quot;.equals(record.advancedQuery)">
                 <foreach item="item" index="index" collection="record.advancedQuery.split('_;')">
@@ -91,11 +109,9 @@
                                 <if test="detailIndex == 3">
                                     concat('%',#{itemDetail},'%')
                                 </if>
-
                                 <if test="detailIndex &lt; 3">
                                     ${esc.d}{itemDetail}
                                 </if>
-
                             </foreach>
                         </when>
                         <otherwise>
@@ -103,27 +119,17 @@
                                 <if test="detailIndex == 3">
                                     #{itemDetail}
                                 </if>
-
                                 <if test="detailIndex &lt; 3">
                                     ${esc.d}{itemDetail}
                                 </if>
-
                             </foreach>
                         </otherwise>
                     </choose>
-
-
                 </foreach>
-
-
             </if>
-
         </where>
-        order by
-
+        ORDER BY
         <if test="record.orderByStr != null and !&quot;&quot;.equals(record.orderByStr)">
-
-
             <trim suffixOverrides=",">
                 <foreach item="item" index="index" separator="," collection="record.orderByStr.split('_;')">
                     <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
@@ -133,71 +139,65 @@
             </trim>
             ,
         </if>
-        id desc
+        id DESC
     </select>
+
     <select id="queryAll${model.className}" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.${model.className}">
-        select <include refid="Base_Column_List"/> from ${model.tableName}
+        SELECT <include refid="Base_Column_List"/> FROM ${model.tableName}
         <where>
-            and del_flag = 'N'
+            AND del_flag = 'N'
             <if test="idStr != null and !&quot;&quot;.equals(idStr)">
-                and id in (${esc.d}{idStr})
+                AND id IN (${esc.d}{idStr})
             </if>
-        #foreach($field in $model.fields)
+            <!--generatedStart-->
+#*        *##foreach($field in $model.fields)
             <if test="$field.modelName != null and !&quot;&quot;.equals($field.modelName)">
-                and  ${field.name} = #{$field.modelName}
+                AND ${field.name} = #{$field.modelName}
             </if>
-        #end
+#*        *##end
+            <!--generatedEnd-->
             <if test="searchKey != null and !&quot;&quot;.equals(searchKey)">
-                <trim prefix="and (" suffix=")" prefixOverrides="OR" >
-                    #foreach($field in $model.fields)
-                        #if(${field.name}!='id'&&${field.name}!='ID')
-                            #if(${field.searchable})
-                            OR  ${field.name} LIKE concat('%',#{searchKey},'%')
-                            #end
-                        #end
-                    #end
+                <trim prefix="and (" suffix=")" prefixOverrides="OR">
+                    <!--generatedStart-->
+#*                *##foreach($field in $model.fields)
+#*                    *##if(${field.name}!='id'&&${field.name}!='ID')
+#*                        *##if(${field.searchable})
+#*        *#                    OR ${field.name} LIKE concat('%',#{searchKey},'%')
+#*                        *##end
+#*                    *##end
+#*                *##end
+                    <!--generatedEnd-->
                 </trim>
             </if>
-<if test="advancedQuery != null and !&quot;&quot;.equals(advancedQuery)">
-    <foreach item="item" index="index" collection="advancedQuery.split('_;')">
-        <choose>
-            <when test="item.indexOf('like') != -1">
-                <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
-                    <if test="detailIndex == 3">
-                        concat('%',#{itemDetail},'%')
-                    </if>
-
-                    <if test="detailIndex &lt; 3">
-                        ${esc.d}{itemDetail}
-                    </if>
-
-                </foreach>
-            </when>
-            <otherwise>
-                <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
-                    <if test="detailIndex == 3">
-                        #{itemDetail}
-                    </if>
-
-                    <if test="detailIndex &lt; 3">
-                        ${esc.d}{itemDetail}
-                    </if>
-
+            <if test="advancedQuery != null and !&quot;&quot;.equals(advancedQuery)">
+                <foreach item="item" index="index" collection="advancedQuery.split('_;')">
+                    <choose>
+                        <when test="item.indexOf('like') != -1">
+                            <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                                <if test="detailIndex == 3">
+                                    concat('%',#{itemDetail},'%')
+                                </if>
+                                <if test="detailIndex &lt; 3">
+                                    ${esc.d}{itemDetail}
+                                </if>
+                            </foreach>
+                        </when>
+                        <otherwise>
+                            <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                                <if test="detailIndex == 3">
+                                    #{itemDetail}
+                                </if>
+                                <if test="detailIndex &lt; 3">
+                                    ${esc.d}{itemDetail}
+                                </if>
+                            </foreach>
+                        </otherwise>
+                    </choose>
                 </foreach>
-            </otherwise>
-        </choose>
-
-
-    </foreach>
-
-
-</if>
+            </if>
         </where>
-        order by
-
+        ORDER BY
         <if test="orderByStr != null and !&quot;&quot;.equals(orderByStr)">
-
-
             <trim suffixOverrides=",">
                 <foreach item="item" index="index" separator="," collection="orderByStr.split('_;')">
                     <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
@@ -207,70 +207,76 @@
             </trim>
             ,
         </if>
-
-        id desc
+        id DESC
     </select>
+
     <select id="query${model.className}" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.${model.className}">
-        select <include refid="Base_Column_List"/> from ${model.tableName}
+        SELECT <include refid="Base_Column_List"/> FROM ${model.tableName}
         <where>
-            and del_flag = 'N'
-        #foreach($field in $model.fields)
+            AND del_flag = 'N'
+            <!--generatedStart-->
+#*        *##foreach($field in $model.fields)
             <if test="$field.modelName != null and !&quot;&quot;.equals($field.modelName)">
-                and ${field.name} = #{$field.modelName}
+                AND ${field.name} = #{$field.modelName}
             </if>
-         #end
-
+#*        *##end
+            <!--generatedEnd-->
         </where>
         LIMIT 1
     </select>
+
     <update id="delete">
         UPDATE ${model.tableName} SET del_flag = 'Y'
-        where
+        WHERE
         <if test="id != null and !&quot;&quot;.equals(id)">
             id = #{id,jdbcType=INTEGER}
         </if>
-
         <if test="idStr != null and !&quot;&quot;.equals(idStr)">
-            id in (${esc.d}{idStr})
+            id IN (${esc.d}{idStr})
         </if>
     </update>
+
     <select id="query" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.${model.className}">
-        select <include refid="Base_Column_List"/> from ${model.tableName}
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM ${model.tableName}
         <where>
-            and del_flag = 'N'
-            #foreach($field in $model.fields)
-                #if(${field.searchable})
-                    #if(${field.searchMethod}=="=")
-                        and ${field.name} = #{$field.modelName}
-                    #end
-                    #if(${field.searchMethod}=="!=")
-                        and ${field.name} != #{$field.modelName}
-                    #end
-                    #if(${field.searchMethod}==">")
-                        and ${field.name} > #{$field.modelName}
-                    #end
-                    #if(${field.searchMethod}==">=")
-                        and ${field.name} >= #{$field.modelName}
-                    #end
-                    #if(${field.searchMethod}=="<")
-                        and ${field.name} < #{$field.modelName}
-                    #end
-                    #if(${field.searchMethod}=="<=")
-                        and ${field.name} <= #{$field.modelName}
-                    #end
-                    #if(${field.searchMethod}=="like")
-                        and ${field.name} like  '%${$field.modelName}%'
-                    #end
-                    #if(${field.searchMethod}=="left like")
-                        and ${field.name} like  '%${$field.modelName}'
-                    #end
-                    #if(${field.searchMethod}=="right like")
-                        and ${field.name} like '${$field.modelName}%'
-                    #end
-                #end
-            #end
+            AND del_flag = 'N'
+            <!--generatedStart-->
+#*        *##foreach($field in $model.fields)
+#*            *##if(${field.searchable})
+#*                *##if(${field.searchMethod}=="=")
+#*        *#            AND ${field.name} = #{$field.modelName}
+#*                *##end
+#*                *##if(${field.searchMethod}=="!=")
+#*        *#            AND ${field.name} != #{$field.modelName}
+#*                *##end
+#*                *##if(${field.searchMethod}==">")
+#*        *#            AND ${field.name} > #{$field.modelName}
+#*                *##end
+#*                *##if(${field.searchMethod}==">=")
+#*        *#            AND ${field.name} >= #{$field.modelName}
+#*                *##end
+#*                *##if(${field.searchMethod}=="<")
+#*        *#            AND ${field.name} < #{$field.modelName}
+#*                *##end
+#*                *##if(${field.searchMethod}=="<=")
+#*        *#            AND ${field.name} <= #{$field.modelName}
+#*                *##end
+#*                *##if(${field.searchMethod}=="like")
+#*        *#            AND ${field.name} like  '%${$field.modelName}%'
+#*                *##end
+#*                *##if(${field.searchMethod}=="left like")
+#*        *#            AND ${field.name} like  '%${$field.modelName}'
+#*                *##end
+#*                *##if(${field.searchMethod}=="right like")
+#*        *#            AND ${field.name} like '${$field.modelName}%'
+#*                *##end
+#*            *##end
+#*        *##end
+            <!--generatedEnd-->
         </where>
-        order by id desc
+        ORDER BY id DESC
     </select>
 </mapper>
 

+ 4 - 0
src/main/resources/templates/ModelTemplate.vm

@@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 @JsonAutoDetect
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class $model.className{
+    /*generatedStart*/
 #foreach($field in $model.fields)
     private $field.javaType $field.modelName;
 #end
@@ -28,7 +29,9 @@ public class $model.className{
     * column_name_,desc_;column_name_,asc
     */
     private String orderByStr;
+    /*generatedEnd*/
 
+    /*generatedStart*/
 #foreach($field in $model.fields)
     public $field.javaType get${display.capitalize($field.modelName)}(){
         return this.$field.modelName;
@@ -70,6 +73,7 @@ public class $model.className{
     public void setIdStr(String idStr) {
         this.idStr = idStr;
     }
+    /*generatedEnd*/
 
 }
 

+ 15 - 35
src/main/resources/templates/ServiceImplTemplate.vm

@@ -18,123 +18,103 @@ import com.izouma.awesomeadmin.dao.${model.className}Mapper;
 */
 @Service
 public class ${model.className}ServiceImpl implements ${model.className}Service{
-
+    /*generatedStart*/
     private static Logger logger = Logger.getLogger(${model.className}ServiceImpl.class);
 
     @Autowired
     private ${model.className}Mapper ${display.uncapitalize(${model.className})}Mapper;
+    /*generatedEnd*/
 
+    /*generatedStart*/
     @Override
     public List<${model.className}> get${model.className}List(${model.className} record) {
-
         logger.info("get${model.className}List");
         try {
-
-        return ${display.uncapitalize(${model.className})}Mapper.queryAll${model.className}(record);
+            return ${display.uncapitalize(${model.className})}Mapper.queryAll${model.className}(record);
         } catch (Exception e) {
-        logger.error("get${model.className}List", e);
+            logger.error("get${model.className}List", e);
         }
-
         return null;
     }
+
     @Override
     public List<${model.className}> get${model.className}ByPage(Page page, ${model.className} record) {
-
         logger.info("get${model.className}ByPage");
         try {
+            Map<String, Object> parameter = new HashMap<String, Object>();
+            parameter.put("record", record);
+            parameter.put(AppConstant.PAGE, page);
 
-        Map<String, Object> parameter = new HashMap<String, Object>();
-        parameter.put("record", record);
-        parameter.put(AppConstant.PAGE, page);
-
-        return ${display.uncapitalize(${model.className})}Mapper.query${model.className}ByPage(parameter);
+            return ${display.uncapitalize(${model.className})}Mapper.query${model.className}ByPage(parameter);
         } catch (Exception e) {
-        logger.error("get${model.className}ByPage", e);
+            logger.error("get${model.className}ByPage", e);
         }
-
         return null;
     }
 
     @Override
     public ${model.className} get${model.className}ById(String id) {
-
         logger.info("get${model.className}yId");
         try {
-
             return ${display.uncapitalize(${model.className})}Mapper.selectByPrimaryKey(Integer.valueOf(id));
         } catch (Exception e) {
-        logger.error("get${model.className}ById", e);
+            logger.error("get${model.className}ById", e);
         }
-
         return null;
     }
 
     @Override
     public ${model.className} get${model.className}(${model.className} record) {
-
         logger.info("get${model.className}");
         try {
-
             return ${display.uncapitalize(${model.className})}Mapper.query${model.className}(record);
         } catch (Exception e) {
-        logger.error("get${model.className}", e);
+            logger.error("get${model.className}", e);
         }
-
         return null;
     }
 
     @Override
     public boolean create${model.className}(${model.className} record) {
-
         logger.info("create${model.className}");
         try {
-
             int updates = ${display.uncapitalize(${model.className})}Mapper.insertSelective(record);
-
             if (updates > 0) {
                  return true;
             }
         } catch (Exception e) {
             logger.error("create${model.className}", e);
         }
-
         return false;
     }
 
     @Override
     public boolean delete${model.className}(${model.className} record) {
-
         logger.info("delete${model.className}");
         try {
-
-             int updates = ${display.uncapitalize(${model.className})}Mapper.delete(record);
-
+            int updates = ${display.uncapitalize(${model.className})}Mapper.delete(record);
             if (updates > 0) {
                  return true;
             }
         } catch (Exception e) {
              logger.error("delete${model.className}", e);
         }
-
         return false;
     }
 
     @Override
     public boolean update${model.className}(${model.className} record) {
-
         logger.info("update${model.className}");
         try {
-
             int updates = ${display.uncapitalize(${model.className})}Mapper.updateByPrimaryKeySelective(record);
-
             if (updates > 0) {
                  return true;
             }
         } catch (Exception e) {
              logger.error("update${model.className}", e);
         }
-
         return false;
     }
+    /*generatedEnd*/
 }
 

+ 2 - 1
src/main/resources/templates/ServiceTemplate.vm

@@ -12,7 +12,7 @@ import com.izouma.awesomeadmin.model.${model.className};
 *  service接口类
 */
 public interface ${model.className}Service{
-
+    /*generatedStart*/
     List<${model.className}> get${model.className}List(${model.className} record);
 
     List<${model.className}> get${model.className}ByPage(Page page, ${model.className} record);
@@ -26,5 +26,6 @@ public interface ${model.className}Service{
     boolean delete${model.className}(${model.className} record);
 
     boolean update${model.className}(${model.className} record);
+    /*generatedEnd*/
 }
 

+ 14 - 4
src/main/vue/src/pages/CheckinRecord.vue

@@ -6,7 +6,10 @@
                 <el-input v-model="formData.userId" :disabled="'userId'==subColumn"></el-input>
             </el-form-item>
             <el-form-item prop="createTime" label="创建时间">
-                <el-input v-model="formData.createTime" :disabled="'createTime'==subColumn"></el-input>
+                <el-input v-model="formData.createTime" disabled></el-input>
+            </el-form-item>
+            <el-form-item prop="continuous" label="连续天数">
+                <el-input type="number" v-model="formData.continuous" :disabled="'continuous'==subColumn"></el-input>
             </el-form-item>
             <el-form-item>
                 <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
@@ -39,7 +42,10 @@
                     }
                 }).then(res => {
                     if (res.success) {
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                this.formData = res.data;
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                if(res.data.createTime){
+                                    res.data.createTime = format(new Date(res.data.createTime), 'YYYY/MM/DD', { locale: zh });
+                                }
+                                                                                                                                                                                        this.formData = res.data;
                         if (this.$route.query.column) {
                             this.formData[this.subColumn] = this.subValue;
                         }
@@ -51,11 +57,12 @@
                 }
             }
 
-                                                                                                                                                                                                    },
+                                                                                                                                                                                                                                                },
         data() {
             return {
                 saving: false,
                 formData: {
+                    createTime:format(new Date(), 'YYYY/MM/DD', { locale: zh }),
                 },
                 rules: {
                 },
@@ -114,7 +121,10 @@
             submit() {
                 let data = {...this.formData};
 
-                                                                                
+                                                                                if(data.createTime){
+                    data.createTime = Date.parse(new Date(data.createTime));
+                }
+                                
                 this.$http.post({
                     url: this.formData.id ? '/checkinRecord/update' : '/checkinRecord/save',
                     data: data

+ 17 - 0
src/main/vue/src/pages/CheckinRecords.vue

@@ -55,6 +55,14 @@
                                 v-if="isColumnShow('createTime')"
                                 prop="createTime"
                                 label="创建时间"
+                                :formatter="DateFormatter"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('continuous')"
+                                prop="continuous"
+                                label="连续天数"
                                 min-width="100">
                         </el-table-column>
                                                             <el-table-column
@@ -209,6 +217,11 @@
                                 label: '创建时间',
                                 value: 'createTime',
                                 show: true
+                            },
+                                                                                                {
+                                label: '连续天数',
+                                value: 'continuous',
+                                show: true
                             },
                                                             ],
                 multipleMode: false,
@@ -225,6 +238,10 @@
                                                                                                 {
                                 label: '创建时间',
                                 value: 'create_time'
+                            },
+                                                                                                {
+                                label: '连续天数',
+                                value: 'continuous'
                             },
                                                             ],
                 advancedQuerySearchKey: '',