明树Git Lab

Commit ff46a73d authored by zfp1's avatar zfp1

update

parent 14b33e00
{
"tokenEx": 86400,
"dbURI": "mongodb://root:letian2024.@127.0.0.1:27017/letian?authSource=admin",
"tokenEx": 86400000000,
"userDefaultPassword": "GZB123JT.",
"file": {
"storagePath": "/mnt/vdb1/uploadfiles"
"storagePath": "/uploadfiles"
},
"cron": {
"excel": true
},
"mysql": {
"host": "localhost",
"port": 3306,
"username": "root",
"password": "123456",
"database": "gzbjt",
"logging": true
},
"redis": {
"host": "localhost",
"port": 6379,
"password": "",
"db": 0
}
}
\ No newline at end of file
const errorMessage = require("../utils/errorMessage");
const _ = require("lodash");
const { Op } = require('sequelize');
const { Op, where } = require('sequelize');
async function getProjectFields(req, res, next) {
try {
......@@ -51,12 +51,15 @@ async function createProject(req, res, next) {
1.处理特殊字段:
projectJsgms :关联建设规模表
projectGdxxs : 关联股东信息表
// projectXmtzzes :关联项目投资额表 --- 废弃 --改为直接存入
projectXmtzzes :关联项目投资额表
projectBjtjs :关联项目核心边界条件表
projectSpyjs :关联审批意见表
projectFxgl: 关联 风险管理
projectTzzt: 关联 投资主体审核
ProjectJczt: 关联 决策主体审核
projectZqrz: 关联 债权融资
projectCwpjzb: 关联 财务评价指标
ProjectLcbjd: 关联 里程碑节点
lxzl :关联projectFiles-File文件表
lxpfwj :关联projectFiles-File文件表
xgshcl :关联projectFiles-File文件表
......@@ -72,7 +75,11 @@ async function createProject(req, res, next) {
// 处理 projectGdxxs
let projectGdxxs = body.projectGdxxs || [];
projectGdxxs = projectGdxxs.map(o => { o.projectId = project.id; return o });
await DB.ProjectGdxx.bulkCreate(projectGdxxs)
await DB.ProjectGdxx.bulkCreate(projectGdxxs);
// 处理 projectXmtzzes
let projectXmtzzes = body.projectXmtzzes || [];
projectXmtzzes = projectXmtzzes.map(o => { o.projectId = project.id; return o });
await DB.ProjectXmtzze.bulkCreate(projectXmtzzes);
// 处理 projectBjtjs
let projectBjtjs = body.projectBjtjs || [];
projectBjtjs = projectBjtjs.map(o => { o.projectId = project.id; return o });
......@@ -81,24 +88,31 @@ async function createProject(req, res, next) {
let projectFxgls = body.projectFxgls || [];
projectFxgls = projectFxgls.map(o => { o.projectId = project.id; return o });
await DB.ProjectFxgl.bulkCreate(projectFxgls);
// 处理 projectFxgl
// 处理 ProjectTzzt
let projectTzzts = body.projectTzzts || [];
projectTzzts = projectTzzts.map(o => { o.projectId = project.id; return o });
await DB.ProjectTzzt.bulkCreate(projectTzzts);
// 处理 ProjectJczt
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);
// 处理 projectXmtzzes --废弃 直接存入
// let projectXmtzzes = body.projectXmtzzes || [];
// projectXmtzzes = utils.disTree(projectXmtzzes);
// projectXmtzzes = projectXmtzzes.map(o => { o.projectId = project.id; return o });
// await DB.ProjectXmtzze.bulkCreate(projectXmtzzes);
// 处理 projectSpyjs
let projectSpyjs = body.projectSpyjs || [];
projectSpyjs = projectSpyjs.map(o => { o.projectId = project.id; return o });
await DB.ProjectSpyj.bulkCreate(projectSpyjs);
// 处理 projectCwpjzb
let projectCwpjzbs = body.projectCwpjzbs || [];
projectCwpjzbs = projectCwpjzbs.map(o => { o.projectId = project.id; return o });
await DB.ProjectCwpjzb.bulkCreate(projectCwpjzbs);
// 处理 ProjectLcbjd
let projectLcbjds = body.projectLcbjds || [];
projectLcbjds = projectLcbjds.map(o => { o.projectId = project.id; return o });
await DB.ProjectLcbjd.bulkCreate(projectLcbjds);
// 处理 projectTzzjll-----
// 立项资料
let lxzl = body.lxzl || [];
......@@ -113,6 +127,16 @@ async function createProject(req, res, next) {
let proFiles = _.concat(lxzl, lxpfwj, xgshcl);
await DB.ProjectFile.bulkCreate(proFiles);
/**
* 处理项目审批及消息 依靠项目状态流转
* 1. 发起人角色为项目公司项目发起人 xmgs_xmfqr;
* 2. 流转状态为 1待处理
* 3. 消息发送给 项目公司项目审批人 xmgs_xmspr,需要写一个审批接口 :项目基本信息不变,状态需要改为 2 项目公司初审:通过则变为3,不通过则变为1;
* 4. 若是投管部门自主创建项目,则项目状态直接到 5 待投管审核---退回则到1
* 5. 投管后续立项推送、决策推送状态再行处理
*/
//B. 找到本公司审批人员发送消息-- 如果找不到人 则提示项目已保存,联系管理员添加【项目公司项目审批人】角色
//A. 创建发起记录
return res.sendData(project);
} catch (error) {
next(error);
......@@ -120,6 +144,128 @@ async function createProject(req, res, next) {
}
async function updateProject(req, res, next) {
try {
let body = req.body;
if (!body.id) {
return res.sendError(errorMessage.resourceNotFound)
}
/*
1.处理特殊字段:
projectJsgms :关联建设规模表
projectGdxxs : 关联股东信息表
projectXmtzzes :关联项目投资额表
projectBjtjs :关联项目核心边界条件表
projectSpyjs :关联审批意见表
lxzl :关联projectFiles-File文件表
lxpfwj :关联projectFiles-File文件表
xgshcl :关联projectFiles-File文件表
*/
// 1. 先创建项目
let project = body;
let projectInfo = _.omit(body, ['projectJsgms', 'projectGdxxs', 'projectXmtzzes', 'projectBjtjs', 'projectSpyjs', '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 });
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 });
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 });
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 });
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 });
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 });
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 });
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);
// 处理 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 });
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 });
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 });
await DB.ProjectLcbjd.destroy({ where: { projectId: project.id, id: { [Op.notIn]: pnids11 } } });
await DB.ProjectLcbjd.bulkCreate(newprojectLcbjds);
// 处理 projectTzzjll-----
// 立项资料
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' } });
// 立项批复文件
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' } });
// 相关上会材料
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' } });
// 处理文件
//1. 删除
await DB.ProjectFile.destroy({
where: {
projectId: project.id,
fileId: { [Op.notIn]: needIds }
}
});
//2. 创建
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 } });
/**
* 根据前端加入的参数区分按钮 更新草稿并提交 更新草稿
*/
return res.sendData(ret);
} catch (error) {
next(error);
}
}
async function getProjectInfo(req, res, next) {
try {
......@@ -190,86 +336,6 @@ async function getProjectInfo(req, res, next) {
}
async function updateProject(req, res, next) {
try {
let body = req.body;
if (!body.id) {
return res.sendError(errorMessage.resourceNotFound)
}
/*
1.处理特殊字段:
projectJsgms :关联建设规模表
projectGdxxs : 关联股东信息表
projectXmtzzes :关联项目投资额表
projectBjtjs :关联项目核心边界条件表
projectSpyjs :关联审批意见表
lxzl :关联projectFiles-File文件表
lxpfwj :关联projectFiles-File文件表
xgshcl :关联projectFiles-File文件表
*/
// 1. 先创建项目
let project = body;
let projectInfo = _.omit(body, ['projectJsgms', 'projectGdxxs', 'projectXmtzzes', 'projectBjtjs', 'projectSpyjs', 'lxzl', 'lxpfwj', 'xgshcl']);
// 处理 projectJsgms
let projectJsgms = body.projectJsgms || [];
projectJsgms = projectJsgms.map(o => { o.projectId = project.id; delete o.id; return o });
await DB.ProjectJsgm.destroy({ where: { projectId: project.id } });
await DB.ProjectJsgm.bulkCreate(projectJsgms);
// 处理 projectGdxxs
let projectGdxxs = body.projectGdxxs || [];
projectGdxxs = projectGdxxs.map(o => { o.projectId = project.id; delete o.id; return o });
await DB.ProjectGdxx.destroy({ where: { projectId: project.id } });
await DB.ProjectGdxx.bulkCreate(projectGdxxs)
// 处理 projectBjtjs
let projectBjtjs = body.projectBjtjs || [];
projectBjtjs = projectBjtjs.map(o => { o.projectId = project.id; delete o.id; return o });
await DB.ProjectBjtj.destroy({ where: { projectId: project.id } });
await DB.ProjectBjtj.bulkCreate(projectBjtjs);
// 处理 projectXmtzzes
let projectXmtzzes = body.projectXmtzzes || [];
projectXmtzzes = utils.disTree(projectXmtzzes);
projectXmtzzes = projectXmtzzes.map(o => { o.projectId = project.id; delete o.id; return o });
await DB.ProjectXmtzze.destroy({ where: { projectId: project.id } });
await DB.ProjectXmtzze.bulkCreate(projectXmtzzes);
// 处理 projectSpyjs
let projectSpyjs = body.projectSpyjs || [];
projectSpyjs = utils.disTree(projectSpyjs);
projectSpyjs = projectSpyjs.map(o => { o.projectId = project.id; delete o.id; return o });
await DB.ProjectSpyj.destroy({ where: { projectId: project.id } });
await DB.ProjectSpyj.bulkCreate(projectSpyjs);
// 立项资料
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' } });
// 立项批复文件
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' } });
// 相关上会材料
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' } });
// 处理文件
//1. 删除
await DB.ProjectFile.destroy({
where: {
projectId: project.id,
fileId: { [Op.notIn]: needIds }
}
});
//2. 创建
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 } });
return res.sendData(ret);
} catch (error) {
next(error);
}
}
async function deleteProject(req, res, next) {
try {
if (!req.body.id) {
......
......@@ -115,6 +115,10 @@ Position.belongsToMany(User, {
as: 'users'
});
/**用户-项目 1:n */
User.hasMany(Project, { foreignKey: 'projectCreator', as: 'createdProjects' });
Project.belongsTo(User, { foreignKey: 'projectCreator', as: 'creator' });
/**项目-资源信息 1:n */
Resources.hasMany(ResourcesInfo, { foreignKey: 'resourceId', as: 'resourcesInfos' });
ResourcesInfo.belongsTo(Resources, { foreignKey: 'resourceId' });
......
1. 项目提交(项目公司、投管) 只能靠角色
1.1 项目公司新建项目人员---项目公司项目审批人员 --- 投管项目审批人员
项目公司人员 -- 看见本公司所有项目
投管项目审批人员 -- 看见所有项目公司人员
1.2 投管新建项目 --- 投管
同步发起 一个startFlow 流程记录 发起人 发起时间 项目状态(待审批-已审批)
\ No newline at end of file
......@@ -2,6 +2,8 @@
const { DataTypes } = require('sequelize');
const sequelize = require('../index');
const User = require('./system/user');
const Project = sequelize.define('Project', {
// 定义字段
id: {
......@@ -11,6 +13,14 @@ const Project = sequelize.define('Project', {
_mark: 'system',
comment: "主键ID"
},
projectCreator: {
type: DataTypes.INTEGER,
comment: "项目创建人ID",
references: {
model: User,
key: 'id',
},
},
/**
* 项目基本信息
*/
......
const { DataTypes } = require('sequelize');
const sequelize = require('../index');
// 财务评价指标----废弃
// 财务评价指标
const projectCwpjzb = sequelize.define('projectCwpjzb', {
id: {
type: DataTypes.INTEGER,
......
......@@ -10,7 +10,7 @@ const File = require('../system/file');
// zxhfsj: { type: DataTypes.DATE, allowNull: true, comment: "执行回复时间" },
// zxhffj: { type: DataTypes.STRING, allowNull: true, comment: "执行回复附件" },
// wlsqksm: { type: DataTypes.STRING, allowNull: true, comment: "未落实情况说明" },
// 审批意见
//里程碑节点
const ProjectLcbjd = sequelize.define('ProjectLcbjd', {
id: {
type: DataTypes.INTEGER,
......
......@@ -13,7 +13,7 @@ const ProjectTzzjll = sequelize.define('ProjectTzzjll', {
sdsqjxjll: { type: DataTypes.DECIMAL(19, 8), allowNull: true, comment: "所得税前净现金流量" },
tzsds: { type: DataTypes.DECIMAL(19, 8), allowNull: true, comment: "调整所得税" },
sdshjxjll: { type: DataTypes.DECIMAL(19, 8), allowNull: true, comment: "所得税后净现金流量" },
year: { type: DataTypes.STRING, allowNull: true, comment: "所得税后净现金流量"},
year: { type: DataTypes.STRING, allowNull: true, comment: "年份"},
projectId: {
type: DataTypes.INTEGER,
comment: "所属项目ID",
......
// const { DataTypes } = require('sequelize');
// const sequelize = require('../index');
const { DataTypes } = require('sequelize');
const sequelize = require('../index');
// // 项目总投资总额(全口径)-废弃
// const ProjectXmtzze = sequelize.define('ProjectXmtzze', {
// id: {
// type: DataTypes.INTEGER,
// primaryKey: true,
// autoIncrement: true
// },
// kid: {
// type: DataTypes.INTEGER,
// comment: "表格行ID"
// },
// xh: {
// type: DataTypes.STRING,
// comment: "序号"
// },
// zb: {
// type: DataTypes.STRING,
// comment: "指标"
// },
// dw: {
// type: DataTypes.STRING,
// comment: "单位",
// defaultValue: "万元"
// },
// rmbjj: {
// type: DataTypes.DECIMAL(20, 4),
// comment: "人民币计价"
// },
// parentId: {
// type: DataTypes.INTEGER,
// comment: "上级ID"
// },
// 项目总投资总额(全口径)
const ProjectXmtzze = sequelize.define('ProjectXmtzze', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
// kid: {
// type: DataTypes.INTEGER,
// comment: "表格行ID"
// },
xh: {
type: DataTypes.STRING,
comment: "序号"
},
zb: {
type: DataTypes.STRING,
comment: "指标"
},
dw: {
type: DataTypes.STRING,
comment: "单位",
defaultValue: "万元"
},
rmbjj: {
type: DataTypes.DECIMAL(20, 4),
comment: "人民币计价"
},
// parentId: {
// type: DataTypes.INTEGER,
// comment: "上级ID"
// },
// projectId: {
// type: DataTypes.INTEGER,
// comment: "所属项目ID",
// },
projectId: {
type: DataTypes.INTEGER,
comment: "所属项目ID",
},
// del: {
// type: DataTypes.INTEGER,
// defaultValue: 0,
// comment: "0 正常 1 删除"
// },
// }, {
// tableName: 'jt_project_xmtzze', // 指定表名(如果与模型名不同)
// timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
// });
del: {
type: DataTypes.INTEGER,
defaultValue: 0,
comment: "0 正常 1 删除"
},
}, {
tableName: 'jt_project_xmtzze', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// // 同步模型到数据库(创建表)
// ProjectXmtzze.sync({
// force: false,
// // force: true ,//会删除已存在表并重新创建
// // alter: true
// })
// .then(() => {
// console.log('ProjectXmtzze 表同步成功');
// });
// 同步模型到数据库(创建表)
ProjectXmtzze.sync({
force: false,
// force: true ,//会删除已存在表并重新创建
// alter: true
})
.then(() => {
console.log('ProjectXmtzze 表同步成功');
});
// module.exports = ProjectXmtzze;
\ No newline at end of file
module.exports = ProjectXmtzze;
\ No newline at end of file
// models/Message.js
const { DataTypes } = require('sequelize');
const sequelize = require('../index');
const Message = sequelize.define('Message', {
// 定义字段
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
creator: {
type: DataTypes.INTEGER,
comment: "创建人ID"
},
receivers: {
type: DataTypes.JSON,
comment: "接收人ID"
},
alreadyRead: {
type: DataTypes.JSON,
comment: "已经阅读人ID"
},
title: {
type: DataTypes.TEXT,
allowNull: false,
comment: "消息标题"
},
content: {
type: DataTypes.TEXT,
allowNull: false,
comment: "消息内容"
},
/**
* 其他待存字段
*/
type: {
type: DataTypes.INTEGER,
allowNull: true,
comment: "消息类型 1 系统消息 2 项目初步审核 3.项目终审"
},
status: {
type: DataTypes.INTEGER,
defaultValue: 0,
comment: "0 未读 1 已读"
},
del: {
type: DataTypes.INTEGER,
defaultValue: 0,
comment: "0 正常 1 删除"
},
}, {
tableName: 'system_message', // 指定表名(如果与模型名不同)
timestamps: true, // 是否自动添加 createdAt 和 updatedAt 字段(覆盖全局设置)
});
// 同步模型到数据库(创建表)
Message.sync({
// force: false,
// force: true ,//会删除已存在表并重新创建
// alter: true
})
.then(() => {
console.log('Message 表同步成功');
});
module.exports = Message;
\ No newline at end of file
......@@ -27,6 +27,10 @@ const User = sequelize.define('User', {
allowNull: true
},
avatar: DataTypes.STRING(500), //头像
type: {
type: DataTypes.INTEGER,
comment: "用户类型 1 葛洲坝用户 2 外部项目公司用户 3 能建用户"
},
enable: {
type: DataTypes.INTEGER,
defaultValue: 0,
......
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