9e49104f73f8f932bb6493fae888ea1aee7e2af2.svn-base 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. package org.jeecg.modules.system.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.apache.shiro.SecurityUtils;
  9. import org.apache.shiro.authz.annotation.RequiresRoles;
  10. import org.jeecg.common.api.vo.Result;
  11. import org.jeecg.common.constant.CacheConstant;
  12. import org.jeecg.common.constant.CommonConstant;
  13. import org.jeecg.common.system.query.QueryGenerator;
  14. import org.jeecg.common.system.vo.DictModel;
  15. import org.jeecg.common.system.vo.DictQuery;
  16. import org.jeecg.common.system.vo.LoginUser;
  17. import org.jeecg.common.util.ImportExcelUtil;
  18. import org.jeecg.common.util.SqlInjectionUtil;
  19. import org.jeecg.common.util.oConvertUtils;
  20. import org.jeecg.modules.system.entity.SysDict;
  21. import org.jeecg.modules.system.entity.SysDictItem;
  22. import org.jeecg.modules.system.model.SysDictTree;
  23. import org.jeecg.modules.system.model.TreeSelectModel;
  24. import org.jeecg.modules.system.service.ISysDictItemService;
  25. import org.jeecg.modules.system.service.ISysDictService;
  26. import org.jeecg.modules.system.vo.SysDictPage;
  27. import org.jeecgframework.poi.excel.ExcelImportCheckUtil;
  28. import org.jeecgframework.poi.excel.ExcelImportUtil;
  29. import org.jeecgframework.poi.excel.def.NormalExcelConstants;
  30. import org.jeecgframework.poi.excel.entity.ExportParams;
  31. import org.jeecgframework.poi.excel.entity.ImportParams;
  32. import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
  33. import org.springframework.beans.BeanUtils;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.cache.annotation.CacheEvict;
  36. import org.springframework.data.redis.core.RedisTemplate;
  37. import org.springframework.web.bind.annotation.*;
  38. import org.springframework.web.multipart.MultipartFile;
  39. import org.springframework.web.multipart.MultipartHttpServletRequest;
  40. import org.springframework.web.servlet.ModelAndView;
  41. import javax.servlet.http.HttpServletRequest;
  42. import javax.servlet.http.HttpServletResponse;
  43. import java.util.*;
  44. /**
  45. * <p>
  46. * 字典表 前端控制器
  47. * </p>
  48. *
  49. * @Author zhangweijian
  50. * @since 2018-12-28
  51. */
  52. @RestController
  53. @RequestMapping("/sys/dict")
  54. @Slf4j
  55. public class SysDictController {
  56. @Autowired
  57. private ISysDictService sysDictService;
  58. @Autowired
  59. private ISysDictItemService sysDictItemService;
  60. @Autowired
  61. public RedisTemplate<String, Object> redisTemplate;
  62. @RequestMapping(value = "/list", method = RequestMethod.GET)
  63. public Result<IPage<SysDict>> queryPageList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  64. @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) {
  65. Result<IPage<SysDict>> result = new Result<IPage<SysDict>>();
  66. QueryWrapper<SysDict> queryWrapper = QueryGenerator.initQueryWrapper(sysDict, req.getParameterMap());
  67. Page<SysDict> page = new Page<SysDict>(pageNo, pageSize);
  68. IPage<SysDict> pageList = sysDictService.page(page, queryWrapper);
  69. log.debug("查询当前页:"+pageList.getCurrent());
  70. log.debug("查询当前页数量:"+pageList.getSize());
  71. log.debug("查询结果数量:"+pageList.getRecords().size());
  72. log.debug("数据总数:"+pageList.getTotal());
  73. result.setSuccess(true);
  74. result.setResult(pageList);
  75. return result;
  76. }
  77. /**
  78. * @功能:获取树形字典数据
  79. * @param sysDict
  80. * @param pageNo
  81. * @param pageSize
  82. * @param req
  83. * @return
  84. */
  85. @SuppressWarnings("unchecked")
  86. @RequestMapping(value = "/treeList", method = RequestMethod.GET)
  87. public Result<List<SysDictTree>> treeList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  88. @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) {
  89. Result<List<SysDictTree>> result = new Result<>();
  90. LambdaQueryWrapper<SysDict> query = new LambdaQueryWrapper<>();
  91. // 构造查询条件
  92. String dictName = sysDict.getDictName();
  93. if(oConvertUtils.isNotEmpty(dictName)) {
  94. query.like(true, SysDict::getDictName, dictName);
  95. }
  96. query.orderByDesc(true, SysDict::getCreateTime);
  97. List<SysDict> list = sysDictService.list(query);
  98. List<SysDictTree> treeList = new ArrayList<>();
  99. for (SysDict node : list) {
  100. treeList.add(new SysDictTree(node));
  101. }
  102. result.setSuccess(true);
  103. result.setResult(treeList);
  104. return result;
  105. }
  106. /**
  107. * 获取全部字典数据
  108. *
  109. * @return
  110. */
  111. @RequestMapping(value = "/queryAllDictItems", method = RequestMethod.GET)
  112. public Result<?> queryAllDictItems(HttpServletRequest request) {
  113. Map<String, List<DictModel>> res = new HashMap<String, List<DictModel>>();
  114. res = sysDictService.queryAllDictItems();
  115. return Result.ok(res);
  116. }
  117. /**
  118. * 获取字典数据
  119. * @param dictCode
  120. * @return
  121. */
  122. @RequestMapping(value = "/getDictText/{dictCode}/{key}", method = RequestMethod.GET)
  123. public Result<String> getDictText(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key) {
  124. log.info(" dictCode : "+ dictCode);
  125. Result<String> result = new Result<String>();
  126. String text = null;
  127. try {
  128. text = sysDictService.queryDictTextByKey(dictCode, key);
  129. result.setSuccess(true);
  130. result.setResult(text);
  131. } catch (Exception e) {
  132. log.error(e.getMessage(),e);
  133. result.error500("操作失败");
  134. return result;
  135. }
  136. return result;
  137. }
  138. /**
  139. * 获取字典数据 【接口签名验证】
  140. * @param dictCode 字典code
  141. * @param dictCode 表名,文本字段,code字段 | 举例:sys_user,realname,id
  142. * @return
  143. */
  144. @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET)
  145. public Result<List<DictModel>> getDictItems(@PathVariable String dictCode, @RequestParam(value = "sign",required = false) String sign,HttpServletRequest request) {
  146. log.info(" dictCode : "+ dictCode);
  147. Result<List<DictModel>> result = new Result<List<DictModel>>();
  148. try {
  149. List<DictModel> ls = sysDictService.getDictItems(dictCode);
  150. if (ls == null) {
  151. result.error500("字典Code格式不正确!");
  152. return result;
  153. }
  154. result.setSuccess(true);
  155. result.setResult(ls);
  156. log.debug(result.toString());
  157. } catch (Exception e) {
  158. log.error(e.getMessage(), e);
  159. result.error500("操作失败");
  160. return result;
  161. }
  162. return result;
  163. }
  164. /**
  165. * 【接口签名验证】
  166. * 【JSearchSelectTag下拉搜索组件专用接口】
  167. * 大数据量的字典表 走异步加载 即前端输入内容过滤数据
  168. * @param dictCode 字典code格式:table,text,code
  169. * @return
  170. */
  171. @RequestMapping(value = "/loadDict/{dictCode}", method = RequestMethod.GET)
  172. public Result<List<DictModel>> loadDict(@PathVariable String dictCode,
  173. @RequestParam(name="keyword") String keyword,
  174. @RequestParam(value = "sign",required = false) String sign,
  175. @RequestParam(value = "pageSize", required = false) Integer pageSize) {
  176. log.info(" 加载字典表数据,加载关键字: "+ keyword);
  177. Result<List<DictModel>> result = new Result<List<DictModel>>();
  178. try {
  179. List<DictModel> ls = sysDictService.loadDict(dictCode, keyword, pageSize);
  180. if (ls == null) {
  181. result.error500("字典Code格式不正确!");
  182. return result;
  183. }
  184. result.setSuccess(true);
  185. result.setResult(ls);
  186. log.info(result.toString());
  187. return result;
  188. } catch (Exception e) {
  189. log.error(e.getMessage(),e);
  190. result.error500("操作失败");
  191. return result;
  192. }
  193. }
  194. /**
  195. * 【接口签名验证】
  196. * 【给表单设计器的表字典使用】下拉搜索模式,有值时动态拼接数据
  197. * @param dictCode
  198. * @param keyword 当前控件的值,可以逗号分割
  199. * @param sign
  200. * @param pageSize
  201. * @return
  202. */
  203. @RequestMapping(value = "/loadDictOrderByValue/{dictCode}", method = RequestMethod.GET)
  204. public Result<List<DictModel>> loadDictOrderByValue(
  205. @PathVariable String dictCode,
  206. @RequestParam(name = "keyword") String keyword,
  207. @RequestParam(value = "sign", required = false) String sign,
  208. @RequestParam(value = "pageSize", required = false) Integer pageSize) {
  209. // 首次查询查出来用户选中的值,并且不分页
  210. Result<List<DictModel>> firstRes = this.loadDict(dictCode, keyword, sign, null);
  211. if (!firstRes.isSuccess()) {
  212. return firstRes;
  213. }
  214. // 然后再查询出第一页的数据
  215. Result<List<DictModel>> result = this.loadDict(dictCode, "", sign, pageSize);
  216. if (!result.isSuccess()) {
  217. return result;
  218. }
  219. // 合并两次查询的数据
  220. List<DictModel> firstList = firstRes.getResult();
  221. List<DictModel> list = result.getResult();
  222. for (DictModel firstItem : firstList) {
  223. // anyMatch 表示:判断的条件里,任意一个元素匹配成功,返回true
  224. // allMatch 表示:判断条件里的元素,所有的都匹配成功,返回true
  225. // noneMatch 跟 allMatch 相反,表示:判断条件里的元素,所有的都匹配失败,返回true
  226. boolean none = list.stream().noneMatch(item -> item.getValue().equals(firstItem.getValue()));
  227. // 当元素不存在时,再添加到集合里
  228. if (none) {
  229. list.add(0, firstItem);
  230. }
  231. }
  232. return result;
  233. }
  234. /**
  235. * 【接口签名验证】
  236. * 根据字典code加载字典text 返回
  237. * @param dictCode 顺序:tableName,text,code
  238. * @param keys 要查询的key
  239. * @param sign
  240. * @param delNotExist 是否移除不存在的项,默认为true,设为false如果某个key不存在数据库中,则直接返回key本身
  241. * @param request
  242. * @return
  243. */
  244. @RequestMapping(value = "/loadDictItem/{dictCode}", method = RequestMethod.GET)
  245. public Result<List<String>> loadDictItem(@PathVariable String dictCode,@RequestParam(name="key") String keys, @RequestParam(value = "sign",required = false) String sign,@RequestParam(value = "delNotExist",required = false,defaultValue = "true") boolean delNotExist,HttpServletRequest request) {
  246. Result<List<String>> result = new Result<>();
  247. try {
  248. if(dictCode.indexOf(",")!=-1) {
  249. String[] params = dictCode.split(",");
  250. if(params.length!=3) {
  251. result.error500("字典Code格式不正确!");
  252. return result;
  253. }
  254. List<String> texts = sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys, delNotExist);
  255. result.setSuccess(true);
  256. result.setResult(texts);
  257. log.info(result.toString());
  258. }else {
  259. result.error500("字典Code格式不正确!");
  260. }
  261. } catch (Exception e) {
  262. log.error(e.getMessage(),e);
  263. result.error500("操作失败");
  264. return result;
  265. }
  266. return result;
  267. }
  268. /**
  269. * 【接口签名验证】
  270. * 根据表名——显示字段-存储字段 pid 加载树形数据
  271. */
  272. @SuppressWarnings("unchecked")
  273. @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET)
  274. public Result<List<TreeSelectModel>> loadTreeData(@RequestParam(name="pid") String pid,@RequestParam(name="pidField") String pidField,
  275. @RequestParam(name="tableName") String tbname,
  276. @RequestParam(name="text") String text,
  277. @RequestParam(name="code") String code,
  278. @RequestParam(name="hasChildField") String hasChildField,
  279. @RequestParam(name="condition") String condition,
  280. @RequestParam(value = "sign",required = false) String sign,HttpServletRequest request) {
  281. Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>();
  282. Map<String, String> query = null;
  283. if(oConvertUtils.isNotEmpty(condition)) {
  284. query = JSON.parseObject(condition, Map.class);
  285. }
  286. // SQL注入漏洞 sign签名校验(表名,label字段,val字段,条件)
  287. String dictCode = tbname+","+text+","+code+","+condition;
  288. SqlInjectionUtil.filterContent(dictCode);
  289. List<TreeSelectModel> ls = sysDictService.queryTreeList(query,tbname, text, code, pidField, pid,hasChildField);
  290. result.setSuccess(true);
  291. result.setResult(ls);
  292. return result;
  293. }
  294. /**
  295. * 【APP接口】根据字典配置查询表字典数据(目前暂未找到调用的地方)
  296. * @param query
  297. * @param pageNo
  298. * @param pageSize
  299. * @return
  300. */
  301. @Deprecated
  302. @GetMapping("/queryTableData")
  303. public Result<List<DictModel>> queryTableData(DictQuery query,
  304. @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
  305. @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
  306. @RequestParam(value = "sign",required = false) String sign,HttpServletRequest request){
  307. Result<List<DictModel>> res = new Result<List<DictModel>>();
  308. // SQL注入漏洞 sign签名校验
  309. String dictCode = query.getTable()+","+query.getText()+","+query.getCode();
  310. SqlInjectionUtil.filterContent(dictCode);
  311. List<DictModel> ls = this.sysDictService.queryDictTablePageList(query,pageSize,pageNo);
  312. res.setResult(ls);
  313. res.setSuccess(true);
  314. return res;
  315. }
  316. /**
  317. * @功能:新增
  318. * @param sysDict
  319. * @return
  320. */
  321. //@RequiresRoles({"admin"})
  322. @RequestMapping(value = "/add", method = RequestMethod.POST)
  323. public Result<SysDict> add(@RequestBody SysDict sysDict) {
  324. Result<SysDict> result = new Result<SysDict>();
  325. try {
  326. sysDict.setCreateTime(new Date());
  327. sysDict.setDelFlag(CommonConstant.DEL_FLAG_0);
  328. sysDictService.save(sysDict);
  329. result.success("保存成功!");
  330. } catch (Exception e) {
  331. log.error(e.getMessage(),e);
  332. result.error500("操作失败");
  333. }
  334. return result;
  335. }
  336. /**
  337. * @功能:编辑
  338. * @param sysDict
  339. * @return
  340. */
  341. //@RequiresRoles({"admin"})
  342. @RequestMapping(value = "/edit", method = RequestMethod.POST)
  343. public Result<SysDict> edit(@RequestBody SysDict sysDict) {
  344. Result<SysDict> result = new Result<SysDict>();
  345. SysDict sysdict = sysDictService.getById(sysDict.getId());
  346. if(sysdict==null) {
  347. result.error500("未找到对应实体");
  348. }else {
  349. sysDict.setUpdateTime(new Date());
  350. boolean ok = sysDictService.updateById(sysDict);
  351. if(ok) {
  352. result.success("编辑成功!");
  353. }
  354. }
  355. return result;
  356. }
  357. /**
  358. * @功能:删除
  359. * @param id
  360. * @return
  361. */
  362. //@RequiresRoles({"admin"})
  363. @RequestMapping(value = "/delete", method = RequestMethod.POST)
  364. @CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true)
  365. public Result<SysDict> delete(@RequestParam(name="id",required=true) String id) {
  366. Result<SysDict> result = new Result<SysDict>();
  367. boolean ok = sysDictService.removeById(id);
  368. if(ok) {
  369. result.success("删除成功!");
  370. }else{
  371. result.error500("删除失败!");
  372. }
  373. return result;
  374. }
  375. /**
  376. * @功能:批量删除
  377. * @param ids
  378. * @return
  379. */
  380. //@RequiresRoles({"admin"})
  381. @RequestMapping(value = "/deleteBatch", method = RequestMethod.POST)
  382. @CacheEvict(value= {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true)
  383. public Result<SysDict> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
  384. Result<SysDict> result = new Result<SysDict>();
  385. if(oConvertUtils.isEmpty(ids)) {
  386. result.error500("参数不识别!");
  387. }else {
  388. sysDictService.removeByIds(Arrays.asList(ids.split(",")));
  389. result.success("删除成功!");
  390. }
  391. return result;
  392. }
  393. /**
  394. * @功能:刷新缓存
  395. * @return
  396. */
  397. @RequestMapping(value = "/refleshCache")
  398. public Result<?> refleshCache() {
  399. Result<?> result = new Result<SysDict>();
  400. //清空字典缓存
  401. Set keys = redisTemplate.keys(CacheConstant.SYS_DICT_CACHE + "*");
  402. Set keys7 = redisTemplate.keys(CacheConstant.SYS_ENABLE_DICT_CACHE + "*");
  403. Set keys2 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_CACHE + "*");
  404. Set keys21 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE + "*");
  405. Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*");
  406. Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*");
  407. Set keys5 = redisTemplate.keys( "jmreport:cache:dict*");
  408. Set keys6 = redisTemplate.keys( "jmreport:cache:dictTable*");
  409. redisTemplate.delete(keys);
  410. redisTemplate.delete(keys2);
  411. redisTemplate.delete(keys21);
  412. redisTemplate.delete(keys3);
  413. redisTemplate.delete(keys4);
  414. redisTemplate.delete(keys5);
  415. redisTemplate.delete(keys6);
  416. redisTemplate.delete(keys7);
  417. return result;
  418. }
  419. /**
  420. * 导出excel
  421. *
  422. * @param request
  423. */
  424. @RequestMapping(value = "/exportXls")
  425. public ModelAndView exportXls(SysDict sysDict,HttpServletRequest request) {
  426. // Step.1 组装查询条件
  427. QueryWrapper<SysDict> queryWrapper = QueryGenerator.initQueryWrapper(sysDict, request.getParameterMap());
  428. //Step.2 AutoPoi 导出Excel
  429. ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
  430. List<SysDictPage> pageList = new ArrayList<SysDictPage>();
  431. List<SysDict> sysDictList = sysDictService.list(queryWrapper);
  432. for (SysDict dictMain : sysDictList) {
  433. SysDictPage vo = new SysDictPage();
  434. BeanUtils.copyProperties(dictMain, vo);
  435. // 查询机票
  436. List<SysDictItem> sysDictItemList = sysDictItemService.selectItemsByMainId(dictMain.getId());
  437. vo.setSysDictItemList(sysDictItemList);
  438. pageList.add(vo);
  439. }
  440. // 导出文件名称
  441. mv.addObject(NormalExcelConstants.FILE_NAME, "数据字典");
  442. // 注解对象Class
  443. mv.addObject(NormalExcelConstants.CLASS, SysDictPage.class);
  444. // 自定义表格参数
  445. LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
  446. mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("数据字典列表", "导出人:"+user.getRealname(), "数据字典"));
  447. // 导出数据列表
  448. mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
  449. return mv;
  450. }
  451. /**
  452. * 通过excel导入数据
  453. *
  454. * @param request
  455. * @param
  456. * @return
  457. */
  458. //@RequiresRoles({"admin"})
  459. @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
  460. public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
  461. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  462. Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
  463. for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
  464. MultipartFile file = entity.getValue();// 获取上传文件对象
  465. ImportParams params = new ImportParams();
  466. params.setTitleRows(2);
  467. params.setHeadRows(2);
  468. params.setNeedSave(true);
  469. try {
  470. //导入Excel格式校验,看匹配的字段文本概率
  471. Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysDictPage.class, params);
  472. if(!t){
  473. throw new RuntimeException("导入Excel校验失败 !");
  474. }
  475. List<SysDictPage> list = ExcelImportUtil.importExcel(file.getInputStream(), SysDictPage.class, params);
  476. // 错误信息
  477. List<String> errorMessage = new ArrayList<>();
  478. int successLines = 0, errorLines = 0;
  479. for (int i=0;i< list.size();i++) {
  480. SysDict po = new SysDict();
  481. BeanUtils.copyProperties(list.get(i), po);
  482. po.setDelFlag(CommonConstant.DEL_FLAG_0);
  483. try {
  484. Integer integer = sysDictService.saveMain(po, list.get(i).getSysDictItemList());
  485. if(integer>0){
  486. successLines++;
  487. }else{
  488. errorLines++;
  489. int lineNumber = i + 1;
  490. errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。");
  491. }
  492. } catch (Exception e) {
  493. errorLines++;
  494. int lineNumber = i + 1;
  495. errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。");
  496. }
  497. }
  498. return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage);
  499. } catch (Exception e) {
  500. log.error(e.getMessage(),e);
  501. return Result.error("文件导入失败:"+e.getMessage());
  502. } finally {
  503. try {
  504. file.getInputStream().close();
  505. } catch (Exception e) {
  506. e.printStackTrace();
  507. }
  508. }
  509. }
  510. return Result.error("文件导入失败!");
  511. }
  512. /**
  513. * 查询被删除的列表
  514. * @return
  515. */
  516. @RequestMapping(value = "/deleteList", method = RequestMethod.GET)
  517. public Result<List<SysDict>> deleteList() {
  518. Result<List<SysDict>> result = new Result<List<SysDict>>();
  519. List<SysDict> list = this.sysDictService.queryDeleteList();
  520. result.setSuccess(true);
  521. result.setResult(list);
  522. return result;
  523. }
  524. /**
  525. * 物理删除
  526. * @param id
  527. * @return
  528. */
  529. @RequestMapping(value = "/deletePhysic/{id}", method = RequestMethod.POST)
  530. public Result<?> deletePhysic(@PathVariable String id) {
  531. try {
  532. sysDictService.deleteOneDictPhysically(id);
  533. return Result.ok("删除成功!");
  534. } catch (Exception e) {
  535. e.printStackTrace();
  536. return Result.error("删除失败!");
  537. }
  538. }
  539. /**
  540. * 逻辑删除的字段,进行取回
  541. * @param id
  542. * @return
  543. */
  544. @RequestMapping(value = "/back/{id}", method = RequestMethod.POST)
  545. public Result<?> back(@PathVariable String id) {
  546. try {
  547. sysDictService.updateDictDelFlag(0,id);
  548. return Result.ok("操作成功!");
  549. } catch (Exception e) {
  550. e.printStackTrace();
  551. return Result.error("操作失败!");
  552. }
  553. }
  554. }