SysDictController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. package org.jeecg.modules.system.controller;
  2. import java.io.UnsupportedEncodingException;
  3. import java.net.URLDecoder;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.List;
  7. import java.util.Map;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import com.alibaba.fastjson.JSON;
  11. import org.apache.commons.lang.StringUtils;
  12. import org.apache.shiro.authz.annotation.RequiresPermissions;
  13. import org.jeecg.common.api.vo.Result;
  14. import org.jeecg.common.system.query.QueryGenerator;
  15. import org.jeecg.common.util.oConvertUtils;
  16. import org.jeecg.modules.demo.test.entity.JeecgOrderCustomer;
  17. import org.jeecg.modules.demo.test.entity.JeecgOrderMain;
  18. import org.jeecg.modules.demo.test.entity.JeecgOrderTicket;
  19. import org.jeecg.modules.demo.test.vo.JeecgOrderMainPage;
  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.service.ISysDictItemService;
  24. import org.jeecg.modules.system.service.ISysDictService;
  25. import org.jeecg.modules.system.vo.SysDictPage;
  26. import org.jeecgframework.poi.excel.ExcelImportUtil;
  27. import org.jeecgframework.poi.excel.def.NormalExcelConstants;
  28. import org.jeecgframework.poi.excel.entity.ExportParams;
  29. import org.jeecgframework.poi.excel.entity.ImportParams;
  30. import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
  31. import org.springframework.beans.BeanUtils;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.cache.annotation.CacheEvict;
  34. import org.springframework.web.bind.annotation.*;
  35. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  36. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  37. import com.baomidou.mybatisplus.core.metadata.IPage;
  38. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  39. import lombok.extern.slf4j.Slf4j;
  40. import org.springframework.web.multipart.MultipartFile;
  41. import org.springframework.web.multipart.MultipartHttpServletRequest;
  42. import org.springframework.web.servlet.ModelAndView;
  43. /**
  44. * <p>
  45. * 字典表 前端控制器
  46. * </p>
  47. *
  48. * @author zhangweijian
  49. * @since 2018-12-28
  50. */
  51. @RestController
  52. @RequestMapping("/sys/dict")
  53. @Slf4j
  54. public class SysDictController {
  55. @Autowired
  56. private ISysDictService sysDictService;
  57. @Autowired
  58. private ISysDictItemService sysDictItemService;
  59. @RequestMapping(value = "/list", method = RequestMethod.GET)
  60. public Result<IPage<SysDict>> queryPageList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  61. @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) {
  62. Result<IPage<SysDict>> result = new Result<IPage<SysDict>>();
  63. sysDict.setDelFlag(0);//查询删除的数据
  64. //字典名称模糊查询
  65. String dictName = sysDict.getDictName();
  66. if (StringUtils.isNotBlank(sysDict.getDictName())) {
  67. sysDict.setDictName(null);
  68. }
  69. //字段编码模糊查询
  70. String dictCode = sysDict.getDictCode();
  71. if (StringUtils.isNotBlank(sysDict.getDictCode())) {
  72. sysDict.setDictCode(null);
  73. }
  74. QueryWrapper<SysDict> queryWrapper = QueryGenerator.initQueryWrapper(sysDict, req.getParameterMap());
  75. queryWrapper.orderByDesc("create_time");
  76. if (StringUtils.isNotBlank(dictName)) {
  77. queryWrapper.like("dict_name", dictName);
  78. }
  79. if (StringUtils.isNotBlank(dictCode)) {
  80. queryWrapper.like("dict_code", dictCode);
  81. }
  82. Page<SysDict> page = new Page<SysDict>(pageNo, pageSize);
  83. IPage<SysDict> pageList = sysDictService.page(page, queryWrapper);
  84. log.info("查询当前页:"+pageList.getCurrent());
  85. log.info("查询当前页数量:"+pageList.getSize());
  86. log.info("查询结果数量:"+pageList.getRecords().size());
  87. log.info("数据总数:"+pageList.getTotal());
  88. result.setSuccess(true);
  89. result.setResult(pageList);
  90. return result;
  91. }
  92. @RequestMapping(value = "/list1", method = RequestMethod.GET)
  93. @RequiresPermissions("url:dict:view")
  94. public Result<IPage<SysDict>> queryPageList1(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  95. @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) {
  96. Result<IPage<SysDict>> result = new Result<IPage<SysDict>>();
  97. sysDict.setDelFlag(0);//查询删除的数据
  98. //字典名称模糊查询
  99. String dictName = sysDict.getDictName();
  100. if (StringUtils.isNotBlank(sysDict.getDictName())) {
  101. sysDict.setDictName(null);
  102. }
  103. //字段编码模糊查询
  104. String dictCode = sysDict.getDictCode();
  105. if (StringUtils.isNotBlank(sysDict.getDictCode())) {
  106. sysDict.setDictCode(null);
  107. }
  108. QueryWrapper<SysDict> queryWrapper = QueryGenerator.initQueryWrapper(sysDict, req.getParameterMap());
  109. queryWrapper.orderByDesc("create_time");
  110. if (StringUtils.isNotBlank(dictName)) {
  111. queryWrapper.like("dict_name", dictName);
  112. }
  113. if (StringUtils.isNotBlank(dictCode)) {
  114. queryWrapper.like("dict_code", dictCode);
  115. }
  116. Page<SysDict> page = new Page<SysDict>(pageNo, pageSize);
  117. IPage<SysDict> pageList = sysDictService.page(page, queryWrapper);
  118. log.info("查询当前页:"+pageList.getCurrent());
  119. log.info("查询当前页数量:"+pageList.getSize());
  120. log.info("查询结果数量:"+pageList.getRecords().size());
  121. log.info("数据总数:"+pageList.getTotal());
  122. result.setSuccess(true);
  123. result.setResult(pageList);
  124. return result;
  125. }
  126. /**
  127. * @功能:获取树形字典数据
  128. * @param sysDict
  129. * @param pageNo
  130. * @param pageSize
  131. * @param req
  132. * @return
  133. */
  134. @SuppressWarnings("unchecked")
  135. @RequestMapping(value = "/treeList", method = RequestMethod.GET)
  136. public Result<List<SysDictTree>> treeList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
  137. @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) {
  138. Result<List<SysDictTree>> result = new Result<>();
  139. LambdaQueryWrapper<SysDict> query = new LambdaQueryWrapper<>();
  140. // 构造查询条件
  141. String dictName = sysDict.getDictName();
  142. if(oConvertUtils.isNotEmpty(dictName)) {
  143. query.like(true, SysDict::getDictName, dictName);
  144. }
  145. query.eq(true, SysDict::getDelFlag, "1");
  146. query.orderByDesc(true, SysDict::getCreateTime);
  147. List<SysDict> list = sysDictService.list(query);
  148. List<SysDictTree> treeList = new ArrayList<>();
  149. for (SysDict node : list) {
  150. treeList.add(new SysDictTree(node));
  151. }
  152. result.setSuccess(true);
  153. result.setResult(treeList);
  154. return result;
  155. }
  156. /**
  157. * 获取字典数据
  158. * @param dictCode 字典code
  159. * @param dictCode 表名,文本字段,code字段 | 举例:sys_user,realname,id
  160. * @return
  161. */
  162. @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET)
  163. public Result<List<Map<String, Object>>> getDictItems(@PathVariable String dictCode) {
  164. log.info(" dictCode : "+ dictCode);
  165. Result<List<Map<String,Object>>> result = new Result<List<Map<String,Object>>>();
  166. List<Map<String,Object>> ls = null;
  167. try {
  168. if(dictCode.indexOf(",")!=-1) {
  169. //关联表字典(举例:sys_user,realname,id)
  170. String[] params = dictCode.split(",");
  171. if(params.length!=3) {
  172. result.error500("字典Code格式不正确!");
  173. return result;
  174. }
  175. ls = sysDictService.queryTableDictItemsByCode(params[0],params[1],params[2]);
  176. }else {
  177. //字典表
  178. ls = sysDictService.queryDictItemsByCode(dictCode);
  179. }
  180. result.setSuccess(true);
  181. result.setResult(ls);
  182. log.info(result.toString());
  183. } catch (Exception e) {
  184. log.info(e.getMessage());
  185. result.error500("操作失败");
  186. return result;
  187. }
  188. return result;
  189. }
  190. /**
  191. * 获取字典数据
  192. * @param dictCode
  193. * @return
  194. */
  195. @RequestMapping(value = "/getDictText/{dictCode}/{key}", method = RequestMethod.GET)
  196. public Result<String> getDictItems(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key) {
  197. log.info(" dictCode : "+ dictCode);
  198. Result<String> result = new Result<String>();
  199. String text = null;
  200. try {
  201. text = sysDictService.queryDictTextByKey(dictCode, key);
  202. result.setSuccess(true);
  203. result.setResult(text);
  204. } catch (Exception e) {
  205. log.info(e.getMessage());
  206. result.error500("操作失败");
  207. return result;
  208. }
  209. return result;
  210. }
  211. /**
  212. * @功能:新增
  213. * @param sysDict
  214. * @return
  215. */
  216. @RequestMapping(value = "/add", method = RequestMethod.POST)
  217. public Result<SysDict> add(@RequestBody SysDict sysDict) {
  218. Result<SysDict> result = new Result<SysDict>();
  219. try {
  220. sysDict.setCreateTime(new Date());
  221. sysDict.setDelFlag(0);
  222. sysDictService.save(sysDict);
  223. result.success("保存成功!");
  224. } catch (Exception e) {
  225. e.printStackTrace();
  226. log.info(e.getMessage());
  227. result.error500("操作失败");
  228. }
  229. return result;
  230. }
  231. /**
  232. * @功能:编辑
  233. * @param sysDict
  234. * @return
  235. */
  236. @RequestMapping(value = "/edit", method = RequestMethod.PUT)
  237. public Result<SysDict> edit(@RequestBody SysDict sysDict) {
  238. Result<SysDict> result = new Result<SysDict>();
  239. SysDict sysdict = sysDictService.getById(sysDict.getId());
  240. if(sysdict==null) {
  241. result.error500("未找到对应实体");
  242. }else {
  243. sysDict.setUpdateTime(new Date());
  244. boolean ok = sysDictService.updateById(sysDict);
  245. //TODO 返回false说明什么?
  246. if(ok) {
  247. result.success("编辑成功!");
  248. }
  249. }
  250. return result;
  251. }
  252. /**
  253. * @功能:删除
  254. * @param id
  255. * @return
  256. */
  257. @RequestMapping(value = "/delete", method = RequestMethod.DELETE)
  258. @CacheEvict(value="dictCache", allEntries=true)
  259. public Result<SysDict> delete(@RequestParam(name="id",required=true) String id) {
  260. Result<SysDict> result = new Result<SysDict>();
  261. SysDict sysDict = sysDictService.getById(id);
  262. if(sysDict==null) {
  263. result.error500("未找到对应实体");
  264. }else {
  265. sysDict.setDelFlag(1);
  266. boolean ok = sysDictService.updateById(sysDict);
  267. if(ok) {
  268. result.success("删除成功!");
  269. }
  270. }
  271. return result;
  272. }
  273. /**
  274. * @功能:批量删除
  275. * @param ids
  276. * @return
  277. */
  278. @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE)
  279. @CacheEvict(value="dictCache", allEntries=true)
  280. public Result<SysDict> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
  281. Result<SysDict> result = new Result<SysDict>();
  282. if(ids==null || "".equals(ids.trim())) {
  283. result.error500("参数不识别!");
  284. }else {
  285. String[] id=ids.split(",");
  286. for(int i=0;i<id.length;i++) {
  287. SysDict sysDict = sysDictService.getById(id[i]);
  288. sysDict.setDelFlag(2);
  289. sysDictService.updateById(sysDict);
  290. }
  291. result.success("删除成功!");
  292. }
  293. return result;
  294. }
  295. /**
  296. * 导出excel
  297. *
  298. * @param request
  299. * @param response
  300. */
  301. @RequestMapping(value = "/exportXls")
  302. public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
  303. // Step.1 组装查询条件
  304. QueryWrapper<SysDict> queryWrapper = null;
  305. try {
  306. String paramsStr = request.getParameter("paramsStr");
  307. if (oConvertUtils.isNotEmpty(paramsStr)) {
  308. String deString = URLDecoder.decode(paramsStr, "UTF-8");
  309. SysDict sysDict = JSON.parseObject(deString, SysDict.class);
  310. queryWrapper = QueryGenerator.initQueryWrapper(sysDict, request.getParameterMap());
  311. log.info(paramsStr);
  312. log.info(sysDict.toString());
  313. }
  314. } catch (UnsupportedEncodingException e) {
  315. e.printStackTrace();
  316. }
  317. //Step.2 AutoPoi 导出Excel
  318. ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
  319. List<SysDictPage> pageList = new ArrayList<SysDictPage>();
  320. List<SysDict> sysDictList = sysDictService.list(queryWrapper);
  321. for (SysDict dictMain : sysDictList) {
  322. SysDictPage vo = new SysDictPage();
  323. BeanUtils.copyProperties(dictMain, vo);
  324. // 查询机票
  325. List<SysDictItem> sysDictItemList = sysDictItemService.selectItemsByMainId(dictMain.getId());
  326. vo.setSysDictItemList(sysDictItemList);
  327. pageList.add(vo);
  328. }
  329. // 导出文件名称
  330. mv.addObject(NormalExcelConstants.FILE_NAME, "数据字典");
  331. // 注解对象Class
  332. mv.addObject(NormalExcelConstants.CLASS, SysDictPage.class);
  333. // 自定义表格参数
  334. mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("数据字典列表", "导出人:Jeecg", "数据字典"));
  335. // 导出数据列表
  336. mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
  337. return mv;
  338. }
  339. /**
  340. * 通过excel导入数据
  341. *
  342. * @param request
  343. * @param
  344. * @return
  345. */
  346. @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
  347. public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
  348. MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
  349. Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
  350. for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
  351. MultipartFile file = entity.getValue();// 获取上传文件对象
  352. ImportParams params = new ImportParams();
  353. params.setTitleRows(2);
  354. params.setHeadRows(2);
  355. params.setNeedSave(true);
  356. try {
  357. List<SysDictPage> list = ExcelImportUtil.importExcel(file.getInputStream(), SysDictPage.class, params);
  358. for (SysDictPage page : list) {
  359. SysDict po = new SysDict();
  360. BeanUtils.copyProperties(page, po);
  361. if(page.getDelFlag()==null){
  362. po.setDelFlag(1);
  363. }
  364. sysDictService.saveMain(po, page.getSysDictItemList());
  365. }
  366. return Result.ok("文件导入成功!");
  367. } catch (Exception e) {
  368. log.error(e.toString());
  369. return Result.ok("文件导入失败!");
  370. } finally {
  371. try {
  372. file.getInputStream().close();
  373. } catch (Exception e) {
  374. e.printStackTrace();
  375. }
  376. }
  377. }
  378. return Result.ok("文件导入失败!");
  379. }
  380. /**
  381. * 根据id查询字典数据
  382. */
  383. @RequestMapping(value = "/getByIdDict", method = RequestMethod.POST)
  384. public Result<SysDict> getByIdDict(@RequestBody String id){
  385. Result<SysDict> result=new Result<SysDict>();
  386. if(oConvertUtils.isNotEmpty(id)){//判断传过来的id是否为空
  387. SysDict sysdict= sysDictService.getById(id);
  388. if(oConvertUtils.isNotEmpty(sysdict)){//判断是否有查到字典数据
  389. result.setSuccess(true);
  390. result.setResult(sysdict);
  391. }else{
  392. result.setSuccess(false);
  393. }
  394. }else{
  395. result.setSuccess(false);
  396. }
  397. return result;
  398. }
  399. }