|
|
|
'use strict';
|
|
|
|
const moment = require('moment')
|
|
|
|
|
|
|
|
async function bindAnxin2pep (ctx) {
|
|
|
|
const transaction = await ctx.fs.dc.orm.transaction();
|
|
|
|
try {
|
|
|
|
const models = ctx.fs.dc.models;
|
|
|
|
const { clickHouse } = ctx.app.fs
|
|
|
|
const { userId, pepUserId } = ctx.fs.api
|
|
|
|
const { bindId, name, pepProjectId, anxinProjectId = [], appId = [] } = ctx.request.body
|
|
|
|
|
|
|
|
if (name && pepProjectId) {
|
|
|
|
throw '项企项目与自定义项目名称仅可选择一项'
|
|
|
|
}
|
|
|
|
|
|
|
|
let bindId_ = bindId
|
|
|
|
const now = moment()
|
|
|
|
|
|
|
|
let storageData = {
|
|
|
|
name, pepProjectId, anxinProjectId,
|
|
|
|
updateTime: now,
|
|
|
|
del: false,
|
|
|
|
}
|
|
|
|
|
|
|
|
// 仅限已有 pepProjectId 的项目
|
|
|
|
const existRes = pepProjectId ? await models.ProjectCorrelation.findOne({
|
|
|
|
where: Object.assign(
|
|
|
|
{},
|
|
|
|
pepProjectId ? {
|
|
|
|
pepProjectId: pepProjectId
|
|
|
|
} : {
|
|
|
|
name,
|
|
|
|
}
|
|
|
|
),
|
|
|
|
}) : null
|
|
|
|
|
|
|
|
if (name) {
|
|
|
|
const pepRepeatNameCount = await clickHouse.projectManage.query(`SELECT COUNT(*) AS count FROM t_pim_project WHERE project_name='${name}'`).toPromise()
|
|
|
|
if (pepRepeatNameCount[0].count) {
|
|
|
|
throw `已有相同名称【${name}】的项企项目`
|
|
|
|
}
|
|
|
|
const pomsRepeatNameRes = await models.ProjectCorrelation.findAll({
|
|
|
|
where: {
|
|
|
|
name
|
|
|
|
}
|
|
|
|
})
|
|
|
|
if (pomsRepeatNameRes.some((pr) => {
|
|
|
|
return (
|
|
|
|
(
|
|
|
|
// 有修改id但是不等于当前修改id的
|
|
|
|
bindId && pr.id != bindId && !pr.del
|
|
|
|
) || (
|
|
|
|
!bindId && (
|
|
|
|
(
|
|
|
|
existRes && pr.id != existRes.id && !pr.del
|
|
|
|
) || (
|
|
|
|
!existRes && !pr.del
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
})) {
|
|
|
|
throw `已有相同名称【${name}】的自定义项目`
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
const pomsRepeatProjectIdRes = await models.ProjectCorrelation.findAll({
|
|
|
|
where: {
|
|
|
|
pepProjectId: pepProjectId
|
|
|
|
}
|
|
|
|
})
|
|
|
|
if (pomsRepeatProjectIdRes.some((pr) => {
|
|
|
|
return (
|
|
|
|
(
|
|
|
|
// 有修改id但是不等于当前修改id的
|
|
|
|
bindId && pr.id != bindId && !pr.del
|
|
|
|
) || (
|
|
|
|
!bindId && (
|
|
|
|
(
|
|
|
|
existRes && pr.id != existRes.id && !pr.del
|
|
|
|
) || (
|
|
|
|
!existRes && !pr.del
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
})) {
|
|
|
|
throw `当前项企项目已绑定`
|
|
|
|
}
|
|
|
|
storageData.name = null
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (bindId) {
|
|
|
|
// 修改
|
|
|
|
await models.ProjectCorrelation.update(storageData, {
|
|
|
|
where: {
|
|
|
|
id: bindId
|
|
|
|
},
|
|
|
|
transaction
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
// 新增
|
|
|
|
if (existRes) {
|
|
|
|
// 但是有之前的数据
|
|
|
|
if (existRes.del) {
|
|
|
|
// 不过之前的删除了
|
|
|
|
await models.ProjectCorrelation.update(storageData, {
|
|
|
|
where: {
|
|
|
|
pepProjectId: pepProjectId
|
|
|
|
},
|
|
|
|
transaction
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
// 没有删除 重复添加
|
|
|
|
throw '当前项企项目已绑定'
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
storageData.createUser = userId;
|
|
|
|
storageData.createTime = now.format()
|
|
|
|
const createRes = await models.ProjectCorrelation.create(storageData, {
|
|
|
|
transaction
|
|
|
|
})
|
|
|
|
bindId_ = createRes.id
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (bindId) {
|
|
|
|
await models.ProjectApp.destroy({
|
|
|
|
where: {
|
|
|
|
projectId: bindId
|
|
|
|
},
|
|
|
|
transaction
|
|
|
|
})
|
|
|
|
}
|
|
|
|
await models.ProjectApp.bulkCreate(appId.map(aid => {
|
|
|
|
return {
|
|
|
|
projectId: bindId_,
|
|
|
|
appId: aid
|
|
|
|
}
|
|
|
|
}), {
|
|
|
|
transaction
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
await transaction.commit();
|
|
|
|
ctx.status = 204;
|
|
|
|
} catch (error) {
|
|
|
|
await transaction.rollback();
|
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
|
|
ctx.status = 400;
|
|
|
|
ctx.body = {
|
|
|
|
message: typeof error == 'string' ? error : undefined
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function del (ctx) {
|
|
|
|
try {
|
|
|
|
const models = ctx.fs.dc.models;
|
|
|
|
const { bindId } = ctx.params
|
|
|
|
|
|
|
|
await models.ProjectCorrelation.update({
|
|
|
|
del: true
|
|
|
|
}, {
|
|
|
|
where: {
|
|
|
|
id: { $in: bindId.split(',') }
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
ctx.status = 204;
|
|
|
|
} catch (error) {
|
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
|
|
|
|
ctx.status = 400;
|
|
|
|
ctx.body = {
|
|
|
|
message: typeof error == 'string' ? error : undefined
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
bindAnxin2pep,
|
|
|
|
del
|
|
|
|
};
|