c5c67ee1 by 荆蔚杰

不动产登记档案系统

0 parents
.idea
*.iml
.classpath
.factorypath
.project
.settings
.DS_Store
target
This diff is collapsed. Click to expand it.
package com.pashanhoo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication(scanBasePackages={"com.pashanhoo"})
@EnableTransactionManagement
@MapperScan(basePackages = {"com.pashanhoo.**.mapper"})
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.run(args);
}
}
package com.pashanhoo;
import io.swagger.annotations.Api;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* swagger配置类
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
// 为当前包路径
// .apis(RequestHandlerSelectors.basePackage("com.pashanhoo"))
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
.paths(PathSelectors.any())
.build();
}
// 构建 api文档的详细信息函数,注意这里的注解引用的是哪个
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 页面标题
.title("档案系统 接口文档")
// 版本号
.version("1.0")
// 描述
.description("API 描述")
.build();
}
}
package com.pashanhoo.common;
public interface CommonConstant {
/**
* 新增校验报错状态
*/
Integer CHECK_ERROR_2002=2002;
/**
* {@code 500 Server Error} (HTTP/1.0 - RFC 1945)
*/
Integer SC_INTERNAL_SERVER_ERROR_500 = 500;
/**
* {@code 200 OK} (HTTP/1.0 - RFC 1945)
*/
Integer SC_OK_200 = 200;
/**
* {@code 200 OK} (HTTP/1.0 - RFC 1945)
*/
Integer SC_INFO_206 = 206;
/**
* {@code 200 OK} (HTTP/1.0 - RFC 1945)
*/
Integer SC_INFO_210 = 210;
/**
* 字典信息缓存
*/
String SYS_DICT_NAME = "sys:dict:name:";
/**
* 字典信息缓存
*/
String SYS_DICT_ID = "sys:dict:id:";
/**
* 字典信息单条
*/
String SYS_DICT_ALL = "sys:dict:all:";
/**
* 字典信息缓存
*/
String SYS_DICT_CODE = "sys:dict:code:";
/**
* 菜单列表
*/
String MENU_TREE = "sys:menu:";
}
package com.pashanhoo.common;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PageInfo {
@ApiModelProperty(name = "currentPage",value = "页码")
private Integer currentPage = 1;
@ApiModelProperty(name = "pageSize",value = "每页个数")
private Integer pageSize = 10;
@ApiModelProperty(name = "sortField",value = "排序字段" )
private String sortField;
@ApiModelProperty(name = "sortOrder",value = "升序(asc)或降序(desc)")
private String sortOrder;
public void defaultFillPageProp(String sortField, String sortOrder) {
if(StringUtils.isBlank(this.sortField)) {
this.sortField = sortField;
this.sortOrder = sortOrder;
}
}
}
package com.pashanhoo.common;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@ApiModel(value = "接口返回对象", description = "接口返回对象")
@JsonInclude
public class Result<T> implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 成功标志
*/
@ApiModelProperty(value = "成功标志")
private boolean success = true;
/**
* 返回处理消息
*/
@ApiModelProperty(value = "返回处理消息")
private String message = "操作成功!";
/**
* 返回代码
*/
@ApiModelProperty(value = "返回代码")
private Integer code = 0;
/**
* 返回数据对象 data
*/
@ApiModelProperty(value = "返回数据对象")
private T result;
/**
* 时间戳
*/
@ApiModelProperty(value = "时间戳")
private long timestamp = System.currentTimeMillis();
public Result() {
}
public Result<T> success(String message) {
this.message = message;
this.code = CommonConstant.SC_OK_200;
this.success = true;
return this;
}
public static Result<Object> ok() {
Result<Object> r = new Result<Object>();
r.setSuccess(true);
r.setCode(CommonConstant.SC_OK_200);
r.setMessage("成功");
return r;
}
public static Result<Object> ok(String msg) {
Result<Object> r = new Result<Object>();
r.setSuccess(true);
r.setCode(CommonConstant.SC_OK_200);
r.setMessage(msg);
return r;
}
public static <T> Result<T> ok(T data) {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setCode(CommonConstant.SC_OK_200);
r.setResult(data);
return r;
}
public static Result<String> content(String data) {
Result<String> r = new Result<String>();
r.setSuccess(true);
r.setCode(CommonConstant.SC_OK_200);
r.setResult(data);
return r;
}
public static Result<Object> info(Object data) {
Result<Object> r = new Result<Object>();
r.setSuccess(false);
r.setCode(CommonConstant.SC_INFO_206);
r.setResult(data);
return r;
}
public static Result<Object> exception(String data) {
Result<Object> r = new Result<Object>();
r.setSuccess(false);
r.setCode(CommonConstant.SC_INFO_210);
r.setMessage(data);
return r;
}
public static <T> Result<T> ok(T data, String msg) {
Result<T> r = new Result<T>();
r.setSuccess(true);
r.setMessage(msg);
r.setCode(CommonConstant.SC_OK_200);
r.setResult(data);
return r;
}
public static Result<String> error(String msg) {
return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg);
}
public static Result<String> checkError(String msg) {
return error(CommonConstant.CHECK_ERROR_2002, msg);
}
public static Result<String> error(int code, String msg) {
Result<String> r = new Result<String>();
r.setCode(code);
r.setMessage(msg);
r.setSuccess(false);
return r;
}
public static <T> Result<T> error(String message, T data) {
Result<T> r = new Result<T>();
r.setMessage(message);
r.setResult(data);
r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500);
r.setSuccess(false);
return r;
}
public Result<T> error500(String message) {
this.message = message;
this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
this.success = false;
return this;
}
// /**
// * 无权限访问返回结果
// */
// public static Result<String> noauth(String msg) {
// return error(CommonConstant.SC_JEECG_NO_AUTHZ, msg);
// }
public static long getSerialVersionUID() {
return serialVersionUID;
}
public boolean getSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public T getResult() {
return result;
}
public void setResult(T result) {
this.result = result;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
package com.pashanhoo.common.util;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.pashanhoo.common.util.mybatisplus.MyFreemarkerTemplateEngine;
/**
* 代码自动生成器
*/
public class CodeGenerator {
public static void main(String[] args) {
// 需要构建一个 代码自动生成器 对象
AutoGenerator mpg = new AutoGenerator();
// 配置策略
// 1、全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("");
gc.setOpen(false);
// 是否覆盖
gc.setFileOverride(false);
// 去Service的I前缀
// gc.setEntityName("%sDO");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
gc.setDateType(DateType.ONLY_DATE);
gc.setIdType(IdType.UUID);
// gc.setSwagger2(true); 实体属性 Swagger2 注解
mpg.setGlobalConfig(gc);
//2、设置数据源
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:oracle:thin:@192.168.2.218:1521:orcl");
dsc.setDriverName("oracle.jdbc.driver.OracleDriver");
dsc.setUsername("bdcdjsb");
dsc.setPassword("bdcdjsb");
dsc.setDbType(DbType.ORACLE);
mpg.setDataSource(dsc);
//3、包的配置
PackageConfig pc = new PackageConfig();
//TODO
pc.setModuleName("system");
pc.setParent("com");
pc.setEntity("entity");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
mpg.setPackageInfo(pc);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
templateConfig.setEntity("templates/entity2.java");
templateConfig.setMapper("templates/mapper2.java");
templateConfig.setService("templates/service2.java");
templateConfig.setServiceImpl("templates/serviceImpl2.java");
templateConfig.setController("templates/controller2.java");
templateConfig.setXml("templates/mapper2.xml");
mpg.setTemplate(templateConfig);
//4、策略配置
StrategyConfig strategy = new StrategyConfig();
// 设置要映射的表名
strategy.setInclude("DJF_DJ_SJ");
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 自动lombok;
strategy.setEntityLombokModel(true);
mpg.setStrategy(strategy);
//设置Freemarker模板引擎
mpg.setTemplateEngine(new MyFreemarkerTemplateEngine());
mpg.execute(); //执行
}
}
package com.pashanhoo.common.util;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import org.apache.commons.collections.CollectionUtils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class TreeUtil {
/**
* 比较规则
*/
private static Comparator comparator;
/**
* 树节点Class类型
*/
private static Class<?> treeNodeClass;
/**
* 主键的get方法对应的Method对象
*/
private static Method getKeyMethod;
/**
* 获取父节点id的get方法对应的Method对象
*/
private static Method getParentIdMethod;
/**
* 设置子元素对应的方法的Method对象
*/
private static Method setChildrenMethod;
/**
* @param comparator
* @param treeNodeClass
* @param key 首字母大写的主键字段名称
*/
public static void setRule(Comparator comparator, Class<?> treeNodeClass, String key) {
TreeUtil.comparator = comparator;
TreeUtil.treeNodeClass = treeNodeClass;
try {
TreeUtil.getKeyMethod = treeNodeClass.getMethod("get" + key);
TreeUtil.getParentIdMethod = treeNodeClass.getMethod("getParentId");
TreeUtil.setChildrenMethod = treeNodeClass.getMethod("setChildren", List.class);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
/**
* 将符合条件的List转为Tree
*
* @param
* @param rootId
* @return
*/
public static <TreeNode> List<TreeNode> listToTree(List<TreeNode> treeNodes, String rootId) {
if (CollectionUtils.isEmpty(treeNodes)) {
return Lists.newArrayList();
}
//parent -> [data1, data2 ...]
Multimap<String, TreeNode> parentMap = ArrayListMultimap.create();
//记录parentMap
List<TreeNode> rootList = Lists.newArrayList();
for (TreeNode treeNode : treeNodes) {
String parentId = null;
try {
parentId = (String) getParentIdMethod.invoke(treeNode);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
parentMap.put(parentId, treeNode);
//从根节点的下一级构造树
//rootId为null,从最顶部构造整棵树
if (rootId == null) {
if (parentId == null) {
rootList.add(treeNode);
}
}
if (StringUtils.isNotBlank(parentId) && parentId.equals(rootId)) {
rootList.add(treeNode);
}
}
// 对树节点进行排序
Collections.sort(rootList, comparator);
// 递归生成树
transformTree(rootList, parentMap);
return rootList;
}
private static <TreeNode> void transformTree(List<TreeNode> treeNodeList, Multimap<String, TreeNode> parentMap) {
for (int i = 0; i < treeNodeList.size(); i++) {
// 遍历该层的每个元素
TreeNode treeNode = treeNodeList.get(i);
//获取当前节点下一层节点的List数据
List<TreeNode> tempList = null;
try {
tempList = (List<TreeNode>) parentMap.get((String) getKeyMethod.invoke(treeNode));
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
if (CollectionUtils.isNotEmpty(tempList)) {
//首先排序下一层节点
Collections.sort(tempList, comparator);
//将下一层节点数据设置为当前节点的Children数据
try {
setChildrenMethod.invoke(treeNode, tempList);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
// 进入到下一层处理
transformTree(tempList, parentMap);
}
}
}
}
package com.pashanhoo.common.util.mybatisplus;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.config.ConstVal;
import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Map;
public class MyFreemarkerTemplateEngine extends AbstractTemplateEngineLocal {
private Configuration configuration;
@Override
public MyFreemarkerTemplateEngine init(ConfigBuilder configBuilder) {
super.init(configBuilder);
configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
configuration.setDefaultEncoding(ConstVal.UTF8);
configuration.setClassForTemplateLoading(FreemarkerTemplateEngine.class, StringPool.SLASH);
return this;
}
@Override
public void writer(Map<String, Object> objectMap, String templatePath, String outputFile) throws Exception {
Template template = configuration.getTemplate(templatePath);
try (FileOutputStream fileOutputStream = new FileOutputStream(outputFile)) {
template.process(objectMap, new OutputStreamWriter(fileOutputStream, ConstVal.UTF8));
}
logger.debug("模板:" + templatePath + "; 文件:" + outputFile);
}
@Override
public String templateFilePath(String filePath) {
return filePath + ".ftl";
}
}
package com.pashanhoo.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
package com.pashanhoo.dictionary.controller;
import com.github.pagehelper.PageInfo;
import com.pashanhoo.common.Result;
import com.pashanhoo.common.util.TreeUtil;
import com.pashanhoo.dictionary.model.dto.SysDict;
import com.pashanhoo.dictionary.model.vo.EditDictVo;
import com.pashanhoo.dictionary.model.vo.GetSysDictParentVo;
import com.pashanhoo.dictionary.model.vo.SysDictVo;
import com.pashanhoo.dictionary.service.SysDictService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Api(tags = "字典表")
@RestController
@RequestMapping("/SysDict")
public class SysDictController {
@Autowired
SysDictService sysDictService;
@ApiOperation("获取字典表父级集合")
@PostMapping("getSysDictParent")
public Result<PageInfo<GetSysDictParentVo>> getSysDictParent(@RequestBody SysDictVo request) {
return Result.ok(sysDictService.getSysDictParent(request));
}
@ApiOperation("编辑界面获取指定字典编码子集")
@GetMapping("getSysDictByTypeId")
public Result<List<SysDict>> getSysDictByTypeId(@ApiParam("类型ID") @RequestParam String typeId) {
List<SysDict> dicts = sysDictService.getSysDictByTypeId(typeId);
TreeUtil.setRule((o1, o2) -> 0, SysDict.class,"DictId");
List<SysDict> tree = TreeUtil.listToTree(dicts, typeId);
return Result.ok(tree);
}
@ApiOperation("编辑")
@PostMapping("editSysDictByTypeId")
public Result editSysDictByTypeId(@RequestBody EditDictVo request) {
int row = sysDictService.editSysDict(request);
if (row != 0) {
return Result.ok("修改成功");
} else {
return Result.ok("修改失败");
}
}
@ApiOperation("返回json")
@GetMapping("getJson")
public Result getJson() {
List<SysDict> dicts = sysDictService.selectAll();
TreeUtil.setRule(new Comparator<SysDict>() {
@Override
public int compare(SysDict o1, SysDict o2) {
if (o1.getSort() == null) {
o1.setSort((short) 0);
}
if (o2.getSort() == null) {
o2.setSort((short) 0);
}
return o1.getSort() - o2.getSort();
}
}, SysDict.class, "DictId");
List<SysDict> tree = TreeUtil.listToTree(dicts, null);
Map<String, List<SysDict>> map = new HashMap<>();
for (SysDict SYSDICT : tree) {
map.put(SYSDICT.getDcode(), SYSDICT.getChildren());
}
return Result.ok(map);
}
}
package com.pashanhoo.dictionary.dao;
import com.pashanhoo.dictionary.model.dto.SysDict;
import com.pashanhoo.dictionary.model.vo.GetSysDictParentVo;
import com.pashanhoo.dictionary.model.vo.SysDictVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface SysDictMapper {
/**
* delete by primary key
*
* @param dictid primaryKey
* @return deleteCount
*/
int deleteByPrimaryKey(String dictid);
/**
* insert record to table
*
* @param record the record
* @return insert count
*/
int insert(SysDict record);
/**
* insert record to table selective
*
* @param record the record
* @return insert count
*/
int insertSelective(SysDict record);
/**
* select by primary key
*
* @param dictid primary key
* @return object by primary key
*/
SysDict selectByPrimaryKey(String dictid);
/**
* update record selective
*
* @param record the updated record
* @return update count
*/
int updateByPrimaryKeySelective(SysDict record);
/**
* update record
*
* @param record the updated record
* @return update count
*/
int updateByPrimaryKey(SysDict record);
int updateBatch(List<SysDict> list);
int updateBatchSelective(List<SysDict> list);
int batchInsert(@Param("list") List<SysDict> list);
List<GetSysDictParentVo> getSysDictParent(@Param("request") SysDictVo request);
List<SysDict> getSysDictByTypeId(@Param("typeId") String typeId);
int deleteListByPrimaryKey(@Param("dictWithoutParent") List<SysDict> dictWithoutParent);
List<SysDict> selectAll();
int deleteByTypeId(@Param("typeid") String typeid);
}
package com.pashanhoo.dictionary.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 字典表
*/
@ApiModel(value = "extraction-model-SysDict")
@Data
public class SysDict implements Serializable {
/**
* 字典主键
*/
@ApiModelProperty(value = "字典主键")
private String dictId;
/**
* 父级ID
*/
@ApiModelProperty(value = "父级ID")
private String parentId;
/**
* 字典编码
*/
@ApiModelProperty(value = "字典编码")
private String dcode;
/**
* 字典名称
*/
@ApiModelProperty(value = "字典名称")
private String dname;
/**
* 排序号
*/
@ApiModelProperty(value = "排序号")
private Short sort;
/**
* 是否树形
*/
@ApiModelProperty(value = "是否树形")
private String isTree;
/**
* 类型ID
*/
@ApiModelProperty(value = "类型ID")
private String typeId;
private List<SysDict> children;
private static final long serialVersionUID = 1L;
}
package com.pashanhoo.dictionary.model.vo;
import com.pashanhoo.dictionary.model.dto.SysDict;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@ApiModel("字典表编辑请求实体")
@EqualsAndHashCode(callSuper = false)
public class EditDictVo {
List<SysDict> editDicts;
}
package com.pashanhoo.dictionary.model.vo;
import com.pashanhoo.dictionary.model.dto.SysDict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@ApiModel("获取字典表父级集合实体")
@EqualsAndHashCode(callSuper = false)
public class GetSysDictParentVo {
/**
* 字典主键
*/
@ApiModelProperty(value = "字典主键")
private String dictId;
/**
* 父级ID
*/
@ApiModelProperty(value = "父级ID")
private String parentId;
/**
* 字典编码
*/
@ApiModelProperty(value = "字典编码")
private String dcode;
/**
* 字典名称
*/
@ApiModelProperty(value = "字典名称")
private String dname;
/**
* 排序号
*/
@ApiModelProperty(value = "排序号")
private Short sort;
/**
* 是否树形
*/
@ApiModelProperty(value = "是否树形")
private String isTree;
/**
* 类型ID
*/
@ApiModelProperty(value = "类型ID")
private String typeId;
/**
* 序号
*/
@ApiModelProperty(value = "序号")
private Integer rowNum;
private List<SysDict> children;
private static final long serialVersionUID = 1L;
}
package com.pashanhoo.dictionary.model.vo;
import com.pashanhoo.common.PageInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
@Data
@ApiModel("字典表请求实体")
@EqualsAndHashCode(callSuper = false)
public class SysDictVo extends PageInfo implements Serializable {
/**
* 字典编码
*/
@ApiModelProperty(value = "字典编码")
private String dcode;
/**
* 字典名称
*/
@ApiModelProperty(value = "字典名称")
private String dname;
/**
* 类型ID
*/
@ApiModelProperty(value = "类型ID")
private String typeId;
}
package com.pashanhoo.dictionary.service;
import com.github.pagehelper.PageInfo;
import com.pashanhoo.dictionary.model.dto.SysDict;
import com.pashanhoo.dictionary.model.vo.EditDictVo;
import com.pashanhoo.dictionary.model.vo.GetSysDictParentVo;
import com.pashanhoo.dictionary.model.vo.SysDictVo;
import java.util.List;
public interface SysDictService {
/**
* 删除
* @param dictid
* @return
*/
int deleteByPrimaryKey(String dictid);
/**
* 插入
* @param record
* @return
*/
int insert(SysDict record);
/**
* 插入
* @param record
* @return
*/
int insertSelective(SysDict record);
/**
* 查询
* @param dictid
* @return
*/
SysDict selectByPrimaryKey(String dictid);
/**
* 更新
* @param record
* @return
*/
int updateByPrimaryKeySelective(SysDict record);
/**
* 更新
* @param record
* @return
*/
int updateByPrimaryKey(SysDict record);
/**
* 批量更新
* @param list
* @return
*/
int updateBatch(List<SysDict> list);
/**
* 批量更新
* @param list
* @return
*/
int updateBatchSelective(List<SysDict> list);
/**
* 批量插入
* @param list
* @return
*/
int batchInsert(List<SysDict> list);
/**
* 获取父级字典表
* @param request
* @return
*/
PageInfo<GetSysDictParentVo> getSysDictParent(SysDictVo request);
/**
* 根据typeId查询
* @param typeId
* @return
*/
List<SysDict> getSysDictByTypeId(String typeId);
/**
* 编辑字典表
* @param request
* @return
*/
int editSysDict(EditDictVo request);
/**
* 查询全部
* @return
*/
List<SysDict> selectAll();
}
package com.pashanhoo.dictionary.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.pashanhoo.dictionary.dao.SysDictMapper;
import com.pashanhoo.dictionary.model.dto.SysDict;
import com.pashanhoo.dictionary.model.vo.EditDictVo;
import com.pashanhoo.dictionary.model.vo.GetSysDictParentVo;
import com.pashanhoo.dictionary.model.vo.SysDictVo;
import com.pashanhoo.dictionary.service.SysDictService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class SysDictServiceImpl implements SysDictService {
@Resource
private SysDictMapper sysDictMapper;
/**
* 查询
* @param dictid
* @return
*/
@Override
public int deleteByPrimaryKey(String dictid) {
return sysDictMapper.deleteByPrimaryKey(dictid);
}
/**
* 插入
* @param record
* @return
*/
@Override
public int insert(SysDict record) {
return sysDictMapper.insert(record);
}
/**
* 插入
* @param record
* @return
*/
@Override
public int insertSelective(SysDict record) {
return sysDictMapper.insertSelective(record);
}
/**
* 查询
* @param dictid
* @return
*/
@Override
public SysDict selectByPrimaryKey(String dictid) {
return sysDictMapper.selectByPrimaryKey(dictid);
}
/**
* 更新
* @param record
* @return
*/
@Override
public int updateByPrimaryKeySelective(SysDict record) {
return sysDictMapper.updateByPrimaryKeySelective(record);
}
/**
* 更新
* @param record
* @return
*/
@Override
public int updateByPrimaryKey(SysDict record) {
return sysDictMapper.updateByPrimaryKey(record);
}
/**
* 批量更新
* @param list
* @return
*/
@Override
public int updateBatch(List<SysDict> list) {
return sysDictMapper.updateBatch(list);
}
/**
* 批量更新
* @param list
* @return
*/
@Override
public int updateBatchSelective(List<SysDict> list) {
return sysDictMapper.updateBatchSelective(list);
}
/**
* 批量插入
* @param list
* @return
*/
@Override
public int batchInsert(List<SysDict> list) {
return sysDictMapper.batchInsert(list);
}
/**
* 获取父级字典表
* @param request
* @return
*/
@Override
public PageInfo<GetSysDictParentVo> getSysDictParent(SysDictVo request) {
PageHelper.startPage(request.getCurrentPage(), request.getPageSize());
List<GetSysDictParentVo> list = sysDictMapper.getSysDictParent(request);
return new PageInfo<>(list);
}
/**
* 根据typeId查询字典表
* @param typeId
* @return
*/
@Override
public List<SysDict> getSysDictByTypeId(String typeId) {
return sysDictMapper.getSysDictByTypeId(typeId);
}
/**
* root节点只做更新,子节点全部删除再批量插入
* @param request
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int editSysDict(EditDictVo request) {
List<SysDict> editDicts = request.getEditDicts();
List<SysDict> parent = editDicts.stream().filter(item -> item.getParentId() == null).collect(Collectors.toList());
sysDictMapper.updateByPrimaryKey(parent.get(0));
List<SysDict> dictWithoutParent = editDicts.stream().filter(item -> item.getParentId() != null).collect(Collectors.toList());
List<SysDict> result = new ArrayList<>();
//递归所有子集
List<SysDict> resultList = getAllSysDict(dictWithoutParent,result);
//删除除了根目录的所有子集
sysDictMapper.deleteByTypeId(resultList.get(0).getTypeId());
return sysDictMapper.batchInsert(resultList);
}
/**
* 查询所有字典表
* @return
*/
@Override
public List<SysDict> selectAll() {
return sysDictMapper.selectAll();
}
private List<SysDict> getAllSysDict(List<SysDict> dicts, List<SysDict> result) {
for (SysDict SYSDICT : dicts) {
List<SysDict> children = SYSDICT.getChildren();
result.add(SYSDICT);
if (children != null) {
getAllSysDict(children, result);
}
}
return result;
}
}
server:
port: 8866
servlet:
session:
timeout: 43200
spring:
servlet:
multipart:
maxFileSize: 10MB
maxRequestSize: 10MB
application:
name: archive-system
profiles:
active: dev
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
default-property-inclusion: non_null
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
username: bdcdjsb
password: bdcdjsb
url: jdbc:oracle:thin:@192.168.2.218:1521:orcl
mybatis-plus:
mapper-locations: classpath:mapper/**/*.xml
typeAliasesPackage: archive
global-config:
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: 2
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
field-strategy: 1
#驼峰下划线转换
db-column-underline: true
#刷新mapper 调试神器
refresh-mapper: true
#数据库大写下划线转换
#capital-mode: true
#序列接口实现类配置
#key-generator: com.baomidou.springboot.xxx
#逻辑删除配置
logic-delete-value: -1
logic-not-delete-0: 0
#自定义填充策略接口实现
#meta-object-handler: com.baomidou.springboot.xxx
#自定义SQL注入器
# sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
management:
endpoints:
web:
exposure:
include: "*"
logging:
level:
rent:
mapper: debug
config: "classpath:logback-spring.xml"
#app:
# attachment[0]:
# name: S1
# type: minIO
# params:
# type: http://
# bucket: archiveSystem
# host: 192.168.2.218
# port: 9000
# user: minioadmin
# password: minioadmin
spring:
profiles:
active: @profile.active@