diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformHeadServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformHeadServiceImpl.java
index 60dd4040..0a26b056 100644
--- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformHeadServiceImpl.java
+++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformHeadServiceImpl.java
@@ -360,6 +360,7 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl
- * 字典表 前端控制器
- *
- *
- * @Author zhangweijian
- * @since 2018-12-28
- */
-@RestController
-@Api(tags = "字典控制器")
-@RequestMapping("/sys/dict")
-@Slf4j
-public class SysDictController {
-
- @Autowired
- private ISysDictService sysDictService;
- @Autowired
- private ISysDictItemService sysDictItemService;
- @Autowired
- public RedisTemplate redisTemplate;
-
- @RequestMapping(value = "/list", method = RequestMethod.GET)
- @ApiOperation(value = "字典控制器-分页列表查询", notes = "字典控制器-分页列表查询")
- public Result> queryPageList(SysDict sysDict, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
- @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
- Result> result = new Result>();
- QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, req.getParameterMap());
- Page page = new Page(pageNo, pageSize);
- IPage pageList = sysDictService.page(page, queryWrapper);
- log.debug("查询当前页:"+pageList.getCurrent());
- log.debug("查询当前页数量:"+pageList.getSize());
- log.debug("查询结果数量:"+pageList.getRecords().size());
- log.debug("数据总数:"+pageList.getTotal());
- result.setSuccess(true);
- result.setResult(pageList);
- return result;
- }
-
- /**
- * @功能:获取树形字典数据
- * @param sysDict
- * @param pageNo
- * @param pageSize
- * @param req
- * @return
- */
- @SuppressWarnings("unchecked")
- @ApiOperation(value = "字典控制器-树形字典数据", notes = "字典控制器-树形字典数据")
- @RequestMapping(value = "/treeList", method = RequestMethod.GET)
- public Result> treeList(SysDict sysDict, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
- @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
- Result> result = new Result<>();
- LambdaQueryWrapper query = new LambdaQueryWrapper<>();
- // 构造查询条件
- String dictName = sysDict.getDictName();
- if(oConvertUtils.isNotEmpty(dictName)) {
- query.like(true, SysDict::getDictName, dictName);
- }
- query.orderByDesc(true, SysDict::getCreateTime);
- List list = sysDictService.list(query);
- List treeList = new ArrayList<>();
- for (SysDict node : list) {
- treeList.add(new SysDictTree(node));
- }
- result.setSuccess(true);
- result.setResult(treeList);
- return result;
- }
-
- /**
- * 获取字典数据
- * @param dictCode 字典code
- * @param dictCode 表名,文本字段,code字段 | 举例:sys_user,realname,id
- * @return
- */
- @ApiOperation(value = "字典控制器-根据字典编码获取字典数据", notes = "字典控制器-根据字典编码获取字典数据")
- @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET)
- public Result> getDictItems(@PathVariable String dictCode, @RequestParam(value = "sign",required = false) String sign, HttpServletRequest request) {
- log.info(" dictCode : "+ dictCode);
- Result> result = new Result>();
- List ls = null;
- try {
- if(dictCode.indexOf(",")!=-1) {
- //关联表字典(举例:sys_user,realname,id)
- String[] params = dictCode.split(",");
-
- if(params.length<3) {
- result.error500("字典Code格式不正确!");
- return result;
- }
- //SQL注入校验(只限制非法串改数据库)
- final String[] sqlInjCheck = {params[0],params[1],params[2]};
- SqlInjectionUtil.filterContent(sqlInjCheck);
-
- if(params.length==4) {
- //SQL注入校验(查询条件SQL 特殊check,此方法仅供此处使用)
- SqlInjectionUtil.specialFilterContent(params[3]);
- ls = sysDictService.queryTableDictItemsByCodeAndFilter(params[0],params[1],params[2],params[3]);
- }else if (params.length==3) {
- ls = sysDictService.queryTableDictItemsByCode(params[0],params[1],params[2]);
- }else{
- result.error500("字典Code格式不正确!");
- return result;
- }
- }else {
- //字典表
- ls = sysDictService.queryDictItemsByCode(dictCode);
- }
-
- result.setSuccess(true);
- result.setResult(ls);
- log.debug(result.toString());
- } catch (Exception e) {
- log.error(e.getMessage(),e);
- result.error500("操作失败");
- return result;
- }
-
- return result;
- }
-
- /**
- * 获取全部字典数据
- *
- * @return
- */
- @ApiOperation(value = "字典控制器-获取全部字典数据", notes = "字典控制器-获取全部字典数据")
- @RequestMapping(value = "/queryAllDictItems", method = RequestMethod.GET)
- public Result> queryAllDictItems(HttpServletRequest request) {
- Map> res = new HashMap>();
- res = sysDictService.queryAllDictItems();
- return Result.OK(res);
- }
-
- /**
- * 获取字典数据
- * @param dictCode
- * @return
- */
- @ApiOperation(value = "字典控制器-通过字典code和字典值key获取字典数据", notes = "字典控制器-通过字典code和字典值key获取字典数据")
- @RequestMapping(value = "/getDictText/{dictCode}/{key}", method = RequestMethod.GET)
- public Result getDictText(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key) {
- log.info(" dictCode : "+ dictCode);
- Result result = new Result();
- String text = null;
- try {
- text = sysDictService.queryDictTextByKey(dictCode, key);
- result.setSuccess(true);
- result.setResult(text);
- } catch (Exception e) {
- log.error(e.getMessage(),e);
- result.error500("操作失败");
- return result;
- }
- return result;
- }
-
- /**
- * 大数据量的字典表 走异步加载 即前端输入内容过滤数据
- * @param dictCode
- * @return
- */
- @ApiOperation(value = "字典控制器-通过字典code获取字典数据", notes = "字典控制器-通过字典code获取字典数据")
- @RequestMapping(value = "/loadDict/{dictCode}", method = RequestMethod.GET)
- public Result> loadDict(@PathVariable String dictCode,
- @RequestParam(name="keyword") String keyword,
- @RequestParam(value = "sign",required = false) String sign,
- @RequestParam(value = "pageSize", required = false) Integer pageSize) {
- log.info(" 加载字典表数据,加载关键字: "+ keyword);
- Result> result = new Result>();
- List ls = null;
- try {
- if(dictCode.indexOf(",")!=-1) {
- String[] params = dictCode.split(",");
- if(params.length!=3) {
- result.error500("字典Code格式不正确!");
- return result;
- }
- if(pageSize!=null){
- ls = sysDictService.queryLittleTableDictItems(params[0],params[1],params[2],keyword, pageSize);
- }else{
- ls = sysDictService.queryTableDictItems(params[0],params[1],params[2],keyword);
- }
- result.setSuccess(true);
- result.setResult(ls);
- log.info(result.toString());
- }else {
- result.error500("字典Code格式不正确!");
- }
- } catch (Exception e) {
- log.error(e.getMessage(),e);
- result.error500("操作失败");
- return result;
- }
-
- return result;
- }
-
- /**
- * 根据字典code加载字典text 返回
- */
- @ApiOperation(value = "字典控制器-根据字典code加载字典text", notes = "字典控制器-根据字典code加载字典text")
- @RequestMapping(value = "/loadDictItem/{dictCode}", method = RequestMethod.GET)
- public Result> loadDictItem(@PathVariable String dictCode, @RequestParam(name="key") String keys, @RequestParam(value = "sign",required = false) String sign, HttpServletRequest request) {
- Result> result = new Result<>();
- try {
- if(dictCode.indexOf(",")!=-1) {
- String[] params = dictCode.split(",");
- if(params.length!=3) {
- result.error500("字典Code格式不正确!");
- return result;
- }
- List texts = sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys);
-
- result.setSuccess(true);
- result.setResult(texts);
- log.info(result.toString());
- }else {
- result.error500("字典Code格式不正确!");
- }
- } catch (Exception e) {
- log.error(e.getMessage(),e);
- result.error500("操作失败");
- return result;
- }
-
- return result;
- }
-
- /**
- * 根据表名——显示字段-存储字段 pid 加载树形数据
- */
- @ApiOperation(value = "字典控制器-根据表名—显示字段-存储字段 pid 加载树形数据", notes = "字典控制器-根据表名—显示字段-存储字段 pid 加载树形数据")
- @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET)
- public Result> loadTreeData(@RequestParam(name="pid") String pid, @RequestParam(name="pidField") String pidField,
- @RequestParam(name="tableName") String tbname,
- @RequestParam(name="text") String text,
- @RequestParam(name="code") String code,
- @RequestParam(name="hasChildField", required = false) String hasChildField,
- @RequestParam(value = "sign", required = false) String sign, HttpServletRequest request) {
- Result> result = new Result>();
-
- // SQL注入漏洞 sign签名校验(表名,label字段,val字段,条件)
- String dictCode = tbname +","+ text +","+ code;
- SqlInjectionUtil.filterContent(dictCode);
- List ls = sysDictService.queryTreeList(null, tbname, text, code, pidField, pid, hasChildField);
- result.setSuccess(true);
- result.setResult(ls);
- return result;
- }
-
- /**
- * 查询后返回树型数据
- */
- @ApiOperation(value = "字典控制器-根据表名—显示字段-存储字段 加载树形数据", notes = "字典控制器-根据表名—显示字段-存储字段 加载树形数据")
- @RequestMapping(value = "/queryAllTreeData", method = RequestMethod.GET)
- public Result> queryAllTreeData(@RequestParam(name="pidField") String pidField,
- @RequestParam(name="tableName") String tbname,
- @RequestParam(name="text") String text,
- @RequestParam(name="code") String code,
- HttpServletRequest request) {
- Result> result = new Result>();
-
- // SQL注入漏洞 sign签名校验(表名,label字段,val字段,条件)
- String dictCode = tbname +","+ text +","+ code;
- SqlInjectionUtil.filterContent(dictCode);
- List ls = sysDictService.queryAllTreeData(tbname, text, code, pidField);
- result.setSuccess(true);
- result.setResult(ls);
- return result;
- }
-
- /**
- * @功能:新增
- * @param sysDict
- * @return
- */
- @ApiOperation(value = "字典控制器-新增字典", notes = "字典控制器-新增字典")
- @RequiresRoles({"admin"})
- @RequestMapping(value = "/add", method = RequestMethod.POST)
- public Result add(@RequestBody SysDict sysDict) {
- Result result = new Result();
- try {
- sysDict.setCreateTime(new Date());
- sysDict.setDelFlag(CommonConstant.DEL_FLAG_0);
- sysDictService.save(sysDict);
- result.success("保存成功!");
- } catch (Exception e) {
- log.error(e.getMessage(),e);
- result.error500("操作失败");
- }
- return result;
- }
-
- /**
- * @功能:编辑
- * @param sysDict
- * @return
- */
- @ApiOperation(value = "字典控制器-编辑字典", notes = "字典控制器-编辑字典")
- @RequiresRoles({"admin"})
- @RequestMapping(value = "/edit", method = RequestMethod.PUT)
- public Result edit(@RequestBody SysDict sysDict) {
- Result result = new Result();
- SysDict sysdict = sysDictService.getById(sysDict.getId());
- if(sysdict==null) {
- result.error500("未找到对应实体");
- }else {
- sysDict.setUpdateTime(new Date());
- boolean ok = sysDictService.updateById(sysDict);
- if(ok) {
- result.success("编辑成功!");
- }
- }
- return result;
- }
-
- /**
- * @功能:删除
- * @param id
- * @return
- */
- @ApiOperation(value = "字典控制器-删除字典", notes = "字典控制器-删除字典")
- @RequiresRoles({"admin"})
- @DeleteMapping(value = "/delete")
- @CacheEvict(value=CacheConstant.SYS_DICT_CACHE, allEntries=true)
- public Result delete(@RequestParam(name="id",required=true) String id) {
- Result result = new Result();
- boolean ok = sysDictService.removeById(id);
- if(ok) {
- result.success("删除成功!");
- }else{
- result.error500("删除失败!");
- }
- return result;
- }
-
- /**
- * @功能:批量删除
- * @param ids
- * @return
- */
- @ApiOperation(value = "字典控制器-批量字典", notes = "字典控制器-批量字典")
- @RequiresRoles({"admin"})
- @DeleteMapping(value = "/deleteBatch")
- @CacheEvict(value= CacheConstant.SYS_DICT_CACHE, allEntries=true)
- public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) {
- Result result = new Result();
- if(oConvertUtils.isEmpty(ids)) {
- result.error500("参数不识别!");
- }else {
- sysDictService.removeByIds(Arrays.asList(ids.split(",")));
- result.success("删除成功!");
- }
- return result;
- }
-
- /**
- * @功能:刷新缓存
- * @return
- */
- @RequestMapping(value = "/refleshCache")
- public Result> refleshCache() {
- Result> result = new Result();
- //清空字典缓存
- Set keys = redisTemplate.keys(CacheConstant.SYS_DICT_CACHE + "*");
- Set keys2 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_CACHE + "*");
- Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*");
- Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*");
- Set keys5 = redisTemplate.keys( "jmreport:cache:dict*");
- Set keys6 = redisTemplate.keys( "jmreport:cache:dictTable*");
- redisTemplate.delete(keys);
- redisTemplate.delete(keys2);
- redisTemplate.delete(keys3);
- redisTemplate.delete(keys4);
- redisTemplate.delete(keys5);
- redisTemplate.delete(keys6);
- return result;
- }
-
- /**
- * 导出excel
- *
- * @param request
- */
- @RequestMapping(value = "/exportXls")
- public ModelAndView exportXls(SysDict sysDict, HttpServletRequest request) {
- // Step.1 组装查询条件
- QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, request.getParameterMap());
- //Step.2 AutoPoi 导出Excel
- ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
- List pageList = new ArrayList();
-
- List sysDictList = sysDictService.list(queryWrapper);
- for (SysDict dictMain : sysDictList) {
- SysDictPage vo = new SysDictPage();
- BeanUtils.copyProperties(dictMain, vo);
- // 查询机票
- List sysDictItemList = sysDictItemService.selectItemsByMainId(dictMain.getId());
- vo.setSysDictItemList(sysDictItemList);
- pageList.add(vo);
- }
-
- // 导出文件名称
- mv.addObject(NormalExcelConstants.FILE_NAME, "数据字典");
- // 注解对象Class
- mv.addObject(NormalExcelConstants.CLASS, SysDictPage.class);
- // 自定义表格参数
- LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
- mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("数据字典列表", "导出人:"+user.getRealname(), "数据字典"));
- // 导出数据列表
- mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
- return mv;
- }
-
- /**
- * 通过excel导入数据
- *
- * @param request
- * @param
- * @return
- */
- @RequiresRoles({"admin"})
- @PostMapping(value = "/importExcel")
- public Result> importExcel(HttpServletRequest request, HttpServletResponse response) {
- MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
- Map fileMap = multipartRequest.getFileMap();
- for (Map.Entry entity : fileMap.entrySet()) {
- MultipartFile file = entity.getValue();// 获取上传文件对象
- ImportParams params = new ImportParams();
- params.setTitleRows(2);
- params.setHeadRows(2);
- params.setNeedSave(true);
- try {
- //导入Excel格式校验,看匹配的字段文本概率
- Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysDictPage.class, params);
- if(!t){
- throw new RuntimeException("导入Excel校验失败 !");
- }
- List list = ExcelImportUtil.importExcel(file.getInputStream(), SysDictPage.class, params);
- // 错误信息
- List errorMessage = new ArrayList<>();
- int successLines = 0, errorLines = 0;
- for (int i=0;i< list.size();i++) {
- SysDict po = new SysDict();
- BeanUtils.copyProperties(list.get(i), po);
- po.setDelFlag(CommonConstant.DEL_FLAG_0);
- try {
- Integer integer = sysDictService.saveMain(po, list.get(i).getSysDictItemList());
- if(integer>0){
- successLines++;
- }else{
- errorLines++;
- int lineNumber = i + 1;
- errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。");
- }
- } catch (Exception e) {
- errorLines++;
- int lineNumber = i + 1;
- errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。");
- }
- }
- return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage);
- } catch (Exception e) {
- log.error(e.getMessage(),e);
- return Result.error("文件导入失败:"+e.getMessage());
- } finally {
- try {
- file.getInputStream().close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- return Result.error("文件导入失败!");
- }
-
-
- /**
- * 查询被删除的列表
- * @return
- */
- @GetMapping(value = "/deleteList")
- public Result> deleteList() {
- Result> result = new Result>();
- List list = this.sysDictService.queryDeleteList();
- result.setSuccess(true);
- result.setResult(list);
- return result;
- }
-
- /**
- * 物理删除
- * @param id
- * @return
- */
- @DeleteMapping(value = "/deletePhysic/{id}")
- public Result> deletePhysic(@PathVariable String id) {
- try {
- sysDictService.deleteOneDictPhysically(id);
- return Result.OK("删除成功!");
- } catch (Exception e) {
- e.printStackTrace();
- return Result.error("删除失败!");
- }
- }
-
- /**
- * 取回
- * @param id
- * @return
- */
- @PutMapping(value = "/back/{id}")
- public Result> back(@PathVariable String id) {
- try {
- sysDictService.updateDictDelFlag(0,id);
- return Result.OK("操作成功!");
- } catch (Exception e) {
- e.printStackTrace();
- return Result.error("操作失败!");
- }
- }
-
-}
+package com.jero.modules.system.controller;
+
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresRoles;
+import com.jero.common.api.vo.Result;
+import com.jero.common.constant.CacheConstant;
+import com.jero.common.constant.CommonConstant;
+import com.jero.common.system.query.QueryGenerator;
+import com.jero.common.system.vo.DictModel;
+import com.jero.common.system.vo.DictQuery;
+import com.jero.common.system.vo.LoginUser;
+import com.jero.common.util.ImportExcelUtil;
+import com.jero.common.util.SqlInjectionUtil;
+import com.jero.common.util.oConvertUtils;
+import com.jero.modules.system.entity.SysDict;
+import com.jero.modules.system.entity.SysDictItem;
+import com.jero.modules.system.model.SysDictTree;
+import com.jero.modules.system.model.TreeSelectModel;
+import com.jero.modules.system.service.ISysDictItemService;
+import com.jero.modules.system.service.ISysDictService;
+import com.jero.modules.system.vo.SysDictPage;
+import org.jeecgframework.poi.excel.ExcelImportCheckUtil;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+/**
+ *
+ * 字典表 前端控制器
+ *
+ *
+ * @Author zhangweijian
+ * @since 2018-12-28
+ */
+@RestController
+@Api(tags = "字典控制器")
+@RequestMapping("/sys/dict")
+@Slf4j
+public class SysDictController {
+
+ @Autowired
+ private ISysDictService sysDictService;
+ @Autowired
+ private ISysDictItemService sysDictItemService;
+ @Autowired
+ public RedisTemplate redisTemplate;
+
+ @RequestMapping(value = "/list", method = RequestMethod.GET)
+ @ApiOperation(value = "字典控制器-分页列表查询", notes = "字典控制器-分页列表查询")
+ public Result> queryPageList(SysDict sysDict, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+ @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
+ Result> result = new Result>();
+ QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, req.getParameterMap());
+ Page page = new Page(pageNo, pageSize);
+ IPage pageList = sysDictService.page(page, queryWrapper);
+ log.debug("查询当前页:"+pageList.getCurrent());
+ log.debug("查询当前页数量:"+pageList.getSize());
+ log.debug("查询结果数量:"+pageList.getRecords().size());
+ log.debug("数据总数:"+pageList.getTotal());
+ result.setSuccess(true);
+ result.setResult(pageList);
+ return result;
+ }
+
+ /**
+ * @功能:获取树形字典数据
+ * @param sysDict
+ * @param pageNo
+ * @param pageSize
+ * @param req
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ @ApiOperation(value = "字典控制器-树形字典数据", notes = "字典控制器-树形字典数据")
+ @RequestMapping(value = "/treeList", method = RequestMethod.GET)
+ public Result> treeList(SysDict sysDict, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+ @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) {
+ Result> result = new Result<>();
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ // 构造查询条件
+ String dictName = sysDict.getDictName();
+ if(oConvertUtils.isNotEmpty(dictName)) {
+ query.like(true, SysDict::getDictName, dictName);
+ }
+ query.orderByDesc(true, SysDict::getCreateTime);
+ List list = sysDictService.list(query);
+ List treeList = new ArrayList<>();
+ for (SysDict node : list) {
+ treeList.add(new SysDictTree(node));
+ }
+ result.setSuccess(true);
+ result.setResult(treeList);
+ return result;
+ }
+
+ /**
+ * 获取字典数据
+ * @param dictCode 字典code
+ * @param dictCode 表名,文本字段,code字段 | 举例:sys_user,realname,id
+ * @return
+ */
+ @ApiOperation(value = "字典控制器-根据字典编码获取字典数据", notes = "字典控制器-根据字典编码获取字典数据")
+ @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET)
+ public Result> getDictItems(@PathVariable String dictCode, @RequestParam(value = "sign",required = false) String sign, HttpServletRequest request) {
+ log.info(" dictCode : "+ dictCode);
+ Result> result = new Result>();
+ List ls = null;
+ try {
+ if(dictCode.indexOf(",")!=-1) {
+ //关联表字典(举例:sys_user,realname,id)
+ String[] params = dictCode.split(",");
+
+ if(params.length<3) {
+ result.error500("字典Code格式不正确!");
+ return result;
+ }
+ //SQL注入校验(只限制非法串改数据库)
+ final String[] sqlInjCheck = {params[0],params[1],params[2]};
+ SqlInjectionUtil.filterContent(sqlInjCheck);
+
+ if(params.length==4) {
+ //SQL注入校验(查询条件SQL 特殊check,此方法仅供此处使用)
+ SqlInjectionUtil.specialFilterContent(params[3]);
+ ls = sysDictService.queryTableDictItemsByCodeAndFilter(params[0],params[1],params[2],params[3]);
+ }else if (params.length==3) {
+ ls = sysDictService.queryTableDictItemsByCode(params[0],params[1],params[2]);
+ }else{
+ result.error500("字典Code格式不正确!");
+ return result;
+ }
+ }else {
+ //字典表
+ ls = sysDictService.queryDictItemsByCode(dictCode);
+ }
+
+ result.setSuccess(true);
+ result.setResult(ls);
+ log.debug(result.toString());
+ } catch (Exception e) {
+ log.error(e.getMessage(),e);
+ result.error500("操作失败");
+ return result;
+ }
+
+ return result;
+ }
+
+ /**
+ * 获取全部字典数据
+ *
+ * @return
+ */
+ @ApiOperation(value = "字典控制器-获取全部字典数据", notes = "字典控制器-获取全部字典数据")
+ @RequestMapping(value = "/queryAllDictItems", method = RequestMethod.GET)
+ public Result> queryAllDictItems(HttpServletRequest request) {
+ Map> res = new HashMap>();
+ res = sysDictService.queryAllDictItems();
+ return Result.OK(res);
+ }
+
+ /**
+ * 获取字典数据
+ * @param dictCode
+ * @return
+ */
+ @ApiOperation(value = "字典控制器-通过字典code和字典值key获取字典数据", notes = "字典控制器-通过字典code和字典值key获取字典数据")
+ @RequestMapping(value = "/getDictText/{dictCode}/{key}", method = RequestMethod.GET)
+ public Result getDictText(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key) {
+ log.info(" dictCode : "+ dictCode);
+ Result result = new Result();
+ String text = null;
+ try {
+ text = sysDictService.queryDictTextByKey(dictCode, key);
+ result.setSuccess(true);
+ result.setResult(text);
+ } catch (Exception e) {
+ log.error(e.getMessage(),e);
+ result.error500("操作失败");
+ return result;
+ }
+ return result;
+ }
+
+ /**
+ * 大数据量的字典表 走异步加载 即前端输入内容过滤数据
+ * @param dictCode
+ * @return
+ */
+ @ApiOperation(value = "字典控制器-通过字典code获取字典数据", notes = "字典控制器-通过字典code获取字典数据")
+ @RequestMapping(value = "/loadDict/{dictCode}", method = RequestMethod.GET)
+ public Result> loadDict(@PathVariable String dictCode,
+ @RequestParam(name="keyword") String keyword,
+ @RequestParam(value = "sign",required = false) String sign,
+ @RequestParam(value = "pageSize", required = false) Integer pageSize) {
+ log.info(" 加载字典表数据,加载关键字: "+ keyword);
+ Result> result = new Result>();
+ List ls = null;
+ try {
+ if(dictCode.indexOf(",")!=-1) {
+ String[] params = dictCode.split(",");
+ if(params.length!=3) {
+ result.error500("字典Code格式不正确!");
+ return result;
+ }
+ if(pageSize!=null){
+ ls = sysDictService.queryLittleTableDictItems(params[0],params[1],params[2],keyword, pageSize);
+ }else{
+ ls = sysDictService.queryTableDictItems(params[0],params[1],params[2],keyword);
+ }
+ result.setSuccess(true);
+ result.setResult(ls);
+ log.info(result.toString());
+ }else {
+ result.error500("字典Code格式不正确!");
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage(),e);
+ result.error500("操作失败");
+ return result;
+ }
+
+ return result;
+ }
+
+ /**
+ * 根据字典code加载字典text 返回
+ */
+ @ApiOperation(value = "字典控制器-根据字典code加载字典text", notes = "字典控制器-根据字典code加载字典text")
+ @RequestMapping(value = "/loadDictItem/{dictCode}", method = RequestMethod.GET)
+ public Result> loadDictItem(@PathVariable String dictCode, @RequestParam(name="key") String keys, @RequestParam(value = "sign",required = false) String sign, HttpServletRequest request) {
+ Result> result = new Result<>();
+ try {
+ if(dictCode.indexOf(",")!=-1) {
+ String[] params = dictCode.split(",");
+ if(params.length!=3) {
+ result.error500("字典Code格式不正确!");
+ return result;
+ }
+ List texts = sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys);
+
+ result.setSuccess(true);
+ result.setResult(texts);
+ log.info(result.toString());
+ }else {
+ result.error500("字典Code格式不正确!");
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage(),e);
+ result.error500("操作失败");
+ return result;
+ }
+
+ return result;
+ }
+
+ /**
+ * 根据表名——显示字段-存储字段 pid 加载树形数据
+ */
+ @ApiOperation(value = "字典控制器-根据表名—显示字段-存储字段 pid 加载树形数据", notes = "字典控制器-根据表名—显示字段-存储字段 pid 加载树形数据")
+ @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET)
+ public Result> loadTreeData(@RequestParam(name="pid") String pid, @RequestParam(name="pidField") String pidField,
+ @RequestParam(name="tableName") String tbname,
+ @RequestParam(name="text") String text,
+ @RequestParam(name="code") String code,
+ @RequestParam(name="hasChildField", required = false) String hasChildField,
+ @RequestParam(value = "sign", required = false) String sign, HttpServletRequest request) {
+ Result> result = new Result>();
+
+ // SQL注入漏洞 sign签名校验(表名,label字段,val字段,条件)
+ String dictCode = tbname +","+ text +","+ code;
+ SqlInjectionUtil.filterContent(dictCode);
+ List ls = sysDictService.queryTreeList(null, tbname, text, code, pidField, pid, hasChildField);
+ result.setSuccess(true);
+ result.setResult(ls);
+ return result;
+ }
+
+ /**
+ * 查询后返回树型数据
+ */
+ @ApiOperation(value = "字典控制器-根据表名—显示字段-存储字段 加载树形数据", notes = "字典控制器-根据表名—显示字段-存储字段 加载树形数据")
+ @RequestMapping(value = "/queryAllTreeData", method = RequestMethod.GET)
+ public Result> queryAllTreeData(@RequestParam(name="pidField") String pidField,
+ @RequestParam(name="tableName") String tbname,
+ @RequestParam(name="text") String text,
+ @RequestParam(name="code") String code,
+ HttpServletRequest request) {
+ Result> result = new Result>();
+
+ // SQL注入漏洞 sign签名校验(表名,label字段,val字段,条件)
+ String dictCode = tbname +","+ text +","+ code;
+ SqlInjectionUtil.filterContent(dictCode);
+ List ls = sysDictService.queryAllTreeData(tbname, text, code, pidField);
+ result.setSuccess(true);
+ result.setResult(ls);
+ return result;
+ }
+
+ /**
+ * @功能:新增
+ * @param sysDict
+ * @return
+ */
+ @ApiOperation(value = "字典控制器-新增字典", notes = "字典控制器-新增字典")
+ @RequiresRoles({"admin"})
+ @RequestMapping(value = "/add", method = RequestMethod.POST)
+ public Result add(@RequestBody SysDict sysDict) {
+ Result result = new Result();
+ try {
+ sysDict.setCreateTime(new Date());
+ sysDict.setDelFlag(CommonConstant.DEL_FLAG_0);
+ sysDictService.save(sysDict);
+ result.success("保存成功!");
+ } catch (Exception e) {
+ log.error(e.getMessage(),e);
+ result.error500("操作失败");
+ }
+ return result;
+ }
+
+ /**
+ * @功能:编辑
+ * @param sysDict
+ * @return
+ */
+ @ApiOperation(value = "字典控制器-编辑字典", notes = "字典控制器-编辑字典")
+ @RequiresRoles({"admin"})
+ @RequestMapping(value = "/edit", method = RequestMethod.PUT)
+ public Result edit(@RequestBody SysDict sysDict) {
+ Result result = new Result();
+ SysDict sysdict = sysDictService.getById(sysDict.getId());
+ if(sysdict==null) {
+ result.error500("未找到对应实体");
+ }else {
+ sysDict.setUpdateTime(new Date());
+ boolean ok = sysDictService.updateById(sysDict);
+ if(ok) {
+ result.success("编辑成功!");
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @功能:删除
+ * @param id
+ * @return
+ */
+ @ApiOperation(value = "字典控制器-删除字典", notes = "字典控制器-删除字典")
+ @RequiresRoles({"admin"})
+ @DeleteMapping(value = "/delete")
+ @CacheEvict(value=CacheConstant.SYS_DICT_CACHE, allEntries=true)
+ public Result delete(@RequestParam(name="id",required=true) String id) {
+ Result result = new Result();
+ boolean ok = sysDictService.removeById(id);
+ if(ok) {
+ result.success("删除成功!");
+ }else{
+ result.error500("删除失败!");
+ }
+ return result;
+ }
+
+ /**
+ * @功能:批量删除
+ * @param ids
+ * @return
+ */
+ @ApiOperation(value = "字典控制器-批量字典", notes = "字典控制器-批量字典")
+ @RequiresRoles({"admin"})
+ @DeleteMapping(value = "/deleteBatch")
+ @CacheEvict(value= CacheConstant.SYS_DICT_CACHE, allEntries=true)
+ public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+ Result result = new Result();
+ if(oConvertUtils.isEmpty(ids)) {
+ result.error500("参数不识别!");
+ }else {
+ sysDictService.removeByIds(Arrays.asList(ids.split(",")));
+ result.success("删除成功!");
+ }
+ return result;
+ }
+
+ /**
+ * @功能:刷新缓存
+ * @date 修改时间 2021.4.8
+ * @return
+ */
+ @RequestMapping(value = "/refleshCache")
+ public Result> refleshCache() {
+ Result> result = new Result();
+ sysDictService.refreshCache();
+ return result;
+ }
+
+ /**
+ * 导出excel
+ *
+ * @param request
+ */
+ @RequestMapping(value = "/exportXls")
+ public ModelAndView exportXls(SysDict sysDict, HttpServletRequest request) {
+ // Step.1 组装查询条件
+ QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, request.getParameterMap());
+ //Step.2 AutoPoi 导出Excel
+ ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+ List pageList = new ArrayList();
+
+ List sysDictList = sysDictService.list(queryWrapper);
+ for (SysDict dictMain : sysDictList) {
+ SysDictPage vo = new SysDictPage();
+ BeanUtils.copyProperties(dictMain, vo);
+ // 查询机票
+ List sysDictItemList = sysDictItemService.selectItemsByMainId(dictMain.getId());
+ vo.setSysDictItemList(sysDictItemList);
+ pageList.add(vo);
+ }
+
+ // 导出文件名称
+ mv.addObject(NormalExcelConstants.FILE_NAME, "数据字典");
+ // 注解对象Class
+ mv.addObject(NormalExcelConstants.CLASS, SysDictPage.class);
+ // 自定义表格参数
+ LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("数据字典列表", "导出人:"+user.getRealname(), "数据字典"));
+ // 导出数据列表
+ mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+ return mv;
+ }
+
+ /**
+ * 通过excel导入数据
+ *
+ * @param request
+ * @param
+ * @return
+ */
+ @RequiresRoles({"admin"})
+ @PostMapping(value = "/importExcel")
+ public Result> importExcel(HttpServletRequest request, HttpServletResponse response) {
+ MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+ Map fileMap = multipartRequest.getFileMap();
+ for (Map.Entry entity : fileMap.entrySet()) {
+ MultipartFile file = entity.getValue();// 获取上传文件对象
+ ImportParams params = new ImportParams();
+ params.setTitleRows(2);
+ params.setHeadRows(2);
+ params.setNeedSave(true);
+ try {
+ //导入Excel格式校验,看匹配的字段文本概率
+ Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysDictPage.class, params);
+ if(!t){
+ throw new RuntimeException("导入Excel校验失败 !");
+ }
+ List list = ExcelImportUtil.importExcel(file.getInputStream(), SysDictPage.class, params);
+ // 错误信息
+ List errorMessage = new ArrayList<>();
+ int successLines = 0, errorLines = 0;
+ for (int i=0;i< list.size();i++) {
+ SysDict po = new SysDict();
+ BeanUtils.copyProperties(list.get(i), po);
+ po.setDelFlag(CommonConstant.DEL_FLAG_0);
+ try {
+ Integer integer = sysDictService.saveMain(po, list.get(i).getSysDictItemList());
+ if(integer>0){
+ successLines++;
+ }else{
+ errorLines++;
+ int lineNumber = i + 1;
+ errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。");
+ }
+ } catch (Exception e) {
+ errorLines++;
+ int lineNumber = i + 1;
+ errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。");
+ }
+ }
+ return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage);
+ } catch (Exception e) {
+ log.error(e.getMessage(),e);
+ return Result.error("文件导入失败:"+e.getMessage());
+ } finally {
+ try {
+ file.getInputStream().close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ return Result.error("文件导入失败!");
+ }
+
+
+ /**
+ * 查询被删除的列表
+ * @return
+ */
+ @GetMapping(value = "/deleteList")
+ public Result> deleteList() {
+ Result> result = new Result>();
+ List list = this.sysDictService.queryDeleteList();
+ result.setSuccess(true);
+ result.setResult(list);
+ return result;
+ }
+
+ /**
+ * 物理删除
+ * @param id
+ * @return
+ */
+ @DeleteMapping(value = "/deletePhysic/{id}")
+ public Result> deletePhysic(@PathVariable String id) {
+ try {
+ sysDictService.deleteOneDictPhysically(id);
+ return Result.OK("删除成功!");
+ } catch (Exception e) {
+ e.printStackTrace();
+ return Result.error("删除失败!");
+ }
+ }
+
+ /**
+ * 取回
+ * @param id
+ * @return
+ */
+ @PutMapping(value = "/back/{id}")
+ public Result> back(@PathVariable String id) {
+ try {
+ sysDictService.updateDictDelFlag(0,id);
+ return Result.OK("操作成功!");
+ } catch (Exception e) {
+ e.printStackTrace();
+ return Result.error("操作失败!");
+ }
+ }
+
+}
diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java
index 5e0f0a81..575a217a 100644
--- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java
+++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java
@@ -1,138 +1,145 @@
-package com.jero.modules.system.service;
-
-import java.util.List;
-import java.util.Map;
-
-import com.jero.common.system.vo.DictModel;
-import com.jero.common.system.vo.DictQuery;
-import com.jero.modules.system.entity.SysDict;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.jero.modules.system.entity.SysDictItem;
-import com.jero.modules.system.model.TreeSelectModel;
-
-/**
- *
- * 字典表 服务类
- *
- *
- * @Author zhangweijian
- * @since 2018-12-28
- */
-public interface ISysDictService extends IService {
-
- public List queryDictItemsByCode(String code);
-
- public Map> queryAllDictItems();
-
- @Deprecated
- List queryTableDictItemsByCode(String table, String text, String code);
-
- @Deprecated
- public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql);
-
- public String queryDictTextByKey(String code, String key);
-
- @Deprecated
- String queryTableDictTextByKey(String table, String text, String code, String key);
-
- @Deprecated
- List queryTableDictByKeys(String table, String text, String code, String keys);
-
- /**
- * 根据字典类型删除关联表中其对应的数据
- *
- * @param sysDict
- * @return
- */
- boolean deleteByDictId(SysDict sysDict);
-
- /**
- * 添加一对多
- */
- public Integer saveMain(SysDict sysDict, List sysDictItemList);
-
- /**
- * 查询所有部门 作为字典信息 id -->value,departName -->text
- * @return
- */
- public List queryAllDepartBackDictModel();
-
- /**
- * 查询所有用户 作为字典信息 username -->value,realname -->text
- * @return
- */
- public List queryAllUserBackDictModel();
-
- /**
- * 通过关键字查询字典表
- * @param table
- * @param text
- * @param code
- * @param keyword
- * @return
- */
- @Deprecated
- public List queryTableDictItems(String table, String text, String code,String keyword);
-
- /**
- * 查询字典表数据 只查询前10条
- * @param table
- * @param text
- * @param code
- * @param keyword
- * @return
- */
- public List queryLittleTableDictItems(String table, String text, String code,String keyword, int pageSize);
-
- /**
- * 根据表名、显示字段名、存储字段名 查询树
- * @param table
- * @param text
- * @param code
- * @param pidField
- * @param pid
- * @param hasChildField
- * @return
- */
- List queryTreeList(String query,String table, String text, String code, String pidField,String pid,String hasChildField);
-
- /**
- * 根据表名、显示字段名、存储字段名 和查询条件拼接树结构
- * @param table
- * @param text
- * @param code
- * @param pidField
- * @return
- */
- List queryAllTreeData(String table, String text, String code, String pidField);
-
- /**
- * 真实删除
- * @param id
- */
- public void deleteOneDictPhysically(String id);
-
- /**
- * 修改delFlag
- * @param delFlag
- * @param id
- */
- public void updateDictDelFlag(int delFlag,String id);
-
- /**
- * 查询被逻辑删除的数据
- * @return
- */
- public List queryDeleteList();
-
- /**
- * 分页查询
- * @param query
- * @param pageSize
- * @param pageNo
- * @return
- */
- @Deprecated
- public List queryDictTablePageList(DictQuery query,int pageSize, int pageNo);
-
-}
+package com.jero.modules.system.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.jero.common.system.vo.DictModel;
+import com.jero.common.system.vo.DictQuery;
+import com.jero.modules.system.entity.SysDict;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jero.modules.system.entity.SysDictItem;
+import com.jero.modules.system.model.TreeSelectModel;
+
+/**
+ *
+ * 字典表 服务类
+ *
+ *
+ * @Author zhangweijian
+ * @since 2018-12-28
+ */
+public interface ISysDictService extends IService {
+
+ public List queryDictItemsByCode(String code);
+
+ public Map> queryAllDictItems();
+
+ @Deprecated
+ List queryTableDictItemsByCode(String table, String text, String code);
+
+ @Deprecated
+ public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql);
+
+ public String queryDictTextByKey(String code, String key);
+
+ @Deprecated
+ String queryTableDictTextByKey(String table, String text, String code, String key);
+
+ @Deprecated
+ List queryTableDictByKeys(String table, String text, String code, String keys);
+
+ /**
+ * 根据字典类型删除关联表中其对应的数据
+ *
+ * @param sysDict
+ * @return
+ */
+ boolean deleteByDictId(SysDict sysDict);
+
+ /**
+ * 添加一对多
+ */
+ public Integer saveMain(SysDict sysDict, List sysDictItemList);
+
+ /**
+ * 查询所有部门 作为字典信息 id -->value,departName -->text
+ * @return
+ */
+ public List queryAllDepartBackDictModel();
+
+ /**
+ * 查询所有用户 作为字典信息 username -->value,realname -->text
+ * @return
+ */
+ public List queryAllUserBackDictModel();
+
+ /**
+ * 通过关键字查询字典表
+ * @param table
+ * @param text
+ * @param code
+ * @param keyword
+ * @return
+ */
+ @Deprecated
+ public List queryTableDictItems(String table, String text, String code,String keyword);
+
+ /**
+ * 查询字典表数据 只查询前10条
+ * @param table
+ * @param text
+ * @param code
+ * @param keyword
+ * @return
+ */
+ public List queryLittleTableDictItems(String table, String text, String code,String keyword, int pageSize);
+
+ /**
+ * 根据表名、显示字段名、存储字段名 查询树
+ * @param table
+ * @param text
+ * @param code
+ * @param pidField
+ * @param pid
+ * @param hasChildField
+ * @return
+ */
+ List queryTreeList(String query,String table, String text, String code, String pidField,String pid,String hasChildField);
+
+ /**
+ * 根据表名、显示字段名、存储字段名 和查询条件拼接树结构
+ * @param table
+ * @param text
+ * @param code
+ * @param pidField
+ * @return
+ */
+ List queryAllTreeData(String table, String text, String code, String pidField);
+
+ /**
+ * 真实删除
+ * @param id
+ */
+ public void deleteOneDictPhysically(String id);
+
+ /**
+ * 修改delFlag
+ * @param delFlag
+ * @param id
+ */
+ public void updateDictDelFlag(int delFlag,String id);
+
+ /**
+ * 查询被逻辑删除的数据
+ * @return
+ */
+ public List queryDeleteList();
+
+ /**
+ * 分页查询
+ * @param query
+ * @param pageSize
+ * @param pageNo
+ * @return
+ */
+ @Deprecated
+ public List queryDictTablePageList(DictQuery query,int pageSize, int pageNo);
+
+ /**
+ * 刷新dict缓存
+ * @date 2021/4/8 9:06
+ * @return void
+ */
+ void refreshCache();
+
+}
diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDictServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDictServiceImpl.java
index 4ba92636..1a96d51a 100644
--- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDictServiceImpl.java
+++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDictServiceImpl.java
@@ -1,290 +1,313 @@
-package com.jero.modules.system.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.extern.slf4j.Slf4j;
-import com.jero.common.constant.CacheConstant;
-import com.jero.common.constant.CommonConstant;
-import com.jero.common.system.vo.DictModel;
-import com.jero.common.system.vo.DictQuery;
-import com.jero.common.util.oConvertUtils;
-import com.jero.modules.system.entity.SysDict;
-import com.jero.modules.system.entity.SysDictItem;
-import com.jero.modules.system.mapper.SysDictItemMapper;
-import com.jero.modules.system.mapper.SysDictMapper;
-import com.jero.modules.system.model.TreeSelectModel;
-import com.jero.modules.system.service.ISysDictService;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- *
- * 字典表 服务实现类
- *
- *
- * @Author zhangweijian
- * @since 2018-12-28
- */
-@Service
-@Slf4j
-public class SysDictServiceImpl extends ServiceImpl implements ISysDictService {
-
- @Autowired
- private SysDictMapper sysDictMapper;
- @Autowired
- private SysDictItemMapper sysDictItemMapper;
-
- /**
- * 通过查询指定code 获取字典
- * @param code
- * @return
- */
- @Override
- @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code")
- public List queryDictItemsByCode(String code) {
- log.debug("无缓存dictCache的时候调用这里!");
- return sysDictMapper.queryDictItemsByCode(code);
- }
-
- @Override
- public Map> queryAllDictItems() {
- Map> res = new HashMap>();
- List ls = sysDictMapper.selectList(null);
- LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
- queryWrapper.eq(SysDictItem::getStatus, 1);
- queryWrapper.orderByAsc(SysDictItem::getSortOrder);
- List sysDictItemList = sysDictItemMapper.selectList(queryWrapper);
-
- for (SysDict d : ls) {
- List dictModelList = sysDictItemList.stream().filter(s -> d.getId().equals(s.getDictId())).map(item -> {
- DictModel dictModel = new DictModel();
- dictModel.setText(item.getItemText());
- dictModel.setValue(item.getItemValue());
- return dictModel;
- }).collect(Collectors.toList());
- res.put(d.getDictCode(), dictModelList);
- }
- log.debug("-------登录加载系统字典-----" + res.toString());
- return res;
- }
-
- /**
- * 通过查询指定code 获取字典值text
- * @param code
- * @param key
- * @return
- */
-
- @Override
- @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code+':'+#key")
- public String queryDictTextByKey(String code, String key) {
- log.debug("无缓存dictText的时候调用这里!");
- return sysDictMapper.queryDictTextByKey(code, key);
- }
-
- /**
- * 通过查询指定table的 text code 获取字典
- * dictTableCache采用redis缓存有效期10分钟
- * @param table
- * @param text
- * @param code
- * @return
- */
- @Override
- //@Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE)
- public List queryTableDictItemsByCode(String table, String text, String code) {
- log.debug("无缓存dictTableList的时候调用这里!");
- return sysDictMapper.queryTableDictItemsByCode(table,text,code);
- }
-
- @Override
- public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql) {
- log.debug("无缓存dictTableList的时候调用这里!");
- return sysDictMapper.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql);
- }
-
- /**
- * 通过查询指定table的 text code 获取字典值text
- * dictTableCache采用redis缓存有效期10分钟
- * @param table
- * @param text
- * @param code
- * @param key
- * @return
- */
- @Override
- @Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE)
- public String queryTableDictTextByKey(String table,String text,String code, String key) {
- log.debug("无缓存dictTable的时候调用这里!");
- return sysDictMapper.queryTableDictTextByKey(table,text,code,key);
- }
-
- /**
- * 通过查询指定table的 text code 获取字典,包含text和value
- * dictTableCache采用redis缓存有效期10分钟
- * @param table
- * @param text
- * @param code
- * @param keys (逗号分隔)
- * @return
- */
- @Override
- //update-begin--Author:lvdandan Date:20201204 for:JT-36【online】树形列表bug修改后,还是显示原来值 暂时去掉缓存
- //@Cacheable(value = CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE)
- //update-end--Author:lvdandan Date:20201204 for:JT-36【online】树形列表bug修改后,还是显示原来值 暂时去掉缓存
- public List queryTableDictByKeys(String table, String text, String code, String keys) {
- if(oConvertUtils.isEmpty(keys)){
- return null;
- }
- String[] keyArray = keys.split(",");
- List dicts = sysDictMapper.queryTableDictByKeys(table, text, code, keyArray);
- List texts = new ArrayList<>(dicts.size());
- // 查询出来的顺序可能是乱的,需要排个序
- for (String key : keyArray) {
- for (DictModel dict : dicts) {
- if (key.equals(dict.getValue())) {
- texts.add(dict.getText());
- break;
- }
- }
- }
- return texts;
- }
-
- /**
- * 根据字典类型id删除关联表中其对应的数据
- */
- @Override
- public boolean deleteByDictId(SysDict sysDict) {
- sysDict.setDelFlag(CommonConstant.DEL_FLAG_1);
- return this.updateById(sysDict);
- }
-
- @Override
- @Transactional
- public Integer saveMain(SysDict sysDict, List sysDictItemList) {
- int insert=0;
- try{
- insert = sysDictMapper.insert(sysDict);
- if (sysDictItemList != null) {
- for (SysDictItem entity : sysDictItemList) {
- entity.setDictId(sysDict.getId());
- entity.setStatus(1);
- sysDictItemMapper.insert(entity);
- }
- }
- }catch(Exception e){
- return insert;
- }
- return insert;
- }
-
- @Override
- public List queryAllDepartBackDictModel() {
- return baseMapper.queryAllDepartBackDictModel();
- }
-
- @Override
- public List queryAllUserBackDictModel() {
- return baseMapper.queryAllUserBackDictModel();
- }
-
- @Override
- public List queryTableDictItems(String table, String text, String code, String keyword) {
- return baseMapper.queryTableDictItems(table, text, code, "%"+keyword+"%");
- }
-
- @Override
- public List queryLittleTableDictItems(String table, String text, String code, String keyword, int pageSize) {
- Page page = new Page(1, pageSize);
- IPage pageList = baseMapper.queryTableDictItems(page, table, text, code, "%"+keyword+"%");
- return pageList.getRecords();
- }
-
- @Override
- public List queryTreeList(String query,String table, String text, String code, String pidField, String pid, String hasChildField) {
- return baseMapper.queryTreeList(query, table, text, code, pidField, pid,hasChildField);
- }
-
- @Override
- public List queryAllTreeData(String table, String text, String code, String pidField) {
- // 先查出要查询的数据
- List serachTreeNode = this.baseMapper.queryTreeDataByKeyword(table, text, code, pidField);
-
- // 构建一个HashMap,按ID为key存储全部查询出的数据结构
- HashMap resultMap = new HashMap<>();
- for (TreeSelectModel treeSelectModel : serachTreeNode){
- resultMap.put(treeSelectModel.getKey(), treeSelectModel);
-
- TreeSelectModel copyTreeSelectModel = treeSelectModel;
- // 叠加的查询父节点
- while (StringUtils.isNotEmpty(copyTreeSelectModel.getParentId())){
- if (resultMap.get(copyTreeSelectModel.getParentId()) != null){
- break;
- }
-
- TreeSelectModel newTreeSelectModel = this.baseMapper.queryTreeDataItemById(copyTreeSelectModel.getParentId(), table, text, code, pidField);
- if(newTreeSelectModel == null){
- break;
- }
-
- resultMap.put(newTreeSelectModel.getKey(), newTreeSelectModel);
-
- copyTreeSelectModel = newTreeSelectModel;
- }
- }
- System.out.println("aaa");
-
- // 遍历map里全部的节点,取出父节点放入list,并循环添加他的子节点
- List treeNodeList = new ArrayList<>();
- for (String key : resultMap.keySet()){
- TreeSelectModel curTreeSelectModel = resultMap.get(key);
- if (StringUtils.isEmpty(curTreeSelectModel.getParentId())){
- treeNodeList.add(curTreeSelectModel);
- } else {
- // 如果有父节点,则找出自己的父节点,把自己添加进父节点的children属性里
- TreeSelectModel existParentNode = resultMap.get(curTreeSelectModel.getParentId());
- if (existParentNode != null){
- existParentNode.getChildren().add(curTreeSelectModel);
- }
- }
- }
-
- return treeNodeList;
- }
-
- @Override
- public void deleteOneDictPhysically(String id) {
- this.baseMapper.deleteOneById(id);
- this.sysDictItemMapper.delete(new LambdaQueryWrapper().eq(SysDictItem::getDictId,id));
- }
-
- @Override
- public void updateDictDelFlag(int delFlag, String id) {
- baseMapper.updateDictDelFlag(delFlag,id);
- }
-
- @Override
- public List queryDeleteList() {
- return baseMapper.queryDeleteList();
- }
-
- @Override
- public List queryDictTablePageList(DictQuery query, int pageSize, int pageNo) {
- Page page = new Page(pageNo,pageSize,false);
- Page pageList = baseMapper.queryDictTablePageList(page, query);
- return pageList.getRecords();
- }
-}
+package com.jero.modules.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import com.jero.common.constant.CacheConstant;
+import com.jero.common.constant.CommonConstant;
+import com.jero.common.system.vo.DictModel;
+import com.jero.common.system.vo.DictQuery;
+import com.jero.common.util.oConvertUtils;
+import com.jero.modules.system.entity.SysDict;
+import com.jero.modules.system.entity.SysDictItem;
+import com.jero.modules.system.mapper.SysDictItemMapper;
+import com.jero.modules.system.mapper.SysDictMapper;
+import com.jero.modules.system.model.TreeSelectModel;
+import com.jero.modules.system.service.ISysDictService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ *
+ * 字典表 服务实现类
+ *
+ *
+ * @Author zhangweijian
+ * @since 2018-12-28
+ */
+@Service
+@Slf4j
+public class SysDictServiceImpl extends ServiceImpl implements ISysDictService {
+
+ @Autowired
+ private SysDictMapper sysDictMapper;
+ @Autowired
+ private SysDictItemMapper sysDictItemMapper;
+ @Resource
+ private RedisTemplate redisTemplate;
+
+ /**
+ * 通过查询指定code 获取字典
+ * @param code
+ * @return
+ */
+ @Override
+ @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code")
+ public List queryDictItemsByCode(String code) {
+ log.debug("无缓存dictCache的时候调用这里!");
+ return sysDictMapper.queryDictItemsByCode(code);
+ }
+
+ @Override
+ public Map> queryAllDictItems() {
+ Map> res = new HashMap>();
+ List ls = sysDictMapper.selectList(null);
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
+ queryWrapper.eq(SysDictItem::getStatus, 1);
+ queryWrapper.orderByAsc(SysDictItem::getSortOrder);
+ List sysDictItemList = sysDictItemMapper.selectList(queryWrapper);
+
+ for (SysDict d : ls) {
+ List dictModelList = sysDictItemList.stream().filter(s -> d.getId().equals(s.getDictId())).map(item -> {
+ DictModel dictModel = new DictModel();
+ dictModel.setText(item.getItemText());
+ dictModel.setValue(item.getItemValue());
+ return dictModel;
+ }).collect(Collectors.toList());
+ res.put(d.getDictCode(), dictModelList);
+ }
+ log.debug("-------登录加载系统字典-----" + res.toString());
+ return res;
+ }
+
+ /**
+ * 通过查询指定code 获取字典值text
+ * @param code
+ * @param key
+ * @return
+ */
+
+ @Override
+ @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code+':'+#key")
+ public String queryDictTextByKey(String code, String key) {
+ log.debug("无缓存dictText的时候调用这里!");
+ return sysDictMapper.queryDictTextByKey(code, key);
+ }
+
+ /**
+ * 通过查询指定table的 text code 获取字典
+ * dictTableCache采用redis缓存有效期10分钟
+ * @param table
+ * @param text
+ * @param code
+ * @return
+ */
+ @Override
+ //@Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE)
+ public List queryTableDictItemsByCode(String table, String text, String code) {
+ log.debug("无缓存dictTableList的时候调用这里!");
+ return sysDictMapper.queryTableDictItemsByCode(table,text,code);
+ }
+
+ @Override
+ public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql) {
+ log.debug("无缓存dictTableList的时候调用这里!");
+ return sysDictMapper.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql);
+ }
+
+ /**
+ * 通过查询指定table的 text code 获取字典值text
+ * dictTableCache采用redis缓存有效期10分钟
+ * @param table
+ * @param text
+ * @param code
+ * @param key
+ * @return
+ */
+ @Override
+ @Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE)
+ public String queryTableDictTextByKey(String table,String text,String code, String key) {
+ log.debug("无缓存dictTable的时候调用这里!");
+ return sysDictMapper.queryTableDictTextByKey(table,text,code,key);
+ }
+
+ /**
+ * 通过查询指定table的 text code 获取字典,包含text和value
+ * dictTableCache采用redis缓存有效期10分钟
+ * @param table
+ * @param text
+ * @param code
+ * @param keys (逗号分隔)
+ * @return
+ */
+ @Override
+ //update-begin--Author:lvdandan Date:20201204 for:JT-36【online】树形列表bug修改后,还是显示原来值 暂时去掉缓存
+ //@Cacheable(value = CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE)
+ //update-end--Author:lvdandan Date:20201204 for:JT-36【online】树形列表bug修改后,还是显示原来值 暂时去掉缓存
+ public List queryTableDictByKeys(String table, String text, String code, String keys) {
+ if(oConvertUtils.isEmpty(keys)){
+ return null;
+ }
+ String[] keyArray = keys.split(",");
+ List dicts = sysDictMapper.queryTableDictByKeys(table, text, code, keyArray);
+ List texts = new ArrayList<>(dicts.size());
+ // 查询出来的顺序可能是乱的,需要排个序
+ for (String key : keyArray) {
+ for (DictModel dict : dicts) {
+ if (key.equals(dict.getValue())) {
+ texts.add(dict.getText());
+ break;
+ }
+ }
+ }
+ return texts;
+ }
+
+ /**
+ * 根据字典类型id删除关联表中其对应的数据
+ */
+ @Override
+ public boolean deleteByDictId(SysDict sysDict) {
+ sysDict.setDelFlag(CommonConstant.DEL_FLAG_1);
+ return this.updateById(sysDict);
+ }
+
+ @Override
+ @Transactional
+ public Integer saveMain(SysDict sysDict, List sysDictItemList) {
+ int insert=0;
+ try{
+ insert = sysDictMapper.insert(sysDict);
+ if (sysDictItemList != null) {
+ for (SysDictItem entity : sysDictItemList) {
+ entity.setDictId(sysDict.getId());
+ entity.setStatus(1);
+ sysDictItemMapper.insert(entity);
+ }
+ }
+ }catch(Exception e){
+ return insert;
+ }
+ return insert;
+ }
+
+ @Override
+ public List queryAllDepartBackDictModel() {
+ return baseMapper.queryAllDepartBackDictModel();
+ }
+
+ @Override
+ public List queryAllUserBackDictModel() {
+ return baseMapper.queryAllUserBackDictModel();
+ }
+
+ @Override
+ public List queryTableDictItems(String table, String text, String code, String keyword) {
+ return baseMapper.queryTableDictItems(table, text, code, "%"+keyword+"%");
+ }
+
+ @Override
+ public List queryLittleTableDictItems(String table, String text, String code, String keyword, int pageSize) {
+ Page page = new Page(1, pageSize);
+ IPage pageList = baseMapper.queryTableDictItems(page, table, text, code, "%"+keyword+"%");
+ return pageList.getRecords();
+ }
+
+ @Override
+ public List queryTreeList(String query,String table, String text, String code, String pidField, String pid, String hasChildField) {
+ return baseMapper.queryTreeList(query, table, text, code, pidField, pid,hasChildField);
+ }
+
+ @Override
+ public List queryAllTreeData(String table, String text, String code, String pidField) {
+ // 先查出要查询的数据
+ List serachTreeNode = this.baseMapper.queryTreeDataByKeyword(table, text, code, pidField);
+
+ // 构建一个HashMap,按ID为key存储全部查询出的数据结构
+ HashMap resultMap = new HashMap<>();
+ for (TreeSelectModel treeSelectModel : serachTreeNode){
+ resultMap.put(treeSelectModel.getKey(), treeSelectModel);
+
+ TreeSelectModel copyTreeSelectModel = treeSelectModel;
+ // 叠加的查询父节点
+ while (StringUtils.isNotEmpty(copyTreeSelectModel.getParentId())){
+ if (resultMap.get(copyTreeSelectModel.getParentId()) != null){
+ break;
+ }
+
+ TreeSelectModel newTreeSelectModel = this.baseMapper.queryTreeDataItemById(copyTreeSelectModel.getParentId(), table, text, code, pidField);
+ if(newTreeSelectModel == null){
+ break;
+ }
+
+ resultMap.put(newTreeSelectModel.getKey(), newTreeSelectModel);
+
+ copyTreeSelectModel = newTreeSelectModel;
+ }
+ }
+ System.out.println("aaa");
+
+ // 遍历map里全部的节点,取出父节点放入list,并循环添加他的子节点
+ List treeNodeList = new ArrayList<>();
+ for (String key : resultMap.keySet()){
+ TreeSelectModel curTreeSelectModel = resultMap.get(key);
+ if (StringUtils.isEmpty(curTreeSelectModel.getParentId())){
+ treeNodeList.add(curTreeSelectModel);
+ } else {
+ // 如果有父节点,则找出自己的父节点,把自己添加进父节点的children属性里
+ TreeSelectModel existParentNode = resultMap.get(curTreeSelectModel.getParentId());
+ if (existParentNode != null){
+ existParentNode.getChildren().add(curTreeSelectModel);
+ }
+ }
+ }
+
+ return treeNodeList;
+ }
+
+ @Override
+ public void deleteOneDictPhysically(String id) {
+ this.baseMapper.deleteOneById(id);
+ this.sysDictItemMapper.delete(new LambdaQueryWrapper().eq(SysDictItem::getDictId,id));
+ }
+
+ @Override
+ public void updateDictDelFlag(int delFlag, String id) {
+ baseMapper.updateDictDelFlag(delFlag,id);
+ }
+
+ @Override
+ public List queryDeleteList() {
+ return baseMapper.queryDeleteList();
+ }
+
+ @Override
+ public List queryDictTablePageList(DictQuery query, int pageSize, int pageNo) {
+ Page page = new Page(pageNo,pageSize,false);
+ Page pageList = baseMapper.queryDictTablePageList(page, query);
+ return pageList.getRecords();
+ }
+ /**
+ * 刷新dict缓存
+ * @date 2021/4/8 9:07
+ * @param
+ * @return void
+ */
+ @Override
+ public void refreshCache() {
+ //清空字典缓存
+ Set keys = redisTemplate.keys(CacheConstant.SYS_DICT_CACHE + "*");
+ Set keys2 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_CACHE + "*");
+ Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*");
+ Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*");
+ Set keys5 = redisTemplate.keys( "jmreport:cache:dict*");
+ Set keys6 = redisTemplate.keys( "jmreport:cache:dictTable*");
+ redisTemplate.delete(keys);
+ redisTemplate.delete(keys2);
+ redisTemplate.delete(keys3);
+ redisTemplate.delete(keys4);
+ redisTemplate.delete(keys5);
+ redisTemplate.delete(keys6);
+ }
+}