|
|
@ -8,66 +8,90 @@ module.exports = function (app, opts) { |
|
|
|
try { |
|
|
|
const { userInfo = {} } = ctx.fs.api || {}; |
|
|
|
const { role = [] } = userInfo |
|
|
|
return role.includes('SuperAdmin') |
|
|
|
return role.some(r => r == 'SuperAdmin' || r == 'admin') |
|
|
|
} catch (error) { |
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function anxinStrucIdRange ({ ctx, pepProjectId, projectOrStructKeyword }) { |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
|
const { userInfo = {} } = ctx.fs.api || {}; |
|
|
|
const { clickHouse } = ctx.app.fs |
|
|
|
const { correlationProject = [] } = userInfo |
|
|
|
async function anxinStrucIdRange ({ ctx, pepProjectId, keywordTarget, keyword }) { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
|
const { userInfo = {} } = ctx.fs.api || {}; |
|
|
|
const { clickHouse } = ctx.app.fs |
|
|
|
const { correlationProject = [] } = userInfo |
|
|
|
|
|
|
|
const isSuper = judgeSuper(ctx) |
|
|
|
let findOption = { |
|
|
|
where: { |
|
|
|
del: false |
|
|
|
} |
|
|
|
} |
|
|
|
if (pepProjectId) { |
|
|
|
findOption.where.pepProjectId = pepProjectId |
|
|
|
} else if (!isSuper) { |
|
|
|
findOption.where.id = { $in: correlationProject } |
|
|
|
const isSuper = judgeSuper(ctx) |
|
|
|
let findOption = { |
|
|
|
where: { |
|
|
|
del: false |
|
|
|
} |
|
|
|
} |
|
|
|
if (pepProjectId) { |
|
|
|
// 有 特定的项目id 就按此查询
|
|
|
|
findOption.where.pepProjectId = pepProjectId |
|
|
|
} else if (!isSuper) { |
|
|
|
// 还不是超管或管理员就按关联的项目id的数据范围查
|
|
|
|
findOption.where.id = { $in: correlationProject } |
|
|
|
} |
|
|
|
|
|
|
|
// TODO 这儿也许需要判断传进来的 pepProjectId 在不在当前用户的关注范围内
|
|
|
|
const bindRes = await models.ProjectCorrelation.findAll(findOption) |
|
|
|
// TODO 这儿也许需要判断传进来的 pepProjectId 在不在当前用户的关注范围内
|
|
|
|
// 根据 poms 的项目绑定关系查相关联的项企项目、安心云项目id信息
|
|
|
|
const bindRes = await models.ProjectCorrelation.findAll(findOption) |
|
|
|
|
|
|
|
let pepProjectIds = [] |
|
|
|
// 获取不重复的 安心云项目id
|
|
|
|
let pepProjectIds = bindRes.map(b => b.pepProjectId) |
|
|
|
|
|
|
|
const anxinProjectIds = [ |
|
|
|
...bindRes.reduce( |
|
|
|
(arr, b) => { |
|
|
|
pepProjectIds.push(b.pepProjectId) |
|
|
|
for (let sid of b.anxinProjectId) { |
|
|
|
arr.add(sid); |
|
|
|
} |
|
|
|
return arr; |
|
|
|
}, |
|
|
|
new Set() |
|
|
|
) |
|
|
|
] |
|
|
|
const pepProjectRes = pepProjectIds.length ? |
|
|
|
await clickHouse.projectManage.query( |
|
|
|
` |
|
|
|
SELECT |
|
|
|
id, project_name, isdelete |
|
|
|
FROM |
|
|
|
t_pim_project |
|
|
|
WHERE |
|
|
|
id IN (${pepProjectIds.join(',')}) |
|
|
|
` |
|
|
|
).toPromise() : |
|
|
|
[] |
|
|
|
// 查询项企项目的信息
|
|
|
|
let pepProjectWhereOptions = [] |
|
|
|
if (keywordTarget == 'pepProject' && keyword) { |
|
|
|
pepProjectWhereOptions.push(`name LIKE '%${keyword}%')`) |
|
|
|
} |
|
|
|
const pepProjectRes = pepProjectIds.length ? |
|
|
|
await clickHouse.projectManage.query( |
|
|
|
` |
|
|
|
SELECT |
|
|
|
id, project_name AS name, isdelete |
|
|
|
FROM |
|
|
|
t_pim_project |
|
|
|
WHERE |
|
|
|
id IN (${pepProjectIds.join(',')}) |
|
|
|
${pepProjectWhereOptions.length ? `AND ${pepProjectWhereOptions.join(' AND ')}` |
|
|
|
: ''} |
|
|
|
` |
|
|
|
).toPromise() : |
|
|
|
[] |
|
|
|
|
|
|
|
const undelStrucRes = anxinProjectIds.length ? |
|
|
|
await clickHouse.anxinyun.query( |
|
|
|
` |
|
|
|
|
|
|
|
const anxinProjectIds = [ |
|
|
|
...( |
|
|
|
bindRes.filter(b => pepProjectRes.some(pp => pp.id == b.pepProjectId)) |
|
|
|
).reduce( |
|
|
|
(arr, b) => { |
|
|
|
for (let sid of b.anxinProjectId) { |
|
|
|
arr.add(sid); |
|
|
|
} |
|
|
|
return arr; |
|
|
|
}, |
|
|
|
new Set() |
|
|
|
) |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
// 查询安心云项目及结构物信息
|
|
|
|
let undelStrucWhereOptions = [] |
|
|
|
if (keywordTarget && keyword) { |
|
|
|
if (keywordTarget == 'struc') { |
|
|
|
undelStrucWhereOptions.push(`t_structure.name LIKE '%${keyword}%'`) |
|
|
|
} |
|
|
|
} |
|
|
|
const undelStrucRes = anxinProjectIds.length ? |
|
|
|
await clickHouse.anxinyun.query( |
|
|
|
` |
|
|
|
SELECT |
|
|
|
t_project.id, t_structure.id AS strucId, project_state |
|
|
|
t_project.id AS projectId, |
|
|
|
t_structure.id AS strucId, |
|
|
|
t_structure.name AS strucName, |
|
|
|
project_state |
|
|
|
FROM |
|
|
|
t_project |
|
|
|
LEFT JOIN |
|
|
@ -80,16 +104,28 @@ module.exports = function (app, opts) { |
|
|
|
project_state != -1 |
|
|
|
AND |
|
|
|
t_project.id IN (${anxinProjectIds.join(',')}) |
|
|
|
${projectOrStructKeyword ? `AND (t_project.name LIKE '%${projectOrStructKeyword}%' OR t_structure.name LIKE '%${projectOrStructKeyword}%')` : ''} |
|
|
|
${undelStrucWhereOptions.length ? `AND ${undelStrucWhereOptions.join(' AND ')}` : ''} |
|
|
|
` |
|
|
|
).toPromise() : |
|
|
|
[] |
|
|
|
).toPromise() : |
|
|
|
[] |
|
|
|
|
|
|
|
const undelStrucIds = [...new Set(...undelStrucRes.map(s => s.strucId))] |
|
|
|
return {} |
|
|
|
} catch (error) { |
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); |
|
|
|
// 构建安心云结构物和项企项目的关系
|
|
|
|
// 并保存信息至数据
|
|
|
|
let undelStruc = [] |
|
|
|
for (let s of undelStrucRes) { |
|
|
|
if (!undelStruc.some(us => us.strucId == s.strucId)) { |
|
|
|
undelStruc.push({ |
|
|
|
strucId: s.strucId, |
|
|
|
strucName: s.strucName, |
|
|
|
pepProject: pepProjectRes.filter(pp => { |
|
|
|
return bindRes.find(br => { |
|
|
|
return br.pepProjectId == pp.id && br.anxinProjectId.some(braId => braId == s.strucId) |
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
return undelStruc |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|