Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Z
zjxcxServer
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
zjxcxServer
Commits
d2195869
Commit
d2195869
authored
Jul 25, 2023
by
lixinming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
孵化器埋点
parent
f06d7585
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
385 additions
and
50 deletions
+385
-50
fuHuaQi.ts
src/biz/admin/fuHuaQi/fuHuaQi.ts
+1
-1
dataDeclaration.ts
src/biz/mobileEnterprise/quarterTask/dataDeclaration.ts
+2
-5
myEnterprise.ts
src/biz/mobileFuHuaQi/enterprise/myEnterprise.ts
+78
-8
toExamine.ts
src/biz/mobileFuHuaQi/enterprise/toExamine.ts
+43
-7
base.ts
src/biz/mobileFuHuaQi/fuHuaQi/base.ts
+27
-0
i18nRegister.ts
src/biz/mobileFuHuaQi/fuHuaQi/instituQualify/i18nRegister.ts
+28
-2
icr.ts
src/biz/mobileFuHuaQi/fuHuaQi/instituQualify/icr.ts
+29
-1
instiuQualify.ts
...biz/mobileFuHuaQi/fuHuaQi/instituQualify/instiuQualify.ts
+34
-0
startupTeacher.ts
...iz/mobileFuHuaQi/fuHuaQi/instituQualify/startupTeacher.ts
+33
-1
zjBeyondLayout.ts
...iz/mobileFuHuaQi/fuHuaQi/instituQualify/zjBeyondLayout.ts
+27
-2
policy.ts
src/biz/mobileFuHuaQi/policy.ts
+3
-0
point.ts
src/biz/point.ts
+47
-13
enum.ts
src/config/enum.ts
+6
-0
pointConfig.ts
src/config/pointConfig.ts
+10
-5
team.ts
src/data/enterprise/quarterTask/team.ts
+8
-0
enterprise.ts
src/routers/mobileClient/enterprise.ts
+4
-1
institutionalNature.ts
src/routers/mobileClient/institutionalNature.ts
+5
-4
No files found.
src/biz/admin/fuHuaQi/fuHuaQi.ts
View file @
d2195869
...
...
@@ -304,7 +304,7 @@ export async function addUser(param) {
//创建孵化器账号
await
fuhuaqiData
.
createFuHuaQiUser
(
param
);
//初始化分数
await
scoreData
.
createFuHuaQiScore
(
param
.
uscc
,
40
4
);
await
scoreData
.
createFuHuaQiScore
(
param
.
uscc
,
40
0
);
const
MonthNumber
=
moment
().
subtract
(
1
,
'months'
).
month
()
+
1
;
//数据填报月份
const
YearNumber
=
moment
().
subtract
(
1
,
'months'
).
year
();
//数据填报年度
...
...
src/biz/mobileEnterprise/quarterTask/dataDeclaration.ts
View file @
d2195869
...
...
@@ -312,13 +312,10 @@ export async function getTeamInfo(uscc:string) {
* @param uscc 企业统一信用代码
*/
export
async
function
showTeamInfo
(
uscc
:
string
)
{
//todo 测试注释 后续要放开 v
let
{
declarationQuarter
,
declarationYear
}
=
getDeclarationTime
();
//todo 测试注释 7-15日删除 v
// let declarationQuarter = 1;
// let declarationYear = 2023;
let
teamInfo
=
await
teamData
.
findTeamByUsccAndTime
(
uscc
,
declarationYear
,
declarationQuarter
);
// let teamInfo = await teamData.findTeamByUsccAndTime(uscc, declarationYear, declarationQuarter);
let
teamInfo
=
await
teamData
.
findEnterpriseNewTeamData
(
uscc
);
if
(
!
teamInfo
||
!
teamInfo
.
year
)
{
teamInfo
=
{
doctor
:
0
,
master
:
0
,
undergraduate
:
0
,
juniorCollege
:
0
,
...
...
src/biz/mobileFuHuaQi/enterprise/myEnterprise.ts
View file @
d2195869
...
...
@@ -14,6 +14,8 @@ import { eccFormParam, eccReqParamater } from "../../../util/verificationParam";
import
*
as
verificationEnumTools
from
"../../../util/verificationEnum"
;
import
{
checkChange
,
extractData
}
from
"../../../util/piecemeal"
;
import
*
as
scoreBiz
from
"../fuHuaQi/score"
;
import
{
FUHUAQINODEENUM
,
POINTTYPEENUM
}
from
"../../../config/pointConfig"
;
import
{
addPoint
}
from
"../../point"
;
...
...
@@ -101,15 +103,42 @@ export async function updatePhysicalInfo(fuHuaQiUscc:string, uscc:string, leased
if
(
enterpriseInfo
.
fuHuaQiUscc
!=
fuHuaQiUscc
)
throw
new
BizError
(
ERRORENUM
.
无法操作其他孵化器的企业
,
"修改企业孵化状态 修改为实体"
,
`孵化器
${
fuHuaQiUscc
}
-> 企业
${
uscc
}
`
);
enterpriseInfo
.
leasedArea
=
leasedArea
;
enterpriseInfo
.
state
=
configEnum
.
FUHUASTATE
.
实体孵化
;
/** 区分修改状态和修改租赁面积 */
if
(
enterpriseInfo
.
state
==
configEnum
.
FUHUASTATE
.
实体孵化
)
{
//兼容什么都没有修改的情况,这种情况不需要更改数据库和埋点
if
(
leasedArea
!=
enterpriseInfo
.
leasedArea
)
{
/**埋点 */
addPoint
(
POINTTYPEENUM
.
孵化器
,
fuHuaQiUscc
,
FUHUAQINODEENUM
.
我的企业
_
占孵面积
,
enterpriseInfo
.
leasedArea
||
0
,
leasedArea
);
/**修改为实体,需要把虚拟的和迁出的字段清空 */
enterpriseInfo
.
virtualCause
=
null
;
//虚拟孵化模式
enterpriseInfo
.
virtualCauseDes
=
""
;
//虚拟孵化原因
enterpriseInfo
.
moveOutType
=
null
;
//迁出类型
enterpriseInfo
.
moveOutCause
=
[];
//迁出原因
enterpriseInfo
.
moveOutTime
=
0
;
/**修改数据 */
enterpriseInfo
.
leasedArea
=
leasedArea
;
}
}
else
{
/**埋点 */
let
oldData
=
{
leasedArea
:
enterpriseInfo
.
leasedArea
||
0
,
state
:
enterpriseInfo
.
state
,
virtualCause
:
enterpriseInfo
.
virtualCause
};
let
newData
=
{
leasedArea
,
state
:
configEnum
.
FUHUASTATE
.
实体孵化
,
virtualCause
:
null
,
//虚拟孵化模式
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
fuHuaQiUscc
,
FUHUAQINODEENUM
.
我的企业
_
孵化状态
,
oldData
,
newData
);
/**修改数据 */
enterpriseInfo
.
leasedArea
=
leasedArea
;
enterpriseInfo
.
state
=
configEnum
.
FUHUASTATE
.
实体孵化
;
/**修改为实体,需要把虚拟的和迁出的字段清空 */
enterpriseInfo
.
virtualCause
=
null
;
//虚拟孵化模式
enterpriseInfo
.
virtualCauseDes
=
""
;
//虚拟孵化原因
enterpriseInfo
.
moveOutType
=
null
;
//迁出类型
enterpriseInfo
.
moveOutCause
=
[];
//迁出原因
enterpriseInfo
.
moveOutTime
=
0
;
}
await
enterpriseInfo
.
save
();
...
...
@@ -149,6 +178,18 @@ export async function updateVirtualInfo(fuHuaQiUscc:string, uscc:string, virtual
enterpriseInfo
.
leasedArea
=
0
;
//租赁面积
enterpriseInfo
.
moveOutTime
=
0
;
/**埋点 */
let
oldData
=
{
leasedArea
:
enterpriseInfo
.
leasedArea
||
0
,
state
:
enterpriseInfo
.
state
,
};
let
newData
=
{
leasedArea
:
0
,
state
:
configEnum
.
FUHUASTATE
.
虚拟孵化
,
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
fuHuaQiUscc
,
FUHUAQINODEENUM
.
我的企业
_
孵化状态
,
oldData
,
newData
);
await
enterpriseInfo
.
save
();
return
{
isUsccess
:
true
};
...
...
@@ -206,6 +247,24 @@ export async function updateMoveOutInfo(fuHuaQiUscc:string, uscc:string, moveOu
enterpriseInfo
.
virtualCauseDes
=
""
;
//虚拟孵化原因
enterpriseInfo
.
leasedArea
=
0
;
//租赁面积
/**埋点 */
let
oldData
=
{
leasedArea
:
enterpriseInfo
.
leasedArea
||
0
,
state
:
enterpriseInfo
.
state
,
virtualCause
:
null
,
//虚拟孵化模式
virtualCauseDes
:
""
,
//虚拟孵化原因
};
let
newData
=
{
leasedArea
:
0
,
state
:
configEnum
.
FUHUASTATE
.
迁出
,
moveOutType
:
moveOutType
,
moveOutCause
:
moveOutCause
,
moveOutTrace
:
moveOutTrace
,
moveOutTime
:
new
Date
().
valueOf
(),
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
fuHuaQiUscc
,
FUHUAQINODEENUM
.
我的企业
_
孵化状态
,
oldData
,
newData
);
await
enterpriseInfo
.
save
();
return
{
isUsccess
:
true
};
...
...
@@ -257,6 +316,13 @@ export async function updateMyEnterpriseBaseInfo(fuHuaQiUscc:string, param) {
enterpriseInfo
[
key
]
=
param
[
key
];
});
/**埋点 */
let
oldPointInfo
=
{};
for
(
let
key
in
param
)
{
oldPointInfo
[
key
]
=
enterpriseInfo
[
key
]
||
''
;
}
addPoint
(
POINTTYPEENUM
.
孵化器
,
fuHuaQiUscc
,
FUHUAQINODEENUM
.
我的企业
_
基本信息
,
oldPointInfo
,
param
);
await
enterpriseInfo
.
save
();
/**更新分数 */
...
...
@@ -289,6 +355,8 @@ export async function replenishMyEnterpriseInPutInfo(fuHuaQiUscc:string, param)
await
enterpriseData
.
replenishEnterpriseData
(
fuHuaQiUscc
,
param
);
addPoint
(
POINTTYPEENUM
.
孵化器
,
fuHuaQiUscc
,
FUHUAQINODEENUM
.
我的企业
_
补录企业
,
param
.
uscc
,
'新迁入'
);
return
{
isSuccess
:
true
};
}
...
...
@@ -315,5 +383,7 @@ export async function replenishMyEnterpriseCreateInfo(fuHuaQiUscc:string, param)
await
enterpriseData
.
replenishEnterpriseData
(
fuHuaQiUscc
,
param
);
addPoint
(
POINTTYPEENUM
.
孵化器
,
fuHuaQiUscc
,
FUHUAQINODEENUM
.
我的企业
_
补录企业
,
param
.
uscc
,
'新注册'
);
return
{
isSuccess
:
true
};
}
src/biz/mobileFuHuaQi/enterprise/toExamine.ts
View file @
d2195869
...
...
@@ -4,9 +4,9 @@
*
*/
import
{
findBusinessDataByParams
,
findBusinessDataByTimeAndUscc
}
from
"../../../data/enterprise/quarterTask/businessdata"
;
import
{
findBusinessDataByParams
,
findBusinessDataByTimeAndUscc
,
findBusinessDataCountByParamsToPage
}
from
"../../../data/enterprise/quarterTask/businessdata"
;
import
{
ENTERPRISEDECLARATIONTYPE
}
from
"../../../config/enum"
;
import
{
findTeamDataByParams
,
findTeamDataByUsccAndTime
}
from
"../../../data/enterprise/quarterTask/team"
;
import
{
findTeamDataByParams
,
findTeamDataByUsccAndTime
,
findTeamDataCountByParams
}
from
"../../../data/enterprise/quarterTask/team"
;
import
{
eccEnumValue
}
from
"../../../util/verificationEnum"
;
import
{
eccFormParam
}
from
"../../../util/verificationParam"
;
import
*
as
eccFormParamConfig
from
"../../../config/eccParam/fuHuaQi"
;
...
...
@@ -24,10 +24,25 @@ function getCycle(cycleNumber:number) {
* 待审核列表
* @param uscc 孵化器统一信用代码
*/
export
async
function
unauditedList
(
uscc
:
string
)
{
let
query
=
{
fhqIsSubmit
:
false
,
fuHuaQiUscc
:
uscc
};
export
async
function
unauditedList
(
uscc
:
string
,
state
:
number
,
type
:
number
)
{
let
query
:
any
=
{
fhqIsSubmit
:
false
,
fuHuaQiUscc
:
uscc
};
let
businessDataList
=
await
findBusinessDataByParams
(
query
);
if
(
state
==
2
)
{
//已填报
query
.
isSubmit
=
true
;
}
else
{
//未填报
query
.
isSubmit
=
false
;
}
let
businessDataList
=
[];
let
teamDataList
=
[];
if
(
type
==
2
)
{
businessDataList
=
await
findBusinessDataByParams
(
query
);
}
else
if
(
type
==
3
)
{
teamDataList
=
await
findTeamDataByParams
(
query
);
}
else
{
businessDataList
=
await
findBusinessDataByParams
(
query
);
teamDataList
=
await
findTeamDataByParams
(
query
);
}
let
dataList
=
[];
businessDataList
.
forEach
(
info
=>
{
...
...
@@ -45,7 +60,7 @@ export async function unauditedList(uscc:string) {
});
});
let
teamDataList
=
await
findTeamDataByParams
(
query
);
teamDataList
.
forEach
(
info
=>
{
let
{
name
,
quarter
,
isSubmit
,
year
,
isUpdate
}
=
info
;
dataList
.
push
({
...
...
@@ -61,7 +76,28 @@ export async function unauditedList(uscc:string) {
});
});
return
{
dataList
};
/**组合dataNumberList */
let
businessSubmitCount
=
await
findBusinessDataCountByParamsToPage
({
fhqIsSubmit
:
false
,
fuHuaQiUscc
:
uscc
,
isSubmit
:
true
});
let
businessNotSubmitCount
=
await
findBusinessDataCountByParamsToPage
({
fhqIsSubmit
:
false
,
fuHuaQiUscc
:
uscc
,
isSubmit
:
false
});
let
teamSubmitCount
=
await
findTeamDataCountByParams
({
fhqIsSubmit
:
false
,
fuHuaQiUscc
:
uscc
,
isSubmit
:
true
});
let
teamNotSubmitCount
=
await
findTeamDataCountByParams
({
fhqIsSubmit
:
false
,
fuHuaQiUscc
:
uscc
,
isSubmit
:
false
});
let
dataNumberList
=
[
{
"key"
:
1
,
//枚举值
"value"
:
`全部(
${
businessSubmitCount
+
businessNotSubmitCount
+
teamSubmitCount
+
teamNotSubmitCount
}
)`
//按钮文本
},
{
"key"
:
2
,
//枚举值
"value"
:
`已填报(
${
businessSubmitCount
+
teamSubmitCount
}
)`
//按钮文本
},
{
"key"
:
3
,
//枚举值
"value"
:
`未填报(
${
businessNotSubmitCount
+
teamNotSubmitCount
}
)`
//按钮文本
},
];
return
{
dataList
,
dataNumberList
};
}
...
...
src/biz/mobileFuHuaQi/fuHuaQi/base.ts
View file @
d2195869
...
...
@@ -15,6 +15,8 @@ import { ERRORENUM } from "../../../config/errorEnum";
import
{
eccFormParam
,
eccReqParamater
}
from
"../../../util/verificationParam"
;
import
{
changeEnumValue
,
eccEnumValue
}
from
"../../../util/verificationEnum"
;
import
*
as
scoreBiz
from
"./score"
;
import
{
addPoint
}
from
"../../point"
;
import
{
FUHUAQINODEENUM
,
OPERATETYPEENUM
,
POINTTYPEENUM
}
from
"../../../config/pointConfig"
;
...
...
@@ -139,9 +141,34 @@ export async function updateFuHuaQiBaseData(uscc:string, param) {
for
(
let
i
=
0
;
i
<
changeList
.
length
;
i
++
)
{
let
key
=
changeList
[
i
];
if
(
key
==
"virtualEnterpriseNum"
)
continue
;
switch
(
key
)
{
case
"acreageTotal"
:
if
(
param
[
key
]
!=
baseDataInfo
[
key
])
{
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
我的数据
_
总面积
,
baseDataInfo
[
key
],
param
[
key
]
);
}
break
;
case
"acreagePersonalUse"
:
if
(
param
[
key
]
!=
baseDataInfo
[
key
])
{
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
我的数据
_
自用面积
,
baseDataInfo
[
key
],
param
[
key
]
);
}
break
;
case
"incubatedAcreage"
:
if
(
param
[
key
]
!=
baseDataInfo
[
key
])
{
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
我的数据
_
在孵面积
,
baseDataInfo
[
key
],
param
[
key
]);
}
break
;
}
baseDataInfo
[
key
]
=
param
[
key
];
}
baseDataInfo
[
"hatchingGround"
]
=
param
.
hatchingGround
;
if
(
JSON
.
stringify
(
param
[
'hatchingGround'
]
||
[])
!=
JSON
.
stringify
(
baseDataInfo
[
'hatchingGround'
]
||
[]))
{
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
我的数据
_
经备案孵化场地
,
baseDataInfo
[
'hatchingGround'
],
param
[
'hatchingGround'
]
);
}
await
baseDataInfo
.
save
();
...
...
src/biz/mobileFuHuaQi/fuHuaQi/instituQualify/i18nRegister.ts
View file @
d2195869
...
...
@@ -10,6 +10,8 @@ import { getI18nRegisterId } from "../../../../tools/system";
import
{
addRegister
,
deleteI18nRegisterListById
,
findI18nRegisterListByParam
,
findOneI18nRegister
}
from
"../../../../data/fuHuaQi/instituQualify/i18nRegister"
;
import
{
BizError
}
from
"../../../../util/bizError"
;
import
{
ERRORENUM
}
from
"../../../../config/errorEnum"
;
import
{
addPoint
}
from
"../../../point"
;
import
{
FUHUAQINODEENUM
,
OPERATETYPEENUM
,
POINTTYPEENUM
}
from
"../../../../config/pointConfig"
;
/**
...
...
@@ -26,6 +28,8 @@ export async function createI18nRegister(uscc:string, country:string, partners:s
let
id
=
getI18nRegisterId
(
uscc
);
await
addRegister
(
id
,
uscc
,
fuHuaQiInfo
.
name
,
country
,
partners
,
cMode
,
cAchievements
);
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
国际化登记
,
{
country
,
partners
,
cMode
,
cAchievements
},
null
,
OPERATETYPEENUM
.
添加
);
return
{
isSuccess
:
true
};
}
...
...
@@ -43,7 +47,15 @@ export async function createI18nRegister(uscc:string, country:string, partners:s
*/
export
async
function
updateI18nRegister
(
uscc
:
string
,
id
:
string
,
country
:
string
,
partners
:
string
,
cMode
:
string
,
cAchievements
:
string
)
{
let
registerInfo
=
await
findOneI18nRegister
(
id
);
if
(
uscc
!=
registerInfo
.
uscc
)
throw
new
BizError
(
ERRORENUM
.
只能修改本企业信息
,
"修改国际化登记信息时"
,
`
${
uscc
}
尝试修改
${
registerInfo
.
uscc
}
的信息`
);
if
(
uscc
!=
registerInfo
.
uscc
)
throw
new
BizError
(
ERRORENUM
.
参数错误
,
"修改国际化登记信息时"
,
`
${
uscc
}
尝试修改
${
registerInfo
.
uscc
}
的信息`
);
let
oldData
=
{
country
:
registerInfo
.
country
,
partners
:
registerInfo
.
partners
,
cMode
:
registerInfo
.
cMode
,
cAchievements
:
registerInfo
.
cAchievements
,
};
let
newData
=
{
country
,
partners
,
cMode
,
cAchievements
};
registerInfo
.
country
=
country
;
registerInfo
.
partners
=
partners
;
...
...
@@ -52,6 +64,8 @@ export async function updateI18nRegister(uscc:string, id:string, country:string,
await
registerInfo
.
save
();
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
国际化登记
,
oldData
,
newData
,
OPERATETYPEENUM
.
修改
);
return
{
isSuccess
:
true
};
}
...
...
@@ -80,7 +94,19 @@ export async function selectI18nRegisterInfo(id:string) {
* @param id 标识
* @returns
*/
export
async
function
deleteI18nRegisterInfo
(
id
:
string
)
{
export
async
function
deleteI18nRegisterInfo
(
uscc
:
string
,
id
:
string
)
{
let
registerInfo
=
await
findOneI18nRegister
(
id
);
if
(
uscc
!=
registerInfo
.
uscc
)
throw
new
BizError
(
ERRORENUM
.
参数错误
,
"删除国际化登记信息时"
,
`
${
uscc
}
尝试修改
${
registerInfo
.
uscc
}
的信息`
);
let
oldData
=
{
country
:
registerInfo
.
country
,
partners
:
registerInfo
.
partners
,
cMode
:
registerInfo
.
cMode
,
cAchievements
:
registerInfo
.
cAchievements
,
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
国际化登记
,
oldData
,
null
,
OPERATETYPEENUM
.
删除
);
await
deleteI18nRegisterListById
(
id
);
return
{
isSuccess
:
true
}
...
...
src/biz/mobileFuHuaQi/fuHuaQi/instituQualify/icr.ts
View file @
d2195869
...
...
@@ -10,6 +10,10 @@ import * as icrData from "../../../../data/fuHuaQi/instituQualify/icr";
import
{
changeEnumValue
}
from
"../../../../util/verificationEnum"
;
import
{
COOPERATIONMODE
}
from
"../../../../config/enum"
;
import
moment
=
require
(
"moment"
);
import
{
addPoint
}
from
"../../../point"
;
import
{
FUHUAQINODEENUM
,
OPERATETYPEENUM
,
POINTTYPEENUM
}
from
"../../../../config/pointConfig"
;
import
{
BizError
}
from
"../../../../util/bizError"
;
import
{
ERRORENUM
}
from
"../../../../config/errorEnum"
;
/**
...
...
@@ -28,6 +32,8 @@ export async function createIcr(uscc:string, po:string, ce:string, cMode, startT
let
id
=
getRandomId
(
uscc
);
await
icrData
.
addData
(
id
,
uscc
,
fuHuaQiInfo
.
name
,
po
,
ce
,
cMode
,
startTimeMs
);
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
大学科研院所合作机构
,
{
po
,
ce
,
cMode
,
startTimeMs
},
null
,
OPERATETYPEENUM
.
添加
);
return
{
isSuccess
:
true
};
}
...
...
@@ -45,6 +51,15 @@ export async function createIcr(uscc:string, po:string, ce:string, cMode, startT
*/
export
async
function
updateIcr
(
uscc
:
string
,
id
:
string
,
po
:
string
,
ce
:
string
,
cMode
,
startTimeMs
:
number
)
{
let
dataInfo
=
await
icrData
.
findOneData
(
id
);
if
(
uscc
!=
dataInfo
.
uscc
)
throw
new
BizError
(
ERRORENUM
.
参数错误
,
"修改大学/科研院所合作机构信息时"
,
`
${
uscc
}
尝试修改
${
dataInfo
.
uscc
}
的信息`
);
let
oldData
=
{
po
:
dataInfo
.
po
,
ce
:
dataInfo
.
ce
,
cMode
:
dataInfo
.
cMode
,
startTimeMs
:
dataInfo
.
startTimeMs
,
};
let
newData
=
{
po
,
ce
,
cMode
,
startTimeMs
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
大学科研院所合作机构
,
oldData
,
newData
,
OPERATETYPEENUM
.
修改
);
dataInfo
.
po
=
po
;
dataInfo
.
ce
=
ce
;
...
...
@@ -81,9 +96,22 @@ export async function selectIcr(id:string) {
* @param id 记录标识
* @returns
*/
export
async
function
deleteIcr
(
id
:
string
)
{
export
async
function
deleteIcr
(
uscc
:
string
,
id
:
string
)
{
let
dataInfo
=
await
icrData
.
findOneData
(
id
);
if
(
uscc
!=
dataInfo
.
uscc
)
throw
new
BizError
(
ERRORENUM
.
参数错误
,
"删除大学/科研院所合作机构信息时"
,
`
${
uscc
}
尝试修改
${
dataInfo
.
uscc
}
的信息`
);
let
oldData
=
{
po
:
dataInfo
.
po
,
ce
:
dataInfo
.
ce
,
cMode
:
dataInfo
.
cMode
,
startTimeMs
:
dataInfo
.
startTimeMs
,
};
await
icrData
.
deleteDataById
(
id
);
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
大学科研院所合作机构
,
oldData
,
null
,
OPERATETYPEENUM
.
删除
);
return
{
isSuccess
:
true
}
}
...
...
src/biz/mobileFuHuaQi/fuHuaQi/instituQualify/instiuQualify.ts
View file @
d2195869
...
...
@@ -9,6 +9,8 @@ import * as startupTeacherData from "../../../../data/fuHuaQi/instituQualify/sta
import
*
as
zjBeyondLayoutData
from
"../../../../data/fuHuaQi/instituQualify/zjBeyondLayout"
;
import
{
STATEENUM
}
from
"../../../../config/enum"
;
import
*
as
fuhuaqiData
from
"../../../../data/fuHuaQi/fuhuaqi"
;
import
{
addPoint
}
from
"../../../point"
;
import
{
FUHUAQINODEENUM
,
OPERATETYPEENUM
,
POINTTYPEENUM
}
from
"../../../../config/pointConfig"
;
/**
...
...
@@ -23,6 +25,17 @@ import * as fuhuaqiData from "../../../../data/fuHuaQi/fuhuaqi";
export
async
function
updatePTPInfo
(
uscc
:
string
,
isCreatePTP
:
number
,
scalePTP
:
number
,
isParticipateInPTP
:
boolean
,
participatingFundCompany
:
string
)
{
let
fuHuaQiInfo
=
await
fuhuaqiData
.
findFuHuaQiByUSCC
(
uscc
);
let
oldData
=
{
isCreatePTP
:
fuHuaQiInfo
.
isCreatePTP
,
scalePTP
:
fuHuaQiInfo
.
scalePTP
,
isParticipateInPTP
:
fuHuaQiInfo
.
isParticipateInPTP
,
participatingFundCompany
:
fuHuaQiInfo
.
participatingFundCompany
,
};
let
newData
=
{
isCreatePTP
,
scalePTP
,
isParticipateInPTP
,
participatingFundCompany
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
创投基金登记
,
oldData
,
newData
,
OPERATETYPEENUM
.
修改
);
fuHuaQiInfo
.
isCreatePTP
=
isCreatePTP
;
fuHuaQiInfo
.
scalePTP
=
scalePTP
;
fuHuaQiInfo
.
isParticipateInPTP
=
isParticipateInPTP
;
...
...
@@ -30,6 +43,8 @@ export async function updatePTPInfo(uscc:string, isCreatePTP:number, scalePTP:nu
await
fuHuaQiInfo
.
save
();
return
{
isSuccess
:
true
};
}
...
...
@@ -69,6 +84,25 @@ export async function updateProfessionalTechnology(uscc:string, isProfessionalTe
let
fuHuaQiInfo
=
await
fuhuaqiData
.
findFuHuaQiByUSCC
(
uscc
);
let
oldData
=
{
isProfessionalTechnology
:
fuHuaQiInfo
.
isProfessionalTechnology
,
professionalTechnologyName
:
fuHuaQiInfo
.
professionalTechnologyName
,
professionalTechnologyCreateTime
:
fuHuaQiInfo
.
professionalTechnologyCreateTime
,
professionalTechnologyAmount
:
fuHuaQiInfo
.
professionalTechnologyAmount
,
isCooperation
:
fuHuaQiInfo
.
isCooperation
,
cooperationInstitutions
:
fuHuaQiInfo
.
cooperationInstitutions
,
};
let
newData
=
{
isProfessionalTechnology
,
professionalTechnologyName
,
professionalTechnologyCreateTime
,
professionalTechnologyAmount
,
isCooperation
,
cooperationInstitutions
,
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
专业技术平台登记
,
oldData
,
newData
,
OPERATETYPEENUM
.
修改
);
fuHuaQiInfo
.
isProfessionalTechnology
=
isProfessionalTechnology
;
//是否专业技术平台
fuHuaQiInfo
.
professionalTechnologyName
=
professionalTechnologyName
;
//专业技术平台名称
fuHuaQiInfo
.
professionalTechnologyCreateTime
=
professionalTechnologyCreateTime
;
//时间 年份 xxxx年01月01日 的时间戳
...
...
src/biz/mobileFuHuaQi/fuHuaQi/instituQualify/startupTeacher.ts
View file @
d2195869
...
...
@@ -8,6 +8,10 @@ import { getRandomId } from "../../../../tools/system";
import
*
as
startupTeacherData
from
"../../../../data/fuHuaQi/instituQualify/startupTeacher"
;
import
{
changeEnumValue
}
from
"../../../../util/verificationEnum"
;
import
{
SPECIALITY
,
TEACHERLV
}
from
"../../../../config/enum"
;
import
{
addPoint
}
from
"../../../point"
;
import
{
FUHUAQINODEENUM
,
OPERATETYPEENUM
,
POINTTYPEENUM
}
from
"../../../../config/pointConfig"
;
import
{
BizError
}
from
"../../../../util/bizError"
;
import
{
ERRORENUM
}
from
"../../../../config/errorEnum"
;
/**
...
...
@@ -27,6 +31,9 @@ export async function createStartUpTeacher(uscc:string, teacherName:string, unit
let
id
=
getRandomId
(
uscc
);
await
startupTeacherData
.
addData
(
id
,
uscc
,
fuHuaQiInfo
.
name
,
teacherName
,
unit
,
duties
,
speciality
,
teacherLv
,
serviceEnterprises
);
let
pointData
=
{
teacherName
,
unit
,
duties
,
speciality
,
teacherLv
,
serviceEnterprises
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
创业导师情况
,
pointData
,
null
,
OPERATETYPEENUM
.
添加
);
return
{
isSuccess
:
true
};
}
...
...
@@ -46,6 +53,18 @@ export async function createStartUpTeacher(uscc:string, teacherName:string, unit
*/
export
async
function
updateStartUpTeacher
(
uscc
:
string
,
id
:
string
,
teacherName
:
string
,
unit
:
string
,
duties
:
string
,
speciality
,
teacherLv
:
number
,
serviceEnterprises
:
string
)
{
let
dataInfo
=
await
startupTeacherData
.
findOneData
(
id
);
if
(
uscc
!=
dataInfo
.
uscc
)
throw
new
BizError
(
ERRORENUM
.
参数错误
,
"修改创业生导师信息时"
,
`
${
uscc
}
尝试修改
${
dataInfo
.
uscc
}
的信息`
);
let
newData
=
{
teacherName
,
unit
,
duties
,
speciality
,
teacherLv
,
serviceEnterprises
};
let
oldData
=
{
teacherName
:
dataInfo
.
teacherName
,
unit
:
dataInfo
.
unit
,
duties
:
dataInfo
.
duties
,
speciality
:
dataInfo
.
speciality
,
teacherLv
:
dataInfo
.
teacherLv
,
serviceEnterprises
:
dataInfo
.
serviceEnterprises
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
创业导师情况
,
oldData
,
newData
,
OPERATETYPEENUM
.
修改
);
dataInfo
.
teacherName
=
teacherName
;
dataInfo
.
unit
=
unit
;
...
...
@@ -86,7 +105,20 @@ export async function selectStartUpTeacher(id:string) {
* @param id 信息标识
* @returns
*/
export
async
function
deleteStartUpTeacher
(
id
:
string
)
{
export
async
function
deleteStartUpTeacher
(
uscc
:
string
,
id
:
string
)
{
let
dataInfo
=
await
startupTeacherData
.
findOneData
(
id
);
if
(
uscc
!=
dataInfo
.
uscc
)
throw
new
BizError
(
ERRORENUM
.
参数错误
,
"修改创业生导师信息时"
,
`
${
uscc
}
尝试修改
${
dataInfo
.
uscc
}
的信息`
);
let
oldData
=
{
teacherName
:
dataInfo
.
teacherName
,
unit
:
dataInfo
.
unit
,
duties
:
dataInfo
.
duties
,
speciality
:
dataInfo
.
speciality
,
teacherLv
:
dataInfo
.
teacherLv
,
serviceEnterprises
:
dataInfo
.
serviceEnterprises
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
创业导师情况
,
oldData
,
null
,
OPERATETYPEENUM
.
删除
);
await
startupTeacherData
.
deleteDataById
(
id
);
return
{
isSuccess
:
true
}
...
...
src/biz/mobileFuHuaQi/fuHuaQi/instituQualify/zjBeyondLayout.ts
View file @
d2195869
...
...
@@ -9,6 +9,10 @@ import { getRandomId } from "../../../../tools/system";
import
*
as
zjBeyondLayoutData
from
"../../../../data/fuHuaQi/instituQualify/zjBeyondLayout"
;
import
{
changeEnumValue
}
from
"../../../../util/verificationEnum"
;
import
{
ZJBEYONDLAYOUTOPERATIONMODE
}
from
"../../../../config/enum"
;
import
{
addPoint
}
from
"../../../point"
;
import
{
FUHUAQINODEENUM
,
OPERATETYPEENUM
,
POINTTYPEENUM
}
from
"../../../../config/pointConfig"
;
import
{
BizError
}
from
"../../../../util/bizError"
;
import
{
ERRORENUM
}
from
"../../../../config/errorEnum"
;
/**
...
...
@@ -20,11 +24,14 @@ import { ZJBEYONDLAYOUTOPERATIONMODE } from "../../../../config/enum";
* @returns
*/
export
async
function
createZJBeyondLayout
(
uscc
:
string
,
city
:
string
,
area
:
number
,
operationMode
:
number
)
{
let
fuHuaQiInfo
=
await
fuhuaqiData
.
findFuHuaQiByUSCC
(
uscc
);
let
id
=
getRandomId
(
uscc
);
await
zjBeyondLayoutData
.
addData
(
id
,
uscc
,
fuHuaQiInfo
.
name
,
city
,
area
,
operationMode
);
let
pointData
=
{
city
,
area
,
operationMode
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
张江以外布局
,
pointData
,
null
,
OPERATETYPEENUM
.
添加
);
return
{
isSuccess
:
true
};
}
...
...
@@ -41,6 +48,14 @@ export async function createZJBeyondLayout(uscc:string, city:string, area:number
export
async
function
updateZJBeyondLayout
(
uscc
:
string
,
id
:
string
,
city
:
string
,
area
:
number
,
operationMode
:
number
)
{
let
dataInfo
=
await
zjBeyondLayoutData
.
findOneData
(
id
);
let
oldData
=
{
city
:
dataInfo
.
city
,
area
:
dataInfo
.
area
,
operationMode
:
dataInfo
.
operationMode
,
};
let
newData
=
{
city
,
area
,
operationMode
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
张江以外布局
,
oldData
,
newData
,
OPERATETYPEENUM
.
修改
);
dataInfo
.
city
=
city
;
dataInfo
.
area
=
area
;
dataInfo
.
operationMode
=
operationMode
;
...
...
@@ -74,7 +89,17 @@ export async function selectZJBeyondLayout(id:string) {
* @param id 信息标识
* @returns
*/
export
async
function
deleteZJBeyondLayout
(
id
:
string
)
{
export
async
function
deleteZJBeyondLayout
(
uscc
:
string
,
id
:
string
)
{
let
dataInfo
=
await
zjBeyondLayoutData
.
findOneData
(
id
);
if
(
uscc
!=
dataInfo
.
uscc
)
throw
new
BizError
(
ERRORENUM
.
参数错误
,
"修改张江以外布局信息时"
,
`
${
uscc
}
尝试修改
${
dataInfo
.
uscc
}
的信息`
);
let
oldData
=
{
city
:
dataInfo
.
city
,
area
:
dataInfo
.
area
,
operationMode
:
dataInfo
.
operationMode
,
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
机构资质
_
张江以外布局
,
oldData
,
null
,
OPERATETYPEENUM
.
删除
);
await
zjBeyondLayoutData
.
deleteDataById
(
id
);
return
{
isSuccess
:
true
}
...
...
src/biz/mobileFuHuaQi/policy.ts
View file @
d2195869
...
...
@@ -4,6 +4,8 @@
import
moment
=
require
(
"moment"
);
import
{
selectInformationByParamCount
,
selectInformationByParamToPage
,
selectInformationDataById
,
selectOnceInformationByParamToParam
}
from
"../../data/guanWeiHui/information"
;
import
{
FUHUAQINODEENUM
,
POINTTYPEENUM
}
from
"../../config/pointConfig"
;
import
{
addPoint
}
from
"../point"
;
...
...
@@ -82,6 +84,7 @@ export async function getOnceinformation(uscc:string, id:string) {
createTime
:
moment
(
informationData
.
createTimeMs
).
format
(
"MM/DD"
)
};
addPoint
(
POINTTYPEENUM
.
孵化器
,
uscc
,
FUHUAQINODEENUM
.
政策速递
,
id
);
return
{
infomation
:
reuslt
};
}
...
...
src/biz/point.ts
View file @
d2195869
...
...
@@ -6,7 +6,7 @@ import { ENTERPRISENODEENUM, FUHUAQINODEENUM, POINTTYPEENUM } from "../config/po
import
{
post
}
from
"../util/request"
;
export
async
function
addPoint
(
pointType
:
number
,
uid
:
string
,
pointId
:
number
,
p1
,
p2
?)
{
export
async
function
addPoint
(
pointType
:
number
,
uid
:
string
,
pointId
:
number
,
p1
,
p2
?
,
p3
?
)
{
let
url
=
'http://localhost:7078/point/'
;
let
sign
=
"xxxx8901231kldosdjkfsdlk"
;
...
...
@@ -25,28 +25,62 @@ export async function addPoint(pointType:number, uid:string, pointId:number, p1,
}
else
if
(
pointId
==
ENTERPRISENODEENUM
.
政策速递
)
{
pointInfo
.
p1
=
p1
;
post
(
url
,
{
pointInfo
,
pointId
},
{
sign
});
}
else
if
(
pointId
==
ENTERPRISENODEENUM
.
登录
)
{
post
(
url
,
{
pointInfo
,
pointId
},
{
sign
});
}
else
{
/**数组类型 or 对象类型 */
let
oldData
;
let
newData
;
if
(
typeof
p1
==
"object"
)
{
let
oldData
=
JSON
.
stringify
(
p1
);
let
newData
=
JSON
.
stringify
(
p2
);
oldData
=
JSON
.
stringify
(
p1
);
newData
=
JSON
.
stringify
(
p2
);
}
else
if
(
typeof
p1
==
"number"
)
{
oldData
=
p1
+
''
;
newData
=
p2
+
''
;
}
else
{
oldData
=
p1
;
newData
=
p2
;
}
if
(
oldData
!=
newData
)
{
pointInfo
.
p1
=
oldData
;
pointInfo
.
p2
=
newData
;
if
(
oldData
!=
newData
)
{
post
(
url
,
{
pointInfo
,
pointId
},
{
sign
});
}
}
else
if
(
typeof
p1
==
"number"
)
{
if
(
p1
!=
p2
)
{
pointInfo
.
p1
=
p1
+
''
;
pointInfo
.
p2
=
p2
+
''
;
post
(
url
,
{
pointInfo
,
pointId
},
{
sign
});
}
post
(
url
,
{
pointInfo
,
pointId
},
{
sign
});
}
}
}
else
{
/**孵化器埋点 */
url
+=
"fuhuaqi/add"
;
if
(
pointId
!=
FUHUAQINODEENUM
.
政策速递
)
{
if
(
pointId
==
FUHUAQINODEENUM
.
政策速递
)
{
pointInfo
.
p1
=
p1
;
post
(
url
,
{
pointInfo
,
pointId
},
{
sign
});
}
else
if
(
pointId
==
FUHUAQINODEENUM
.
登录
)
{
post
(
url
,
{
pointInfo
,
pointId
},
{
sign
});
}
else
{
pointInfo
.
pid
=
pointId
;
let
oldData
;
let
newData
;
if
(
typeof
p1
==
"object"
)
{
oldData
=
JSON
.
stringify
(
p1
);
newData
=
JSON
.
stringify
(
p2
);
}
else
if
(
typeof
p1
==
"number"
)
{
oldData
=
p1
+
''
;
newData
=
p2
+
''
;
}
else
{
oldData
=
p1
;
newData
=
p2
;
}
/**机构资质要加类型埋点 */
if
(
pointId
>=
2
||
pointId
<=
7
)
{
pointInfo
.
pt
=
p3
;
}
if
(
oldData
!=
newData
)
{
pointInfo
.
p1
=
oldData
;
pointInfo
.
p2
=
newData
;
post
(
url
,
{
pointInfo
,
pointId
},
{
sign
});
}
}
}
...
...
src/config/enum.ts
View file @
d2195869
...
...
@@ -451,4 +451,9 @@ export enum DATAMAINTENANCETYPE {
迁出管理
=
1
,
经营数据
=
2
,
重置企业密码
=
3
}
export
enum
CREATEENTERPRISETYPE
{
新注册
=
1
,
新迁入
}
\ No newline at end of file
src/config/pointConfig.ts
View file @
d2195869
/**
* 孵化器端埋点
*/
...
...
@@ -17,7 +16,8 @@ export enum FUHUAQINODEENUM {
我的企业
_
基本信息
,
我的企业
_
孵化状态
,
我的企业
_
占孵面积
,
我的企业
_
补录企业
=
15
我的企业
_
补录企业
=
15
,
登录
}
...
...
@@ -29,19 +29,24 @@ export enum ENTERPRISENODEENUM {
创始团队
,
企业资质
_
高新技术
,
企业资质
_
专精特新
,
企业资质
_
小巨人培育
,
企业资质
_
小巨人培育
=
5
,
企业资质
_
小巨人
,
企业资质
_
上市情况
,
知识产权
_
海外专利
,
知识产权
_
一类专利
,
知识产权
_
二类专利
,
知识产权
_
二类专利
=
10
,
基本信息
_
行业领域
,
基本信息
_
经营地址
,
经营数据补录
_
营业收入
,
经营数据补录
_
研发投入
,
经营数据补录
_
纳税
经营数据补录
_
纳税
=
15
,
登录
}
/**
* 埋点类型
*/
export
enum
POINTTYPEENUM
{
企业
=
1
,
孵化器
...
...
src/data/enterprise/quarterTask/team.ts
View file @
d2195869
...
...
@@ -76,6 +76,14 @@ export async function findTeamDataByParams(param) {
return
await
teamModel
.
find
(
param
);
}
/**
* 根据条件查询总数
* @param param 查询条件
*/
export
async
function
findTeamDataCountByParams
(
param
)
{
return
await
teamModel
.
find
(
param
).
countDocuments
()
}
export
async
function
findTeamDataByUsccAndTime
(
uscc
:
string
,
year
:
number
,
quarter
:
number
)
{
return
await
teamModel
.
selectOnceData
({
uscc
,
year
,
quarter
});
}
...
...
src/routers/mobileClient/enterprise.ts
View file @
d2195869
...
...
@@ -134,7 +134,10 @@ async function delEnterpriseInfo(req, res) {
async
function
unaudited
(
req
,
res
)
{
const
Uscc
=
req
.
headers
.
uscc
;
let
result
=
await
toExamineBiz
.
unauditedList
(
Uscc
);
let
reqConf
=
{
state
:
"Number"
,
type
:
"Number"
};
let
{
state
,
type
}
=
eccReqParamater
(
reqConf
,
req
.
body
);
let
result
=
await
toExamineBiz
.
unauditedList
(
Uscc
,
state
,
type
);
res
.
success
(
result
);
}
...
...
src/routers/mobileClient/institutionalNature.ts
View file @
d2195869
...
...
@@ -91,6 +91,7 @@ async function updateRegister(req, res) {
async
function
infoRegister
(
req
,
res
)
{
let
reqConf
=
{
id
:
'String'
};
//这里可以填0
let
{
id
}
=
eccReqParamater
(
reqConf
,
req
.
body
);
let
result
=
await
i18nRegisterBiz
.
selectI18nRegisterInfo
(
id
);
res
.
success
(
result
);
...
...
@@ -121,7 +122,7 @@ async function deleteRegister(req, res) {
let
{
id
}
=
eccReqParamater
(
reqConf
,
req
.
body
);
const
Uscc
=
req
.
headers
.
uscc
;
let
result
=
await
i18nRegisterBiz
.
deleteI18nRegisterInfo
(
id
);
let
result
=
await
i18nRegisterBiz
.
deleteI18nRegisterInfo
(
Uscc
,
id
);
res
.
success
(
result
);
...
...
@@ -264,7 +265,7 @@ async function deleteICR(req, res) {
let
{
id
}
=
eccReqParamater
(
reqConf
,
req
.
body
);
const
Uscc
=
req
.
headers
.
uscc
;
let
result
=
await
icrBiz
.
deleteIcr
(
id
);
let
result
=
await
icrBiz
.
deleteIcr
(
Uscc
,
id
);
res
.
success
(
result
);
...
...
@@ -341,7 +342,7 @@ async function deleteStartupTeacher(req, res) {
let
{
id
}
=
eccReqParamater
(
reqConf
,
req
.
body
);
const
Uscc
=
req
.
headers
.
uscc
;
let
result
=
await
startupTeacherBiz
.
deleteStartUpTeacher
(
id
);
let
result
=
await
startupTeacherBiz
.
deleteStartUpTeacher
(
Uscc
,
id
);
res
.
success
(
result
);
...
...
@@ -420,7 +421,7 @@ async function deleteZJBeyondLayout(req, res) {
let
{
id
}
=
eccReqParamater
(
reqConf
,
req
.
body
);
const
Uscc
=
req
.
headers
.
uscc
;
let
result
=
await
zjBeyondLayoutBiz
.
deleteZJBeyondLayout
(
id
);
let
result
=
await
zjBeyondLayoutBiz
.
deleteZJBeyondLayout
(
Uscc
,
id
);
res
.
success
(
result
);
}
...
...
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