From 740235038a1943ae608e16aa5c6e4e6b1f89f86a Mon Sep 17 00:00:00 2001 From: wangqiy <1530284170@qq.com> Date: Wed, 16 Apr 2025 19:14:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E5=99=A8?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base-common/pom.xml | 6 + .../com/agri/common/core/domain/Ztree.java | 104 ++++++ .../java/com/agri/common/dao/BaseDao.java | 75 ++++ .../com/agri/common/enums/ExportEnum.java | 42 +++ .../com/agri/common/service/BaseService.java | 141 ++++++++ .../common/service/impl/BaseServiceImpl.java | 173 +++++++++ .../java/com/agri/common/utils/PageUtil.java | 107 ++++++ .../com/agri/common/utils/web/PageResult.java | 55 +++ .../com/agri/common/utils/web/Paramap.java | 19 + .../agri/generator/domain/GenTableColumn.java | 54 ++- .../agri/generator/util/VelocityUtils.java | 243 +++++++++---- .../src/main/resources/generator.yml | 6 +- .../src/main/resources/vm/java/domain.java.vm | 129 ++----- .../src/main/resources/vm/java/dto.java.vm | 46 +++ .../main/resources/vm/java/exportdto.java.vm | 57 +++ .../src/main/resources/vm/java/mapper.java.vm | 87 +---- .../main/resources/vm/java/service.java.vm | 60 +--- .../resources/vm/java/serviceImpl.java.vm | 208 ++--------- .../main/resources/vm/java/sub-domain.java.vm | 108 +++--- .../src/main/resources/vm/java/vo.java.vm | 46 +++ .../src/main/resources/vm/xml/mapper.xml.vm | 327 +++++++++++------- 21 files changed, 1454 insertions(+), 639 deletions(-) create mode 100644 base-common/src/main/java/com/agri/common/core/domain/Ztree.java create mode 100644 base-common/src/main/java/com/agri/common/dao/BaseDao.java create mode 100644 base-common/src/main/java/com/agri/common/enums/ExportEnum.java create mode 100644 base-common/src/main/java/com/agri/common/service/BaseService.java create mode 100644 base-common/src/main/java/com/agri/common/service/impl/BaseServiceImpl.java create mode 100644 base-common/src/main/java/com/agri/common/utils/PageUtil.java create mode 100644 base-common/src/main/java/com/agri/common/utils/web/PageResult.java create mode 100644 base-common/src/main/java/com/agri/common/utils/web/Paramap.java create mode 100644 base-generator/src/main/resources/vm/java/dto.java.vm create mode 100644 base-generator/src/main/resources/vm/java/exportdto.java.vm create mode 100644 base-generator/src/main/resources/vm/java/vo.java.vm diff --git a/base-common/pom.xml b/base-common/pom.xml index 1879b83..3771874 100644 --- a/base-common/pom.xml +++ b/base-common/pom.xml @@ -150,6 +150,12 @@ aliyun-sdk-oss 3.10.2 + + + cn.hutool + hutool-all + 5.7.18 + \ No newline at end of file diff --git a/base-common/src/main/java/com/agri/common/core/domain/Ztree.java b/base-common/src/main/java/com/agri/common/core/domain/Ztree.java new file mode 100644 index 0000000..6374ed1 --- /dev/null +++ b/base-common/src/main/java/com/agri/common/core/domain/Ztree.java @@ -0,0 +1,104 @@ +package com.agri.common.core.domain; + +import java.io.Serializable; + +/** + * Ztree树结构实体类 + * + * @author ruoyi + */ +public class Ztree implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 节点ID */ + private Long id; + + /** 节点父ID */ + private Long pId; + + /** 节点名称 */ + private String name; + + /** 节点标题 */ + private String title; + + /** 是否勾选 */ + private boolean checked = false; + + /** 是否展开 */ + private boolean open = false; + + /** 是否能勾选 */ + private boolean nocheck = false; + + public Long getId() + { + return id; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getpId() + { + return pId; + } + + public void setpId(Long pId) + { + this.pId = pId; + } + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public boolean isChecked() + { + return checked; + } + + public void setChecked(boolean checked) + { + this.checked = checked; + } + + public boolean isOpen() + { + return open; + } + + public void setOpen(boolean open) + { + this.open = open; + } + + public boolean isNocheck() + { + return nocheck; + } + + public void setNocheck(boolean nocheck) + { + this.nocheck = nocheck; + } +} diff --git a/base-common/src/main/java/com/agri/common/dao/BaseDao.java b/base-common/src/main/java/com/agri/common/dao/BaseDao.java new file mode 100644 index 0000000..da8bd6b --- /dev/null +++ b/base-common/src/main/java/com/agri/common/dao/BaseDao.java @@ -0,0 +1,75 @@ +package com.agri.common.dao; + + +import java.util.List; +import java.util.Map; + +public interface BaseDao { + /** + * 通过Id查找 + * @param id + * @return + */ + public T find(Long id); + + /** + * 通过参数查找 + * @param map + * @return + */ + public T findByParam(Map map); + + /** + * 查找集合 + * @param map + * @return + */ + public List findListByParam(Map map); + + /** + * 查找所有 + * @return + */ + public List findAll(); + + /** + * 查找数量 + * @param map + * @return + */ + public Long count(Map map); + + /** + * 保存对象 + * @param t + * @return + */ + public Long insert(T t); + + /** + * 保存对象 + * @param t + * @return + */ + public Long update(T t); + + /** + * 通过属性删除 + * @param map + * @return + */ + public Long deleteByParam(Map map); + /** + * 通过id删除 + * @param ids + * @return + */ + public Long deleteByIds(Long... ids); + + /** + * 通过id删除 + * @param id + * @return + */ + public Long delete(Long id); +} diff --git a/base-common/src/main/java/com/agri/common/enums/ExportEnum.java b/base-common/src/main/java/com/agri/common/enums/ExportEnum.java new file mode 100644 index 0000000..adf7ac4 --- /dev/null +++ b/base-common/src/main/java/com/agri/common/enums/ExportEnum.java @@ -0,0 +1,42 @@ +package com.agri.common.enums; + +import cn.hutool.core.util.EnumUtil; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * 系统导出excel枚举 + */ +@Getter +public enum ExportEnum { + + + + APP_USER_EXPORT(1, "用户导出"), + ; + + private final Integer code; + + private final String desc; + + ExportEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public static Map getEnumMap() { + return EnumUtil.getEnumMap(ExportEnum.class); + } + + public static Map getExportMap() { + Map enumMap = getEnumMap(); + Map exportEnumMap = new HashMap<>(); + for (Map.Entry stringExportEnumEntry : enumMap.entrySet()) { + ExportEnum value = stringExportEnumEntry.getValue(); + exportEnumMap.put(value.getCode(), value.getDesc()); + } + return exportEnumMap; + } +} diff --git a/base-common/src/main/java/com/agri/common/service/BaseService.java b/base-common/src/main/java/com/agri/common/service/BaseService.java new file mode 100644 index 0000000..3876c08 --- /dev/null +++ b/base-common/src/main/java/com/agri/common/service/BaseService.java @@ -0,0 +1,141 @@ +package com.agri.common.service; + + +import com.agri.common.utils.web.PageResult; + +import java.util.List; +import java.util.Map; + + +public interface BaseService { + /** + * 通过Id查找 + * @param id + * @return + */ + public T find(Long id); + + /** + * 通过参数查找 + * @param map + * @return + */ + public T findByParam(Map map); + + /** + * 通过参数查找对象 + * @param propertyName + * @param propertyValue + * @return + */ + public T findByParam(String propertyName, Object propertyValue); + + /** + * 条件查询数据列表,如需分页使用findPageByParam或findListPageByParam方法 + * @param map 参数 + * @return 列表 + */ + public List findListByParam(Map map); + + + /** + * 查询分页数据 + * @param params 查询参数map + * @return PageResult + */ + PageResult findPageByParam(Map params); + + + /** + * pagehelper查询分页数据 + * @param params 查询参数map + * @return PageResult + */ + PageResult findPageByParam2(Map params); + + + /** + * 分页查询-不查询总条数,仅查询数据列表 + * @param params 查询参数map + * @return List + */ + List findListPageByParam(Map params); + + /** + * pagehelpter分页查询-不查询总条数,仅查询数据列表 + * @param params 查询参数map + * @return List + */ + List findListPageByParam2(Map params); + + /** + * 属性值和属性查找集合 + * @param propertyName + * @param propertyValue + * @return + */ + public List findListByParam(String propertyName, Object propertyValue); + + /** + * 查找数量 + * @param map + * @return + */ + public Long count(Map map); + + /** + * 保存对象 + * @param t + * @return + */ + public Long save(T t); + + /** + * 保存对象 + * @param t + * @return + */ + public Long update(T t); + /** + * 通过属性删除 + * @param map + * @return + */ + public Long deleteByParam(Map map); + + /** + * 通过属性删除 + * @param propertyName + * @param propertyValue + * @return + */ + public Long deleteByParam(String propertyName, Object propertyValue); + + /** + * 通过id删除 + * @param id + * @return + */ + public Long delete(long id); + + /** + * 通过id删除 + * @param ids + * @return + */ + public Long deleteByIds(Long... ids); + + /** + * 查找所有 + * @return + */ + public List findAll(); + + /** + * 列表 + * @param params + * @return + */ + PageResult findAll(Map params); + +} diff --git a/base-common/src/main/java/com/agri/common/service/impl/BaseServiceImpl.java b/base-common/src/main/java/com/agri/common/service/impl/BaseServiceImpl.java new file mode 100644 index 0000000..dd88cca --- /dev/null +++ b/base-common/src/main/java/com/agri/common/service/impl/BaseServiceImpl.java @@ -0,0 +1,173 @@ +package com.agri.common.service.impl; + +import com.github.pagehelper.Page; +import com.github.pagehelper.PageInfo; +import com.agri.common.dao.BaseDao; +import com.agri.common.service.BaseService; +import com.agri.common.utils.PageUtil; +import com.agri.common.utils.web.PageResult; +import org.apache.commons.collections4.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class BaseServiceImpl implements BaseService { + + @Autowired + private BaseDao baseDao; + + public void setBaseDao(BaseDao baseDao) { + this.baseDao = baseDao; + } + + @Override + public T find(Long id) { + return baseDao.find(id); + } + + @Override + public T findByParam(Map map) { + return baseDao.findByParam(map); + } + + @Override + public T findByParam(String propertyName, Object propertyValue) { + Map map = new HashMap(); + map.put(propertyName, propertyValue); + T t = findByParam(map); + return t; + } + + /** + * 条件查询数据列表,如需分页使用findPageByParam或findListPageByParam方法 + * @param params 参数,需要排序的话传map中放order参数,值为:字段值 desc 这种 + * @return 列表 + */ + @Override + public List findListByParam(Map params) { + PageUtil.adminOrderConvert(params); + return baseDao.findListByParam(params); + } + + /** + * 查询分页数据 + * @param params 查询参数map,需要排序的话传map中放order参数,值为:字段值 desc 这种 + * @return PageResult + */ + @Override + public PageResult findPageByParam(Map params) { + PageUtil.pageParamConvert(params, true); + List list = baseDao.findListByParam(params); + Long count = baseDao.count(params); + Integer pageSize = MapUtils.getInteger(params, "pageSize"); + return PageResult.buildPageResult(list, count, pageSize); + } + + /** + * pagehelper查询分页数据 + * + * @param params 查询参数map,需要排序的话传map中放order参数,值为:字段值 desc 这种 + * @return PageResult + */ + @Override + public PageResult findPageByParam2(Map params) { + try (Page page = PageUtil.startPageWithCountByParam(params)) { + baseDao.findListByParam(params); + return PageResult.buildPageResult(page.getResult(), page.getTotal(), page.getPageSize()); + } + } + + /** + * 分页查询-不查询总条数,仅查询数据列表 + * @param params 查询参数map,需要排序的话传map中放order参数,值为:字段值 desc 这种 + * @return List + */ + @Override + public List findListPageByParam(Map params) { + PageUtil.pageParamConvert(params, true); + return baseDao.findListByParam(params); + } + + /** + * pagehelpter分页查询-不查询总条数,仅查询数据列表 + * + * @param params 查询参数map,需要排序的话传map中放order参数,值为:字段值 desc 这种 + * @return List + */ + @Override + public List findListPageByParam2(Map params) { + try (Page page = PageUtil.startPageNoCountByParam(params)) { + baseDao.findListByParam(params); + return page.getResult(); + } + } + + @Override + public List findListByParam(String propertyName, Object propertyValue) { + Map map = new HashMap(); + map .put(propertyName, propertyValue); + List t = findListByParam(map); + return t; + } + + @Override + public Long count(Map map) { + return baseDao.count(map); + } + + @Override + public Long save(T t) { + return baseDao.insert(t); + } + + @Override + public Long update(T t) { + return baseDao.update(t); + } + + @Override + public Long deleteByParam(Map map) { + return baseDao.deleteByParam(map); + } + + @Override + public Long deleteByParam(String propertyName, Object propertyValue) { + Map map = new HashMap(); + map .put(propertyName, propertyValue); + Long delete = deleteByParam(map); + return delete; + } + + @Override + public Long delete(long id) { + return baseDao.delete(id); + } + + @Override + public Long deleteByIds(Long... ids) { + return baseDao.deleteByIds(ids); + } + + @Override + public List findAll() { + return baseDao.findAll(); + } + /** + * 列表 + * @param params + * @return + */ + @Override + public PageResult findAll(Map params){ + PageUtil.pageParamConvert(params, true); + List list = baseDao.findListByParam(params); + PageInfo pageInfo = new PageInfo(list); + Long count = baseDao.count(params); + Integer length = MapUtils.getInteger(params, "pageSize"); + int pages = (int) Math.ceil((double) count / (double) length); + return PageResult.builder().data(pageInfo.getList()).code(0).count(count).pages(pages).build(); + } + +} diff --git a/base-common/src/main/java/com/agri/common/utils/PageUtil.java b/base-common/src/main/java/com/agri/common/utils/PageUtil.java new file mode 100644 index 0000000..55ff9aa --- /dev/null +++ b/base-common/src/main/java/com/agri/common/utils/PageUtil.java @@ -0,0 +1,107 @@ +package com.agri.common.utils; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.MapUtils; +import org.springframework.util.CollectionUtils; + +import java.util.Map; + + +/** + * 分页参数处理工具 + * url 地址重写 ?start=1&length=10 + */ +@Slf4j +public class PageUtil { + + /** + * 分页参数,起始位置,从0开始 + */ + public static final String PAGE = "pageNum"; + /** + * 分页参数,每页数据条数 + */ + public static final String LIMIT = "pageSize"; + + /** + * 转换并校验分页参数
+ * mybatis中limit #{start, JdbcType=INTEGER}, #{length, + * JdbcType=INTEGER}里的类型转换貌似失效
+ * 我们这里先把他转成Integer的类型 + * + * @param params + * @param required 分页参数是否是必填 + */ + public static void pageParamConvert(Map params, boolean required) { + if (required) { // 分页参数必填时,校验参数 + if (params == null || !params.containsKey(PAGE) || !params.containsKey(LIMIT)) { + throw new IllegalArgumentException("请检查分页参数," + PAGE + "," + LIMIT); + } + } + if (!CollectionUtils.isEmpty(params)) { + if (params.containsKey(PAGE)) { + Integer start = MapUtils.getInteger(params, PAGE); + Integer length = MapUtils.getInteger(params, LIMIT); + if (start > 0) { + params.put(PAGE, (start - 1) * length); + } + } + + if (params.containsKey(LIMIT)) { + Integer length = MapUtils.getInteger(params, LIMIT); + if (length < 0) { + length = 0; + } + params.put(LIMIT, length); + } + + adminOrderConvert(params); + } + } + + public static void adminOrderConvert(Map params) { + if (params != null && !params.containsKey("order")) { + if (params.containsKey("orderByColumn") && params.containsKey("isAsc")) { + String orderByColumn = MapUtils.getString(params, "orderByColumn"); + String isAsc = MapUtils.getString(params, "isAsc"); + if (StrUtil.isNotBlank(orderByColumn) && StrUtil.isNotBlank(isAsc)) { + params.put("order", StrUtil.toUnderlineCase(orderByColumn) + " " + isAsc); + } + } + } + } + + public static Page startPageWithCountByParam(Map params) { + return getTs(params, true); + } + + public static Page startPageNoCountByParam(Map params) { + return getTs(params, false); + } + + private static Page getTs(Map params, boolean isCount) { + adminOrderConvert(params); + Integer pageSize = MapUtils.getInteger(params, "pageSize"); + Integer pageNum = MapUtils.getInteger(params, "pageNum"); + Page page = PageHelper.startPage(pageNum, pageSize, isCount, true, false); + String orderBy = MapUtils.getString(params, "order"); + if (!StringUtils.isEmpty(orderBy)) { + String orderByTablePrefix = MapUtil.getStr(params, "orderByTablePrefix"); + if (!StrUtil.isNotBlank(orderByTablePrefix)) { + page.setOrderBy(orderBy); + } else { + orderBy = orderByTablePrefix.concat(".").concat(orderBy); + page.setOrderBy(orderBy); + } + } + // 清空参数中的pageSize, pageNum, order参数,pageHelper会动态代理补全这些参数 + params.put("pageSize", null); + params.put("pageNum", null); + params.put("order", null); + return page; + } +} diff --git a/base-common/src/main/java/com/agri/common/utils/web/PageResult.java b/base-common/src/main/java/com/agri/common/utils/web/PageResult.java new file mode 100644 index 0000000..851f0c9 --- /dev/null +++ b/base-common/src/main/java/com/agri/common/utils/web/PageResult.java @@ -0,0 +1,55 @@ +package com.agri.common.utils.web; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + + +/** + + * 分页实体类 + * total 总数 + * code 是否成功 + * data 当前页结果集 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PageResult implements Serializable { + + private static final long serialVersionUID = -275582248840137389L; + + /** + * 总条数 + */ + private Long count; + + /** + * 总的页数 + */ + private Integer pages; + + /** + * code + */ + private Integer code; + + /** + * 数据列表 + */ + private List data; + + public static PageResult buildPageResult(List list, Long count, Integer pageSize) { + Integer pages = (int) Math.ceil((double) count / (double) pageSize); + return PageResult.builder().data(list) + .code(0) + .count(count) + .pages(pages) + .build(); + } +} diff --git a/base-common/src/main/java/com/agri/common/utils/web/Paramap.java b/base-common/src/main/java/com/agri/common/utils/web/Paramap.java new file mode 100644 index 0000000..f6bdeca --- /dev/null +++ b/base-common/src/main/java/com/agri/common/utils/web/Paramap.java @@ -0,0 +1,19 @@ +package com.agri.common.utils.web; +import java.util.HashMap; +import java.util.Map; + +public class Paramap extends HashMap implements Map { + private static final long serialVersionUID = 1L; + + private Paramap() { + } + + public static Paramap create() { + return new Paramap(); + } + + public Paramap put(String name, Object value) { + super.put(name, value); + return this; + } +} diff --git a/base-generator/src/main/java/com/agri/generator/domain/GenTableColumn.java b/base-generator/src/main/java/com/agri/generator/domain/GenTableColumn.java index 052d2f9..8d9eeae 100644 --- a/base-generator/src/main/java/com/agri/generator/domain/GenTableColumn.java +++ b/base-generator/src/main/java/com/agri/generator/domain/GenTableColumn.java @@ -3,14 +3,14 @@ package com.agri.generator.domain; import javax.validation.constraints.NotBlank; import com.agri.common.core.domain.BaseEntity; import com.agri.common.utils.StringUtils; +import com.alibaba.fastjson.JSONObject; /** * 代码生成业务字段表 gen_table_column * * @author ruoyi */ -public class GenTableColumn extends BaseEntity -{ +public class GenTableColumn extends BaseEntity { private static final long serialVersionUID = 1L; /** 编号 */ @@ -59,7 +59,7 @@ public class GenTableColumn extends BaseEntity /** 查询方式(EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围) */ private String queryType; - /** 显示类型(input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件、image图片上传控件、upload文件上传控件、editor富文本控件) */ + /** 显示类型(input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件、upload上传控件、summernote富文本控件) */ private String htmlType; /** 字典类型 */ @@ -348,6 +348,54 @@ public class GenTableColumn extends BaseEntity return StringUtils.equalsAnyIgnoreCase(javaField, "parentId", "orderNum", "remark"); } + /** + * 用户可见的注释 + */ + private String visibleColumnComment; + + public String getVisibleColumnComment() { + return visibleColumnComment; + } + + public void setVisibleColumnComment(String visibleColumnComment) { + this.visibleColumnComment = visibleColumnComment; + } + /** + * 字段字典json + */ + private String columnDictJson; + + public String getColumnDictJson() { + return columnDictJson; + } + + public void setColumnDictJson(String columnDictJson) { + this.columnDictJson = columnDictJson; + } + + private JSONObject columnCommentDict; + + public JSONObject getColumnCommentDict() { + return columnCommentDict; + } + + public void setColumnCommentDict(JSONObject columnCommentDict) { + this.columnCommentDict = columnCommentDict; + } + + /** + * 首字母大写,例:UserName + */ + private String upJavaField; + + public String getUpJavaField() { + return upJavaField; + } + + public void setUpJavaField(String upJavaField) { + this.upJavaField = upJavaField; + } + public String readConverterExp() { String remarks = StringUtils.substringBetween(this.columnComment, "(", ")"); diff --git a/base-generator/src/main/java/com/agri/generator/util/VelocityUtils.java b/base-generator/src/main/java/com/agri/generator/util/VelocityUtils.java index eac9635..72f41b4 100644 --- a/base-generator/src/main/java/com/agri/generator/util/VelocityUtils.java +++ b/base-generator/src/main/java/com/agri/generator/util/VelocityUtils.java @@ -3,6 +3,14 @@ package com.agri.generator.util; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReUtil; +import cn.hutool.core.util.StrUtil; +import com.agri.generator.config.GenConfig; +import com.alibaba.fastjson.JSON; import org.apache.velocity.VelocityContext; import com.alibaba.fastjson.JSONObject; import com.agri.common.constant.GenConstants; @@ -16,14 +24,16 @@ import com.agri.generator.domain.GenTableColumn; * * @author ruoyi */ -public class VelocityUtils -{ +public class VelocityUtils { /** 项目空间路径 */ private static final String PROJECT_PATH = "main/java"; /** mybatis空间路径 */ private static final String MYBATIS_PATH = "main/resources/mapper"; + /** html空间路径 */ + private static final String TEMPLATES_PATH = "main/resources/templates"; + /** 默认上级菜单,系统工具 */ private static final String DEFAULT_PARENT_MENU_ID = "3"; @@ -32,33 +42,60 @@ public class VelocityUtils * * @return 模板列表 */ - public static VelocityContext prepareContext(GenTable genTable) - { - String moduleName = genTable.getModuleName(); + public static VelocityContext prepareContext(GenTable genTable) { String businessName = genTable.getBusinessName(); String packageName = genTable.getPackageName(); + String entityPrefix = packageName + ".domain"; + String pagePrefix = genTable.getModuleName() + "/" + genTable.getBusinessName(); + String moduleName = genTable.getModuleName(); + String controllerPackageName = "com.agri.web.controller.business"; String tplCategory = genTable.getTplCategory(); String functionName = genTable.getFunctionName(); VelocityContext velocityContext = new VelocityContext(); + velocityContext.put("entityPrefix", entityPrefix); velocityContext.put("tplCategory", genTable.getTplCategory()); velocityContext.put("tableName", genTable.getTableName()); velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "【请填写功能名称】"); velocityContext.put("ClassName", genTable.getClassName()); velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName())); - velocityContext.put("moduleName", genTable.getModuleName()); - velocityContext.put("BusinessName", StringUtils.capitalize(genTable.getBusinessName())); + velocityContext.put("moduleName", moduleName); velocityContext.put("businessName", genTable.getBusinessName()); velocityContext.put("basePackage", getPackagePrefix(packageName)); velocityContext.put("packageName", packageName); + velocityContext.put("pagePrefix", pagePrefix); + velocityContext.put("controllerPackageName", controllerPackageName); velocityContext.put("author", genTable.getFunctionAuthor()); velocityContext.put("datetime", DateUtils.getDate()); velocityContext.put("pkColumn", genTable.getPkColumn()); velocityContext.put("importList", getImportList(genTable)); velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName)); - velocityContext.put("columns", genTable.getColumns()); + List columns = genTable.getColumns(); + velocityContext.put("columns", columns); + boolean hasDate = false; + boolean hasBigDecimal = false; + for (GenTableColumn column : columns) { + + if (column.getJavaType().equals("Date")) { + hasDate = true; + } + if (column.getJavaType().equals("BigDecimal")) { + hasBigDecimal = true; + } + column.setUpJavaField(StrUtil.upperFirst(column.getJavaField())); + String columnComment = column.getColumnComment(); + column.setVisibleColumnComment(getVisibleColumnComment(columnComment)); + Map columnCommentDict = getColumnDict(columnComment); + if (!columnCommentDict.isEmpty()) { + column.setColumnDictJson(JSON.toJSONString(columnCommentDict)); + } + if (StrUtil.isNotBlank(column.getColumnDictJson())) { + column.setColumnCommentDict(JSON.parseObject(column.getColumnDictJson())); + } + } + velocityContext.put("hasDate", hasDate); + velocityContext.put("hasBigDecimal", hasBigDecimal); velocityContext.put("table", genTable); - velocityContext.put("dicts", getDicts(genTable)); setMenuVelocityContext(velocityContext, genTable); if (GenConstants.TPL_TREE.equals(tplCategory)) { @@ -71,6 +108,30 @@ public class VelocityUtils return velocityContext; } + /** + * 获取注释中的字典,如:1:男,2-女 -》 {1:男,2:女} + * @param columnComment 列注释 + * @return / + */ + private static Map getColumnDict(String columnComment) { + List nameList = ReUtil.findAll("(?<=\\d\\-?)([^\\d]+)(?!\\d)?", columnComment, 0) + .stream().map(item -> { + item = ReUtil.replaceAll(item, "[\\s::=\\-,,\\(\\)()|\\d]", ""); + return item; + }).collect(Collectors.toList()); + List numberList = ReUtil.findAll("(\\d)", columnComment, 0); + return CollUtil.zip(numberList, nameList); + } + + /** + * 获取用户友好的列注释 + * @param columnComment 列注释 + * @return / + */ + private static String getVisibleColumnComment(String columnComment) { + return ReUtil.replaceAll(columnComment, "([\\s::=\\-,,\\(\\)()|\\d].*)", ""); + } + public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) { String options = genTable.getOptions(); @@ -122,7 +183,7 @@ public class VelocityUtils /** * 获取模板信息 * - * @return 模板列表f + * @return 模板列表 */ public static List getTemplateList(String tplCategory) { @@ -132,22 +193,27 @@ public class VelocityUtils templates.add("vm/java/service.java.vm"); templates.add("vm/java/serviceImpl.java.vm"); templates.add("vm/java/controller.java.vm"); + templates.add("vm/java/vo.java.vm"); + templates.add("vm/java/dto.java.vm"); + templates.add("vm/java/exportdto.java.vm"); templates.add("vm/xml/mapper.xml.vm"); - templates.add("vm/sql/sql.vm"); - templates.add("vm/js/api.js.vm"); if (GenConstants.TPL_CRUD.equals(tplCategory)) { - templates.add("vm/vue/index.vue.vm"); + templates.add("vm/html/list.html.vm"); } else if (GenConstants.TPL_TREE.equals(tplCategory)) { - templates.add("vm/vue/index-tree.vue.vm"); + templates.add("vm/html/tree.html.vm"); + templates.add("vm/html/list-tree.html.vm"); } else if (GenConstants.TPL_SUB.equals(tplCategory)) { - templates.add("vm/vue/index.vue.vm"); + templates.add("vm/html/list.html.vm"); templates.add("vm/java/sub-domain.java.vm"); } + templates.add("vm/html/add.html.vm"); + templates.add("vm/html/edit.html.vm"); + templates.add("vm/sql/sql.vm"); return templates; } @@ -156,12 +222,37 @@ public class VelocityUtils */ public static String getFileName(String template, GenTable genTable) { + template = template.substring(template.lastIndexOf("/") + 1); // 文件名称 String fileName = ""; // 包路径 String packageName = genTable.getPackageName(); // 模块名 String moduleName = genTable.getModuleName(); +// boolean isSupplyBusiness = false; +// if (genTable.getTableName().startsWith("t_supply") || genTable.getTableName().startsWith("t_purchase")) { +// isSupplyBusiness = true; +// } +// if (isSupplyBusiness) { +// packageName = "com.shidian.supply"; +// } +// boolean isTeamBuy = false; +// if (genTable.getTableName().startsWith("t_team")) { +// isTeamBuy = true; +// } +// if (isTeamBuy) { +// packageName = "com.shidian.teambuy"; +// } +// // 是否是心选业务 +// boolean isXinxuan = false; +// if (genTable.getTableName().startsWith("t_xinxuan")) { +// isXinxuan = true; +// } +// if (isXinxuan) { +// packageName = "com.shidian.xinxuan"; +// moduleName = "xinxuan"; +// } + // 大写类名 String className = genTable.getClassName(); // 业务名称 @@ -169,55 +260,101 @@ public class VelocityUtils String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/"); String mybatisPath = MYBATIS_PATH + "/" + moduleName; - String vuePath = "vue"; + String htmlPath = TEMPLATES_PATH + "/" + moduleName + "/" + businessName; - if (template.contains("domain.java.vm")) + if (template.equals("domain.java.vm")) { fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); +// if (isSupplyBusiness || isTeamBuy || isXinxuan) { +// fileName = StringUtils.format("{}/domain/entity/{}.java", javaPath, className); +// } } - if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) + if (template.equals("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) { fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); +// if (isSupplyBusiness || isTeamBuy || isXinxuan) { +// fileName = StringUtils.format("{}/domain/entity/{}.java", javaPath, genTable.getSubTable().getClassName()); +// } } - else if (template.contains("mapper.java.vm")) + else if (template.equals("mapper.java.vm")) { fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); } - else if (template.contains("service.java.vm")) + else if (template.equals("service.java.vm")) { fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); } - else if (template.contains("serviceImpl.java.vm")) + else if (template.equals("serviceImpl.java.vm")) { fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); } - else if (template.contains("controller.java.vm")) + else if (template.equals("controller.java.vm")) { - fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); + String controllerJavaPath = PROJECT_PATH + "/" + "com/shidian/web/controller/business"; +// if (isSupplyBusiness) { +// controllerJavaPath = PROJECT_PATH + "/" + "com/shidian/web/controller/business/supply"; +// } +// if (isTeamBuy) { +// controllerJavaPath = PROJECT_PATH + "/" + "com/shidian/web/controller/business/teambuy"; +// } +// if (isXinxuan) { +// controllerJavaPath = PROJECT_PATH + "/" + "com/shidian/web/controller/xinxuan"; +// } + fileName = StringUtils.format("{}/{}Controller.java", controllerJavaPath, className); } - else if (template.contains("mapper.xml.vm")) + else if (template.equals("mapper.xml.vm")) { fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); +// if (isSupplyBusiness) { +// fileName = StringUtils.format("{}/{}Mapper.xml", "supply", className); +// } else if (isTeamBuy) { +// fileName = StringUtils.format("{}/{}Mapper.xml", "teambuy", className); +// } else if (isXinxuan) { +// fileName = StringUtils.format("{}/{}Mapper.xml", "xinxuan", className); +// } } - else if (template.contains("sql.vm")) + else if (template.equals("list.html.vm")) + { + fileName = StringUtils.format("{}/{}.html", htmlPath, businessName); + } + else if (template.equals("list-tree.html.vm")) + { + fileName = StringUtils.format("{}/{}.html", htmlPath, businessName); + } + else if (template.equals("tree.html.vm")) + { + fileName = StringUtils.format("{}/tree.html", htmlPath); + } + else if (template.equals("add.html.vm")) + { + fileName = StringUtils.format("{}/add.html", htmlPath); + } + else if (template.equals("edit.html.vm")) + { + fileName = StringUtils.format("{}/edit.html", htmlPath); + } + else if (template.equals("sql.vm")) { fileName = businessName + "Menu.sql"; } - else if (template.contains("api.js.vm")) - { - fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); - } - else if (template.contains("index.vue.vm")) - { - fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); - } - else if (template.contains("index-tree.vue.vm")) - { - fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); - } return fileName; } + /** + * 获取项目文件路径 + * + * @return 路径 + */ + public static String getProjectPath() + { + String packageName = GenConfig.getPackageName(); + StringBuffer projectPath = new StringBuffer(); + projectPath.append("main/java/"); + projectPath.append(packageName.replace(".", "/")); + projectPath.append("/"); + return projectPath.toString(); + } + /** * 获取包前缀 * @@ -233,7 +370,7 @@ public class VelocityUtils /** * 根据列类型获取导入包 - * + * * @param genTable 业务表对象 * @return 返回需要导入的包列表 */ @@ -261,28 +398,6 @@ public class VelocityUtils return importList; } - /** - * 根据列类型获取字典组 - * - * @param genTable 业务表对象 - * @return 返回字典组 - */ - public static String getDicts(GenTable genTable) - { - List columns = genTable.getColumns(); - List dicts = new ArrayList(); - for (GenTableColumn column : columns) - { - if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( - column.getHtmlType(), - new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX })) - { - dicts.add("'" + column.getDictType() + "'"); - } - } - return StringUtils.join(dicts, ", "); - } - /** * 获取权限前缀 * @@ -297,8 +412,6 @@ public class VelocityUtils /** * 获取上级菜单ID字段 - * - * @param paramsObj 生成其他选项 * @return 上级菜单ID字段 */ public static String getParentMenuId(JSONObject paramsObj) @@ -313,8 +426,6 @@ public class VelocityUtils /** * 获取树编码 - * - * @param paramsObj 生成其他选项 * @return 树编码 */ public static String getTreecode(JSONObject paramsObj) @@ -328,8 +439,6 @@ public class VelocityUtils /** * 获取树父编码 - * - * @param paramsObj 生成其他选项 * @return 树父编码 */ public static String getTreeParentCode(JSONObject paramsObj) @@ -343,8 +452,6 @@ public class VelocityUtils /** * 获取树名称 - * - * @param paramsObj 生成其他选项 * @return 树名称 */ public static String getTreeName(JSONObject paramsObj) diff --git a/base-generator/src/main/resources/generator.yml b/base-generator/src/main/resources/generator.yml index 24c6262..ad36446 100644 --- a/base-generator/src/main/resources/generator.yml +++ b/base-generator/src/main/resources/generator.yml @@ -1,10 +1,10 @@ # 代码生成 gen: # 作者 - author: nealtsiao + author: wqy # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool - packageName: com.agri.agriculture + packageName: com.agri.business # 自动去除表前缀,默认是false autoRemovePre: true # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) - tablePrefix: agriculture_ \ No newline at end of file + tablePrefix: t_ \ No newline at end of file diff --git a/base-generator/src/main/resources/vm/java/domain.java.vm b/base-generator/src/main/resources/vm/java/domain.java.vm index c408bcc..dec7075 100644 --- a/base-generator/src/main/resources/vm/java/domain.java.vm +++ b/base-generator/src/main/resources/vm/java/domain.java.vm @@ -1,105 +1,44 @@ -package ${packageName}.domain; +package ${entityPrefix}; -#foreach ($import in $importList) -import ${import}; -#end -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import com.agri.common.annotation.Excel; -#if($table.crud || $table.sub) -import com.agri.common.core.domain.BaseEntity; -#elseif($table.tree) -import com.agri.common.core.domain.TreeEntity; -#end +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + #if(${hasBigDecimal}) + import java.math.BigDecimal; + #end +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonInclude; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; /** - * ${functionName}对象 ${tableName} - * + * ${functionName} + * * @author ${author} * @date ${datetime} */ -#if($table.crud || $table.sub) -#set($Entity="BaseEntity") -#elseif($table.tree) -#set($Entity="TreeEntity") -#end -public class ${ClassName} extends ${Entity} -{ + +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "${tableName}") +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value="${functionName}",description="${functionName}") +public class ${ClassName} implements Serializable { + private static final long serialVersionUID = 1L; + #foreach ($column in $columns) -#foreach ($column in $columns) -#if(!$table.isSuperColumn($column.javaField)) - /** $column.columnComment */ -#if($column.list) -#set($parentheseIndex=$column.columnComment.indexOf("(")) -#if($parentheseIndex != -1) -#set($comment=$column.columnComment.substring(0, $parentheseIndex)) -#else -#set($comment=$column.columnComment) -#end -#if($parentheseIndex != -1) - @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") -#elseif($column.javaType == 'Date') - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") -#else - @Excel(name = "${comment}") -#end -#end - private $column.javaType $column.javaField; + /** $column.columnComment */ + #if($column.columnName == $pk.columnName) + #end + @ApiModelProperty(value = "$column.columnComment") + private $column.javaType ${column.javaField}; + #end -#end -#end -#if($table.sub) - /** $table.subTable.functionName信息 */ - private List<${subClassName}> ${subclassName}List; - -#end -#foreach ($column in $columns) -#if(!$table.isSuperColumn($column.javaField)) -#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) -#set($AttrName=$column.javaField) -#else -#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) -#end - public void set${AttrName}($column.javaType $column.javaField) - { - this.$column.javaField = $column.javaField; - } - - public $column.javaType get${AttrName}() - { - return $column.javaField; - } -#end -#end - -#if($table.sub) - public List<${subClassName}> get${subClassName}List() - { - return ${subclassName}List; - } - - public void set${subClassName}List(List<${subClassName}> ${subclassName}List) - { - this.${subclassName}List = ${subclassName}List; - } - -#end - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) -#foreach ($column in $columns) -#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) -#set($AttrName=$column.javaField) -#else -#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) -#end - .append("${column.javaField}", get${AttrName}()) -#end -#if($table.sub) - .append("${subclassName}List", get${subClassName}List()) -#end - .toString(); - } } diff --git a/base-generator/src/main/resources/vm/java/dto.java.vm b/base-generator/src/main/resources/vm/java/dto.java.vm new file mode 100644 index 0000000..5643c50 --- /dev/null +++ b/base-generator/src/main/resources/vm/java/dto.java.vm @@ -0,0 +1,46 @@ +package ${packageName}.domain.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + #if(${hasBigDecimal}) + import java.math.BigDecimal; + #end +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonInclude; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * ${functionName} + * + * @author ${author} + * @date ${datetime} + */ + +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "${tableName}" ) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "${functionName}" , description = "${functionName}" ) +public class ${ClassName}Dto implements Serializable { + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) +#if($column.javaField != "createBy" && $column.javaField != "createTime" && $column.javaField != + "updateBy" && $column.javaField != "updateTime") + /** $column.columnComment */ + #if($column.columnName == $pk.columnName) + #end + @ApiModelProperty(value = "$column.columnComment") + private $column.javaType ${column.javaField}; + +#end +#end +} diff --git a/base-generator/src/main/resources/vm/java/exportdto.java.vm b/base-generator/src/main/resources/vm/java/exportdto.java.vm new file mode 100644 index 0000000..5712217 --- /dev/null +++ b/base-generator/src/main/resources/vm/java/exportdto.java.vm @@ -0,0 +1,57 @@ +package ${packageName}.domain.excel.expt; + +import com.agri.common.annotation.Excel; +import lombok.Data; +#if(${hasBigDecimal}) +import java.math.BigDecimal; +#end +#if(${hasDate}) +import java.util.Date; +#end + +/** + * ${functionName}导出实体 + */ +@Data +public class ${ClassName}ExportDto { +#foreach ($column in $columns) + #if($column.list) + #set($visibleComment=$column.visibleColumnComment) + #set($comment=$column.columnComment) + #set($commentDict=$column.columnCommentDict) + + #if($column.columnName == $pk.columnName) + + #elseif($column.htmlType == 'datetime') + /** $comment */ + @Excel(name = "${visibleComment}", dateFormat = "yyyy-MM-dd HH:mm:ss") + private $column.javaType ${column.javaField}; + + #elseif($commentDict) + /** $comment */ + @Excel(name = "${visibleComment}", readConverterExp = "#foreach($mapEntry in $commentDict.entrySet())${mapEntry.key}=${mapEntry.value}#if($foreach.hasNext),#end#end ") + private $column.javaType $column.javaField; + + #else + /** $comment */ + @Excel(name = "${visibleComment}") + private $column.javaType $column.javaField; + #end + #end +#end + + public static List<${ClassName}ExportDto> build(List<${ClassName}> list) { + List<${ClassName}ExportDto> resultList = new ArrayList<>(); + for (${ClassName} ${className} : list) { + ${ClassName}ExportDto result = new ${ClassName}ExportDto(); + #foreach($column in $columns) + #if($column.list) + result.set${column.upJavaField}(${className}.get${column.upJavaField}()); + #end + #end + resultList.add(result); + } + return resultList; + } + +} diff --git a/base-generator/src/main/resources/vm/java/mapper.java.vm b/base-generator/src/main/resources/vm/java/mapper.java.vm index 7e7d7c2..b43b6a9 100644 --- a/base-generator/src/main/resources/vm/java/mapper.java.vm +++ b/base-generator/src/main/resources/vm/java/mapper.java.vm @@ -1,91 +1,20 @@ package ${packageName}.mapper; import java.util.List; -import ${packageName}.domain.${ClassName}; +import com.agri.common.dao.BaseDao; +import ${entityPrefix}.${ClassName}; +import org.apache.ibatis.annotations.Mapper; #if($table.sub) -import ${packageName}.domain.${subClassName}; +import ${entityPrefix}.${subClassName}; #end /** * ${functionName}Mapper接口 - * + * * @author ${author} - * @date ${datetime} + * @since ${datetime} */ -public interface ${ClassName}Mapper -{ - /** - * 查询${functionName} - * - * @param ${pkColumn.javaField} ${functionName}主键 - * @return ${functionName} - */ - public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); +@Mapper +public interface ${ClassName}Mapper extends BaseDao<${ClassName}> { - /** - * 查询${functionName}列表 - * - * @param ${className} ${functionName} - * @return ${functionName}集合 - */ - public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); - - /** - * 新增${functionName} - * - * @param ${className} ${functionName} - * @return 结果 - */ - public int insert${ClassName}(${ClassName} ${className}); - - /** - * 修改${functionName} - * - * @param ${className} ${functionName} - * @return 结果 - */ - public int update${ClassName}(${ClassName} ${className}); - - /** - * 删除${functionName} - * - * @param ${pkColumn.javaField} ${functionName}主键 - * @return 结果 - */ - public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); - - /** - * 批量删除${functionName} - * - * @param ${pkColumn.javaField}s 需要删除的数据主键集合 - * @return 结果 - */ - public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); -#if($table.sub) - - /** - * 批量删除${subTable.functionName} - * - * @param ${pkColumn.javaField}s 需要删除的数据主键集合 - * @return 结果 - */ - public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); - - /** - * 批量新增${subTable.functionName} - * - * @param ${subclassName}List ${subTable.functionName}列表 - * @return 结果 - */ - public int batch${subClassName}(List<${subClassName}> ${subclassName}List); - - - /** - * 通过${functionName}主键删除${subTable.functionName}信息 - * - * @param ${pkColumn.javaField} ${functionName}ID - * @return 结果 - */ - public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField}); -#end } diff --git a/base-generator/src/main/resources/vm/java/service.java.vm b/base-generator/src/main/resources/vm/java/service.java.vm index 264882b..ab73117 100644 --- a/base-generator/src/main/resources/vm/java/service.java.vm +++ b/base-generator/src/main/resources/vm/java/service.java.vm @@ -1,61 +1,25 @@ package ${packageName}.service; import java.util.List; -import ${packageName}.domain.${ClassName}; +import ${entityPrefix}.${ClassName}; + #if($table.tree) + import com.agri.common.core.domain.Ztree; + #end +import com.agri.common.service.BaseService; /** * ${functionName}Service接口 - * + * * @author ${author} - * @date ${datetime} + * @since ${datetime} */ -public interface I${ClassName}Service -{ - /** - * 查询${functionName} - * - * @param ${pkColumn.javaField} ${functionName}主键 - * @return ${functionName} - */ - public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); +public interface I${ClassName}Service extends BaseService<${ClassName}> { /** - * 查询${functionName}列表 - * - * @param ${className} ${functionName} - * @return ${functionName}集合 + * 导出${functionName}数据列表 + * @param list 数据列表 + * @param sourceType 1-总后台 2-集货中心 3-基地供应商后台 */ - public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + void export${ClassName}Excel(List<${ClassName}> list, Integer sourceType); - /** - * 新增${functionName} - * - * @param ${className} ${functionName} - * @return 结果 - */ - public int insert${ClassName}(${ClassName} ${className}); - - /** - * 修改${functionName} - * - * @param ${className} ${functionName} - * @return 结果 - */ - public int update${ClassName}(${ClassName} ${className}); - - /** - * 批量删除${functionName} - * - * @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合 - * @return 结果 - */ - public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); - - /** - * 删除${functionName}信息 - * - * @param ${pkColumn.javaField} ${functionName}主键 - * @return 结果 - */ - public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); } diff --git a/base-generator/src/main/resources/vm/java/serviceImpl.java.vm b/base-generator/src/main/resources/vm/java/serviceImpl.java.vm index 5630ba7..0109183 100644 --- a/base-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/base-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -1,195 +1,59 @@ package ${packageName}.service.impl; import java.util.List; -import com.agri.common.annotation.TenantScope; -#foreach ($column in $columns) -#if($column.javaField == 'createTime' || $column.javaField == 'updateTime') -import com.agri.common.utils.DateUtils; -#break -#end -#end -#foreach ($column in $columns) -#if($column.javaField == 'createBy' || $column.javaField == 'updateBy') -import com.agri.common.utils.SecurityUtils; -#break -#end -#end + #if($table.tree) + import java.util.ArrayList; + import com.agri.common.core.domain.Ztree; + #end + #foreach ($column in $columns) + #if($column.javaField == 'createTime' || $column.javaField == 'updateTime') + #break + #end + #end import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -#if($table.sub) -import java.util.ArrayList; -import com.agri.common.utils.StringUtils; -import org.springframework.transaction.annotation.Transactional; -import ${packageName}.domain.${subClassName}; -#end + #if($table.sub) + import java.util.ArrayList; + import com.agri.common.utils.StringUtils; + import org.springframework.transaction.annotation.Transactional; + import ${entityPrefix}.${subClassName}; + #end import ${packageName}.mapper.${ClassName}Mapper; -import ${packageName}.domain.${ClassName}; +import ${entityPrefix}.${ClassName}; import ${packageName}.service.I${ClassName}Service; +import com.agri.common.service.impl.BaseServiceImpl; +import com.agri.common.enums.ExportEnum; /** * ${functionName}Service业务层处理 - * + * * @author ${author} - * @date ${datetime} + * @since ${datetime} */ @Service -public class ${ClassName}ServiceImpl implements I${ClassName}Service -{ +public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}> implements I${ClassName}Service { + @Autowired private ${ClassName}Mapper ${className}Mapper; - /** - * 查询${functionName} - * - * @param ${pkColumn.javaField} ${functionName}主键 - * @return ${functionName} - */ - @Override - public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) - { - return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); - } + // @Autowired + // private IExportService exportService; /** - * 查询${functionName}列表 - * - * @param ${className} ${functionName} - * @return ${functionName} + * 导出${functionName}数据列表 + * @param list 数据列表 + * @param sourceType 1-总后台 2-集货中心 3-基地供应商后台 */ @Override - @TenantScope - public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) - { - return ${className}Mapper.select${ClassName}List(${className}); - } - - /** - * 新增${functionName} - * - * @param ${className} ${functionName} - * @return 结果 - */ -#if($table.sub) - @Transactional -#end - @Override - public int insert${ClassName}(${ClassName} ${className}) - { -#foreach ($column in $columns) - #if($column.javaField == 'createBy') - ${className}.setCreateBy(SecurityUtils.getUserId().toString()); - #end -#if($column.javaField == 'createTime') - ${className}.setCreateTime(DateUtils.getNowDate()); -#end - #if($column.javaField == 'tenantId') - ${className}.setTenantId(SecurityUtils.getTenantId()); - #end - #if($column.javaField == 'baseId') - ${className}.setBaseId(SecurityUtils.getBaseId()); - #end - #if($column.javaField == 'deptId') - ${className}.setDeptId(SecurityUtils.getDeptId()); - #end - #if($column.javaField == 'userId') - ${className}.setUserId(SecurityUtils.getUserId()); - #end -#end -#if($table.sub) - int rows = ${className}Mapper.insert${ClassName}(${className}); - insert${subClassName}(${className}); - return rows; -#else - return ${className}Mapper.insert${ClassName}(${className}); -#end - } - - /** - * 修改${functionName} - * - * @param ${className} ${functionName} - * @return 结果 - */ -#if($table.sub) - @Transactional -#end - @Override - public int update${ClassName}(${ClassName} ${className}) - { -#foreach ($column in $columns) - #if($column.javaField == 'updateBy') - ${className}.setUpdateBy(SecurityUtils.getUserId().toString()); - #end -#if($column.javaField == 'updateTime') - ${className}.setUpdateTime(DateUtils.getNowDate()); -#end -#end -#if($table.sub) - ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}()); - insert${subClassName}(${className}); -#end - return ${className}Mapper.update${ClassName}(${className}); - } - - /** - * 批量删除${functionName} - * - * @param ${pkColumn.javaField}s 需要删除的${functionName}主键 - * @return 结果 - */ -#if($table.sub) - @Transactional -#end - @Override - public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) - { -#if($table.sub) - ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s); -#end - return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s); - } - - /** - * 删除${functionName}信息 - * - * @param ${pkColumn.javaField} ${functionName}主键 - * @return 结果 - */ -#if($table.sub) - @Transactional -#end - @Override - public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) - { -#if($table.sub) - ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField}); -#end - return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); - } -#if($table.sub) - - /** - * 新增${subTable.functionName}信息 - * - * @param ${className} ${functionName}对象 - */ - public void insert${subClassName}(${ClassName} ${className}) - { - List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List(); - ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}(); - if (StringUtils.isNotNull(${subclassName}List)) - { - List<${subClassName}> list = new ArrayList<${subClassName}>(); - for (${subClassName} ${subclassName} : ${subclassName}List) - { - ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField}); - list.add(${subclassName}); - } - if (list.size() > 0) - { - ${className}Mapper.batch${subClassName}(list); - } + public void export${ClassName}Excel(List<${ClassName}> list, Integer sourceType) { + /*if (list == null || list.size() == 0) { + throw new BusinessException("没有要导出的记录"); } + List<${ClassName}ExportDto> exportList = ${ClassName}ExportDto.build(list); + ExcelUtil<${ClassName}ExportDto> util = new ExcelUtil<>(${ClassName}ExportDto.class); + String sheetName = ExportEnum.APP_USER_EXPORT.getDesc(); + int code = ExportEnum.APP_USER_EXPORT.getCode() + Workbook workHook = util.getWorkHook(exportList, sheetName); + exportService.exportRecord(workHook, sheetName, code, sourceType);*/ } -#end } diff --git a/base-generator/src/main/resources/vm/java/sub-domain.java.vm b/base-generator/src/main/resources/vm/java/sub-domain.java.vm index c241677..dbf3c0b 100644 --- a/base-generator/src/main/resources/vm/java/sub-domain.java.vm +++ b/base-generator/src/main/resources/vm/java/sub-domain.java.vm @@ -1,13 +1,13 @@ -package ${packageName}.domain; +package ${entityPrefix}; -#foreach ($import in $subImportList) -import ${import}; -#end + #foreach ($import in $subImportList) + import ${import}; + #end import com.agri.common.annotation.Excel; /** * ${subTable.functionName}对象 ${subTableName} - * + * * @author ${author} * @date ${datetime} */ @@ -15,59 +15,59 @@ public class ${subClassName} extends BaseEntity { private static final long serialVersionUID = 1L; -#foreach ($column in $subTable.columns) -#if(!$table.isSuperColumn($column.javaField)) - /** $column.columnComment */ -#if($column.list) -#set($parentheseIndex=$column.columnComment.indexOf("(")) -#if($parentheseIndex != -1) -#set($comment=$column.columnComment.substring(0, $parentheseIndex)) -#else -#set($comment=$column.columnComment) -#end -#if($parentheseIndex != -1) - @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") -#elseif($column.javaType == 'Date') - @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") -#else - @Excel(name = "${comment}") -#end -#end - private $column.javaType $column.javaField; + #foreach ($column in $subTable.columns) + #if(!$table.isSuperColumn($column.javaField)) + /** $column.columnComment */ + #if($column.list) + #set($parentheseIndex=$column.columnComment.indexOf("(")) + #if($parentheseIndex != -1) + #set($comment=$column.columnComment.substring(0, $parentheseIndex)) + #else + #set($comment=$column.columnComment) + #end + #if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + #elseif($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") + #else + @Excel(name = "${comment}") + #end + #end + private $column.javaType $column.javaField; -#end -#end -#foreach ($column in $subTable.columns) -#if(!$table.isSuperColumn($column.javaField)) -#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) -#set($AttrName=$column.javaField) -#else -#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) -#end - public void set${AttrName}($column.javaType $column.javaField) - { - this.$column.javaField = $column.javaField; - } + #end + #end + #foreach ($column in $subTable.columns) + #if(!$table.isSuperColumn($column.javaField)) + #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) + #set($AttrName=$column.javaField) + #else + #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #end + public void set${AttrName}($column.javaType $column.javaField) + { + this.$column.javaField = $column.javaField; + } - public $column.javaType get${AttrName}() - { - return $column.javaField; - } -#end -#end + public $column.javaType get${AttrName}() + { + return $column.javaField; + } + #end + #end @Override public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) -#foreach ($column in $subTable.columns) -#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) -#set($AttrName=$column.javaField) -#else -#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) -#end - .append("${column.javaField}", get${AttrName}()) -#end + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + #foreach ($column in $subTable.columns) + #if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) + #set($AttrName=$column.javaField) + #else + #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #end + .append("${column.javaField}", get${AttrName}()) + #end .toString(); - } +} } diff --git a/base-generator/src/main/resources/vm/java/vo.java.vm b/base-generator/src/main/resources/vm/java/vo.java.vm new file mode 100644 index 0000000..3ec6e5f --- /dev/null +++ b/base-generator/src/main/resources/vm/java/vo.java.vm @@ -0,0 +1,46 @@ +package ${packageName}.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + #if(${hasBigDecimal}) + import java.math.BigDecimal; + #end +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonInclude; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * ${functionName} + * + * @author ${author} + * @date ${datetime} + */ + +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "${tableName}") +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "${functionName}", description = "${functionName}") +public class ${ClassName}Vo implements Serializable { + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) +#if($column.javaField != "createBy" && $column.javaField != "createTime" && $column.javaField != + "updateBy" && $column.javaField != "updateTime") + /** $column.columnComment */ + #if($column.columnName == $pk.columnName) + #end + @ApiModelProperty(value = "$column.columnComment") + private $column.javaType ${column.javaField}; + +#end +#end +} diff --git a/base-generator/src/main/resources/vm/xml/mapper.xml.vm b/base-generator/src/main/resources/vm/xml/mapper.xml.vm index 8d006e5..392eaf6 100644 --- a/base-generator/src/main/resources/vm/xml/mapper.xml.vm +++ b/base-generator/src/main/resources/vm/xml/mapper.xml.vm @@ -1,137 +1,230 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - -#foreach ($column in $columns) - -#end - -#if($table.sub) - - + + #foreach ($column in $columns) + + #end + #if($table.tree) + + #end + #if($table.sub) + + + - -#foreach ($column in $subTable.columns) - -#end - -#end + + #foreach ($column in $subTable.columns) + + #end + + #end - - select#foreach($column in $columns) $column.columnName#if($foreach.count != $columns.size()),#end#end from ${tableName} + + + #set($count_basecolumn = 1) + #foreach($column in $columns) + #if($count_basecolumn == 1) + ${column.columnName} + #else + ,${column.columnName} + #end + #set( $count_basecolumn = $count_basecolumn + 1 ) + #end + - + select + + from ${tableName} + where id = #{id} + + + + + + SELECT LAST_INSERT_ID() AS id + + INSERT into ${tableName} + () + VALUES + () + + + + + update ${tableName} + + + + where id = #{id} + + + + + + + - - + SELECT + + FROM ${tableName} + + + + + order by ${order} + + + limit #{offset},#{limit} + - - - insert into ${tableName} - -#foreach($column in $columns) -#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) - $column.columnName, -#end -#end - - -#foreach($column in $columns) -#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) - #{$column.javaField}, -#end -#end - - - - update ${tableName} - -#foreach($column in $columns) -#if($column.columnName != $pkColumn.columnName) - $column.columnName = #{$column.javaField}, -#end -#end - - where ${pkColumn.columnName} = #{${pkColumn.javaField}} - + + + DELETE FROM ${tableName} + WHERE id = #{id} + - - update ${tableName} set del_flag = 2 where ${pkColumn.columnName} = #{${pkColumn.javaField}} - + + - - update ${tableName} set del_flag = 2 where ${pkColumn.columnName} in - - #{${pkColumn.javaField}} - - -#if($table.sub) - - - delete from ${subTableName} where ${subTableFkName} in - - #{${subTableFkclassName}} + + + DELETE FROM ${tableName} + + + + + + + + DELETE FROM ${tableName} + WHERE id IN + + #{id} - - delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}} - + #if($table.sub) + + delete from ${subTableName} where ${subTableFkName} in + + #{${subTableFkclassName}} + + - - insert into ${subTableName}(#foreach($column in $subTable.columns) $column.columnName#if($foreach.count != $subTable.columns.size()),#end#end) values - - (#foreach($column in $subTable.columns) #{item.$column.javaField}#if($foreach.count != $subTable.columns.size()),#end#end) - - -#end - \ No newline at end of file + + delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}} + + + + insert into ${subTableName} ( + #set($count2 = 1) + #foreach($column in $columns) + #if($count2 == 1) + ${column.columnName} + #else + ,${column.columnName} + #end + #set( $count2 = $count2 + 1 ) + #end + ) + values ( + + #set($count3 = 1) + #foreach($column in $columns) + #if($count3 == 1) + #{item.$column.javaField} + #else + ,#{item.$column.javaField} + #end + #set( $count3 = $count3 + 1 ) + #end + + ) + + #end +