明树Git Lab

Commit 56ab2b08 authored by zfp1's avatar zfp1

update

parent 193df050
Pipeline #111159 passed with stage
in 4 seconds
...@@ -102,9 +102,9 @@ async function deleteDepart(req, res, next) { ...@@ -102,9 +102,9 @@ async function deleteDepart(req, res, next) {
return res.sendError(errorMessage.resourceNotFound); return res.sendError(errorMessage.resourceNotFound);
} }
//查验部门下是否有用户 //查验部门下是否有用户
let depIds = curNode.parentIds ? curNode.parentIds.split(',') : []; // let depIds = curNode.parentIds ? curNode.parentIds.split(',') : [];
depIds.push(curNode.id); // depIds.push(curNode.id);
let count = await DB.UserDepart.count({where: {departId: {[Op.in]: depIds}}}); let count = await DB.UserDepart.count({where: {parentIds: {[Op.startsWith]: curNode.parentIds + curNode.id}}});
if(count && count > 0) { if(count && count > 0) {
return res.sendError(errorMessage.departHasUser); return res.sendError(errorMessage.departHasUser);
} }
......
...@@ -277,6 +277,7 @@ async function saveProjectPreLixiang(req, res, next) { ...@@ -277,6 +277,7 @@ async function saveProjectPreLixiang(req, res, next) {
/** /**
* 发起立项 * 发起立项
* 当前1 提交2
*/ */
async function startLixiang(req, res, next) { async function startLixiang(req, res, next) {
try { try {
...@@ -284,86 +285,240 @@ async function startLixiang(req, res, next) { ...@@ -284,86 +285,240 @@ async function startLixiang(req, res, next) {
return res.sendError(errorMessage.resourceNotFound) return res.sendError(errorMessage.resourceNotFound)
} }
//记录操作 /**
* 此处需要判断当前项目是从哪一个节点回来的,依次往下
* 1. 初审退回
* 2. 核准退回
* 3. 首次提交
*/
if (req.body.projectLxjbrUser) {
//更新信息和状态
let ret = await xiangmulixianggengxin(req.body, "3"); //状态 2 -- 立项核准中
// 如果有经办人则是 初审退回,提交后直接到投管部经办人即可
await DB.Message.create({
projectId: req.body.id,
creator: req.user.id,
receivers: [req.body.projectLxjbrUser],
type: 2,
title: `项目【${req.body.projectName}】已重新提交立项初审,请尽快处理!`,
content: `项目【${req.body.projectName}】已重新提交立项初审,请尽快处理!`,
});
await DB.FlowRecord.create({ await DB.FlowRecord.create({
userId: req.user.id, userId: req.user.id,
actionName: '发起项目立项审批', actionName: '重新提交立项初审',
projectId: req.body.id, projectId: req.body.id,
projectName: req.body.projectName, projectName: req.body.projectName,
projectCode: req.body.projectCode, projectCode: req.body.projectCode,
}); });
return res.sendData();
} else if (req.body.projectHzUser) {
//更新信息和状态 //更新信息和状态
let ret = await xiangmulixianggengxin(req.body, 3); //状态 3 -- 立项审批中 let ret = await xiangmulixianggengxin(req.body, "2"); //状态 2 -- 立项核准中
// 给审批人员发消息 // 如果有部门长则是 核准退回,提交后直接到部门长即可
await DB.Message.create({
projectId: req.body.id,
creator: req.user.id,
receivers: [req.body.projectHzUser],
type: 2,
title: `项目【${req.body.projectName}】已重新提交立项核准审批,请尽快处理!`,
content: `项目【${req.body.projectName}】已重新提交立项核准审批,请尽快处理!`,
});
await DB.FlowRecord.create({ await DB.FlowRecord.create({
userId: req.user.id, userId: req.user.id,
actionName: '发起项目立项', actionName: '重新提交立项核准',
projectId: req.body.id, projectId: req.body.id,
projectName: req.body.projectName, projectName: req.body.projectName,
projectCode: req.body.projectCode, projectCode: req.body.projectCode,
}); });
let approvers = await userModule.getProjectApprover(req.user.id, 'xmlx_sp'); return res.sendData();
} else {
//更新信息和状态
let ret = await xiangmulixianggengxin(req.body, "2"); //状态 2 -- 立项核准中
// 记录流程节点操作
await DB.FlowRecord.create({
userId: req.user.id,
actionName: '发起项目立项核准',
projectId: req.body.id,
projectName: req.body.projectName,
projectCode: req.body.projectCode,
});
// 项目公司所属单位员工发起,发送消息给项目单位部门长核准
let approvers = await userModule.getCompanyProjectApprover(req.user.id);
if (!(approvers && approvers.length > 0)) { if (!(approvers && approvers.length > 0)) {
return res.sendError({ code: '60001', msg: '项目已保存,请联系管理员为本公司添加【项目立项】角色人员' }); return res.sendError({ code: '60001', msg: '项目已保存,请联系管理员为本公司添加【项目立项核准】角色人员' });
} }
await DB.Message.create({ await DB.Message.create({
projectId: req.body.id, projectId: req.body.id,
creator: req.user.id, creator: req.user.id,
receivers: approvers.map(o => o.id), receivers: approvers.map(o => o.id),
type: 2, type: 2,
title: `项目【${req.body.projectName}】已发起立项,请尽快处理!`, title: `项目【${req.body.projectName}】已发起立项核准,请尽快处理!`,
content: `项目【${req.body.projectName}】已发起立项,请尽快处理!` content: `项目【${req.body.projectName}】已发起立项核准,请尽快处理!`
}); });
return res.sendData(ret); return res.sendData(ret);
}
} catch (error) { } catch (error) {
next(error); next(error);
} }
} }
/** /**
* 主动查询立项结果、或者能建调用我方接口 * 项目公司所属单位部门长,核准项目公司员工发过来的立项审批消息,通过则发送消息给投管部经办人,不通过则改变项目状态退回到项目所属单位员工
* 当前2 通过3 不通过1
*/ */
async function queryLixiangResult(req, res, next) { async function approvalLixiangByDepartHeader(req, res, next) {
try { try {
if (!req.body.id) { let body = req.body; //有可能会部门长进行修改后提交
body.projectHzUser = req.user.id;
if (!body.id) {
return res.sendError(errorMessage.resourceNotFound) return res.sendError(errorMessage.resourceNotFound)
} }
//请求能建提供接口 let ret;
let result = { success: true }; if (body.approvalResult) {
//成功 //部门长核准通过,更新项目信息和状态--立项初审
if (result.success) { ret = await xiangmulixianggengxin(body, "3");
let proInfo = await projectModule.getProjectInfoByLixiang(req.body); // 给投管部经办人发消息
//1. 更新项目状态 let approvers = await userModule.getTouGuanJbrProjectApprover(req.user.id);
await DB.Project.update({ projectLzType: "5" }, { where: { id: req.body.id } }); if (!(approvers && approvers.length > 0)) {
//2. 存储快照 关联关系太多 全部建立快照表工程过大,暂时存储形式 return res.sendError({ code: '60001', msg: '项目已保存,请联系管理员添加【投管部经办人】角色人员' });
proInfo.projectLzType = "5"; }
// await DB.ProjectLixiang.create({ lixiang: proInfo, type: 1, projectId: proInfo.id }); await DB.Message.create({
return res.sendData(proInfo); projectId: body.id,
} else { creator: req.user.id,
return res.sendError(errorMessage.resourceNotFound); //暂时 receivers: approvers.map(o => o.id),
type: 5,
title: `项目【${body.projectName}】已通过部门长核准,请投管部经办人尽快处理!`,
content: req.body.approvalMessage || `项目【${body.projectName}】已通过部门长核准,请投管部经办人尽快处理!`
});
// 记录流程节点操作
await DB.FlowRecord.create({
userId: req.user.id,
actionName: '项目核准通过',
projectId: req.body.id,
projectName: req.body.projectName,
projectCode: req.body.projectCode,
});
}
else {
//部门长核准不通过,更新项目信息和状态--退回到草稿
ret = await xiangmulixianggengxin(body, "1");
//记录操作
await DB.FlowRecord.create({
userId: req.user.id,
actionName: '项目核准未通过',
projectId: body.id,
projectName: body.projectName,
projectCode: body.projectCode,
content: body.approvalMessage,
});
await DB.Message.create({
projectId: body.id,
creator: req.user.id,
receivers: [body.projectCreator],
type: 6,
title: `项目【${body.projectName}】未通过部门长核准,请检查后重新提交!`,
content: req.body.approvalMessage || `项目【${body.projectName}】未通过部门长核准,请检查后重新提交!`
});
}
return res.sendData(ret);
} catch (error) {
next(error);
}
}
/**
* 投管部经办人进行立项审批,不改变项目状态,如果通过则记录操作节点,并给投管部正副职发送消息
* 如果不通过,则给项目提交人发送消息
* 当前3 通过4 不通过1
*/
async function approvalLixiangByTouGuanJbr(req, res, next) {
try {
let body = req.body; //有可能会投管部经办人进行修改后提交
body.projectLxjbrUser = req.user.id;
if (!body.id) {
return res.sendError(errorMessage.resourceNotFound)
}
let ret;
if (body.approvalResult) {
//投管部经办人审批通过,更新项目信息和状态为--立项终审
ret = await xiangmulixianggengxin(body, "4");
// 给投管部正副职发消息
let approvers = await userModule.getTouGuanZfzProjectApprover(req.user.id);
if (!(approvers && approvers.length > 0)) {
return res.sendError({ code: '60001', msg: '项目已保存,请联系管理员添加【投管部正副职】角色人员' });
} }
await DB.Message.create({
projectId: body.id,
creator: req.user.id,
receivers: approvers.map(o => o.id),
type: 7,//初审通过消息
title: `项目【${body.projectName}】已通过投管部经办人审批,请您尽快处理!`,
content: req.body.approvalMessage || `项目【${body.projectName}】已通过投管部经办人审批,请您尽快处理!`
});
// 记录流程节点操作
await DB.FlowRecord.create({
userId: req.user.id,
actionName: '项目立项初审通过',
projectId: req.body.id,
projectName: req.body.projectName,
projectCode: req.body.projectCode,
content: req.body.approvalMessage,
});
}
else {
//投管部经办人审批不通过,更新项目信息和状态--直接回到项目提交人
ret = await xiangmulixianggengxin(body, "1");
// 给项目提交人发消息
await DB.Message.create({
projectId: body.id,
creator: req.user.id,
receivers: [body.projectCreator],
type: 8, // 初审不通过消息
title: `项目【${body.projectName}】未通过投管部经办人审批,请检查后重新提交!`,
content: req.body.approvalMessage || `项目【${body.projectName}】未通过投管部经办人审批,请检查后重新提交!`
});
// 记录流程节点操作
await DB.FlowRecord.create({
userId: req.user.id,
actionName: '项目立项初审未通过',
projectId: req.body.id,
projectName: req.body.projectName,
projectCode: req.body.projectCode,
content: body.approvalMessage,
});
}
return res.sendData(ret);
} catch (error) { } catch (error) {
next(error); next(error);
} }
} }
/** /**
* 立项审批 * 立项审批
* @param {*} body * 当前4 通过5 不通过3
* @param {*} projectLzType
* @returns
*/ */
async function approvalLixiang(req, res, next) { async function approvalLixiang(req, res, next) {
try { try {
let proInfo = await projectModule.getProjectInfoByLixiang(req.body); let proInfo = await projectModule.getProjectInfoByLixiang(req.body);
if (req.body.approvalResult) { if (req.body.approvalResult) {
//1. 更新项目状态--已立项 //1. 更新项目状态--已立项
await DB.Project.update({ projectLzType: "5" }, { where: { id: req.body.id } }); await DB.Project.update({ projectLzType: "5", projectLxzsUser: req.user.id }, { where: { id: req.body.id } });
//2. 存储快照 关联关系太多 全部建立快照表工程过大,暂时存储形式 //2. 存储快照 关联关系太多 全部建立快照表工程过大,暂时存储形式
proInfo.projectLzType = "5"; proInfo.projectLzType = "5";
await DB.ProjectLixiang.create({ lixiang: proInfo, type: 1, projectId: proInfo.id }); await DB.ProjectLixiang.create({ lixiang: proInfo, type: 1, projectId: proInfo.id });
await DB.Message.create({
projectId: proInfo.id,
creator: req.user.id,
receivers: [proInfo.projectLxjbrUser],
type: 9, // 立项审批通过消息
title: `项目【${proInfo.projectName}】已通过立项终审。`,
content: req.body.approvalMessage || `项目【${proInfo.projectName}】已通过立项终审。`
});
await DB.FlowRecord.create({ await DB.FlowRecord.create({
userId: req.user.id, userId: req.user.id,
actionName: '立项审批通过', actionName: '立项审批通过',
...@@ -373,8 +528,16 @@ async function approvalLixiang(req, res, next) { ...@@ -373,8 +528,16 @@ async function approvalLixiang(req, res, next) {
content: req.body.approvalMessage, content: req.body.approvalMessage,
}); });
} else { } else {
//待立项 //立项终审 未通过 则回到投管部经办人,项目状态变为立项审批中,
await DB.Project.update({ projectLzType: "1" }, { where: { id: req.body.id } }); await DB.Project.update({ projectLzType: "3", projectLxzsUser: req.user.id }, { where: { id: req.body.id } });
await DB.Message.create({
projectId: proInfo.id,
creator: req.user.id,
receivers: [proInfo.projectLxjbrUser],
type: 10, // 立项终审不通过消息
title: `项目【${proInfo.projectName}】未通过立项终审,请检查后重新提交!`,
content: req.body.approvalMessage || `项目【${proInfo.projectName}】未通过立项终审,审批意见:${req.body.approvalMessage},请检查后重新提交!`
});
await DB.FlowRecord.create({ await DB.FlowRecord.create({
userId: req.user.id, userId: req.user.id,
actionName: '立项审批未通过', actionName: '立项审批未通过',
...@@ -544,6 +707,7 @@ async function saveJuece(req, res, next) { ...@@ -544,6 +707,7 @@ async function saveJuece(req, res, next) {
if (!req.body.id) { if (!req.body.id) {
return res.sendError(errorMessage.resourceNotFound) return res.sendError(errorMessage.resourceNotFound)
} }
body.projectFqJueceUser = req.user.id;//记录一下项目决策发起人
let ret = await xiangmujuecegengxin(req.body, 7); //决策填报中 let ret = await xiangmujuecegengxin(req.body, 7); //决策填报中
return res.sendData(ret); return res.sendData(ret);
} catch (error) { } catch (error) {
...@@ -556,6 +720,7 @@ async function startJuece(req, res, next) { ...@@ -556,6 +720,7 @@ async function startJuece(req, res, next) {
if (!req.body.id) { if (!req.body.id) {
return res.sendError(errorMessage.resourceNotFound) return res.sendError(errorMessage.resourceNotFound)
} }
body.projectFqJueceUser = req.user.id;//记录一下项目决策发起人
let ret = await xiangmujuecegengxin(req.body, 8); //决策审批中 let ret = await xiangmujuecegengxin(req.body, 8); //决策审批中
// 给审批人员发消息 // 给审批人员发消息
...@@ -566,7 +731,7 @@ async function startJuece(req, res, next) { ...@@ -566,7 +731,7 @@ async function startJuece(req, res, next) {
projectName: req.body.projectName, projectName: req.body.projectName,
projectCode: req.body.projectCode, projectCode: req.body.projectCode,
}); });
let approvers = await userModule.getProjectApprover(req.user.id, 'xmjc_sp'); let approvers = await userModule.getTouGuanZfzProjectApprover(req.user.id);
if (!(approvers && approvers.length > 0)) { if (!(approvers && approvers.length > 0)) {
return res.sendError({ code: '60002', msg: '项目已保存,请联系管理员为本公司添加【项目决策】角色人员' }); return res.sendError({ code: '60002', msg: '项目已保存,请联系管理员为本公司添加【项目决策】角色人员' });
} }
...@@ -585,30 +750,6 @@ async function startJuece(req, res, next) { ...@@ -585,30 +750,6 @@ async function startJuece(req, res, next) {
} }
} }
/**
* 主动查询决策审批结果
*/
async function queryJueceResult(req, res, next) {
try {
if (!req.body.id) {
return res.sendError(errorMessage.resourceNotFound)
}
//请求能建提供接口
let result = { success: true };
//成功
if (result.success) {
//1. 更新项目状态
await DB.Project.update({ projectLzType: "9" }, { where: { id: req.body.id } }); //已经决策成功
return res.sendData();
} else {
return res.sendError(errorMessage.resourceNotFound); //暂时
}
} catch (error) {
next(error);
}
}
/** /**
* 决策审批 * 决策审批
*/ */
...@@ -617,7 +758,7 @@ async function approvalJuece(req, res, next) { ...@@ -617,7 +758,7 @@ async function approvalJuece(req, res, next) {
let proInfo = await projectModule.getProjectInfo(req.body); let proInfo = await projectModule.getProjectInfo(req.body);
if (req.body.approvalResult) { if (req.body.approvalResult) {
//1. 更新项目状态--已决策 //1. 更新项目状态--已决策
await DB.Project.update({ projectLzType: "9" }, { where: { id: req.body.id } }); await DB.Project.update({ projectLzType: "9", projectJueceSpUser: req.user.id }, { where: { id: req.body.id } });
//2. 存储快照 关联关系太多 全部建立快照表工程过大,暂时存储形式 //2. 存储快照 关联关系太多 全部建立快照表工程过大,暂时存储形式
proInfo.projectLzType = "9"; proInfo.projectLzType = "9";
await DB.ProjectLixiang.create({ juece: proInfo, type: 2, projectId: proInfo.id }); await DB.ProjectLixiang.create({ juece: proInfo, type: 2, projectId: proInfo.id });
...@@ -629,9 +770,17 @@ async function approvalJuece(req, res, next) { ...@@ -629,9 +770,17 @@ async function approvalJuece(req, res, next) {
projectCode: proInfo.projectCode, projectCode: proInfo.projectCode,
content: req.body.approvalMessage, content: req.body.approvalMessage,
}); });
await DB.Message.create({
projectId: proInfo.id,
creator: req.user.id,
receivers: [proInfo.projectLxjbrUser],
type: 11,// 决策审批通过消息
title: `项目【${proInfo.projectName}】已通过项目决策审批。`,
content: req.body.approvalMessage || `项目【${proInfo.projectName}】已通过项目决策审批。`
});
} else { } else {
//回到 已立项 //回到 已立项
await DB.Project.update({ projectLzType: "7" }, { where: { id: req.body.id } }); await DB.Project.update({ projectLzType: "7", projectJueceSpUser: req.user.id }, { where: { id: req.body.id } });
await DB.FlowRecord.create({ await DB.FlowRecord.create({
userId: req.user.id, userId: req.user.id,
actionName: '决策审批未通过', actionName: '决策审批未通过',
...@@ -640,6 +789,14 @@ async function approvalJuece(req, res, next) { ...@@ -640,6 +789,14 @@ async function approvalJuece(req, res, next) {
projectCode: proInfo.projectCode, projectCode: proInfo.projectCode,
content: req.body.approvalMessage, content: req.body.approvalMessage,
}); });
await DB.Message.create({
projectId: proInfo.id,
creator: req.user.id,
receivers: [proInfo.projectFqJueceUser || proInfo.projectLxjbrUser],
type: 12, // 决策审批未通过消息
title: `项目【${proInfo.projectName}】未通过项目决策审批,请检查后重新提交!`,
content: req.body.approvalMessage || `项目【${proInfo.projectName}】未通过项目决策审批,请检查后重新提交!`
});
} }
return res.sendData(proInfo); return res.sendData(proInfo);
} catch (error) { } catch (error) {
...@@ -1011,28 +1168,28 @@ async function listProject(req, res, next) { ...@@ -1011,28 +1168,28 @@ async function listProject(req, res, next) {
let search = {}; let search = {};
let where = { del: 0 }; let where = { del: 0 };
//处理筛选条件 //处理筛选条件
let projectLzTypes = [1]; let projectLzTypes = ["1"];
switch (req.body.menuType) { switch (req.body.menuType) {
case "xmlingxuan": case "xmlingxuan":
projectLzTypes = [1]; projectLzTypes = ["1","2"];
break; break;
case "xmlx": case "xmlx":
projectLzTypes = [3, 5]; projectLzTypes = ["3", "4", "5"];
break; break;
case "xmjc": case "xmjc":
projectLzTypes = [8, 9, 13]; projectLzTypes = ["8", "9", "13"];
break; break;
case "xmzjc": case "xmzjc":
projectLzTypes = [8, 9, 11, 12, 13]; projectLzTypes = ["8", "9", "11", "12", "13"];
break; break;
case "xmlz": case "xmlz":
projectLzTypes = [7]; projectLzTypes = ["7"];
break; break;
case "xmdak": case "xmdak":
projectLzTypes = [5, 7, 8, 9, 11, 12, 13]; projectLzTypes = ["5", "7", "8", "9", "11", "12", "13"];
break; break;
default: default:
projectLzTypes = [5, 7, 8, 9, 11, 12, 13]; projectLzTypes = ["5", "7", "8", "9", "11", "12", "13"];
break; break;
} }
if (req.body.menuType) { if (req.body.menuType) {
...@@ -1046,26 +1203,26 @@ async function listProject(req, res, next) { ...@@ -1046,26 +1203,26 @@ async function listProject(req, res, next) {
if (req.body.attributes && req.body.attributes.length) { if (req.body.attributes && req.body.attributes.length) {
search.attributes = req.body.attributes; search.attributes = req.body.attributes;
} }
if(req.body.projectName) { if (req.body.projectName) {
search.where.projectName = { [Op.like]: `%${req.body.projectName}%` }; search.where.projectName = { [Op.like]: `%${req.body.projectName}%` };
} }
if(req.body.projectCode) { if (req.body.projectCode) {
search.where.projectCode = { [Op.like]: `%${req.body.projectCode}%` }; search.where.projectCode = { [Op.like]: `%${req.body.projectCode}%` };
} }
if(req.body.glzt) { if (req.body.glzt) {
search.where.glzt = { [Op.like]: `%${req.body.glzt}%` }; search.where.glzt = { [Op.like]: `%${req.body.glzt}%` };
} }
if(req.body.zsqy) { if (req.body.zsqy) {
search.where.zsqy = { [Op.like]: `%${req.body.zsqy}%` }; search.where.zsqy = { [Op.like]: `%${req.body.zsqy}%` };
} }
if(req.body.xmjd) { if (req.body.xmjd) {
search.where.xmjd =req.body.xmjd; search.where.xmjd = req.body.xmjd;
} }
if(req.body.xmqy) { if (req.body.xmqy) {
search.where.xmqy = req.body.xmqy ; search.where.xmqy = req.body.xmqy;
} }
if(req.body.projectId) { if (req.body.projectId) {
search.where.id = req.body.projectId ; search.where.id = req.body.projectId;
} }
console.log(search) console.log(search)
search.raw = true search.raw = true
...@@ -1231,7 +1388,8 @@ async function saveZaiJuece(req, res, next) { ...@@ -1231,7 +1388,8 @@ async function saveZaiJuece(req, res, next) {
if (!req.body.id) { if (!req.body.id) {
return res.sendError(errorMessage.resourceNotFound) return res.sendError(errorMessage.resourceNotFound)
} }
let ret = await xiangmujuecegengxin(req.body, 11); //再决策填报中 req.body.projectFqZaiJueceUser = req.user.id; //发起人
let ret = await xiangmujuecegengxin(req.body, "11"); //再决策填报中
return res.sendData(ret); return res.sendData(ret);
} catch (error) { } catch (error) {
next(error); next(error);
...@@ -1243,7 +1401,8 @@ async function startZaiJuece(req, res, next) { ...@@ -1243,7 +1401,8 @@ async function startZaiJuece(req, res, next) {
if (!req.body.id) { if (!req.body.id) {
return res.sendError(errorMessage.resourceNotFound) return res.sendError(errorMessage.resourceNotFound)
} }
let ret = await xiangmujuecegengxin(req.body, 12); //再决策审批中 req.body.projectFqZaiJueceUser = req.user.id; //发起人
let ret = await xiangmujuecegengxin(req.body, "12"); //再决策审批中
// 给审批人员发消息 // 给审批人员发消息
await DB.FlowRecord.create({ await DB.FlowRecord.create({
...@@ -1253,7 +1412,7 @@ async function startZaiJuece(req, res, next) { ...@@ -1253,7 +1412,7 @@ async function startZaiJuece(req, res, next) {
projectName: req.body.projectName, projectName: req.body.projectName,
projectCode: req.body.projectCode, projectCode: req.body.projectCode,
}); });
let approvers = await userModule.getProjectApprover(req.user.id, 'xmjc_sp'); let approvers = await userModule.getTouGuanZfzProjectApprover(req.user.id);
if (!(approvers && approvers.length > 0)) { if (!(approvers && approvers.length > 0)) {
return res.sendError({ code: '60002', msg: '项目已保存,请联系管理员为本公司添加【项目再决策】角色人员' }); return res.sendError({ code: '60002', msg: '项目已保存,请联系管理员为本公司添加【项目再决策】角色人员' });
} }
...@@ -1277,7 +1436,7 @@ async function approvalZaiJuece(req, res, next) { ...@@ -1277,7 +1436,7 @@ async function approvalZaiJuece(req, res, next) {
let proInfo = await projectModule.getProjectInfo(req.body); let proInfo = await projectModule.getProjectInfo(req.body);
if (req.body.approvalResult) { if (req.body.approvalResult) {
//1. 更新项目状态--已决策 //1. 更新项目状态--已决策
await DB.Project.update({ projectLzType: 13 }, { where: { id: req.body.id } }); await DB.Project.update({ projectLzType: "13" }, { where: { id: req.body.id } });
//2. 存储快照 关联关系太多 全部建立快照表工程过大,暂时存储形式 //2. 存储快照 关联关系太多 全部建立快照表工程过大,暂时存储形式
proInfo.projectLzType = "13"; proInfo.projectLzType = "13";
await DB.ProjectLixiang.create({ zaijuece: proInfo, type: 3, projectId: proInfo.id }); await DB.ProjectLixiang.create({ zaijuece: proInfo, type: 3, projectId: proInfo.id });
...@@ -1289,10 +1448,18 @@ async function approvalZaiJuece(req, res, next) { ...@@ -1289,10 +1448,18 @@ async function approvalZaiJuece(req, res, next) {
projectCode: proInfo.projectCode, projectCode: proInfo.projectCode,
content: req.body.approvalMessage, content: req.body.approvalMessage,
}); });
await DB.Message.create({
projectId: proInfo.id,
creator: req.user.id,
receivers: [proInfo.projectFqZaiJueceUser || proInfo.projectFqJueceUser || proInfo.projectLxjbrUser], //大概率是同一个人
type: 13, // 决策审批通过消息
title: `项目【${proInfo.projectName}】已通过项目再决策审批!`,
content: req.body.approvalMessage || `项目【${proInfo.projectName}】已通过项目再决策审批!`
});
} else { } else {
//TODO:不确定 //TODO:不确定
// //回到 已立项 // //回到 已立项
await DB.Project.update({ projectLzType: 9 }, { where: { id: req.body.id } }); await DB.Project.update({ projectLzType: "9" }, { where: { id: req.body.id } });
await DB.FlowRecord.create({ await DB.FlowRecord.create({
userId: req.user.id, userId: req.user.id,
actionName: '再决策审批未通过', actionName: '再决策审批未通过',
...@@ -1301,6 +1468,15 @@ async function approvalZaiJuece(req, res, next) { ...@@ -1301,6 +1468,15 @@ async function approvalZaiJuece(req, res, next) {
projectCode: proInfo.projectCode, projectCode: proInfo.projectCode,
content: req.body.approvalMessage, content: req.body.approvalMessage,
}); });
await DB.Message.create({
projectId: proInfo.id,
creator: req.user.id,
receivers: [proInfo.projectFqZaiJueceUser || proInfo.projectFqJueceUser || proInfo.projectLxjbrUser],
type: 14, // 决策审批未通过消息
title: `项目【${proInfo.projectName}】未通过项目再决策审批,请检查后重新提交!`,
content: req.body.approvalMessage || `项目【${proInfo.projectName}】未通过项目再决策审批,请检查后重新提交!`
});
} }
return res.sendData(proInfo); return res.sendData(proInfo);
} catch (error) { } catch (error) {
...@@ -1320,11 +1496,11 @@ module.exports = { ...@@ -1320,11 +1496,11 @@ module.exports = {
finalJugProject, finalJugProject,
getOwnProjects, getOwnProjects,
startLixiang, startLixiang,
approvalLixiangByDepartHeader,
approvalLixiangByTouGuanJbr,
saveJuece, saveJuece,
startJuece, startJuece,
saveProjectPreLixiang, saveProjectPreLixiang,
queryLixiangResult,
queryJueceResult,
getProjectCwpj, getProjectCwpj,
approvalLixiang, approvalLixiang,
approvalJuece, approvalJuece,
......
...@@ -25,7 +25,7 @@ const Project = sequelize.define('Project', { ...@@ -25,7 +25,7 @@ const Project = sequelize.define('Project', {
}, },
projectLzType: { projectLzType: {
type: DataTypes.STRING(10), type: DataTypes.STRING(10),
comment: "项目流转状态: 1待立项 3立项审批中 5 已立项 7决策填报中 8 决策审批中 9 已决策 ( 待定 11 再决策填报中 12 再决策审批中 13 再决策审批通过 15再决策审批不通过)", comment: "项目流转状态: 1待立项 2.立项核准中 3立项初审 4.立项终审 5 已立项 7决策填报中 8 决策审批中 9 已决策 ( 待定 11 再决策填报中 12 再决策审批中 13 再决策审批通过 15再决策审批不通过)",
}, },
xmjd: { xmjd: {
type: DataTypes.STRING(10), type: DataTypes.STRING(10),
...@@ -36,7 +36,34 @@ const Project = sequelize.define('Project', { ...@@ -36,7 +36,34 @@ const Project = sequelize.define('Project', {
defaultValue: 0, defaultValue: 0,
comment1: "0 正常 1 删除", comment1: "0 正常 1 删除",
}, },
projectHzUser: {
type: DataTypes.INTEGER,
comment: "项目核准人ID",
},
projectLxjbrUser: {
type: DataTypes.INTEGER,
comment: "项目立项经办人ID",
},
projectLxzsUser: {
type: DataTypes.INTEGER,
comment: "项目立项终审人ID",
},
projectFqJueceUser: {
type: DataTypes.INTEGER,
comment: "项目决策发起人ID",
},
projectJueceSpUser: {
type: DataTypes.INTEGER,
comment: "项目决策审批人ID",
},
projectFqZaiJueceUser: {
type: DataTypes.INTEGER,
comment: "项目再决策发起人ID",
},
projectZaiJueceSpUser: {
type: DataTypes.INTEGER,
comment: "项目再决策审批人ID",
},
/** /**
* 立项字段 * 立项字段
*/ */
......
...@@ -18,7 +18,7 @@ const projectBjtj = sequelize.define('projectBjtj', { ...@@ -18,7 +18,7 @@ const projectBjtj = sequelize.define('projectBjtj', {
comment: "单位工程造价数值" comment: "单位工程造价数值"
}, },
dwgczjDw: { dwgczjDw: {
type: DataTypes.INTEGER, type: DataTypes.STRING(10),
comment: "单位工程造价单位" comment: "单位工程造价单位"
}, },
xsfwnlSz: { xsfwnlSz: {
......
...@@ -17,6 +17,11 @@ const Depart = sequelize.define('Depart', { ...@@ -17,6 +17,11 @@ const Depart = sequelize.define('Depart', {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
}, },
type: {
type: DataTypes.INTEGER,
defaultValue: 0,
comment: "0 集团及内部部门 1 项目公司及内部部门"
},
parentIds: { parentIds: {
type: DataTypes.STRING(500), type: DataTypes.STRING(500),
}, },
......
...@@ -37,7 +37,12 @@ const Message = sequelize.define('Message', { ...@@ -37,7 +37,12 @@ const Message = sequelize.define('Message', {
type: { type: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: true, allowNull: true,
comment: "消息类型 1 系统消息 2 项目立项审批 3.项目决策审批 4. 项目再决策审批" comment: `消息类型 1 系统消息
2 项目公司所属员工发起立项
5. 项目所属单位部门长核准通过 6.项目所属单位部门长核准不通过
7. 投管部经办人初审通过 8. 投管部经办人初审不通过
9. 投管部正副职复审通过 10. 投管部正副职复审不通过
3.发起项目决策审批 11.决策审批通过 12 决策审批未通过 4. 项目再决策审批 13.再决策审批通过 14.再决策审批未通过`
}, },
/** /**
* 其他待存字段 * 其他待存字段
......
...@@ -131,20 +131,46 @@ async function setRoleMenu(roleId, menuIds, rolemenus) { ...@@ -131,20 +131,46 @@ async function setRoleMenu(roleId, menuIds, rolemenus) {
} }
async function getProjectApprover(userId, roleCode) { async function getCompanyProjectApprover(userId, roleCode) {
// 获取当前用户公司的 具体角色 的用户列表 roleCode = roleCode || "xmssdwbmz"; //暂时
// let role = await DB.Role.findOne({where: {key: roleCode}, raw: true}); // 获取投管部正副职tgbzfz的用户列表
// if(!(role && role.id)) { let role = await DB.Role.findOne({where: {key: roleCode}, raw: true});
// return []; if(!(role && role.id)) {
// } return [];
// let userIds = await DB.UserRole.findAll({where: {roleId: role.id}, raw: true}); }
// userIds = (userIds || []).map(o => {return o.userId}); let userIds = await DB.UserRole.findAll({where: {roleId: role.id}, raw: true});
userIds = (userIds || []).map(o => {return o.userId});
// let users = await DB.User.findAll({ where: { id: {[Op.in]: userIds} } }); let users = await DB.User.findAll({ where: { id: {[Op.in]: userIds} } });
// return users; return users;
let user = await DB.User.findOne({ where: { id: userId } }); }
async function getTouGuanJbrProjectApprover(userId, roleCode) {
roleCode = roleCode || "tgbjbr";
// 获取投管部正副职tgbzfz的用户列表
let role = await DB.Role.findOne({where: {key: roleCode}, raw: true});
if(!(role && role.id)) {
return [];
}
let userIds = await DB.UserRole.findAll({where: {roleId: role.id}, raw: true});
userIds = (userIds || []).map(o => {return o.userId});
let users = await DB.User.findAll({ where: { id: {[Op.in]: userIds} } });
return users;
}
async function getTouGuanZfzProjectApprover(userId, roleCode) {
roleCode = roleCode || "tgbzfz";
// 获取投管部正副职tgbzfz的用户列表
let role = await DB.Role.findOne({where: {key: roleCode}, raw: true});
if(!(role && role.id)) {
return [];
}
let userIds = await DB.UserRole.findAll({where: {roleId: role.id}, raw: true});
userIds = (userIds || []).map(o => {return o.userId});
return [user]; let users = await DB.User.findAll({ where: { id: {[Op.in]: userIds} } });
return users;
} }
module.exports = { module.exports = {
...@@ -152,5 +178,7 @@ module.exports = { ...@@ -152,5 +178,7 @@ module.exports = {
setUserDepart, setUserDepart,
setUserPosition, setUserPosition,
setRoleMenu, setRoleMenu,
getProjectApprover, getCompanyProjectApprover,
getTouGuanJbrProjectApprover,
getTouGuanZfzProjectApprover,
} }
\ No newline at end of file
...@@ -21,15 +21,14 @@ router.post('/saveProjectPreLixiang', projectController.saveProjectPreLixiang); ...@@ -21,15 +21,14 @@ router.post('/saveProjectPreLixiang', projectController.saveProjectPreLixiang);
router.post('/startLixiang', projectController.startLixiang);//发起立项审批----TODO:待完成与能建对接 router.post('/startLixiang', projectController.startLixiang);//发起立项审批----TODO:待完成与能建对接
router.post('/queryLixiangResult', projectController.queryLixiangResult); router.post('/approvalLixiang', projectController.approvalLixiangByDepartHeader); //部门长核准立项审批
router.post('/approvalLixiang', projectController.approvalLixiangByTouGuanJbr);//投管部经办人审批立项审批
router.post('/approvalLixiang', projectController.approvalLixiang); router.post('/approvalLixiang', projectController.approvalLixiang);//立项审批---投管部正副职审批
// -----------------------接收能建立项结果信息,更新立项批复信息等字段------------------------------------------ // -----------------------接收能建立项结果信息,更新立项批复信息等字段------------------------------------------
router.post('/saveJuece', projectController.saveJuece); //决策保存 router.post('/saveJuece', projectController.saveJuece); //决策保存
router.post('/startJuece', projectController.startJuece); //发起决策 router.post('/startJuece', projectController.startJuece); //发起决策
router.post('/queryJueceResult', projectController.queryJueceResult); //查询决策审批结果
router.post('/approvalJuece', projectController.approvalJuece); router.post('/approvalJuece', projectController.approvalJuece);
// 财务评价 // 财务评价
...@@ -104,7 +103,7 @@ router.post('/getZdsxspInfo', projectTzController.getZdsxspInfo); ...@@ -104,7 +103,7 @@ router.post('/getZdsxspInfo', projectTzController.getZdsxspInfo);
router.post('/saveZaiJuece', projectController.saveZaiJuece); //决策保存 router.post('/saveZaiJuece', projectController.saveZaiJuece); //决策保存
router.post('/startZaiJuece', projectController.startZaiJuece); //发起决策 router.post('/startZaiJuece', projectController.startZaiJuece); //发起决策
router.post('/approvalZaiJuece', projectController.approvalZaiJuece); router.post('/approvalZaiJuece', projectController.approvalZaiJuece);
// router.post('/queryJueceResult', projectController.queryJueceResult); //查询决策审批结果
//2.8 项目退出 *** //2.8 项目退出 ***
router.post('/createXmtc', projectTzController.createXmtc); router.post('/createXmtc', projectTzController.createXmtc);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment