package cn.cslg.pas.service.business; import cn.cslg.pas.common.dto.business.TreeNodeDTO; import cn.cslg.pas.common.model.cronModel.*; import cn.cslg.pas.common.model.request.GroupRequest; import cn.cslg.pas.common.model.request.QueryRequest; import cn.cslg.pas.common.utils.CacheUtils; import cn.cslg.pas.common.utils.LoginUtils; import cn.cslg.pas.common.vo.business.TreeNodeVO; import cn.cslg.pas.domain.business.AssoTreeNodeFile; import cn.cslg.pas.domain.business.TreeNode; import cn.cslg.pas.exception.UnLoginException; import cn.cslg.pas.exception.XiaoShiException; import cn.cslg.pas.factorys.businessFactory.Business; import cn.cslg.pas.mapper.TreeNodeMapper; import cn.cslg.pas.service.common.FileManagerService; import cn.cslg.pas.service.permissions.PermissionService; import cn.cslg.pas.service.query.FormatQueryService; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * 架构的Service层 * @Author xiexiang * @Date 2023/10/26 */ @Service @Slf4j public class TreeNodeService extends ServiceImpl implements Business { @Autowired private TreeNodeMapper treeNodeMapper; @Autowired private AssoTreeNodeFileService assoTreeNodeFileService; @Autowired private FileManagerService fileManagerService; @Autowired private CacheUtils cacheUtils; @Autowired private LoginUtils loginUtils; @Autowired private FormatQueryService formatQueryService; @Autowired private PermissionService permissionService; @Override public Object queryMessage(QueryRequest queryRequest) throws Exception { List sqls = formatQueryService.reSqls(queryRequest,"treeNode"); //根据sql查询产品架构信息 List treeNodeVOS = treeNodeMapper.getTreeNode(sqls.get(0),sqls.get(1),sqls.get(2)); //装载产品类别信息 this.loadTreeNode(treeNodeVOS); Records records = new Records(); records.setCurrent(queryRequest.getCurrent()); records.setSize(queryRequest.getSize()); records.setData(treeNodeVOS); // records.setTotal(total); return records; } /** * 新增架构 * @param object * @param files * @return */ @Override public Object addMessage(Object object, List files) { //object to treeNode TreeNodeDTO treeNodeDTO = (TreeNodeDTO)object; //获取登录人信息 PersonnelVO personnelVO = new PersonnelVO(); try { personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); } catch (Exception e) { throw new UnLoginException("未登录"); } treeNodeDTO.setName(treeNodeDTO.getName().trim()); //根据名称查询是否重复 String name = treeNodeDTO.getName(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(TreeNode::getName, name); List treeNodes = this.list(queryWrapper); if(treeNodes != null && treeNodes.size() != 0){ throw new XiaoShiException("参数错误"); } //赋值 TreeNode treeNode = new TreeNode(); BeanUtils.copyProperties(treeNodeDTO, treeNode); treeNode.setCreateId("1"); //数据入表 treeNode.insert(); //处理文件 if(files != null && files.size() != 0){ try { List guids = fileManagerService.uploadFileGetGuid(files); List assoTreeNodeFiles = new ArrayList<>(); for(String item:guids){ AssoTreeNodeFile assoTreeNodeFile = new AssoTreeNodeFile(); assoTreeNodeFile.setTreeNodeId(treeNode.getId()); assoTreeNodeFile.setFileGuid(item); assoTreeNodeFile.setCreateId(personnelVO.getGuid()); assoTreeNodeFiles.add(assoTreeNodeFile); } if(assoTreeNodeFiles != null && assoTreeNodeFiles.size() != 0){ assoTreeNodeFileService.saveBatch(assoTreeNodeFiles); } } catch (Exception e) { } } //返回id return treeNode.getId(); } /** * 删除架构 * @param ids * @return */ @Override @Transactional(rollbackFor = Exception.class) public Object deleteMessage(List ids) throws IOException { //根据架构id删除架构和文件关联 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(AssoTreeNodeFile::getTreeNodeId, ids); List assoTreeNodeFiles = assoTreeNodeFileService.list(queryWrapper); List guids = assoTreeNodeFiles.stream().map(AssoTreeNodeFile::getFileGuid).collect(Collectors.toList()); //TODO 根据guids删除文件 if(guids.size() != 0){ fileManagerService.deleteFileFromFMS(guids); } //删除架构和文件关联表 assoTreeNodeFiles.remove(queryWrapper); //根据架构id删除架构数据 this.removeBatchByIds(ids); return ids; } /** * 更新架构 * @param object * @param files * @return */ @Override public Object updateMessage(Object object, List files) { //object to treeNode TreeNodeDTO treeNodeDTO = (TreeNodeDTO)object; //获取登录人信息 PersonnelVO personnelVO; try { personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); } catch (Exception e) { throw new UnLoginException("未登录"); } treeNodeDTO.setName(treeNodeDTO.getName().trim()); //根据名称查询是否重复 String name = treeNodeDTO.getName(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(TreeNode::getName, name); List treeNodes = this.list(queryWrapper); if(treeNodes == null && treeNodes.size() == 0){ return null; } //赋值 TreeNode treeNode = this.getById(treeNodeDTO.getId()); BeanUtils.copyProperties(treeNodeDTO, treeNode); treeNode.setCreateId(null); //数据入表 treeNode.insert(); //处理文件 if(files != null && files.size() != 0){ try { List guids = fileManagerService.uploadFileGetGuid(files); List assoTreeNodeFiles = new ArrayList<>(); for(String item:guids){ AssoTreeNodeFile assoTreeNodeFile = new AssoTreeNodeFile(); assoTreeNodeFile.setTreeNodeId(treeNode.getId()); assoTreeNodeFile.setFileGuid(item); //TODO assoTreeNodeFile.setCreateId(null); assoTreeNodeFiles.add(assoTreeNodeFile); } if(assoTreeNodeFiles != null && assoTreeNodeFiles.size() != 0){ assoTreeNodeFileService.saveBatch(assoTreeNodeFiles); } } catch (Exception e) { } } //返回id return treeNode.getId(); } @Override public GroupVO getGroup(GroupRequest groupRequest,String tableName) throws Exception { return null; } private void loadTreeNode(List treeNodeVOS) throws IOException { List createIds = new ArrayList<>(); List ids = new ArrayList<>(); treeNodeVOS.forEach( item -> { if(item.getCreateId() != null){ createIds.add(item.getCreateId()); } if (item.getId() != null) { ids.add(item.getId()); } } ); List personnels = new ArrayList<>(); List guids = new ArrayList<>(); List systemFiles = new ArrayList<>(); List assoTreeNodeFiles = new ArrayList<>(); if (ids.size() != 0) { //根据架构id获得架构与文件关联表 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(AssoTreeNodeFile::getTreeNodeId, ids); assoTreeNodeFiles = assoTreeNodeFileService.list(queryWrapper); guids = assoTreeNodeFiles.stream().map(AssoTreeNodeFile::getFileGuid).collect(Collectors.toList()); } //查询创建人名称 if (createIds.size() != 0) { String res = permissionService.getPersonnelByIdsFromPCS(createIds); JSONObject jsonObject = JSONObject.parseObject(res); personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class); } //查询文件 if (guids.size() != 0) { String res = fileManagerService.getSystemFileFromFMS(guids); JSONObject jsonObject = JSONObject.parseObject(res); systemFiles = JSONObject.parseArray(jsonObject.getString("data"), SystemFile.class); } //装载信息 for(TreeNodeVO treeNodeVO:treeNodeVOS){ //装载人员信息 //TODO // Personnel personnel = personnels.stream().filter(item -> item.getId().equals(treeNodeVO.getCreateId())).findFirst().orElse(null); // if(personnel != null){ // treeNodeVO.setCreateName(personnel.getPersonnelName()); // } //装载文件信息 List assoTreeNodeFilesTemp = assoTreeNodeFiles.stream().filter(item -> item.getTreeNodeId().equals(treeNodeVO.getId())).collect(Collectors.toList()); if(assoTreeNodeFilesTemp.size() != 0){ List guidTemp = assoTreeNodeFilesTemp.stream().map(AssoTreeNodeFile::getFileGuid).collect(Collectors.toList()); if (guidTemp.size() != 0) { List systemFileTemp = systemFiles.stream().filter(item -> guidTemp.contains(item.getGuid())).collect(Collectors.toList()); if (systemFileTemp.size() != 0) { treeNodeVO.setSystemFileList(systemFileTemp); } } } } } }