| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- package com.persagy.account.controller;
- import java.io.IOException;
- import java.net.URLEncoder;
- import java.nio.charset.StandardCharsets;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.ModelAttribute;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.multipart.MultipartFile;
- import com.alibaba.excel.EasyExcel;
- import com.alibaba.excel.ExcelWriter;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.google.common.collect.Lists;
- import com.persagy.account.manage.SaasAreaProjectHandler;
- import com.persagy.account.manage.SaasAuthHandler;
- import com.persagy.account.manage.SaasGroupProjectHandler;
- import com.persagy.account.manage.SaasProjectExcelDataHandler;
- import com.persagy.account.manage.SaasProjectSheetWriteHandler;
- import com.persagy.account.pojo.dto.SaasAccountProject;
- import com.persagy.account.pojo.dto.SaasArea;
- import com.persagy.account.pojo.dto.SaasGroup;
- import com.persagy.account.pojo.dto.SaasProject;
- import com.persagy.account.pojo.vo.BaseGroupVO;
- import com.persagy.account.pojo.vo.group.SaasGroupQueryVO;
- import com.persagy.account.pojo.vo.project.SaasProjectAreaUpdateVO;
- import com.persagy.account.pojo.vo.project.SaasProjectCreateVO;
- import com.persagy.account.pojo.vo.project.SaasProjectExcel;
- import com.persagy.account.pojo.vo.project.SaasProjectPageVO;
- import com.persagy.account.pojo.vo.project.SaasProjectQueryVO;
- import com.persagy.account.service.ISaasAccountProjectService;
- import com.persagy.account.service.ISaasAreaService;
- import com.persagy.account.service.ISaasGroupService;
- import com.persagy.account.service.ISaasProjectService;
- import com.persagy.common.constant.SaasCommonConstant;
- import com.persagy.common.enums.ResponseCode;
- import com.persagy.common.exception.BusinessException;
- import com.persagy.common.model.BaseUserModel;
- import com.persagy.common.utils.ResponseResult;
- import com.persagy.common.utils.ResponseResultUtil;
- import com.persagy.common.utils.StringUtil;
- import com.persagy.log.core.annotation.IgnoreLog;
- import com.persagy.security.constant.CipherConstants;
- import cn.hutool.core.collection.CollectionUtil;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import lombok.extern.slf4j.Slf4j;
- /**
- * 项目信息
- *
- * @version 1.0.0
- * @company persagy
- * @author zhangqiankun
- * @date 2021-03-13 15:29:50
- */
- @Slf4j
- @Api(tags = "项目信息")
- @RestController
- @RequestMapping(value = "/project", method = RequestMethod.POST)
- public class SaasProjectController {
-
- @Autowired
- private SaasAuthHandler saasAuthHandler;
-
- @Autowired
- private ISaasAreaService saasAreaService;
-
- @Autowired
- private ISaasGroupService saasGroupService;
-
- @Autowired
- private ISaasProjectService saasProjectService;
- @Autowired
- private SaasAreaProjectHandler saasAreaProjectHandler;
-
- @Autowired
- private SaasGroupProjectHandler saasGroupProjectHandler;
-
- @Autowired
- private ISaasAccountProjectService saasAccountProjectService;
-
- /**
- * 项目信息查询,更新时间降序
- */
- @ApiOperation(value = "项目信息查询")
- @RequestMapping(value = "querySaasProjectList")
- public ResponseResult querySaasProjectList(@RequestBody @Validated SaasProjectQueryVO queryVO) {
- if (CollectionUtil.isNotEmpty(queryVO.getProjectIds()) && queryVO.getProjectIds().size() > 999) {
- return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "项目ID集合数量过大,请分批查询");
- }
- SaasProject saasProject = new SaasProject();
- BeanUtils.copyProperties(queryVO, saasProject);
- Page<SaasProject> projectList = this.saasGroupProjectHandler.querySaasProjectList(saasProject, null, null);
- return ResponseResultUtil.successResult(projectList.getRecords(), projectList.getTotal());
- }
-
- /**
- * 项目-区域平铺列表查询,权限过滤
- */
- @ApiOperation(value = "区域-项目平铺列表查询")
- @RequestMapping(value = "queryGroupProjectList")
- public ResponseResult queryGroupProjectList(@RequestBody @Validated BaseGroupVO queryVO) {
- LambdaQueryWrapper<SaasAccountProject> queryWrapper = new SaasAccountProject.Builder().createQueryWrapper()
- .groupCodeEq(queryVO.getGroupCode()).accountIdEq(queryVO.getAccountId()).builderQueryWrapper();
- List<SaasAccountProject> list = this.saasAccountProjectService.list(queryWrapper);
- if (list == null) {
- return ResponseResultUtil.successResult(Lists.newArrayList(), 0L);
- }
- return ResponseResultUtil.successResult(list, (long)list.size());
- }
-
- /**
- * 项目信息分页查询, 更新时间降序
- */
- @ApiOperation(value = "项目信息分页查询")
- @RequestMapping(value = "queryProjectPageList")
- public ResponseResult queryProjectPageList(@RequestBody @Validated SaasProjectPageVO pageVO) {
- SaasProject saasProject = new SaasProject();
- BeanUtils.copyProperties(pageVO, saasProject);
- Page<SaasProject> projectList = this.saasGroupProjectHandler.querySaasProjectList(saasProject, pageVO.getPage(), pageVO.getSize());
- return ResponseResultUtil.successResult(projectList.getRecords(), projectList.getTotal());
- }
-
- /**
- * 区域项目信息查询,结构:集团->区域->项目, 未做权限过滤
- */
- @ApiOperation(value = "查询集团区域项目信息")
- @RequestMapping(value = "queryAreaProjectTree")
- public ResponseResult queryAreaProjectTree(@RequestBody @Validated SaasProjectQueryVO model) {
- // 获取集团信息
- List<SaasGroup> groups = null;
- if (StringUtil.isBlank(model.getGroupCode())) {
- // 获取所有集团
- LambdaQueryWrapper<SaasGroup> queryWrapper = new SaasGroup.Builder().createQueryWrapper().validEq(SaasCommonConstant.STATUS_1).builderQueryWrapper();
- groups = this.saasGroupService.list(queryWrapper);
- } else {
- SaasGroup group = this.saasGroupService.getOne(model.getGroupCode());
- if (group == null) {
- return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "集团信息不存在");
- }
- groups = Lists.newArrayList(group);
- }
- if (CollectionUtil.isEmpty(groups)) {
- return ResponseResultUtil.errorResult(ResponseCode.C0320.getCode(), "集团信息不存在");
- }
- for (SaasGroup saasGroup : groups) {
- this.saasAreaProjectHandler.queryAreaProjectTree(saasGroup, model.isExcludeEmptyArea());
- }
- return ResponseResultUtil.successResult(groups);
- }
-
- /**
- * 区域项目信息查询,结构:集团->区域->项目, 根据账号ID做了权限过滤
- */
- @ApiOperation(value = "查询区域项目信息")
- @RequestMapping(value = "queryAllowAreaProjectTree")
- public ResponseResult queryAllowAreaProjectTree(@RequestBody @Validated SaasProjectQueryVO queryVO) {
- if (CollectionUtil.isNotEmpty(queryVO.getProjectIds()) && queryVO.getProjectIds().size() > 999) {
- return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "项目ID集合数量过大,请分批查询");
- }
- // 账号数据可见性的权限鉴定
- Map<String, String> authMap = this.saasAuthHandler.validAccountAuth(queryVO.getAccountId(), queryVO.getGroupCode());
- if (StringUtil.isNotBlank(authMap.get(CipherConstants.GROUP_CODE))) {
- queryVO.setGroupCode(authMap.get(CipherConstants.GROUP_CODE));
- }
- // 添加数据访问控制,账号可见域,0-所有集团项目,1-单集团所有项目(此时,集团编码需存在),2-其他
- String accountType = authMap.get(SaasCommonConstant.ACCOUNT_TYPE);
- List<SaasGroup> groups = this.saasAuthHandler.getAllowGroupList(queryVO.getAccountId(), queryVO.getGroupCode(), accountType);
- // 查询区域项目树
- for (SaasGroup saasGroup : groups) {
- List<SaasArea> areaList = this.saasAuthHandler.getAllowAreaList(queryVO.getAccountId(), queryVO.getGroupCode(), accountType, queryVO.isExcludeEmptyArea());
- saasGroup.setAreas(areaList);
- this.saasAreaProjectHandler.queryAllowAreaProjectTree(queryVO, saasGroup, areaList);
- if (queryVO.isExcludeEmptyArea()) {
- // 获取未分区下的可见项目
- SaasArea areaOne = this.saasAreaService.getAreaOne(null, saasGroup.getGroupCode(), SaasCommonConstant.STR_STATUS_MINUS_1, null);
- if (areaOne != null) {
- List<SaasProject> projects = this.saasAuthHandler.getAllowProjectList(queryVO.getAccountId(), queryVO.getGroupCode(), areaOne.getId());
- saasGroup.setProjects(projects);
- }
- }
- }
- return ResponseResultUtil.successResult(groups);
- }
-
- /**
- * 新增,集团编码与项目ID联合唯一,同时判断是否需要新增一条权限信息
- */
- @ApiOperation(value = "保存")
- @RequestMapping(value = "createSaasProject")
- public ResponseResult createSaasProject(@RequestBody @Validated SaasProjectCreateVO createVO) {
- SaasProject saasProject = new SaasProject();
- BeanUtils.copyProperties(createVO, saasProject);
- saasProject.setUpdateUser(createVO.getAccountId());
- saasProject.setId(null);
- if (StringUtil.isBlank(createVO.getAreaId())) {
- // 查询出未分区的区域ID
- SaasArea areaOne = this.saasAreaService.getAreaOne(null, createVO.getGroupCode(), SaasCommonConstant.STR_STATUS_MINUS_1, null);
- if (areaOne == null) {
- return ResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), "此项目所属集团不存在未分区区域,请检查");
- }
- saasProject.setAreaId(areaOne.getId());
- }
-
- // 验证集团编码与项目ID的联合唯一性
- boolean exists = this.saasProjectService.validProjectData(saasProject, false);
- if (!exists) {
- return ResponseResultUtil.errorResult(ResponseCode.C0341.getCode(), "项目ID、项目本地编码、项目名称都必须唯一");
- }
- return this.saasGroupProjectHandler.createSaasProject(saasProject, createVO.getAccountId());
- }
-
- /**
- * 更新
- */
- @ApiOperation(value = "更新")
- @RequestMapping(value = "updateSaasProject")
- public ResponseResult updateSaasProject(@RequestBody @Validated SaasProjectCreateVO createVO) {
- if (StringUtil.isBlank(createVO.getId())) {
- return ResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), "主键ID不可为空");
- }
- SaasProject saasProject = new SaasProject();
- BeanUtils.copyProperties(createVO, saasProject);
- saasProject.setUpdateUser(createVO.getAccountId());
- if (SaasCommonConstant.STR_STATUS_MINUS_1.equals(createVO.getAreaId())) {
- // 查询出未分区的区域ID
- SaasArea areaOne = this.saasAreaService.getAreaOne(null, createVO.getGroupCode(), SaasCommonConstant.STR_STATUS_MINUS_1, null);
- if (areaOne == null) {
- return ResponseResultUtil.errorResult(ResponseCode.A0400.getCode(), "此项目所属集团不存在未分区区域,请检查");
- }
- saasProject.setAreaId(areaOne.getId());
- }
- // 验证集团编码与项目ID的联合唯一性
- boolean exists = this.saasProjectService.validProjectData(saasProject, true);
- if (!exists) {
- return ResponseResultUtil.errorResult(ResponseCode.C0341.getCode(), "项目名称或项目ID或项目本地编码已存在");
- }
- LambdaUpdateWrapper<SaasProject> updateWrapper = new SaasProject.Builder().createUpdateWrapper()
- .idEq(createVO.getId()).groupCodeEq(createVO.getGroupCode()).projectIdEq(createVO.getProjectId())
- .validEq(SaasCommonConstant.STATUS_1).builderUpdateWrapper();
- exists = this.saasProjectService.update(saasProject, updateWrapper);
- return exists ? ResponseResultUtil.successResult("更新成功") : ResponseResultUtil.errorResult("更新失败");
- }
-
- /**
- * 批量变更项目所属区域
- */
- @ApiOperation(value = "批量变更项目所属区域")
- @RequestMapping(value = "batchUpdateProjectArea")
- public ResponseResult batchUpdateProjectArea(@RequestBody @Validated SaasProjectAreaUpdateVO batchVO) {
- if (batchVO.getProjectIds().size() > 100) {
- return ResponseResultUtil.errorResult(ResponseCode.A0402.getCode(), "项目ID过多,请多次处理");
- }
- SaasProject saasProject = new SaasProject();
- BeanUtils.copyProperties(batchVO, saasProject);
- saasProject.setUpdateUser(batchVO.getAccountId());
- boolean result = this.saasProjectService.batchUpdateProjectArea(saasProject, batchVO.getProjectIds());
- return result ? ResponseResultUtil.successResult("更新成功") : ResponseResultUtil.errorResult("更新失败");
- }
- /**
- * 物理删除
- */
- /*@ApiOperation(value = "删除")
- @RequestMapping(value = "deleteSaasProject")
- public ResponseResult deleteSaasProject(@RequestBody SaasProject saasProject) {
- boolean result = saasProjectService.removeById(saasProject.getId());
- return result ? ResponseResultUtil.successResult("删除成功") : ResponseResultUtil.errorResult("删除失败");
- }*/
-
-
- /******************************************************** upload file *****************************************************/
-
- /**
- * 项目数据上传模板下载
- *
- * @param baseVO
- * @param response
- * @return
- */
- @ApiOperation(value = "项目数据上传模板下载")
- @RequestMapping(value = "downloadProjectTemplate")
- public void downloadProjectTemplate(@RequestBody @Validated BaseUserModel baseVO, HttpServletResponse response) {
- // 优先判断是否存在集团信息
- SaasGroupQueryVO groupVO = new SaasGroupQueryVO();
- List<SaasGroup> list = this.saasGroupProjectHandler.querySaasGroupList(groupVO);
- if (CollectionUtil.isEmpty(list)) {
- throw new BusinessException("集团信息为空,请先添加集团");
- }
-
- ExcelWriter excelWriter = null;
- try {
- response.setContentType("application/vnd.ms-excel");
- String encode = StandardCharsets.UTF_8.name();
- response.setCharacterEncoding(encode);
- // 防止中文乱码
- String fileName = URLEncoder.encode("仪表批量上传模板", encode);
- response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
-
- EasyExcel.write(response.getOutputStream(), SaasProjectExcel.class)
- .registerWriteHandler(new SaasProjectSheetWriteHandler(saasGroupProjectHandler, saasAreaProjectHandler))
- .sheet("传项目信息").doWrite(SaasProjectExcel.getDemoData());
-
- /* excelWriter = EasyExcel.write(response.getOutputStream()).build();
- WriteSheet writeSheetOne = EasyExcel.writerSheet(0, SaasProjectExcel.SHEET_NAME_0)
- .registerWriteHandler(new SaasProjectSheetWriteHandler(saasGroupProjectHandler, saasAreaProjectHandler))
- .head(SaasProjectExcel.class).build();
- excelWriter.write(SaasProjectExcel.getDemoData(), writeSheetOne);*/
- } catch(Exception e) {
- log.error("项目数据上传模板下载失败", e);
- } finally {
- if (excelWriter != null) {
- excelWriter.finish();
- }
- }
- }
-
- /**
- * 项目数据上传
- *
- * @param model
- * @param file
- * @return
- */
- @IgnoreLog
- @ApiOperation(value = "项目数据直接上传")
- @RequestMapping(value = "directUploadProjectData")
- public ResponseResult directUploadProjectData(@ModelAttribute @Validated BaseUserModel model, MultipartFile file) {
- try {
- if (file == null) {
- return ResponseResultUtil.errorResult("未找到对应文件");
- }
- EasyExcel.read(file.getInputStream(), SaasProjectExcel.class,
- new SaasProjectExcelDataHandler(model, saasAreaService, saasProjectService)).sheet(0).doRead();
- return ResponseResultUtil.successResult();
- } catch(IOException e) {
- log.error("传感器数据流读取失败", e);
- }
- return ResponseResultUtil.errorResult();
- }
-
- }
|