ResourceController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. package com.ruoyi.web.controller.zhdd;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import cn.hutool.http.HttpStatus;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  8. import com.ruoyi.common.annotation.Log;
  9. import com.ruoyi.common.annotation.RepeatSubmit;
  10. import com.ruoyi.common.annotation.Security;
  11. import com.ruoyi.common.core.controller.BaseController;
  12. import com.ruoyi.common.core.domain.AjaxResult;
  13. import com.ruoyi.common.core.domain.model.LoginUser;
  14. import com.ruoyi.common.core.page.TableDataInfo;
  15. import com.ruoyi.common.core.validate.AddGroup;
  16. import com.ruoyi.common.core.validate.EditGroup;
  17. import com.ruoyi.common.core.validate.QueryGroup;
  18. import com.ruoyi.common.enums.BusinessType;
  19. import com.ruoyi.common.utils.UserUtil;
  20. import com.ruoyi.common.utils.poi.ExcelUtil;
  21. import com.ruoyi.zhdd.domain.Resource;
  22. import com.ruoyi.zhdd.domain.ResourceDetail;
  23. import com.ruoyi.zhdd.domain.bo.ResourceBo;
  24. import com.ruoyi.zhdd.domain.vo.ResourceDetailStatic;
  25. import com.ruoyi.zhdd.domain.vo.ResourceVo;
  26. import com.ruoyi.zhdd.service.IResourceDetailService;
  27. import com.ruoyi.zhdd.service.IResourceService;
  28. import io.swagger.annotations.Api;
  29. import io.swagger.annotations.ApiOperation;
  30. import lombok.RequiredArgsConstructor;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.validation.annotation.Validated;
  33. import org.springframework.web.bind.annotation.DeleteMapping;
  34. import org.springframework.web.bind.annotation.GetMapping;
  35. import org.springframework.web.bind.annotation.PathVariable;
  36. import org.springframework.web.bind.annotation.PostMapping;
  37. import org.springframework.web.bind.annotation.PutMapping;
  38. import org.springframework.web.bind.annotation.RequestBody;
  39. import org.springframework.web.bind.annotation.RequestMapping;
  40. import org.springframework.web.bind.annotation.RestController;
  41. import javax.servlet.http.HttpServletResponse;
  42. import javax.validation.constraints.NotEmpty;
  43. import javax.validation.constraints.NotNull;
  44. import java.util.ArrayList;
  45. import java.util.Arrays;
  46. import java.util.Collections;
  47. import java.util.HashMap;
  48. import java.util.List;
  49. import java.util.Map;
  50. import java.util.Set;
  51. import java.util.stream.Collectors;
  52. /**
  53. * 应急资源Controller
  54. *
  55. * @author xintong
  56. * @date 2021-10-27
  57. */
  58. @Validated
  59. @Api(value = "应急资源控制器", tags = {"应急资源管理"})
  60. @RequiredArgsConstructor(onConstructor_ = @Autowired)
  61. @RestController
  62. @RequestMapping("/zhdd/resource")
  63. public class ResourceController extends BaseController {
  64. private final IResourceService iResourceService;
  65. private final IResourceDetailService iResourceDetailService;
  66. /**
  67. * 查询应急资源列表
  68. */
  69. @ApiOperation("查询应急资源列表")
  70. @GetMapping("/list")
  71. @Security
  72. public TableDataInfo<ResourceVo> list(@Validated(QueryGroup.class) ResourceBo bo) {
  73. if (StrUtil.equals(bo.getNotNullFlag(), "1")) {
  74. // 查询存在物资的仓库
  75. List<Object> resourceIdExist = iResourceDetailService.queryExistResourceId(bo.getResourceType());
  76. bo.setResourceIds(resourceIdExist);
  77. } else if (StrUtil.equals(bo.getNotNullFlag(), "2")) {
  78. // 查询存在物资的仓库
  79. List<Object> resourceIdExist = iResourceDetailService.queryExistResourceId(bo.getResourceType());
  80. bo.setResourceNotIds(resourceIdExist);
  81. }
  82. if (StrUtil.isNotBlank(bo.getGoodsName())) {
  83. // 模糊查询有哪些仓库存在此物资
  84. List<Object> objects = iResourceDetailService.listObjs(new QueryWrapper<ResourceDetail>()
  85. .select("distinct resource_id")
  86. .eq(bo.getResourceType() != null, "resource_type", bo.getResourceType())
  87. .like("name", bo.getGoodsName()));
  88. if (objects != null && objects.size() > 0) {
  89. if (ObjectUtil.isNotEmpty(bo.getResourceIds())) {
  90. bo.setResourceIds(CollUtil.list(false, CollUtil.intersection(bo.getResourceIds(), objects)));
  91. } else {
  92. bo.setResourceIds(objects);
  93. }
  94. } else {
  95. TableDataInfo<ResourceVo> rspData = new TableDataInfo<>();
  96. rspData.setCode(HttpStatus.HTTP_OK);
  97. rspData.setMsg("查询成功");
  98. rspData.setRows(Collections.emptyList());
  99. rspData.setTotal(0);
  100. rspData.setPageNum(bo.getPageNum());
  101. rspData.setPageSize(bo.getPageSize());
  102. return rspData;
  103. }
  104. }
  105. // 临时增加处理只能看到该部门的数据
  106. LoginUser cacheLoginUser = UserUtil.getCacheLoginUser();
  107. // 查询角色如果包含admin的,直接查询全部
  108. Set<String> userRole = cacheLoginUser.getUserRole();
  109. boolean admin = CollUtil.containsAny(userRole, CollUtil.newHashSet("admin"));
  110. if (!admin) {
  111. bo.setManageUnitId(cacheLoginUser.getUser().getOrgId());
  112. }
  113. return iResourceService.queryPageList(bo);
  114. }
  115. @ApiOperation("移动端-模糊搜索物资")
  116. @GetMapping("/goodsList")
  117. @Security
  118. public TableDataInfo<ResourceVo> goodsList(@Validated(QueryGroup.class) ResourceBo bo) {
  119. bo.setResourceType(1);
  120. // 模糊查询有哪些仓库存在此物资
  121. List<Object> objects = iResourceDetailService.listObjs(new QueryWrapper<ResourceDetail>()
  122. .select("distinct resource_id")
  123. .like(StrUtil.isNotBlank(bo.getGoodsName()), "name", bo.getGoodsName()));
  124. List<ResourceVo> resourceDetail = new ArrayList<>();
  125. if (objects != null && objects.size() > 0) {
  126. bo.setResourceIds(objects);
  127. resourceDetail = iResourceService.queryPageList(bo).getRows();
  128. }
  129. if (StrUtil.isNotBlank(bo.getGoodsName())) {
  130. List<ResourceVo> resourceList = iResourceService.listVo(Wrappers.<Resource>lambdaQuery()
  131. .eq(Resource::getResourceType, 1)
  132. .like(Resource::getName, bo.getGoodsName())
  133. .notIn(CollUtil.isNotEmpty(objects), Resource::getId, objects));
  134. resourceDetail = CollUtil.unionAll(resourceDetail, resourceList);
  135. }
  136. TableDataInfo<ResourceVo> rspData = new TableDataInfo<>();
  137. rspData.setCode(HttpStatus.HTTP_OK);
  138. rspData.setMsg("查询成功");
  139. rspData.setRows(resourceDetail);
  140. rspData.setTotal(resourceDetail.size());
  141. // rspData.setPageSize(bo.getPageSize());
  142. // rspData.setPageNum(bo.getPageNum());
  143. return rspData;
  144. }
  145. /**
  146. * 导出应急资源列表
  147. */
  148. @ApiOperation("导出应急资源列表")
  149. @Log(title = "应急资源", businessType = BusinessType.EXPORT)
  150. @GetMapping("/export")
  151. public void export(@Validated ResourceBo bo, HttpServletResponse response) {
  152. List<ResourceVo> list = iResourceService.queryList(bo);
  153. ExcelUtil.exportExcel(list, "应急资源", ResourceVo.class, response);
  154. }
  155. /**
  156. * 获取应急资源详细信息
  157. */
  158. @ApiOperation("获取应急资源详细信息")
  159. // @PreAuthorize("@ss.hasPermi('zhdd:resource:query')")
  160. @GetMapping("/{id}")
  161. public AjaxResult<ResourceVo> getInfo(@NotNull(message = "主键不能为空")
  162. @PathVariable("id") String id) {
  163. return AjaxResult.success(iResourceService.queryById(id));
  164. }
  165. /**
  166. * 新增应急资源
  167. */
  168. @ApiOperation("新增应急资源")
  169. // @PreAuthorize("@ss.hasPermi('zhdd:resource:add')")
  170. @Log(title = "应急资源", businessType = BusinessType.INSERT)
  171. @RepeatSubmit()
  172. @PostMapping()
  173. @Security
  174. public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody ResourceBo bo) {
  175. // // 临时增加处理只能看到该部门的数据
  176. // GatewayUser user = getGateWayUser();
  177. // if (user != null) {
  178. // bo.setDeptId(user.getOrgId());
  179. // }
  180. // 判断名称是否存在
  181. ResourceVo voOne = iResourceService.getVoOne(Wrappers.<Resource>lambdaQuery().eq(Resource::getName, bo.getName()));
  182. if (voOne != null) {
  183. return AjaxResult.error("名称已存在!");
  184. }
  185. return toAjax(iResourceService.insertResource(bo) ? 1 : 0);
  186. }
  187. /**
  188. * 修改应急资源
  189. */
  190. @ApiOperation("修改应急资源")
  191. // @PreAuthorize("@ss.hasPermi('zhdd:resource:edit')")
  192. @Log(title = "应急资源", businessType = BusinessType.UPDATE)
  193. @RepeatSubmit()
  194. @PutMapping()
  195. @Security
  196. public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody ResourceBo bo) {
  197. // 判断名称是否存在
  198. ResourceVo resourceVo = iResourceService.queryById(bo.getId());
  199. if (bo.getResourceType() != 3 && !resourceVo.getName().equals(bo.getName())) {
  200. ResourceVo voOne = iResourceService.getVoOne(Wrappers.<Resource>lambdaQuery().eq(Resource::getName, bo.getName()));
  201. if (voOne != null) {
  202. return AjaxResult.error("名称已存在!");
  203. }
  204. }
  205. return toAjax(iResourceService.updateResource(bo) ? 1 : 0);
  206. }
  207. /**
  208. * 删除应急资源
  209. */
  210. @ApiOperation("删除应急资源")
  211. // @PreAuthorize("@ss.hasPermi('zhdd:resource:remove')")
  212. @Log(title = "应急资源", businessType = BusinessType.DELETE)
  213. @DeleteMapping("/{ids}")
  214. @Security
  215. public AjaxResult<Void> remove(@NotEmpty(message = "主键不能为空")
  216. @PathVariable String[] ids) {
  217. return toAjax(iResourceService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
  218. }
  219. @ApiOperation("查询所有应急资源信息")
  220. @GetMapping("/location")
  221. public AjaxResult<Map<String, List<ResourceVo>>> queryResourceLocation(ResourceBo bo) {
  222. List<ResourceVo> list = iResourceService.queryList(bo);
  223. // 查询物资数量
  224. List<ResourceDetailStatic> resourceDetailStatics = iResourceDetailService.queryResourceTotalNum();
  225. Map<String, Integer> collect = resourceDetailStatics.stream().collect(Collectors.toMap(ResourceDetailStatic::getResourceId, ResourceDetailStatic::getNum));
  226. for (ResourceVo resourceVo : list) {
  227. if (resourceVo.getResourceType() == 1 || resourceVo.getResourceType() == 2) {
  228. Integer integer = collect.get(resourceVo.getId());
  229. resourceVo.setNum(integer == null ? 0 : integer);
  230. } else if (resourceVo.getResourceType() == 3) {
  231. resourceVo.setNum(collect.get(resourceVo.getId() + "车辆") == null ? 0 : collect.get(resourceVo.getId() + "车辆"));
  232. resourceVo.setShipNum(collect.get(resourceVo.getId() + "船舶") == null ? 0 : collect.get(resourceVo.getId() + "船舶"));
  233. }
  234. }
  235. Map<Integer, List<ResourceVo>> collect2 = list.stream().collect(Collectors.groupingBy(ResourceVo::getResourceType, Collectors.mapping(a -> a, Collectors.toList())));
  236. Map<String, List<ResourceVo>> result = new HashMap<>();
  237. result.put("应急仓库", CollUtil.defaultIfEmpty(collect2.get(1), new ArrayList<>()));
  238. result.put("应急队伍", CollUtil.defaultIfEmpty(collect2.get(2), new ArrayList<>()));
  239. result.put("应急车队", CollUtil.defaultIfEmpty(collect2.get(3), new ArrayList<>()));
  240. return AjaxResult.success(result);
  241. }
  242. }