Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
saspAdminServer
Overview
Overview
Details
Activity
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
node_server
saspAdminServer
Commits
f91d1d4f
Commit
f91d1d4f
authored
Jan 27, 2026
by
chenjinjing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
652d7636
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
162 additions
and
57 deletions
+162
-57
全部企业.xlsx
files/template/全部企业.xlsx
+0
-0
在谈在跟.xlsx
files/template/在谈在跟.xlsx
+0
-0
全部企业.xlsx
res/全部企业.xlsx
+0
-0
在谈在跟.xlsx
res/在谈在跟.xlsx
+0
-0
activity.ts
src/biz/activity.ts
+4
-3
adminuser.ts
src/biz/adminuser.ts
+60
-11
enterprise.ts
src/biz/enterprise.ts
+32
-11
importData.ts
src/biz/importData.ts
+14
-9
negotiation.ts
src/biz/negotiation.ts
+4
-0
admin.ts
src/config/eccParam/admin.ts
+4
-0
enum.ts
src/config/enum.ts
+2
-7
industryEnum.ts
src/config/enum/industryEnum.ts
+15
-0
labelEnum.ts
src/config/enum/labelEnum.ts
+6
-3
splitResultConfig.ts
src/config/splitResultConfig.ts
+2
-0
enterprise.ts
src/data/enterprise.ts
+1
-0
negotiation.ts
src/data/negotiation.ts
+1
-0
enterprise.ts
src/routers/enterprise.ts
+8
-8
negotiation.ts
src/routers/negotiation.ts
+1
-1
dataInit.ts
src/tools/dataInit.ts
+8
-4
No files found.
files/template/全部企业.xlsx
View file @
f91d1d4f
No preview for this file type
files/template/在谈在跟.xlsx
View file @
f91d1d4f
No preview for this file type
res/全部企业.xlsx
View file @
f91d1d4f
No preview for this file type
res/在谈在跟.xlsx
View file @
f91d1d4f
No preview for this file type
src/biz/activity.ts
View file @
f91d1d4f
...
...
@@ -313,10 +313,11 @@ function formatDateTime(timestamp: number): string {
const
year
=
date
.
getFullYear
();
const
month
=
(
date
.
getMonth
()
+
1
).
toString
().
padStart
(
2
,
'0'
);
const
day
=
date
.
getDate
().
toString
().
padStart
(
2
,
'0'
);
const
hours
=
date
.
getHours
().
toString
().
padStart
(
2
,
'0'
);
const
minutes
=
date
.
getMinutes
().
toString
().
padStart
(
2
,
'0'
);
//
const hours = date.getHours().toString().padStart(2, '0');
//
const minutes = date.getMinutes().toString().padStart(2, '0');
return
`
${
year
}
-
${
month
}
-
${
day
}
${
hours
}
:
${
minutes
}
`
;
// return `${year}-${month}-${day} ${hours}:${minutes}`;
return
`
${
year
}
-
${
month
}
-
${
day
}
`
;
}
...
...
src/biz/adminuser.ts
View file @
f91d1d4f
...
...
@@ -15,6 +15,7 @@ import { findTrackListByParam } from "../data/track";
import
{
TRACKTYPE
}
from
"../config/enum"
;
import
{
changeEnumValue
}
from
"../util/verificationEnum"
;
import
*
as
labelEnum
from
"../config/enum/labelEnum"
;
import
{
SUBDIVIDE
}
from
"../config/enum/industryEnum"
;
let
md5
=
require
(
"md5"
);
...
...
@@ -225,7 +226,8 @@ export async function adminUserCreate(param) {
// { id: PROPERTY.汽车创新港, name: "汽车创新港" },
// { id: PROPERTY.汽车城大厦, name: "汽车城大厦" },
// { id: PROPERTY.嘉亭荟, name: "嘉亭荟" },
// { id: PROPERTY.智驾园, name: "智驾园" },
// { id: PROPERTY.上海智慧出行设计谷, name: "上海智慧出行设计谷" },
// { id: PROPERTY.同济科技园, name: "同济科技园" },
// { id: PROPERTY.同济科技园, name: "同济科技园" }
// ];
...
...
@@ -263,7 +265,7 @@ export async function homePage() {
"企业总数"
:
0
,
"100平方公里范围企业"
:
0
,
"3.73平方公里实体租赁"
:
0
,
"
关联入驻
企业"
:
0
,
"
软信类
企业"
:
0
,
"小台账企业"
:
0
,
"重点稳商"
:
0
,
/**较上月变化量 */
...
...
@@ -296,7 +298,7 @@ export async function homePage() {
let
currentMonthStats
=
{
"100平方公里范围企业"
:
0
,
"3.73平方公里实体租赁"
:
0
,
"
关联入驻
企业"
:
0
,
"
软信类
企业"
:
0
,
"小台账企业"
:
0
,
"重点稳商"
:
0
,
"总入驻企业"
:
0
...
...
@@ -305,7 +307,7 @@ export async function homePage() {
let
lastMonthStats
=
{
"100平方公里范围企业"
:
0
,
"3.73平方公里实体租赁"
:
0
,
"
关联入驻
企业"
:
0
,
"
软信类
企业"
:
0
,
"小台账企业"
:
0
,
"重点稳商"
:
0
,
"总入驻企业"
:
0
...
...
@@ -329,7 +331,7 @@ export async function homePage() {
currentMonthStats
[
"3.73平方公里实体租赁"
]
+=
1
;
break
;
case
ENTERPRISESYSTEMLABEL
.
软件关联入驻企业
:
currentMonthStats
[
"
关联入驻
企业"
]
+=
1
;
currentMonthStats
[
"
软信类
企业"
]
+=
1
;
break
;
case
ENTERPRISESYSTEMLABEL
.
小台账企业
:
currentMonthStats
[
"小台账企业"
]
+=
1
;
...
...
@@ -368,7 +370,7 @@ export async function homePage() {
lastMonthStats
[
"3.73平方公里实体租赁"
]
+=
1
;
break
;
case
ENTERPRISESYSTEMLABEL
.
软件关联入驻企业
:
lastMonthStats
[
"
关联入驻
企业"
]
+=
1
;
lastMonthStats
[
"
软信类
企业"
]
+=
1
;
break
;
case
ENTERPRISESYSTEMLABEL
.
小台账企业
:
lastMonthStats
[
"小台账企业"
]
+=
1
;
...
...
@@ -384,14 +386,14 @@ export async function homePage() {
// 设置当前所有企业数量到汇总数据
汇总数据
[
"100平方公里范围企业"
]
=
currentMonthStats
[
"100平方公里范围企业"
];
汇总数据
[
"3.73平方公里实体租赁"
]
=
currentMonthStats
[
"3.73平方公里实体租赁"
];
汇总数据
[
"
关联入驻企业"
]
=
currentMonthStats
[
"关联入驻
企业"
];
汇总数据
[
"
软信类企业"
]
=
currentMonthStats
[
"软信类
企业"
];
汇总数据
[
"小台账企业"
]
=
currentMonthStats
[
"小台账企业"
];
汇总数据
[
"重点稳商"
]
=
currentMonthStats
[
"重点稳商"
];
// 计算变化量(本月数据 - 上月数据)
汇总数据
.
较上月
100
平方公里范围企业变化
=
currentMonthStats
[
"100平方公里范围企业"
]
-
lastMonthStats
[
"100平方公里范围企业"
];
汇总数据
[
"较上月3.73平方公里实体租赁变化"
]
=
currentMonthStats
[
"3.73平方公里实体租赁"
]
-
lastMonthStats
[
"3.73平方公里实体租赁"
];
汇总数据
.
较上月关联入驻企业变化
=
currentMonthStats
[
"
关联入驻企业"
]
-
lastMonthStats
[
"关联入驻
企业"
];
汇总数据
.
较上月关联入驻企业变化
=
currentMonthStats
[
"
软信类企业"
]
-
lastMonthStats
[
"软信类
企业"
];
汇总数据
.
较上月小台账企业变化
=
currentMonthStats
[
"小台账企业"
]
-
lastMonthStats
[
"小台账企业"
];
汇总数据
.
较上月重点稳商变化
=
currentMonthStats
[
"重点稳商"
]
-
lastMonthStats
[
"重点稳商"
];
汇总数据
.
较上月总入驻企业变化
=
currentMonthStats
[
"总入驻企业"
]
-
lastMonthStats
[
"总入驻企业"
];
...
...
@@ -419,8 +421,9 @@ export async function homePage() {
{
id
:
PROPERTY
.
汽车创新港
,
name
:
"汽车创新港"
},
{
id
:
PROPERTY
.
汽车城大厦
,
name
:
"汽车城大厦"
},
{
id
:
PROPERTY
.
嘉亭荟
,
name
:
"嘉亭荟"
},
{
id
:
PROPERTY
.
智驾园
,
name
:
"智驾园"
},
{
id
:
PROPERTY
.
同济科技园
,
name
:
"同济科技园"
}
{
id
:
PROPERTY
.
上海智慧出行设计谷
,
name
:
"上海智慧出行设计谷"
},
{
id
:
PROPERTY
.
同济科技园
,
name
:
"同济科技园"
},
{
id
:
PROPERTY
.
国际汽车城软件园
,
name
:
"国际汽车城软件园"
}
];
// 初始化统计数组
...
...
@@ -448,7 +451,53 @@ export async function homePage() {
}
});
return
{
汇总数据
,
企业服务追踪
,
实体租赁企业场地分布
};
/**行业领域分布 */
/** 查询所有小台账企业数据 */
let
selectParam
=
{
"labels"
:
{
"$elemMatch"
:
{
"labelId"
:
{
"$in"
:
[
labelEnum
.
BASELABEL
.
小台账企业
.
toString
()]
}
}
}
}
let
enterpriseXTZDbList
=
await
enterpriseData
.
findEnterpriseListByParam
(
selectParam
);
let
行业领域分布
=
[];
// 定义物业列表(按你的需求顺序)
let
subDivideList
=
[
{
id
:
SUBDIVIDE
.
智能载体
,
name
:
"智能载体"
},
{
id
:
SUBDIVIDE
.
云平台及云服务
,
name
:
"云平台及云服务"
},
{
id
:
SUBDIVIDE
.
应用软件及服务
,
name
:
"应用软件及服务"
},
{
id
:
SUBDIVIDE
.
AI
及人工智能大模型
,
name
:
"AI及人工智能大模型"
},
{
id
:
SUBDIVIDE
.
电子架构及中间件
,
name
:
"电子架构及中间件"
},
{
id
:
SUBDIVIDE
.
基础软件及操作系统
,
name
:
"基础软件及操作系统"
},
{
id
:
SUBDIVIDE
.
智能芯片
,
name
:
"智能芯片"
},
{
id
:
SUBDIVIDE
.
智能硬件及大算力平台
,
name
:
"智能硬件及大算力平台"
},
];
// 初始化统计数组
subDivideList
.
forEach
(
subDivide
=>
{
行业领域分布
.
push
({
key
:
subDivide
.
name
,
value
:
0
});
});
enterpriseXTZDbList
.
forEach
(
info
=>
{
let
subDivideValue
=
info
.
subDivide
;
// 转换为数字类型以确保类型匹配
let
subDivideValueNum
=
Number
(
subDivideValue
);
// 找到对应的物业并计数
let
subDivideIndex
=
subDivideList
.
findIndex
(
s
=>
s
.
id
===
subDivideValueNum
);
if
(
subDivideIndex
!==
-
1
)
{
行业领域分布
[
subDivideIndex
].
value
+=
1
;
}
})
return
{
汇总数据
,
企业服务追踪
,
实体租赁企业场地分布
,
行业领域分布
};
}
...
...
src/biz/enterprise.ts
View file @
f91d1d4f
...
...
@@ -116,20 +116,25 @@ export async function enterpriseCreate(param) {
* @param dataType 不传=所有企业、1=100平方公里、2=3.73平方公里、3=软件关联入驻企业、4=小台账企业、5=重点稳商企业
* @param name 企业名称
* @param industry 行业领域
* @param subDivide 细分行业领域
* @param parkEntryTime 入驻年份
* @param logonTime 企业成立年份
* @param labelIdList 企业标签 可多选
* @param page 页
*/
export
async
function
enterpriseList
(
dataType
:
number
,
name
:
string
,
industry
,
parkEntryTime
:
number
,
logonTime
:
number
,
labelIdList
,
page
:
number
)
{
export
async
function
enterpriseList
(
dataType
:
number
,
name
:
string
,
industry
,
subDivide
,
parkEntryTime
:
number
,
logonTime
:
number
,
labelIdList
,
page
:
number
)
{
let
selectParam
:
any
=
{};
if
(
name
)
{
selectParam
.
name
=
{
"$regex"
:
`
${
name
}
`
};
}
if
(
industry
&&
industry
.
length
>
0
)
{
verificationEnumTools
.
eccEnumValue
(
'管理后台获取
在谈在跟
列表'
,
'industry'
,
industryEnum
.
ALLINDUSTRY
,
industry
);
verificationEnumTools
.
eccEnumValue
(
'管理后台获取
企业库
列表'
,
'industry'
,
industryEnum
.
ALLINDUSTRY
,
industry
);
selectParam
.
industry
=
{
"$in"
:
industry
};
}
if
(
subDivide
&&
subDivide
.
length
>
0
)
{
verificationEnumTools
.
eccEnumValue
(
'管理后台获取企业库列表'
,
'subDivide'
,
industryEnum
.
SUBDIVIDE
,
subDivide
);
selectParam
.
subDivide
=
{
"$in"
:
subDivide
};
}
if
(
parkEntryTime
)
{
let
parkEntryStartTime
=
moment
(
`
${
parkEntryTime
}
-01-01`
).
valueOf
();
let
parkEntryEndTime
=
moment
(
`
${
parkEntryTime
}
-12-31`
).
valueOf
();
...
...
@@ -199,7 +204,7 @@ export async function enterpriseList(dataType:number, name:string, industry, par
/**需要用到的查询数据 */
// 使用更稳定的排序:首先按createTime,然后按id或uscc确保顺序稳定
let
enterpriseDbList
=
await
enterpriseData
.
findEnterpriseListToPageSort
(
selectParam
,
(
page
-
1
)
*
10
,
{
createTime
:
-
1
,
_id
:
-
1
});
let
enterpriseDbList
=
await
enterpriseData
.
findEnterpriseListToPageSort
(
selectParam
,
(
page
-
1
)
*
10
,
{
createTime
:
-
1
});
let
count
=
await
enterpriseData
.
findEnterpriseCount
(
selectParam
);
//符合查询条件的数据总数
/**组合返回结果 */
...
...
@@ -210,10 +215,10 @@ export async function enterpriseList(dataType:number, name:string, industry, par
let
changeData
:
any
=
extractData
(
splitResultConfig
.
enterpriseListConfig
,
info
,
true
);
/**将枚举值转为字符 */
//行业领域
let
industry
=
[];
if
(
changeData
.
industry
&&
changeData
.
industry
.
length
>
0
)
{
// 注意:这里应该是数组处理,但原代码用单个值处理
// 根据实际情况调整
// 数组处理
let
industryValue
=
verificationEnumTools
.
changeEnumValue
(
industryEnum
.
ALLINDUSTRY
,
changeData
.
industry
);
if
(
industryValue
)
{
industry
.
push
(
industryValue
);
...
...
@@ -221,6 +226,18 @@ export async function enterpriseList(dataType:number, name:string, industry, par
}
changeData
.
industry
=
industry
;
//细分行业领域
let
subDivide
=
[];
if
(
changeData
.
subDivide
&&
changeData
.
subDivide
.
length
>
0
)
{
// 数组处理
let
subDivideValue
=
verificationEnumTools
.
changeEnumValue
(
industryEnum
.
SUBDIVIDE
,
changeData
.
subDivide
);
if
(
subDivideValue
)
{
subDivide
.
push
(
subDivideValue
);
}
}
changeData
.
subDivide
=
subDivide
;
//标签
let
labels
=
[];
if
(
changeData
.
labels
&&
changeData
.
labels
.
length
>
0
)
{
changeData
.
labels
.
forEach
(
info
=>
{
...
...
@@ -269,6 +286,7 @@ export async function enterpriseInfo(uscc:string) {
parkEntryTime
:
enterpriseDbInfo
.
parkEntryTime
,
//moment(enterpriseDbInfo.parkEntryTime).format("YYYY-MM-DD"), //入驻园区时间
labels
:
labels
,
//企业标签
industry
:
enterpriseDbInfo
.
industry
,
//行业领域
subDivide
:
enterpriseDbInfo
.
subDivide
,
//细分行业领域
// property: enterpriseDbInfo.property.toString(), //所属物业
// enterpriseNature: enterpriseDbInfo.enterpriseNature.toString(), //企业性质
property
:
enterpriseDbInfo
.
property
?
enterpriseDbInfo
.
property
.
toString
()
:
""
,
//所属物业
...
...
@@ -296,6 +314,7 @@ export async function enterpriseUpdate(uscc:string, param) {
/**校验枚举 */
verificationEnumTools
.
eccEnumValue
(
'管理后台新增企业建档'
,
'industry'
,
industryEnum
.
ALLINDUSTRY
,
param
.
industry
);
verificationEnumTools
.
eccEnumValue
(
'管理后台新增企业建档'
,
'subDivide'
,
industryEnum
.
SUBDIVIDE
,
param
.
subDivide
);
verificationEnumTools
.
eccEnumValue
(
'管理后台新增企业建档'
,
'enterpriseNature'
,
labelEnum
.
ENTERPRISENATURE
,
param
.
enterpriseNature
);
verificationEnumTools
.
eccEnumValue
(
'管理后台新增企业建档'
,
'property'
,
labelEnum
.
PROPERTY
,
param
.
property
);
verificationEnumTools
.
eccEnumValue
(
'管理后台新增企业建档'
,
'RAS'
,
configEnum
.
RAS
,
param
.
RAS
);
...
...
@@ -410,11 +429,7 @@ export async function enterpriseUpdate(uscc:string, param) {
// 如果已存在入驻年份标签
if
(
existingYearLabel
.
labelId
&&
existingYearLabel
.
labelId
.
toString
()
!==
yearValue
.
toString
())
{
// 标签年份与当前年份不一致,需要更新
enterpriseDbInfo
.
labels
[
existingYearLabelIndex
]
=
{
labelId
:
yearValue
.
toString
(),
labelType
:
labelEnum
.
LABELTYPE
.
入驻年份
,
state
:
true
};
enterpriseDbInfo
.
labels
[
existingYearLabelIndex
][
"labelId"
]
=
yearValue
.
toString
();
console
.
log
(
`已为企业
${
enterpriseDbInfo
.
name
}
(
${
enterpriseDbInfo
.
uscc
}
) 更新入驻年份标签:从
${
existingYearLabel
.
labelId
}
更新为
${
yearValue
}
`
);
}
else
{
// 标签年份一致,无需修改
...
...
@@ -467,7 +482,7 @@ export async function enterpriseDelete(uscc:string) {
* @param dataType 企业分类(1=100平方公里、2=3.73平方公里、3=软件关联入驻企业、4=小台账企业、5=重点稳商企业)
* @returns 二维数组,第一行为表头,后续行为数据
*/
export
async
function
outPutEnterpriseData
(
name
:
string
,
industry
:
string
[],
parkEntryTime
:
number
,
logonTime
:
number
,
labelIdList
:
string
[],
dataType
:
number
,
uscc
:
string
[])
{
export
async
function
outPutEnterpriseData
(
name
:
string
,
industry
:
string
[],
subDivide
:
string
[],
parkEntryTime
:
number
,
logonTime
:
number
,
labelIdList
:
string
[],
dataType
:
number
,
uscc
:
string
[])
{
/** 拼接查询条件 */
let
selectParam
:
any
=
{};
if
(
name
)
{
...
...
@@ -476,6 +491,9 @@ export async function outPutEnterpriseData(name:string, industry:string[], parkE
if
(
industry
&&
industry
.
length
>
0
)
{
selectParam
.
industry
=
{
"$in"
:
industry
};
}
if
(
subDivide
&&
subDivide
.
length
>
0
)
{
selectParam
.
subDivide
=
{
"$in"
:
subDivide
};
}
if
(
parkEntryTime
)
{
let
parkEntryStartTime
=
moment
(
`
${
parkEntryTime
}
-01-01`
).
valueOf
();
let
parkEntryEndTime
=
moment
(
`
${
parkEntryTime
}
-12-31`
).
valueOf
();
...
...
@@ -524,6 +542,7 @@ export async function outPutEnterpriseData(name:string, industry:string[], parkE
// "注册地址",
"注册时间"
,
"入驻时间"
,
"细分行业领域"
,
"行业领域"
,
"所属物业"
,
"企业性质"
,
...
...
@@ -547,6 +566,7 @@ export async function outPutEnterpriseData(name:string, industry:string[], parkE
// "logonAddress",
"logonTime"
,
"parkEntryTime"
,
"subDivide"
,
"industry"
,
"property"
,
"enterpriseNature"
,
...
...
@@ -567,6 +587,7 @@ export async function outPutEnterpriseData(name:string, industry:string[], parkE
/** 枚举值转文本 */
changeData
.
industry
=
verificationEnumTools
.
changeEnumValue
(
industryEnum
.
ALLINDUSTRY
,
changeData
.
industry
)
||
"未选择"
;
changeData
.
subDivide
=
verificationEnumTools
.
changeEnumValue
(
industryEnum
.
SUBDIVIDE
,
changeData
.
subDivide
)
||
"未选择"
;
changeData
.
property
=
verificationEnumTools
.
changeEnumValue
(
labelEnum
.
PROPERTY
,
changeData
.
property
)
||
"未选择"
;
changeData
.
enterpriseNature
=
verificationEnumTools
.
changeEnumValue
(
labelEnum
.
ENTERPRISENATURE
,
changeData
.
enterpriseNature
)
||
"未选择"
;
changeData
.
RAS
=
verificationEnumTools
.
changeEnumValue
(
configEnum
.
RAS
,
changeData
.
RAS
)
||
"未选择"
;
...
...
src/biz/importData.ts
View file @
f91d1d4f
...
...
@@ -128,11 +128,12 @@ export async function 全部企业(buff) {
if
(
thisEnterprise
)
throw
new
BizError
(
ERRORENUM
.
该企业已存在
,
`
${
rowData
[
1
]}
已经在库中存在`
);
/**枚举转换 */
let
industry
=
[
industryEnum
.
ALLINDUSTRY
[
rowData
[
12
]]];
//行业领域
let
subDivide
=
[
industryEnum
.
SUBDIVIDE
[
rowData
[
12
]]];
//细分行业领域-小台账用
let
industry
=
[
industryEnum
.
ALLINDUSTRY
[
rowData
[
13
]]];
//行业领域
let
labelList
=
parseLabels
(
rowData
);
//解析标签
let
enterpriseNature
=
labelEnum
.
ENTERPRISENATURE
[
rowData
[
9
]];
//企业性质
let
property
=
labelEnum
.
PROPERTY
[
rowData
[
10
]];
//所属物业
let
RAS
=
configEnum
.
RAS
[
rowData
[
1
4
]];
let
RAS
=
configEnum
.
RAS
[
rowData
[
1
5
]];
let
logonAddress
=
[
rowData
[
2
],
rowData
[
3
],
rowData
[
4
],
rowData
[
5
]];
//准备企业数据
...
...
@@ -143,15 +144,16 @@ export async function 全部企业(buff) {
logonAddress
:
logonAddress
,
logonTime
:
new
Date
(
rowData
[
6
]).
valueOf
(),
parkEntryTime
:
new
Date
(
rowData
[
7
]).
valueOf
(),
subDivide
,
industry
,
property
,
enterpriseNature
,
leasedArea
:
rowData
[
1
3
],
leasedArea
:
rowData
[
1
4
],
RAS
,
jingYingFanWei
:
rowData
[
1
5
],
legalPerson
:
rowData
[
1
6
],
zhuceziben
:
rowData
[
1
7
],
dianHua
:
rowData
[
1
8
],
jingYingFanWei
:
rowData
[
1
6
],
legalPerson
:
rowData
[
1
7
],
zhuceziben
:
rowData
[
1
8
],
dianHua
:
rowData
[
1
9
],
createTime
:
new
Date
().
valueOf
(),
labels
:
labelList
,
pwd
:
sysTools
.
getPwdMd5
(
rowData
[
1
],
md5
(
rowData
[
1
].
slice
(
rowData
[
1
].
length
-
6
))),
...
...
@@ -312,8 +314,8 @@ function parseLabels(rowData) {
// case "嘉亭荟":
// propertyValue = labelEnum.PROPERTY.嘉亭荟;
// break;
// case "
智驾园
":
// propertyValue = labelEnum.PROPERTY.
智驾园
;
// case "
上海智慧出行设计谷
":
// propertyValue = labelEnum.PROPERTY.
上海智慧出行设计谷
;
// break;
// case "汽车创新港":
// propertyValue = labelEnum.PROPERTY.汽车创新港;
...
...
@@ -321,6 +323,9 @@ function parseLabels(rowData) {
// case "汽车城大厦":
// propertyValue = labelEnum.PROPERTY.汽车城大厦;
// break;
// case "国际汽车城软件园":
// propertyValue = labelEnum.PROPERTY.国际汽车城软件园;
// break;
// }
// labels.push({
...
...
src/biz/negotiation.ts
View file @
f91d1d4f
...
...
@@ -96,6 +96,7 @@ export async function negotiationCreate(param) {
progressStatus
:
param
.
progressStatus
,
primaryContact
:
param
.
primaryContact
,
contactDepartment
:
param
.
contactDepartment
,
progressDetails
:
param
.
progressDetails
,
createTime
:
new
Date
().
valueOf
(),
}
...
...
@@ -127,6 +128,7 @@ export async function negotiationInfo(id:string) {
progressStatus
:
negotiationDbInfo
.
progressStatus
,
primaryContact
:
negotiationDbInfo
.
primaryContact
,
contactDepartment
:
negotiationDbInfo
.
contactDepartment
,
progressDetails
:
negotiationDbInfo
.
progressDetails
,
};
return
{
dataInfo
};
...
...
@@ -222,6 +224,7 @@ export async function outPutNegotiationData(name:string, industry:string[], regi
"注册情况"
,
"负责人/首谈人"
,
"对接部门"
,
"进度详情"
,
// "创建时间"
];
...
...
@@ -233,6 +236,7 @@ export async function outPutNegotiationData(name:string, industry:string[], regi
"registrationStatus"
,
"primaryContact"
,
"contactDepartment"
,
"progressDetails"
,
// "createTime"
];
...
...
src/config/eccParam/admin.ts
View file @
f91d1d4f
...
...
@@ -30,6 +30,7 @@ export const NegotiationAddConfig = {
progressStatus
:{
type
:
"Number"
},
//进展情况
primaryContact
:{
type
:
"String"
},
//负责人、首谈人
contactDepartment
:{
type
:
"String"
},
//对接部门
progressDetails
:{
type
:
"String"
},
//进度详情
};
...
...
@@ -45,6 +46,7 @@ export const NegotiationUpdateConfig = {
progressStatus
:{
type
:
"Number"
},
//进展情况
primaryContact
:{
type
:
"String"
},
//负责人、首谈人
contactDepartment
:{
type
:
"String"
},
//对接部门
progressDetails
:{
type
:
"String"
},
//进度详情
};
...
...
@@ -62,6 +64,7 @@ export const EnterpriseAddConfig = {
labels
:{
type
:
"[String]"
},
//企业标签
// industryCategoryGb:{type:"String"}, //国标行业门类
industry
:{
type
:
"[Number]"
},
//行业领域
subDivide
:{
type
:
"[Number]"
},
//细分行业领域-用于小台账
property
:{
type
:
"Number"
},
//企业所属物业
enterpriseNature
:{
type
:
"Number"
},
//企业性质
leasedArea
:{
type
:
"Number"
},
//租赁面积(㎡)
...
...
@@ -86,6 +89,7 @@ export const EnterpriseUpdateConfig = {
parkEntryTime
:{
type
:
'Number'
},
//入驻园区时间
labels
:{
type
:
"[String]"
},
//企业标签
industry
:{
type
:
"[Number]"
},
//行业领域
subDivide
:{
type
:
"[Number]"
},
//细分行业领域-小台账用
property
:{
type
:
"Number"
},
//企业所属物业
enterpriseNature
:{
type
:
"String"
},
//企业性质
leasedArea
:{
type
:
"Number"
},
//租赁面积(㎡)
...
...
src/config/enum.ts
View file @
f91d1d4f
...
...
@@ -79,10 +79,8 @@ export enum ACTIVITYTARGET {
* 推进、注册情况
*/
export
enum
REGISTRATIONSTATUS
{
洽谈中
=
1
,
已注册
,
已入驻
,
已终止
,
合同洽谈
=
1
,
项目终止
,
}
...
...
@@ -91,9 +89,6 @@ export enum REGISTRATIONSTATUS {
*/
export
enum
PROGRESSSTATUS
{
初次接触
=
1
,
深度洽谈
,
协议草拟
,
协议签订
,
项目落地
,
}
...
...
src/config/enum/industryEnum.ts
View file @
f91d1d4f
/**
* 细分行业领域-用于小台账
*/
export
enum
SUBDIVIDE
{
智能载体
=
1
,
云平台及云服务
=
2
,
应用软件及服务
=
3
,
AI
及人工智能大模型
=
4
,
电子架构及中间件
=
5
,
基础软件及操作系统
=
6
,
智能芯片
=
7
,
智能硬件及大算力平台
=
8
,
}
/**
* 国标行业门类 industryCategoryGb
*/
export
enum
INDUSTRY
{
...
...
src/config/enum/labelEnum.ts
View file @
f91d1d4f
...
...
@@ -29,8 +29,9 @@ export enum ENTERPRISESYSTEMLABEL {
汽车创新港
=
602
,
汽车城大厦
=
603
,
嘉亭荟
=
604
,
智驾园
=
605
,
上海智慧出行设计谷
=
605
,
//智驾园
同济科技园
=
606
,
国际汽车城软件园
=
607
,
/**入驻年份 */
"2023年"
=
2023
,
"2024年"
=
2024
,
...
...
@@ -55,8 +56,9 @@ export enum REMOVEBASICLABEL {
汽车创新港
=
602
,
汽车城大厦
=
603
,
嘉亭荟
=
604
,
智驾园
=
605
,
上海智慧出行设计谷
=
605
,
//智驾园
同济科技园
=
606
,
国际汽车城软件园
=
607
,
"2023年"
=
2023
,
"2024年"
=
2024
,
"2025年"
=
2025
,
...
...
@@ -105,8 +107,9 @@ export enum PROPERTY {
汽车创新港
=
602
,
汽车城大厦
=
603
,
嘉亭荟
=
604
,
智驾园
=
605
,
上海智慧出行设计谷
=
605
,
//智驾园
同济科技园
=
606
,
国际汽车城软件园
=
607
,
}
...
...
src/config/splitResultConfig.ts
View file @
f91d1d4f
...
...
@@ -18,6 +18,7 @@ export const negotiationListConfig = {
progressStatus
:{
key
:
"进展情况"
},
primaryContact
:{
key
:
"负责人/首谈人"
},
contactDepartment
:{
key
:
"对接部门"
},
progressDetails
:{
key
:
"进度详情"
},
};
...
...
@@ -30,6 +31,7 @@ export const enterpriseListConfig = {
uscc
:{
key
:
"统一社会信用代码"
},
name
:{
key
:
"企业名称"
},
industry
:{
key
:
"行业领域[]"
},
subDivide
:{
key
:
"细分行业领域[]"
},
logonTime
:{
key
:
"企业成立时间"
,
changeDate
:
true
},
parkEntryTime
:{
key
:
"入驻园区年份"
,
changeDate
:
true
},
leasedArea
:{
key
:
"租赁面积(㎡)"
},
...
...
src/data/enterprise.ts
View file @
f91d1d4f
...
...
@@ -81,6 +81,7 @@ const enterpriseSchema = new Schema({
uscc
:{
type
:
String
,
index
:
true
},
//统一信用代码
isSettled
:
Number
,
//是否入驻
industry
:[
Number
],
//行业领域 INDUSTRY
subDivide
:[
Number
],
//细分行业领域 用于小台账
logonAddress
:{
type
:[
String
],
default
:[]},
//注册地址
logonTime
:
Number
,
//注册时间、成立时间
parkEntryTime
:
Number
,
//入驻园区时间
...
...
src/data/negotiation.ts
View file @
f91d1d4f
...
...
@@ -12,6 +12,7 @@ const negotiationSchema = new Schema({
industry
:
[
Number
],
//行业领域 ALLINDUSTRY
registrationStatus
:{
type
:
Number
,
default
:
1
},
//推进、注册情况 REGISTRATIONSTATUS: 1-洽谈中, 2-已注册, 3-已入驻, 4-已终止
progressStatus
:{
type
:
Number
,
default
:
1
},
//进展情况 PROGRESSSTATUS:1-初次接触, 2-深度洽谈, 3-协议草拟, 4-协议签订, 5-项目落地
progressDetails
:
String
,
//进度详情
primaryContact
:
String
,
//负责人、首谈人
contactDepartment
:
String
,
//对接部门
createTime
:
Number
,
//创建时间
...
...
src/routers/enterprise.ts
View file @
f91d1d4f
...
...
@@ -23,11 +23,11 @@ export function setRouter(httpServer) {
* @param res
*/
async
function
getEnterpriseList
(
req
,
res
)
{
let
reqConf
=
{
dataType
:
'Number'
,
name
:
'String'
,
industry
:
'[Number]'
,
parkEntryTime
:
'Number'
,
logonTime
:
'Number'
,
labelIdList
:
'[String]'
,
page
:
'Number'
};
const
NotMustHaveKeys
=
[
'dataType'
,
'name'
,
'industry'
,
'parkEntryTime'
,
'logonTime'
,
'labelIdList'
];
let
{
dataType
,
name
,
industry
,
parkEntryTime
,
logonTime
,
labelIdList
,
page
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
reqConf
=
{
dataType
:
'Number'
,
name
:
'String'
,
industry
:
'[Number]'
,
subDivide
:
'[Number]'
,
parkEntryTime
:
'Number'
,
logonTime
:
'Number'
,
labelIdList
:
'[String]'
,
page
:
'Number'
};
const
NotMustHaveKeys
=
[
'dataType'
,
'name'
,
'industry'
,
'
subDivide'
,
'
parkEntryTime'
,
'logonTime'
,
'labelIdList'
];
let
{
dataType
,
name
,
industry
,
subDivide
,
parkEntryTime
,
logonTime
,
labelIdList
,
page
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
result
=
await
enterpriseBiz
.
enterpriseList
(
dataType
,
name
,
industry
,
parkEntryTime
,
logonTime
,
labelIdList
,
page
);
let
result
=
await
enterpriseBiz
.
enterpriseList
(
dataType
,
name
,
industry
,
subDivide
,
parkEntryTime
,
logonTime
,
labelIdList
,
page
);
res
.
success
(
result
);
}
...
...
@@ -94,11 +94,11 @@ async function delEnterprise(req, res) {
* @param res
*/
async
function
outPutEnterprise
(
req
,
res
)
{
let
reqConf
=
{
name
:
'String'
,
industry
:
'[Number]'
,
parkEntryTime
:
'Number'
,
logonTime
:
'Number'
,
labelIdList
:
'[String]'
,
dataType
:
'Number'
,
uscc
:
'[String]'
};
const
NotMustHaveKeys
=
[
'name'
,
'industry'
,
'parkEntryTime'
,
'logonTime'
,
'labelIdList'
,
'dataType'
,
'uscc'
];
let
{
name
,
industry
,
parkEntryTime
,
logonTime
,
labelIdList
,
dataType
,
uscc
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
reqConf
=
{
name
:
'String'
,
industry
:
'[Number]'
,
subDivide
:
"[Number]"
,
parkEntryTime
:
'Number'
,
logonTime
:
'Number'
,
labelIdList
:
'[String]'
,
dataType
:
'Number'
,
uscc
:
'[String]'
};
const
NotMustHaveKeys
=
[
'name'
,
'industry'
,
'
subDivide'
,
'
parkEntryTime'
,
'logonTime'
,
'labelIdList'
,
'dataType'
,
'uscc'
];
let
{
name
,
industry
,
subDivide
,
parkEntryTime
,
logonTime
,
labelIdList
,
dataType
,
uscc
}
=
eccReqParamater
(
reqConf
,
req
.
body
,
NotMustHaveKeys
);
let
result
=
await
enterpriseBiz
.
outPutEnterpriseData
(
name
,
industry
,
parkEntryTime
,
logonTime
,
labelIdList
,
dataType
,
uscc
);
let
result
=
await
enterpriseBiz
.
outPutEnterpriseData
(
name
,
industry
,
subDivide
,
parkEntryTime
,
logonTime
,
labelIdList
,
dataType
,
uscc
);
res
.
success
(
result
);
}
...
...
src/routers/negotiation.ts
View file @
f91d1d4f
...
...
@@ -12,7 +12,7 @@ export function setRouter(httpServer) {
httpServer
.
post
(
'/admin/negotiation/add'
,
checkAdminUserToken
,
asyncHandler
(
addNegotiation
));
httpServer
.
post
(
'/admin/negotiation/info'
,
checkAdminUserToken
,
asyncHandler
(
getNegotiationInfo
));
httpServer
.
post
(
'/admin/negotiation/update'
,
checkAdminUserToken
,
asyncHandler
(
updateNegotiation
));
httpServer
.
post
(
'/admin/negotiation/
list'
,
checkAdminUserToken
,
asyncHandler
(
getNegotiationList
));
httpServer
.
post
(
'/admin/negotiation/
del'
,
checkAdminUserToken
,
asyncHandler
(
delNegotiation
));
httpServer
.
post
(
'/admin/negotiation/output'
,
checkAdminUserToken
,
asyncHandler
(
outPutNegotiation
));
}
...
...
src/tools/dataInit.ts
View file @
f91d1d4f
...
...
@@ -110,8 +110,9 @@ const propertyMap = {
'汽车创新港'
:
labelEnum
.
PROPERTY
.
汽车创新港
,
'汽车城大厦'
:
labelEnum
.
PROPERTY
.
汽车城大厦
,
'嘉亭荟'
:
labelEnum
.
PROPERTY
.
嘉亭荟
,
'智驾园'
:
labelEnum
.
PROPERTY
.
智驾园
,
'同济科技园'
:
labelEnum
.
PROPERTY
.
同济科技园
'上海智慧出行设计谷'
:
labelEnum
.
PROPERTY
.
上海智慧出行设计谷
,
'同济科技园'
:
labelEnum
.
PROPERTY
.
同济科技园
,
'国际汽车城软件园'
:
labelEnum
.
PROPERTY
.
国际汽车城软件园
};
...
...
@@ -373,8 +374,8 @@ function parseLabels(rowData) {
case
"嘉亭荟"
:
propertyValue
=
labelEnum
.
PROPERTY
.
嘉亭荟
;
break
;
case
"
智驾园
"
:
propertyValue
=
labelEnum
.
PROPERTY
.
智驾园
;
case
"
上海智慧出行设计谷
"
:
propertyValue
=
labelEnum
.
PROPERTY
.
上海智慧出行设计谷
;
break
;
case
"汽车创新港"
:
propertyValue
=
labelEnum
.
PROPERTY
.
汽车创新港
;
...
...
@@ -382,6 +383,9 @@ function parseLabels(rowData) {
case
"汽车城大厦"
:
propertyValue
=
labelEnum
.
PROPERTY
.
汽车城大厦
;
break
;
case
"国际汽车城软件园"
:
propertyValue
=
labelEnum
.
PROPERTY
.
国际汽车城软件园
;
break
;
}
labels
.
push
({
...
...
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