明树Git Lab

Commit 54333293 authored by zfp1's avatar zfp1

update

parent 88489a75
......@@ -62,19 +62,22 @@ async function createProject(req, res, next) {
projectXmtzzes :关联项目投资额表
projectBjtjs :关联项目核心边界条件表
projectSpyjs :关联审批意见表
projectFxgl: 关联 风险管理
projectTzzt: 关联 投资主体审核
ProjectJczt: 关联 决策主体审核
projectZqrz: 关联 债权融资
projectCwpjzb: 关联 财务评价指标
ProjectLcbjd: 关联 里程碑节点
projectFxgls: 关联 风险管理
projectTzzts: 关联 投资主体审核
ProjectJczts: 关联 决策主体审核
// projectZqrzs: 关联 债权融资
projectCwpjzbs: 关联 财务评价指标
ProjectLcbjds: 关联 里程碑节点
lxzl :关联projectFiles-File文件表
lxpfwj :关联projectFiles-File文件表
xgshcl :关联projectFiles-File文件表
*/
// 1. 先创建项目
let projectInfo = _.omit(body, ['projectJsgms', 'projectGdxxs', 'projectXmtzzes', 'projectBjtjs', 'projectSpyjs', 'lxzl', 'lxpfwj', 'xgshcl']);
let projectInfo = _.omit(body, ['projectJsgms', 'projectGdxxs', 'projectXmtzzes', 'projectBjtjs',
'projectSpyjs', 'projectFxgls', 'projectTzzts', 'projectJczts', 'projectZqrzs', 'projectCwpjzbs', 'projectLcbjds',
'lxzl', 'lxpfwj', 'xgshcl']);
projectInfo.projectLiuZhuanType = 1; // 草稿状态
let project = await DB.Project.create(projectInfo);
// 处理 projectJsgms
let projectJsgms = body.projectJsgms || [];
......@@ -104,10 +107,10 @@ async function createProject(req, res, next) {
let projectJczts = body.projectJczts || [];
projectJczts = projectJczts.map(o => { o.projectId = project.id; return o });
await DB.ProjectJczt.bulkCreate(projectJczts);
// 处理 projectZqrz
let projectZqrzs = body.projectZqrzs || [];
projectZqrzs = projectZqrzs.map(o => { o.projectId = project.id; return o });
await DB.ProjectZqrz.bulkCreate(projectZqrzs);
// // 处理 projectZqrz
// let projectZqrzs = body.projectZqrzs || [];
// projectZqrzs = projectZqrzs.map(o => { o.projectId = project.id; return o });
// await DB.ProjectZqrz.bulkCreate(projectZqrzs);
// 处理 projectSpyjs
let projectSpyjs = body.projectSpyjs || [];
projectSpyjs = projectSpyjs.map(o => { o.projectId = project.id; return o });
......@@ -145,15 +148,15 @@ async function createProject(req, res, next) {
*/
//B. 找到本公司审批人员发送消息-- 如果找不到人 则提示项目已保存,联系管理员添加【项目公司项目审批人】角色
//A. 创建发起记录
if(buttonType === 'submit') {
if (buttonType === 'submit') {
await DB.FlowRecord.create({
userId: req.user.id,
actionName: '发起项目复核',
actionName: '发起项目初审',
projectId: project.id,
});
let approvers = await userModule.getProjectApprover(req.user.id, 'xmgs_xmspr');
if (!( approvers && approvers.length > 0 )) {
return res.sendError('项目已保存,请联系管理员为本公司添加【项目公司项目审批人】角色人员');
if (!(approvers && approvers.length > 0)) {
return res.sendError('项目已保存,请联系管理员为本公司添加【项目初审】角色人员');
}
await DB.Message.createProjectMessage({
projectId: project.id,
......@@ -162,6 +165,7 @@ async function createProject(req, res, next) {
type: 2,
content: `项目【${project.name}】已发起,请尽快处理!`
});
await DB.Project.update({ projectLiuZhuanType: 3 }, { where: { id: project.id } });
}
return res.sendData(project);
} catch (error) {
......@@ -183,84 +187,74 @@ async function updateProject(req, res, next) {
if (!body.id) {
return res.sendError(errorMessage.resourceNotFound)
}
/*
1.处理特殊字段:
projectJsgms :关联建设规模表
projectGdxxs : 关联股东信息表
projectXmtzzes :关联项目投资额表
projectBjtjs :关联项目核心边界条件表
projectSpyjs :关联审批意见表
lxzl :关联projectFiles-File文件表
lxpfwj :关联projectFiles-File文件表
xgshcl :关联projectFiles-File文件表
*/
// 1. 先创建项目
// 1. 处理项目
let project = body;
let projectInfo = _.omit(body, ['projectJsgms', 'projectGdxxs', 'projectXmtzzes', 'projectBjtjs', 'projectSpyjs', 'lxzl', 'lxpfwj', 'xgshcl']);
let projectInfo = _.omit(body, ['projectJsgms', 'projectGdxxs', 'projectXmtzzes', 'projectBjtjs',
'projectSpyjs', 'projectFxgls', 'projectTzzts', 'projectJczts', 'projectZqrzs', 'projectCwpjzbs', 'projectLcbjds',
'lxzl', 'lxpfwj', 'xgshcl']);
// 处理 projectJsgms
let projectJsgms = body.projectJsgms || [];
let pnids1 = [], newprojectJsgms = [];
projectJsgms.map(o => { if(!o.id) {o.projectId = project.id; newprojectJsgms.push(o);} else{pnids1.push(o.id)} return o });
projectJsgms.map(o => { if (!o.id) { o.projectId = project.id; newprojectJsgms.push(o); } else { pnids1.push(o.id) } return o });
await DB.ProjectJsgm.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids1 } } });
await DB.ProjectJsgm.bulkCreate(newprojectJsgms);
// 处理 projectGdxxs
let projectGdxxs = body.projectGdxxs || [];
let pnids2 = [], newprojectGdxxs = [];
projectGdxxs.map(o => { if(!o.id) {o.projectId = project.id; newprojectGdxxs.push(o);} else{pnids2.push(o.id)} return o });
projectGdxxs.map(o => { if (!o.id) { o.projectId = project.id; newprojectGdxxs.push(o); } else { pnids2.push(o.id) } return o });
await DB.ProjectGdxx.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids2 } } });
await DB.ProjectGdxx.bulkCreate(newprojectGdxxs);
// 处理 projectXmtzzes
let projectXmtzzes = body.projectXmtzzes || [];
let pnids3 = [], newprojectXmtzzes = [];
projectXmtzzes.map(o => { if(!o.id) {o.projectId = project.id; newprojectXmtzzes.push(o);} else{pnids3.push(o.id)} return o });
projectXmtzzes.map(o => { if (!o.id) { o.projectId = project.id; newprojectXmtzzes.push(o); } else { pnids3.push(o.id) } return o });
await DB.ProjectXmtzze.bulkCreate(newprojectXmtzzes);
// 处理 projectBjtjs
let projectBjtjs = body.projectBjtjs || [];
let pnids4 = [], newprojectBjtjs = [];
projectBjtjs.map(o => { if(!o.id) {o.projectId = project.id; newprojectBjtjs.push(o);} else{pnids4.push(o.id)} return o });
projectBjtjs.map(o => { if (!o.id) { o.projectId = project.id; newprojectBjtjs.push(o); } else { pnids4.push(o.id) } return o });
await DB.ProjectBjtj.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids4 } } });
await DB.ProjectBjtj.bulkCreate(newprojectBjtjs);
// 处理 projectFxgl
let projectFxgls = body.projectFxgls || [];
let pnids5 = [], newprojectFxgls = [];
projectFxgls.map(o => { if(!o.id) {o.projectId = project.id; newprojectFxgls.push(o);} else{pnids5.push(o.id)} return o });
projectFxgls.map(o => { if (!o.id) { o.projectId = project.id; newprojectFxgls.push(o); } else { pnids5.push(o.id) } return o });
await DB.ProjectFxgl.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids5 } } });
await DB.ProjectFxgl.bulkCreate(newprojectFxgls);
// 处理 ProjectTzzt
let projectTzzts = body.projectTzzts || [];
let pnids6 = [], newprojectTzzts = [];
projectTzzts.map(o => { if(!o.id) {o.projectId = project.id; newprojectTzzts.push(o);} else{pnids6.push(o.id)} return o });
projectTzzts.map(o => { if (!o.id) { o.projectId = project.id; newprojectTzzts.push(o); } else { pnids6.push(o.id) } return o });
await DB.ProjectTzzt.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids6 } } });
await DB.ProjectTzzt.bulkCreate(newprojectTzzts);
// 处理 ProjectJczt
let projectJczts = body.projectJczts || [];
let pnids7 = [], newprojectJczts = [];
projectJczts.map(o => { if(!o.id) {o.projectId = project.id; newprojectJczts.push(o);} else{pnids7.push(o.id)} return o });
projectJczts.map(o => { if (!o.id) { o.projectId = project.id; newprojectJczts.push(o); } else { pnids7.push(o.id) } return o });
await DB.ProjectJczt.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids7 } } });
await DB.ProjectJczt.bulkCreate(newprojectJczts);
// 处理 projectZqrz
let projectZqrzs = body.projectZqrzs || [];
let pnids8 = [], newprojectZqrzs = [];
projectZqrzs.map(o => { if(!o.id) {o.projectId = project.id; newprojectZqrzs.push(o);} else{pnids8.push(o.id)} return o });
await DB.ProjectZqrz.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids8 } } });
await DB.ProjectZqrz.bulkCreate(newprojectZqrzs);
// // 处理 projectZqrz
// let projectZqrzs = body.projectZqrzs || [];
// let pnids8 = [], newprojectZqrzs = [];
// projectZqrzs.map(o => { if (!o.id) { o.projectId = project.id; newprojectZqrzs.push(o); } else { pnids8.push(o.id) } return o });
// await DB.ProjectZqrz.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids8 } } });
// await DB.ProjectZqrz.bulkCreate(newprojectZqrzs);
// 处理 projectSpyjs
let projectSpyjs = body.projectSpyjs || [];
let pnids9 = [], newprojectSpyjs = [];
projectSpyjs.map(o => { if(!o.id) {o.projectId = project.id; newprojectSpyjs.push(o);} else{pnids9.push(o.id)} return o });
projectSpyjs.map(o => { if (!o.id) { o.projectId = project.id; newprojectSpyjs.push(o); } else { pnids9.push(o.id) } return o });
await DB.ProjectSpyj.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids9 } } });
await DB.ProjectSpyj.bulkCreate(newprojectSpyjs);
// 处理 projectCwpjzb
let projectCwpjzbs = body.projectCwpjzbs || [];
let pnids10 = [], newprojectCwpjzbs = [];
projectCwpjzbs.map(o => { if(!o.id) {o.projectId = project.id; newprojectCwpjzbs.push(o);} else{pnids10.push(o.id)} return o });
projectCwpjzbs.map(o => { if (!o.id) { o.projectId = project.id; newprojectCwpjzbs.push(o); } else { pnids10.push(o.id) } return o });
await DB.ProjectCwpjzb.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids10 } } });
await DB.ProjectCwpjzb.bulkCreate(newprojectCwpjzbs);
// 处理 ProjectLcbjd
let projectLcbjds = body.projectLcbjds || [];
let pnids11 = [], newprojectLcbjds = [];
projectLcbjds.map(o => { if(!o.id) {o.projectId = project.id; newprojectLcbjds.push(o);} else{pnids11.push(o.id)} return o });
projectLcbjds.map(o => { if (!o.id) { o.projectId = project.id; newprojectLcbjds.push(o); } else { pnids11.push(o.id) } return o });
await DB.ProjectLcbjd.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids11 } } });
await DB.ProjectLcbjd.bulkCreate(newprojectLcbjds);
// 处理 projectTzzjll-----
......@@ -269,13 +263,13 @@ async function updateProject(req, res, next) {
// 立项资料
let lxzl = body.lxzl || [];
let needIds = []; let createIds = [];
lxzl.map(o => { if (!o.proFieldKey) { createIds.push({id: o.id, proFieldKey: 'lxzl'}) } else { needIds.push(o.id) }; return { fileId: o.id, projectId: project.id, proFieldKey: 'lxzl' } });
lxzl.map(o => { if (!o.proFieldKey) { createIds.push({ id: o.id, proFieldKey: 'lxzl' }) } else { needIds.push(o.id) }; return { fileId: o.id, projectId: project.id, proFieldKey: 'lxzl' } });
// 立项批复文件
let lxpfwj = body.lxpfwj || [];
lxpfwj.map(o => { if (!o.proFieldKey) { createIds.push({id: o.id, proFieldKey: 'lxpfwj'}) } else { needIds.push(o.id) }; return { fileId: o.id, projectId: project.id, proFieldKey: 'lxpfwj' } });
lxpfwj.map(o => { if (!o.proFieldKey) { createIds.push({ id: o.id, proFieldKey: 'lxpfwj' }) } else { needIds.push(o.id) }; return { fileId: o.id, projectId: project.id, proFieldKey: 'lxpfwj' } });
// 相关上会材料
let xgshcl = body.xgshcl || [];
xgshcl.map(o => { if (!o.proFieldKey) { createIds.push({id: o.id, proFieldKey: 'xgshcl'}) } else { needIds.push(o.id) }; return { fileId: o.id, projectId: project.id, proFieldKey: 'xgshcl' } });
xgshcl.map(o => { if (!o.proFieldKey) { createIds.push({ id: o.id, proFieldKey: 'xgshcl' }) } else { needIds.push(o.id) }; return { fileId: o.id, projectId: project.id, proFieldKey: 'xgshcl' } });
// 处理文件
//1. 删除
await DB.ProjectFile.destroy({
......@@ -285,14 +279,33 @@ async function updateProject(req, res, next) {
}
});
//2. 创建
if(createIds.length) {
let creProFiles = createIds.map(o=> {return {projectId: project.id, fileId: o.id, proFieldKey: o.proFieldKey}});
if (createIds.length) {
let creProFiles = createIds.map(o => { return { projectId: project.id, fileId: o.id, proFieldKey: o.proFieldKey } });
await DB.ProjectFile.bulkCreate(creProFiles);
}
const ret = await DB.Project.update(projectInfo, { where: { id: body.id } });
/**
* 根据前端加入的参数区分按钮 更新草稿并提交 更新草稿 TODO:
*/
if (buttonType === 'submit') {
await DB.FlowRecord.create({
userId: req.user.id,
actionName: '发起项目初审',
projectId: project.id,
});
let approvers = await userModule.getProjectApprover(req.user.id, 'xmgs_xmspr');
if (!(approvers && approvers.length > 0)) {
return res.sendError('项目已保存,请联系管理员为本公司添加【项目初审】角色人员');
}
await DB.Message.createProjectMessage({
projectId: project.id,
creator: req.user.id,
receivers: approvers.map(o => o.id),
type: 2,
content: `项目【${project.name}】已发起,请尽快处理!`
});
projectInfo.projectLiuZhuanType = 3; // 待初审
}
const ret = await DB.Project.update(projectInfo, { where: { id: body.id } });
return res.sendData(ret);
} catch (error) {
......@@ -301,9 +314,16 @@ async function updateProject(req, res, next) {
}
async function reviewProject(req, res, next) {
/**
* 初审
* @param {*} req
* @param {*} res
* @param {*} next
* @returns
*/
async function preJugProject(req, res, next) {
try {
let {id} = req.body;
let { id } = req.body;
if (!id) {
return res.sendError(errorMessage.resourceNotFound)
}
......@@ -312,12 +332,43 @@ async function reviewProject(req, res, next) {
return res.sendError(errorMessage.resourceNotFound)
}
/**
* 1. 更新项目状态 3 复核通过 复核不通过则回到状态1
* 1. 更新项目状态 5 初审通过 初审不通过则回到状态1
*/
if(buttonType === 'approve') {
await DB.Project.update({ status: 3 }, { where: { id } });
if (buttonType === 'approve') {
await DB.Project.update({ projectLiuZhuanType: 3 }, { where: { id } });
} else {
await DB.Project.update({ status: 1 }, { where: { id } });
await DB.Project.update({ projectLiuZhuanType: 1 }, { where: { id } });
}
return res.sendData();
} catch (error) {
next(error)
}
}
/**
* 终审
* @param {*} req
* @param {*} res
* @param {*} next
* @returns
*/
async function finalJugProject(req, res, next) {
try {
let { id } = req.body;
if (!id) {
return res.sendError(errorMessage.resourceNotFound)
}
let project = await DB.Project.findOne({ where: { id } });
if (!project) {
return res.sendError(errorMessage.resourceNotFound)
}
/**
* 1. 更新项目状态 5 终审通过 初审不通过则回到状态1
*/
if (buttonType === 'approve') {
await DB.Project.update({ projectLiuZhuanType: 7 }, { where: { id } });
} else {
await DB.Project.update({ projectLiuZhuanType: 1 }, { where: { id } });
}
return res.sendData();
......@@ -336,8 +387,20 @@ async function getProjectInfo(req, res, next) {
// raw: true,
include: [
{
model: DB.ProjectJsgm,
as: 'projectJsgms',
model: DB.ProjectBjtj,
as: 'projectBjtjs',
// where: { del: 0 },
// attributes: [],
},
{
model: DB.ProjectCwpjzb,
as: 'projectCwpjzbs',
// where: { del: 0 },
// attributes: [],
},
{
model: DB.ProjectFxgl,
as: 'projectFxgls',
// where: { del: 0 },
// attributes: [],
},
......@@ -348,23 +411,45 @@ async function getProjectInfo(req, res, next) {
// attributes: [],
},
{
model: DB.ProjectXmtzze,
as: 'projectXmtzzes',
model: DB.ProjectJczt,
as: 'projectJczts',
// where: { del: 0 },
// attributes: [],
},
{
model: DB.ProjectBjtj,
as: 'projectBjtjs',
model: DB.ProjectJsgm,
as: 'projectJsgms',
// where: { del: 0 },
// attributes: [],
},
{
model: DB.ProjectLcbjd,
as: 'projectLcbjds',
},
{
model: DB.ProjectSpyj,
as: 'projectSpyjs',
// where: { del: 0 },
// attributes: [],
},
{
model: DB.ProjectTzzjll,
as: 'projectTzzjlls',
// where: { del: 0 },
// attributes: [],
},
{
model: DB.ProjectTzzt,
as: 'projectTzzts',
// where: { del: 0 },
// attributes: [],
},
{
model: DB.ProjectXmtzze,
as: 'projectXmtzzes',
// where: { del: 0 },
// attributes: [],
},
{
model: DB.File,
as: 'files',
......@@ -521,4 +606,6 @@ module.exports = {
updateProject,
exportExcel,
getExcelTemplate,
preJugProject,
finalJugProject,
}
\ No newline at end of file
......@@ -16,10 +16,17 @@ const Project = require("./model/jt/project");
const Resources = require("./model/jt/resources");
const ResourcesInfo = require("./model/jt/resourcesInfo");
const ProjectBjtj = require("./model/jt/projectBjtj");
const ProjectCwpjzb = require("./model/jt/projectCwpjzb");
const ProjectFile = require("./model/jt/projectFile");
const ProjectFxgl = require("./model/jt/projectFxgl");
const ProjectGdxx = require("./model/jt/projectGdxx");
const ProjectJczt = require("./model/jt/projectJczt");
const ProjectJsgm = require("./model/jt/projectJsgm");
const ProjectLcbjd = require("./model/jt/projectLcbjd");
const ProjectSpyj = require("./model/jt/projectSpyj");
const ProjectTzzjll = require("./model/jt/projectTzzjll");
const ProjectTzzt = require("./model/jt/projectTzzt");
const ProjectXmtzze = require("./model/jt/projectXmtzze");
/**
......@@ -47,6 +54,13 @@ global.DB = {
ProjectGdxx,
ProjectJsgm,
ProjectSpyj,
ProjectCwpjzb,
ProjectJczt,
ProjectFxgl,
ProjectLcbjd,
ProjectTzzjll,
ProjectTzzt,
ProjectXmtzze,
}
......@@ -127,15 +141,36 @@ ResourcesInfo.belongsTo(Resources, { foreignKey: 'resourceId' });
/**项目-核心边界条件 1:n */
Project.hasMany(ProjectBjtj, { foreignKey: 'projectId', as: 'projectBjtjs' });
ProjectBjtj.belongsTo(Project, { foreignKey: 'projectId' });
/**项目-财务评价指标 1:n */
Project.hasMany(ProjectCwpjzb, { foreignKey: 'projectId', as: 'projectCwpjzbs' });
ProjectCwpjzb.belongsTo(Project, { foreignKey: 'projectId' });
/**项目-项目附件 1:n */
Project.belongsToMany(File, { through: 'jt_project_file', foreignKey: 'projectId', as: 'files', otherKey: 'fileId' });
File.belongsToMany(Project, { through: 'jt_project_file', foreignKey: 'fileId', otherKey: 'projectId', as: 'pros' });
/**项目-风险管理 1:n */
Project.hasMany(ProjectFxgl, { foreignKey: 'projectId', as: 'projectFxgls' });
ProjectFxgl.belongsTo(Project, { foreignKey: 'projectId' });
/**项目-股东信息 1:n */
Project.hasMany(ProjectGdxx, { foreignKey: 'projectId', as: 'projectGdxxs' });
ProjectGdxx.belongsTo(Project, { foreignKey: 'projectId' });
/**项目-决策主体审核情况 1:n */
Project.hasMany(ProjectJczt, { foreignKey: 'projectId', as: 'projectJczts' });
ProjectJczt.belongsTo(Project, { foreignKey: 'projectId' });
/**项目-建设规模 1:n */
Project.hasMany(ProjectJsgm, { foreignKey: 'projectId', as: 'projectJsgms' });
ProjectJsgm.belongsTo(Project, { foreignKey: 'projectId' });
/**项目-里程碑节点 1:n */
Project.hasMany(ProjectLcbjd, { foreignKey: 'projectId', as: 'projectLcbjds' });
ProjectLcbjd.belongsTo(Project, { foreignKey: 'projectId' });
/**项目-审批意见 1:n */
Project.hasMany(ProjectSpyj, { foreignKey: 'projectId', as: 'projectSpyjs' });
ProjectSpyj.belongsTo(Project, { foreignKey: 'projectId' });
/**项目-项目投资资金流量 1:n */
Project.hasMany(ProjectTzzjll, { foreignKey: 'projectId', as: 'projectTzzjlls' });
ProjectTzzjll.belongsTo(Project, { foreignKey: 'projectId' });
/**项目-投资主体审核情况 1:n */
Project.hasMany(ProjectTzzt, { foreignKey: 'projectId', as: 'projectTzzts' });
ProjectTzzt.belongsTo(Project, { foreignKey: 'projectId' });
/**项目-项目投资总额 1:n */
Project.hasMany(ProjectXmtzze, { foreignKey: 'projectId', as: 'projectXmtzzes' });
ProjectXmtzze.belongsTo(Project, { foreignKey: 'projectId' });
\ No newline at end of file
......@@ -23,7 +23,7 @@ const Project = sequelize.define('Project', {
},
projectLiuZhuanType: {
type: DataTypes.STRING,
comment: "项目流转状态 草稿、待初审、初审退回、待终审、终审退回、待立项审批、立项审批退回、已立项、已暂停、已结束等",
comment: "项目流转状态 1. 草稿、3 待初审、1初审退回、5待终审、1终审退回、7待立项审批、立项审批退回、已立项、已暂停、已结束等",
},
/**
* 项目基本信息
......
......@@ -18,5 +18,7 @@ router.post('/getProjectFields', projectController.getProjectFields);
router.post('/exportExcel', projectController.exportExcel);
router.post('/getExcelTemplate', projectController.getExcelTemplate);
router.post('/preJugProject', projectController.preJugProject); //初审
router.post('/finalJugProject', projectController.finalJugProject); //终审
module.exports = router;
\ No newline at end of file
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