>> getRegistry() {
42 | return registry;
43 | }
44 |
45 | public static ValidatorRegistry getInstance() {
46 | return Inner.validatorRegistry;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/api/backend/ClassGenerator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.api.backend;
2 |
3 | import com.sparrow.coding.enums.ClassKey;
4 | import com.sparrow.coding.po.ProjectConfig;
5 | import com.sparrow.coding.protocol.TableContext;
6 |
7 | import java.io.IOException;
8 |
9 | public interface ClassGenerator {
10 |
11 | String getPackage(String tableName, ClassKey classKey);
12 |
13 | String getClassName(String tableName, ClassKey classKey);
14 |
15 | String getFullPhysicalPath(String tableName, ClassKey classKey);
16 |
17 | String readConfigContent(String templateFileName);
18 | void generate(String tableName, ClassKey classKey) throws IOException;
19 | }
20 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/enums/ClassKey.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.enums;
2 |
3 | /**
4 | * 生成类的key
5 | *
6 | * 通过 class.{name}找到类名 通过 package.{name}找到包名 通过 module.{module} 找到模块名
7 | *
8 | * 通过该key 的配置找到对应的子模块名,包名及类名
9 | *
10 | * 具体的配置见config.properties
11 | */
12 | public enum ClassKey {
13 | PO("", "persistence"),
14 | BO("bo.txt", "domain"),
15 | PARAM("param.txt", "protocol"),
16 | QUERY("query.txt", "protocol"),
17 | DTO("dto.txt", "protocol"),
18 | CONTROLLER("controller.txt", "adapter"),
19 | VO("vo.txt", "adapter"),
20 | DAO("dao.txt", "dao.api"),
21 | DAO_MYBATIS("mybatis.properties", "dao.mybatis"),
22 | DAO_IMPL("daoImpl.txt", "dao.sparrow"),
23 | SERVICE("service.txt", "domain"),
24 | ASSEMBLE("assemble.txt", "adapter"),
25 | REPOSITORY("repository.txt", "domain"),
26 | REPOSITORY_IMPL("repositoryImpl.txt", "infrastructure"),
27 | DATA_CONVERTER("dataConverter.txt", "infrastructure"),
28 | PAGER_QUERY("pagerQuery.txt", "dao.api"),
29 | BATCH_OPERATE_PARAM("batchOperateParam.txt", "protocol");
30 |
31 | private String template;
32 | private String module;
33 |
34 | public String getTemplate() {
35 | return template;
36 | }
37 |
38 | ClassKey(String template, String module) {
39 | this.template = template;
40 | this.module = module;
41 | }
42 |
43 | public String getModule() {
44 | return module;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/enums/CodeSource.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.enums;
2 |
3 | public enum CodeSource {
4 | INNER,
5 | UPLOAD
6 | }
7 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/enums/PlaceholderKey.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.enums;
2 |
3 | public enum PlaceholderKey {
4 | /**
5 | * e.g. @author harry
6 | */
7 | $author,
8 |
9 | /**
10 | * 代码生成器的家目录
11 | */
12 | $coder_home,
13 |
14 | /**
15 | * 项目的工作目录
16 | */
17 | $workspace,
18 |
19 | /**
20 | * 项目名
21 | */
22 | $project,
23 | /**
24 | * origin table name e.g user_address
25 | */
26 | $origin_table_name,
27 |
28 | /**
29 | * e.g UserAddress
30 | */
31 | $persistence_class_name,
32 |
33 | /**
34 | * first case lower table name e.g userAddress
35 | */
36 | $persistence_object_name,
37 |
38 | /**
39 | * 示例 user-address
40 | */
41 | $persistence_object_by_horizontal,
42 |
43 | /**
44 | * 示例 user/address
45 | */
46 | $persistence_object_by_slash,
47 |
48 | /**
49 | * 示例 user.address
50 | */
51 | $persistence_object_by_dot,
52 |
53 | /**
54 | * 项目
55 | */
56 | $module_prefix,
57 |
58 | /**
59 | * po: e.g com.sparrow.user.po
60 | */
61 | $package_po,
62 |
63 | /**
64 | * po: e.g com.sparrow.user.bo
65 | */
66 | $package_bo,
67 |
68 | /**
69 | * po: e.g com.sparrow.user.param
70 | */
71 | $package_param,
72 |
73 | /**
74 | * batch operate param package
75 | */
76 | $package_batch_param,
77 |
78 | /**
79 | * po: e.g com.sparrow.user.query
80 | */
81 | $package_query,
82 |
83 | /**
84 | * po: e.g com.sparrow.user.dto
85 | */
86 | $package_dto,
87 |
88 | /**
89 | * po: e.g com.sparrow.user.vo
90 | */
91 | $package_vo,
92 |
93 | /**
94 | * dao e.g com.sparrow.user.dao
95 | */
96 | $package_dao,
97 |
98 | $package_pager_query,
99 |
100 |
101 | /**
102 | * dao impl e.g com.sparrow.user.dao.impl
103 | */
104 | $package_dao_impl,
105 |
106 | /**
107 | * dao e.g com.sparrow.user.repository
108 | */
109 | $package_repository,
110 |
111 | /**
112 | * dao impl e.g com.sparrow.user.dao.repository.impl
113 | */
114 | $package_repository_impl,
115 |
116 | $package_data_converter,
117 |
118 | $package_assemble,
119 |
120 | /**
121 | * service e.g com.sparrow.user.service
122 | */
123 | $package_service,
124 |
125 | /**
126 | * controller e.g com.sparrow.user.controller
127 | */
128 | $package_controller,
129 |
130 | /**
131 | * User
132 | */
133 | $class_po,
134 |
135 | /**
136 | * UserDao
137 | */
138 | $class_dao,
139 |
140 | /**
141 | * UserService
142 | */
143 | $class_service,
144 |
145 | /**
146 | * Repository
147 | */
148 | $class_repository,
149 |
150 | /**
151 | * Repository impl
152 | */
153 | $class_repositoryImpl,
154 |
155 | /**
156 | * UserDaoImpl
157 | */
158 | $class_impl_dao,
159 |
160 | /**
161 | * UserController
162 | */
163 | $class_controller,
164 |
165 | /**
166 | * primary property name e.g userId
167 | */
168 | $primary_property_name,
169 |
170 | /**
171 | * e.g UserId
172 | */
173 | $upper_primary_property_name,
174 |
175 | $primary_type,
176 |
177 | /**
178 | * userDao
179 | */
180 | $object_dao,
181 |
182 | /**
183 | * userService
184 | */
185 | $object_service,
186 |
187 | /**
188 | * current date 2018-11-15
189 | */
190 | $date,
191 |
192 | /*for mybatis */
193 |
194 | $result_map,
195 |
196 | $sql_insert,
197 |
198 | $sql_query_one,
199 |
200 | $sql_update,
201 |
202 | $sql_delete,
203 |
204 | $field_list,
205 |
206 | $get_sets
207 |
208 | }
209 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/po/ProjectConfig.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.po;
2 |
3 | import com.sparrow.protocol.dao.PO;
4 | import lombok.Data;
5 |
6 | import javax.persistence.*;
7 |
8 | @Table(name = "t_project_config")
9 | @Data
10 | public class ProjectConfig extends PO {
11 | @Id
12 | @GeneratedValue(strategy = GenerationType.IDENTITY)
13 | @Column(name = "id", columnDefinition = "int")
14 | private Long id;
15 | @Column(name = "name", updatable = false, nullable = false, columnDefinition = "varchar(50) default '' comment '项目名称'")
16 | private String name;
17 | @Column(name = "frontend_name", columnDefinition = "varchar(50) default '' comment '前端项目名称'")
18 | private String frontendName;
19 | @Column(name = "chinese_name", columnDefinition = "varchar(50) default '' comment '项目中文名称'")
20 | private String chineseName;
21 | @Column(name = "description", columnDefinition = "varchar(512) default '' comment '项目描述'")
22 | private String description;
23 | @Column(name = "module_prefix", columnDefinition = "varchar(50) default '' comment '模块前缀'")
24 | private String modulePrefix;
25 | @Column(name = "scan_package", columnDefinition = "varchar(512) default '' comment '扫描的包路径'")
26 | private String scanPackage;
27 | @Column(name = "code_template", columnDefinition = "varchar(50) default 'template' comment '项目模板'")
28 | private String codeTemplate;
29 | @Column(name = "config", columnDefinition = "varchar(512) default '' comment '脚手架配置'")
30 | private String config;
31 | }
32 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/po/TableConfig.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.po;
2 |
3 | import com.sparrow.coding.protocol.ColumnDef;
4 | import com.sparrow.protocol.dao.PO;
5 | import lombok.Data;
6 |
7 | import javax.persistence.*;
8 | import java.util.List;
9 |
10 | @Data
11 | @Table(name = "t_table_config")
12 | public class TableConfig extends PO {
13 | @Id
14 | @GeneratedValue(strategy = GenerationType.IDENTITY)
15 | @Column(name = "id", columnDefinition = "int")
16 | private Long id;
17 | @Column(name = "project_id", updatable = false, nullable = false, columnDefinition = "int comment '项目ID'")
18 | private Long projectId;
19 | @Column(name = "primary_key",updatable = false,nullable = false,columnDefinition = "varchar(32) default '' comment '主键'")
20 | private String primaryKey;
21 | @Column(name = "table_name", updatable = false, nullable = false, unique = true, columnDefinition = "varchar(32) default '' comment '表名'")
22 | private String tableName;
23 | @Column(name = "class_name", updatable = false, nullable = false, unique = true, columnDefinition = "varchar(32) default '' comment '类名'")
24 | private String className;
25 | @Column(name = "description", nullable = false, columnDefinition = "varchar(255) default '' comment '描述'")
26 | private String description;
27 | @Column(name = "checkable", nullable = false, columnDefinition = "tinyint(1) default 0 comment '是否可勾选 0-不可 1-可'")
28 | private Boolean checkable;
29 | @Column(name = "row_menu", nullable = false, columnDefinition = "tinyint(1) default 0 comment '是否显示行操作 0-不显示 1-显示'")
30 | private Boolean rowMenu;
31 | @Column(name = "column_filter", nullable = false, columnDefinition = "tinyint(1) default 0 comment '是否显示列过滤器 0-不显示 1-显示'")
32 | private Boolean columnFilter;
33 | @Column(name = "status_command", nullable = false, columnDefinition = "tinyint(1) default 0 comment '是否显示状态命令 0-不显示 1-显示'")
34 | private Boolean statusCommand;
35 | @Column(name = "column_configs", columnDefinition = "text default '' comment '列配置'")
36 | private String columnConfigs;
37 | @Column(name = "source", nullable = false, columnDefinition = "varchar(255) default '' comment '数据源 CLASSPATH,UPLOAD'")
38 | private String source;
39 | @Column(name = "source_code", columnDefinition = "text default '' comment '上传源代码'")
40 | private String sourceCode;
41 | @Transient
42 | private List columnDefs;
43 | }
44 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/CellType.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol;
2 |
3 | public enum CellType {
4 | CHECK_BOX("CheckboxHeader", "check-box.tsx", "选择"),
5 | NORMAL("NormalHeader", "normal.tsx", "标准"),
6 | CURRENCY("CurrencyHeader", "currency.tsx", "货币"),
7 | TREE("TreeHeader", "tree.tsx", "树形"),
8 |
9 | OPERATION("OperationHeader", "operation.tsx", "命令操作");
10 | private String componentName;
11 | private String fileName;
12 |
13 | private String description;
14 |
15 | public String getComponentName() {
16 | return componentName;
17 | }
18 |
19 | public String getFileName() {
20 | return fileName;
21 | }
22 |
23 | public String getDescription() {
24 | return description;
25 | }
26 |
27 | CellType(String componentName, String fileName, String description) {
28 | this.componentName = componentName;
29 | this.fileName = fileName;
30 | this.description = description;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/ColumnDef.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol;
2 |
3 | import com.sparrow.coding.protocol.validate.Validator;
4 | import lombok.Data;
5 |
6 | @Data
7 | public class ColumnDef {
8 | private String name;
9 | private boolean primaryKey;
10 | private boolean i18n;
11 | private String text;
12 | private String sqlType;
13 | private String javaType;
14 | private boolean showInInsert;
15 | private boolean showInEdit;
16 | private boolean showInList;
17 | private boolean allowNull;
18 | private String placeholder;
19 | private String defaultValue;
20 | private Condition condition;
21 | private String validateType;
22 | private Validator validator;
23 | private Boolean visible;
24 | private HeaderType headerType;
25 | private CellType cellType;
26 | }
27 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/Condition.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class Condition {
7 | private boolean show;
8 | private String operator;
9 | private String dictionary;
10 | }
11 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/ControlType.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol;
2 |
3 | public enum ControlType {
4 | LABEL("lbl"),
5 | LINK("lnk"),
6 | INPUT_TEXT("txt"),
7 | INPUT_HIDDEN("hdn"),
8 | INPUT_PASSWORD("txt"),
9 | TEXT_AREA("txt"),
10 | DROPDOWN_LIST("ddl"),
11 | RADIO_LIST("rdl"),
12 | CHECK_BOX_LIST("cbl"),
13 | CODE("txt"),
14 | EDITOR("divEditor"),
15 | DATE("txt"),
16 | DATE_HHMMSS("txt"),
17 | CHECK_BOX("ckb"),
18 | RADIO("rdb"),
19 | SELECT("slt"),
20 | FILE("flb"),
21 | ENABLE_DISABLE(""),
22 | IMAGE("img");
23 |
24 |
25 | private String prefix;
26 |
27 | ControlType(String prefix) {
28 | this.prefix = prefix;
29 | }
30 |
31 | public String getPrefix() {
32 | return prefix;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/Entity.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class Entity {
7 | /**
8 | * 实体类名
9 | */
10 | private String name;
11 | /**
12 | * tableName
13 | * Map tableMap
14 | * key: tableName
15 | * value: Table JPA对象
16 | */
17 | private String tableName;
18 |
19 | private String text;
20 |
21 | private String i18n;
22 | }
23 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/HeaderType.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol;
2 |
3 | public enum HeaderType {
4 | CHECK_BOX("CheckboxHeader", "check-box.tsx", "选择"),
5 | NORMAL("NormalHeader", "normal.tsx", "标准"),
6 | NORMAL_SORT("NormalHeader", "normal.tsx", "标准(可排序)"),
7 | NORMAL_FILTER("NormalHeader", "normal.tsx", "标准(可过滤)"),
8 | NORMAL_SORT_FILTER("NormalHeader", "normal.tsx", "标准(可过滤,可排序)"),
9 | EMPTY("EmptyHeader", "empty.tsx", "空白");
10 | private String componentName;
11 | private String fileName;
12 | private String description;
13 |
14 | public String getComponentName() {
15 | return componentName;
16 | }
17 |
18 | public String getFileName() {
19 | return fileName;
20 | }
21 |
22 | public String getDescription() {
23 | return description;
24 | }
25 |
26 | HeaderType(String componentName, String fileName, String description) {
27 | this.componentName = componentName;
28 | this.fileName = fileName;
29 | this.description = description;
30 | }
31 |
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/TableContext.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol;
2 |
3 | import com.sparrow.coding.po.TableConfig;
4 | import lombok.Data;
5 |
6 | import javax.persistence.EntityManager;
7 | import java.util.Map;
8 |
9 | @Data
10 | public class TableContext {
11 | private String poPackage;
12 | private Map placeHolder;
13 | private TableConfig tableConfig;
14 | }
15 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/validate/DigitalValidator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol.validate;
2 |
3 | import com.sparrow.coding.DigitalCategory;
4 | import com.sparrow.core.Pair;
5 | import lombok.Data;
6 |
7 | import java.lang.annotation.Retention;
8 | import java.lang.annotation.Target;
9 | import java.util.ArrayList;
10 | import java.util.List;
11 |
12 | import static java.lang.annotation.ElementType.FIELD;
13 | import static java.lang.annotation.ElementType.METHOD;
14 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
15 |
16 | @Data
17 | public class DigitalValidator implements Validator {
18 | private Boolean i18n;
19 | private String i18nFieldName;
20 | private String emptyMessage;
21 | private Boolean allowEmpty;
22 | private String digitalMessage;
23 | private int minValue;
24 | private String minValueMessage;
25 | private int maxValue;
26 | private String maxValueMessage;
27 | //INT FLOAT 科学计数法
28 | private DigitalCategory category;
29 | private List> i18nConfig=new ArrayList<>();
30 | }
31 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/validate/NoneValidator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol.validate;
2 |
3 | import com.sparrow.core.Pair;
4 |
5 | import java.util.Collections;
6 | import java.util.List;
7 |
8 | public class NoneValidator implements Validator {
9 |
10 | @Override
11 | public Boolean getI18n() {
12 | return null;
13 | }
14 |
15 | @Override
16 | public void setI18nFieldName(String i18nFieldName) {
17 |
18 | }
19 |
20 | @Override
21 | public String getI18nFieldName() {
22 | return "";
23 | }
24 |
25 | @Override
26 | public Boolean getAllowEmpty() {
27 | return true;
28 | }
29 |
30 | @Override
31 | public String getEmptyMessage() {
32 | return "";
33 | }
34 |
35 | @Override
36 | public List> getI18nConfig() {
37 | return Collections.emptyList();
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/validate/RegexValidator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol.validate;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class RegexValidator extends StringValidator {
7 | private String formatMessage;
8 | private String regex;
9 | }
10 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/validate/StringValidator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol.validate;
2 |
3 | import com.sparrow.core.Pair;
4 | import lombok.Data;
5 |
6 | import java.util.List;
7 |
8 | @Data
9 | public class StringValidator implements Validator {
10 | private Boolean i18n;
11 | private String i18nFieldName;
12 | private String emptyMessage;
13 | private Boolean allowEmpty;
14 | protected int minLength;
15 | protected int maxLength;
16 | private String minLengthMessage;
17 | private String maxLengthMessage;
18 | private List> i18nConfig;
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/coder-protocol/src/main/java/com/sparrow/coding/protocol/validate/Validator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.protocol.validate;
2 |
3 | import com.sparrow.core.Pair;
4 |
5 | import java.util.List;
6 |
7 | public interface Validator {
8 | Boolean getI18n();
9 |
10 | void setI18nFieldName(String i18nFieldName);
11 |
12 | String getI18nFieldName();
13 |
14 | Boolean getAllowEmpty();
15 |
16 | String getEmptyMessage();
17 |
18 | List> getI18nConfig();
19 | }
20 |
--------------------------------------------------------------------------------
/coder/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | com.sparrowzoo
7 | sparrow-bom
8 | 1.0.5-SNAPSHOT
9 |
10 |
11 | 4.0.0
12 | com.sparrow.coding
13 | coder
14 | 1.0
15 | jar
16 |
17 | 8
18 | 8
19 | 3.0.1
20 |
21 |
22 |
23 |
24 | com.belerweb
25 | pinyin4j
26 | 2.5.0
27 |
28 |
29 |
30 | javax.servlet
31 | javax.servlet-api
32 | compile
33 |
34 |
35 | com.sparrowzoo
36 | sparrow-orm
37 |
38 |
39 | com.sparrowzoo
40 | sparrow-container
41 |
42 |
43 | com.sparrowzoo
44 | sparrow-data-source
45 |
46 |
47 | com.sparrowzoo
48 | sparrow-loader
49 |
50 |
51 | com.sparrowzoo
52 | sparrow-json
53 |
54 |
55 | coder-protocol
56 | com.sparrowzoo.coding
57 | 1.0.0-RELEASE
58 |
59 |
60 | ch.qos.logback
61 | logback-classic
62 |
63 |
64 |
65 | org.springframework.boot
66 | spring-boot-starter-test
67 | test
68 |
69 |
70 |
71 | org.springframework.boot
72 | spring-boot-starter-web
73 |
74 |
75 |
76 | sparrow-coder
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/ApplicationBoot.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding;
2 |
3 | import org.slf4j.Logger;
4 | import org.slf4j.LoggerFactory;
5 | import org.springframework.boot.SpringApplication;
6 | import org.springframework.boot.autoconfigure.SpringBootApplication;
7 | import org.springframework.boot.context.event.ApplicationStartingEvent;
8 | import org.springframework.context.ApplicationListener;
9 | import org.springframework.context.event.ContextClosedEvent;
10 | import org.springframework.context.event.ContextRefreshedEvent;
11 |
12 |
13 | @SpringBootApplication(scanBasePackages = "com.sparrow.*")
14 | public class ApplicationBoot {
15 | private static Logger log = LoggerFactory.getLogger(ApplicationBoot.class);
16 | public static void main(String[] args) {
17 | SpringApplication springApplication = new SpringApplication(ApplicationBoot.class);
18 | springApplication.addListeners(new ApplicationListener() {
19 | @Override
20 | public void onApplicationEvent(ApplicationStartingEvent event) {
21 |
22 | }
23 | });
24 |
25 |
26 | springApplication.addListeners(new ApplicationListener() {
27 | @Override
28 | public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
29 | log.info("application startup at {}", contextRefreshedEvent.getTimestamp());
30 | try {
31 | log.info("start web socket server");
32 | } catch (Exception e) {
33 | log.error("start error", e);
34 | }
35 | }
36 | });
37 | springApplication.addListeners(new ApplicationListener() {
38 |
39 | @Override
40 | public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {
41 | log.info("application closed at at {}", contextClosedEvent.getTimestamp());
42 | }
43 | });
44 | springApplication.run(args);
45 | }
46 | }
47 |
48 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/ApplicationInitializer.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding;
2 |
3 | import com.sparrow.container.Container;
4 | import com.sparrow.support.Initializer;
5 |
6 | public class ApplicationInitializer implements Initializer {
7 | @Override
8 | public void init(Container container) {
9 |
10 | }
11 |
12 | @Override
13 | public void destroy(Container container) {
14 |
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/FrontMain.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding;
2 |
3 | import com.sparrow.coding.frontend.EnvironmentContext;
4 | import com.sparrow.container.Container;
5 | import com.sparrow.container.ContainerBuilder;
6 | import com.sparrow.core.spi.ApplicationContext;
7 | import com.sparrow.protocol.POJO;
8 | import com.sparrow.utility.StringUtility;
9 | import java.io.IOException;
10 | import java.util.ArrayList;
11 | import java.util.List;
12 | import javax.xml.parsers.ParserConfigurationException;
13 | import org.xml.sax.SAXException;
14 |
15 | public class FrontMain {
16 | private static void usage() {
17 | System.out.println("使用方法【usage】");
18 | System.out.println("sparrow-front-coder.sh [OPTION] [args]");
19 | System.out.println("OPTION:");
20 | System.out.println("生成管理页: [-mp |-GenerateManagePage] args=pojo");
21 | System.out.println("生成新建页: [-cp |-GenerateCreatePage] args=pojo");
22 | System.out.println("生成新建页js: [-cj |-GenerateCreateJs] args=pojo");
23 | System.out.println("生成国际化提示信息【中文】js: [-lj |-GenerateLanguageJs] args=pojo");
24 | System.out.println("生成管理页 js: [-mj |-GenerateManageJs] args=pojo");
25 | }
26 |
27 | public static void innerMain(
28 | String[] args) throws IOException, ClassNotFoundException, ParserConfigurationException, SAXException {
29 | System.out.println("生成类:" + args[1]);
30 |
31 | String sparrowConfig = "default";
32 | String configPath = args[args.length - 1];
33 | if (configPath.startsWith("-config=")) {
34 | sparrowConfig = configPath.substring("-config=".length());
35 | }
36 | Class extends POJO> clazz = (Class extends POJO>) Class.forName(args[1]);
37 | EnvironmentContext environmentContext = new EnvironmentContext(sparrowConfig);
38 | EnvironmentContext.Config config = environmentContext.new Config(clazz);
39 | if ("-mp".equals(args[0]) || "-GenerateManagePage".equals(args[0])) {
40 | config.generateManagePage();
41 | return;
42 | }
43 |
44 | if ("-cp".equals(args[0]) || "-GenerateCreatePage".equals(args[0])) {
45 | config.generateCreatePage();
46 | return;
47 | }
48 |
49 | if ("-cj".equals(args[0]) || "-GenerateCreateJs".equals(args[0])) {
50 | config.generateCreateJs();
51 | return;
52 | }
53 |
54 | if ("-lj".equals(args[0]) || "-GenerateLanguageJs".equals(args[0])) {
55 | config.generateLanguageJs();
56 | return;
57 | }
58 |
59 | if ("-mj".equals(args[0]) || "-GenerateManageJs".equals(args[0])) {
60 | config.generateManageJs();
61 | }
62 | }
63 |
64 | public static void main(
65 | String[] args) throws ClassNotFoundException, IOException, ParserConfigurationException, SAXException {
66 | //args = "--example".split(" ");
67 | // args = "-mp com.sparrow.coding.config.ExampleFront".split(" ");
68 |
69 | Container container = ApplicationContext.getContainer();
70 | container.init(new ContainerBuilder().initController(false)
71 | .initInterceptor(false)
72 | .scanBasePackage("com.sparrow"));
73 |
74 | if (args.length == 0 || "--help".equals(args[0])) {
75 | usage();
76 | return;
77 | }
78 |
79 | if ("--example".equals(args[0])) {
80 | List argsList = new ArrayList<>();
81 | argsList.add("-mp com.sparrow.coding.config.ExampleFront");
82 | argsList.add("-cp com.sparrow.coding.config.ExampleFront");
83 | argsList.add("-cj com.sparrow.coding.config.ExampleFront");
84 | argsList.add("-lj com.sparrow.coding.config.ExampleFront");
85 | argsList.add("-mj com.sparrow.coding.config.ExampleFront");
86 |
87 | for (String argLine : argsList) {
88 | args = argLine.split(" ");
89 | innerMain(args);
90 | }
91 | return;
92 | }
93 |
94 | if (args.length < 2) {
95 | usage();
96 | return;
97 | }
98 | innerMain(args);
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/ProjectCopier.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding;
2 |
3 | import com.sparrow.utility.FileUtility;
4 | import org.slf4j.Logger;
5 | import org.slf4j.LoggerFactory;
6 |
7 | import java.io.File;
8 | import java.io.IOException;
9 | import java.util.Properties;
10 |
11 | public class ProjectCopier {
12 | private static Logger logger = LoggerFactory.getLogger(ProjectCopier.class);
13 |
14 | private static String workspace;
15 | private static String target;
16 | private static String resourceTarget;
17 |
18 | public static void run(String config) throws IOException {
19 | Properties properties = System.getProperties();
20 | properties.load(ProjectCopier.class.getResourceAsStream("/tedu/" + config));
21 |
22 | String userHome = System.getProperty("user.home");
23 | workspace = properties.getProperty("workspace");
24 | workspace = workspace.replace("${user.home}", userHome);
25 |
26 | String sources = properties.getProperty("sources");
27 | String[] sourceProjects = sources.split(",");
28 | target = workspace + properties.getProperty("target");
29 | resourceTarget = workspace + properties.getProperty("resource_target");
30 | for (String source : sourceProjects) {
31 | try {
32 | copy(workspace + source);
33 | } catch (Exception e) {
34 | System.out.println(source + " is error");
35 | }
36 | }
37 | }
38 |
39 | public static void main(String[] args2) throws IOException {
40 | //run("sparrow_copier.properties");
41 | run("copier.properties");
42 | //run("admin_copier.properties");
43 | }
44 |
45 | private static FileUtility.FolderFilter filter = (sourceFile, targetFile) -> {
46 | if (sourceFile.equalsIgnoreCase("target")) {
47 | return true;
48 | }
49 | //main 排除
50 | if (sourceFile.startsWith(".")) {
51 | return true;
52 | }
53 | if (sourceFile.endsWith("-main")) {
54 | return true;
55 | }
56 | return false;
57 | };
58 |
59 | private static void copy(String source) {
60 | File directory = new File(source);
61 | String[] directoryList = directory.list();
62 | if (directoryList == null) {
63 | return;
64 | }
65 | for (String childDirectory : directoryList) {
66 | if (filter.filter(childDirectory, target)) {
67 | continue;
68 | }
69 |
70 | if (childDirectory.contains("dao-impl")) {
71 | String mapperSource = source + File.separator + childDirectory + "/src/main/resources";
72 | File sourceDirectory = new File(mapperSource);
73 | if (sourceDirectory.exists()) {
74 | FileUtility.getInstance().recurseCopy(mapperSource, resourceTarget);
75 | } else {
76 | logger.warn("{} is not exist", mapperSource);
77 | }
78 | continue;
79 | }
80 |
81 |
82 | String sourceDirectoryPath = source + File.separator + childDirectory + "/src/main/java";
83 | File sourceDirectory = new File(sourceDirectoryPath);
84 | if (sourceDirectory.exists()) {
85 | logger.info("copy {} to {}", sourceDirectoryPath, target);
86 | FileUtility.getInstance().recurseCopy(sourceDirectoryPath, target);
87 | } else {
88 | logger.warn("{} is not exist", sourceDirectoryPath);
89 | }
90 | }
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/config/CoderConfig.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.config;
2 |
3 | /**
4 | * 代码生成器的配置文件
5 | */
6 | public class CoderConfig {
7 | /**
8 | * 作者
9 | */
10 | public static String AUTHOR = "author";
11 | /**
12 | * 项目名称
13 | */
14 | public static String PROJECT = "project";
15 | /**
16 | * 资源文件工作区
17 | */
18 | public static String RESOURCE_WORKSPACE = "resource_workspace";
19 |
20 | /**
21 | * 后端代码模板家目录
22 | */
23 | public static String BACKEND_TEMPLATE_HOME = "backend_template_home";
24 |
25 |
26 | /**
27 | * 后端代码模板家目录
28 | */
29 | public static String TABLE_OUTPUT_HOME = "table_output_home";
30 |
31 | /**
32 | * 前端生成器配置文件路径
33 | */
34 | public static String FRONTEND_GENERATOR_CONFIG = "frontend_generator_config";
35 | /**
36 | * 生成的前端模板的扩展名 支持 .jsp .html .vue 等等
37 | */
38 | public static String EXTENSION = "extension";
39 | /**
40 | * 项目的工作区
41 | */
42 | public static String WORKSPACE = "workspace";
43 | /**
44 | * js 语言文件生成路径
45 | */
46 | public static String LANGUAGE_JS_PATH = "language_js_path";
47 | /**
48 | * js 文件生成路径
49 | */
50 | public static String JS_PATH = "js_path";
51 | /**
52 | * 前端模板文件生成路径
53 | */
54 | public static String VIEW_TEMPLATE_PATH = "view_template_path";
55 | /**
56 | * css 样式文件生成路径
57 | */
58 | public static String CSS_PATH = "css_path";
59 | /**
60 | * maven module 的配置前缀
61 | */
62 | public static String MODULE_PREFIX = "module.";
63 | /**
64 | * java package 的配置前缀
65 | */
66 | public static String PACKAGE_PREFIX = "package.";
67 | /**
68 | * java 类文件的生成前缀
69 | */
70 | public static String CLASS_PREFIX = "class.";
71 | /**
72 | * admin后台管理系统的parent 项目
73 | */
74 | public static String MODULE_PARENT_ADMIN = "parent.admin";
75 | }
76 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/config/EnvConfig.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.config;
2 |
3 | /**
4 | * 环境变化的key
5 | */
6 | public class EnvConfig {
7 | /**
8 | * 代码生成器家目录【根目录】
9 | */
10 | public static final String SPARROW_CODER_HOME = "SPARROW_CODER_HOME";
11 | }
12 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/config/ExampleFront.java:
--------------------------------------------------------------------------------
1 | //package com.sparrow.coding.config;
2 | //
3 | //import com.sparrow.coding.protocol.ControlType;
4 | //import com.sparrow.coding.protocol.Entity;
5 | //import com.sparrow.coding.protocol.ColumnDef;
6 | //import com.sparrow.coding.protocol.validate.AllowInputCharLengthValidator;
7 | //import com.sparrow.coding.protocol.validate.AllowOptionsValidator;
8 | //import com.sparrow.coding.protocol.validate.ChineseCharactersValidator;
9 | //import com.sparrow.coding.protocol.validate.DigitalValidator;
10 | //import com.sparrow.coding.protocol.validate.EmailValidator;
11 | //import com.sparrow.coding.protocol.validate.EqualValidator;
12 | //import com.sparrow.coding.protocol.validate.IdCardValidator;
13 | //import com.sparrow.coding.protocol.validate.MobileValidator;
14 | //import com.sparrow.coding.protocol.validate.StringValidator;
15 | //import com.sparrow.coding.protocol.validate.TelValidator;
16 | //import com.sparrow.coding.protocol.validate.UserNameRuleValidator;
17 | //import com.sparrow.protocol.FieldOrder;
18 | //
19 | ///**
20 | // * 示例代码
21 | // */
22 | //@Entity(name = "sparrowExample", text = "用户")
23 | //public class ExampleFront {
24 | // @ColumnDef(text = "用户ID", primaryKey = true, type = ControlType.INPUT_HIDDEN, listType = ControlType.CHECK_BOX, showInList = true)
25 | // @FieldOrder(order = 1)
26 | // private Long id;
27 | //
28 | // @ColumnDef(text = "用户头象", type = ControlType.IMAGE, listType = ControlType.IMAGE)
29 | // @FieldOrder(order = 1.2F)
30 | // private String avatar;
31 | //
32 | // @ColumnDef(text = "用户名", type = ControlType.INPUT_TEXT, validate = UserNameRuleValidator.class, showInList = true, listType = ControlType.LINK)
33 | // @UserNameRuleValidator(prompt = "请输入6-20个字符(字母、数字或下划线)推荐字母+数字组合的用户名。"
34 | // , nullError = "请输入6-20个字符的用户名")
35 | // @FieldOrder(order = 2)
36 | // private String userName;
37 | //
38 | //
39 | //
40 | // @ColumnDef(text = "状态", type = ControlType.ENABLE_DISABLE, validate = AllowOptionsValidator.class, showInList = true)
41 | // @AllowOptionsValidator(options = {"1", "2", "3"}, defaultValue = "1")
42 | // @FieldOrder(order = 4)
43 | // private String status;
44 | //
45 | // @ColumnDef(text = "年龄", type = ControlType.INPUT_TEXT, validate = DigitalValidator.class, showInList = true)
46 | // @DigitalValidator(prompt = "请输入年龄", allowNull = true,
47 | // digitalError = "年龄必须>0并且<100", minValue = 1, maxValue = 100)
48 | // @FieldOrder(order = 5)
49 | // private String age;
50 | //
51 | // @ColumnDef(text = "E-mail", type = ControlType.INPUT_TEXT, validate = EmailValidator.class, showInList = true)
52 | // @EmailValidator(prompt = "请输入邮箱", emailError = "邮箱格式输入错误", minLength = 10, maxLength = 255, lengthError = "邮箱长度必须>=10 并且<255", setError = "邮箱已存在")
53 | // @FieldOrder(order = 6)
54 | // private String email;
55 | //
56 | // @ColumnDef(text = "密码", type = ControlType.INPUT_PASSWORD)
57 | // @StringValidator(prompt = "请输入密码", nullError = "用户密码不允许为空", allowNull = false, minLength = 6, maxLength = 20, lengthError = "密码要求6-20位字符")
58 | // @FieldOrder(order = 6.1f)
59 | // private String password;
60 | //
61 | // @ColumnDef(text = "确认密码", type = ControlType.INPUT_PASSWORD, validate = EqualValidator.class)
62 | // @EqualValidator(prompt = "请输入确认密码",
63 | // otherCtrlId = "txtPassword",
64 | // nullError = "确认密码不能为空",
65 | // noEqualError = "两次密码输入不一致",
66 | // minLength = 6,
67 | // maxLength = 30,
68 | // lengthError = "密码长度必须>=6 并且小于30"
69 | // )
70 | // @FieldOrder(order = 7)
71 | // private String confirmPassword;
72 | //
73 | // @ColumnDef(text = "身份证号码", type = ControlType.INPUT_TEXT, validate = IdCardValidator.class, showInList = true)
74 | // @IdCardValidator(
75 | // prompt = "请输入身份证号码",
76 | // nullError = "身份证号码不允许为空",
77 | // minLength = 18,
78 | // maxLength = 18,
79 | // idCardError = "身份证号码输入有误",
80 | // lengthError = "请输入18位身份证号码",
81 | // allowNull = true)
82 | // @FieldOrder(order = 9)
83 | // private String idCard;
84 | //
85 | // @ColumnDef(text = "手机号", type = ControlType.INPUT_TEXT, validate = MobileValidator.class)
86 | // @MobileValidator
87 | // @FieldOrder(order = 10)
88 | // private String mobile;
89 | //
90 | // @ColumnDef(text = "电话号码", type = ControlType.INPUT_TEXT, validate = TelValidator.class, showInList = true)
91 | // @TelValidator
92 | // @FieldOrder(order = 11)
93 | // private String tel;
94 | //
95 | //
96 | //
97 | // @ColumnDef(text = "真实姓名", type = ControlType.INPUT_TEXT, validate = ChineseCharactersValidator.class)
98 | // @ChineseCharactersValidator(nullError = "请输入真实姓名",chineseCharactersError = "请输入中文")
99 | // @FieldOrder(order = 13)
100 | // private String name;
101 | //
102 | // @ColumnDef(text = "备注", type = ControlType.TEXT_AREA, validate = AllowInputCharLengthValidator.class)
103 | // @AllowInputCharLengthValidator(maxAllowCharLength = 512, allowCharLengthShowControlId = "spanAllowCharLength")
104 | // @FieldOrder(order = 14)
105 | // private String remark;
106 | //}
107 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/config/MybatisMethodConfig.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.config;
2 |
3 | public class MybatisMethodConfig {
4 | public static String CHANGE_STATUS = "change_status";
5 | public static String PARAMETER_TYPE = "parameter_type";
6 | public static String MODIFIED_CONDITION = "modified_condition";
7 | }
8 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/frontend/enums/FrontendPlaceholderKey.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.frontend.enums;
2 |
3 | /**
4 | * 前缀配置的placeholder
5 | */
6 | public enum FrontendPlaceholderKey {
7 |
8 | /**
9 | * 实体对象名称 比如:用户对象名 user
10 | */
11 | $entity_name,
12 | /**
13 | * 实体对象中文描述 比如 用户
14 | */
15 | $entity_text,
16 |
17 | /**
18 | * "-"转换实体对象 比如example-front
19 | */
20 | $entity_by_horizontal,
21 |
22 | /**
23 | * "/"转换实体对象 比如example/front
24 | */
25 | $entity_by_slash,
26 |
27 |
28 | /**
29 | * 主键 key
30 | */
31 | $primary_key,
32 | /**
33 | * 实体对象名称 比喻:用户对象名 User
34 | */
35 | $upper_entity_name,
36 | /**
37 | * 字段的中文描述 比如:用户名
38 | */
39 | $field_text,
40 | /**
41 | * 比如:userName
42 | */
43 | $property_name,
44 | /**
45 | * 首字段大写的属性名称 比如:UserName
46 | */
47 | $upper_property_name,
48 | /**
49 | * 在管理显示的宽度 80px
50 | */
51 | $width,
52 | /**
53 | * 管理页面的头行html
54 | */
55 | $manage_header_line,
56 | /**
57 | * 管理页面的数据行html
58 | */
59 | $manage_data_table,
60 |
61 | /**
62 | * java 工程工作目录
63 | */
64 | $workspace,
65 |
66 | /**
67 | * 资源文件工程目录
68 | */
69 | $resource_workspace,
70 | /**
71 | * 项目
72 | */
73 | $project
74 | }
75 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/frontend/validate/valibot/AbstractValidatorMessageGenerator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.frontend.validate.valibot;
2 |
3 | import com.sparrow.coding.DigitalCategory;
4 | import com.sparrow.coding.api.ValidatorMessageGenerator;
5 | import com.sparrow.coding.api.ValidatorRegistry;
6 | import com.sparrow.coding.protocol.validate.DigitalValidator;
7 | import com.sparrow.coding.protocol.validate.StringValidator;
8 | import com.sparrow.coding.protocol.validate.Validator;
9 | import com.sparrow.container.Container;
10 | import com.sparrow.container.ContainerAware;
11 | import com.sparrow.core.Pair;
12 | import com.sparrow.utility.StringUtility;
13 | import lombok.extern.slf4j.Slf4j;
14 | import org.springframework.beans.factory.InitializingBean;
15 |
16 | import java.util.List;
17 |
18 | @Slf4j
19 | public abstract class AbstractValidatorMessageGenerator implements ValidatorMessageGenerator, InitializingBean, ContainerAware {
20 | private ValidatorRegistry registry = ValidatorRegistry.getInstance();
21 |
22 | public AbstractValidatorMessageGenerator() {
23 | }
24 |
25 | /**
26 | * 生成示例
27 | *
28 | * age: v.pipe(
29 | * v.string(),// 初始字符串输入
30 | * v.transform((input): number | string => {
31 | * //是否为浮点数
32 | * const match = /^-?\d+$/.test(input);
33 | * if (match) {
34 | * return parseInt(input);
35 | * }
36 | * return input;
37 | * }),
38 | * v.number("请输入数字"), // 确保转换后为数字类型
39 | * v.minValue(1, '年龄不能小于1岁'),
40 | * v.maxValue(100, '年龄不能超过100岁'),
41 | * v.nonEmpty("Please enter your password."),
42 | * v.minLength(8, "Your password must have 8 characters or more.")
43 | * )
44 | *
45 | * 对应AppName:{
46 | * * @return
47 | */
48 | protected String pipeline() {
49 | return "v.pipe(\n v.string()";
50 | }
51 |
52 | protected String getMessage(Validator validator, String i18nKey, String message) {
53 | if (validator.getI18n()) {
54 | List> configList = validator.getI18nConfig();
55 | configList.add(new Pair<>(i18nKey, message));
56 | return String.format("translate(\"%1$s.%2$s\")", validator.getI18nFieldName(), i18nKey);
57 | }
58 | return String.format("\"%s\"", message);
59 | }
60 |
61 | protected String nonEmpty(T validator) {
62 | if (!validator.getAllowEmpty()) {
63 | return String.format(",\nv.nonEmpty(%s)", this.getMessage(validator, "empty-message", validator.getEmptyMessage()));
64 | }
65 | return "";
66 | }
67 |
68 | protected String allowEmpty(String pipeline) {
69 | return String.format("v.union([v.literal(\"\"),%s], (issue) => {" +
70 | " if (issue.issues) {\n" +
71 | " return issue.issues[issue.issues.length - 1].message;\n" +
72 | " }\n" +
73 | " return \"\";\n" +
74 | " })", pipeline);
75 | }
76 |
77 |
78 | protected void finish(StringBuilder sb) {
79 | sb.append(")\n");
80 | }
81 |
82 | @Override
83 | public void afterPropertiesSet() {
84 | this.registry.registry(this);
85 | }
86 |
87 | @Override
88 | public void aware(Container container, String s) {
89 | this.registry.registry(this);
90 | }
91 |
92 | protected String minLength(StringValidator validator) {
93 | return String.format(",\n v.minLength(%1$s, %2$s)", validator.getMinLength(), this.getMessage(validator, "min-length-message", validator.getMinLengthMessage()));
94 | }
95 |
96 | protected String maxLength(StringValidator validator) {
97 | return String.format(",\nv.maxLength(%1$s, %2$s)", validator.getMaxLength(), this.getMessage(validator, "max-length-message", validator.getMaxLengthMessage()));
98 | }
99 |
100 |
101 | /**
102 | * v.check((val) => {return /^\d+$/.test(val);}, "请输入数字"),
103 | * * @return
104 | */
105 | protected String check(T validator, String regex, String message) {
106 | return String.format(",\nv.check((val) => {return /%1$s/.test(val);},%2$s)", regex, this.getMessage(validator, "check-message", message));
107 | }
108 |
109 | protected String transform(DigitalCategory category) {
110 | return String.format(",\nv.transform((input): number | string => {return %s;})", category.getConverter());
111 | }
112 |
113 | protected String minValue(DigitalValidator validator) {
114 | return String.format(",\nv.minValue(%1$s, %2$s)", validator.getMinValue(), this.getMessage(validator, "min-value-message", validator.getMinValueMessage()));
115 | }
116 |
117 | protected String maxValue(DigitalValidator validator) {
118 | return String.format(",\n v.maxValue(%1$s, %2$s)", validator.getMaxValue(), this.getMessage(validator, "max-value-message", validator.getMaxValueMessage()));
119 | }
120 |
121 | protected abstract String outerGenerateMessage(String propertyName, T validator);
122 |
123 | public String generateConfig(String propertyName, T validator) {
124 | if (validator.getI18n()) {
125 | validator.setI18nFieldName(propertyName);
126 | }
127 | String message = this.outerGenerateMessage(propertyName, validator);
128 | return String.format("%1$s:\n%2$s\n", propertyName, message);
129 | }
130 |
131 | public String generateI18NConfig(T validator) {
132 | if (!validator.getI18n()) {
133 | return "";
134 | }
135 | StringBuilder sb = new StringBuilder();
136 | for (Pair pair : validator.getI18nConfig()) {
137 | sb.append(String.format("\"%1$s\":\"%2$s\",\n", pair.getFirst(), pair.getSecond()));
138 | }
139 | return sb.toString();
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/frontend/validate/valibot/ChineseCharactersValidatorMessageGenerator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.frontend.validate.valibot;
2 |
3 | import com.sparrow.coding.protocol.validate.RegexValidator;
4 |
5 | import javax.inject.Named;
6 |
7 | @Named
8 | public class ChineseCharactersValidatorMessageGenerator extends RegexValidatorMessageGenerator {
9 |
10 | @Override
11 | public String outerGenerateMessage(String propertyName, RegexValidator validator) {
12 | validator.setRegex("/^[\\u4e00-\\u9fa5]+/");
13 | return super.outerGenerateMessage(propertyName, validator);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/frontend/validate/valibot/DigitalValidatorMessageGenerator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.frontend.validate.valibot;
2 |
3 | import com.sparrow.coding.protocol.validate.DigitalValidator;
4 |
5 | import javax.inject.Named;
6 |
7 | @Named
8 | public class DigitalValidatorMessageGenerator extends AbstractValidatorMessageGenerator {
9 | @Override
10 | public String outerGenerateMessage(String propertyName, DigitalValidator validator) {
11 | StringBuilder pipeline = new StringBuilder();
12 | pipeline.append(this.pipeline());
13 | pipeline.append(this.nonEmpty(validator));
14 | pipeline.append(this.check(validator, validator.getCategory().getRegex(), validator.getDigitalMessage()));
15 | pipeline.append(this.transform(validator.getCategory()));
16 | pipeline.append(this.minValue(validator));
17 | pipeline.append(this.maxValue(validator));
18 | this.finish(pipeline);
19 | if (validator.getAllowEmpty()) {
20 | return this.allowEmpty(pipeline.toString());
21 | }
22 | return pipeline.toString();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/frontend/validate/valibot/EmailValidatorMessageGenerator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.frontend.validate.valibot;
2 |
3 | import com.sparrow.coding.protocol.validate.RegexValidator;
4 |
5 | import javax.inject.Named;
6 |
7 | @Named
8 | public class EmailValidatorMessageGenerator extends AbstractValidatorMessageGenerator{
9 |
10 | @Override
11 | public String outerGenerateMessage(String propertyName, RegexValidator validator){
12 | StringBuilder pipeline = new StringBuilder();
13 | pipeline.append(this.pipeline());
14 | pipeline.append(this.nonEmpty(validator));
15 | pipeline.append(this.minLength(validator));
16 | pipeline.append(this.maxLength(validator));
17 | pipeline.append(String.format(",\nv.email(%s)",this.getMessage(validator,"email-message",validator.getFormatMessage())));
18 | this.finish(pipeline);
19 | if (validator.getAllowEmpty()) {
20 | return this.allowEmpty(pipeline.toString());
21 | }
22 | return pipeline.toString();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/frontend/validate/valibot/IdCardValidatorMessageGenerator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.frontend.validate.valibot;
2 |
3 | import com.sparrow.coding.protocol.validate.RegexValidator;
4 |
5 | import javax.inject.Named;
6 |
7 | @Named
8 | public class IdCardValidatorMessageGenerator extends RegexValidatorMessageGenerator {
9 |
10 | //https://www.66zan.cn/regexdso/
11 | @Override
12 | public String outerGenerateMessage(String propertyName, RegexValidator validator) {
13 | validator.setRegex("^(\\d{15}|\\d{17}[\\dXx])$");
14 | return super.outerGenerateMessage(propertyName, validator);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/frontend/validate/valibot/MobileValidatorMessageGenerator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.frontend.validate.valibot;
2 |
3 | import com.sparrow.coding.protocol.validate.RegexValidator;
4 |
5 | import javax.inject.Named;
6 |
7 | @Named
8 | public class MobileValidatorMessageGenerator extends RegexValidatorMessageGenerator {
9 | @Override
10 | public String outerGenerateMessage(String propertyName, RegexValidator validator) {
11 | validator.setRegex("^1\\d{10}$");
12 | return super.outerGenerateMessage(propertyName, validator);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/frontend/validate/valibot/RegexValidatorMessageGenerator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.frontend.validate.valibot;
2 |
3 | import com.sparrow.coding.protocol.validate.RegexValidator;
4 |
5 | import javax.inject.Named;
6 |
7 | @Named
8 | public class RegexValidatorMessageGenerator extends AbstractValidatorMessageGenerator {
9 |
10 | //https://www.66zan.cn/regexdso/
11 | @Override
12 | public String outerGenerateMessage(String propertyName, RegexValidator validator) {
13 | StringBuilder pipeline = new StringBuilder();
14 | pipeline.append(this.pipeline());
15 | pipeline.append(this.nonEmpty(validator));
16 | pipeline.append(this.check(validator,validator.getRegex(),validator.getFormatMessage()));
17 | this.finish(pipeline);
18 | if (validator.getAllowEmpty()) {
19 | return this.allowEmpty(pipeline.toString());
20 | }
21 | return pipeline.toString();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/frontend/validate/valibot/StringValidatorMessageGenerator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.frontend.validate.valibot;
2 |
3 | import com.sparrow.coding.protocol.validate.StringValidator;
4 |
5 | import javax.inject.Named;
6 |
7 | @Named
8 | public class StringValidatorMessageGenerator extends AbstractValidatorMessageGenerator {
9 |
10 |
11 | @Override
12 | public String outerGenerateMessage(String propertyName, StringValidator validator) {
13 | StringBuilder pipeline = new StringBuilder();
14 | pipeline.append(this.pipeline());
15 | pipeline.append(this.nonEmpty(validator));
16 | pipeline.append(this.minLength(validator));
17 | pipeline.append(this.maxLength(validator));
18 | this.finish(pipeline);
19 | if (validator.getAllowEmpty()) {
20 | return this.allowEmpty(pipeline.toString());
21 | }
22 | return pipeline.toString();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/frontend/validate/valibot/TelValidatorMessageGenerator.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.frontend.validate.valibot;
2 |
3 | import com.sparrow.coding.protocol.validate.RegexValidator;
4 |
5 | import javax.inject.Named;
6 |
7 | @Named
8 | public class TelValidatorMessageGenerator extends RegexValidatorMessageGenerator {
9 |
10 | @Override
11 | public String outerGenerateMessage(String propertyName, RegexValidator validator) {
12 | validator.setRegex("^(\\d{4}-|\\d{3}-)?(\\d{8}|\\d{7})$");
13 | return super.outerGenerateMessage(propertyName, validator);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/java/CodeGenerator2.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.java;
2 |
3 | import com.sparrow.coding.java.enums.ClassKey;
4 | import com.sparrow.orm.AbstractEntityManagerAdapter;
5 | import com.sparrow.orm.JDBCTemplate;
6 | import com.sparrow.orm.SparrowEntityManager;
7 | import com.sparrow.protocol.constant.Constant;
8 | import com.sparrow.utility.FileUtility;
9 | import com.sparrow.utility.StringUtility;
10 | import java.io.IOException;
11 | import org.slf4j.Logger;
12 | import org.slf4j.LoggerFactory;
13 |
14 | public class CodeGenerator2 {
15 | private static Logger logger = LoggerFactory.getLogger(CodeGenerator2.class);
16 | private EnvironmentContext environmentContext;
17 |
18 | public CodeGenerator2(String sparrowConfig) throws IOException {
19 | this.environmentContext = new EnvironmentContext(sparrowConfig);
20 | }
21 |
22 | public void param(Class> po) throws IOException {
23 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
24 | tableConfig.write(ClassKey.PARAM);
25 | }
26 |
27 | public void query(Class> po) throws IOException {
28 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
29 | tableConfig.write(ClassKey.QUERY);
30 | }
31 |
32 | public void assemble(Class> po) throws IOException {
33 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
34 | tableConfig.write(ClassKey.ASSEMBLE);
35 | }
36 |
37 | public void converter(Class> po) throws IOException {
38 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
39 | tableConfig.write(ClassKey.DATA_CONVERTER);
40 | }
41 |
42 | public void batchOperate(Class> po) throws IOException {
43 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
44 | tableConfig.write(ClassKey.BATCH_OPERATE_PARAM);
45 | }
46 |
47 | public void pagerQuery(Class> po) throws IOException {
48 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
49 | tableConfig.write(ClassKey.PAGER_QUERY);
50 | }
51 |
52 | public void vo(Class> po) throws IOException {
53 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
54 | tableConfig.write(ClassKey.VO);
55 | }
56 |
57 | public void bo(Class> po) throws IOException {
58 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
59 | tableConfig.write(ClassKey.BO);
60 | }
61 |
62 | public void dao(Class> po) throws IOException {
63 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
64 | tableConfig.write(ClassKey.DAO);
65 | }
66 |
67 | public void daoImpl(Class> po) throws IOException {
68 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
69 | tableConfig.write(ClassKey.DAO_IMPL);
70 | }
71 |
72 | public void daoMybatis(Class> po) throws IOException {
73 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
74 | tableConfig.writeMybatis(po,environmentContext);
75 | }
76 |
77 | public void service(Class> po) throws IOException {
78 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
79 | tableConfig.write(ClassKey.SERVICE);
80 | }
81 |
82 | public void repository(Class> po) throws IOException {
83 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
84 | tableConfig.write(ClassKey.REPOSITORY);
85 | }
86 |
87 | public void repositoryImpl(Class> po) throws IOException {
88 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
89 | tableConfig.write(ClassKey.REPOSITORY_IMPL);
90 | }
91 |
92 | public void controller(Class> po) throws IOException {
93 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
94 | tableConfig.write(ClassKey.CONTROLLER);
95 | }
96 |
97 | public void generaCreateNDDL(String originTableName, Integer n, boolean create) throws IOException {
98 | String originTableFullPath = environmentContext.getTableCreateDDLPath(originTableName);
99 | String originTableContent = FileUtility.getInstance().readFileContent(originTableFullPath);
100 | for (int i = 0; i < n; i++) {
101 | String tempSql = originTableContent.replace(Constant.TABLE_SUFFIX, "_" + i);
102 | this.initTableToDb(create, tempSql);
103 | String destTablePath = environmentContext.getSplitTableCreateDDLPath(originTableName, i);
104 | FileUtility.getInstance().writeFile(destTablePath, tempSql);
105 | System.err.printf("table create ddl write to %s\n", destTablePath);
106 | }
107 | }
108 |
109 | private void initTableToDb(boolean create, String tempSql) {
110 | if (!create) {
111 | return;
112 | }
113 | try {
114 | String[] ddlArray = tempSql.split(";");
115 | for (String ddl : ddlArray) {
116 | if (!StringUtility.isNullOrEmpty(ddl)) {
117 | JDBCTemplate.getInstance().executeUpdate(ddl);
118 | }
119 | }
120 | } catch (Exception e) {
121 | logger.error("create ddl sql error", e);
122 | }
123 | }
124 |
125 | public void generaCreateDDL(Class> po) throws IOException {
126 | EnvironmentContext.Config tableConfig = environmentContext.new Config(po);
127 | AbstractEntityManagerAdapter managerAdapter = new SparrowEntityManager(po);
128 | String tablePath = this.environmentContext.getTableCreateDDLPath(tableConfig.getOriginTableName());
129 | String sql = managerAdapter.getCreateDDL();
130 | System.err.println(sql);
131 | FileUtility.getInstance().writeFile(tablePath, sql);
132 | System.err.printf("table create ddl write to %s\n", tablePath);
133 | }
134 | }
135 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/java/ScaffoldCopier.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.java;
2 |
3 | import com.sparrow.coding.api.TableConfigRegistry;
4 | import com.sparrow.coding.po.ProjectConfig;
5 | import com.sparrow.io.file.FileNameBuilder;
6 | import com.sparrow.utility.FileUtility;
7 | import org.slf4j.Logger;
8 | import org.slf4j.LoggerFactory;
9 |
10 | import javax.inject.Named;
11 | import java.io.File;
12 | import java.io.IOException;
13 |
14 | /**
15 | * 1. 递归遍历目录,并复制全部文件
16 | * 1.1 文件IO的API操作
17 | * 1.2 递归算法
18 | * 2. 对应的artifactId 替换为指定的名字
19 | * 3. 依赖他的所有的pom 也需要替换
20 | */
21 | @Named
22 | public class ScaffoldCopier {
23 | private static Logger logger = LoggerFactory.getLogger(ScaffoldCopier.class);
24 |
25 | static void copy(TableConfigRegistry registry) {
26 | String scaffoldHome =new FileNameBuilder(registry.getWorkspace()).joint(registry.getScaffold()).build();
27 | File directory = new File(scaffoldHome);
28 | FileUtility.FolderFilter folderFilter = (sourceFile) -> {
29 | //如果是隐藏文件夹,跳过
30 | if (sourceFile.startsWith(".")) {
31 | return true;
32 | }
33 | //如果是target文件夹,跳过
34 | if (sourceFile.contains("target") || sourceFile.equalsIgnoreCase("target")) {
35 | return true;
36 | }
37 | return false;
38 | };
39 |
40 | String[] directoryList = directory.list();
41 | if (directoryList == null || directoryList.length == 0) {
42 | logger.error("directory [{}] is empty", scaffoldHome);
43 | return;
44 | }
45 | ProjectConfig projectConfig = registry.getProjectConfig();
46 | for (String childDirectory : directoryList) {
47 | //过滤掉不需要的文件夹
48 | if (folderFilter.filter(childDirectory)) {
49 | continue;
50 | }
51 |
52 | String sourceDirectoryPath =new FileNameBuilder(scaffoldHome).joint(childDirectory).build();
53 | FileUtility.getInstance().recurseCopy(sourceDirectoryPath, (sourceFileName) -> {
54 | String targetPath = sourceFileName.replace(scaffoldHome, "").replace("example", projectConfig.getModulePrefix());
55 | targetPath =new FileNameBuilder(registry.getWorkspace()).joint(String.valueOf(projectConfig.getCreateUserId()))
56 | .joint(registry.getProjectConfig().getName()).joint(targetPath).build()
57 | ;
58 | String content = FileUtility.getInstance().readFileContent(sourceFileName);
59 | content = content.replaceAll("example", projectConfig.getModulePrefix());
60 | try {
61 | FileUtility.getInstance().writeFile(targetPath, content);
62 | } catch (IOException e) {
63 | throw new RuntimeException(e);
64 | }
65 | }, folderFilter);
66 | }
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/java/enums/ClassKey.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.java.enums;
2 |
3 | /**
4 | * 生成类的key
5 | *
6 | * 通过 class.{name}找到类名 通过 package.{name}找到包名 通过 module.{module} 找到模块名
7 | *
8 | * 通过该key 的配置找到对应的子模块名,包名及类名
9 | *
10 | * 具体的配置见config.properties
11 | */
12 | public enum ClassKey {
13 | PO("", "persistence"),
14 | BO("bo.txt", "domain"),
15 | PARAM("param.txt", "protocol"),
16 | QUERY("query.txt", "protocol"),
17 | DTO("dto.txt", "protocol"),
18 | CONTROLLER("controller.txt", "adapter"),
19 | VO("vo.txt", "adapter"),
20 | DAO("dao.txt", "dao.api"),
21 | DAO_MYBATIS("mybatis.properties", "dao.mybatis"),
22 | DAO_IMPL("daoImpl.txt", "dao.sparrow"),
23 | SERVICE("service.txt", "domain"),
24 | ASSEMBLE("assemble.txt", "adapter"),
25 | REPOSITORY("repository.txt", "domain"),
26 | REPOSITORY_IMPL("repositoryImpl.txt", "infrastructure"),
27 | DATA_CONVERTER("dataConverter.txt", "infrastructure"),
28 | PAGER_QUERY("pagerQuery.txt", "dao.api"),
29 | BATCH_OPERATE_PARAM("batchOperateParam.txt", "protocol");
30 |
31 | private String template;
32 | private String module;
33 |
34 | public String getTemplate() {
35 | return template;
36 | }
37 |
38 | ClassKey(String template, String module) {
39 | this.template = template;
40 | this.module = module;
41 | }
42 |
43 | public String getModule() {
44 | return module;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/java/enums/PlaceholderKey.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.java.enums;
2 |
3 | public enum PlaceholderKey {
4 | /**
5 | * e.g. @author harry
6 | */
7 | $author,
8 |
9 | /**
10 | * 代码生成器的家目录
11 | */
12 | $coder_home,
13 |
14 | /**
15 | * 项目的工作目录
16 | */
17 | $workspace,
18 |
19 | /**
20 | * 项目名
21 | */
22 | $project,
23 | /**
24 | * origin table name e.g user_address
25 | */
26 | $origin_table_name,
27 |
28 | /**
29 | * e.g UserAddress
30 | */
31 | $persistence_class_name,
32 |
33 | /**
34 | * first case lower table name e.g userAddress
35 | */
36 | $persistence_object_name,
37 |
38 | /**
39 | * 示例 user-address
40 | */
41 | $persistence_object_by_horizontal,
42 |
43 | /**
44 | * 示例 user/address
45 | */
46 | $persistence_object_by_slash,
47 |
48 | /**
49 | * 示例 user.address
50 | */
51 | $persistence_object_by_dot,
52 |
53 | /**
54 | * 项目
55 | */
56 | $module_prefix,
57 |
58 | /**
59 | * po: e.g com.sparrow.user.po
60 | */
61 | $package_po,
62 |
63 | /**
64 | * po: e.g com.sparrow.user.bo
65 | */
66 | $package_bo,
67 |
68 | /**
69 | * po: e.g com.sparrow.user.param
70 | */
71 | $package_param,
72 |
73 | /**
74 | * batch operate param package
75 | */
76 | $package_batch_param,
77 |
78 | /**
79 | * po: e.g com.sparrow.user.query
80 | */
81 | $package_query,
82 |
83 | /**
84 | * po: e.g com.sparrow.user.dto
85 | */
86 | $package_dto,
87 |
88 | /**
89 | * po: e.g com.sparrow.user.vo
90 | */
91 | $package_vo,
92 |
93 | /**
94 | * dao e.g com.sparrow.user.dao
95 | */
96 | $package_dao,
97 |
98 | $package_pager_query,
99 |
100 |
101 | /**
102 | * dao impl e.g com.sparrow.user.dao.impl
103 | */
104 | $package_dao_impl,
105 |
106 | /**
107 | * dao e.g com.sparrow.user.repository
108 | */
109 | $package_repository,
110 |
111 | /**
112 | * dao impl e.g com.sparrow.user.dao.repository.impl
113 | */
114 | $package_repository_impl,
115 |
116 | $package_data_converter,
117 |
118 | $package_assemble,
119 |
120 | /**
121 | * service e.g com.sparrow.user.service
122 | */
123 | $package_service,
124 |
125 | /**
126 | * controller e.g com.sparrow.user.controller
127 | */
128 | $package_controller,
129 |
130 | /**
131 | * User
132 | */
133 | $class_po,
134 |
135 | /**
136 | * UserDao
137 | */
138 | $class_dao,
139 |
140 | /**
141 | * UserService
142 | */
143 | $class_service,
144 |
145 | /**
146 | * Repository
147 | */
148 | $class_repository,
149 |
150 | /**
151 | * Repository impl
152 | */
153 | $class_repositoryImpl,
154 |
155 | /**
156 | * UserDaoImpl
157 | */
158 | $class_impl_dao,
159 |
160 | /**
161 | * UserController
162 | */
163 | $class_controller,
164 |
165 | /**
166 | * primary property name e.g userId
167 | */
168 | $primary_property_name,
169 |
170 | /**
171 | * e.g UserId
172 | */
173 | $upper_primary_property_name,
174 |
175 | $primary_type,
176 |
177 | /**
178 | * userDao
179 | */
180 | $object_dao,
181 |
182 | /**
183 | * userService
184 | */
185 | $object_service,
186 |
187 | /**
188 | * current date 2018-11-15
189 | */
190 | $date,
191 |
192 | /*for mybatis */
193 |
194 | $result_map,
195 |
196 | $sql_insert,
197 |
198 | $sql_query_one,
199 |
200 | $sql_update,
201 |
202 | $sql_delete,
203 |
204 | $field_list,
205 |
206 | $get_sets
207 |
208 | }
209 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/support/utils/ConfigUtils.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.support.utils;
2 |
3 | import com.sparrow.utility.StringUtility;
4 | import lombok.extern.slf4j.Slf4j;
5 |
6 | import java.io.*;
7 | import java.nio.file.Files;
8 | import java.util.Properties;
9 |
10 | @Slf4j
11 | public class ConfigUtils {
12 | public static Properties initPropertyConfig(String configContent) throws IOException {
13 | Properties config = new Properties();
14 | if (!StringUtility.isNullOrEmpty(configContent)) {
15 | log.info("load config from file: " + configContent);
16 | config.load(new StringReader(configContent));
17 | return config;
18 | }
19 | InputStream configStream = ConfigUtils.class.getResourceAsStream("/config.properties");
20 | config.load(configStream);
21 | return config;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/coder/src/main/java/com/sparrow/coding/support/utils/PinyinUtil.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.support.utils;
2 |
3 | import net.sourceforge.pinyin4j.PinyinHelper;
4 | import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
5 | import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
6 | import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
7 | import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
8 | import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
9 |
10 | public class PinyinUtil {
11 | /**
12 | * 将汉字转换为全拼
13 | *
14 | * @param src
15 | * @return String
16 | */
17 | public static String getPinYin(String src) {
18 | char[] tempCharArray = null;
19 | tempCharArray = src.toCharArray();
20 | String[] tempCahrArray2 = new String[tempCharArray.length];
21 | // 设置汉字拼音输出的格式
22 | HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
23 | t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
24 | t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
25 | t3.setVCharType(HanyuPinyinVCharType.WITH_V);
26 | String pinyin = "";
27 | int charLength = tempCharArray.length;
28 | try {
29 | for (int i = 0; i < charLength; i++) {
30 | // 判断是否为汉字字符
31 | // System.out.println(t1[i]);
32 | if (Character.toString(tempCharArray[i]).matches(
33 | "[\\u4E00-\\u9FA5]+")) {
34 | tempCahrArray2 = PinyinHelper.toHanyuPinyinStringArray(
35 | tempCharArray[i], t3);// 将汉字的几种全拼都存到t2数组中
36 | pinyin += tempCahrArray2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后
37 | } else {
38 | // 如果不是汉字字符,直接取出字符并连接到字符串t4后
39 | pinyin += Character.toString(tempCharArray[i]);
40 | }
41 | }
42 | } catch (BadHanyuPinyinOutputFormatCombination e) {
43 | // TODO Auto-generated catch block
44 | e.printStackTrace();
45 | }
46 | return pinyin;
47 | }
48 |
49 | /**
50 | * 提取每个汉字的首字母
51 | *
52 | * @param str
53 | * @return String
54 | */
55 | public static String getPinYinHeadChar(String str) {
56 | String convert = "";
57 | for (int j = 0; j < str.length(); j++) {
58 | char word = str.charAt(j);
59 | // 提取汉字的首字母
60 | String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
61 | if (pinyinArray != null) {
62 | convert += pinyinArray[0].charAt(0);
63 | } else {
64 | convert += word;
65 | }
66 | }
67 | return convert;
68 | }
69 |
70 | /**
71 | * 将字符串转换成ASCII码
72 | *
73 | * @param cnStr
74 | * @return String
75 | */
76 | public static String getCnASCII(String cnStr) {
77 | StringBuffer strBuf = new StringBuffer();
78 | // 将字符串转换成字节序列
79 | byte[] bGBK = cnStr.getBytes();
80 | for (int i = 0; i < bGBK.length; i++) {
81 | // System.out.println(Integer.toHexString(bGBK[i] & 0xff));
82 | // 将每个字符转换成ASCII码
83 | strBuf.append(Integer.toHexString(bGBK[i] & 0xff) + " ");
84 | }
85 | return strBuf.toString();
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/coder/src/main/resources/Licensed.txt:
--------------------------------------------------------------------------------
1 | /*
2 | * Licensed to the Apache Software Foundation (ASF) under one or more
3 | * contributor license agreements. See the NOTICE file distributed with
4 | * this work for additional information regarding copyright ownership.
5 | * The ASF licenses this file to You under the Apache License, Version 2.0
6 | * (the "License"); you may not use this file except in compliance with
7 | * the License. You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
--------------------------------------------------------------------------------
/coder/src/main/resources/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/coder/src/main/resources/config.properties:
--------------------------------------------------------------------------------
1 | module.persistence=$module_prefix-po
2 | module.parent.admin=admin
3 | module.admin.adapter=$module_prefix-admin-adapter
4 | module.admin.dao.api=$module_prefix-admin-dao-api
5 | module.admin.domain=$module_prefix-admin-domain
6 | module.admin.infrastructure=$module_prefix-admin-infrastructure
7 | module.admin.main.boot=$module_prefix-admin-main-spring-boot
8 | module.admin.protocol=$module_prefix-admin-protocol
9 | module.admin.dao.sparrow=$module_prefix-admin-dao-sparrow
10 | module.admin.dao.mybatis=$module_prefix-admin-dao-mybatis
11 |
12 |
13 |
14 | package.po=po
15 | package.bo=admin.domain.bo
16 | package.query=admin.protocol.query
17 | package.param=admin.protocol.param
18 | package.vo=admin.adapter.protocol.vo
19 | package.dao=admin.dao
20 | package.service=admin.domain.service
21 | package.dao_impl=admin.dao.sparrow
22 | package.dao_mybatis=admin.dao.mybatis
23 | package.repository_impl=admin.infrastructure.persistence
24 | package.repository=admin.repository
25 | package.controller=admin.adapter.controller
26 | package.assemble=admin.adapter.assemble
27 | package.data_converter=admin.infrastructure.persistence.data.converter
28 | package.pager_query=admin.dao.query
29 | package.batch_operate_param=admin.protocol.param.batch
30 |
31 |
32 | class.po=$persistence_class_name
33 | class.assemble=$persistence_class_nameAssemble
34 | class.query=$persistence_class_nameQuery
35 | class.bo=$persistence_class_nameBO
36 | class.param=$persistence_class_nameParam
37 | class.vo=$persistence_class_nameVO
38 | class.dao=$persistence_class_nameDAO
39 | class.repository=$persistence_class_nameRepository
40 | class.repository_impl=$persistence_class_nameRepositoryImpl
41 | class.service=$persistence_class_nameService
42 | class.dao_impl=$persistence_class_nameDaoImpl
43 | class.dao_mybatis=$persistence_class_nameMapper
44 |
45 | class.controller=$persistence_class_nameController
46 | class.data_converter=$persistence_class_nameConverter
47 | class.pager_query=$persistence_class_nameDBPagerQuery
48 | class.batch_operate_param=$persistence_class_nameBatchOperateParam
49 |
50 |
51 |
--------------------------------------------------------------------------------
/coder/src/main/resources/jar-with-dependencies.xml:
--------------------------------------------------------------------------------
1 |
2 |
20 |
21 |
26 |
27 |
30 | all
31 |
32 | jar
33 |
34 | false
35 |
36 |
37 |
38 | /
39 | false
40 |
41 | true
42 | compile
43 |
44 |
45 |
46 |
47 | ${project.build.outputDirectory}
48 | /
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/coder/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | [%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %thread %logger{0} %m%n
7 |
8 |
9 |
10 |
11 | ${LOG_HOME}/error.log
12 |
13 | ${LOG_HOME}/error.log.%d{yyyy-MM-dd}-{i}.log
14 | 30
15 |
16 |
17 | %d{yyyy-MM-dd HH:mm:ss.SSS} TRACE_ID %-5level %thread %logger{0} %m%n
18 |
19 |
20 |
21 | ERROR
22 | ACCEPT
23 | DENY
24 |
25 |
26 | 10MB
27 |
28 |
29 |
30 |
31 | ${LOG_HOME}/warn.log
32 |
33 | ${LOG_HOME}/warn.log.%d{yyyy-MM-dd}-{i}.log
34 | 30
35 |
36 |
37 | %d{yyyy-MM-dd HH:mm:ss.SSS} TRACE_ID %-5level %thread %logger{0} %m%n
38 |
39 |
40 |
41 | WARN
42 | ACCEPT
43 | DENY
44 |
45 |
46 | 10MB
47 |
48 |
49 |
50 |
51 | ${LOG_HOME}/info.log
52 |
53 | ${LOG_HOME}/info.log.%d{yyyy-MM-dd}-{i}.log
54 | 30
55 |
56 |
57 | %d{yyyy-MM-dd HH:mm:ss.SSS} TRACE_ID %-5level %thread %logger{0} %m%n
58 |
59 |
60 |
61 | INFO
62 | ACCEPT
63 | DENY
64 |
65 |
66 | 10MB
67 |
68 |
69 |
70 |
71 |
72 | ${LOG_HOME}/debug.log
73 |
74 | ${LOG_HOME}/debug.log.%d{yyyy-MM-dd}-{i}.log
75 | 30
76 |
77 |
78 | %d{yyyy-MM-dd HH:mm:ss.SSS} TRACE_ID %-5level %thread %logger{0} %m%n
79 |
80 |
81 |
82 | DEBUG
83 | ACCEPT
84 | DENY
85 |
86 |
87 | 10MB
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/coder/src/main/resources/release-assembly.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | tar.gz
4 |
5 | false
6 |
7 |
8 | ../example-po/bin
9 | bin
10 |
11 |
12 | src/main/resources/template
13 | template
14 |
15 |
16 | target
17 | /
18 |
19 | sparrow-coder-all.jar
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/coder/src/main/resources/scaffold.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sparrowzoo/sparrow-coder/80a64e1317dbb11b8572d519e491b2f4bbeef990/coder/src/main/resources/scaffold.properties
--------------------------------------------------------------------------------
/coder/src/main/resources/sparrow_default.properties:
--------------------------------------------------------------------------------
1 | driverClassName=org.gjt.mm.mysql.Driver
2 | username=root
3 | password=11111111
4 | url=jdbc:mysql://127.0.0.1/sparrow?useSSL=false&autoReconnect=true&failOverReadOnly=false&useUnicode=true&characterEncoding=utf-8
5 | poolSize=1
6 |
7 | #mybatis
8 | dao=sparrow
9 |
--------------------------------------------------------------------------------
/coder/src/main/resources/sparrow_generator.dtd:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/coder/src/main/resources/system_config.properties:
--------------------------------------------------------------------------------
1 | workspace=/Users/zhanglizhi/workspace
2 | scaffold=/sparrow-example
3 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/admin_copier.properties:
--------------------------------------------------------------------------------
1 | workspace=${user.home}/workspace/tedu/
2 | target=/tarena-tea-wrap-admin/src/main/java
3 | resource_target=/tarena-tea-wrap-admin/src/main/resources
4 | sources=\
5 | tarena_tp_attach,\
6 | tarena_tp_attach/attach-admin,\
7 | tarena_tp_attach/attach-server,\
8 | tarena-tp-basic,\
9 | tarena-tp-basic/basic-admin,\
10 | cs-mall-order,\
11 | cs-mall-order/order-admin,\
12 | cs-mall-goods,\
13 | cs-mall-goods/simple-goods-admin,\
14 | cs-mall-goods/simple-goods-server,\
15 | cs-mall-stock,\
16 | cs-mall-stock/stock-admin,\
17 | tarena-tp-tea,\
18 | tarena-tp-tea/tea-admin,\
19 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/assemble.txt:
--------------------------------------------------------------------------------
1 | package $package_assemble;
2 |
3 | import $package_bo.$persistence_class_nameBO;
4 | import $package_vo.$persistence_class_nameVO;
5 | import com.tedu.inn.protocol.ListRecordTotalBO;
6 | import com.tedu.inn.protocol.pager.PagerResult;
7 | import com.tedu.inn.protocol.pager.SimplePagerQuery;
8 | import java.util.ArrayList;
9 | import java.util.Collections;
10 | import java.util.List;
11 | import org.apache.commons.collections.CollectionUtils;
12 | import org.springframework.beans.BeanUtils;
13 | import org.springframework.stereotype.Component;
14 |
15 | @Component
16 | public class $persistence_class_nameAssemble {
17 | public $persistence_class_nameVO assembleBO2VO($persistence_class_nameBO bo) {
18 | $persistence_class_nameVO $persistence_object_name = new $persistence_class_nameVO();
19 | BeanUtils.copyProperties(bo, $persistence_object_name);
20 | return $persistence_object_name;
21 | }
22 |
23 | public List<$persistence_class_nameVO> boListAssembleVOList(List<$persistence_class_nameBO> list) {
24 | if (CollectionUtils.isEmpty(list)) {
25 | return Collections.emptyList();
26 | }
27 | List<$persistence_class_nameVO> $persistence_object_nameVOList = new ArrayList<>(list.size());
28 | for ($persistence_class_nameBO $persistence_object_nameBo : list) {
29 | $persistence_class_nameVO $persistence_object_nameVo = this.assembleBO2VO($persistence_object_nameBo);
30 | $persistence_object_nameVOList.add($persistence_object_nameVo);
31 | }
32 | return $persistence_object_nameVOList;
33 | }
34 |
35 | public PagerResult<$persistence_class_nameVO> assemblePagerResult(ListRecordTotalBO<$persistence_class_nameBO> $persistence_object_nameListTotalRecord,
36 | SimplePagerQuery $persistence_object_nameQuery) {
37 | List<$persistence_class_nameVO> $persistence_object_nameVOList = this.boListAssembleVOList($persistence_object_nameListTotalRecord.getList());
38 | PagerResult<$persistence_class_nameVO> pagerResult = new PagerResult<>($persistence_object_nameQuery);
39 | pagerResult.setObjects($persistence_object_nameVOList);
40 | pagerResult.setTotal($persistence_object_nameListTotalRecord.getTotal());
41 | return pagerResult;
42 | }
43 | }
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/batchOperateParam.txt:
--------------------------------------------------------------------------------
1 | package $package_batch_param;
2 |
3 | import $package_query.$persistence_class_nameQuery;
4 |
5 | public class $persistence_class_nameBatchOperateParam extends $persistence_class_nameQuery {
6 | private String ids;
7 |
8 | public String getIds() {
9 | return ids;
10 | }
11 |
12 | public void setIds(String ids) {
13 | this.ids = ids;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/bo.txt:
--------------------------------------------------------------------------------
1 | package $package_bo;
2 |
3 | public class $persistence_class_nameBO {
4 | $get_sets
5 | }
6 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/controller.txt:
--------------------------------------------------------------------------------
1 | package $package_controller;
2 |
3 | import $package_assemble.$persistence_class_nameAssemble;
4 | import $package_bo.$persistence_class_nameBO;
5 | import $package_service.$persistence_class_nameService;
6 | import $package_param.$persistence_class_nameParam;
7 | import $package_query.$persistence_class_nameQuery;
8 | import $package_vo.$persistence_class_nameVO;
9 | import com.tedu.inn.protocol.ListRecordTotalBO;
10 | import com.tedu.inn.protocol.exception.BusinessException;
11 | import com.tedu.inn.protocol.pager.PagerResult;
12 | import org.springframework.beans.factory.annotation.Autowired;
13 | import org.springframework.web.bind.annotation.GetMapping;
14 | import org.springframework.web.bind.annotation.PostMapping;
15 | import org.springframework.web.bind.annotation.RequestMapping;
16 | import org.springframework.web.bind.annotation.ResponseBody;
17 | import org.springframework.web.bind.annotation.RestController;
18 |
19 | @RestController
20 | @RequestMapping("$persistence_object_name")
21 | public class $persistence_class_nameController {
22 | @Autowired
23 | private $persistence_class_nameService $persistence_object_nameService;
24 |
25 | @Autowired
26 | private $persistence_class_nameAssemble $persistence_object_nameAssemble;
27 |
28 | @PostMapping("search")
29 | @ResponseBody
30 | public PagerResult<$persistence_class_nameVO> query$persistence_class_names($persistence_class_nameQuery $persistence_object_nameQuery) {
31 | ListRecordTotalBO<$persistence_class_nameBO> $persistence_object_nameListTotalRecord = this.$persistence_object_nameService.query$persistence_class_name($persistence_object_nameQuery);
32 | return this.$persistence_object_nameAssemble.assemblePagerResult($persistence_object_nameListTotalRecord, $persistence_object_nameQuery);
33 | }
34 |
35 | @PostMapping("save")
36 | @ResponseBody
37 | public Long save$persistence_class_name($persistence_class_nameParam $persistence_object_nameParam) throws BusinessException {
38 | return this.$persistence_object_nameService.save$persistence_class_name($persistence_object_nameParam);
39 | }
40 |
41 | @GetMapping("get")
42 | public $persistence_class_nameVO get$persistence_class_name(Long $persistence_object_nameId) throws BusinessException {
43 | $persistence_class_nameBO $persistence_object_nameBo = $persistence_object_nameService.get$persistence_class_name($persistence_object_nameId);
44 | return this.$persistence_object_nameAssemble.assembleBO2VO($persistence_object_nameBo);
45 | }
46 |
47 | @PostMapping("delete")
48 | public Integer delete$persistence_class_name(Long id) throws BusinessException {
49 | return this.$persistence_object_nameService.delete$persistence_class_name(id);
50 | }
51 |
52 | @PostMapping("enable")
53 | public Integer enable$persistence_class_name(String ids) throws BusinessException {
54 | return this.$persistence_object_nameService.enable$persistence_class_name(ids);
55 | }
56 |
57 | @PostMapping("disable")
58 | public Integer disable$persistence_class_name(String ids) throws BusinessException {
59 | return this.$persistence_object_nameService.disable$persistence_class_name(ids);
60 | }
61 | }
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/copier.properties:
--------------------------------------------------------------------------------
1 | workspace=${user.home}/workspace/tedu/
2 | target=/tarena-tea-wrap-server/src/main/java
3 | resource_target=/tarena-tea-wrap-server/src/main/resources
4 | sources=\
5 | tarena_tp_attach,\
6 | tarena_tp_attach/attach-server,\
7 | tarena-tp-basic,\
8 | tarena-tp-basic/basic-server,\
9 | cs-mall-order,\
10 | cs-mall-order/order-server,\
11 | cs-mall-goods,\
12 | cs-mall-goods/simple-goods-server,\
13 | cs-mall-price,\
14 | cs-mall-shopping-cart,\
15 | cs-mall-user,\
16 | cs-mall-stock,\
17 | cs-mall-stock/stock-server,\
18 | tarena-tp-tea,\
19 | tarena-tp-tea/tea-server,\
20 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/dao.txt:
--------------------------------------------------------------------------------
1 |
2 | package $package_dao;
3 |
4 | import $package_po.$persistence_class_name;
5 | import $package_pager_query.$persistence_class_nameDBPagerQuery;
6 | import com.tedu.inn.protocol.dao.StatusCriteria;
7 |
8 | import java.util.List;
9 |
10 | public interface $persistence_class_nameDAO {
11 | Long insert($persistence_class_name $persistence_object_name);
12 |
13 | Integer delete(Long $persistence_object_nameId);
14 |
15 | Integer update($persistence_class_name $persistence_object_name);
16 |
17 | $persistence_class_name getEntity(Long $persistence_object_nameId);
18 |
19 | Integer changeStatus(StatusCriteria statusCriteria);
20 |
21 |
22 | List<$persistence_class_name> query$persistence_class_names($persistence_class_nameDBPagerQuery $persistence_object_namePagerQuery);
23 |
24 | Long count$persistence_class_name($persistence_class_nameDBPagerQuery $persistence_object_namePagerQuery);
25 |
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/daoImpl.txt:
--------------------------------------------------------------------------------
1 | package $package_dao_impl;
2 |
3 | import com.sparrow.orm.query.BooleanCriteria;
4 | import com.sparrow.orm.query.Criteria;
5 | import com.sparrow.orm.query.SearchCriteria;
6 | import com.sparrow.orm.template.impl.ORMStrategy;
7 | import com.sparrow.$module_prefix.admin.dao.$persistence_class_nameDAO;
8 | import $package_count_query.Count$persistence_class_nameQuery;
9 | import $package_pager_query.Pager$persistence_class_nameQuery;
10 | import $package_po.$persistence_class_name;
11 | import java.util.List;
12 | import javax.inject.Named;
13 |
14 | @Named
15 | public class $persistence_class_nameDaoImpl extends ORMStrategy<$persistence_class_name, Long> implements $persistence_class_nameDAO {
16 | @Override public List<$persistence_class_name> query$persistence_class_names(Pager$persistence_class_nameQuery pager$persistence_class_nameQuery) {
17 | SearchCriteria searchCriteria = new SearchCriteria(pager$persistence_class_nameQuery.getPager());
18 | searchCriteria.setWhere(this.generateCriteria(pager$persistence_class_nameQuery));
19 | return this.getList(searchCriteria);
20 | }
21 |
22 | private BooleanCriteria generateCriteria(Count$persistence_class_nameQuery count$persistence_class_nameQuery) {
23 | Long startTime=null;
24 | if(count$persistence_class_nameQuery.getBeginDate()!=null){
25 | startTime=count$persistence_class_nameQuery.getBeginDate().getTime();
26 | }
27 |
28 | Long endTime=null;
29 | if(count$persistence_class_nameQuery.getEndDate()!=null){
30 | endTime=count$persistence_class_nameQuery.getEndDate().getTime();
31 | }
32 |
33 | return BooleanCriteria.criteria(
34 | Criteria.field("$persistence_object_name.name").equal(count$persistence_class_nameQuery.getName()))
35 | .and(Criteria.field("$persistence_object_name.createTime").greaterThan(startTime))
36 | .and(Criteria.field("$persistence_object_name.createTime").lessThan(endTime));
37 | }
38 |
39 | @Override public Long count$persistence_class_name(Count$persistence_class_nameQuery $persistence_object_namePagerQuery) {
40 | SearchCriteria searchCriteria = new SearchCriteria();
41 | searchCriteria.setWhere(this.generateCriteria($persistence_object_namePagerQuery));
42 | return this.getCount(searchCriteria);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/dataConverter.txt:
--------------------------------------------------------------------------------
1 | package $package_data_converter;
2 |
3 | import com.tedu.inn.protocol.dao.StatusCriteria;
4 | import $package_bo.$persistence_class_nameBO;
5 | import $package_po.$persistence_class_name;
6 | import $package_param.$persistence_class_nameParam;
7 | import $package_query.$persistence_class_nameQuery;
8 | import $package_pager_query.$persistence_class_nameDBPagerQuery;
9 | import org.springframework.beans.BeanUtils;
10 | import com.tarena.passport.protocol.LoginUser;
11 | import com.tarena.passport.sdk.context.SecurityContext;
12 | import java.util.ArrayList;
13 | import java.util.List;
14 | import org.springframework.stereotype.Component;
15 |
16 | @Component
17 | public class $persistence_class_nameConverter{
18 |
19 | public $persistence_class_nameDBPagerQuery toDbPagerQuery($persistence_class_nameQuery $persistence_object_nameQuery) {
20 | if ($persistence_object_nameQuery == null) {
21 | return new $persistence_class_nameDBPagerQuery();
22 | }
23 | $persistence_class_nameDBPagerQuery $persistence_object_nameDBPagerQuery = new $persistence_class_nameDBPagerQuery();
24 | BeanUtils.copyProperties($persistence_object_nameQuery, $persistence_object_nameDBPagerQuery);
25 | return $persistence_object_nameDBPagerQuery;
26 | }
27 |
28 |
29 | public $persistence_class_name param2po($persistence_class_nameParam param) {
30 | $persistence_class_name $persistence_object_name = new $persistence_class_name();
31 | BeanUtils.copyProperties(param, $persistence_object_name);
32 |
33 | LoginUser loginUser=SecurityContext.getLoginToken();
34 |
35 | $persistence_object_name.setGmtCreate(System.currentTimeMillis());
36 | $persistence_object_name.setGmtModified($persistence_object_name.getGmtCreate());
37 | $persistence_object_name.setCreateUserId(loginUser.getUserId());
38 | $persistence_object_name.setModifiedUserId(loginUser.getUserId());
39 | $persistence_object_name.setStatus(1);
40 |
41 | $persistence_object_name.setCreateUserName(loginUser.getUserName());
42 | $persistence_object_name.setModifiedUserName(loginUser.getUserName());
43 | return $persistence_object_name;
44 | }
45 |
46 | public $persistence_class_nameBO po2bo($persistence_class_name $persistence_object_name) {
47 | $persistence_class_nameBO $persistence_object_nameBO = new $persistence_class_nameBO();
48 | BeanUtils.copyProperties($persistence_object_name, $persistence_object_nameBO);
49 | return $persistence_object_nameBO;
50 | }
51 |
52 | public List<$persistence_class_nameBO> poList2BoList(List<$persistence_class_name> list) {
53 | List<$persistence_class_nameBO> $persistence_object_nameBos = new ArrayList<>(list.size());
54 | for ($persistence_class_name $persistence_object_name : list) {
55 | $persistence_object_nameBos.add(this.po2bo($persistence_object_name));
56 | }
57 | return $persistence_object_nameBos;
58 | }
59 |
60 | public void convertStatus(StatusCriteria statusCriteria){
61 | LoginUser loginUser = SecurityContext.getLoginToken();
62 | statusCriteria.setModifiedUserId(loginUser.getUserId());
63 | statusCriteria.setModifiedUserName(loginUser.getUserName());
64 | statusCriteria.setGmtModified(System.currentTimeMillis());
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/mybatis.properties:
--------------------------------------------------------------------------------
1 | change_status=true
2 | parameter_type=com.tedu.inn.protocol.dao.StatusCriteria
3 | modified_condition=`modified_user_name`=#{modifiedUserName},\n`modified_user_id`=#{modifiedUserId},\n`gmt_modified`=#{gmtModified}
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/pagerQuery.txt:
--------------------------------------------------------------------------------
1 | package $package_pager_query;
2 |
3 | import java.util.Date;
4 | import com.tedu.inn.protocol.dao.DatabasePagerQuery;
5 |
6 | public class $persistence_class_nameDBPagerQuery extends DatabasePagerQuery {
7 | public $persistence_class_nameDBPagerQuery() {
8 | }
9 |
10 | private String name;
11 | private Date beginDate;
12 | private Date endDate;
13 |
14 | public Date getBeginDate() {
15 | return beginDate;
16 | }
17 |
18 | public void setBeginDate(Date beginDate) {
19 | this.beginDate = beginDate;
20 | }
21 |
22 | public Date getEndDate() {
23 | return endDate;
24 | }
25 |
26 | public void setEndDate(Date endDate) {
27 | this.endDate = endDate;
28 | }
29 |
30 | public String getName() {
31 | return name;
32 | }
33 |
34 | public void setName(String name) {
35 | this.name = name;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/param.txt:
--------------------------------------------------------------------------------
1 | package $package_param;
2 |
3 | public class $persistence_class_nameParam{
4 | $get_sets
5 | }
6 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/query.txt:
--------------------------------------------------------------------------------
1 | package $package_query;
2 |
3 | import com.tedu.inn.protocol.pager.SimplePagerQuery;
4 |
5 | import java.util.Date;
6 |
7 | public class $persistence_class_nameQuery extends SimplePagerQuery {
8 | private String name;
9 | private Date beginDate;
10 | private Date endDate;
11 |
12 | public String getName() {
13 | return name;
14 | }
15 |
16 | public void setName(String name) {
17 | this.name = name;
18 | }
19 |
20 | public Date getBeginDate() {
21 | return beginDate;
22 | }
23 |
24 | public void setBeginDate(Date beginDate) {
25 | this.beginDate = beginDate;
26 | }
27 |
28 | public Date getEndDate() {
29 | return endDate;
30 | }
31 |
32 | public void setEndDate(Date endDate) {
33 | this.endDate = endDate;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/repository.txt:
--------------------------------------------------------------------------------
1 | package $package_repository;
2 | import $package_bo.$persistence_class_nameBO;
3 | import $package_param.$persistence_class_nameParam;
4 | import $package_query.$persistence_class_nameQuery;
5 | import java.util.List;
6 |
7 | public interface $persistence_class_nameRepository {
8 | Long save($persistence_class_nameParam $persistence_object_nameParam);
9 |
10 | Integer delete(Long $persistence_object_nameId);
11 |
12 | $persistence_class_nameBO get$persistence_class_name(Long $persistence_object_nameId);
13 |
14 | Long get$persistence_class_nameCount($persistence_class_nameQuery $persistence_object_nameQuery);
15 |
16 | List<$persistence_class_nameBO> query$persistence_class_names($persistence_class_nameQuery $persistence_object_nameBOQuery);
17 |
18 | Integer disable(String bankIds);
19 |
20 | Integer enable(String bankIds);
21 | }
22 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/repositoryImpl.txt:
--------------------------------------------------------------------------------
1 | package $package_repository_impl;
2 |
3 | import $package_dao.$persistence_class_nameDAO;
4 | import com.tedu.inn.protocol.enums.StatusRecord;
5 | import com.tedu.inn.protocol.dao.StatusCriteria;
6 | import $package_data_converter.$persistence_class_nameConverter;
7 | import $package_po.$persistence_class_name;
8 | import $package_bo.$persistence_class_nameBO;
9 | import $package_param.$persistence_class_nameParam;
10 | import $package_repository.$persistence_class_nameRepository;
11 | import $package_query.$persistence_class_nameQuery;
12 | import java.util.List;
13 | import org.springframework.beans.factory.annotation.Autowired;
14 | import org.springframework.stereotype.Component;
15 |
16 | @Component
17 | public class $persistence_class_nameRepositoryImpl implements $persistence_class_nameRepository {
18 | @Autowired
19 | private $persistence_class_nameConverter $persistence_object_nameConverter;
20 |
21 | @Autowired
22 | private $persistence_class_nameDAO $persistence_object_nameDao;
23 |
24 | @Override public Long save($persistence_class_nameParam $persistence_object_nameParam) {
25 | $persistence_class_name $persistence_object_name = this.$persistence_object_nameConverter.param2po($persistence_object_nameParam);
26 | if ($persistence_object_name.get$upper_primary_property_name() != null) {
27 | this.$persistence_object_nameDao.update($persistence_object_name);
28 | return $persistence_object_name.get$upper_primary_property_name();
29 | }
30 | this.$persistence_object_nameDao.insert($persistence_object_name);
31 | return $persistence_object_name.get$upper_primary_property_name();
32 | }
33 |
34 | @Override public Integer delete(Long $persistence_object_nameId) {
35 | return this.$persistence_object_nameDao.delete($persistence_object_nameId);
36 | }
37 |
38 | @Override public Integer disable(String $persistence_object_nameIds) {
39 | StatusCriteria statusCriteria = new StatusCriteria($persistence_object_nameIds, StatusRecord.DISABLE.getStatus());
40 | this.$persistence_object_nameConverter.convertStatus(statusCriteria);
41 | return this.$persistence_object_nameDao.changeStatus(statusCriteria);
42 | }
43 |
44 | @Override public Integer enable(String $persistence_object_nameIds) {
45 | StatusCriteria statusCriteria = new StatusCriteria($persistence_object_nameIds, StatusRecord.ENABLE.getStatus());
46 | this.$persistence_object_nameConverter.convertStatus(statusCriteria);
47 | return this.$persistence_object_nameDao.changeStatus(statusCriteria);
48 | }
49 |
50 | @Override public $persistence_class_nameBO get$persistence_class_name(Long $persistence_object_nameId) {
51 | $persistence_class_name $persistence_object_name = this.$persistence_object_nameDao.getEntity($persistence_object_nameId);
52 | return this.$persistence_object_nameConverter.po2bo($persistence_object_name);
53 | }
54 |
55 | @Override public List<$persistence_class_nameBO> query$persistence_class_names(
56 | $persistence_class_nameQuery $persistence_object_nameQuery) {
57 | List<$persistence_class_name> $persistence_object_nameList = this.$persistence_object_nameDao.query$persistence_class_names(this.$persistence_object_nameConverter.toDbPagerQuery($persistence_object_nameQuery));
58 | return this.$persistence_object_nameConverter.poList2BoList($persistence_object_nameList);
59 | }
60 |
61 | @Override public Long get$persistence_class_nameCount($persistence_class_nameQuery $persistence_object_nameQuery) {
62 | return this.$persistence_object_nameDao.count$persistence_class_name(this.$persistence_object_nameConverter.toDbPagerQuery($persistence_object_nameQuery));
63 | }
64 | }
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/service.txt:
--------------------------------------------------------------------------------
1 | package $package_service;
2 |
3 | import com.tedu.inn.protocol.ListRecordTotalBO;
4 | import com.tedu.inn.protocol.exception.BusinessException;
5 | import $package_bo.$persistence_class_nameBO;
6 | import $package_repository.$persistence_class_nameRepository;
7 | import $package_param.$persistence_class_nameParam;
8 | import $package_query.$persistence_class_nameQuery;
9 | import java.util.List;
10 | import org.springframework.stereotype.Service;
11 | import org.springframework.beans.factory.annotation.Autowired;
12 |
13 | @Service
14 | public class $persistence_class_nameService {
15 | @Autowired
16 | private $persistence_class_nameRepository $persistence_object_nameRepository;
17 |
18 | private void validateSave$persistence_class_name(
19 | $persistence_class_nameParam $persistence_object_nameParam) throws BusinessException {
20 | //Asserts.isTrue(StringUtility.isNullOrEmpty($persistence_object_nameParam.getName()), SecurityAdminError.NAME_IS_EMPTY, $persistence_class_nameSuffix.name);
21 | }
22 |
23 | public Long save$persistence_class_name(
24 | $persistence_class_nameParam $persistence_object_nameParam) throws BusinessException {
25 | this.validateSave$persistence_class_name($persistence_object_nameParam);
26 | return this.$persistence_object_nameRepository.save($persistence_object_nameParam);
27 | }
28 |
29 | public Integer delete$persistence_class_name(Long $persistence_object_nameId) throws BusinessException {
30 | //Asserts.isTrue(StringUtility.isNullOrEmpty($persistence_object_nameId), SecurityAdminError.$persistence_class_name_ID_IS_EMPTY);
31 | return this.$persistence_object_nameRepository.delete($persistence_object_nameId);
32 | }
33 |
34 | public Integer enable$persistence_class_name(String $persistence_object_nameIds) throws BusinessException {
35 | //Asserts.isTrue(StringUtils.isEmpty(bankIds), $persistence_class_nameAdminError.ID_IS_EMPTY);
36 | return this.$persistence_object_nameRepository.enable($persistence_object_nameIds);
37 | }
38 |
39 | public Integer disable$persistence_class_name(String $persistence_object_nameIds) throws BusinessException {
40 | //Asserts.isTrue(StringUtils.isEmpty($persistence_object_nameIds), $persistence_class_nameAdminError.ID_IS_EMPTY);
41 | return this.$persistence_object_nameRepository.disable($persistence_object_nameIds);
42 | }
43 |
44 | public ListRecordTotalBO<$persistence_class_nameBO> queryAll$persistence_class_name() {
45 | return query$persistence_class_name(null);
46 | }
47 |
48 | public ListRecordTotalBO<$persistence_class_nameBO> query$persistence_class_name(
49 | $persistence_class_nameQuery $persistence_object_nameQuery) {
50 | Long totalRecord = this.$persistence_object_nameRepository.get$persistence_class_nameCount($persistence_object_nameQuery);
51 | List<$persistence_class_nameBO> $persistence_object_nameBoList = null;
52 | if (totalRecord > 0) {
53 | $persistence_object_nameBoList = this.$persistence_object_nameRepository.query$persistence_class_names($persistence_object_nameQuery);
54 | }
55 | return new ListRecordTotalBO<>($persistence_object_nameBoList, totalRecord);
56 | }
57 |
58 | public $persistence_class_nameBO get$persistence_class_name(
59 | Long $persistence_object_nameId) throws BusinessException {
60 | //Asserts.isTrue($persistence_object_nameId == null, $persistence_class_nameAdminError.IS_EMPTY);
61 | return this.$persistence_object_nameRepository.get$persistence_class_name($persistence_object_nameId);
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/sparrow_copier.properties:
--------------------------------------------------------------------------------
1 | workspace=${user.home}/workspace/sparrow/sparrow-zoo/
2 | target=/sparrow-example-admin/src/main/java
3 | resource_target=/sparrow-example-admin/src/main/resources
4 | sources=\
5 | sparrow-example/admin
6 |
--------------------------------------------------------------------------------
/coder/src/main/resources/tedu/vo.txt:
--------------------------------------------------------------------------------
1 | package $package_vo;
2 |
3 | public class $persistence_class_nameVO {
4 | $get_sets
5 | }
6 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/assemble.txt:
--------------------------------------------------------------------------------
1 | package $package_assemble;
2 |
3 | import com.sparrow.protocol.constant.Constant;
4 | import com.sparrow.protocol.ListRecordTotalBO;
5 | import com.sparrow.protocol.pager.PagerResult;
6 | import com.sparrow.protocol.pager.SimplePager;
7 | import $package_vo.$persistence_class_nameVO;
8 | import $package_bo.$persistence_class_nameBO;
9 | import $package_param.$persistence_class_nameParam;
10 | import com.sparrow.support.assemble.BO2VOAssemble;
11 | import com.sparrow.support.assemble.Param2VOAssemble;
12 | import com.sparrow.support.pager.HtmlPagerResult;
13 | import com.sparrow.utility.BeanUtility;
14 | import com.sparrow.utility.CollectionsUtility;
15 | import com.sparrow.utility.EnumUtility;
16 | import com.sparrow.utility.StringUtility;
17 | import java.util.ArrayList;
18 | import java.util.Collections;
19 | import java.util.List;
20 | import javax.inject.Named;
21 |
22 | @Named
23 | public class $persistence_class_nameAssemble implements BO2VOAssemble<$persistence_class_nameVO, $persistence_class_nameBO>,
24 | Param2VOAssemble<$persistence_class_nameVO,$persistence_class_nameParam> {
25 |
26 | public $persistence_class_nameVO paramAssembleVO($persistence_class_nameParam param){
27 | $persistence_class_nameVO $persistence_object_name = new $persistence_class_nameVO();
28 | BeanUtility.copyProperties(param, $persistence_object_name);
29 | return $persistence_object_name;
30 | }
31 |
32 | @Override public $persistence_class_nameVO boAssembleVO($persistence_class_nameBO bo) {
33 | $persistence_class_nameVO $persistence_object_name = new $persistence_class_nameVO();
34 | BeanUtility.copyProperties(bo, $persistence_object_name);
35 | $persistence_object_name.setStatus(bo.getStatus().name());
36 | return $persistence_object_name;
37 | }
38 |
39 | @Override public List<$persistence_class_nameVO> boListAssembleVOList(List<$persistence_class_nameBO> list) {
40 | if (CollectionsUtility.isNullOrEmpty(list)) {
41 | return Collections.emptyList();
42 | }
43 | List<$persistence_class_nameVO> $persistence_object_nameVOList = new ArrayList<>(list.size());
44 | for ($persistence_class_nameBO $persistence_object_nameBo : list) {
45 | $persistence_class_nameVO $persistence_object_nameVo = new $persistence_class_nameVO();
46 | BeanUtility.copyProperties($persistence_object_nameBo, $persistence_object_nameVo);
47 | String statusName = EnumUtility.getValue($persistence_object_nameBo.getStatus());
48 | $persistence_object_nameVo.setStatus(statusName);
49 | $persistence_object_nameVOList.add($persistence_object_nameVo);
50 | }
51 | return $persistence_object_nameVOList;
52 | }
53 |
54 | public HtmlPagerResult<$persistence_class_nameVO> assembleHtmlPager(ListRecordTotalBO<$persistence_class_nameBO> $persistence_object_nameListTotalRecord,
55 | SimplePager $persistence_object_nameQuery) {
56 | List<$persistence_class_nameVO> $persistence_object_nameVOList = this.boListAssembleVOList($persistence_object_nameListTotalRecord.getList());
57 | PagerResult<$persistence_class_nameVO> pagerResult = new PagerResult<>($persistence_object_nameQuery);
58 | pagerResult.setList($persistence_object_nameVOList);
59 | pagerResult.setRecordTotal($persistence_object_nameListTotalRecord.getTotal());
60 | return new HtmlPagerResult<>(pagerResult);
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/batchOperateParam.txt:
--------------------------------------------------------------------------------
1 | package $package_batch_param;
2 |
3 | import $package_query.$persistence_class_nameQuery;
4 |
5 | public class $persistence_class_nameBatchOperateParam extends $persistence_class_nameQuery {
6 | private String ids;
7 |
8 | public String getIds() {
9 | return ids;
10 | }
11 |
12 | public void setIds(String ids) {
13 | this.ids = ids;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/bo.txt:
--------------------------------------------------------------------------------
1 | package $package_bo;
2 |
3 | import com.sparrow.protocol.BO;
4 | import com.sparrow.protocol.enums.StatusRecord;
5 | import lombok.Data;
6 | @Data
7 | public class $persistence_class_nameBO implements BO {
8 | $get_sets
9 | }
10 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/controller.txt:
--------------------------------------------------------------------------------
1 | package $package_controller;
2 |
3 | import com.sparrow.protocol.BusinessException;
4 | import com.sparrow.protocol.ListRecordTotalBO;
5 | import com.sparrow.protocol.TreeItem;
6 | import com.sparrow.protocol.pager.SimplePager;
7 | import $package_assemble.$persistence_class_nameAssemble;
8 | import $package_bo.$persistence_class_nameBO;
9 | import $package_param.$persistence_class_nameParam;
10 | import $package_batch_param.$persistence_class_nameBatchOperateParam;
11 | import $package_query.$persistence_class_nameQuery;
12 | import $package_vo.$persistence_class_nameVO;
13 | import $package_service.$persistence_class_nameService;
14 | import com.sparrow.servlet.ServletContainer;
15 | import com.sparrow.spring.starter.ModelAndViewUtils;
16 | import com.sparrow.support.pager.HtmlPagerResult;
17 | import java.util.List;
18 | import javax.inject.Inject;
19 | import org.springframework.web.bind.annotation.GetMapping;
20 | import org.springframework.web.bind.annotation.PostMapping;
21 | import org.springframework.web.bind.annotation.RequestMapping;
22 | import org.springframework.web.bind.annotation.RestController;
23 | import org.springframework.web.servlet.ModelAndView;
24 |
25 | @RestController
26 | @RequestMapping("$persistence_object_by_slash")
27 | public class $persistence_class_nameController {
28 |
29 | @Inject
30 | private $persistence_class_nameService $persistence_object_nameService;
31 |
32 | @Inject
33 | private $persistence_class_nameAssemble $persistence_object_nameAssemble;
34 |
35 | @GetMapping("manage")
36 | public ModelAndView loadAll$persistence_class_names() {
37 | $persistence_class_nameBatchOperateParam batchOperationQuery = ModelAndViewUtils.query();
38 | if (batchOperationQuery != null) {
39 | return this.query$persistence_class_names(batchOperationQuery);
40 | }
41 | SimplePager simplePager = new SimplePager();
42 | ListRecordTotalBO<$persistence_class_nameBO> $persistence_object_nameListTotalRecord = this.$persistence_object_nameService.queryAll$persistence_class_name();
43 | HtmlPagerResult<$persistence_class_nameVO> pager = this.$persistence_object_nameAssemble.assembleHtmlPager($persistence_object_nameListTotalRecord, simplePager);
44 | ModelAndView mv = new ModelAndView("/$persistence_object_by_slash/manage");
45 | mv.addObject("pager", pager);
46 | return mv;
47 | }
48 |
49 | private ModelAndView query$persistence_class_names($persistence_class_nameQuery $persistence_object_nameQuery) {
50 | ListRecordTotalBO<$persistence_class_nameBO> $persistence_object_nameListTotalRecord = this.$persistence_object_nameService.query$persistence_class_name($persistence_object_nameQuery);
51 | HtmlPagerResult<$persistence_class_nameVO> pager = this.$persistence_object_nameAssemble.assembleHtmlPager($persistence_object_nameListTotalRecord, $persistence_object_nameQuery);
52 | ModelAndView mv = new ModelAndView("/$persistence_object_by_slash/manage");
53 | mv.addObject("pager", pager);
54 | return mv;
55 | }
56 |
57 | @PostMapping("search.do")
58 | public ModelAndView search($persistence_class_nameQuery $persistence_object_nameQuery) {
59 | return this.query$persistence_class_names($persistence_object_nameQuery);
60 | }
61 |
62 | @PostMapping("save")
63 | public ModelAndView save$persistence_class_name($persistence_class_nameParam $persistence_object_nameParam) throws BusinessException {
64 | this.$persistence_object_nameService.save$persistence_class_name($persistence_object_nameParam);
65 | return ModelAndViewUtils.redirect("/$persistence_object_by_slash/manage");
66 | }
67 |
68 | @GetMapping("edit")
69 | public ModelAndView get$persistence_class_name(Long $persistence_object_nameId) throws BusinessException {
70 | ModelAndView mv = new ModelAndView("/$persistence_object_by_slash/new");
71 | if ($persistence_object_nameId == null) {
72 | return mv;
73 | }
74 |
75 | $persistence_class_nameBO $persistence_object_nameBo = $persistence_object_nameService.get$persistence_class_name($persistence_object_nameId);
76 | $persistence_class_nameVO $persistence_object_nameVo = this.$persistence_object_nameAssemble.boAssembleVO($persistence_object_nameBo);
77 | mv.addObject("$persistence_object_name", $persistence_object_nameVo);
78 | return mv;
79 | }
80 |
81 | @PostMapping("delete")
82 | public ModelAndView delete$persistence_class_name($persistence_class_nameBatchOperateParam batchOperationQuery) throws BusinessException {
83 | this.$persistence_object_nameService.delete$persistence_class_name(batchOperationQuery.getIds());
84 | return ModelAndViewUtils.redirect("/$persistence_object_by_slash/manage");
85 | }
86 |
87 | @PostMapping("enable")
88 | public ModelAndView enable$persistence_class_name($persistence_class_nameBatchOperateParam batchOperationQuery) throws BusinessException {
89 | this.$persistence_object_nameService.enable$persistence_class_name(batchOperationQuery.getIds());
90 | return ModelAndViewUtils.redirect("/$persistence_object_by_slash/manage");
91 | }
92 |
93 | @PostMapping("disable")
94 | public ModelAndView disable$persistence_class_name($persistence_class_nameBatchOperateParam batchOperationQuery) throws BusinessException {
95 | this.$persistence_object_nameService.disable$persistence_class_name(batchOperationQuery.getIds());
96 | return ModelAndViewUtils.redirect("/$persistence_object_by_slash/manage");
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/dao.txt:
--------------------------------------------------------------------------------
1 | package $package_dao;
2 |
3 | import com.sparrow.protocol.dao.DaoSupport;
4 | import $package_po.$persistence_class_name;
5 | import $package_pager_query.$persistence_class_nameDBPagerQuery;
6 | import java.util.List;
7 |
8 | public interface $persistence_class_nameDAO extends DaoSupport<$persistence_class_name, Long> {
9 | List<$persistence_class_name> query$persistence_class_names($persistence_class_nameDBPagerQuery $persistence_object_namePagerQuery);
10 |
11 | Long count$persistence_class_name($persistence_class_nameDBPagerQuery $persistence_object_namePagerQuery);
12 | }
13 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/daoImpl.txt:
--------------------------------------------------------------------------------
1 | package $package_dao_impl;
2 |
3 | import com.sparrow.orm.query.BooleanCriteria;
4 | import com.sparrow.orm.query.Criteria;
5 | import com.sparrow.orm.query.SearchCriteria;
6 | import com.sparrow.orm.template.impl.ORMStrategy;
7 | import $package_dao.$persistence_class_nameDAO;
8 | import $package_pager_query.$persistence_class_nameDBPagerQuery;
9 | import $package_po.$persistence_class_name;
10 | import java.util.List;
11 | import javax.inject.Named;
12 |
13 | @Named
14 | public class $persistence_class_nameDaoImpl extends ORMStrategy<$persistence_class_name, Long> implements $persistence_class_nameDAO {
15 | @Override public List<$persistence_class_name> query$persistence_class_names($persistence_class_nameDBPagerQuery pager$persistence_class_nameQuery) {
16 | SearchCriteria searchCriteria = new SearchCriteria(pager$persistence_class_nameQuery);
17 | searchCriteria.setWhere(this.generateCriteria(pager$persistence_class_nameQuery));
18 | return this.getList(searchCriteria);
19 | }
20 |
21 | private BooleanCriteria generateCriteria($persistence_class_nameDBPagerQuery count$persistence_class_nameQuery) {
22 | Long startTime=null;
23 | if(count$persistence_class_nameQuery.getBeginDate()!=null){
24 | startTime=count$persistence_class_nameQuery.getBeginDate().getTime();
25 | }
26 |
27 | Long endTime=null;
28 | if(count$persistence_class_nameQuery.getEndDate()!=null){
29 | endTime=count$persistence_class_nameQuery.getEndDate().getTime();
30 | }
31 |
32 | return BooleanCriteria.criteria(
33 | Criteria.field("$persistence_object_name.name").equal(count$persistence_class_nameQuery.getName()))
34 | .and(Criteria.field("$persistence_object_name.createTime").greaterThan(startTime))
35 | .and(Criteria.field("$persistence_object_name.createTime").lessThan(endTime));
36 | }
37 |
38 | @Override public Long count$persistence_class_name($persistence_class_nameDBPagerQuery $persistence_object_namePagerQuery) {
39 | SearchCriteria searchCriteria = new SearchCriteria();
40 | searchCriteria.setWhere(this.generateCriteria($persistence_object_namePagerQuery));
41 | return this.getCount(searchCriteria);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/dataConverter.txt:
--------------------------------------------------------------------------------
1 | package $package_data_converter;
2 |
3 | import com.sparrow.protocol.dao.StatusCriteria;
4 | import com.sparrow.protocol.enums.StatusRecord;
5 | import $package_bo.$persistence_class_nameBO;
6 | import $package_po.$persistence_class_name;
7 | import $package_param.$persistence_class_nameParam;
8 | import $package_query.$persistence_class_nameQuery;
9 | import com.sparrow.support.converter.PO2BOConverter;
10 | import com.sparrow.support.converter.Param2POConverter;
11 | import $package_pager_query.$persistence_class_nameDBPagerQuery;
12 | import com.sparrow.utility.BeanUtility;
13 | import java.util.ArrayList;
14 | import java.util.List;
15 | import javax.inject.Named;
16 |
17 | @Named
18 | public class $persistence_class_nameConverter implements Param2POConverter<$persistence_class_nameParam, $persistence_class_name>, PO2BOConverter<$persistence_class_nameBO, $persistence_class_name> {
19 |
20 | public $persistence_class_nameDBPagerQuery toDbPagerQuery($persistence_class_nameQuery $persistence_object_nameQuery) {
21 | if ($persistence_object_nameQuery == null) {
22 | return new $persistence_class_nameDBPagerQuery();
23 | }
24 | $persistence_class_nameDBPagerQuery $persistence_class_nameDBPagerQuery = new $persistence_class_nameDBPagerQuery();
25 | BeanUtility.copyProperties($persistence_object_nameQuery, $persistence_class_nameDBPagerQuery);
26 | return $persistence_class_nameDBPagerQuery;
27 | }
28 |
29 | @Override public $persistence_class_name param2po($persistence_class_nameParam param) {
30 | $persistence_class_name $persistence_object_name = new $persistence_class_name();
31 | BeanUtility.copyProperties(param, $persistence_object_name);
32 |
33 | $persistence_object_name.setGmtCreate(System.currentTimeMillis());
34 | $persistence_object_name.setGmtModified($persistence_object_name.getGmtCreate());
35 | $persistence_object_name.setCreateUserId(0L);
36 | $persistence_object_name.setModifiedUserId(0L);
37 | $persistence_object_name.setStatus(StatusRecord.ENABLE);
38 |
39 | $persistence_object_name.setCreateUserName("");
40 | $persistence_object_name.setModifiedUserName("");
41 | return $persistence_object_name;
42 | }
43 |
44 | @Override public $persistence_class_nameBO po2bo($persistence_class_name $persistence_object_name) {
45 | $persistence_class_nameBO $persistence_object_nameBO = new $persistence_class_nameBO();
46 | BeanUtility.copyProperties($persistence_object_name, $persistence_object_nameBO);
47 | return $persistence_object_nameBO;
48 | }
49 |
50 | @Override public List<$persistence_class_nameBO> poList2BoList(List<$persistence_class_name> list) {
51 | List<$persistence_class_nameBO> $persistence_object_nameBos = new ArrayList<>(list.size());
52 | for ($persistence_class_name $persistence_object_name : list) {
53 | $persistence_object_nameBos.add(this.po2bo($persistence_object_name));
54 | }
55 | return $persistence_object_nameBos;
56 | }
57 |
58 | public void convertStatus(StatusCriteria statusCriteria){
59 | statusCriteria.setModifiedUserName("harry");
60 | statusCriteria.setGmtModified(System.currentTimeMillis());
61 | statusCriteria.setModifiedUserId(1L);
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/mybatis.properties:
--------------------------------------------------------------------------------
1 | change_status=false
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/pagerQuery.txt:
--------------------------------------------------------------------------------
1 | package $package_pager_query;
2 |
3 | import com.sparrow.protocol.enums.StatusRecord;
4 | import com.sparrow.protocol.dao.DatabasePagerQuery;
5 | import java.util.Date;
6 | import lombok.Data;
7 | @Data
8 |
9 | public class $persistence_class_nameDBPagerQuery extends DatabasePagerQuery {
10 | public $persistence_class_nameDBPagerQuery() {}
11 | }
12 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/param.txt:
--------------------------------------------------------------------------------
1 | package $package_param;
2 |
3 | import com.sparrow.protocol.Param;
4 | import com.sparrow.protocol.enums.StatusRecord;
5 | import lombok.Data;
6 |
7 | @Data
8 | public class $persistence_class_nameParam implements Param {
9 | $get_sets
10 | }
11 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/query.txt:
--------------------------------------------------------------------------------
1 | package $package_query;
2 |
3 | import com.sparrow.protocol.pager.SimplePager;
4 | import java.util.Date;
5 | import lombok.Data;
6 | @Data
7 | public class $persistence_class_nameQuery extends SimplePager {
8 | private String name;
9 | private Date beginDate;
10 | private Date endDate;
11 |
12 | public String getName() {
13 | return name;
14 | }
15 |
16 | public void setName(String name) {
17 | this.name = name;
18 | }
19 |
20 | public Date getBeginDate() {
21 | return beginDate;
22 | }
23 |
24 | public void setBeginDate(Date beginDate) {
25 | this.beginDate = beginDate;
26 | }
27 |
28 | public Date getEndDate() {
29 | return endDate;
30 | }
31 |
32 | public void setEndDate(Date endDate) {
33 | this.endDate = endDate;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/repository.txt:
--------------------------------------------------------------------------------
1 | package $package_repository;
2 | import $package_bo.$persistence_class_nameBO;
3 | import $package_param.$persistence_class_nameParam;
4 | import $package_query.$persistence_class_nameQuery;
5 | import java.util.List;
6 |
7 |
8 |
9 | public interface $persistence_class_nameRepository {
10 | Long save($persistence_class_nameParam $persistence_object_nameParam);
11 |
12 | Integer delete(String $persistence_object_nameIds);
13 |
14 | Integer disable(String $persistence_object_nameIds);
15 |
16 | Integer enable(String $persistence_object_nameIds);
17 |
18 | $persistence_class_nameBO get$persistence_class_name(Long $persistence_object_nameId);
19 |
20 | List<$persistence_class_nameBO> query$persistence_class_names($persistence_class_nameQuery $persistence_object_nameQuery);
21 |
22 | Long get$persistence_class_nameCount($persistence_class_nameQuery $persistence_object_nameQuery);
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/repositoryImpl.txt:
--------------------------------------------------------------------------------
1 | package $package_repository_impl;
2 |
3 | import com.sparrow.protocol.dao.StatusCriteria;
4 | import com.sparrow.protocol.enums.StatusRecord;
5 | import $package_dao.$persistence_class_nameDAO;
6 | import $package_data_converter.$persistence_class_nameConverter;
7 | import $package_po.$persistence_class_name;
8 | import $package_bo.$persistence_class_nameBO;
9 | import $package_param.$persistence_class_nameParam;
10 | import $package_repository.$persistence_class_nameRepository;
11 | import $package_query.$persistence_class_nameQuery;
12 |
13 | import java.util.List;
14 | import javax.inject.Inject;
15 | import javax.inject.Named;
16 |
17 | @Named
18 | public class $persistence_class_nameRepositoryImpl implements $persistence_class_nameRepository {
19 | @Inject
20 | private $persistence_class_nameConverter $persistence_object_nameConverter;
21 |
22 | @Inject
23 | private $persistence_class_nameDAO $persistence_object_nameDao;
24 |
25 | @Override public Long save($persistence_class_nameParam $persistence_object_nameParam) {
26 | $persistence_class_name $persistence_object_name = this.$persistence_object_nameConverter.param2po($persistence_object_nameParam);
27 | if ($persistence_object_name.get$upper_primary_property_name() != null) {
28 | this.$persistence_object_nameDao.update($persistence_object_name);
29 | return $persistence_object_name.get$upper_primary_property_name();
30 | }
31 | this.$persistence_object_nameDao.insert($persistence_object_name);
32 | return $persistence_object_name.get$upper_primary_property_name();
33 | }
34 |
35 | @Override public Integer delete(String $persistence_object_nameIds) {
36 | return this.$persistence_object_nameDao.batchDelete($persistence_object_nameIds);
37 | }
38 |
39 | @Override public Integer disable(String $persistence_object_nameIds) {
40 | StatusCriteria statusCriteria = new StatusCriteria($persistence_object_nameIds, StatusRecord.DISABLE);
41 | this.$persistence_object_nameConverter.convertStatus(statusCriteria);
42 | return this.$persistence_object_nameDao.changeStatus(statusCriteria);
43 | }
44 |
45 | @Override public Integer enable(String $persistence_object_nameIds) {
46 | StatusCriteria statusCriteria = new StatusCriteria($persistence_object_nameIds, StatusRecord.ENABLE);
47 | this.$persistence_object_nameConverter.convertStatus(statusCriteria);
48 |
49 | return this.$persistence_object_nameDao.changeStatus(statusCriteria);
50 | }
51 |
52 | @Override public $persistence_class_nameBO get$persistence_class_name(Long $persistence_object_nameId) {
53 | $persistence_class_name $persistence_object_name = this.$persistence_object_nameDao.getEntity($persistence_object_nameId);
54 | return this.$persistence_object_nameConverter.po2bo($persistence_object_name);
55 | }
56 |
57 | @Override public List<$persistence_class_nameBO> query$persistence_class_names($persistence_class_nameQuery $persistence_object_nameQuery) {
58 | List<$persistence_class_name> $persistence_object_nameList = this.$persistence_object_nameDao.query$persistence_class_names(this.$persistence_object_nameConverter.toDbPagerQuery($persistence_object_nameQuery));
59 | return this.$persistence_object_nameConverter.poList2BoList($persistence_object_nameList);
60 | }
61 |
62 | @Override public Long get$persistence_class_nameCount($persistence_class_nameQuery $persistence_object_nameQuery) {
63 | return this.$persistence_object_nameDao.count$persistence_class_name(this.$persistence_object_nameConverter.toDbPagerQuery($persistence_object_nameQuery));
64 | }
65 | }
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/service.txt:
--------------------------------------------------------------------------------
1 | package $package_service;
2 |
3 | import com.sparrow.exception.Asserts;
4 | import com.sparrow.protocol.BusinessException;
5 | import com.sparrow.protocol.ListRecordTotalBO;
6 | import $package_bo.$persistence_class_nameBO;
7 | import $package_repository.$persistence_class_nameRepository;
8 | import $package_param.$persistence_class_nameParam;
9 | import $package_query.$persistence_class_nameQuery;
10 | import com.sparrow.utility.StringUtility;
11 | import java.util.List;
12 | import javax.inject.Inject;
13 | import javax.inject.Named;
14 |
15 | @Named
16 | public class $persistence_class_nameService {
17 | @Inject
18 | private $persistence_class_nameRepository $persistence_object_nameRepository;
19 |
20 | private void validateSave$persistence_class_name($persistence_class_nameParam $persistence_object_nameParam) throws BusinessException {
21 | //Asserts.isTrue(StringUtility.isNullOrEmpty($persistence_object_nameParam.getName()), SecurityAdminError.NAME_IS_EMPTY, $persistence_class_nameSuffix.name);
22 | }
23 |
24 | public Long save$persistence_class_name($persistence_class_nameParam $persistence_object_nameParam) throws BusinessException {
25 | this.validateSave$persistence_class_name($persistence_object_nameParam);
26 | return this.$persistence_object_nameRepository.save($persistence_object_nameParam);
27 | }
28 |
29 | public Integer delete$persistence_class_name(String $persistence_object_nameIds) throws BusinessException {
30 | //Asserts.isTrue(StringUtility.isNullOrEmpty($persistence_object_nameIds), SecurityAdminError.$persistence_class_name_ID_IS_EMPTY);
31 | return this.$persistence_object_nameRepository.delete($persistence_object_nameIds);
32 | }
33 |
34 | public Integer enable$persistence_class_name(String $persistence_object_nameIds) throws BusinessException {
35 | //Asserts.isTrue(StringUtility.isNullOrEmpty($persistence_object_nameIds), SecurityAdminError.$persistence_class_name_ID_IS_EMPTY);
36 | return this.$persistence_object_nameRepository.enable($persistence_object_nameIds);
37 | }
38 |
39 | public Integer disable$persistence_class_name(String $persistence_object_nameIds) throws BusinessException {
40 | //Asserts.isTrue(StringUtility.isNullOrEmpty($persistence_object_nameIds), SecurityAdminError.$persistence_class_name_ID_IS_EMPTY);
41 | return this.$persistence_object_nameRepository.disable($persistence_object_nameIds);
42 | }
43 |
44 | public ListRecordTotalBO<$persistence_class_nameBO> queryAll$persistence_class_name() {
45 | return query$persistence_class_name(null);
46 | }
47 |
48 | public ListRecordTotalBO<$persistence_class_nameBO> query$persistence_class_name($persistence_class_nameQuery $persistence_object_nameQuery) {
49 | Long totalRecord = this.$persistence_object_nameRepository.get$persistence_class_nameCount($persistence_object_nameQuery);
50 | List<$persistence_class_nameBO> $persistence_object_nameBoList = null;
51 | if (totalRecord > 0) {
52 | $persistence_object_nameBoList = this.$persistence_object_nameRepository.query$persistence_class_names($persistence_object_nameQuery);
53 | }
54 | return new ListRecordTotalBO<>($persistence_object_nameBoList, totalRecord);
55 | }
56 |
57 | public $persistence_class_nameBO get$persistence_class_name(Long $persistence_object_nameId) throws BusinessException {
58 | //Asserts.isTrue($persistence_object_nameId == null, SecurityAdminError.$persistence_object_name_IS_EMPTY);
59 | return this.$persistence_object_nameRepository.get$persistence_class_name($persistence_object_nameId);
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/sql/attentionUser.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `attention_user_%1$s` (
2 | `relation_id` int(10) NOT NULL AUTO_INCREMENT,
3 | `user_id` int(10) NOT NULL DEFAULT '0',
4 | `attention_id` int(10) NOT NULL DEFAULT '0',
5 | `create_time` timestamp NULL,
6 | `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
7 | `status` tinyint(3) unsigned NOT NULL DEFAULT '0',
8 | PRIMARY KEY (`relation_id`)
9 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
10 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/sql/event.sql:
--------------------------------------------------------------------------------
1 | DROP TABLE IF EXISTS `event_%s`;
2 | CREATE TABLE `event_%s` (
3 | `event_id` int(10) UNSIGNED AUTO_INCREMENT COMMENT 'primary key' NOT NULL ,
4 | `user_type` varchar(16) DEFAULT '' COMMENT 'user type' NOT NULL,
5 | `user_id` int(10) UNSIGNED COMMENT 'user id' NOT NULL,
6 | `business_type` varchar(64) DEFAULT '' COMMENT 'ip' NOT NULL,
7 | `business_id` int(10) UNSIGNED COMMENT 'business id' NOT NULL,
8 | `times` int(10) DEFAULT 0 COMMENT 'times' NOT NULL,
9 | `channel` varchar(256) DEFAULT '' COMMENT 'channel' NOT NULL,
10 | `ip` char(16) DEFAULT '' COMMENT 'ip' NOT NULL,
11 | `device` varchar(32) DEFAULT '' COMMENT 'device' NOT NULL,
12 | `device_id` varchar(64) DEFAULT '' COMMENT 'device unique id' NOT NULL,
13 | `device_model` varchar(16) DEFAULT '' COMMENT 'device model 5s e.g ...' NOT NULL,
14 | `event` varchar(64) DEFAULT '' COMMENT 'event type' NOT NULL,
15 | `content` varchar(512) DEFAULT '' COMMENT 'content' NOT NULL,
16 | `status` varchar(64) DEFAULT '' COMMENT 'status' NOT NULL,
17 | `website` varchar(256) DEFAULT '' COMMENT 'website home url' NOT NULL,
18 | `app_id` int(11) UNSIGNED DEFAULT 0 COMMENT 'app id' NOT NULL,
19 | `app_version` float(11,2) DEFAULT 0.0 COMMENT 'app version' NOT NULL,
20 | `platform` varchar(16) DEFAULT '' COMMENT 'platform' NOT NULL,
21 | `os` varchar(16) DEFAULT '' COMMENT 'operation system' NOT NULL,
22 | `user_agent` varchar(512) DEFAULT '' COMMENT 'use agent' NOT NULL,
23 | `client_version` varchar(64) DEFAULT '' COMMENT 'client os version' NOT NULL,
24 | `longitude` double DEFAULT 0.0 COMMENT 'longitude' NOT NULL,
25 | `latitude` double DEFAULT 0.0 COMMENT 'latitude' NOT NULL,
26 | `network` varchar(16) DEFAULT '' COMMENT 'network' NOT NULL,
27 | `simulate` tinyint(1) DEFAULT 0 COMMENT 'is simulate' NOT NULL,
28 | `imei` varchar(64) DEFAULT '' COMMENT 'imei' NOT NULL,
29 | `bssid` varchar(64) DEFAULT '' COMMENT 'bssi' NOT NULL,
30 | `ssid` char(64) DEFAULT '' COMMENT 'ssid' NOT NULL,
31 | `idfa` char(64) DEFAULT '' COMMENT 'idfa' NOT NULL,
32 | `start_time` bigint(20) DEFAULT 0 COMMENT 'client start time' NOT NULL,
33 | `resume_time` bigint(20) DEFAULT 0 COMMENT 'client resume time' NOT NULL,
34 | `create_time` bigint(20) DEFAULT 0 NOT NULL,
35 | `update_time` bigint(20) DEFAULT 0 NOT NULL,
36 | PRIMARY KEY (`event_id`)
37 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='event';
38 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/sql/fansUser.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `fans_user_%1$s` (
2 | `relation_id` int(10) NOT NULL AUTO_INCREMENT,
3 | `user_id` int(10) NOT NULL DEFAULT '0',
4 | `fans_id` int(10) NOT NULL DEFAULT '0',
5 | `create_time` timestamp NULL,
6 | `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
7 | `status` tinyint(3) unsigned NOT NULL DEFAULT '0',
8 | PRIMARY KEY (`relation_id`)
9 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--------------------------------------------------------------------------------
/coder/src/main/resources/template-thymeleaf/vo.txt:
--------------------------------------------------------------------------------
1 | package $package_vo;
2 |
3 | import com.sparrow.protocol.VO;
4 | import lombok.Data;
5 | @Data
6 | public class $persistence_class_nameVO implements VO {
7 | $get_sets
8 | }
9 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/assemble.txt:
--------------------------------------------------------------------------------
1 | package $package_assemble;
2 |
3 | import com.sparrow.protocol.constant.Constant;
4 | import com.sparrow.protocol.ListRecordTotalBO;
5 | import com.sparrow.protocol.pager.PagerResult;
6 | import com.sparrow.protocol.pager.SimplePager;
7 | import $package_vo.$persistence_class_nameVO;
8 | import $package_bo.$persistence_class_nameBO;
9 | import $package_param.$persistence_class_nameParam;
10 | import com.sparrow.support.assemble.BO2VOAssemble;
11 | import com.sparrow.support.assemble.Param2VOAssemble;
12 | import com.sparrow.support.pager.HtmlPagerResult;
13 | import com.sparrow.utility.BeanUtility;
14 | import com.sparrow.utility.CollectionsUtility;
15 | import com.sparrow.utility.EnumUtility;
16 | import com.sparrow.utility.StringUtility;
17 | import java.util.ArrayList;
18 | import java.util.Collections;
19 | import java.util.List;
20 | import javax.inject.Named;
21 |
22 | @Named
23 | public class $persistence_class_nameAssemble implements BO2VOAssemble<$persistence_class_nameVO, $persistence_class_nameBO>,
24 | Param2VOAssemble<$persistence_class_nameVO,$persistence_class_nameParam> {
25 |
26 | public $persistence_class_nameVO paramAssembleVO($persistence_class_nameParam param){
27 | $persistence_class_nameVO $persistence_object_name = new $persistence_class_nameVO();
28 | BeanUtility.copyProperties(param, $persistence_object_name);
29 | return $persistence_object_name;
30 | }
31 |
32 | @Override public $persistence_class_nameVO boAssembleVO($persistence_class_nameBO bo) {
33 | $persistence_class_nameVO $persistence_object_name = new $persistence_class_nameVO();
34 | BeanUtility.copyProperties(bo, $persistence_object_name);
35 | $persistence_object_name.setStatus(bo.getStatus().name());
36 | return $persistence_object_name;
37 | }
38 |
39 | @Override public List<$persistence_class_nameVO> boListAssembleVOList(List<$persistence_class_nameBO> list) {
40 | if (CollectionsUtility.isNullOrEmpty(list)) {
41 | return Collections.emptyList();
42 | }
43 | List<$persistence_class_nameVO> $persistence_object_nameVOList = new ArrayList<>(list.size());
44 | for ($persistence_class_nameBO $persistence_object_nameBo : list) {
45 | $persistence_class_nameVO $persistence_object_nameVo = new $persistence_class_nameVO();
46 | BeanUtility.copyProperties($persistence_object_nameBo, $persistence_object_nameVo);
47 | String statusName = EnumUtility.getValue($persistence_object_nameBo.getStatus());
48 | $persistence_object_nameVo.setStatus(statusName);
49 | $persistence_object_nameVOList.add($persistence_object_nameVo);
50 | }
51 | return $persistence_object_nameVOList;
52 | }
53 |
54 | public HtmlPagerResult<$persistence_class_nameVO> assembleHtmlPager(ListRecordTotalBO<$persistence_class_nameBO> $persistence_object_nameListTotalRecord,
55 | SimplePager $persistence_object_nameQuery) {
56 | List<$persistence_class_nameVO> $persistence_object_nameVOList = this.boListAssembleVOList($persistence_object_nameListTotalRecord.getList());
57 | PagerResult<$persistence_class_nameVO> pagerResult = new PagerResult<>($persistence_object_nameQuery);
58 | pagerResult.setList($persistence_object_nameVOList);
59 | pagerResult.setRecordTotal($persistence_object_nameListTotalRecord.getTotal());
60 | return new HtmlPagerResult<>(pagerResult);
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/bo.txt:
--------------------------------------------------------------------------------
1 | package $package_bo;
2 |
3 | import com.sparrow.protocol.BO;
4 | import com.sparrow.protocol.enums.StatusRecord;
5 | import lombok.Data;
6 | @Data
7 | public class $persistence_class_nameBO implements BO {
8 | $get_sets
9 | }
10 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/controller.txt:
--------------------------------------------------------------------------------
1 | package $package_controller;
2 |
3 | import com.sparrow.protocol.BusinessException;
4 | import com.sparrow.protocol.ListRecordTotalBO;
5 | import com.sparrow.protocol.TreeItem;
6 | import com.sparrow.protocol.pager.SimplePager;
7 | import $package_assemble.$persistence_class_nameAssemble;
8 | import $package_bo.$persistence_class_nameBO;
9 | import $package_param.$persistence_class_nameParam;
10 | import $package_batch_param.$persistence_class_nameParam;
11 | import $package_query.$persistence_class_nameQuery;
12 | import $package_vo.$persistence_class_nameVO;
13 | import $package_service.$persistence_class_nameService;
14 | import com.sparrow.servlet.ServletContainer;
15 | import com.sparrow.spring.starter.ModelAndViewUtils;
16 | import com.sparrow.support.pager.HtmlPagerResult;
17 | import java.util.List;
18 | import javax.inject.Inject;
19 | import org.springframework.web.bind.annotation.GetMapping;
20 | import org.springframework.web.bind.annotation.PostMapping;
21 | import org.springframework.web.bind.annotation.RequestMapping;
22 | import org.springframework.web.bind.annotation.RestController;
23 | import org.springframework.web.servlet.ModelAndView;
24 |
25 | @RestController
26 | @RequestMapping("$persistence_object_by_slash")
27 | public class $persistence_class_nameController {
28 |
29 | @Inject
30 | private $persistence_class_nameService $persistence_object_nameService;
31 |
32 | @Inject
33 | private $persistence_class_nameAssemble $persistence_object_nameAssemble;
34 |
35 | @GetMapping("manage")
36 | public ModelAndView loadAll$persistence_class_names() {
37 | $persistence_class_nameBatchOperateParam batchOperationQuery = ModelAndViewUtils.query();
38 | if (batchOperationQuery != null) {
39 | return this.query$persistence_class_names(batchOperationQuery);
40 | }
41 | SimplePager simplePager = new SimplePager();
42 | ListRecordTotalBO<$persistence_class_nameBO> $persistence_object_nameListTotalRecord = this.$persistence_object_nameService.queryAll$persistence_class_name();
43 | HtmlPagerResult<$persistence_class_nameVO> pager = this.$persistence_object_nameAssemble.assembleHtmlPager($persistence_object_nameListTotalRecord, simplePager);
44 | ModelAndView mv = new ModelAndView("/$persistence_object_by_slash/manage");
45 | mv.addObject("pager", pager);
46 | return mv;
47 | }
48 |
49 | private ModelAndView query$persistence_class_names($persistence_class_nameQuery $persistence_object_nameQuery) {
50 | ListRecordTotalBO<$persistence_class_nameBO> $persistence_object_nameListTotalRecord = this.$persistence_object_nameService.query$persistence_class_name($persistence_object_nameQuery);
51 | HtmlPagerResult<$persistence_class_nameVO> pager = this.$persistence_object_nameAssemble.assembleHtmlPager($persistence_object_nameListTotalRecord, $persistence_object_nameQuery);
52 | ModelAndView mv = new ModelAndView("/$persistence_object_by_slash/manage");
53 | mv.addObject("pager", pager);
54 | return mv;
55 | }
56 |
57 | @PostMapping("search.do")
58 | public ModelAndView search($persistence_class_nameQuery $persistence_object_nameQuery) {
59 | return this.query$persistence_class_names($persistence_object_nameQuery);
60 | }
61 |
62 | @PostMapping("save")
63 | public ModelAndView save$persistence_class_name($persistence_class_nameParam $persistence_object_nameParam) throws BusinessException {
64 | this.$persistence_object_nameService.save$persistence_class_name($persistence_object_nameParam);
65 | return ModelAndViewUtils.redirect("/$persistence_object_by_slash/manage");
66 | }
67 |
68 | @GetMapping("edit")
69 | public ModelAndView get$persistence_class_name(Long $persistence_object_nameId) throws BusinessException {
70 | ModelAndView mv = new ModelAndView("/$persistence_object_by_slash/new");
71 | if ($persistence_object_nameId == null) {
72 | return mv;
73 | }
74 |
75 | $persistence_class_nameBO $persistence_object_nameBo = $persistence_object_nameService.get$persistence_class_name($persistence_object_nameId);
76 | $persistence_class_nameVO $persistence_object_nameVo = this.$persistence_object_nameAssemble.boAssembleVO($persistence_object_nameBo);
77 | mv.addObject("$persistence_object_name", $persistence_object_nameVo);
78 | return mv;
79 | }
80 |
81 | @PostMapping("delete")
82 | public ModelAndView delete$persistence_class_name($persistence_class_nameBatchOperateParam batchOperationQuery) throws BusinessException {
83 | this.$persistence_object_nameService.delete$persistence_class_name(batchOperationQuery.getIds());
84 | return ModelAndViewUtils.redirect("/$persistence_object_by_slash/manage");
85 | }
86 |
87 | @PostMapping("enable")
88 | public ModelAndView enable$persistence_class_name($persistence_class_nameBatchOperateParam batchOperationQuery) throws BusinessException {
89 | this.$persistence_object_nameService.enable$persistence_class_name(batchOperationQuery.getIds());
90 | return ModelAndViewUtils.redirect("/$persistence_object_by_slash/manage");
91 | }
92 |
93 | @PostMapping("disable")
94 | public ModelAndView disable$persistence_class_name($persistence_class_nameBatchOperateParam batchOperationQuery) throws BusinessException {
95 | this.$persistence_object_nameService.disable$persistence_class_name(batchOperationQuery.getIds());
96 | return ModelAndViewUtils.redirect("/$persistence_object_by_slash/manage");
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/dao.txt:
--------------------------------------------------------------------------------
1 | package $package_dao;
2 |
3 | import com.sparrow.protocol.dao.DaoSupport;
4 | import $package_po.$persistence_class_name;
5 | import $package_pager_query.$persistence_class_nameDBPagerQuery;
6 | import java.util.List;
7 |
8 | public interface $persistence_class_nameDAO extends DaoSupport<$persistence_class_name, Long> {
9 | List<$persistence_class_name> query$persistence_class_names($persistence_class_nameDBPagerQuery $persistence_object_namePagerQuery);
10 |
11 | Long count$persistence_class_name($persistence_class_nameDBPagerQuery $persistence_object_namePagerQuery);
12 | }
13 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/daoImpl.txt:
--------------------------------------------------------------------------------
1 | package $package_dao_impl;
2 |
3 | import com.sparrow.orm.query.BooleanCriteria;
4 | import com.sparrow.orm.query.Criteria;
5 | import com.sparrow.orm.query.SearchCriteria;
6 | import com.sparrow.orm.template.impl.ORMStrategy;
7 | import $package_dao.$persistence_class_nameDAO;
8 | import $package_pager_query.$persistence_class_nameDBPagerQuery;
9 | import $package_po.$persistence_class_name;
10 | import java.util.List;
11 | import javax.inject.Named;
12 |
13 | @Named
14 | public class $persistence_class_nameDaoImpl extends ORMStrategy<$persistence_class_name, Long> implements $persistence_class_nameDAO {
15 | @Override public List<$persistence_class_name> query$persistence_class_names($persistence_class_nameDBPagerQuery pager$persistence_class_nameQuery) {
16 | SearchCriteria searchCriteria = new SearchCriteria(pager$persistence_class_nameQuery);
17 | searchCriteria.setWhere(this.generateCriteria(pager$persistence_class_nameQuery));
18 | return this.getList(searchCriteria);
19 | }
20 |
21 | private BooleanCriteria generateCriteria($persistence_class_nameDBPagerQuery count$persistence_class_nameQuery) {
22 | Long startTime=null;
23 | if(count$persistence_class_nameQuery.getBeginDate()!=null){
24 | startTime=count$persistence_class_nameQuery.getBeginDate().getTime();
25 | }
26 |
27 | Long endTime=null;
28 | if(count$persistence_class_nameQuery.getEndDate()!=null){
29 | endTime=count$persistence_class_nameQuery.getEndDate().getTime();
30 | }
31 |
32 | return BooleanCriteria.criteria(
33 | Criteria.field("$persistence_object_name.name").equal(count$persistence_class_nameQuery.getName()))
34 | .and(Criteria.field("$persistence_object_name.createTime").greaterThan(startTime))
35 | .and(Criteria.field("$persistence_object_name.createTime").lessThan(endTime));
36 | }
37 |
38 | @Override public Long count$persistence_class_name($persistence_class_nameDBPagerQuery $persistence_object_namePagerQuery) {
39 | SearchCriteria searchCriteria = new SearchCriteria();
40 | searchCriteria.setWhere(this.generateCriteria($persistence_object_namePagerQuery));
41 | return this.getCount(searchCriteria);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/dataConverter.txt:
--------------------------------------------------------------------------------
1 | package $package_data_converter;
2 |
3 | import com.sparrow.protocol.dao.StatusCriteria;
4 | import com.sparrow.protocol.enums.StatusRecord;
5 | import $package_bo.$persistence_class_nameBO;
6 | import $package_po.$persistence_class_name;
7 | import $package_param.$persistence_class_nameParam;
8 | import $package_query.$persistence_class_nameQuery;
9 | import com.sparrow.support.converter.PO2BOConverter;
10 | import com.sparrow.support.converter.Param2POConverter;
11 | import $package_pager_query.$persistence_class_nameDBPagerQuery;
12 | import com.sparrow.utility.BeanUtility;
13 | import java.util.ArrayList;
14 | import java.util.List;
15 | import javax.inject.Named;
16 |
17 | @Named
18 | public class $persistence_class_nameConverter implements Param2POConverter<$persistence_class_nameParam, $persistence_class_name>, PO2BOConverter<$persistence_class_nameBO, $persistence_class_name> {
19 |
20 | public $persistence_class_nameDBPagerQuery toDbPagerQuery($persistence_class_nameQuery $persistence_object_nameQuery) {
21 | if ($persistence_object_nameQuery == null) {
22 | return new $persistence_class_nameDBPagerQuery();
23 | }
24 | $persistence_class_nameDBPagerQuery $persistence_class_nameDBPagerQuery = new $persistence_class_nameDBPagerQuery();
25 | BeanUtility.copyProperties($persistence_object_nameQuery, $persistence_class_nameDBPagerQuery);
26 | return $persistence_class_nameDBPagerQuery;
27 | }
28 |
29 | @Override public $persistence_class_name param2po($persistence_class_nameParam param) {
30 | $persistence_class_name $persistence_object_name = new $persistence_class_name();
31 | BeanUtility.copyProperties(param, $persistence_object_name);
32 |
33 | $persistence_object_name.setGmtCreate(System.currentTimeMillis());
34 | $persistence_object_name.setGmtModified($persistence_object_name.getGmtCreate());
35 | $persistence_object_name.setCreateUserId(0L);
36 | $persistence_object_name.setModifiedUserId(0L);
37 | $persistence_object_name.setStatus(StatusRecord.ENABLE);
38 |
39 | $persistence_object_name.setCreateUserName("");
40 | $persistence_object_name.setModifiedUserName("");
41 | return $persistence_object_name;
42 | }
43 |
44 | @Override public $persistence_class_nameBO po2bo($persistence_class_name $persistence_object_name) {
45 | $persistence_class_nameBO $persistence_object_nameBO = new $persistence_class_nameBO();
46 | BeanUtility.copyProperties($persistence_object_name, $persistence_object_nameBO);
47 | return $persistence_object_nameBO;
48 | }
49 |
50 | @Override public List<$persistence_class_nameBO> poList2BoList(List<$persistence_class_name> list) {
51 | List<$persistence_class_nameBO> $persistence_object_nameBos = new ArrayList<>(list.size());
52 | for ($persistence_class_name $persistence_object_name : list) {
53 | $persistence_object_nameBos.add(this.po2bo($persistence_object_name));
54 | }
55 | return $persistence_object_nameBos;
56 | }
57 |
58 | public void convertStatus(StatusCriteria statusCriteria){
59 | statusCriteria.setModifiedUserName("harry");
60 | statusCriteria.setGmtModified(System.currentTimeMillis());
61 | statusCriteria.setModifiedUserId(1L);
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/mybatis.properties:
--------------------------------------------------------------------------------
1 | change_status=false
--------------------------------------------------------------------------------
/coder/src/main/resources/template/pagerQuery.txt:
--------------------------------------------------------------------------------
1 | package $package_pager_query;
2 |
3 | import com.sparrow.protocol.enums.StatusRecord;
4 | import com.sparrow.protocol.dao.DatabasePagerQuery;
5 | import java.util.Date;
6 | import lombok.Data;
7 | @Data
8 |
9 | public class $persistence_class_nameDBPagerQuery extends DatabasePagerQuery {
10 | public $persistence_class_nameDBPagerQuery() {}
11 | }
12 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/param.txt:
--------------------------------------------------------------------------------
1 | package $package_param;
2 |
3 | import com.sparrow.protocol.Param;
4 | import com.sparrow.protocol.enums.StatusRecord;
5 | import lombok.Data;
6 |
7 | @Data
8 | public class $persistence_class_nameParam implements Param {
9 | $get_sets
10 | }
11 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/query.txt:
--------------------------------------------------------------------------------
1 | package $package_query;
2 |
3 | import com.sparrow.protocol.pager.SimplePager;
4 | import java.util.Date;
5 | import lombok.Data;
6 | @Data
7 | public class $persistence_class_nameQuery extends SimplePager {
8 | private String name;
9 | private Date beginDate;
10 | private Date endDate;
11 |
12 | public String getName() {
13 | return name;
14 | }
15 |
16 | public void setName(String name) {
17 | this.name = name;
18 | }
19 |
20 | public Date getBeginDate() {
21 | return beginDate;
22 | }
23 |
24 | public void setBeginDate(Date beginDate) {
25 | this.beginDate = beginDate;
26 | }
27 |
28 | public Date getEndDate() {
29 | return endDate;
30 | }
31 |
32 | public void setEndDate(Date endDate) {
33 | this.endDate = endDate;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/repository.txt:
--------------------------------------------------------------------------------
1 | package $package_repository;
2 | import $package_bo.$persistence_class_nameBO;
3 | import $package_param.$persistence_class_nameParam;
4 | import $package_query.$persistence_class_nameQuery;
5 | import java.util.List;
6 |
7 |
8 |
9 | public interface $persistence_class_nameRepository {
10 | Long save($persistence_class_nameParam $persistence_object_nameParam);
11 |
12 | Integer delete(String $persistence_object_nameIds);
13 |
14 | Integer disable(String $persistence_object_nameIds);
15 |
16 | Integer enable(String $persistence_object_nameIds);
17 |
18 | $persistence_class_nameBO get$persistence_class_name(Long $persistence_object_nameId);
19 |
20 | List<$persistence_class_nameBO> query$persistence_class_names($persistence_class_nameQuery $persistence_object_nameQuery);
21 |
22 | Long get$persistence_class_nameCount($persistence_class_nameQuery $persistence_object_nameQuery);
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/repositoryImpl.txt:
--------------------------------------------------------------------------------
1 | package $package_repository_impl;
2 |
3 | import com.sparrow.protocol.dao.StatusCriteria;
4 | import com.sparrow.protocol.enums.StatusRecord;
5 | import $package_dao.$persistence_class_nameDAO;
6 | import $package_data_converter.$persistence_class_nameConverter;
7 | import $package_po.$persistence_class_name;
8 | import $package_bo.$persistence_class_nameBO;
9 | import $package_param.$persistence_class_nameParam;
10 | import $package_repository.$persistence_class_nameRepository;
11 | import $package_query.$persistence_class_nameQuery;
12 |
13 | import java.util.List;
14 | import javax.inject.Inject;
15 | import javax.inject.Named;
16 |
17 | @Named
18 | public class $persistence_class_nameRepositoryImpl implements $persistence_class_nameRepository {
19 | @Inject
20 | private $persistence_class_nameConverter $persistence_object_nameConverter;
21 |
22 | @Inject
23 | private $persistence_class_nameDAO $persistence_object_nameDao;
24 |
25 | @Override public Long save($persistence_class_nameParam $persistence_object_nameParam) {
26 | $persistence_class_name $persistence_object_name = this.$persistence_object_nameConverter.param2po($persistence_object_nameParam);
27 | if ($persistence_object_name.get$upper_primary_property_name() != null) {
28 | this.$persistence_object_nameDao.update($persistence_object_name);
29 | return $persistence_object_name.get$upper_primary_property_name();
30 | }
31 | this.$persistence_object_nameDao.insert($persistence_object_name);
32 | return $persistence_object_name.get$upper_primary_property_name();
33 | }
34 |
35 | @Override public Integer delete(String $persistence_object_nameIds) {
36 | return this.$persistence_object_nameDao.batchDelete($persistence_object_nameIds);
37 | }
38 |
39 | @Override public Integer disable(String $persistence_object_nameIds) {
40 | StatusCriteria statusCriteria = new StatusCriteria($persistence_object_nameIds, StatusRecord.DISABLE);
41 | this.$persistence_object_nameConverter.convertStatus(statusCriteria);
42 | return this.$persistence_object_nameDao.changeStatus(statusCriteria);
43 | }
44 |
45 | @Override public Integer enable(String $persistence_object_nameIds) {
46 | StatusCriteria statusCriteria = new StatusCriteria($persistence_object_nameIds, StatusRecord.ENABLE);
47 | this.$persistence_object_nameConverter.convertStatus(statusCriteria);
48 |
49 | return this.$persistence_object_nameDao.changeStatus(statusCriteria);
50 | }
51 |
52 | @Override public $persistence_class_nameBO get$persistence_class_name(Long $persistence_object_nameId) {
53 | $persistence_class_name $persistence_object_name = this.$persistence_object_nameDao.getEntity($persistence_object_nameId);
54 | return this.$persistence_object_nameConverter.po2bo($persistence_object_name);
55 | }
56 |
57 | @Override public List<$persistence_class_nameBO> query$persistence_class_names($persistence_class_nameQuery $persistence_object_nameQuery) {
58 | List<$persistence_class_name> $persistence_object_nameList = this.$persistence_object_nameDao.query$persistence_class_names(this.$persistence_object_nameConverter.toDbPagerQuery($persistence_object_nameQuery));
59 | return this.$persistence_object_nameConverter.poList2BoList($persistence_object_nameList);
60 | }
61 |
62 | @Override public Long get$persistence_class_nameCount($persistence_class_nameQuery $persistence_object_nameQuery) {
63 | return this.$persistence_object_nameDao.count$persistence_class_name(this.$persistence_object_nameConverter.toDbPagerQuery($persistence_object_nameQuery));
64 | }
65 | }
--------------------------------------------------------------------------------
/coder/src/main/resources/template/service.txt:
--------------------------------------------------------------------------------
1 | package $package_service;
2 |
3 | import com.sparrow.exception.Asserts;
4 | import com.sparrow.protocol.BusinessException;
5 | import com.sparrow.protocol.ListRecordTotalBO;
6 | import $package_bo.$persistence_class_nameBO;
7 | import $package_repository.$persistence_class_nameRepository;
8 | import $package_param.$persistence_class_nameParam;
9 | import $package_query.$persistence_class_nameQuery;
10 | import com.sparrow.utility.StringUtility;
11 | import java.util.List;
12 | import javax.inject.Inject;
13 | import javax.inject.Named;
14 |
15 | @Named
16 | public class $persistence_class_nameService {
17 | @Inject
18 | private $persistence_class_nameRepository $persistence_object_nameRepository;
19 |
20 | private void validateSave$persistence_class_name($persistence_class_nameParam $persistence_object_nameParam) throws BusinessException {
21 | //Asserts.isTrue(StringUtility.isNullOrEmpty($persistence_object_nameParam.getName()), SecurityAdminError.NAME_IS_EMPTY, $persistence_class_nameSuffix.name);
22 | }
23 |
24 | public Long save$persistence_class_name($persistence_class_nameParam $persistence_object_nameParam) throws BusinessException {
25 | this.validateSave$persistence_class_name($persistence_object_nameParam);
26 | return this.$persistence_object_nameRepository.save($persistence_object_nameParam);
27 | }
28 |
29 | public Integer delete$persistence_class_name(String $persistence_object_nameIds) throws BusinessException {
30 | //Asserts.isTrue(StringUtility.isNullOrEmpty($persistence_object_nameIds), SecurityAdminError.$persistence_class_name_ID_IS_EMPTY);
31 | return this.$persistence_object_nameRepository.delete($persistence_object_nameIds);
32 | }
33 |
34 | public Integer enable$persistence_class_name(String $persistence_object_nameIds) throws BusinessException {
35 | //Asserts.isTrue(StringUtility.isNullOrEmpty($persistence_object_nameIds), SecurityAdminError.$persistence_class_name_ID_IS_EMPTY);
36 | return this.$persistence_object_nameRepository.enable($persistence_object_nameIds);
37 | }
38 |
39 | public Integer disable$persistence_class_name(String $persistence_object_nameIds) throws BusinessException {
40 | //Asserts.isTrue(StringUtility.isNullOrEmpty($persistence_object_nameIds), SecurityAdminError.$persistence_class_name_ID_IS_EMPTY);
41 | return this.$persistence_object_nameRepository.disable($persistence_object_nameIds);
42 | }
43 |
44 | public ListRecordTotalBO<$persistence_class_nameBO> queryAll$persistence_class_name() {
45 | return query$persistence_class_name(null);
46 | }
47 |
48 | public ListRecordTotalBO<$persistence_class_nameBO> query$persistence_class_name($persistence_class_nameQuery $persistence_object_nameQuery) {
49 | Long totalRecord = this.$persistence_object_nameRepository.get$persistence_class_nameCount($persistence_object_nameQuery);
50 | List<$persistence_class_nameBO> $persistence_object_nameBoList = null;
51 | if (totalRecord > 0) {
52 | $persistence_object_nameBoList = this.$persistence_object_nameRepository.query$persistence_class_names($persistence_object_nameQuery);
53 | }
54 | return new ListRecordTotalBO<>($persistence_object_nameBoList, totalRecord);
55 | }
56 |
57 | public $persistence_class_nameBO get$persistence_class_name(Long $persistence_object_nameId) throws BusinessException {
58 | //Asserts.isTrue($persistence_object_nameId == null, SecurityAdminError.$persistence_object_name_IS_EMPTY);
59 | return this.$persistence_object_nameRepository.get$persistence_class_name($persistence_object_nameId);
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/sql/attentionUser.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `attention_user_%1$s` (
2 | `relation_id` int(10) NOT NULL AUTO_INCREMENT,
3 | `user_id` int(10) NOT NULL DEFAULT '0',
4 | `attention_id` int(10) NOT NULL DEFAULT '0',
5 | `create_time` timestamp NULL,
6 | `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
7 | `status` tinyint(3) unsigned NOT NULL DEFAULT '0',
8 | PRIMARY KEY (`relation_id`)
9 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
10 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/sql/event.sql:
--------------------------------------------------------------------------------
1 | DROP TABLE IF EXISTS `event_%s`;
2 | CREATE TABLE `event_%s` (
3 | `event_id` int(10) UNSIGNED AUTO_INCREMENT COMMENT 'primary key' NOT NULL ,
4 | `user_type` varchar(16) DEFAULT '' COMMENT 'user type' NOT NULL,
5 | `user_id` int(10) UNSIGNED COMMENT 'user id' NOT NULL,
6 | `business_type` varchar(64) DEFAULT '' COMMENT 'ip' NOT NULL,
7 | `business_id` int(10) UNSIGNED COMMENT 'business id' NOT NULL,
8 | `times` int(10) DEFAULT 0 COMMENT 'times' NOT NULL,
9 | `channel` varchar(256) DEFAULT '' COMMENT 'channel' NOT NULL,
10 | `ip` char(16) DEFAULT '' COMMENT 'ip' NOT NULL,
11 | `device` varchar(32) DEFAULT '' COMMENT 'device' NOT NULL,
12 | `device_id` varchar(64) DEFAULT '' COMMENT 'device unique id' NOT NULL,
13 | `device_model` varchar(16) DEFAULT '' COMMENT 'device model 5s e.g ...' NOT NULL,
14 | `event` varchar(64) DEFAULT '' COMMENT 'event type' NOT NULL,
15 | `content` varchar(512) DEFAULT '' COMMENT 'content' NOT NULL,
16 | `status` varchar(64) DEFAULT '' COMMENT 'status' NOT NULL,
17 | `website` varchar(256) DEFAULT '' COMMENT 'website home url' NOT NULL,
18 | `app_id` int(11) UNSIGNED DEFAULT 0 COMMENT 'app id' NOT NULL,
19 | `app_version` float(11,2) DEFAULT 0.0 COMMENT 'app version' NOT NULL,
20 | `platform` varchar(16) DEFAULT '' COMMENT 'platform' NOT NULL,
21 | `os` varchar(16) DEFAULT '' COMMENT 'operation system' NOT NULL,
22 | `user_agent` varchar(512) DEFAULT '' COMMENT 'use agent' NOT NULL,
23 | `client_version` varchar(64) DEFAULT '' COMMENT 'client os version' NOT NULL,
24 | `longitude` double DEFAULT 0.0 COMMENT 'longitude' NOT NULL,
25 | `latitude` double DEFAULT 0.0 COMMENT 'latitude' NOT NULL,
26 | `network` varchar(16) DEFAULT '' COMMENT 'network' NOT NULL,
27 | `simulate` tinyint(1) DEFAULT 0 COMMENT 'is simulate' NOT NULL,
28 | `imei` varchar(64) DEFAULT '' COMMENT 'imei' NOT NULL,
29 | `bssid` varchar(64) DEFAULT '' COMMENT 'bssi' NOT NULL,
30 | `ssid` char(64) DEFAULT '' COMMENT 'ssid' NOT NULL,
31 | `idfa` char(64) DEFAULT '' COMMENT 'idfa' NOT NULL,
32 | `start_time` bigint(20) DEFAULT 0 COMMENT 'client start time' NOT NULL,
33 | `resume_time` bigint(20) DEFAULT 0 COMMENT 'client resume time' NOT NULL,
34 | `create_time` bigint(20) DEFAULT 0 NOT NULL,
35 | `update_time` bigint(20) DEFAULT 0 NOT NULL,
36 | PRIMARY KEY (`event_id`)
37 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='event';
38 |
--------------------------------------------------------------------------------
/coder/src/main/resources/template/sql/fansUser.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `fans_user_%1$s` (
2 | `relation_id` int(10) NOT NULL AUTO_INCREMENT,
3 | `user_id` int(10) NOT NULL DEFAULT '0',
4 | `fans_id` int(10) NOT NULL DEFAULT '0',
5 | `create_time` timestamp NULL,
6 | `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
7 | `status` tinyint(3) unsigned NOT NULL DEFAULT '0',
8 | PRIMARY KEY (`relation_id`)
9 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--------------------------------------------------------------------------------
/coder/src/main/resources/template/vo.txt:
--------------------------------------------------------------------------------
1 | package $package_vo;
2 |
3 | import com.sparrow.protocol.VO;
4 | import lombok.Data;
5 | @Data
6 | public class $persistence_class_nameVO implements VO {
7 | $get_sets
8 | }
9 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/CodeGeneratorDemo.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding;
2 |
3 | public class CodeGeneratorDemo {
4 | public static void main(String[] args) throws Exception {
5 | //args = "--example".split(" ");
6 | args = "-b com.sparrow.coding.protocol.TableDef".split(" ");
7 | //args = "-pq com.sparrow.example.po.SparrowExample -config=/Users/zhanglizhi/workspace/tedu/tarena-tp-basic/basic-po/bin/config.properties".split(" ");
8 | JavaMain.main(args);
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/FileTest.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding;
2 |
3 | import java.io.File;
4 | import java.nio.file.Path;
5 |
6 | public class FileTest {
7 | public static void main(String[] args) {
8 | System.out.println(File.separator);
9 | System.out.println(File.pathSeparator);
10 | System.out.println(System.getProperty("user.home"));
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/HelloWorld.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding;
2 |
3 | /**
4 | * java -classpath
5 | * $SPARROW_CODER_HOME/$sparrow_coder_name:$class_path
6 | * com.sparrow.coding.JavaMain $option $2 $3
7 | */
8 | public class HelloWorld {
9 | public static void main(String[] args) {
10 | System.out.println("Hello World!");
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/MavenInstall.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding;
2 |
3 | import com.sparrow.protocol.constant.Constant;
4 | import com.sparrow.support.EnvironmentSupport;
5 | import com.sparrow.utility.FileUtility;
6 | import java.io.BufferedReader;
7 | import java.io.File;
8 | import java.io.FilenameFilter;
9 | import java.io.IOException;
10 | import java.io.InputStream;
11 | import java.io.InputStreamReader;
12 | import java.nio.charset.StandardCharsets;
13 | import java.util.StringTokenizer;
14 | import sun.misc.JarFilter;
15 |
16 | public class MavenInstall {
17 |
18 | private static Runtime _runRuntime = Runtime.getRuntime();
19 | private static String CMD_INSTALL_FILE;
20 |
21 | public static void main(String[] args) {
22 | File file = new File(EnvironmentSupport.getInstance().getWorkspace() + "/Sparrow/jar");
23 | FilenameFilter filter = new JarFilter();
24 | File[] jarFiles = file.listFiles(filter);
25 | for (File jar : jarFiles) {
26 | installJarToMaven(jar);
27 | }
28 | }
29 |
30 | private static void installJarToMaven(File file) {
31 | String fileName = file.getName();
32 | String jarName = FileUtility.getInstance().getFileNameProperty(fileName).getName();
33 | StringTokenizer strToken = new StringTokenizer(jarName, "-");
34 | String groupId = null;
35 | String artifactId = null;
36 | String version = null;
37 | if (strToken.hasMoreTokens()) {
38 | groupId = strToken.nextToken();
39 | if (strToken.hasMoreTokens()) {
40 | artifactId = strToken.nextToken();
41 | if (strToken.hasMoreTokens()) {
42 | version = strToken.nextToken();
43 | }
44 | } else {
45 | version = artifactId = groupId;
46 | }
47 | }
48 | System.out.println("Jar [" + jarName + "] will be installed with the groupId=" + groupId + " ,"
49 | + "artifactId=" + artifactId + " , version=" + version + ".");
50 | executeInstall(groupId, artifactId, version, file.getPath());
51 | }
52 |
53 | private static void executeInstall(String groupId, String artifactId,
54 | String version, String path) {
55 | CMD_INSTALL_FILE = createInstallFileCMD(groupId, artifactId,
56 | version, path);
57 | String[] cmdArray = new String[] {"cmd", "/C", CMD_INSTALL_FILE};
58 | try {
59 | Process process = _runRuntime.exec(cmdArray);
60 | printResult(process);
61 | } catch (IOException e) {
62 | e.printStackTrace();
63 | }
64 | }
65 |
66 | private static void printResult(Process process) throws IOException {
67 | InputStream is = process.getInputStream();
68 | BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
69 | String lineStr;
70 | while ((lineStr = br.readLine()) != null) {
71 | System.out.println(lineStr);
72 | }
73 | }
74 |
75 | private static String createInstallFileCMD(String groupId,
76 | String artifactId, String version, String path) {
77 | StringBuilder sb = new StringBuilder();
78 | sb.append("mvn install:install-file -DgroupId=").append(groupId)
79 | .append(" -DartifactId=").append(artifactId)
80 | .append(" -Dversion=").append(version)
81 | .append(" -Dpackaging=jar")
82 | .append(" -Dfile=").append(path);
83 | return sb.toString();
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/generate/BackendTest.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.generate;
2 |
3 | import com.sparrow.coding.DigitalCategory;
4 | import com.sparrow.coding.api.CodeGenerator;
5 | import com.sparrow.coding.api.ValidatorMessageGenerator;
6 | import com.sparrow.coding.api.ValidatorRegistry;
7 | import com.sparrow.coding.java.DefaultCodeGenerator;
8 | import com.sparrow.coding.protocol.validate.DigitalValidator;
9 | import com.sparrow.container.Container;
10 | import com.sparrow.container.ContainerBuilder;
11 | import com.sparrow.core.spi.ApplicationContext;
12 | import org.junit.jupiter.api.Test;
13 |
14 | import java.io.IOException;
15 |
16 | public class BackendTest {
17 | @Test
18 | public void generate() throws IOException, ClassNotFoundException {
19 | Container container = ApplicationContext.getContainer();
20 | container.init(new ContainerBuilder().initController(false)
21 | .initInterceptor(false)
22 | .scanBasePackage("com.sparrow"));
23 |
24 | CodeGenerator generator = new DefaultCodeGenerator(1L);
25 | generator.initScaffold();
26 | //generator.generate("t_table_config");
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/mybatis/MybatisEntityManagerTest.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.mybatis;
2 |
3 | import com.sparrow.coding.java.EnvironmentContext;
4 | import com.sparrow.container.Container;
5 | import com.sparrow.container.ContainerBuilder;
6 | import com.sparrow.core.spi.ApplicationContext;
7 |
8 | import java.io.IOException;
9 |
10 | public class MybatisEntityManagerTest {
11 | public static void main(String[] args) throws IOException {
12 | Container container = ApplicationContext.getContainer();
13 | container.init(new ContainerBuilder().initController(false)
14 | .initInterceptor(false)
15 | .scanBasePackage("com.sparrow"));
16 | EnvironmentContext environmentContext=new EnvironmentContext(null);
17 | // MybatisEntityManager entityManager=new MybatisEntityManager(SparrowExample.class,environmentContext);
18 | // entityManager.init();
19 | // System.out.println(entityManager.getXml());
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/sparrow/DigitalTest.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.sparrow;
2 |
3 | import com.sparrow.coding.DigitalCategory;
4 | import com.sparrow.coding.api.ValidatorMessageGenerator;
5 | import com.sparrow.coding.api.ValidatorRegistry;
6 | import com.sparrow.coding.protocol.validate.DigitalValidator;
7 | import com.sparrow.container.Container;
8 | import com.sparrow.container.ContainerBuilder;
9 | import com.sparrow.core.spi.ApplicationContext;
10 | import org.junit.jupiter.api.Test;
11 |
12 | public class DigitalTest {
13 |
14 |
15 | @Test
16 | public void digital() {
17 | Container container = ApplicationContext.getContainer();
18 | container.init(new ContainerBuilder().initController(false)
19 | .initInterceptor(false)
20 | .scanBasePackage("com.sparrow"));
21 | ValidatorMessageGenerator messageGenerator = ValidatorRegistry.getInstance().getValidatorMessageGenerator("valibot",
22 | "digitalValidatorMessageGenerator");
23 |
24 | DigitalValidator validator = new DigitalValidator();
25 | validator.setI18n(true);
26 | //validator.setI18nFieldName("age");
27 | validator.setAllowEmpty(false);
28 | validator.setEmptyMessage("年龄不允许为空");
29 | validator.setMinValue(5);
30 | validator.setMaxValue(30);
31 | validator.setDigitalMessage("请输入正确的年龄");
32 | validator.setCategory(DigitalCategory.INTEGER);
33 | validator.setMinValueMessage("年龄不能小于5");
34 | validator.setMaxValueMessage("年龄不能大于30");
35 |
36 | String validateMessage = messageGenerator.generateConfig("age", validator);
37 | String i18nValidateMessage = messageGenerator.generateI18NConfig(validator);
38 | System.out.println(i18nValidateMessage);
39 | System.out.println(validateMessage);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/sparrow/EmailTest.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.sparrow;
2 |
3 | import com.sparrow.coding.api.ValidatorMessageGenerator;
4 | import com.sparrow.coding.api.ValidatorRegistry;
5 | import com.sparrow.coding.protocol.validate.RegexValidator;
6 | import com.sparrow.container.Container;
7 | import com.sparrow.container.ContainerBuilder;
8 | import com.sparrow.core.spi.ApplicationContext;
9 | import org.junit.jupiter.api.Test;
10 |
11 | public class EmailTest {
12 | @Test
13 | public void email() {
14 | Container container = ApplicationContext.getContainer();
15 | container.init(new ContainerBuilder().initController(false)
16 | .initInterceptor(false)
17 | .scanBasePackage("com.sparrow"));
18 | ValidatorMessageGenerator messageGenerator = ValidatorRegistry.getInstance().getValidatorMessageGenerator("valibot",
19 | "emailValidatorMessageGenerator");
20 |
21 | RegexValidator validator = new RegexValidator();
22 | validator.setAllowEmpty(false);
23 | validator.setI18n(false);
24 | validator.setEmptyMessage("邮箱不能为空");
25 | validator.setMinLength(5);
26 | validator.setMaxLength(30);
27 | validator.setFormatMessage("请输入正确的邮箱格式");
28 | validator.setMinLengthMessage("邮箱长度必须在5到30之间");
29 | validator.setMaxLengthMessage("邮箱长度必须在5到30之间");
30 |
31 | String validateMessage = messageGenerator.generateConfig("email", validator);
32 | System.out.println(validateMessage);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/sparrow/IdCardTest.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.sparrow;
2 |
3 | import com.sparrow.coding.api.ValidatorMessageGenerator;
4 | import com.sparrow.coding.api.ValidatorRegistry;
5 | import com.sparrow.coding.protocol.validate.RegexValidator;
6 | import com.sparrow.container.Container;
7 | import com.sparrow.container.ContainerBuilder;
8 | import com.sparrow.core.spi.ApplicationContext;
9 | import org.junit.jupiter.api.Test;
10 |
11 | public class IdCardTest {
12 | @Test
13 | public void idCard() {
14 | Container container = ApplicationContext.getContainer();
15 | container.init(new ContainerBuilder().initController(false)
16 | .initInterceptor(false)
17 | .scanBasePackage("com.sparrow"));
18 | ValidatorMessageGenerator messageGenerator = ValidatorRegistry.getInstance().getValidatorMessageGenerator("valibot",
19 | "idCardValidatorMessageGenerator");
20 |
21 | RegexValidator validator = new RegexValidator();
22 | validator.setAllowEmpty(true);
23 | validator.setI18n(false);
24 | validator.setEmptyMessage("身份证不能为空");
25 | validator.setFormatMessage("请输入正确的身份证格式");
26 |
27 | String validateMessage = messageGenerator.generateConfig("idCard", validator);
28 | System.out.println(validateMessage);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/sparrow/MobileTest.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.sparrow;
2 |
3 | import com.sparrow.coding.api.ValidatorMessageGenerator;
4 | import com.sparrow.coding.api.ValidatorRegistry;
5 | import com.sparrow.coding.protocol.validate.RegexValidator;
6 | import com.sparrow.container.Container;
7 | import com.sparrow.container.ContainerBuilder;
8 | import com.sparrow.core.spi.ApplicationContext;
9 | import org.junit.jupiter.api.Test;
10 |
11 | public class MobileTest {
12 | @Test
13 | public void idCard() {
14 | Container container = ApplicationContext.getContainer();
15 | container.init(new ContainerBuilder().initController(false)
16 | .initInterceptor(false)
17 | .scanBasePackage("com.sparrow"));
18 | ValidatorMessageGenerator messageGenerator = ValidatorRegistry.getInstance().getValidatorMessageGenerator("valibot",
19 | "mobileValidatorMessageGenerator");
20 |
21 | RegexValidator validator = new RegexValidator();
22 | validator.setAllowEmpty(false);
23 | validator.setI18n(false);
24 | validator.setEmptyMessage("手机号不能为空");
25 | validator.setFormatMessage("请输入正确的手机号格式");
26 | String validateMessage = messageGenerator.generateConfig("mobile", validator);
27 | System.out.println(validateMessage);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/coder/src/test/java/com/sparrow/coding/validator/ValidatorTest.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.coding.validator;
2 |
3 | import com.sparrow.coding.ApplicationBoot;
4 | import com.sparrow.coding.api.ValidatorMessageGenerator;
5 | import com.sparrow.coding.api.ValidatorRegistry;
6 | import com.sparrow.coding.protocol.validate.RegexValidator;
7 | import org.junit.jupiter.api.Test;
8 | import org.springframework.boot.test.context.SpringBootTest;
9 |
10 | @SpringBootTest(classes = {ApplicationBoot.class})
11 | public class ValidatorTest {
12 | @Test
13 | public void test() {
14 | ValidatorMessageGenerator messageGenerator = ValidatorRegistry.getInstance().getValidatorMessageGenerator("valibot",
15 | "emailValidatorMessageGenerator");
16 |
17 | RegexValidator validator = new RegexValidator();
18 | validator.setAllowEmpty(true);
19 | validator.setI18n(false);
20 | validator.setEmptyMessage("用户名不能为空");
21 | validator.setMinLength(5);
22 | validator.setMaxLength(30);
23 | validator.setFormatMessage("请输入正确的邮箱格式");
24 | validator.setMinLengthMessage("用户名长度必须在5到30之间");
25 |
26 | String validateMessage = messageGenerator.generateConfig("email", validator);
27 | System.out.println(validateMessage);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/example-po/bin/config.properties:
--------------------------------------------------------------------------------
1 | #SPARROW_CODER_HOME=${user.home}/workspace/sparrow/sparrow-coder/coder/target
2 |
3 | author=harry
4 | workspace=${user.home}/workspace/sparrow
5 | project=sparrow-coder
6 | module.prefix=example
7 | backend_template_home=$coder_home/classes/template
8 | table_output_home=$workspace/$project/example-po/bin
9 |
10 | resource_workspace=${user.home}/workspace/sparrow
11 | frontend_generator_config=/sparrow_generator.xml
12 | language_js_path=$resource_workspace/sparrow-js/source/ext/scripts/system/language/zh_cn
13 | js_path=$resource_workspace/sparrow-js/source/ext/scripts/system
14 | #css_path=$resource_workspace/sparrow-js/source/ext/sparrowzoo/styles/system
15 | view_template_path=$workspace/$project/admin/$module_prefix-admin-main-spring-boot/src/main/resources/templates
16 | extension=.html
17 |
18 |
19 | module.parent.admin=admin
20 | #module.persistence=cms-po
21 | module.admin.adapter=$module_prefix-admin-adapter
22 | module.admin.dao.api=$module_prefix-admin-dao-api
23 | module.admin.domain=$module_prefix-admin-domain
24 | module.admin.infrastructure=$module_prefix-admin-infrastructure
25 | module.admin.main.boot=$module_prefix-admin-main-spring-boot
26 | module.admin.protocol=$module_prefix-admin-protocol
27 | module.admin.dao.sparrow=$module_prefix-admin-dao-sparrow
28 | module.admin.dao.mybatis=$module_prefix-admin-dao-mybatis
29 |
30 |
31 |
32 | package.po=po
33 | package.bo=admin.domain.bo
34 | package.query=admin.protocol.query
35 | package.param=admin.protocol.param
36 | package.vo=admin.adapter.protocol.vo
37 | package.dao=admin.dao
38 | package.service=admin.domain.service
39 | package.dao_impl=admin.dao.sparrow
40 | package.dao_mybatis=admin.dao.mybatis
41 | package.repository_impl=admin.infrastructure.persistence
42 | package.repository=admin.repository
43 | package.controller=admin.adapter.controller
44 | package.assemble=admin.adapter.assemble
45 | package.data_converter=admin.infrastructure.persistence.data.converter
46 | package.pager_query=admin.dao.query
47 | package.batch_operate_param=admin.protocol.param.batch
48 |
49 |
50 | class.po=$persistence_class_name
51 | class.assemble=$persistence_class_nameAssemble
52 | class.query=$persistence_class_nameQuery
53 | class.bo=$persistence_class_nameBO
54 | class.param=$persistence_class_nameParam
55 | class.vo=$persistence_class_nameVO
56 | class.dao=$persistence_class_nameDAO
57 | class.repository=$persistence_class_nameRepository
58 | class.repository_impl=$persistence_class_nameRepositoryImpl
59 | class.service=$persistence_class_nameService
60 | class.dao_impl=$persistence_class_nameDaoImpl
61 | class.dao_mybatis=$persistence_class_nameMapper
62 |
63 | class.controller=$persistence_class_nameController
64 | class.data_converter=$persistence_class_nameConverter
65 | class.pager_query=$persistence_class_nameDBPagerQuery
66 | class.batch_operate_param=$persistence_class_nameBatchOperateParam
67 |
68 |
69 |
--------------------------------------------------------------------------------
/example-po/bin/ddl/sparrow_example.sql:
--------------------------------------------------------------------------------
1 | DROP TABLE IF EXISTS `sparrow_example`;
2 | CREATE TABLE `sparrow_example` (
3 | `id` int(11) NOT NULL AUTO_INCREMENT,
4 | `avatar` varchar(256) DEFAULT '' COMMENT '头象' ,
5 | `user_name` varchar(32) DEFAULT '' COMMENT '用户名' ,
6 | `password` varchar(32) DEFAULT '' COMMENT '密码' ,
7 | `age` int(10) UNSIGNED DEFAULT 0 COMMENT '年龄' ,
8 | `confirm_password` varchar(32) DEFAULT '' COMMENT '确认密码' ,
9 | `email` varchar(256) DEFAULT '' COMMENT 'email' ,
10 | `id_card` varchar(32) DEFAULT '' COMMENT '身份证' ,
11 | `mobile` varchar(16) DEFAULT '' COMMENT '手机号' ,
12 | `tel` varchar(16) DEFAULT '' COMMENT '联系电话' ,
13 | `name` varchar(16) DEFAULT '' COMMENT '用户姓名' ,
14 | `create_user_id` int(11) UNSIGNED DEFAULT 0 COMMENT '创建人ID' NOT NULL,
15 | `gmt_create` bigint(11) DEFAULT 0 COMMENT '创建时间' NOT NULL,
16 | `modified_user_id` int(11) unsigned DEFAULT 0 COMMENT '更新人ID' NOT NULL,
17 | `gmt_modified` bigint(11) DEFAULT 0 COMMENT '更新时间' NOT NULL,
18 | `create_user_name` varchar(64) DEFAULT '' COMMENT '创建人' NOT NULL,
19 | `modified_user_name` varchar(64) DEFAULT '' COMMENT '更新人' NOT NULL,
20 | PRIMARY KEY (`id`)
21 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='sparrow_example';
22 |
--------------------------------------------------------------------------------
/example-po/bin/example-front-coder-all.sh:
--------------------------------------------------------------------------------
1 | config_path=$(pwd)/config.properties
2 | echo $config_path
3 | sh ./sparrow-front-coder.sh -all com.sparrow.coding.config.ExampleFront -config=$config_path
4 |
--------------------------------------------------------------------------------
/example-po/bin/example-java-coder-all.sh:
--------------------------------------------------------------------------------
1 | config_path=$(pwd)/config.properties
2 | echo $config_path
3 |
4 | if pwd | grep -q -E 'bin$'; then
5 | echo "true"
6 | else
7 | echo "请cd到bin目录下运行"
8 | exit 1
9 | fi
10 |
11 |
12 | sh ./sparrow-java-coder.sh -ct com.sparrow.example.po.TableDef -config=$config_path
13 |
--------------------------------------------------------------------------------
/example-po/bin/sparrow-front-coder.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | source /etc/profile
3 |
4 | [ -z "$SPARROW_CODER_HOME" ] && echo "please config environment variable SPARROW_CODER_HOME" && exit 0
5 | sparrow_coder_name=sparrow-coder-all.jar
6 | class_path=$(cd ../target/classes;pwd)
7 | if [ $1 == '--help' ]; then
8 | java -classpath $SPARROW_CODER_HOME/$sparrow_coder_name:$class_path com.sparrow.coding.FrontMain --help
9 | exit
10 | fi
11 |
12 | if [ $1 == '--example' ]; then
13 | java -classpath $SPARROW_CODER_HOME/$sparrow_coder_name:$class_path com.sparrow.coding.FrontMain --example
14 | exit
15 | fi
16 |
17 | options=$1
18 | if [ $1 == '-all' ]; then
19 | options='-mp,-cp,-cj,-lj,-mj'
20 | fi
21 | #将,替换为空格
22 | options_array=(${options//,/ })
23 | for option in ${options_array[@]}
24 | do
25 | echo java -classpath $SPARROW_CODER_HOME/$sparrow_coder_name:$class_path com.sparrow.coding.FrontMain $option $2
26 |
27 | java -classpath $SPARROW_CODER_HOME/$sparrow_coder_name:$class_path com.sparrow.coding.FrontMain $option $2
28 | done
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/example-po/bin/sparrow-java-coder.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | source /etc/profile
3 |
4 | [ -z "$SPARROW_CODER_HOME" ] && echo "please config environment variable SPARROW_CODER_HOME" && exit 0
5 | sparrow_coder_name=sparrow-coder-all.jar
6 | class_path=$(cd ../target/classes;pwd)
7 | if [ $1 == '--help' ]; then
8 | java -classpath $SPARROW_CODER_HOME/$sparrow_coder_name:$class_path com.sparrow.coding.JavaMain --help
9 | fi
10 |
11 | if [ $1 == '--example' ]; then
12 | java -classpath $SPARROW_CODER_HOME/$sparrow_coder_name:$class_path com.sparrow.coding.JavaMain --example
13 | fi
14 |
15 | options=$1
16 | if [ $1 == '-all' ]; then
17 | options='-b,-p,-q,-v,-cv,-pq,-cq,-bop,-d,-di,-mi,-r,-ri,-s,-c,-a,-ct'
18 | fi
19 | #将,替换为空格
20 | options_array=(${options//,/ })
21 | for option in ${options_array[@]}
22 | do
23 | java -classpath $SPARROW_CODER_HOME/$sparrow_coder_name:$class_path com.sparrow.coding.JavaMain $option $2 $3
24 | done
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/example-po/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | sparrow-bom
7 | com.sparrowzoo
8 | 1.0.5-SNAPSHOT
9 |
10 |
11 | 4.0.0
12 | example-po
13 | com.sparrowzoo.coder
14 | 1.0.0-RELEASE
15 |
16 | 8
17 | 8
18 | 1.18.36
19 |
20 |
21 |
22 |
23 | com.sparrowzoo
24 | sparrow-protocol-dao
25 |
26 |
27 | org.projectlombok
28 | lombok
29 | ${lombok.version}
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/example-po/src/main/java/com/sparrow/example/po/SparrowExample.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.example.po;
2 |
3 | import com.sparrow.protocol.FieldOrder;
4 | import com.sparrow.protocol.MethodOrder;
5 | import com.sparrow.protocol.dao.PO;
6 | import javax.persistence.Column;
7 | import javax.persistence.GeneratedValue;
8 | import javax.persistence.GenerationType;
9 | import javax.persistence.Id;
10 | import javax.persistence.Table;
11 |
12 | @Table(name = "sparrow_example")
13 | public class SparrowExample extends PO {
14 |
15 | @Id
16 | @GeneratedValue(strategy = GenerationType.IDENTITY)
17 | @Column(name = "id", columnDefinition = "int(11)")
18 | @FieldOrder(order = 0)
19 | private Long id;
20 |
21 | private String avatar;
22 |
23 | private String userName;
24 |
25 | private String password;
26 |
27 | private String age;
28 |
29 | private String email;
30 |
31 | private String confirmPassword;
32 |
33 | private String idCard;
34 |
35 | private String mobile;
36 |
37 | private String tel;
38 |
39 | private String name;
40 |
41 | public Long getId() {
42 | return this.id;
43 | }
44 |
45 | public void setId(Long id) {
46 | this.id = id;
47 | }
48 |
49 | @MethodOrder(order = 1)
50 | @Column(name = "avatar", columnDefinition = "varchar(256) DEFAULT '' COMMENT '头象'", updatable = false)
51 | public String getAvatar() {
52 | return avatar;
53 | }
54 |
55 | public void setAvatar(String avatar) {
56 | this.avatar = avatar;
57 | }
58 |
59 | @MethodOrder(order = 2)
60 | @Column(name = "user_name", columnDefinition = "varchar(32) DEFAULT '' COMMENT '用户名'", updatable = false)
61 | public String getUserName() {
62 | return userName;
63 | }
64 |
65 | public void setUserName(String userName) {
66 | this.userName = userName;
67 | }
68 |
69 | @MethodOrder(order = 3)
70 | @Column(name = "password", columnDefinition = "varchar(32) DEFAULT '' COMMENT '密码'", updatable = false)
71 | public String getPassword() {
72 | return password;
73 | }
74 |
75 | public void setPassword(String password) {
76 | this.password = password;
77 | }
78 |
79 | @MethodOrder(order = 3)
80 | @Column(name = "age", columnDefinition = "int(10) UNSIGNED DEFAULT 0 COMMENT '年龄'", updatable = false)
81 | public String getAge() {
82 | return age;
83 | }
84 |
85 | public void setAge(String age) {
86 | this.age = age;
87 | }
88 |
89 | @MethodOrder(order = 4)
90 | @Column(name = "email", columnDefinition = "varchar(256) DEFAULT '' COMMENT 'email'", updatable = false)
91 | public String getEmail() {
92 | return email;
93 | }
94 |
95 | public void setEmail(String email) {
96 | this.email = email;
97 | }
98 |
99 | @MethodOrder(order = 4)
100 | @Column(name = "confirm_password", columnDefinition = "varchar(32) DEFAULT '' COMMENT '确认密码'", updatable = false)
101 | public String getConfirmPassword() {
102 | return confirmPassword;
103 | }
104 |
105 | public void setConfirmPassword(String confirmPassword) {
106 | this.confirmPassword = confirmPassword;
107 | }
108 |
109 | @MethodOrder(order = 5)
110 | @Column(name = "id_card", columnDefinition = "varchar(32) DEFAULT '' COMMENT '身份证'", updatable = false)
111 | public String getIdCard() {
112 | return idCard;
113 | }
114 |
115 | public void setIdCard(String idCard) {
116 | this.idCard = idCard;
117 | }
118 |
119 | @MethodOrder(order = 5)
120 | @Column(name = "mobile", columnDefinition = "varchar(16) DEFAULT '' COMMENT '手机号'", updatable = false)
121 | public String getMobile() {
122 | return mobile;
123 | }
124 |
125 | public void setMobile(String mobile) {
126 | this.mobile = mobile;
127 | }
128 |
129 | @MethodOrder(order = 5)
130 | @Column(name = "tel", columnDefinition = "varchar(16) DEFAULT '' COMMENT '联系电话'", updatable = false)
131 | public String getTel() {
132 | return tel;
133 | }
134 |
135 | public void setTel(String tel) {
136 | this.tel = tel;
137 | }
138 |
139 | @MethodOrder(order = 5)
140 | @Column(name = "name", columnDefinition = "varchar(16) DEFAULT '' COMMENT '用户姓名'", updatable = false)
141 | public String getName() {
142 | return name;
143 | }
144 |
145 | public void setName(String name) {
146 | this.name = name;
147 | }
148 |
149 | }
150 |
--------------------------------------------------------------------------------
/example-po/src/main/java/com/sparrow/example/po/TableDef.java:
--------------------------------------------------------------------------------
1 | package com.sparrow.example.po;
2 |
3 | import com.sparrow.protocol.FieldOrder;
4 | import com.sparrow.protocol.dao.PO;
5 | import lombok.Data;
6 |
7 | import javax.persistence.*;
8 |
9 | @Data
10 | @Table(name = "t_table_config")
11 | public class TableDef extends PO {
12 | @Id
13 | @GeneratedValue(strategy = GenerationType.IDENTITY)
14 | @Column(name = "id", columnDefinition = "int")
15 | @FieldOrder(order = 0)
16 | private Long id;
17 | @Column(name = "table_name", updatable = false, nullable = false, unique = true, columnDefinition = "varchar(32) default '' comment '表名'")
18 | private String tableName;
19 | @Column(name = "class_name", updatable = false, nullable = false, unique = true, columnDefinition = "varchar(32) default '' comment '类名'")
20 | private String className;
21 | @Column(name = "description", nullable = false, columnDefinition = "varchar(255) default '' comment '描述'")
22 | private String description;
23 | @Column(name = "checkable", nullable = false, columnDefinition = "tinyint(1) default 0 comment '是否可勾选 0-不可 1-可'")
24 | private Boolean checkable;
25 | @Column(name = "row_menu", nullable = false, columnDefinition = "tinyint(1) default 0 comment '是否显示行操作 0-不显示 1-显示'")
26 | private Boolean rowMenu;
27 | @Column(name = "column_filter", nullable = false, columnDefinition = "tinyint(1) default 0 comment '是否显示列过滤器 0-不显示 1-显示'")
28 | private Boolean columnFilter;
29 | @Column(name = "status_command", nullable = false, columnDefinition = "tinyint(1) default 0 comment '是否显示状态命令 0-不显示 1-显示'")
30 | private Boolean statusCommand;
31 | @Column(name = "column_configs", columnDefinition = "text default '' comment '列配置'")
32 | private String columnConfigs;
33 | }
34 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | coder
8 | coder-protocol
9 | example-po
10 |
11 | com.sparrowzoo.coder
12 | sparrow-coder
13 | 1.0
14 | pom
15 |
--------------------------------------------------------------------------------
/release-note.md:
--------------------------------------------------------------------------------
1 | # 1.0.1-RELEASE
2 | 2023-04-17
3 | - 支持脚手架自动生成
4 | - 支持基于整洁架构代码CURD生成【附sparrow框架前端】
5 | - 支持严格架构到松散架构的复制迁移
6 | - 支持前端代码生成
7 | - 支持linux shell 自动生成脚本
8 | - 相关sparrow 依赖已提交中央仓库,clone 后配置相关环境变量即可编译使用
9 | - 修复部分bug
10 | - 优化部分代码
11 | - 优化部分文档 【新增release note】
12 | -
13 |
--------------------------------------------------------------------------------
/整洁架构.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sparrowzoo/sparrow-coder/80a64e1317dbb11b8572d519e491b2f4bbeef990/整洁架构.png
--------------------------------------------------------------------------------