package com.ruoyi.web.controller.zhdd; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpStatus; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.annotation.Security; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.core.validate.QueryGroup; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.UserUtil; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.zhdd.domain.Resource; import com.ruoyi.zhdd.domain.ResourceDetail; import com.ruoyi.zhdd.domain.bo.ResourceBo; import com.ruoyi.zhdd.domain.vo.ResourceDetailStatic; import com.ruoyi.zhdd.domain.vo.ResourceVo; import com.ruoyi.zhdd.service.IResourceDetailService; import com.ruoyi.zhdd.service.IResourceService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * 应急资源Controller * * @author xintong * @date 2021-10-27 */ @Validated @Api(value = "应急资源控制器", tags = {"应急资源管理"}) @RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/zhdd/resource") public class ResourceController extends BaseController { private final IResourceService iResourceService; private final IResourceDetailService iResourceDetailService; /** * 查询应急资源列表 */ @ApiOperation("查询应急资源列表") @GetMapping("/list") @Security public TableDataInfo list(@Validated(QueryGroup.class) ResourceBo bo) { if (StrUtil.equals(bo.getNotNullFlag(), "1")) { // 查询存在物资的仓库 List resourceIdExist = iResourceDetailService.queryExistResourceId(bo.getResourceType()); bo.setResourceIds(resourceIdExist); } else if (StrUtil.equals(bo.getNotNullFlag(), "2")) { // 查询存在物资的仓库 List resourceIdExist = iResourceDetailService.queryExistResourceId(bo.getResourceType()); bo.setResourceNotIds(resourceIdExist); } if (StrUtil.isNotBlank(bo.getGoodsName())) { // 模糊查询有哪些仓库存在此物资 List objects = iResourceDetailService.listObjs(new QueryWrapper() .select("distinct resource_id") .eq(bo.getResourceType() != null, "resource_type", bo.getResourceType()) .like("name", bo.getGoodsName())); if (objects != null && objects.size() > 0) { if (ObjectUtil.isNotEmpty(bo.getResourceIds())) { bo.setResourceIds(CollUtil.list(false, CollUtil.intersection(bo.getResourceIds(), objects))); } else { bo.setResourceIds(objects); } } else { TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); rspData.setMsg("查询成功"); rspData.setRows(Collections.emptyList()); rspData.setTotal(0); rspData.setPageNum(bo.getPageNum()); rspData.setPageSize(bo.getPageSize()); return rspData; } } // 临时增加处理只能看到该部门的数据 LoginUser cacheLoginUser = UserUtil.getCacheLoginUser(); // 查询角色如果包含admin的,直接查询全部 Set userRole = cacheLoginUser.getUserRole(); boolean admin = CollUtil.containsAny(userRole, CollUtil.newHashSet("admin")); if (!admin) { bo.setManageUnitId(cacheLoginUser.getUser().getOrgId()); } return iResourceService.queryPageList(bo); } @ApiOperation("移动端-模糊搜索物资") @GetMapping("/goodsList") @Security public TableDataInfo goodsList(@Validated(QueryGroup.class) ResourceBo bo) { bo.setResourceType(1); // 模糊查询有哪些仓库存在此物资 List objects = iResourceDetailService.listObjs(new QueryWrapper() .select("distinct resource_id") .like(StrUtil.isNotBlank(bo.getGoodsName()), "name", bo.getGoodsName())); List resourceDetail = new ArrayList<>(); if (objects != null && objects.size() > 0) { bo.setResourceIds(objects); resourceDetail = iResourceService.queryPageList(bo).getRows(); } if (StrUtil.isNotBlank(bo.getGoodsName())) { List resourceList = iResourceService.listVo(Wrappers.lambdaQuery() .eq(Resource::getResourceType, 1) .like(Resource::getName, bo.getGoodsName()) .notIn(CollUtil.isNotEmpty(objects), Resource::getId, objects)); resourceDetail = CollUtil.unionAll(resourceDetail, resourceList); } TableDataInfo rspData = new TableDataInfo<>(); rspData.setCode(HttpStatus.HTTP_OK); rspData.setMsg("查询成功"); rspData.setRows(resourceDetail); rspData.setTotal(resourceDetail.size()); // rspData.setPageSize(bo.getPageSize()); // rspData.setPageNum(bo.getPageNum()); return rspData; } /** * 导出应急资源列表 */ @ApiOperation("导出应急资源列表") @Log(title = "应急资源", businessType = BusinessType.EXPORT) @GetMapping("/export") public void export(@Validated ResourceBo bo, HttpServletResponse response) { List list = iResourceService.queryList(bo); ExcelUtil.exportExcel(list, "应急资源", ResourceVo.class, response); } /** * 获取应急资源详细信息 */ @ApiOperation("获取应急资源详细信息") // @PreAuthorize("@ss.hasPermi('zhdd:resource:query')") @GetMapping("/{id}") public AjaxResult getInfo(@NotNull(message = "主键不能为空") @PathVariable("id") String id) { return AjaxResult.success(iResourceService.queryById(id)); } /** * 新增应急资源 */ @ApiOperation("新增应急资源") // @PreAuthorize("@ss.hasPermi('zhdd:resource:add')") @Log(title = "应急资源", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() @Security public AjaxResult add(@Validated(AddGroup.class) @RequestBody ResourceBo bo) { // // 临时增加处理只能看到该部门的数据 // GatewayUser user = getGateWayUser(); // if (user != null) { // bo.setDeptId(user.getOrgId()); // } // 判断名称是否存在 ResourceVo voOne = iResourceService.getVoOne(Wrappers.lambdaQuery().eq(Resource::getName, bo.getName())); if (voOne != null) { return AjaxResult.error("名称已存在!"); } return toAjax(iResourceService.insertResource(bo) ? 1 : 0); } /** * 修改应急资源 */ @ApiOperation("修改应急资源") // @PreAuthorize("@ss.hasPermi('zhdd:resource:edit')") @Log(title = "应急资源", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() @Security public AjaxResult edit(@Validated(EditGroup.class) @RequestBody ResourceBo bo) { // 判断名称是否存在 ResourceVo resourceVo = iResourceService.queryById(bo.getId()); if (bo.getResourceType() != 3 && !resourceVo.getName().equals(bo.getName())) { ResourceVo voOne = iResourceService.getVoOne(Wrappers.lambdaQuery().eq(Resource::getName, bo.getName())); if (voOne != null) { return AjaxResult.error("名称已存在!"); } } return toAjax(iResourceService.updateResource(bo) ? 1 : 0); } /** * 删除应急资源 */ @ApiOperation("删除应急资源") // @PreAuthorize("@ss.hasPermi('zhdd:resource:remove')") @Log(title = "应急资源", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") @Security public AjaxResult remove(@NotEmpty(message = "主键不能为空") @PathVariable String[] ids) { return toAjax(iResourceService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0); } @ApiOperation("查询所有应急资源信息") @GetMapping("/location") public AjaxResult>> queryResourceLocation(ResourceBo bo) { List list = iResourceService.queryList(bo); // 查询物资数量 List resourceDetailStatics = iResourceDetailService.queryResourceTotalNum(); Map collect = resourceDetailStatics.stream().collect(Collectors.toMap(ResourceDetailStatic::getResourceId, ResourceDetailStatic::getNum)); for (ResourceVo resourceVo : list) { if (resourceVo.getResourceType() == 1 || resourceVo.getResourceType() == 2) { Integer integer = collect.get(resourceVo.getId()); resourceVo.setNum(integer == null ? 0 : integer); } else if (resourceVo.getResourceType() == 3) { resourceVo.setNum(collect.get(resourceVo.getId() + "车辆") == null ? 0 : collect.get(resourceVo.getId() + "车辆")); resourceVo.setShipNum(collect.get(resourceVo.getId() + "船舶") == null ? 0 : collect.get(resourceVo.getId() + "船舶")); } } Map> collect2 = list.stream().collect(Collectors.groupingBy(ResourceVo::getResourceType, Collectors.mapping(a -> a, Collectors.toList()))); Map> result = new HashMap<>(); result.put("应急仓库", CollUtil.defaultIfEmpty(collect2.get(1), new ArrayList<>())); result.put("应急队伍", CollUtil.defaultIfEmpty(collect2.get(2), new ArrayList<>())); result.put("应急车队", CollUtil.defaultIfEmpty(collect2.get(3), new ArrayList<>())); return AjaxResult.success(result); } }