Commit e15256e7 authored by 赵啸非's avatar 赵啸非

编写系统代码生成模块

parent be4fe6cf
......@@ -34,7 +34,7 @@ instance.interceptors.request.use(config => {
// config.headers.timestamp = Math.floor(new Date().getTime() / 1000)
// config.headers.token = sessionStorage.getItem('token') || ''
console.log("request config",config);
//console.log("request config",config);
return config;
......
......@@ -8,8 +8,6 @@ import MySwitch from '@/components/Switch';
import Confirm from '@/components/Confirm';
import FormField from '@/components/FormField';
import Upload from '@/components/Upload';
import TreeTable from '@/components/TreeTable.vue';
import TopicInfo from '@/components/TopicInfo.vue';
const Prototype = function() {};
......@@ -23,8 +21,6 @@ Prototype.install = (Vue, options) => {
Vue.component('MySwitch', MySwitch) // 拨动开关
Vue.component('Confirm', Confirm) // 局部确认窗口
Vue.component('Upload', Upload) // 文件上传
Vue.component('TreeTable', TreeTable) // 文件上传
Vue.component('TopicInfo', TopicInfo) // 文件上传
}
export default Prototype;
<template>
<div class="editor" ref="editor" :style="styles"></div>
</template>
<script>
import Quill from "quill";
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
export default {
name: "Editor",
props: {
/* 编辑器的内容 */
value: {
type: String,
default: "",
},
/* 高度 */
height: {
type: Number,
default: null,
},
/* 最小高度 */
minHeight: {
type: Number,
default: null,
},
/* 只读 */
readOnly: {
type: Boolean,
default: false,
}
},
data() {
return {
Quill: null,
currentValue: "",
options: {
theme: "snow",
bounds: document.body,
debug: "warn",
modules: {
// 工具栏配置
toolbar: [
["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线
["blockquote", "code-block"], // 引用 代码块
[{ list: "ordered" }, { list: "bullet" }], // 有序、无序列表
[{ indent: "-1" }, { indent: "+1" }], // 缩进
[{ size: ["small", false, "large", "huge"] }], // 字体大小
[{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
[{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
[{ align: [] }], // 对齐方式
["clean"], // 清除文本格式
["link", "image", "video"] // 链接、图片、视频
],
},
placeholder: "请输入内容",
readOnly: this.readOnly,
},
};
},
computed: {
styles() {
let style = {};
if (this.minHeight) {
style.minHeight = `${this.minHeight}px`;
}
if (this.height) {
style.height = `${this.height}px`;
}
return style;
},
},
watch: {
value: {
handler(val) {
if (val !== this.currentValue) {
this.currentValue = val === null ? "" : val;
if (this.Quill) {
this.Quill.pasteHTML(this.currentValue);
}
}
},
immediate: true,
},
},
mounted() {
this.init();
},
beforeDestroy() {
this.Quill = null;
},
methods: {
init() {
const editor = this.$refs.editor;
this.Quill = new Quill(editor, this.options);
this.Quill.pasteHTML(this.currentValue);
this.Quill.on("text-change", (delta, oldDelta, source) => {
const html = this.$refs.editor.children[0].innerHTML;
const text = this.Quill.getText();
const quill = this.Quill;
this.currentValue = html;
this.$emit("input", html);
this.$emit("on-change", { html, text, quill });
});
this.Quill.on("text-change", (delta, oldDelta, source) => {
this.$emit("on-text-change", delta, oldDelta, source);
});
this.Quill.on("selection-change", (range, oldRange, source) => {
this.$emit("on-selection-change", range, oldRange, source);
});
this.Quill.on("editor-change", (eventName, ...args) => {
this.$emit("on-editor-change", eventName, ...args);
});
},
},
};
</script>
<style>
.editor, .ql-toolbar {
white-space: pre-wrap!important;
line-height: normal !important;
}
.quill-img {
display: none;
}
.ql-snow .ql-tooltip[data-mode="link"]::before {
content: "请输入链接地址:";
}
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
border-right: 0px;
content: "保存";
padding-right: 0px;
}
.ql-snow .ql-tooltip[data-mode="video"]::before {
content: "请输入视频地址:";
}
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
content: "14px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
content: "10px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
content: "18px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
content: "32px";
}
.ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
content: "文本";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
content: "标题1";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
content: "标题2";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
content: "标题3";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
content: "标题4";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
content: "标题5";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
content: "标题6";
}
.ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
content: "标准字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
content: "衬线字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
content: "等宽字体";
}
</style>
......@@ -2,7 +2,6 @@ import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import './assets/less/base.less'
import './assets/less/org-tree.less'
import App from './App.vue'
import router from './router'
import store from './store'
......
package com.mortals.xhx.base.system.gentable.model;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.common.utils.StringUtils;
import java.util.Date;
/**
* Description:GentableColumn
* date: 2021-9-28 10:10:15
*/
public class GentableColumnEntityExt extends BaseEntityLong {
}
\ No newline at end of file
......@@ -28,6 +28,15 @@ public class GentableEntityExt extends BaseEntityLong {
*/
private List<GentableColumnEntity> columns;
public static boolean isSuperColumn(String javaField) {
return StringUtils.equalsAnyIgnoreCase(javaField,
// BaseEntity
"id","createUser", "createTime", "updateUser",
"updateTime","createUserId","updateUserId",
// TreeEntity
"parentName", "parentId", "orderNum", "ancestors");
}
}
\ No newline at end of file
......@@ -7,6 +7,7 @@ import com.mortals.xhx.base.system.gentable.model.GentableEntity;
import com.mortals.xhx.base.system.gentable.model.GentableQuery;
import java.util.List;
import java.util.Map;
/**
* <p>Title: 代码生成业务表</p>
......@@ -56,6 +57,13 @@ public interface GentableService extends ICRUDService<GentableEntity,Long> {
void validateEdit(GentableEntity genTable);
/**
* 预览代码
*
* @param id 表Id
* @return 预览数据列表
*/
Map<String, String> previewCode(Long id);
/**
* 生成代码(单表生成下载方式)
......
......@@ -17,9 +17,13 @@ import com.mortals.xhx.base.system.gentable.service.GentableService;
import com.mortals.xhx.common.code.CacheServiceTypeEnum;
import com.mortals.xhx.common.code.DividedTableTypeEnum;
import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.common.key.Constant;
import com.mortals.xhx.common.key.GenConstants;
import com.mortals.xhx.common.utils.FreeMarkerUtils;
import com.mortals.xhx.common.utils.GenUtils;
import com.mortals.xhx.common.utils.StringUtils;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -28,9 +32,7 @@ import org.springframework.util.ObjectUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
......@@ -114,14 +116,53 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
}
}
@Override
public Map<String, String> previewCode(Long id) {
Map<String, String> dataMap = new LinkedHashMap<>();
// 查询表信息
GentableEntity gentableEntity = this.get(id);
List<GentableColumnEntity> columnEntities = this.gentableColumnService.find(new GentableColumnQuery().tableId(gentableEntity.getId()));
gentableEntity.setColumns(columnEntities);
// 设置主子表信息
setSubTable(gentableEntity);
// 设置主键列信息
setPkColumn(gentableEntity);
//初始化freeMarkers
FreeMarkerUtils.initFreeMarker();
//生成模板基础数据
Map data = FreeMarkerUtils.prepareSetFreeMarkerData(gentableEntity);
//输出合成模板
//Template template = FreeMarkerUtils.getTemplate("entity.ftl");
// Template template = FreeMarkerUtils.getTemplate("service.ftl");
// 获取模板列表
List<String> templates = FreeMarkerUtils.getTemplateList(gentableEntity.getTplCategory());
for (String temp : templates) {
try {
// 渲染模板
StringWriter sw = new StringWriter();
Template template = FreeMarkerUtils.getTemplate(temp);
template.process(data, sw);
dataMap.put(temp, sw.toString());
} catch (Exception e) {
log.error("异常", e);
}
}
return dataMap;
}
@Override
protected void updateAfter(GentableEntity entity, Context context) throws AppException {
if (!ObjectUtils.isEmpty(entity.getColumns())) {
gentableColumnService.update(entity.getColumns());
}
super.updateAfter(entity, context);
}
......@@ -142,42 +183,39 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
private void generatorCode(String tableName, ZipOutputStream zip) {
GentableEntity gentableEntity = this.selectOne(new GentableQuery().tableName(tableName));
if (!ObjectUtils.isEmpty(gentableEntity)) {
List<GentableColumnEntity> columnEntities = this.gentableColumnService.find(new GentableColumnQuery().tableId(gentableEntity.getId()));
gentableEntity.setColumns(columnEntities);
// 设置主子表信息
setSubTable(gentableEntity);
// 设置主键列信息
setPkColumn(gentableEntity);
//初始化freeMarkers
FreeMarkerUtils.initFreeMarker();
//通过模板生成不同的业务类
//生成模板基础数据
Map data = FreeMarkerUtils.prepareSetFreeMarkerData(gentableEntity);
//输出合成模板
//Template template = FreeMarkerUtils.getTemplate("entity.ftl");
Template template = FreeMarkerUtils.getTemplate("service.ftl");
StringWriter sw = new StringWriter();
// VelocityInitializer.initVelocity();
//
// VelocityContext context = VelocityUtils.prepareContext(table);
//
// // 获取模板列表
// List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
// for (String template : templates) {
// // 渲染模板
// StringWriter sw = new StringWriter();
// Template tpl = Velocity.getTemplate(template, Constants.UTF8);
// tpl.merge(context, sw);
// try {
// // 添加到zip
// zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table)));
// IOUtils.write(sw.toString(), zip, Constants.UTF8);
// IOUtils.closeQuietly(sw);
// zip.flush();
// zip.closeEntry();
// } catch (IOException e) {
// log.error("渲染模板失败,表名:" + table.getTableName(), e);
// }
// }
//通过模板生成不同的业务类
try {
template.process(data, sw);
System.out.println(sw.toString());
// 添加到zip
zip.putNextEntry(new ZipEntry(FreeMarkerUtils.getFileName(template.getName(), gentableEntity)));
IOUtils.write(sw.toString(), zip, Constant.UTF8);
IOUtils.closeQuietly(sw);
zip.flush();
zip.closeEntry();
} catch (Exception e) {
log.error("渲染模板失败,表名:" + gentableEntity.getTableName(), e);
}
}
}
......@@ -220,8 +258,19 @@ public class GentableServiceImpl extends AbstractCRUDServiceImpl<GentableDao, Ge
if (StringUtils.isNotEmpty(subTableName)) {
GentableEntity gentableEntity = this.selectOne(new GentableQuery().tableName(subTableName));
if (!ObjectUtils.isEmpty(gentableEntity)) {
List<GentableColumnEntity> columnEntities = gentableColumnService.find(new GentableColumnQuery().tableId(gentableEntity.getId()));
gentableEntity.setColumns(columnEntities);
setPkColumn(gentableEntity);
table.setSubTable(gentableEntity);
}
}
}
@Override
protected void removeAfter(Long[] ids, Context context, int result) throws AppException {
Long[] colIds = gentableColumnService.find(new GentableColumnQuery().tableIdList(Arrays.asList(ids))).stream().map(GentableColumnEntity::getId).toArray(Long[]::new);
gentableColumnService.remove(colIds, context);
super.removeAfter(ids, context, result);
}
}
\ No newline at end of file
......@@ -10,6 +10,7 @@ import com.mortals.xhx.base.system.gentable.model.GentableEntity;
import com.mortals.xhx.base.system.gentable.service.GentableColumnService;
import com.mortals.xhx.base.system.gentable.service.GentableService;
import com.mortals.xhx.common.code.*;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -133,26 +135,63 @@ public class GentableController extends BaseCRUDJsonMappingController<GentableSe
/**
* 通过表名生成代码
*
* @param tableName
* @return
*/
@PostMapping("/genCode")
public String genCode(@RequestParam(value = "tableName") String tableName) {
public void genCode(@RequestParam(value = "tableName") String tableName) {
Map<String, Object> model = new HashMap<>();
JSONObject ret = new JSONObject();
String busiDesc = "生成单表代码";
try {
byte[] bytes = this.service.downloadCode(tableName);
genCode(response, bytes);
recordSysLog(request, busiDesc + " 【成功】");
} catch (Exception e) {
this.doException(request, busiDesc, model, e);
}
}
/**
* 预览代码
*
* @param id
* @return
*/
@PostMapping("/preview")
public String preview(@RequestParam(value = "id") Long id) {
JSONObject ret = new JSONObject();
String busiDesc = "预览代码";
int code = VALUE_RESULT_SUCCESS;
try {
Map<String, String> model = this.service.previewCode(id);
ret.put(KEY_RESULT_DATA, model);
recordSysLog(request, busiDesc + " 【成功】");
} catch (Exception e) {
code = VALUE_RESULT_FAILURE;
this.doException(request, busiDesc, model, e);
}
ret.put(KEY_RESULT_CODE, code);
ret.put(KEY_RESULT_DATA, model);
return ret.toJSONString();
}
/**
* 生成zip文件
*/
private void genCode(HttpServletResponse response, byte[] data) throws IOException {
response.reset();
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\"");
response.addHeader("Content-Length", "" + data.length);
response.setContentType("application/octet-stream; charset=UTF-8");
IOUtils.write(data, response.getOutputStream());
}
}
\ No newline at end of file
......@@ -2,6 +2,21 @@ package com.mortals.xhx.common.key;
public final class Constant {
/**
* UTF-8 字符集
*/
public static final String UTF8 = "UTF-8";
/**
* GBK 字符集
*/
public static final String GBK = "GBK";
/**
* http请求
*/
public static final String HTTP = "http://";
/** 基础代码版本 Z-BASE.MANAGER-S1.0.0 */
public final static String BASEMANAGER_VERSION = "Z-BASE.MANAGER-S1.0.0";
......
......@@ -6,110 +6,177 @@ package com.mortals.xhx.common.key;
* @author: zxfei
* @date: 2021/9/28 15:43
*/
public class GenConstants
{
/** 单表(增删改查) */
public class GenConstants {
/**
* 单表(增删改查)
*/
public static final String TPL_CRUD = "crud";
/** 树表(增删改查) */
/**
* 树表(增删改查)
*/
public static final String TPL_TREE = "tree";
/** 主子表(增删改查) */
/**
* 主子表(增删改查)
*/
public static final String TPL_SUB = "sub";
/** 树编码字段 */
/**
* 树编码字段
*/
public static final String TREE_CODE = "treeCode";
/** 树父编码字段 */
/**
* 树父编码字段
*/
public static final String TREE_PARENT_CODE = "treeParentCode";
/** 树名称字段 */
/**
* 树名称字段
*/
public static final String TREE_NAME = "treeName";
/** 上级菜单ID字段 */
/**
* 上级菜单ID字段
*/
public static final String PARENT_MENU_ID = "parentMenuId";
/** 上级菜单名称字段 */
/**
* 上级菜单名称字段
*/
public static final String PARENT_MENU_NAME = "parentMenuName";
/** 数据库字符串类型 */
public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" };
/** 数据库文本类型 */
public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" };
/** 数据库时间类型 */
public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" };
/** 数据库数字类型 */
public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer",
"bit", "bigint", "float", "double", "decimal" };
/** 页面不需要编辑字段 */
public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" };
/** 页面不需要显示的列表字段 */
public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by",
"update_time" };
/** 页面不需要查询字段 */
public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by",
"update_time", "remark" };
/** Entity基类字段 */
public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" };
/** Tree基类字段 */
public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" };
/** 文本框 */
/**
* 数据库字符串类型
*/
public static final String[] COLUMNTYPE_STR = {"char", "varchar", "nvarchar", "varchar2"};
/**
* 数据库文本类型
*/
public static final String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext"};
/**
* 数据库时间类型
*/
public static final String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp"};
/**
* 数据库数字类型
*/
public static final String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer",
"bit", "bigint", "float", "double", "decimal"};
/**
* 页面不需要编辑字段
*/
public static final String[] COLUMNNAME_NOT_EDIT = {"id", "create_by", "create_time", "del_flag"};
/**
* 页面不需要显示的列表字段
*/
public static final String[] COLUMNNAME_NOT_LIST = {"id", "create_by", "create_time", "del_flag", "update_by",
"update_time"};
/**
* 页面不需要查询字段
*/
public static final String[] COLUMNNAME_NOT_QUERY = {"id", "create_by", "create_time", "del_flag", "update_by",
"update_time", "remark"};
/**
* Entity基类字段
*/
public static final String[] BASE_ENTITY = {"createUserId", "createUser", "createTime", "updateUserId", "updateUser", "updateTime", "id"};
/**
* Tree基类字段
*/
public static final String[] TREE_ENTITY = {"parentName", "parentId", "orderNum", "ancestors", "children"};
/**
* 文本框
*/
public static final String HTML_INPUT = "input";
/** 文本域 */
/**
* 文本域
*/
public static final String HTML_TEXTAREA = "textarea";
/** 下拉框 */
/**
* 下拉框
*/
public static final String HTML_SELECT = "select";
/** 单选框 */
/**
* 单选框
*/
public static final String HTML_RADIO = "radio";
/** 复选框 */
/**
* 复选框
*/
public static final String HTML_CHECKBOX = "checkbox";
/** 日期控件 */
/**
* 日期控件
*/
public static final String HTML_DATETIME = "datetime";
/** 图片上传控件 */
/**
* 图片上传控件
*/
public static final String HTML_IMAGE_UPLOAD = "imageUpload";
/** 文件上传控件 */
/**
* 文件上传控件
*/
public static final String HTML_FILE_UPLOAD = "fileUpload";
/** 富文本控件 */
/**
* 富文本控件
*/
public static final String HTML_EDITOR = "editor";
/** 字符串类型 */
/**
* 字符串类型
*/
public static final String TYPE_STRING = "String";
/** 整型 */
/**
* 整型
*/
public static final String TYPE_INTEGER = "Integer";
/** 长整型 */
/**
* 长整型
*/
public static final String TYPE_LONG = "Long";
/** 浮点型 */
/**
* 浮点型
*/
public static final String TYPE_DOUBLE = "Double";
/** 高精度计算类型 */
/**
* 高精度计算类型
*/
public static final String TYPE_BIGDECIMAL = "BigDecimal";
/** 时间类型 */
/**
* 时间类型
*/
public static final String TYPE_DATE = "Date";
/** 模糊查询 */
/**
* 模糊查询
*/
public static final String QUERY_LIKE = "LIKE";
/** 需要 */
/**
* 需要
*/
public static final Integer REQUIRE = 1;
}
package com.mortals.xhx.common.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.util.DateUtils;
import com.mortals.xhx.ManagerApplication;
import com.mortals.xhx.base.system.gentable.model.GentableColumnEntity;
import com.mortals.xhx.base.system.gentable.model.GentableEntity;
import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.common.key.GenConstants;
import freemarker.cache.ClassTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import lombok.SneakyThrows;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import static com.mortals.xhx.common.utils.GenUtils.getBusinessName;
public class FreeMarkerUtils {
......@@ -43,14 +47,22 @@ public class FreeMarkerUtils {
/**
* 初始化freeMaker方法
*/
@SneakyThrows
public static void initFreeMarker() {
//初始化模板引擎
cfg = new Configuration(Configuration.VERSION_2_3_29);
ClassLoader loader = FreeMarkerUtils.class.getClassLoader();
//指定模板文件存放的地方
cfg.setClassLoaderForTemplateLoading(FreeMarkerUtils.class.getClassLoader(), "/template/java");
cfg.setClassLoaderForTemplateLoading(FreeMarkerUtils.class.getClassLoader(), "/template/sql");
cfg.setClassLoaderForTemplateLoading(FreeMarkerUtils.class.getClassLoader(), "/template/vue");
cfg.setClassLoaderForTemplateLoading(FreeMarkerUtils.class.getClassLoader(), "/template/xml");
cfg.setDirectoryForTemplateLoading(new File(System.getProperty("user.dir") + "\\government-manager\\target\\classes\\template\\java"));
//cfg.setDirectoryForTemplateLoading(new File(System.getProperty("user.dir") + "\\government-manager\\target\\classes\\template\\xml\\"));
//cfg.set
// cfg.setTemplateLoader(new ClassTemplateLoader(FreeMarkerUtils.class,"/template/java/entity.ftl"));
// cfg.setClassForTemplateLoading(FreeMarkerUtils.class, "/template/");
// cfg.setClassForTemplateLoading(FreeMarkerUtils.class, "\\template\\sql");
//cfg.setClassForTemplateLoading(FreeMarkerUtils.class, "\\template\\vue");
//cfg.setClassForTemplateLoading(FreeMarkerUtils.class, "\\template\\xml");
//设置字符编码集
cfg.setDefaultEncoding("UTF-8");
//设置异常的处理方式
......@@ -60,6 +72,34 @@ public class FreeMarkerUtils {
}
/**
* 获取模板信息
*
* @return 模板列表
*/
public static List<String> getTemplateList(String tplCategory) {
List<String> templates = new ArrayList<String>();
templates.add("entity.java.ftl");
templates.add("entityQuery.java.ftl");
templates.add("dao.java.ftl");
templates.add("daoImpl.java.ftl");
templates.add("service.java.ftl");
templates.add("serviceImpl.java.ftl");
templates.add("web.java.ftl");
templates.add("webForm.java.ftl");
templates.add("sqlMap.xml.ftl");
if (GenConstants.TPL_CRUD.equals(tplCategory)) {
// templates.add("vm/vue/index.vue.vm");
} else if (GenConstants.TPL_TREE.equals(tplCategory)) {
//templates.add("vm/vue/index-tree.vue.vm");
} else if (GenConstants.TPL_SUB.equals(tplCategory)) {
//templates.add("vm/vue/index.vue.vm");
//templates.add("vm/java/sub-domain.java.vm");
}
return templates;
}
// 获取模板对象
public static Template getTemplate(String templateName) {
try {
......@@ -86,7 +126,8 @@ public class FreeMarkerUtils {
data.put("tplCategory", genTable.getTplCategory());
data.put("tableName", genTable.getTableName());
data.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "【请填写功能名称】");
data.put("tableComment", genTable.getTableComment());
data.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : genTable.getTableComment());
data.put("ClassName", genTable.getClassName());
data.put("className", StringUtils.uncapitalize(genTable.getClassName()));
data.put("moduleName", genTable.getModuleName());
......@@ -99,13 +140,18 @@ public class FreeMarkerUtils {
data.put("pkColumn", genTable.getPkColumn());
data.put("importList", getImportList(genTable));
data.put("columns", genTable.getColumns());
data.put("table", genTable);
String RequestMapping = Arrays.stream(getBusinessName(genTable.getTableName()).split("\\.")).collect(Collectors.joining("/"));
data.put("RequestMapping", RequestMapping);
if (GenConstants.TPL_TREE.equals(tplCategory)) {
setTreeFreeMarkerData(data, genTable);
}
if (GenConstants.TPL_SUB.equals(tplCategory)) {
setSubFreeMarkerData(data, genTable);
}
// System.out.println(JSON.toJSONString(data));
return data;
}
......@@ -237,7 +283,7 @@ public class FreeMarkerUtils {
for (GentableColumnEntity column : columns) {
if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) {
importList.add("java.util.Date");
importList.add("com.fasterxml.jackson.annotation.JsonFormat");
//importList.add("com.fasterxml.jackson.annotation.JsonFormat");
} else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) {
importList.add("java.math.BigDecimal");
}
......@@ -268,6 +314,9 @@ public class FreeMarkerUtils {
//实体类输出路径
if (template.contains("entity.ftl")) {
fileName = StringUtils.format("{}/{}/model/{}Entity.java", javaPath, businessName, className);
} else if (template.contains("entityQuery.ftl")) {
fileName = StringUtils.format("{}/{}/model/{}Query.java", javaPath, businessName, className);
}
......
package com.mortals.xhx.common.utils;
import cn.hutool.core.util.StrUtil;
import com.mortals.xhx.base.framework.config.GenConfig;
import com.mortals.xhx.base.system.gentable.model.GentableColumnEntity;
import com.mortals.xhx.base.system.gentable.model.GentableEntity;
......@@ -11,6 +12,7 @@ import org.apache.commons.lang3.RegExUtils;
import java.util.Arrays;
import java.util.Date;
import java.util.stream.Collectors;
/**
* 代码生成器 工具类
......@@ -43,7 +45,7 @@ public class GenUtils {
column.setCreateUser(table.getCreateUser());
column.setCreateTime(new Date());
// 设置java字段名
column.setJavaField(StringUtils.toCamelCase(columnName));
column.setJavaField(StrUtil.toCamelCase(columnName));
// 设置默认类型
column.setJavaType(GenConstants.TYPE_STRING);
......@@ -144,9 +146,19 @@ public class GenUtils {
* @return 业务名
*/
public static String getBusinessName(String tableName) {
int lastIndex = tableName.lastIndexOf("_");
int nameLength = tableName.length();
String businessName = StringUtils.substring(tableName, lastIndex + 1, nameLength);
//替换前缀
boolean autoRemovePre = GenConfig.getAutoRemovePre();
String tablePrefix = GenConfig.getTablePrefix();
if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) {
String[] searchList = StringUtils.split(tablePrefix, ",");
tableName = replaceFirst(tableName, searchList);
}
//分割拼接
String businessName = Arrays.stream(tableName.split("_")).collect(Collectors.joining("."));
// int lastIndex = tableName.lastIndexOf("_");
// int nameLength = tableName.length();
// String businessName = StringUtils.substring(tableName, lastIndex + 1, nameLength);
return businessName;
}
......@@ -222,4 +234,15 @@ public class GenUtils {
return 0;
}
}
public static void main(String[] args) {
String name="aaa";
System.out.println(Arrays.stream(name.split("_")).collect(Collectors.joining(".")));
System.out.println(Arrays.stream("data".split(".")).collect(Collectors.joining("/")));
}
}
package com.mortals.xhx.daemon.demo;
import com.mortals.framework.model.BaseEntityStr;
/**
* 实体对象
*
* @author zxfei
* @date 2021-09-30
*/
public class DemoEntity extends BaseEntityStr {
private static final long serialVersionUID = 1L;
/**
*
*/
private String fieldOne;
/**
*
*/
private Long fieldTwo;
public DemoEntity(){}
/**
* 获取
* @return String
*/
public String getFieldOne(){
return fieldOne;
}
/**
* 设置
* @param fieldOne
*/
public void setFieldOne(String fieldOne){
this.fieldOne = fieldOne;
}
/**
* 获取
* @return Long
*/
public Long getFieldTwo(){
return fieldTwo;
}
/**
* 设置
* @param fieldTwo
*/
public void setFieldTwo(Long fieldTwo){
this.fieldTwo = fieldTwo;
}
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj instanceof DemoEntity) {
DemoEntity tmp = (DemoEntity) obj;
if (this.getId() == tmp.getId()) {
return true;
}
}
return false;
}
public String toString(){
StringBuilder sb = new StringBuilder("");
sb.append(",fieldOne:").append(getFieldOne());
sb.append(",fieldTwo:").append(getFieldTwo());
return sb.toString();
}
public void initAttrValue(){
this.fieldOne = null;
this.fieldTwo = null;
}
}
\ No newline at end of file
package com.mortals.xhx.daemon.demo;
import java.util.List;
/**
* 查询对象
*
* @author zxfei
* @date 2021-09-30
*/
public class DemoQuery extends DemoEntity {
/** */
private List<String> idList;
/** */
private List<String> fieldOneList;
/** 开始 */
private Long fieldTwoStart;
/** 结束 */
private Long fieldTwoEnd;
/** 增加 */
private Long fieldTwoIncrement;
/** 列表 */
private List <Long> fieldTwoList;
/** 开始 */
private String updateTimeStart;
/** 结束 */
private String updateTimeEnd;
/** */
private List<String> updateUserList;
/** 开始 */
private String createTimeStart;
/** 结束 */
private String createTimeEnd;
/** */
private List<String> createUserList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<DemoQuery> orConditionList;
/** AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) */
private List<DemoQuery> andConditionList;
public DemoQuery(){}
/**
* 获取
* @return idList
*/
public List<String> getIdList(){
return this.idList;
}
/**
* 设置
* @param idList
*/
public void setIdList(List<String> idList){
this.idList = idList;
}
/**
* 获取
* @return fieldOneList
*/
public List<String> getFieldOneList(){
return this.fieldOneList;
}
/**
* 设置
* @param fieldOneList
*/
public void setFieldOneList(List<String> fieldOneList){
this.fieldOneList = fieldOneList;
}
/**
* 获取 开始
* @return fieldTwoStart
*/
public Long getFieldTwoStart(){
return this.fieldTwoStart;
}
/**
* 设置 开始
* @param fieldTwoStart
*/
public void setFieldTwoStart(Long fieldTwoStart){
this.fieldTwoStart = fieldTwoStart;
}
/**
* 获取 结束
* @return $fieldTwoEnd
*/
public Long getFieldTwoEnd(){
return this.fieldTwoEnd;
}
/**
* 设置 结束
* @param fieldTwoEnd
*/
public void setFieldTwoEnd(Long fieldTwoEnd){
this.fieldTwoEnd = fieldTwoEnd;
}
/**
* 获取 增加
* @return fieldTwoIncrement
*/
public Long getFieldTwoIncrement(){
return this.fieldTwoIncrement;
}
/**
* 设置 增加
* @param fieldTwoIncrement
*/
public void setFieldTwoIncrement(Long fieldTwoIncrement){
this.fieldTwoIncrement = fieldTwoIncrement;
}
/**
* 获取
* @return fieldTwoList
*/
public List<Long> getFieldTwoList(){
return this.fieldTwoList;
}
/**
* 设置
* @param fieldTwoList
*/
public void setFieldTwoList(List<Long> fieldTwoList){
this.fieldTwoList = fieldTwoList;
}
/**
* 获取 开始
* @return updateTimeStart
*/
public String getUpdateTimeStart(){
return this.updateTimeStart;
}
/**
* 设置 开始
* @param updateTimeStart
*/
public void setUpdateTimeStart(String updateTimeStart){
this.updateTimeStart = updateTimeStart;
}
/**
* 获取 结束
* @return updateTimeEnd
*/
public String getUpdateTimeEnd(){
return this.updateTimeEnd;
}
/**
* 设置 结束
* @param updateTimeEnd
*/
public void setUpdateTimeEnd(String updateTimeEnd){
this.updateTimeEnd = updateTimeEnd;
}
/**
* 获取
* @return updateUserList
*/
public List<String> getUpdateUserList(){
return this.updateUserList;
}
/**
* 设置
* @param updateUserList
*/
public void setUpdateUserList(List<String> updateUserList){
this.updateUserList = updateUserList;
}
/**
* 获取 开始
* @return createTimeStart
*/
public String getCreateTimeStart(){
return this.createTimeStart;
}
/**
* 设置 开始
* @param createTimeStart
*/
public void setCreateTimeStart(String createTimeStart){
this.createTimeStart = createTimeStart;
}
/**
* 获取 结束
* @return createTimeEnd
*/
public String getCreateTimeEnd(){
return this.createTimeEnd;
}
/**
* 设置 结束
* @param createTimeEnd
*/
public void setCreateTimeEnd(String createTimeEnd){
this.createTimeEnd = createTimeEnd;
}
/**
* 获取
* @return createUserList
*/
public List<String> getCreateUserList(){
return this.createUserList;
}
/**
* 设置
* @param createUserList
*/
public void setCreateUserList(List<String> createUserList){
this.createUserList = createUserList;
}
/**
* 设置
* @param id
*/
public DemoQuery id(String id){
setId(id);
return this;
}
/**
* 设置
* @param idList
*/
public DemoQuery idList(List<String> idList){
this.idList = idList;
return this;
}
/**
* 设置
* @param fieldOne
*/
public DemoQuery fieldOne(String fieldOne){
setFieldOne(fieldOne);
return this;
}
/**
* 设置
* @param fieldOneList
*/
public DemoQuery fieldOneList(List<String> fieldOneList){
this.fieldOneList = fieldOneList;
return this;
}
/**
* 设置
* @param fieldTwo
*/
public DemoQuery fieldTwo(Long fieldTwo){
setFieldTwo(fieldTwo);
return this;
}
/**
* 设置 开始
* @param fieldTwoStart
*/
public DemoQuery fieldTwoStart(Long fieldTwoStart){
this.fieldTwoStart = fieldTwoStart;
return this;
}
/**
* 设置 结束
* @param fieldTwoEnd
*/
public DemoQuery fieldTwoEnd(Long fieldTwoEnd){
this.fieldTwoEnd = fieldTwoEnd;
return this;
}
/**
* 设置 增加
* @param fieldTwoIncrement
*/
public DemoQuery fieldTwoIncrement(Long fieldTwoIncrement){
this.fieldTwoIncrement = fieldTwoIncrement;
return this;
}
/**
* 设置
* @param fieldTwoList
*/
public DemoQuery fieldTwoList(List<Long> fieldTwoList){
this.fieldTwoList = fieldTwoList;
return this;
}
/**
* 设置
* @param updateUser
*/
public DemoQuery updateUser(String updateUser){
setUpdateUser(updateUser);
return this;
}
/**
* 设置
* @param updateUserList
*/
public DemoQuery updateUserList(List<String> updateUserList){
this.updateUserList = updateUserList;
return this;
}
/**
* 设置
* @param createUser
*/
public DemoQuery createUser(String createUser){
setCreateUser(createUser);
return this;
}
/**
* 设置
* @param createUserList
*/
public DemoQuery createUserList(List<String> createUserList){
this.createUserList = createUserList;
return this;
}
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
public List<DemoQuery> getOrConditionList(){
return this.orConditionList;
}
/**
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList
*/
public void setOrConditionList(List<DemoQuery> orConditionList){
this.orConditionList = orConditionList;
}
/**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
public List<DemoQuery> getAndConditionList(){
return this.andConditionList;
}
/**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
public void setAndConditionList(List<DemoQuery> andConditionList){
this.andConditionList = andConditionList;
}
}
\ No newline at end of file
package com.mortals.xhx.module.matter.dao.ibatis;
import com.mortals.framework.model.TableParam;
import com.mortals.framework.model.TableStrategy;
import com.mortals.framework.util.DateUtils;
import com.mortals.framework.util.StringUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.stereotype.Repository;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import com.mortals.xhx.module.matter.dao.MatterDatumDao;
import com.mortals.xhx.module.matter.model.MatterDatumEntity;
import java.util.Date;
import com.mortals.framework.dao.ibatis.SubmeterDaoImpl;
import com.mortals.xhx.module.matter.model.MatterDatumQuery;
/**
* <p>Title: 事项申请材料</p>
* <p>Description: MatterDatumDaoImpl DAO接口 </p>
* @author
* @version 1.0.0
*/
* 事项申请材料DaoImpl DAO接口
*
* @author zxfei
* @date 2021-09-30
*/
@Repository("matterDatumDao")
public class MatterDatumDaoImpl extends BaseCRUDDaoMybatis<MatterDatumEntity,Long> implements MatterDatumDao {
public class MatterDatumDaoImpl extends SubmeterDaoImpl<MatterDatumEntity,Long> implements MatterDatumDao {
@Override
protected TableStrategy getTableStrategy() {
return new TableStrategy("mortals_xhx_matter_datum_${unionTime}", TableStrategy.STRATEGY_BY_MONTH, 3);
}
@Override
public TableParam getTableParam(MatterDatumEntity makeTableNameOfentity) {
TableParam tableParam = new TableParam();
if (!ObjectUtils.isEmpty(makeTableNameOfentity.getCreateTime())) {
tableParam.unionTime = makeTableNameOfentity.getCreateTime();
} else if (makeTableNameOfentity instanceof MatterDatumQuery) {
MatterDatumQuery MatterDatumQuery = (MatterDatumQuery) makeTableNameOfentity;
if (StringUtils.isNotEmpty(MatterDatumQuery.getCreateTimeStart())) {
tableParam.unionTime = DateUtils.StrToDate(MatterDatumQuery.getCreateTimeStart());
} else if (StringUtils.isNotEmpty(MatterDatumQuery.getCreateTimeEnd())) {
tableParam.unionTime = DateUtils.StrToDate(MatterDatumQuery.getCreateTimeEnd());
}
}
if (ObjectUtils.isEmpty(tableParam.unionTime)) {
tableParam.unionTime = new Date();
}
return tableParam;
}
}
}
\ No newline at end of file
package com.mortals.xhx.module.matter.model;
import java.math.BigDecimal;
import java.util.Date;
import com.mortals.framework.model.BaseEntityLong;
/**
......@@ -31,6 +32,9 @@ public class MatterEntity extends MatterEntityExt{
*/
private String groupName;
/**
* 区域编码
*/
......
......@@ -5,6 +5,6 @@ gen:
# 默认生成包路径 module 需改成自己的模块名称 如 system monitor tool
packageName: com.mortals.xhx.module
# 自动去除表前缀,默认是false
autoRemovePre: false
autoRemovePre: true
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
tablePrefix: sys_,mortals_xhx_,mortals_iot_
\ No newline at end of file
......@@ -20,6 +20,7 @@
<result property="isList" column="isList" />
<result property="isQuery" column="isQuery" />
<result property="htmlType" column="htmlType" />
<result property="defaultValue" column="defaultValue" />
<result property="sort" column="sort" />
<result property="updateTime" column="updateTime" />
<result property="updateUser" column="updateUser" />
......@@ -75,6 +76,9 @@
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('htmlType') or colPickMode == 1 and data.containsKey('htmlType')))">
a.htmlType as htmlType,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('defaultValue') or colPickMode == 1 and data.containsKey('defaultValue')))">
a.defaultValue as defaultValue,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('sort') or colPickMode == 1 and data.containsKey('sort')))">
a.sort as sort,
</if>
......@@ -95,18 +99,18 @@
<!-- 新增 -->
<insert id="insert" parameterType="GentableColumnEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_gentable_column
(tableId,columnName,columnComment,columnType,javaType,javaField,isPrimaryKey,isIncrement,isRequired,isInsert,isEdit,isList,isQuery,htmlType,sort,updateTime,updateUser,createTime,createUser)
(tableId,columnName,columnComment,columnType,javaType,javaField,isPrimaryKey,isIncrement,isRequired,isInsert,isEdit,isList,isQuery,htmlType,defaultValue,sort,updateTime,updateUser,createTime,createUser)
VALUES
(#{tableId},#{columnName},#{columnComment},#{columnType},#{javaType},#{javaField},#{isPrimaryKey},#{isIncrement},#{isRequired},#{isInsert},#{isEdit},#{isList},#{isQuery},#{htmlType},#{sort},#{updateTime},#{updateUser},#{createTime},#{createUser})
(#{tableId},#{columnName},#{columnComment},#{columnType},#{javaType},#{javaField},#{isPrimaryKey},#{isIncrement},#{isRequired},#{isInsert},#{isEdit},#{isList},#{isQuery},#{htmlType},#{defaultValue},#{sort},#{updateTime},#{updateUser},#{createTime},#{createUser})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_gentable_column
(tableId,columnName,columnComment,columnType,javaType,javaField,isPrimaryKey,isIncrement,isRequired,isInsert,isEdit,isList,isQuery,htmlType,sort,updateTime,updateUser,createTime,createUser)
(tableId,columnName,columnComment,columnType,javaType,javaField,isPrimaryKey,isIncrement,isRequired,isInsert,isEdit,isList,isQuery,htmlType,defaultValue,sort,updateTime,updateUser,createTime,createUser)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.tableId},#{item.columnName},#{item.columnComment},#{item.columnType},#{item.javaType},#{item.javaField},#{item.isPrimaryKey},#{item.isIncrement},#{item.isRequired},#{item.isInsert},#{item.isEdit},#{item.isList},#{item.isQuery},#{item.htmlType},#{item.sort},#{item.updateTime},#{item.updateUser},#{item.createTime},#{item.createUser})
(#{item.tableId},#{item.columnName},#{item.columnComment},#{item.columnType},#{item.javaType},#{item.javaField},#{item.isPrimaryKey},#{item.isIncrement},#{item.isRequired},#{item.isInsert},#{item.isEdit},#{item.isList},#{item.isQuery},#{item.htmlType},#{item.defaultValue},#{item.sort},#{item.updateTime},#{item.updateUser},#{item.createTime},#{item.createUser})
</foreach>
</insert>
<!-- 根据ParamDto更新 -->
......@@ -183,6 +187,9 @@
<if test="(colPickMode==0 and data.containsKey('htmlTypeIncrement')) or (colPickMode==1 and !data.containsKey('htmlTypeIncrement'))">
a.htmlType=ifnull(a.htmlType,0) + #{data.htmlTypeIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('defaultValue')) or (colPickMode==1 and !data.containsKey('defaultValue'))">
a.defaultValue=#{data.defaultValue},
</if>
<if test="(colPickMode==0 and data.containsKey('sort')) or (colPickMode==1 and !data.containsKey('sort'))">
a.sort=#{data.sort},
</if>
......@@ -372,6 +379,14 @@
</foreach>
</trim>
<trim prefix="defaultValue=(case" suffix="ELSE defaultValue end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('defaultValue')) or (colPickMode==1 and !item.containsKey('defaultValue'))">
when a.id=#{item.id} then #{item.defaultValue}
</if>
</foreach>
</trim>
<trim prefix="sort=(case" suffix="ELSE sort end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
......@@ -800,6 +815,21 @@
${_conditionType_} a.htmlType <![CDATA[ <= ]]> #{${_conditionParam_}.htmlTypeEnd}
</if>
<if test="conditionParamRef.containsKey('defaultValue')">
<if test="conditionParamRef.defaultValue != null and conditionParamRef.defaultValue != ''">
${_conditionType_} a.defaultValue like #{${_conditionParam_}.defaultValue}
</if>
<if test="conditionParamRef.defaultValue == null">
${_conditionType_} a.defaultValue is null
</if>
</if>
<if test="conditionParamRef.containsKey('defaultValueList')">
${_conditionType_} a.defaultValue in
<foreach collection="conditionParamRef.defaultValueList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('sort')">
<if test="conditionParamRef.sort != null ">
${_conditionType_} a.sort = #{${_conditionParam_}.sort}
......@@ -969,6 +999,11 @@
<if test='orderCol.htmlType != null and "DESC".equalsIgnoreCase(orderCol.htmlType)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('defaultValue')">
a.defaultValue
<if test='orderCol.defaultValue != null and "DESC".equalsIgnoreCase(orderCol.defaultValue)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('sort')">
a.sort
<if test='orderCol.sort != null and "DESC".equalsIgnoreCase(orderCol.sort)'>DESC</if>
......
......@@ -7,6 +7,7 @@
<select id="selectDbTableColumnsByName" parameterType="String" resultMap="GentableColumnEntity-Map">
SELECT
column_name as columnName,
column_default as defaultValue,
( CASE WHEN ( is_nullable = 'no' <![CDATA[ && ]]> column_key != 'PRI' ) THEN '1' ELSE NULL END ) AS isRequired,
( CASE WHEN column_key = 'PRI' THEN '1' ELSE '0' END ) AS isPrimaryKey,
ordinal_position AS sort,
......@@ -17,7 +18,7 @@
information_schema.COLUMNS
WHERE
table_schema = ( SELECT DATABASE ( ) )
AND table_name = 'mortals_xhx_accept'
AND table_name = #{tableName}
ORDER BY
ordinal_position
</select>
......
package ${entityPackageName};
import com.mortals.framework.dao.ICRUDDao;
import ${pack}.model.${entityClassName}Entity;
/**
* <p>Title: ${entityDesc}</p>
* <p>Description: ${entityClassName}Dao DAO接口 </p>
* @author
* @version 1.0.0
*/
public interface ${entityClassName}Dao extends ICRUDDao<${entityClassName}Entity,Long>{
}
package ${packageName}.${businessName}.dao;
import com.mortals.framework.dao.ICRUDDao;
import ${packageName}.${businessName}.model.${ClassName}Entity;
/**
* ${functionName}Dao
* ${functionName} DAO接口
*
* @author ${author}
* @date ${datetime}
*/
<#if table.dividedTableType!=0 >
<#assign Dao = "ICRUDSubmeterDao">
<#else>
<#assign Dao = "ICRUDDao">
</#if>
public interface ${ClassName}Dao extends ${Dao}<${ClassName}Entity,Long>{
}
package ${entityPackageName};
import org.springframework.stereotype.Repository;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import ${pack}.dao.${entityClassName}Dao;
import ${pack}.model.${entityClassName}Entity;
/**
* <p>Title: ${entityDesc}</p>
* <p>Description: ${entityClassName}DaoImpl DAO接口 </p>
* @author
* @version 1.0.0
*/
@Repository("${entityClassName?uncap_first}Dao")
public class ${entityClassName}DaoImpl extends BaseCRUDDaoMybatis<${entityClassName}Entity,Long> implements ${entityClassName}Dao {
}
package ${packageName}.${businessName}.dao.ibatis;
import com.mortals.framework.model.TableParam;
import com.mortals.framework.model.TableStrategy;
import com.mortals.framework.util.DateUtils;
import com.mortals.framework.util.StringUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.stereotype.Repository;
import ${packageName}.${businessName}.dao.${ClassName}Dao;
import ${packageName}.${businessName}.model.${ClassName}Entity;
import java.util.Date;
<#if table.dividedTableType==0 >
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
<#else>
import com.mortals.framework.dao.ibatis.SubmeterDaoImpl;
import ${packageName}.${businessName}.model.${ClassName}Query;
</#if>
<#if table.dividedTableType==1 >
<#assign TableStrategy = "TableStrategy.STRATEGY_BY_DAY">
<#elseif table.dividedTableType==2>
<#assign TableStrategy = "TableStrategy.STRATEGY_BY_WEEK">
<#elseif table.dividedTableType==3>
<#assign TableStrategy = "TableStrategy.STRATEGY_BY_MONTH">
<#elseif table.dividedTableType==4>
<#assign TableStrategy = "TableStrategy.STRATEGY_BY_MOD">
<#elseif table.dividedTableType==0>
</#if>
/**
* ${functionName}DaoImpl DAO接口
*
* @author ${author}
* @date ${datetime}
*/
@Repository("${ClassName?uncap_first}Dao")
<#if table.dividedTableType!=0 >
public class ${ClassName}DaoImpl extends SubmeterDaoImpl<${ClassName}Entity,Long> implements ${ClassName}Dao {
@Override
protected TableStrategy getTableStrategy() {
return new TableStrategy("${tableName}_<#noparse>$</#noparse>{unionTime}", ${TableStrategy}, 3);
}
@Override
public TableParam getTableParam(${ClassName}Entity makeTableNameOfentity) {
TableParam tableParam = new TableParam();
if (!ObjectUtils.isEmpty(makeTableNameOfentity.getCreateTime())) {
tableParam.unionTime = makeTableNameOfentity.getCreateTime();
} else if (makeTableNameOfentity instanceof ${ClassName}Query) {
${ClassName}Query ${ClassName}Query = (${ClassName}Query) makeTableNameOfentity;
if (StringUtils.isNotEmpty(${ClassName}Query.getCreateTimeStart())) {
tableParam.unionTime = DateUtils.StrToDate(${ClassName}Query.getCreateTimeStart());
} else if (StringUtils.isNotEmpty(${ClassName}Query.getCreateTimeEnd())) {
tableParam.unionTime = DateUtils.StrToDate(${ClassName}Query.getCreateTimeEnd());
}
}
if (ObjectUtils.isEmpty(tableParam.unionTime)) {
tableParam.unionTime = new Date();
}
return tableParam;
}
<#else>
public class ${ClassName}DaoImpl extends BaseCRUDDaoMybatis<${ClassName}Entity,Long> implements ${ClassName}Dao {
</#if>
}
package ${entityPackageName};
<#list importPacks as pack>
<#if pack == "BigDecimal">
import java.math.${pack};
</#if>
<#if pack == "java.util.Date">
import ${pack};
</#if>
</#list>
import com.mortals.framework.model.BaseEntityLong;
/**
*
* Description:${entityClassName}
* date: ${date?datetime}
*/
public class ${entityClassName}Entity extends BaseEntityLong{
private static final long serialVersionUID = ${serialVersionUID?c}L;
<#list fields as field>
<#if (field.pk)??>
<#else>
<#if field.columnName!='id'>
/**
* ${field.remarks}
*/
private ${(field.typeName?split("."))?last} ${field.attName};
</#if>
</#if>
</#list>
public ${entityClassName}Entity(){
}
<#list fields as field>
<#if (field.pk)?? && field.columnName!='id'>
/**
* 获取 ${field.remarks}
* @return ${field.attName}
*/
public ${(field.typeName?split("."))?last} get${field.attName?cap_first}() {
return getId();
}
/**
* 设置 ${field.remarks}
* @param ${field.attName}
*/
public void set${field.attName?cap_first}(${(field.typeName?split("."))?last} ${field.attName}) {
setId(${field.attName});
}
<#else>
<#if field.columnName!='id'>
/**
* 获取 ${field.remarks}
* @return ${field.attName}
*/
public ${(field.typeName?split("."))?last} get${field.attName?cap_first}() {
return this.${field.attName};
}
/**
* 设置 ${field.remarks}
* @param ${field.attName}
*/
public void set${field.attName?cap_first}(${(field.typeName?split("."))?last} ${field.attName}) {
this.${field.attName} = ${field.attName};
}
</#if>
</#if>
<#-- <#if field.columnName != "id">
/**
* 获取 ${field.remarks}
* @return ${field.columnName}
*/
public ${(field.typeName?split("."))?last} get${field.columnName?cap_first}() {
return this.${field.columnName};
}
/**
* 设置 ${field.remarks}
* @param ${field.columnName}
*/
public void set${field.columnName?cap_first}(${(field.typeName?split("."))?last} ${field.columnName}) {
this.${field.columnName} = ${field.columnName};
}
</#if>-->
</#list>
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj instanceof ${entityClassName}Entity) {
${entityClassName}Entity tmp = (${entityClassName}Entity) obj;
if (this.getId().longValue() == tmp.getId().longValue()) {
return true;
}
}
return false;
}
public String toString(){
StringBuilder sb = new StringBuilder("");
sb
<#list fields as field>
.append(",${field.attName}:").append(get${field.attName?cap_first}())
</#list>;
return sb.toString();
}
public void initAttrValue(){
<#list fields as field>
<#if field.columnName != "id">
this.${field.attName} = null;
</#if>
</#list>
}
}
\ No newline at end of file
package ${packageName}.${businessName}.model;
<#if table.tplCategory=="crud" >
<#--判断主键类型,设置继承实体类 -->
<#if pkColumn??&&pkColumn.javaType=="String" >
<#assign Entity = "BaseEntityStr">
<#elseif pkColumn??&&pkColumn.javaType=="Integer">
<#assign Entity = "BaseEntityInt">
<#elseif pkColumn??&&pkColumn.javaType=="Long">
<#assign Entity = "BaseEntityLong">
<#else>
<#assign Entity = "BaseEntityLong">
</#if>
<#elseif table.tplCategory=="tree">
<#assign Entity = "TreeEntity">
<#elseif table.tplCategory=="sub">
<#assign Entity = "BaseEntityLong">
<#else>
<#assign Entity = "BaseEntityLong">
</#if>
<#list importList as import>
import ${import};
</#list>
import com.mortals.framework.model.${Entity};
/**
* ${functionName}实体对象
*
* @author ${author}
* @date ${datetime}
*/
public class ${ClassName}Entity extends ${Entity} {
private static final long serialVersionUID = 1L;
<#list columns as column>
<#if !column.isSuperColumn(column.javaField)>
/**
* ${column.columnComment}
*/
private ${column.javaType} ${column.javaField};
</#if>
</#list>
<#if table.subTable??>
/**
* ${table.subTable.functionName}信息
*/
private List<${subClassName}> ${subclassName}List;
</#if>
public ${ClassName}Entity(){}
<#--get set属性 -->
<#list columns as column>
<#if !column.isSuperColumn(column.javaField)>
<#if column.javaField[1..2]?matches("[A-Z]")>
<#assign AttrName = column.javaField>
<#else>
<#assign AttrName = column.javaField?cap_first>
</#if>
/**
* 获取 ${column.columnComment}
* @return ${column.javaType}
*/
public ${column.javaType} get${AttrName}(){
return ${column.javaField};
}
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}
*/
public void set${AttrName}(${column.javaType} ${column.javaField}){
this.${column.javaField} = ${column.javaField};
}
</#if>
</#list>
<#if subTable??>
public List<${subClassName}> get${subClassName}List(){
return ${subclassName}List;
}
public void set${subClassName}List(List<${subClassName}> ${subclassName}List){
this.${subclassName}List = ${subclassName}List;
}
</#if>
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj instanceof ${ClassName}Entity) {
${ClassName}Entity tmp = (${ClassName}Entity) obj;
if (this.getId() == tmp.getId()) {
return true;
}
}
return false;
}
public String toString(){
StringBuilder sb = new StringBuilder("");
<#list columns as column>
<#if !column.isSuperColumn(column.javaField)>
sb.append(",${column.javaField}:").append(get${column.javaField?cap_first}());
</#if>
</#list>
return sb.toString();
}
public void initAttrValue(){
<#list columns as column>
<#if !column.isSuperColumn(column.javaField)>
<#if column.javaType=="Long" && column.defaultValue??>
<#assign Default>${column.defaultValue}L</#assign>
<#elseif column.javaType=="Integer" && column.defaultValue??>
<#assign Default>${column.defaultValue}</#assign>
<#elseif column.javaType=="String" && column.defaultValue??>
<#assign Default>"${column.defaultValue}"</#assign>
<#elseif column.javaType=="BigDecimal" && column.defaultValue??>
<#assign Default>BigDecimal.valueOf(${column.defaultValue})</#assign>
<#elseif column.javaType=="Date" >
<#assign Default>new Date()</#assign>
<#else>
<#assign Default>null</#assign>
</#if>
this.${column.javaField} = ${Default};
</#if>
</#list>
}
}
\ No newline at end of file
package ${packageName}.${businessName}.model;
<#list importList as import>
import ${import};
</#list>
import java.util.Date;
import java.util.List;
/**
* ${functionName}查询对象
*
* @author ${author}
* @date ${datetime}
*/
public class ${ClassName}Query extends ${ClassName}Entity {
<#list columns as column>
<#if column.javaType == "Long"||column.javaType == "Integer"||column.javaType == "BigDecimal">
/** 开始 ${column.columnComment} */
private ${column.javaType} ${column.javaField}Start;
/** 结束 ${column.columnComment} */
private ${column.javaType} ${column.javaField}End;
/** 增加 ${column.columnComment} */
private ${column.javaType} ${column.javaField}Increment;
/** ${column.columnComment}列表 */
private List <${column.javaType}> ${column.javaField}List;
</#if>
<#if column.javaType == "String">
/** ${column.columnComment} */
private List<${column.javaType}> ${column.javaField}List;
</#if>
<#if column.javaType == "Date">
/** 开始 ${column.columnComment} */
private String ${column.javaField}Start;
/** 结束 ${column.columnComment} */
private String ${column.javaField}End;
</#if>
</#list>
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<${ClassName}Query> orConditionList;
/** AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) */
private List<${ClassName}Query> andConditionList;
public ${ClassName}Query(){}
<#list columns as column>
<#if column.javaType == "Long"||column.javaType == "Integer"||column.javaType == "BigDecimal">
/**
* 获取 开始 ${column.columnComment}
* @return ${column.javaField}Start
*/
public ${column.javaType} get${column.javaField?cap_first}Start(){
return this.${column.javaField}Start;
}
/**
* 设置 开始 ${column.columnComment}
* @param ${column.javaField}Start
*/
public void set${column.javaField?cap_first}Start(${column.javaType} ${column.javaField}Start){
this.${column.javaField}Start = ${column.javaField}Start;
}
/**
* 获取 结束 ${column.columnComment}
* @return $${column.javaField}End
*/
public ${column.javaType} get${column.javaField?cap_first}End(){
return this.${column.javaField}End;
}
/**
* 设置 结束 ${column.columnComment}
* @param ${column.javaField}End
*/
public void set${column.javaField?cap_first}End(${column.javaType} ${column.javaField}End){
this.${column.javaField}End = ${column.javaField}End;
}
/**
* 获取 增加 ${column.columnComment}
* @return ${column.javaField}Increment
*/
public ${column.javaType} get${column.javaField?cap_first}Increment(){
return this.${column.javaField}Increment;
}
/**
* 设置 增加 ${column.columnComment}
* @param ${column.javaField}Increment
*/
public void set${column.javaField?cap_first}Increment(${column.javaType} ${column.javaField}Increment){
this.${column.javaField}Increment = ${column.javaField}Increment;
}
/**
* 获取 ${column.columnComment}
* @return ${column.javaField}List
*/
public List<${column.javaType}> get${column.javaField?cap_first}List(){
return this.${column.javaField}List;
}
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}List
*/
public void set${column.javaField?cap_first}List(List<${column.javaType}> ${column.javaField}List){
this.${column.javaField}List = ${column.javaField}List;
}
</#if>
<#if column.javaType == "String">
/**
* 获取 ${column.columnComment}
* @return ${column.javaField}List
*/
public List<${column.javaType}> get${column.javaField?cap_first}List(){
return this.${column.javaField}List;
}
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}List
*/
public void set${column.javaField?cap_first}List(List<${column.javaType}> ${column.javaField}List){
this.${column.javaField}List = ${column.javaField}List;
}
</#if>
<#if column.javaType == "Date">
/**
* 获取 开始 ${column.columnComment}
* @return ${column.javaField}Start
*/
public String get${column.javaField?cap_first}Start(){
return this.${column.javaField}Start;
}
/**
* 设置 开始 ${column.columnComment}
* @param ${column.javaField}Start
*/
public void set${column.javaField?cap_first}Start(String ${column.javaField}Start){
this.${column.javaField}Start = ${column.javaField}Start;
}
/**
* 获取 结束 ${column.columnComment}
* @return ${column.javaField}End
*/
public String get${column.javaField?cap_first}End(){
return this.${column.javaField}End;
}
/**
* 设置 结束 ${column.columnComment}
* @param ${column.javaField}End
*/
public void set${column.javaField?cap_first}End(String ${column.javaField}End){
this.${column.javaField}End = ${column.javaField}End;
}
</#if>
</#list>
<#list columns as column>
<#if column.javaType == "Long"||column.javaType == "Integer"||column.javaType == "BigDecimal">
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}
*/
public ${ClassName}Query ${column.javaField}(${column.javaType} ${column.javaField}){
set${column.javaField?cap_first}(${column.javaField});
return this;
}
/**
* 设置 开始 ${column.columnComment}
* @param ${column.javaField}Start
*/
public ${ClassName}Query ${column.javaField}Start(${column.javaType} ${column.javaField}Start){
this.${column.javaField}Start = ${column.javaField}Start;
return this;
}
/**
* 设置 结束 ${column.columnComment}
* @param ${column.javaField}End
*/
public ${ClassName}Query ${column.javaField}End(${column.javaType} ${column.javaField}End){
this.${column.javaField}End = ${column.javaField}End;
return this;
}
/**
* 设置 增加 ${column.columnComment}
* @param ${column.javaField}Increment
*/
public ${ClassName}Query ${column.javaField}Increment(${column.javaType} ${column.javaField}Increment){
this.${column.javaField}Increment = ${column.javaField}Increment;
return this;
}
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}List
*/
public ${ClassName}Query ${column.javaField}List(List<${column.javaType}> ${column.javaField}List){
this.${column.javaField}List = ${column.javaField}List;
return this;
}
</#if>
<#if column.javaType == "String">
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}
*/
public ${ClassName}Query ${column.javaField}(${column.javaType} ${column.javaField}){
set${column.javaField?cap_first}(${column.javaField});
return this;
}
/**
* 设置 ${column.columnComment}
* @param ${column.javaField}List
*/
public ${ClassName}Query ${column.javaField}List(List<${column.javaType}> ${column.javaField}List){
this.${column.javaField}List = ${column.javaField}List;
return this;
}
</#if>
<#if column.javaType == "java.util.Date">
/**
* 设置 开始 ${column.columnComment}
* @param ${column.javaField}Start
*/
public ${ClassName}Query ${column.javaField}Start(String ${column.javaField}Start){
this.${column.javaField}Start = ${column.javaField}Start;
return this;
}
/**
* 设置 结束 ${column.columnComment}
* @param ${column.javaField}End
*/
public ${ClassName}Query ${column.javaField}End(String ${column.javaField}End){
this.${column.javaField}End = ${column.javaField}End;
return this;
}
</#if>
</#list>
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
public List<${ClassName}Query> getOrConditionList(){
return this.orConditionList;
}
/**
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList
*/
public void setOrConditionList(List<${ClassName}Query> orConditionList){
this.orConditionList = orConditionList;
}
/**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
public List<${ClassName}Query> getAndConditionList(){
return this.andConditionList;
}
/**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
public void setAndConditionList(List<${ClassName}Query> andConditionList){
this.andConditionList = andConditionList;
}
}
\ No newline at end of file
package ${entityPackageName};
import com.mortals.framework.service.ICRUDService;
import ${pack}.model.${entityClassName}Entity;
/**
* <p>Title: ${entityDesc}</p>
* <p>Description: ${entityClassName}Service service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* @version 1.0.0
*/
public interface ${entityClassName}Service extends ICRUDService<${entityClassName}Entity,Long>{
}
\ No newline at end of file
package ${packageName}.${businessName}.service;
<#if table.cacheServiceType==0 >
<#assign Service = "ICRUDService">
<#elseif table.cacheServiceType==1 >
<#assign Service = "ICRUDCacheService">
<#elseif table.cacheServiceType==2 >
<#assign Service = "ICRUDCacheService">
<#else >
<#assign Service = "ICRUDService">
</#if>
import com.mortals.framework.service.${Service};
import ${packageName}.${businessName}.model.${ClassName}Entity;
/**
* ${ClassName}Service
*
* ${functionName} service接口
*
* @author ${author}
* @date ${datetime}
*/
public interface ${ClassName}Service extends ${Service}<${ClassName}Entity,Long>{
}
\ No newline at end of file
package ${entityPackageName};
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import ${pack}.dao.${entityClassName}Dao;
import ${pack}.model.${entityClassName}Entity;
import ${pack}.service.${entityClassName}Service;
/**
* <p>Title: ${entityDesc}</p>
* <p>Description: ${entityClassName}Service service接口 </p>
* <p>Copyright: Copyright &reg; </p>
* @version 1.0.0
*/
@Service("${entityClassName?uncap_first}Service")
public class ${entityClassName}ServiceImpl extends AbstractCRUDServiceImpl<${entityClassName}Dao, ${entityClassName}Entity, Long> implements ${entityClassName}Service {
}
\ No newline at end of file
package ${packageName}.${businessName}.service.impl;
<#if table.cacheServiceType==0 >
<#assign Service = "AbstractCRUDServiceImpl">
<#elseif table.cacheServiceType==1 >
<#assign Service = "AbstractCRUDCacheServiceImpl">
<#elseif table.cacheServiceType==2 >
<#assign Service = "AbstractCRUDDynamicCacheServiceImpl">
<#else >
<#assign Service = "AbstractCRUDServiceImpl">
</#if>
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.${Service};
import ${packageName}.${businessName}.dao.${ClassName}Dao;
import ${packageName}.${businessName}.model.${ClassName}Entity;
import ${packageName}.${businessName}.service.${ClassName}Service;
/**
* ${ClassName}Service
* ${functionName} service实现
*
* @author ${author}
* @date ${datetime}
*/
@Service("${ClassName?uncap_first}Service")
public class ${ClassName}ServiceImpl extends ${Service}<${ClassName}Dao, ${ClassName}Entity, Long> implements ${ClassName}Service {
}
\ No newline at end of file
package ${entityPackageName};
import com.mortals.framework.dao.ICRUDSubmeterDao;
import ${pack}.model.${entityClassName}Entity;
/**
* <p>Title: ${entityDesc}</p>
* <p>Description: ${entityClassName}Dao DAO接口 </p>
* @author
* @version 1.0.0
*/
public interface ${entityClassName}Dao extends ICRUDSubmeterDao<${entityClassName}Entity,Long>{
}
package ${entityPackageName};
import org.springframework.stereotype.Repository;
import com.mortals.framework.common.code.TaskExcuteStrategy;
import com.mortals.framework.dao.ibatis.SubmeterDaoImpl;
import com.mortals.framework.model.TableParam;
import com.mortals.framework.model.TableStrategy;
import ${pack}.dao.${entityClassName}Dao;
import ${pack}.model.${entityClassName}Entity;
/**
* <p>Title: ${entityDesc}</p>
* <p>Description: ${entityClassName}DaoImpl DAO接口 </p>
* @author
* @version 1.0.0
*/
@Repository("${entityClassName?uncap_first}Dao")
public class ${entityClassName}DaoImpl extends SubmeterDaoImpl<${entityClassName}Entity,Long> implements ${entityClassName}Dao {
@Override
protected TableStrategy getTableStrategy()
{
return new TableStrategy("mortals_iot_zd_${entityClassName?lower_case}_<#noparse>$</#noparse>{unionTime}", TableStrategy.${STRATEGY});
}
@Override
public TableParam getTableParam(${entityClassName}Entity entity)
{
TableParam param = new TableParam();
return param;
}
}
package ${entityPackageName};
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.web.BaseCRUDJsonController;
import org.springframework.web.bind.annotation.PostMapping;
import com.alibaba.fastjson.JSONObject;
import ${pack}.model.${entityClassName}Entity;
import ${pack}.service.${entityClassName}Service;
/**
* <p>Title: ${entityDesc}</p>
* <p>Description: ${entityClassName}Controller </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author
* @version 1.0.0
*/
@RestController
@RequestMapping("${RequestMapping}")
public class ${entityClassName}Controller extends BaseCRUDJsonController<${entityClassName}Service,${entityClassName}Form,${entityClassName}Entity,Long> {
public ${entityClassName}Controller(){
super.setFormClass(${entityClassName}Form.class);
super.setModuleDesc( "${entityDesc}");
}
/**
* 查询${entityDesc}
*/
@PostMapping(value="list")
public String list(${entityClassName}Form form) {
try{
return super.list(form);
}catch(Exception e){
log.error("查询${entityDesc}列表错误",e);
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
}
/**
* 添加${entityDesc}
*/
@PostMapping(value="add")
public String add(${entityClassName}Form form) {
try{
return super.add(form);
}catch(Exception e){
log.error("添加${entityDesc}错误",e);
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
}
/**
* 编辑${entityDesc}
*/
@PostMapping(value="edit")
public String edit(${entityClassName}Form form) {
try{
return super.edit(form);
}catch(Exception e){
log.error("编辑${entityDesc}错误",e);
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
}
/**
* 保存${entityDesc}
*/
@PostMapping(value="save")
public String save(${entityClassName}Form form) {
try{
return super.save(request, response, form);
}catch(Exception e){
log.error("保存${entityDesc}错误",e);
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
}
/**
* 删除${entityDesc}
*/
@PostMapping(value="delete")
public String delete(${entityClassName}Form form) {
try{
return super.delete(request, response, form);
}catch(Exception e){
log.error("删除${entityDesc}错误",e);
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
}
/**
* 查看${entityDesc}
*/
@PostMapping(value="view")
public String view(${entityClassName}Form form) {
try{
return super.view(request, response, form);
}catch(Exception e){
log.error("查看${entityDesc}错误",e);
JSONObject ret = new JSONObject();
ret.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
ret.put(KEY_RESULT_MSG, super.convertException(e));
return ret.toJSONString();
}
}
}
\ No newline at end of file
package ${packageName}.${businessName}.web;
<#if table.tplCategory=="crud" >
<#assign Controller = "BaseCRUDJsonMappingController">
<#elseif table.tplCategory=="tree">
<#assign Controller = "BaseTreeCRUDJsonMappingController">
<#else>
<#assign Controller = "BaseCRUDJsonMappingController">
</#if>
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.${Controller};
import com.mortals.framework.common.IBaseEnum;
import com.mortals.framework.common.code.YesNo;
import ${packageName}.${businessName}.model.${ClassName}Entity;
import ${packageName}.${businessName}.service.${ClassName}Service;
/**
* ${ClassName}Controller
*
* ${functionName} 控制器
*
* @author ${author}
* @date ${datetime}
*/
@RestController
@RequestMapping("${RequestMapping}")
public class ${ClassName}Controller extends ${Controller}<${ClassName}Service,${ClassName}Form,${ClassName}Entity,Long> {
public ${ClassName}Controller(){
super.setFormClass(${ClassName}Form.class);RequestMapping
super.setModuleDesc( "${functionName}");
}
@Override
protected void init(HttpServletRequest request, HttpServletResponse response, ${ClassName}Form form, Map<String, Object> model, Context context) {
this.addDict(model, "status", IBaseEnum.getEnumMap(YesNo.class));
super.init(request, response, form, model, context);
}
}
\ No newline at end of file
package ${entityPackageName};
import com.mortals.framework.web.BaseCRUDFormLong;
import ${pack}.model.${entityClassName}Entity;
import ${pack}.model.${entityClassName}Query;
/**
* <p>Title: ${entityDesc}</p>
* <p>Description: ${entityClassName}Form </p>
* @author
* @version 1.0.0
*/
public class ${entityClassName}Form extends BaseCRUDFormLong<${entityClassName}Entity> {
private ${entityClassName}Entity entity = new ${entityClassName}Entity();
private ${entityClassName}Query query = new ${entityClassName}Query();
public ${entityClassName}Form(){
}
@Override
public ${entityClassName}Entity getEntity() {
return entity;
}
public void set${entityClassName}(${entityClassName}Entity entity) {
this.entity = entity;
}
@Override
public ${entityClassName}Query getQuery() {
return query;
}
public void setQuery(${entityClassName}Query query) {
this.query = query;
}
}
\ No newline at end of file
package ${packageName}.${businessName}.web;
<#if pkColumn??&&pkColumn.javaType=="String" >
<#assign Form = "BaseCRUDFormStr">
<#elseif pkColumn??&&pkColumn.javaType=="Integer">
<#assign Form = "BaseCRUDFormInt">
<#elseif pkColumn??&&pkColumn.javaType=="Long">
<#assign Form = "BaseCRUDFormLong">
<#else>
<#assign Form = "BaseCRUDFormLong">
</#if>
import com.mortals.framework.web.${Form};
import ${packageName}.${businessName}.model.${ClassName}Entity;
import ${packageName}.${businessName}.model.${ClassName}Query;
/**
* ${ClassName}
*
* ${functionName} Form
*
* @author ${author}
* @date ${datetime}
*/
public class ${ClassName}Form extends ${Form}<${ClassName}Entity> {
private ${ClassName}Entity entity = new ${ClassName}Entity();
private ${ClassName}Query query = new ${ClassName}Query();
public ${ClassName}Form(){
}
@Override
public ${ClassName}Entity getEntity() {
return entity;
}
public void set${ClassName}(${ClassName}Entity entity) {
this.entity = entity;
}
@Override
public ${ClassName}Query getQuery() {
return query;
}
public void setQuery(${ClassName}Query query) {
this.query = query;
}
}
\ No newline at end of file
package ${entityPackageName};
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.web.BaseCRUDJsonMappingController;
import ${pack}.model.${entityClassName}Entity;
import ${pack}.service.${entityClassName}Service;
/**
* <p>Title: ${entityDesc}</p>
* <p>Description: ${entityClassName}Controller </p>
* <p>Copyright: Copyright &reg; </p>
* <p>Company: </p>
* @author zxfei
* @version 1.0.0
*/
@RestController
@RequestMapping("${RequestMapping}")
public class ${entityClassName}Controller extends BaseCRUDJsonMappingController<${entityClassName}Service,${entityClassName}Form,${entityClassName}Entity,Long> {
public ${entityClassName}Controller(){
super.setFormClass(${entityClassName}Form.class);
super.setModuleDesc("${entityDesc}");
}
}
\ No newline at end of file
<#macro compress_single_line>
<#local captured><#nested></#local>
${ captured?replace("\\n\\r", "", "rm") }
</#macro>
<#list tables as table>
DROP TABLE IF EXISTS `${table.tableName}`;
<@compress_single_line>
CREATE TABLE `${table.tableName}`(
<#list table.fields as field>
<#if (field.pk)??>
<#if field.autoInc=='true'>
`${field.columnName}` ${field.sourceColumnType} NOT NULL auto_increment COMMENT '${field.remarks}',
<#else >
`${field.columnName}` ${field.sourceColumnType} NOT NULL COMMENT '${field.remarks}',
-- ----------------------------
-- ${functionName}表
-- ----------------------------
DROP TABLE IF EXISTS `${tableName}`;
CREATE TABLE ${tableName}(
<#list columns as column>
<#if column.isIncrement==1 >
<#assign autoInc>auto_increment</#assign>
<#else>
<#assign autoInc></#assign>
</#if>
<#if column.isRequired==1 >
<#assign Required>NOT NULL</#assign>
<#else>
`${field.columnName}` ${field.sourceColumnType} ${ (field.isNotNull == '是') ?string('NOT NULL','DEFAULT NULL')}<#if (field.defaultValue)??> default '${field.defaultValue}'</#if> COMMENT '${field.remarks}',
</#if>
</#list>
PRIMARY KEY (`${table.pk}`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='${table.tableDesc}';
</@compress_single_line>
<#assign Required></#assign>
</#if>
<#if column.isRequired==1 >
<#assign Required>NOT NULL</#assign>
<#else>
<#assign Required></#assign>
</#if>
<#if column.javaType=="String" >
<#assign Type>CHARACTER SET utf8 COLLATE utf8_general_ci</#assign>
<#else>
<#assign Type></#assign>
</#if>
<#if column.defaultValue??>
<#assign Default>DEFAULT '${column.defaultValue}'</#assign>
<#else>
<#assign Default>DEFAULT NULL</#assign>
</#if>
`${column.columnName}` ${column.columnType} ${Required} ${Default} ${Type} ${autoInc} COMMENT '${column.columnComment}',
</#list>
PRIMARY KEY (`${pkColumn.columnName}`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='${functionName}';
<#list menus as menu>
<#--INSERT INTO `mortals_iot_menu` VALUES ('${menu.id}', '${menu.name}', '${menu.path}', '${menu.parentId}', '${menu.orderId}', '1', '0', '0','', '${menu.imgPath}', '', '', '0', '0', '3', null, null, null);-->
INSERT INTO `mortals_xhx_menu` VALUES ('${menu.id}', '${menu.name}', '${menu.path}', '${menu.parentId}', '${menu.orderId}','1','0','0','', null, '', '', '0', '0', '3',null, null, null);
</#list>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment