package org.jeecg.modules.dnc.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.dnc.dto.ComponentExt; import org.jeecg.modules.dnc.entity.*; import org.jeecg.modules.dnc.exception.ExceptionCast; import org.jeecg.modules.dnc.mapper.ComponentInfoMapper; import org.jeecg.modules.dnc.mapper.ProductInfoMapper; import org.jeecg.modules.dnc.request.DocInfoQueryRequest; import org.jeecg.modules.dnc.request.TreeInfoRequest; import org.jeecg.modules.dnc.response.CommonCode; import org.jeecg.modules.dnc.response.ComponentInfoCode; import org.jeecg.modules.dnc.response.ProductInfoCode; import org.jeecg.modules.dnc.response.UcenterCode; import org.jeecg.modules.dnc.service.*; import org.jeecg.modules.dnc.utils.ValidateUtil; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.entity.SysUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; @Service public class ComponentInfoSeServiceImpl extends ServiceImpl implements IComponentInfoService { @Autowired private IComponentPermissionService componentPermissionService; @Autowired public ProductInfoMapper productInfoMapper; @Autowired private IPermissionStreamNewService permissionStreamNewService; @Autowired private IComponentDepartmentService componentDepartmentService; @Autowired @Lazy private IPartsInfoService partsInfoService; @Autowired private IProcessSpecVersionService processSpecVersionService; @Autowired private IProcessStreamService processStreamService; @Autowired private IProductMixService productMixService; @Autowired private IDocRelativeService iDocRelativeService; @Autowired private IProductPermissionService productPermissionService; @Autowired @Lazy private IDocInfoService docInfoService; @Autowired private IDocRelativeService docRelativeService; @Override @Transactional(rollbackFor = {Exception.class}) public boolean addComponentInfo(ComponentInfo componentInfo) { if(componentInfo == null) ExceptionCast.cast(CommonCode.INVALID_PARAM); if(!ValidateUtil.validateString(componentInfo.getComponentName())) ExceptionCast.cast(ComponentInfoCode.COMPONENT_NAME_NONE); if(!ValidateUtil.validateString(componentInfo.getProductId())) ExceptionCast.cast(ComponentInfoCode.COMPONENT_PRODUCT_NONE); if(!ValidateUtil.validateString(componentInfo.getComponentCode())) ExceptionCast.cast(ComponentInfoCode.COMPONENT_CODE_NONE); ComponentInfo en = getByCode(componentInfo.getComponentCode()); if(en != null&&componentInfo.getBorrowId()==null) ExceptionCast.cast(ComponentInfoCode.COMPONENT_IS_EXIST); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); List oldPermissionList; ProductInfo productInfo = productInfoMapper.selectById(componentInfo.getProductId()); if(productInfo == null) ExceptionCast.cast(ComponentInfoCode.COMPONENT_PRODUCT_NONE); if (ValidateUtil.validateString(componentInfo.getParentId())) { en = super.getById(componentInfo.getParentId()); if(en == null) { ExceptionCast.cast(ComponentInfoCode.COMPONENT_PARENT_NOT_EXIST); } oldPermissionList = permissionStreamNewService.loadPermissionStreamNewByBusinessId(en.getComponentId(),"2","1"); componentInfo.setRankLevel(en.getRankLevel() + 1); } else { oldPermissionList = permissionStreamNewService.loadPermissionStreamNewByBusinessId(productInfo.getProductId(),"1","1"); componentInfo.setParentId(null); componentInfo.setRankLevel(1); } componentInfo.setComponentStatus(1); boolean b = super.save(componentInfo); if(!b) ExceptionCast.cast(CommonCode.FAIL); //部门权限 List componentDepartmentList = new ArrayList<>(); List componentDepartPermList = new ArrayList<>(); if(oldPermissionList != null && !oldPermissionList.isEmpty()) { oldPermissionList.forEach(item -> { ComponentDepartment componentDepartment = new ComponentDepartment(); componentDepartment.setComponentId(componentInfo.getComponentId()); componentDepartment.setDepartId(item.getDepartId()); componentDepartmentList.add(componentDepartment); PermissionStreamNew permissionStream = new PermissionStreamNew(); permissionStream.setBusinessId(componentInfo.getComponentId()); permissionStream.setDepartId(item.getDepartId()); permissionStream.setBusinessType("2"); componentDepartPermList.add(permissionStream); }); } if(!componentDepartmentList.isEmpty()) { b = componentDepartmentService.saveBatch(componentDepartmentList); if(!b) ExceptionCast.cast(CommonCode.FAIL); } if(!componentDepartPermList.isEmpty()) { b = permissionStreamNewService.saveBatch(componentDepartPermList); if(!b) ExceptionCast.cast(CommonCode.FAIL); } b = productPermissionService.add(componentInfo.getComponentId(), userId,"2"); if (!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_SAVE_ERROR); } //添加结构树 ProductMix productMix=null; if (componentInfo.getParentId() != null) { //子部件 productMix = new ProductMix(Long.parseLong(componentInfo.getComponentId()),Long.parseLong(componentInfo.getParentId()) ,componentInfo.getComponentName(),componentInfo.getComponentCode(),2,new Date()); }else { productMix = new ProductMix(Long.parseLong(componentInfo.getComponentId()),Long.parseLong(productInfo.getProductId()) ,componentInfo.getComponentName(),componentInfo.getComponentCode(),2,new Date()); } productMixService.save(productMix); if (StrUtil.isNotEmpty(componentInfo.getBorrowId())){ //借用部件,同步添加文件 List docRelativeList=docRelativeService. list(new QueryWrapper().eq("attribution_type","2").eq("attribution_id",componentInfo.getBorrowId())); if (!docRelativeList.isEmpty()){ docRelativeList.forEach(item -> { DocRelative docRelative = new DocRelative(); BeanUtil.copyProperties(item,docRelative); docRelative.setId(null); docRelative.setAttributionId(componentInfo.getComponentId()); docRelativeService.save(docRelative); }); } } //添加权限 PermissionStreamNew stream = new PermissionStreamNew(); stream.setUserId(userId); stream.setBusinessId(componentInfo.getComponentId()); stream.setBusinessType("2"); return permissionStreamNewService.addPermissionStreamNew(stream); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean editComponentInfo(String id, ComponentInfo componentInfo) { if(!ValidateUtil.validateString(id) || componentInfo == null) ExceptionCast.cast(CommonCode.INVALID_PARAM); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); ComponentInfo en = super.getById(id); if(en == null) { ExceptionCast.cast(ComponentInfoCode.COMPONENT_NOT_EXIST); } componentInfo.setComponentId(id); //设置为空 则不会更新 componentInfo.setParentId(null); componentInfo.setComponentStatus(null); componentInfo.setRankLevel(null); componentInfo.setProductId(null); boolean b = super.updateById(componentInfo); //同步修改结构树 ProductMix productMix = productMixService.getById(Long.parseLong(id)); productMix.setName(componentInfo.getComponentName()); productMix.setCode(componentInfo.getComponentCode()); productMixService.updateById(productMix); if(!b) return false; ComponentPermission permission = componentPermissionService.getByComponentIdAndUserId(id, userId); if(permission == null) { permission = new ComponentPermission(); permission.setComponentId(id); permission.setUserId(userId); b = componentPermissionService.save(permission); if(!b) return false; } PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndUserId(id, userId,"2"); if(stream == null) { stream = new PermissionStreamNew(); stream.setUserId(userId); stream.setBusinessId(id); stream.setBusinessType("2"); return permissionStreamNewService.save(stream); } List list = super.lambdaQuery().eq(ComponentInfo::getBorrowId,id).list(); if (list != null && !list.isEmpty()) { list.forEach(item -> editComponentInfo(item.getComponentId(),componentInfo)); } return true; } @Override public List findExtAll() { return super.getBaseMapper().findExtAll(); } @Override public List getByUserPerms(String userId) { if(!ValidateUtil.validateString(userId)) return Collections.emptyList(); return super.getBaseMapper().getByUserPerms(userId); } @Override public List getByUserPerms(String userId, String queryParam) { if(!ValidateUtil.validateString(userId)) return Collections.emptyList(); //去除权限 TODO LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); if(ValidateUtil.validateString(queryParam)) { queryWrapper.and(wrapper->wrapper.like(ComponentInfo::getComponentCode, queryParam) .or() .like(ComponentInfo::getComponentName, queryParam)); } return super.list(queryWrapper); } @Override public List getByUserPermsAs(String userId) { if(!ValidateUtil.validateString(userId)) return Collections.emptyList(); return super.getBaseMapper().getByUserPermsAs(userId); } @Override public List getByProductId(String productId) { if(!ValidateUtil.validateString(productId)) return null; return super.lambdaQuery().eq(ComponentInfo::getProductId, productId).list(); } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteCollections(List componentInfoList) { componentInfoList.forEach(item -> { boolean b = componentPermissionService.deleteByComponentId(item.getComponentId()); if(!b) ExceptionCast.cast(ComponentInfoCode.COMPONENT_DELETE_PERM_NONE); b = componentDepartmentService.deleteByComponentId(item.getComponentId()); if(!b) ExceptionCast.cast(ComponentInfoCode.COMPONENT_DELETE_PERM_NONE); b = permissionStreamNewService.deletePermissionStreamNewByBusinessId(item.getComponentId(),"2","0"); if(!b) ExceptionCast.cast(ComponentInfoCode.COMPONENT_DELETE_PERM_NONE); b = permissionStreamNewService.deletePermissionStreamNewByBusinessId(item.getComponentId(),"2","1"); if(!b) ExceptionCast.cast(ComponentInfoCode.COMPONENT_DELETE_PERM_NONE); b = super.removeById(item.getComponentId()); if(!b) ExceptionCast.cast(ComponentInfoCode.COMPONENT_DELETE_PERM_NONE); }); return true; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean deleteComponentInfo(String id) { if(!ValidateUtil.validateString(id)) ExceptionCast.cast(ComponentInfoCode.COMPONENT_DELETE_ERROR); ComponentInfo componentInfo = super.getById(id); if(componentInfo == null) ExceptionCast.cast(ComponentInfoCode.COMPONENT_DELETE_ERROR); List childrenList = getByParentId(id); if(childrenList != null && !childrenList.isEmpty()) { ExceptionCast.cast(ComponentInfoCode.COMPONENT_CHILD_EXIST); } //验证部件下是否有零件 List partsInfoList = partsInfoService.getByComponentId(componentInfo.getProductId(), componentInfo.getComponentId()); if(partsInfoList != null && !partsInfoList.isEmpty()) { ExceptionCast.cast(ComponentInfoCode.COMPONENT_PARTS_EXIST); } //验证部件下是否有工序信息 List processStreamList = processStreamService.findByComponentId(id); if(processStreamList != null && !processStreamList.isEmpty()) { ExceptionCast.cast(ComponentInfoCode.COMPONENT_PROCESS_EXIST); } //验证部件是否被借用 List list = super.lambdaQuery().eq(ComponentInfo::getBorrowId,id).list(); if (list != null && !list.isEmpty()) { ExceptionCast.cast(ComponentInfoCode.COMPONENT_BORROW_EXIST); } boolean b; //验证是否存在文档 List docRelativeList=iDocRelativeService.list(new QueryWrapper().eq("attribution_type","2").eq("attribution_id",id)); if (!docRelativeList.isEmpty()){ ExceptionCast.cast(ComponentInfoCode.COMPONENT_DOC_EXIST); } b = componentPermissionService.deleteByComponentId(id); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = componentDepartmentService.deleteByComponentId(id); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = permissionStreamNewService.deletePermissionStreamNewByBusinessId(componentInfo.getComponentId(),"2","0"); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = permissionStreamNewService.deletePermissionStreamNewByBusinessId(componentInfo.getComponentId(),"2","1"); if(!b) ExceptionCast.cast(CommonCode.FAIL); b = productMixService.removeById(id); if (!b) ExceptionCast.cast(CommonCode.FAIL); return super.removeById(id); } @Override public List getByParentId(String componentId) { List componentExtList = super.getBaseMapper().findByParentId(componentId); if(componentExtList == null || componentExtList.isEmpty()) return null; List list = new ArrayList<>(); componentExtList.forEach(item -> { item.getAllChildren(list); }); return list; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignAddUser(ComponentInfo componentInfo, Collection userList) { if(componentInfo == null || userList == null || userList.isEmpty()) ExceptionCast.cast(CommonCode.INVALID_PARAM); List permissionList = new ArrayList<>(); List permissionStreamList = new ArrayList<>(); userList.forEach(item -> { ComponentPermission en = componentPermissionService.getByComponentIdAndUserId(componentInfo.getComponentId(), item.getId()); if(en == null) { en = new ComponentPermission(); en.setUserId(item.getId()); en.setComponentId(componentInfo.getComponentId()); permissionList.add(en); } PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndDepartId(componentInfo.getComponentId(), item.getId(), "2 "); if(stream == null) { stream = new PermissionStreamNew(); stream.setUserId(item.getId()); stream.setBusinessId(componentInfo.getComponentId()); stream.setBusinessType("2"); permissionStreamList.add(stream); } }); if(!permissionList.isEmpty()) { boolean b = componentPermissionService.saveBatch(permissionList); if(!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } if(!permissionStreamList.isEmpty()) { boolean b = permissionStreamNewService.saveBatch(permissionStreamList); if(!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } return true; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignRemoveUser(ComponentInfo componentInfo, Collection userList) { if(componentInfo == null || userList == null || userList.isEmpty()) ExceptionCast.cast(CommonCode.INVALID_PARAM); List permissionList = new ArrayList<>(); List permissionStreamList = new ArrayList<>(); userList.forEach(item -> { ComponentPermission en = componentPermissionService.getByComponentIdAndUserId(componentInfo.getComponentId(), item.getId()); if(en != null) { permissionList.add(en); } PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndDepartId(componentInfo.getComponentId(), item.getId(), "2 "); if(stream != null) { permissionStreamList.add(stream); } }); //校验部件用户权限清空操作 List existList = componentPermissionService.getByComponentId(componentInfo.getComponentId()); if(existList.size() <= permissionList.size()) ExceptionCast.cast(ComponentInfoCode.COMPONENT_USER_NONE); if(!permissionList.isEmpty()) { boolean b = componentPermissionService.removeByCollection(permissionList); if(!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } if(!permissionStreamList.isEmpty()) { boolean b = permissionStreamNewService.deletePermissionStreamNewByList(permissionStreamList); if(!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } return true; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignAddDepart(ComponentInfo componentInfo, Collection departmentList) { if(componentInfo == null || departmentList == null || departmentList.isEmpty()) ExceptionCast.cast(CommonCode.INVALID_PARAM); List componentDepartments = new ArrayList<>(); List permissionStreamList = new ArrayList<>(); departmentList.forEach(item -> { ComponentDepartment en = componentDepartmentService.getByComponentIdAndDepartId(componentInfo.getComponentId(), item.getId()); if(en == null) { en = new ComponentDepartment(); en.setDepartId(item.getId()); en.setComponentId(componentInfo.getComponentId()); componentDepartments.add(en); } PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndDepartId(componentInfo.getComponentId(), item.getId(),"2"); if(stream == null) { stream = new PermissionStreamNew(); stream.setDepartId(item.getId()); stream.setBusinessId(componentInfo.getComponentId()); stream.setBusinessType("2"); permissionStreamList.add(stream); } }); if(!componentDepartments.isEmpty()) { boolean b = componentDepartmentService.saveBatch(componentDepartments); if(!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } if(!permissionStreamList.isEmpty()) { boolean b = permissionStreamNewService.saveBatch(permissionStreamList); if(!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } return true; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean assignRemoveDepart(ComponentInfo componentInfo, Collection departmentList) { if(componentInfo == null || departmentList == null || departmentList.isEmpty()) ExceptionCast.cast(CommonCode.INVALID_PARAM); List componentDepartments = new ArrayList<>(); List permissionStreamList = new ArrayList<>(); departmentList.forEach(item -> { ComponentDepartment en = componentDepartmentService.getByComponentIdAndDepartId(componentInfo.getComponentId(), item.getId()); if(en != null) { componentDepartments.add(en); } PermissionStreamNew stream = permissionStreamNewService.loadPermissionStreamNewByBusinessIdAndDepartId(componentInfo.getComponentId(), item.getId(),"2"); if(stream != null) { permissionStreamList.add(stream); } }); if(!componentDepartments.isEmpty()) { boolean b = componentDepartmentService.removeByCollection(componentDepartments); if(!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } if(!permissionStreamList.isEmpty()) { boolean b = permissionStreamNewService.deletePermissionStreamNewByList(permissionStreamList); if(!b) { ExceptionCast.cast(ProductInfoCode.PRODUCT_USER_PERM_ERROR); } } return true; } @Override public ComponentInfo getByCode(String code) { if(ValidateUtil.validateString(code)) { List list = super.lambdaQuery().eq(ComponentInfo::getComponentCode, code).list(); if(list == null || list.isEmpty()) return null; return list.get(0); } return null; } @Override public PermissionStream validateComponentOrPartsPnCode(String pnCode) { if(!ValidateUtil.validateString(pnCode)) { ExceptionCast.cast(ComponentInfoCode.COMPONENT_PN_NOT_VALID); } PermissionStream stream = new PermissionStream(); List componentInfos = super.lambdaQuery().eq(ComponentInfo::getComponentCode, pnCode).list(); if(componentInfos == null || componentInfos.isEmpty()) { List list = partsInfoService.lambdaQuery().eq(PartsInfo::getPartsCode, pnCode).list(); if(list == null || list.isEmpty()) { ExceptionCast.cast(ComponentInfoCode.COMPONENT_PN_NOT_EXIST); }else if(list.size() != 1) { ExceptionCast.cast(ComponentInfoCode.COMPONENT_PN_NOT_ONLY); }else { PartsInfo partsInfo = list.get(0); stream.setProductId(partsInfo.getProductId()); stream.setComponentId(partsInfo.getComponentId()); stream.setPartsId(partsInfo.getPartsId()); return stream; } }else if(componentInfos.size() != 1){ ExceptionCast.cast(ComponentInfoCode.COMPONENT_PN_NOT_ONLY); }else { List list = partsInfoService.lambdaQuery().eq(PartsInfo::getPartsCode, pnCode).list(); if(list != null && list.size() > 0) { ExceptionCast.cast(ComponentInfoCode.COMPONENT_PN_NOT_ONLY); } ComponentInfo componentInfo = componentInfos.get(0); stream.setProductId(componentInfo.getProductId()); stream.setComponentId(componentInfo.getComponentId()); return stream; } return null; } @Override public List getByProductIdAndUserId(String productId, String userId) { //去除权限 TODO //return super.getBaseMapper().selectByProductIdAndUserId(productId, userId); LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(ComponentInfo::getProductId, productId); queryWrapper.eq(ComponentInfo::getRankLevel, 1); queryWrapper.orderByAsc(ComponentInfo::getCreateTime); return super.list(queryWrapper); } @Override public List getByParentIdAndUserId(String parentId, String userId) { //去除权限 TODO //return super.getBaseMapper().selectByParentIdAndUserId(parentId, userId); LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(ComponentInfo::getParentId, parentId); queryWrapper.orderByAsc(ComponentInfo::getCreateTime); return super.list(queryWrapper); } /** * 通过零件号、材质等查询对应电子样板 * @param treeInfoRequest * @return */ @Override public List getByComponentInfo(TreeInfoRequest treeInfoRequest){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (treeInfoRequest.getProductIds() != null && !treeInfoRequest.getProductIds().isEmpty()) { queryWrapper.in(ComponentInfo::getProductId, treeInfoRequest.getProductIds()); } if (treeInfoRequest.getAttributionType()==2){ queryWrapper.eq(StrUtil.isNotEmpty(treeInfoRequest.getAttributionId()),ComponentInfo::getComponentId,treeInfoRequest.getAttributionId()); } queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeCode()),ComponentInfo::getComponentCode, treeInfoRequest.getTreeCode()); queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeName()),ComponentInfo::getComponentName, treeInfoRequest.getTreeName()); queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getStructureType()),ComponentInfo::getStructureType, treeInfoRequest.getStructureType()); queryWrapper.orderByDesc(ComponentInfo::getCreateTime); List list = super.list(queryWrapper); List docInfos = new ArrayList<>(); if (list != null && !list.isEmpty()) { String ids=list.stream().map(ComponentInfo::getComponentId).collect(Collectors.joining(",")); DocInfoQueryRequest docQuery = new DocInfoQueryRequest(); BeanUtil.copyProperties(treeInfoRequest,docQuery); docQuery.setAttributionIds(ids); docQuery.setDocClassCode("OTHER"); docQuery.setAttributionType(2); docInfos=docInfoService.findListByDocQuery(docQuery); } if (treeInfoRequest.getAttributionType()==2){ List id =new ArrayList<>(); id.add(treeInfoRequest.getAttributionId()); treeInfoRequest.setComponentIds(id); List partsInfos = partsInfoService.getByPartsInfo(treeInfoRequest); docInfos.addAll(partsInfos); List processSpecVersions = processSpecVersionService.getByProcessSpecVersion(treeInfoRequest); docInfos.addAll(processSpecVersions); } return docInfos; } /** * 查询可以被引用的部件 * @param componentInfo * @param pageNo * @param pageSize * @return */ @Override public IPage getByComponentId(ComponentInfo componentInfo, Integer pageNo, Integer pageSize){ //权限排除,不能引用自己上下级部件 LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String productIds = loginUser.getProductionIds(); IPage page = new Page<>(pageNo, pageSize); if (productIds != null && !productIds.isEmpty()) { List productIdList = Arrays.asList(productIds.split(",")); List productMixList = permissionStreamNewService. loadProductMixByBusinessIdAndBusinessType(loginUser.getId(),productIdList,componentInfo.getComponentId(),"2"); List ids = productMixList.stream().map(ProductMix::getId).collect(Collectors.toList()); //获取已经被借用的部件 LambdaQueryWrapper borrowQueryWrapper = new LambdaQueryWrapper<>(); borrowQueryWrapper.in(ComponentInfo::getBorrowId,ids); borrowQueryWrapper.eq(ComponentInfo::getParentId,componentInfo.getComponentId()); List borrowIds= super.list(borrowQueryWrapper).stream().map(ComponentInfo::getBorrowId).collect(Collectors.toList()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.like(StrUtil.isNotEmpty(componentInfo.getComponentName()),ComponentInfo::getComponentName, componentInfo.getComponentName()); queryWrapper.like(StrUtil.isNotEmpty(componentInfo.getComponentCode()),ComponentInfo::getComponentCode, componentInfo.getComponentCode()); queryWrapper.isNull(ComponentInfo::getBorrowId); queryWrapper.in(ComponentInfo::getComponentId,ids); if (!borrowIds.isEmpty()) { queryWrapper.notIn(ComponentInfo::getComponentId,borrowIds); } queryWrapper.orderByDesc(ComponentInfo::getCreateTime); page = super.page(page, queryWrapper); } return page; } /** * 借用部件(可批量) - 原有部件id,新部件ids * @param oldId,newIds * @return */ @Override @Transactional(rollbackFor = Exception.class) public Result borrowComponent(String oldId, String newIds){ LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); ComponentInfo componentInfo = super.getById(oldId); if(componentInfo == null) { return Result.error("部件不存在"); } List productIdList = Arrays.asList(loginUser.getProductionIds().split(",")); //获取可以借用的部件 List productMixList = permissionStreamNewService. loadProductMixByBusinessIdAndBusinessType(loginUser.getId(),productIdList,componentInfo.getComponentId(),"2"); Set allowedIds = productMixList.stream() .map(ProductMix::getId) .collect(Collectors.toCollection(HashSet::new)); List newIdList = Arrays.asList(newIds.split(",")); boolean allAllowed = newIdList.parallelStream() .map(Long::parseLong) .allMatch(allowedIds::contains); if (!allAllowed) { return Result.error("存在未授权的部件借用"); } //获取已经被借用的部件 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ComponentInfo::getBorrowId,newIdList); queryWrapper.eq(ComponentInfo::getParentId,componentInfo.getComponentId()); List list = super.list(queryWrapper); //判断是否已经被当前部件借用 if(!list.isEmpty()) { return Result.error("选择的部件已被当前部件借用"); } List componentInfoList=listByIds(newIdList); componentInfoList.forEach(item->{ //添加部件信息、层级信息、权限信息 ComponentInfo newComponentInfo=new ComponentInfo(); BeanUtil.copyProperties(item,newComponentInfo); newComponentInfo.setComponentId(null); newComponentInfo.setProductId(componentInfo.getProductId()); newComponentInfo.setParentId(componentInfo.getComponentId()); newComponentInfo.setBorrowId(item.getComponentId()); addComponentInfo(newComponentInfo); }); return Result.ok("部件借用成功"); } }