明树Git Lab
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
J
jt_backend
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zengfanpei
jt_backend
Commits
ff46a73d
Commit
ff46a73d
authored
Nov 26, 2025
by
zfp1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
14b33e00
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
329 additions
and
155 deletions
+329
-155
production.json
config/production.json
+17
-5
projectController.js
controller/projectController.js
+156
-90
index.js
db/index.js
+4
-0
c.md
db/model/jt/c.md
+9
-0
project.js
db/model/jt/project.js
+10
-0
projectCwpjzb.js
db/model/jt/projectCwpjzb.js
+1
-1
projectLcbjd.js
db/model/jt/projectLcbjd.js
+1
-1
projectTzzjll.js
db/model/jt/projectTzzjll.js
+1
-1
projectXmtzze.js
db/model/jt/projectXmtzze.js
+57
-57
message.js
db/model/system/message.js
+69
-0
user.js
db/model/system/user.js
+4
-0
No files found.
config/production.json
View file @
ff46a73d
{
"tokenEx"
:
86400
,
"
dbURI"
:
"mongodb://root:letian2024.@127.0.0.1:27017/letian?authSource=admin
"
,
"tokenEx"
:
86400
000000
,
"
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
controller/projectController.js
View file @
ff46a73d
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
)
{
...
...
db/index.js
View file @
ff46a73d
...
...
@@ -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'
});
...
...
db/model/jt/c.md
0 → 100644
View file @
ff46a73d
1.
项目提交(项目公司、投管) 只能靠角色
1.
1 项目公司新建项目人员---项目公司项目审批人员 --- 投管项目审批人员
项目公司人员 -- 看见本公司所有项目
投管项目审批人员 -- 看见所有项目公司人员
1.
2 投管新建项目 --- 投管
同步发起 一个startFlow 流程记录 发起人 发起时间 项目状态(待审批-已审批)
\ No newline at end of file
db/model/jt/project.js
View file @
ff46a73d
...
...
@@ -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'
,
},
},
/**
* 项目基本信息
*/
...
...
db/model/jt/projectCwpjzb.js
View file @
ff46a73d
const
{
DataTypes
}
=
require
(
'sequelize'
);
const
sequelize
=
require
(
'../index'
);
// 财务评价指标
----废弃
// 财务评价指标
const
projectCwpjzb
=
sequelize
.
define
(
'projectCwpjzb'
,
{
id
:
{
type
:
DataTypes
.
INTEGER
,
...
...
db/model/jt/projectLcbjd.js
View file @
ff46a73d
...
...
@@ -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
,
...
...
db/model/jt/projectTzzjll.js
View file @
ff46a73d
...
...
@@ -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"
,
...
...
db/model/jt/projectXmtzze.js
View file @
ff46a73d
//
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
db/model/system/message.js
0 → 100644
View file @
ff46a73d
// 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
db/model/system/user.js
View file @
ff46a73d
...
...
@@ -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
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment