DictionaryitemController.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package com.xjrsoft.module.system.controller;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  7. import com.baomidou.mybatisplus.core.toolkit.StringPool;
  8. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  9. import com.xjrsoft.common.constant.GlobalConstant;
  10. import com.xjrsoft.common.model.result.R;
  11. import com.xjrsoft.common.page.ConventPage;
  12. import com.xjrsoft.common.page.PageOutput;
  13. import com.xjrsoft.common.utils.VoToColumnUtil;
  14. import com.xjrsoft.module.system.dto.AddDictionaryItemDto;
  15. import com.xjrsoft.module.system.dto.DictionaryItemDetailDto;
  16. import com.xjrsoft.module.system.dto.DictionaryItemDetailPageDto;
  17. import com.xjrsoft.module.system.dto.DictionaryItemPageDto;
  18. import com.xjrsoft.module.system.dto.UpdateDictionaryItemDto;
  19. import com.xjrsoft.module.system.entity.DictionaryDetail;
  20. import com.xjrsoft.module.system.entity.DictionaryItem;
  21. import com.xjrsoft.module.system.service.IDictionarydetailService;
  22. import com.xjrsoft.module.system.service.IDictionaryitemService;
  23. import com.xjrsoft.module.system.vo.DictionaryItemDetailVo;
  24. import com.xjrsoft.module.system.vo.DictionaryItemPageVo;
  25. import com.xjrsoft.module.system.vo.DictionaryItemVo;
  26. import io.swagger.annotations.Api;
  27. import io.swagger.annotations.ApiOperation;
  28. import lombok.AllArgsConstructor;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import org.springframework.web.bind.annotation.DeleteMapping;
  31. import org.springframework.web.bind.annotation.GetMapping;
  32. import org.springframework.web.bind.annotation.PostMapping;
  33. import org.springframework.web.bind.annotation.PutMapping;
  34. import org.springframework.web.bind.annotation.RequestBody;
  35. import org.springframework.web.bind.annotation.RequestMapping;
  36. import org.springframework.web.bind.annotation.RequestParam;
  37. import org.springframework.web.bind.annotation.RestController;
  38. import javax.validation.Valid;
  39. import java.util.List;
  40. /**
  41. * <p>
  42. * 数据字典项目 前端控制器
  43. * </p>
  44. *
  45. * @author tzx
  46. * @since 2022-03-17
  47. */
  48. @RestController
  49. @RequestMapping(GlobalConstant.SYSTEM_MODULE_PREFIX + "/dictionary-item")
  50. @Api(value = GlobalConstant.SYSTEM_MODULE_PREFIX + "/dictionary-item",tags = "数据字典项目")
  51. @AllArgsConstructor
  52. public class DictionaryitemController {
  53. private final IDictionaryitemService dictionaryitemService;
  54. private final IDictionarydetailService dictionarydetailService;
  55. @GetMapping("/list")
  56. @ApiOperation(value = "获取 数据字典项目列表(不分页)")
  57. public R list(@Valid DictionaryItemPageDto dto){
  58. LambdaQueryWrapper<DictionaryItem> queryWrapper = new LambdaQueryWrapper<>();
  59. queryWrapper.like(StrUtil.isNotBlank(dto.getName()), DictionaryItem::getName,dto.getName())
  60. .like(StrUtil.isNotBlank(dto.getCode()), DictionaryItem::getCode,dto.getCode())
  61. .select(DictionaryItem.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryItemPageVo.class).contains(x.getProperty()));
  62. List<DictionaryItem> list = dictionaryitemService.list(queryWrapper);
  63. List<DictionaryItemVo> dictionaryItemVos = BeanUtil.copyToList(list, DictionaryItemVo.class);
  64. return R.ok(dictionaryItemVos);
  65. }
  66. @GetMapping("/page")
  67. @ApiOperation(value = "获取所有数据字典项目(分页)")
  68. public R page(@Valid DictionaryItemPageDto dto){
  69. LambdaQueryWrapper<DictionaryItem> queryWrapper = new LambdaQueryWrapper<>();
  70. queryWrapper.like(StrUtil.isNotBlank(dto.getName()), DictionaryItem::getName,dto.getName())
  71. .like(StrUtil.isNotBlank(dto.getCode()), DictionaryItem::getCode,dto.getCode())
  72. .select(DictionaryItem.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryItemPageVo.class).contains(x.getProperty()))
  73. .orderByAsc(DictionaryItem::getSortCode);
  74. IPage<DictionaryItem> page = dictionaryitemService.page(ConventPage.getPage(dto), queryWrapper);
  75. PageOutput<DictionaryItemPageVo> pageOutput = ConventPage.getPageOutput(page, DictionaryItemPageVo.class);
  76. return R.ok(pageOutput);
  77. }
  78. @GetMapping("/info")
  79. @ApiOperation(value = "根据id获取项目详情")
  80. public R info(@RequestParam Long id){
  81. DictionaryItem dictionaryItem = dictionaryitemService.getById(id);
  82. if (dictionaryItem == null){
  83. R.error("找不到此字典项目!");
  84. }
  85. return R.ok(BeanUtil.toBean(dictionaryItem, DictionaryItemVo.class));
  86. }
  87. @GetMapping("/detail")
  88. @ApiOperation(value = "获取当前数据字典项目下所有字典详情")
  89. public R detail(@Valid DictionaryItemDetailDto dto){
  90. List<String> values = StrUtil.split(dto.getValues(), StringPool.COMMA);
  91. LambdaQueryWrapper<DictionaryDetail> queryWrapper = new LambdaQueryWrapper<>();
  92. queryWrapper.eq(DictionaryDetail::getItemId,dto.getId())
  93. .in(CollectionUtils.isNotEmpty(values), DictionaryDetail::getValue, values)
  94. .select(DictionaryDetail.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryItemDetailVo.class).contains(x.getProperty()));
  95. List<DictionaryDetail> list = dictionarydetailService.list(queryWrapper);
  96. List<DictionaryItemDetailVo> dictionaryItemDetailVos = BeanUtil.copyToList(list, DictionaryItemDetailVo.class);
  97. return R.ok(dictionaryItemDetailVos);
  98. }
  99. @GetMapping("/detail/tree")
  100. @ApiOperation(value = "获取数据字典项目 + 详情 树结构")
  101. public R tree(){
  102. return R.ok(dictionaryitemService.getTree());
  103. }
  104. @GetMapping("/detail/page")
  105. @ApiOperation(value = "获取当前数据字典项目下所有字典详情(分页)")
  106. public R detail(@Valid DictionaryItemDetailPageDto dto){
  107. LambdaQueryWrapper<DictionaryDetail> queryWrapper = new LambdaQueryWrapper<>();
  108. queryWrapper.eq(DictionaryDetail::getItemId,dto.getId())
  109. .select(DictionaryDetail.class, x -> VoToColumnUtil.fieldsToColumns(DictionaryItemDetailVo.class).contains(x.getProperty()));
  110. IPage<DictionaryDetail> page = dictionarydetailService.page(ConventPage.getPage(dto), queryWrapper);
  111. PageOutput<DictionaryItemDetailVo> pageOutput = ConventPage.getPageOutput(page, DictionaryItemDetailVo.class);
  112. return R.ok(pageOutput);
  113. }
  114. @PostMapping
  115. @ApiOperation(value = "新增数据字典项")
  116. public R add(@Valid @RequestBody AddDictionaryItemDto dto){
  117. long count = dictionaryitemService.count(Wrappers.<DictionaryItem>query().lambda().eq(DictionaryItem::getCode, dto.getCode()).or().eq(DictionaryItem::getName,dto.getName()));
  118. if(count > 0){
  119. return R.error("项目名或者编码已经存在!");
  120. }
  121. DictionaryItem dictionaryItem = BeanUtil.toBean(dto, DictionaryItem.class);
  122. boolean isSuccess = dictionaryitemService.save(dictionaryItem);
  123. if (isSuccess) dictionaryitemService.loadCaches();
  124. return R.ok(isSuccess);
  125. }
  126. @PutMapping
  127. @ApiOperation(value = "更新数据字典项")
  128. public R update(@Valid @RequestBody UpdateDictionaryItemDto dto){
  129. long count = dictionaryitemService.count(Wrappers.<DictionaryItem>query().lambda()
  130. .eq(DictionaryItem::getCode, dto.getCode())
  131. .ne(DictionaryItem::getId,dto.getId())
  132. .or()
  133. .eq(DictionaryItem::getName, dto.getName())
  134. .ne(DictionaryItem::getId,dto.getId()));
  135. if(count > 0){
  136. return R.error("项目名或者编码已经存在!");
  137. }
  138. DictionaryItem dictionaryItem = BeanUtil.toBean(dto, DictionaryItem.class);
  139. boolean isSuccess = dictionaryitemService.updateById(dictionaryItem);
  140. if (isSuccess) dictionaryitemService.loadCaches();
  141. return R.ok(isSuccess);
  142. }
  143. @DeleteMapping
  144. @ApiOperation(value = "删除数据字典项")
  145. @Transactional(rollbackFor = Exception.class)
  146. public R delete(@RequestBody List<Long> ids){
  147. //删除字典详情
  148. dictionaryitemService.removeBatchByIds(ids);
  149. //删除字典项
  150. dictionarydetailService.remove(Wrappers.lambdaQuery(DictionaryDetail.class).in(DictionaryDetail::getItemId,ids));
  151. return R.ok();
  152. }
  153. }