重写了follow处理,修改发现的已知问题。

This commit is contained in:
chenxudong 2025-03-18 10:30:54 +08:00
parent 56b5838177
commit 06844c7557
4 changed files with 38 additions and 121 deletions

View File

@ -1,6 +1,7 @@
package com.electromagnetic.industry.software.manage.service.serviceimpl; package com.electromagnetic.industry.software.manage.service.serviceimpl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig; import cn.hutool.core.lang.tree.TreeNodeConfig;
@ -185,16 +186,15 @@ public class CommonService {
return parentId + fileFormat.getSuffixNo() + version + timeStr; return parentId + fileFormat.getSuffixNo() + version + timeStr;
} }
public List<EdFileInfo> selectAllPrjFolder(String id, List<String> accessibleIds, int dataOwnCode) { public List<EdFileInfo> selectAllPrjFolder(String id, int dataOwnCode) {
LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class) LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code) .eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code)
.likeRight(EdFileInfo::getFilePath, id); .likeRight(EdFileInfo::getFilePath, id);
if (dataOwnCode == DataOwnEnum.SYS_FILE.code || dataOwnCode == DataOwnEnum.SYS_PRJ.code) { if (DataOwnEnum.isSysCode(dataOwnCode)) {
queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code); queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code);
queryWrapper.in(EdFileInfo::getId, accessibleIds); } else if (DataOwnEnum.isUserCode(dataOwnCode)) {
} else if (dataOwnCode == DataOwnEnum.USER_FILE.code || dataOwnCode == DataOwnEnum.USER_PRJ.code) {
queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code); queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code);
} else { } else {
queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code); queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code);
@ -416,19 +416,17 @@ public class CommonService {
public ElectromagneticResult<?> deleteFolder(String id, int dataOwnCode) { public ElectromagneticResult<?> deleteFolder(String id, int dataOwnCode) {
// 如果文件夹下存在文件包括文件夹和已经逻辑删除的文件则不允许删除后面管理员选择会有物理删除文件夹和文件的功能此时MySQL和文件系统则会进行物理删除该文件 // 如果文件夹下存在文件包括文件夹和已经逻辑删除的文件则不允许删除后面管理员选择会有物理删除文件夹和文件的功能此时MySQL和文件系统则会进行物理删除该文件
EdFileInfo srcFileInfo = edFileInfoMapper.selectById(id); EdFileInfo srcFileInfo = edFileInfoMapper.selectById(id);
String srcPrjName = srcFileInfo.getFileName();
String srcFilePath = getFileSysPath(srcFileInfo.getFilePath(), dataOwnCode); String srcFilePath = getFileSysPath(srcFileInfo.getFilePath(), dataOwnCode);
EdFileInfo fileInfo = edFileInfoMapper.selectOne(Wrappers.<EdFileInfo>lambdaQuery().eq(EdFileInfo::getId, id));
try { try {
// 这里要分两种情况1是删除层级目录2是删除用户创建的文件夹 // 这里要分两种情况1是删除层级目录2是删除用户创建的文件夹
String parentId = fileInfo.getParentId(); String parentId = srcFileInfo.getParentId();
if (fileInfo.getDataOwn().equals(DataOwnEnum.SYS_PRJ.code)) { // 删除的是层级目录 if (DataOwnEnum.isPrjCode(srcFileInfo.getDataOwn())) { // 删除的是层级目录
long count = edFileInfoMapper.selectCount(Wrappers.<EdFileInfo>lambdaQuery() long count = edFileInfoMapper.selectCount(Wrappers.<EdFileInfo>lambdaQuery()
.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_FILE.code) .eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_FILE.code)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
.like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + id + MYSQL_FILE_PATH_SPLIT)); .like(EdFileInfo::getFilePath, MYSQL_FILE_PATH_SPLIT + id + MYSQL_FILE_PATH_SPLIT));
if (count > 0) { if (count > 0) {
String info = StrFormatter.format("删除层级 {} 失败,目录非空。", fileInfo.getFileName()); String info = StrFormatter.format("删除层级 {} 失败,目录非空。", srcFileInfo.getFileName());
log.info(info); log.info(info);
return ElectromagneticResultUtil.fail("-1", info); return ElectromagneticResultUtil.fail("-1", info);
} else { } else {
@ -458,7 +456,7 @@ public class CommonService {
.eq(EdFileInfo::getParentId, id) .eq(EdFileInfo::getParentId, id)
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)); .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
if (count > 0) { if (count > 0) {
String info = StrFormatter.format("删除文件夹 {} 失败,目录非空。", fileInfo.getFileName()); String info = StrFormatter.format("删除文件夹 {} 失败,目录非空。", srcFileInfo.getFileName());
log.info(info); log.info(info);
return ElectromagneticResultUtil.fail("-1", info); return ElectromagneticResultUtil.fail("-1", info);
} else { } else {
@ -466,14 +464,13 @@ public class CommonService {
edFileInfoMapper.update(new EdFileInfo(), Wrappers.<EdFileInfo>lambdaUpdate() edFileInfoMapper.update(new EdFileInfo(), Wrappers.<EdFileInfo>lambdaUpdate()
.eq(EdFileInfo::getId, id) .eq(EdFileInfo::getId, id)
.set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)); .set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code));
fileSystemService.renameFile(srcFilePath, srcPrjName + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG); fileSystemService.renameFile(srcFilePath, srcFileInfo.getFileName() + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG);
} }
} }
// fileSystemService.renameFile(srcFilePath, srcPrjName + "." + IdUtil.fastSimpleUUID() + DELETE_FLAG); UserThreadLocal.setSuccessInfo(srcFileInfo.getParentId(), id, "删除目录 {} 成功", srcFileInfo.getFileName());
UserThreadLocal.setSuccessInfo(srcFileInfo.getParentId(), id, "删除目录 {} 成功", fileInfo.getFileName());
return ElectromagneticResultUtil.success(true); return ElectromagneticResultUtil.success(true);
} catch (Exception e) { } catch (Exception e) {
String info = StrFormatter.format("删除 {} 失败,原因 {}", fileInfo.getFileName(), e.getMessage()); String info = StrFormatter.format("删除 {} 失败,原因 {}", srcFileInfo.getFileName(), e.getMessage());
log.error(info, e); log.error(info, e);
throw new BizException(info); throw new BizException(info);
} }
@ -519,8 +516,11 @@ public class CommonService {
public void deletePrjSysDir(List<String> paths) { public void deletePrjSysDir(List<String> paths) {
for (String path : paths) { for (String path : paths) {
String preDirName = new File(path).getParentFile().getName(); if (!FileUtil.exist(path)) {
fileSystemService.renameFile(path, preDirName + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG); continue;
}
String fileName = new File(path).getName();
fileSystemService.renameFile(path, fileName + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG);
} }
} }

View File

@ -190,7 +190,7 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
this.baseMapper.update(new EdFileInfo(), Wrappers.lambdaUpdate(EdFileInfo.class).set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code).in(EdFileInfo::getId, ids)); this.baseMapper.update(new EdFileInfo(), Wrappers.lambdaUpdate(EdFileInfo.class).set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code).in(EdFileInfo::getId, ids));
// 对原文件进行处理 // 对原文件进行处理
EdFileInfo prjFile = this.getById(prjId); EdFileInfo prjFile = this.getById(prjId);
fileSystemService.renameFile(commonService.getFileSysPath(prjId, dataOwnCode), prjFile + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG); fileSystemService.renameFile(commonService.getFileSysPath(prjId, dataOwnCode), prjFile.getFileName() + "_" + IdUtil.fastSimpleUUID() + DELETE_FLAG);
UserThreadLocal.setSuccessInfo("", prjId, "废除 {} 项目成功。", prjFile.getFileName()); UserThreadLocal.setSuccessInfo("", prjId, "废除 {} 项目成功。", prjFile.getFileName());
return ElectromagneticResultUtil.success(true); return ElectromagneticResultUtil.success(true);
} catch (Exception e) { } catch (Exception e) {
@ -350,8 +350,8 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
try { try {
// 把source工程的层级结构copy到目标工程 // 把source工程的层级结构copy到目标工程
// 查找source的全部目录 // 查找source的全部目录
List<EdFileInfo> sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, null, dataOwnCode); List<EdFileInfo> sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, dataOwnCode);
List<EdFileInfo> targetEdFileInfos = commonService.selectAllPrjFolder(targetId, null, dataOwnCode); List<EdFileInfo> targetEdFileInfos = commonService.selectAllPrjFolder(targetId, dataOwnCode);
// //
Set<String> sourceNames = sourceEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).map(EdFileInfo::getFileName).collect(Collectors.toSet()); Set<String> sourceNames = sourceEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).map(EdFileInfo::getFileName).collect(Collectors.toSet());
Set<String> targetNames = targetEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).map(EdFileInfo::getFileName).collect(Collectors.toSet()); Set<String> targetNames = targetEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).map(EdFileInfo::getFileName).collect(Collectors.toSet());
@ -364,11 +364,14 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
} }
Map<String, String> idMaps = new HashMap<>(); Map<String, String> idMaps = new HashMap<>();
idMaps.put(sourceId, targetId);
List<String> sysFilePaths = new ArrayList<>();
for (int i = 1; i <= prjFolderMaxLength; ++i) { for (int i = 1; i <= prjFolderMaxLength; ++i) {
int layerIndex = i; int layerIndex = i;
List<EdFileInfo> currentSourceLayerDirs = sourceEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == layerIndex).collect(Collectors.toList()); List<EdFileInfo> currentSourceLayerDirs = sourceEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == layerIndex).collect(Collectors.toList());
if (layerIndex == 1) { if (layerIndex == 1) {
targetEdFileInfos = commonService.selectAllPrjFolder(targetId, null, dataOwnCode); targetEdFileInfos = commonService.selectAllPrjFolder(targetId, dataOwnCode);
EdFileInfo prjFileInfo = targetEdFileInfos.stream().filter(e -> e.getParentId().equals(PRJ_PARENT_ID)).findFirst().get();
List<EdFileInfo> targetChildLayerDirs = targetEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).collect(Collectors.toList()); List<EdFileInfo> targetChildLayerDirs = targetEdFileInfos.stream().filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == 1).collect(Collectors.toList());
int size = targetChildLayerDirs.size(); int size = targetChildLayerDirs.size();
for (EdFileInfo edFileInfo : currentSourceLayerDirs) { for (EdFileInfo edFileInfo : currentSourceLayerDirs) {
@ -381,7 +384,7 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
.setFileName(edFileInfo.getFileName()) .setFileName(edFileInfo.getFileName())
.setFileVersion(FILE_START_VERSION) .setFileVersion(FILE_START_VERSION)
.setDataOwn(dataOwnCode) .setDataOwn(dataOwnCode)
.setParentId(edFileInfo.getId()) .setParentId(idMaps.get(edFileInfo.getParentId()))
.setFileTime(nowTimeStr) .setFileTime(nowTimeStr)
.setDataType(EleDataTypeEnum.FOLDER.code) .setDataType(EleDataTypeEnum.FOLDER.code)
.setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code) .setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
@ -389,16 +392,20 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
.setFileCode(fileCode) .setFileCode(fileCode)
.setFileType("文件夹") .setFileType("文件夹")
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
.setFilePath(edFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId) .setFilePath(prjFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
.setSort(++size); .setSort(++size);
this.save(targetFile); this.save(targetFile);
targetEdFileInfos.add(targetFile); targetEdFileInfos.add(targetFile);
idMaps.put(edFileInfo.getFileId(), newFolderId); idMaps.put(edFileInfo.getFileId(), newFolderId);
String targetSysFilePath = commonService.getFileSysPath(targetFile.getFilePath(), dataOwnCode);
sysFilePaths.add(targetSysFilePath);
} }
} } else {
else { List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).in(EdFileInfo::getId, idMaps.values()));
Map<String, EdFileInfo> map = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e));
for (EdFileInfo edFileInfo : currentSourceLayerDirs) { for (EdFileInfo edFileInfo : currentSourceLayerDirs) {
String targetDirParentId = idMaps.get(edFileInfo.getParentId()); String targetDirParentId = idMaps.get(edFileInfo.getParentId());
EdFileInfo parentFileInfo = map.get(targetDirParentId);
int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId()); int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
String newFolderId = String.valueOf(maxFolderId + 1); String newFolderId = String.valueOf(maxFolderId + 1);
@ -418,107 +425,17 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
.setFileCode(fileCode) .setFileCode(fileCode)
.setFileType("文件夹") .setFileType("文件夹")
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code) .setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
.setFilePath(edFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId) .setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
.setSort(edFileInfo.getSort()); .setSort(edFileInfo.getSort());
this.save(targetFile); this.save(targetFile);
targetEdFileInfos.add(targetFile); targetEdFileInfos.add(targetFile);
idMaps.put(edFileInfo.getFileId(), newFolderId); idMaps.put(edFileInfo.getFileId(), newFolderId);
}
}
}
UserThreadLocal.setSuccessInfo("", targetId, "层级沿用成功");
return ElectromagneticResultUtil.success(true);
} catch (Exception e) {
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 存在相同子集", sourceId, targetId);
log.error(info);
throw new BizException(info);
}
}
/**
* 层级沿用
*
* @param sourceId
* @param targetId
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public ElectromagneticResult<?> follow1(String sourceId, String targetId, int dataOwnCode) {
try {
// 把source工程的层级结构copy到目标工程
// 查找source的全部目录
List<EdFileInfo> sourceEdFileInfos = commonService.selectAllPrjFolder(sourceId, null, dataOwnCode);
List<String> needSavePaths = new ArrayList<>();
// 确定层级最大为prjFolderMaxLength层现在逐层来处理
for (int i = 1; i <= prjFolderMaxLength; ++i) {
List<EdFileInfo> targetEdFileInfos = commonService.selectAllPrjFolder(targetId, null, dataOwnCode);
// 先查找source第i层下有那些子集
final int count = i;
// 取source当前层
List<EdFileInfo> sourceCurrentLayerFiles = sourceEdFileInfos.stream()
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
.collect(Collectors.toList());
// 取target父层
List<EdFileInfo> targetCurrentLayerFiles = targetEdFileInfos.stream()
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count - 1)
.collect(Collectors.toList());
// 获取source名称的map
Map<String, EdFileInfo> sourceFileNameMap = sourceCurrentLayerFiles.stream()
.collect(Collectors.toMap(EdFileInfo::getId, e -> e));
// 获取target当前层级的子集名称
List<String> targetFileNames = targetEdFileInfos.stream()
.filter(e -> StrUtil.count(e.getFilePath(), MYSQL_FILE_PATH_SPLIT) == count)
.map(EdFileInfo::getFileName)
.collect(Collectors.toList());
int sort = targetCurrentLayerFiles.size();
for (EdFileInfo edFileInfo : sourceCurrentLayerFiles) {
String sourceFileName = edFileInfo.getFileName();
String sourceFileParentName = sourceEdFileInfos.stream().filter(e -> e.getId().equals(edFileInfo.getParentId())).findFirst().get().getFileName();
EdFileInfo targetParentFile = i == 1 ?
targetCurrentLayerFiles.stream().filter(e -> e.getId().equals(targetId)).findFirst().get() :
targetCurrentLayerFiles.stream().filter(e -> e.getFileName().equals(sourceFileParentName)).findFirst().get(); // TODO BUGS
if (!targetFileNames.contains(sourceFileName)) {
EdFileInfo sourceFile = sourceFileNameMap.get(edFileInfo.getId());
EdFileInfo targetFile = new EdFileInfo();
int maxFolderId = Integer.parseInt(this.baseMapper.maxPrjId());
String newFolderId = String.valueOf(maxFolderId + 1);
String nowTimeStr = EleCommonUtil.getNowTimeStr();
String fileCode = commonService.createFileCode(targetParentFile.getId(), EleDataTypeEnum.FOLDER.desc, FILE_START_VERSION, nowTimeStr);
targetFile.setId(newFolderId)
.setFileId(newFolderId)
.setFileName(sourceFile.getFileName())
.setFileVersion(FILE_START_VERSION)
.setDataOwn(dataOwnCode)
.setParentId(targetParentFile.getId())
.setFileTime(nowTimeStr)
.setDataType(EleDataTypeEnum.FOLDER.code)
.setDataStatus(EleDataStatusEnum.NOT_PUBLISHED.code)
.setEffectFlag(EffectFlagEnum.EFFECT.code)
.setFileCode(fileCode)
.setFileType("文件夹")
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
.setFilePath(targetParentFile.getFilePath() + MYSQL_FILE_PATH_SPLIT + newFolderId)
.setSort(++sort);
this.save(targetFile);
targetEdFileInfos.add(targetFile);
String targetSysFilePath = commonService.getFileSysPath(targetFile.getFilePath(), dataOwnCode); String targetSysFilePath = commonService.getFileSysPath(targetFile.getFilePath(), dataOwnCode);
needSavePaths.add(targetSysFilePath); sysFilePaths.add(targetSysFilePath);
} else {
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 存在相同子集", sourceId, targetId);
log.error(info);
return ElectromagneticResultUtil.fail("-1", info);
} }
} }
} }
for (String path : needSavePaths) { for (String path : sysFilePaths) {
fileSystemService.createDirectory(path); fileSystemService.createDirectory(path);
} }
UserThreadLocal.setSuccessInfo("", targetId, "层级沿用成功"); UserThreadLocal.setSuccessInfo("", targetId, "层级沿用成功");
@ -526,7 +443,7 @@ public class EdPrjServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileInfo>
} catch (Exception e) { } catch (Exception e) {
String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 {}", sourceId, targetId, e.getMessage()); String info = StrFormatter.format("层级沿用失败,源工程 {},目标工程 {},原因 {}", sourceId, targetId, e.getMessage());
log.error(info, e); log.error(info, e);
throw new BizException(info, e); throw new BizException(info);
} }
} }

View File

@ -16,14 +16,14 @@
FROM ed_role_permission rp FROM ed_role_permission rp
JOIN ed_file_info f ON rp.file_id = f.id JOIN ed_file_info f ON rp.file_id = f.id
WHERE f.parent_id = #{fileId} WHERE f.parent_id = #{fileId}
AND f.prj_dir = #{prjDir} AND f.data_own = #{prjDir}
AND f.data_status = #{dataStatus} AND f.data_status = #{dataStatus}
AND f.effect_flag = #{effectFlag} AND f.effect_flag = #{effectFlag}
GROUP BY rp.role_id, rp.permission_code GROUP BY rp.role_id, rp.permission_code
HAVING COUNT(f.id) = (SELECT COUNT(f2.id) HAVING COUNT(f.id) = (SELECT COUNT(f2.id)
FROM ed_file_info f2 FROM ed_file_info f2
WHERE f2.parent_id = #{fileId} WHERE f2.parent_id = #{fileId}
AND f2.prj_dir = #{prjDir} AND f2.data_own = #{prjDir}
AND f2.data_status = #{dataStatus} AND f2.data_status = #{dataStatus}
AND f2.effect_flag = #{effectFlag}) AND f2.effect_flag = #{effectFlag})
</select> </select>

View File

@ -18,5 +18,5 @@ public interface ElectromagneticConstants {
int PRJ_ID_LENGTH = 6; int PRJ_ID_LENGTH = 6;
String DELETE_FLAG = "delete"; String DELETE_FLAG = "deleted";
} }