diff --git a/pom.xml b/pom.xml index d13e8fd..c1c81dd 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.eversec.kit lxy-kit - 2.0_0228 + 2.0_0617 diff --git a/root/EverCA.html b/root/EverCA.html new file mode 100644 index 0000000..912c0bc --- /dev/null +++ b/root/EverCA.html @@ -0,0 +1,14 @@ + + + + + Title + + +专注服务研发效率,专注探索合理有效降低项目开发/维护成本 + + Lxy-kit 代码构建工具 + Meta-kit 元数据编程 + + + \ No newline at end of file diff --git a/root/index.html b/root/index.html index 52c3b29..7d7cc8b 100644 --- a/root/index.html +++ b/root/index.html @@ -69,14 +69,14 @@ 后端模板选择 - mybaits - hibernate + mybaits + hibernate 前端模板选择 - angularjs - vue + angularjs + vue @@ -167,7 +167,7 @@ red.setData("cfg_" + fileName, n); }, deep: true - } + }, }, methods: { //历史上传的文件数据(文件存贮在用户本地) @@ -234,8 +234,6 @@ }, //创建代码 creater: function () { - console.log(this.fileName) - console.log(this.row); this.row["fileName"] = fileName; red.post("/abc/creater", {cfgBean: JSON.stringify(this.row)}, function (json) { //red.showMsg({msg:"创建代码成功"}) @@ -268,7 +266,9 @@ pageModel: "abx", author: "EverCA", ca:["service"], - sheetNames: [] + sheetNames: [], + fontTpl: "a", + serviceTpl: "mb", }); } } @@ -297,7 +297,9 @@ pageModel: "abx", author: "EverCA", ca:["service"], - sheetNames: ["message_finger"] + sheetNames: ["message_finger"], + fontTpl: "a", + serviceTpl: "mb", }); } diff --git a/root/lxy-kit.html b/root/lxy-kit.html new file mode 100644 index 0000000..024aaea --- /dev/null +++ b/root/lxy-kit.html @@ -0,0 +1,13 @@ + + + + + Title + + + + 工具包下载 + 使用手册 + + + \ No newline at end of file diff --git a/root/lxy-kit_2.0_test0301.rar b/root/lxy-kit_2.0_test0301.rar new file mode 100644 index 0000000..14eaf16 Binary files /dev/null and b/root/lxy-kit_2.0_test0301.rar differ diff --git a/src/com/eversec/kit/creator/ICreator.java b/src/com/eversec/kit/creator/ICreator.java index 090f901..8f6f5ab 100644 --- a/src/com/eversec/kit/creator/ICreator.java +++ b/src/com/eversec/kit/creator/ICreator.java @@ -29,21 +29,7 @@ public abstract class ICreator { public static String pageModel; public static String author; private static List sheetNames; - /*static { - xlsPath = PropKit.getProperty("xlsPath", "res/xls/table.xls"); - pkg = PropKit.getProperty("pkg", ""); - tplPath = PropKit.getProperty("tplPath", ""); - dirPath = PropKit.getProperty("dirPath", ""); - pageDirPath = PropKit.getProperty("page.dirPath", dirPath); - pageModel = PropKit.getProperty("page.model", ""); - author = PropKit.getProperty("author", "lxy-kit"); - sheetNames = sheets(PropKit.getProperty("sheetNames", "")); - - //路径兼容处理 - if (!dirPath.endsWith("/")) dirPath += "/"; - if (!pageDirPath.endsWith("/")) pageDirPath += "/"; - }*/ public static void setCfgBean(CfgBean cfgBean) { ICreator.cfgBean = cfgBean; xlsPath = cfgBean.getXlsPath(); @@ -77,7 +63,7 @@ public abstract class ICreator { public static Engine engine = Engine.use(); public static Map cateRelation = Kv.of("varchar", "String").set("text", "String").set("int", "Integer").set("bigint", "Long").set("long", "Long").set(null, "String").set("datetime", "Date"); - public static String[] fields = {"field","cate", "must","remark1", "remark2", "tag", "selects", "column","filter", "ck", "edit"}; + public static String[] fields = {"field","cate", "must","remark1", "remark2", "tag", "selects", "column","filter", "ck", "edit","update","xqzs"}; public static Gson gson = new Gson(); public static List sheetNames() { diff --git a/src/com/eversec/kit/creator/Runner.java b/src/com/eversec/kit/creator/Runner.java index 41228b6..d122c59 100644 --- a/src/com/eversec/kit/creator/Runner.java +++ b/src/com/eversec/kit/creator/Runner.java @@ -2,8 +2,14 @@ package com.eversec.kit.creator; import com.eversec.common.FileKit; import com.eversec.common.Kv; -import com.eversec.kit.creator.impl.*; +import com.eversec.kit.creator.impl.ControllerKit; +import com.eversec.kit.creator.impl.DaoMapper; +import com.eversec.kit.creator.impl.JavaBeanKit; +import com.eversec.kit.creator.impl.ServiceImplKit; +import com.eversec.kit.creator.impl.ServiceKit; +import com.eversec.kit.creator.impl.SqlKit; import com.eversec.kit.creator.impl.page.*; +import com.eversec.kit.creator.impl.XmlSqlKit; import com.eversec.service.CfgBean; import java.io.File; @@ -20,26 +26,38 @@ public class Runner { List creators = new ArrayList<>(); List ca = cfgBean.getCa(); + + // fixme:bfx , + // 此处逻辑比较混乱可改善 + // R:lxy ca.forEach(x -> { if ("service".equalsIgnoreCase(x)) { - creators.add(new JavaBeanKit());// JavaBean - creators.add(new XmlSqlKit());// 生成mysql 版本的xml配置文件, 如果要生成Es使用对应的实例对象即可 - creators.add(new ControllerKit());// Controller - creators.add(new ServiceKit());//service - creators.add(new ServiceImplKit());//ServiceImpl - creators.add(new DaoMapper());// Mapper.java文件 针对使用Mybites创建对应的xxxMapper.java + if ("mb".equalsIgnoreCase(cfgBean.getServiceTpl())){ + creators.add(new JavaBeanKit());// JavaBean + creators.add(new XmlSqlKit());// 生成mysql 版本的xml配置文件, 如果要生成Es使用对应的实例对象即可 + creators.add(new ControllerKit());// Controller + creators.add(new ServiceKit());//service + creators.add(new ServiceImplKit());//ServiceImpl + creators.add(new DaoMapper());// Mapper.java文件 针对使用Mybites创建对应的xxxMapper.java + }else if ("hb".equalsIgnoreCase(cfgBean.getServiceTpl())){ + + } } if ("ddl".equalsIgnoreCase(x)) { creators.add(new SqlKit());// Mysql 建表语句,【提示Es或者其他建表语句可自行创建对应的实现】 } if ("front".equalsIgnoreCase(x)) { - creators.add(new CtrlKit()); - creators.add(new ListKit()); - creators.add(new EditKit()); - creators.add(new EditCtrlKit()); - creators.add(new ConditionKit()); - creators.add(new DetailKit()); - creators.add(new DetailCtrlKit()); + if ("a".equalsIgnoreCase(cfgBean.getFontTpl())){ + creators.add(new CtrlKit()); + creators.add(new ListKit()); + creators.add(new EditKit()); + creators.add(new EditCtrlKit()); + creators.add(new ConditionKit()); + creators.add(new DetailKit()); + creators.add(new DetailCtrlKit()); + }else if ("v".equalsIgnoreCase(cfgBean.getFontTpl())){ + creators.add(new VueKit()); + } } }); return creators; @@ -50,6 +68,7 @@ public class Runner { StringBuilder sqlBuf = new StringBuilder(); List ctrList = new ArrayList<>(); + List vueRouterList = new ArrayList<>(); infoBuf.append("------------ start ... ------------\n"); infoBuf.append("create service code path:" + ICreator.dirPath + "\n"); @@ -82,9 +101,19 @@ public class Runner { else if (x instanceof SqlKit){ sqlBuf.append(x.createStr(clazz, list, para)); } + + //构建业务代码文件 else { + if (x instanceof VueKit){ + Kv kt = new Kv(); + kt.put("name",ICreator.toLowerCaseFirst(clazz)); + kt.put("title",remark); + vueRouterList.add(kt); + } + x.createFile(x.createStr(clazz, list, para), clazz); } + } catch (IOException e) { e.printStackTrace(); } @@ -109,6 +138,12 @@ public class Runner { String strList = ICreator.engine.getTemplate(ICreator.tplPath + "front/ext/listExtTpl.html").renderToString(Kv.of("data", ctrList)); FileKit.strToFile(strList, new File("tmp/list.html")); } + + if (vueRouterList.size() > 0){ + String vList = ICreator.engine.getTemplate(ICreator.tplPath + "front/VueRouterTpl.js").renderToString(Kv.of("cfg", vueRouterList)); + FileKit.strToFile(vList, new File(ICreator.pageDirPath + "/kit/routerConfig.js")); + } + infoBuf.append("------------ complete! -----------\n"); System.out.println(infoBuf.toString()); diff --git a/src/com/eversec/kit/creator/impl/page/VueKit.java b/src/com/eversec/kit/creator/impl/page/VueKit.java new file mode 100644 index 0000000..7c5594e --- /dev/null +++ b/src/com/eversec/kit/creator/impl/page/VueKit.java @@ -0,0 +1,129 @@ +package com.eversec.kit.creator.impl.page; + +import com.eversec.common.Kv; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static java.util.Arrays.asList; + +public class VueKit extends PageKit { + + @Override + public File getFile(String clazz) { + return new File(filePath(clazz), toLowerCaseFirst(clazz) + ".vue"); + } + + @Override + public String createStr(String clazz, List fieldList, Map para) { + List ft = new ArrayList<>(); + ft.addAll(fieldList); + List sc = new ArrayList<>(); + List filterList = new ArrayList<>(); + List detailsList = new ArrayList<>(); + List editsList = new ArrayList<>(); + ft.forEach(x -> { + x.put("field", (x.get("field") + "").trim()); + x.put("isMust", isMust(x)); + x.put("fieldType", getFiledType(x.get("cate")+"")); + x.put("fieldV",createFiled(x)); + // Fixme: bfx , + // 下面几个if - else 中存在明显的重复性代码,可改善 + // R:lxy + if ("1".equals(x.get("column"))){ + sc.add((x.get("field") + "").trim()); + } + if ("1".equals(x.get("filter"))){ + Map map = new HashMap(); + map.put("name",(x.get("field") + "").trim()); + map.put("label",x.get("remark1")); + map.put("col","EQUAL"); + map.put("remark","等于"); + filterList.add(map); + } + if ("like".equals(x.get("filter"))){ + Map map = new HashMap(); + map.put("name",(x.get("field") + "").trim()); + map.put("label",x.get("remark1")); + map.put("col","LIKE"); + map.put("remark","LIKE"); + filterList.add(map); + } + if ("1".equals(x.get("xqzs"))){ + detailsList.add((x.get("field") + "").trim()); + } + if ("1".equals(x.get("edit"))){ + Map map = new HashMap(); + if ("id".equals((x.get("field") + "").trim())){ + map.put("col",(x.get("field") + "").trim()); + map.put("upAttr","hidden"); + map.put("addAttr","none"); + + }else { + map.put("col",(x.get("field") + "").trim()); + if ("1".equals(x.get("ck"))){ + map.put("ck",(x.get("field") + "").trim()); + } + } + editsList.add(map); + } + + }); + Kv kv = createTplData(clazz); + kv.set("remark", para.get("remark")); + kv.set("fieldList", ft); + kv.set("showCol",sc); + kv.set("fs",filterList); + kv.set("detailsList",detailsList); + kv.set("editsList",editsList); + kv.set("conditionLabel", getConditionLabel(ft, para)); + + return engine.getTemplate(tplPath + "front/VueTpl.vue").renderToString(kv); + } + + protected String createFiled(Map x){ + String res = ""; + if ("2".equals(String.valueOf(x.get("edit")))) { + res = x.get("field") + "||" + x.get("selects"); + } else if ("SELECT".equalsIgnoreCase(String.valueOf(x.get("tag")))) { + res = x.get("field") + "=" + x.get("field"); + } else if ("SELECT_EXT".equalsIgnoreCase(String.valueOf(x.get("tag")))) { + res = x.get("field") + "|" + x.get("selects"); + } else if ("INPUT_DT".equalsIgnoreCase(String.valueOf(x.get("tag")))) { + res = x.get("field") + "=dt"; + } else if ("FILE_EXT".equalsIgnoreCase(String.valueOf(x.get("tag")))) { + res = x.get("selects") + ""; + } else { + res = x.get("field") + ""; + } + return res; + } + + @Override + public String filePath(String clazz) { + return dirPath + "/kit/"; + } + + //获取设置了关键字查询的 字段“描述” + private String getConditionLabel(List fieldList, Map para) { + StringBuilder buf = new StringBuilder(); + if (para.get("condition") != null){ + List conditions = asList((String[]) para.get("condition")); + fieldList.forEach(m->{ + for (String str : conditions) { + //字段有大小写转换,这里需要使用 equalsIgnoreCase 进行比较 + if ((m.get("field")+"").trim().equalsIgnoreCase(str)) { + buf.append(m.get("remark1")+"/"); + } + } + }); + } + if (buf.length() > 0){ + buf.deleteCharAt(buf.length()-1); + } + return buf.toString(); + } +} diff --git a/src/com/eversec/service/CfgBean.java b/src/com/eversec/service/CfgBean.java index 50fc5b0..83d4f88 100644 --- a/src/com/eversec/service/CfgBean.java +++ b/src/com/eversec/service/CfgBean.java @@ -19,6 +19,8 @@ public class CfgBean { private String pkg; private String pageModel; private String author; + private String fontTpl; + private String serviceTpl; private List ca; private List sheetNames; @@ -86,6 +88,22 @@ public class CfgBean { this.author = author; } + public String getFontTpl() { + return fontTpl; + } + + public void setFontTpl(String fontTpl) { + this.fontTpl = fontTpl; + } + + public String getServiceTpl() { + return serviceTpl; + } + + public void setServiceTpl(String serviceTpl) { + this.serviceTpl = serviceTpl; + } + public List getCa() { return ca; } diff --git a/tpl/ActionTpl.java b/tpl/ActionTpl.java index 6baab35..694f5d5 100644 --- a/tpl/ActionTpl.java +++ b/tpl/ActionTpl.java @@ -3,9 +3,9 @@ package #(pkg).controller; import com.eversec.common.AbstractBaseController; import com.eversec.common.JBean; import com.eversec.common.Domain; +import com.eversec.common.PageBean; import #(pkg).domain.#(bean); import #(pkg).service.#(bean)Service; -import com.eversec.framework.core.data.QueryResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -99,7 +99,7 @@ public class #(bean)Controller extends AbstractBaseController { #end #end - QueryResult pageBean = #(beanFL)Service.findPage(m); + PageBean pageBean = #(beanFL)Service.findPage(m); return JBean.by(200, "成功", pageBean).toJson(); } diff --git a/tpl/BeanTpl.java b/tpl/BeanTpl.java index f62c257..915a008 100644 --- a/tpl/BeanTpl.java +++ b/tpl/BeanTpl.java @@ -20,7 +20,7 @@ public class #(bean) extends Domain { ,field=field.substring(0, 1).toLowerCase() + field.substring(1) ) #if(x.fieldType == "Date") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") #end private #(x.fieldType) #(field); //#(x.remark) #end diff --git a/tpl/MapperTpl.xml b/tpl/MapperTpl.xml index 611571a..bbe64ae 100644 --- a/tpl/MapperTpl.xml +++ b/tpl/MapperTpl.xml @@ -1,7 +1,6 @@ #define buildIF(x) #end - diff --git a/tpl/front/VueRouterTpl.js b/tpl/front/VueRouterTpl.js new file mode 100644 index 0000000..b7443e9 --- /dev/null +++ b/tpl/front/VueRouterTpl.js @@ -0,0 +1,14 @@ +/** + * 工具模板路由配置信息 + */ +export default [ + #for(x : cfg) + #set(name=x.name, + title=x.title) + { + name: '#(name)', + title: '#(title)' + }#if(!(for.last)), + #end + #end +] \ No newline at end of file diff --git a/tpl/front/VueTpl.vue b/tpl/front/VueTpl.vue new file mode 100644 index 0000000..5b9fe81 --- /dev/null +++ b/tpl/front/VueTpl.vue @@ -0,0 +1,108 @@ + + + + + + \ No newline at end of file