Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wenHuaBu_adminServer
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
wenHuaBu_adminServer
Commits
bfba43ce
Commit
bfba43ce
authored
Mar 16, 2024
by
lixinming
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://123.207.147.179:8888/node_server/wenHuaBu_adminServer
parents
78ccfffb
5287c882
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
95 additions
and
90 deletions
+95
-90
member.ts
src/biz/member/member.ts
+48
-37
model.ts
src/data/models/model.ts
+47
-53
No files found.
src/biz/member/member.ts
View file @
bfba43ce
...
...
@@ -2,7 +2,7 @@
* 会员逻辑
*/
import
{
MEMBERSTATE
,
MEMBERLEVEL
,
DOCUMENTTYPE
,
NATION
,
PROFCATEGORY
,
CODETYPE
,
UNITINFOTYPE
,
MEMBERTYPE
,
REGISTERFLOW
,
SEX
,
USERREGISTERSTATE
,
OPERATIONREHAVIOR
,
STATE
}
from
"../../config/enum"
;
import
{
MEMBERSTATE
,
MEMBERLEVEL
,
DOCUMENTTYPE
,
NATION
,
PROFCATEGORY
,
CODETYPE
,
UNITINFOTYPE
,
MEMBERTYPE
,
REGISTERFLOW
,
SEX
,
USERREGISTERSTATE
,
OPERATIONREHAVIOR
,
STATE
,
BANXUELEIXING
}
from
"../../config/enum"
;
import
{
ERRORENUM
}
from
"../../config/errorEnum"
;
import
{
TABLEENUM
}
from
"../../data/models/model"
;
import
{
find
,
findCount
,
findOnce
,
findOnceToSort
,
findToPage
,
findToSort
}
from
"../../data/select"
;
...
...
@@ -248,10 +248,11 @@ export async function individualMemberDetails({userId}) {
if
(
pwd
!=
confirmation
)
throw
new
BizError
(
ERRORENUM
.
两次密码不一致
);
/**校验去重 */
let
oldData
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
"$or"
:[{
loginId
:
form
.
loginId
},
{
phone
:
form
.
phone
}]
});
let
oldData
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
"$or"
:[{
loginId
:
form
.
loginId
},
{
phone
:
form
.
phone
}
,
{
mail
:
form
.
mail
}
]
});
if
(
oldData
&&
oldData
.
userId
)
{
if
(
oldData
.
loginId
==
loginId
)
throw
new
BizError
(
ERRORENUM
.
用户名重复
,
form
.
loginId
);
if
(
oldData
.
phone
==
phone
)
throw
new
BizError
(
ERRORENUM
.
联系人手机号重复
,
form
.
phone
);
if
(
oldData
.
mail
==
form
.
mail
)
throw
new
BizError
(
ERRORENUM
.
邮箱重复
,
form
.
loginId
);
}
/**比对验证码 */
...
...
@@ -280,8 +281,8 @@ export async function individualMemberDetails({userId}) {
/**
* 会员注册【个人会员】【流程2】success
* @param userId
* @param form
* @param userId
* @returns
*/
export
async
function
memberRegister2
({
form
,
userId
})
{
...
...
@@ -289,7 +290,7 @@ export async function memberRegister2({form, userId}) {
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
/**校验枚举 */
const
EccFuncName
=
'注册个人会员'
;
const
EccFuncName
=
'注册个人会员
流程2
'
;
eccEnumValue
(
EccFuncName
,
'性别'
,
SEX
,
form
.
sex
);
eccEnumValue
(
EccFuncName
,
'证件类型'
,
DOCUMENTTYPE
,
form
.
documentType
);
eccEnumValue
(
EccFuncName
,
'民族'
,
NATION
,
form
.
nation
);
...
...
@@ -302,10 +303,11 @@ export async function memberRegister2({form, userId}) {
/**用户提交注册申请,等待审核 */
let
approvalHistoryInfo
=
await
find
(
TABLEENUM
.
审批历史表
,
{
userId
});
let
operationBehavior
;
/**判断 */
/**判断
是否第一次提交审核
*/
if
(
approvalHistoryInfo
.
length
>
1
)
operationBehavior
=
OPERATIONREHAVIOR
.
重新提交
;
else
operationBehavior
=
OPERATIONREHAVIOR
.
用户提交
;
/**提交审批历史信息 */
let
now
=
new
Date
().
valueOf
();
let
addApprovalHistory
=
{
id
:
generateSystemId
(
TABLEENUM
.
审批历史表
,
userId
),
...
...
@@ -321,10 +323,18 @@ export async function memberRegister2({form, userId}) {
/**
* 单位入会流程1
* @param secureArgs
* 会员注册【单位会员】【流程一】success
* @param form
* @param codeId
*/
export
async
function
unitMemberRegister1
({
form
,
codeId
})
{
export
async
function
unitMemberRegister1
({
form
})
{
let
{
loginId
,
mail
,
pwd
,
confirmation
,
phone
,
codeNum
}
=
form
;
const
NowMs
=
new
Date
().
valueOf
();
/**校验密码 */
if
(
form
.
pwd
.
search
(
/^
[
A-Za-z0-9
]{6,18}
$/
)
<
0
)
throw
new
BizError
(
ERRORENUM
.
密码只能由
6
至
18
位字符和数字组成
);
if
(
form
.
pwd
!=
form
.
confirmation
)
throw
new
BizError
(
ERRORENUM
.
两次密码不一致
);
/**校验去重 */
let
oldData
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
"$or"
:[{
loginId
:
form
.
loginId
},
{
phone
:
form
.
phone
},
{
mail
:
form
.
mail
}]
});
if
(
oldData
&&
oldData
.
userId
)
{
if
(
oldData
.
loginId
==
form
.
loginId
)
throw
new
BizError
(
ERRORENUM
.
用户名重复
,
form
.
loginId
);
...
...
@@ -332,52 +342,53 @@ export async function memberRegister2({form, userId}) {
if
(
oldData
.
mail
==
form
.
mail
)
throw
new
BizError
(
ERRORENUM
.
邮箱重复
,
form
.
loginId
);
}
/**校验密码 */
if
(
form
.
pwd
.
search
(
/^
[
A-Za-z0-9
]{6,18}
$/
)
<
0
)
throw
new
BizError
(
ERRORENUM
.
密码只能由
6
至
18
位字符和数字组成
);
if
(
form
.
pwd
!=
form
.
confirmation
)
throw
new
BizError
(
ERRORENUM
.
两次密码不一致
);
form
.
userId
=
sysTools
.
generateUserId
();
form
.
memberType
=
MEMBERTYPE
.
单位会员
;
form
.
isAdmin
=
0
;
form
.
registerFlow
=
REGISTERFLOW
.
单位会员注册
1
;
//todo 会员注册流程状态,审核通过后修改为流程2
// let todayMs = sysTools.getTodayMs();
let
codeList
=
await
findOnce
(
TABLEENUM
.
验证码表
,
{
codeId
});
let
now
=
new
Date
().
valueOf
();
/**比对验证码 */
let
codeInfo
=
await
findOnceToSort
(
TABLEENUM
.
验证码表
,
{
phone
,
isUse
:
false
,
type
:
CODETYPE
.
用户注册
,
sendMs
:{
"$gt"
:
sysTools
.
getTodayMs
()
}},
{
sendMs
:
-
1
});
if
(
!
codeInfo
)
throw
new
BizError
(
ERRORENUM
.
code
无效
,
`
${
phone
}
在注册时,code表中不存在该手机号的验证码`
);
if
(
codeInfo
!=
codeNum
)
throw
new
BizError
(
ERRORENUM
.
验证码错误
,
`
${
phone
}
不存在
${
codeNum
}
`
);
if
((
codeInfo
.
sendMs
+
(
30
*
60
*
1000
)
)
<
NowMs
)
throw
new
BizError
(
ERRORENUM
.
验证码过期
);
let
msg
=
ERRORENUM
.
验证码错误
;
if
(
codeList
.
codeNum
==
form
.
codeNum
)
{
if
(
codeList
.
isUse
)
msg
=
ERRORENUM
.
验证码失效
;
else
if
(
(
now
-
codeList
.
sendMs
)
>
(
30
*
60
*
1000
)
)
msg
=
ERRORENUM
.
验证码过期
}
/**初始化账号信息 */
let
userId
=
sysTools
.
generateUserId
();
let
addInfo
=
{
userId
,
memberType
:
MEMBERTYPE
.
单位会员
,
isAdmin
:
STATE
.
否
,
//是否管理员
registerFlow
:
REGISTERFLOW
.
完成第一步
,
//会员注册流程状态
askForTime
:
NowMs
,
//申请时间
loginId
,
mail
,
pwd
,
phone
};
await
addOneData
(
TABLEENUM
.
用户表
,
addInfo
);
if
(
!
codeId
)
throw
new
BizError
(
msg
,
`userId:
${
form
.
userId
}
单位入会注册流程1的code:
${
form
.
code
}
`
);
/**修改验证码状态为已使用 */
await
updateOneData
(
TABLEENUM
.
验证码表
,
{
codeId
},
{
isUse
:
true
});
await
addOneData
(
TABLEENUM
.
用户表
,
form
);
await
updateOneData
(
TABLEENUM
.
验证码表
,
{
phone
,
code
:
codeNum
,
isUse
:
false
},
{
isUse
:
true
});
return
successResult
()
;
return
{
userId
}
;
}
/**
* 单位入会流程2
* @param form 表单
* @param keyanForm 科研表单
* @param userId
* @param secureArgs
* @returns
*/
export
async
function
unitMemberRegister2
({
form
,
keyanForm
,
userId
})
{
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
});
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
form
.
registerFlow
=
REGISTERFLOW
.
单位会员注册
2
;
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
form
);
/**校验枚举 */
const
EccFuncName
=
'注册单位会员流程2'
;
eccEnumValue
(
EccFuncName
,
'专业类别'
,
PROFCATEGORY
,
form
.
profCategory
);
eccEnumValue
(
EccFuncName
,
'院校办学类型'
,
BANXUELEIXING
,
form
.
yuanXiaoBanXueLeiXing
);
eccEnumValue
(
EccFuncName
,
'单位信息类型'
,
UNITINFOTYPE
,
form
.
unitInfoType
);
// let unitInfo = await findOnce(TABLEENUM.用户表, {userId});
// let dataList = extractData(unitInfo, ["userId", "registerFlow"]
);
form
.
registerFlow
=
REGISTERFLOW
.
完成第二步
;
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
form
);
let
addList
=
[];
for
(
let
i
=
0
;
i
<
keyanForm
.
length
;
i
++
)
{
...
...
src/data/models/model.ts
View file @
bfba43ce
...
...
@@ -335,97 +335,91 @@ const ModelArray = [
askForTime
:
'Number'
,
//申请时间 第一步流程发起时间
auditTime
:
'Number'
,
//审核时间 会员审核列表审核时间
joinTime
:
'Number'
,
//入会时间 审核通过时间
memberType
:{
type
:
'Number'
},
//会员类型 MEMBERTYPE
memberType
:{
type
:
'Number'
},
//会员类型
枚举
MEMBERTYPE
lifespanStartTime
:
'Number'
,
//会员有效期开始时间 时间戳 每次缴费成功更新
lifespanEndTime
:
'Number'
,
//会员有效期结束时间 时间戳 每次缴费成功更新
token
:{
type
:
'String'
,
default
:
''
},
//token
tokenMs
:{
type
:
'Number'
,
default
:
0
},
//token过期时间
session
:
'String'
,
//届次
applicationForm
:
'String'
,
//入会申请表
paymentStatus
:
'Number'
,
//支付状态
/**状态枚举 */
registerFlow
:{
type
:
'Number'
,
default
:
REGISTERFLOW
.
未注册
},
//会员注册流程 枚举
isAdmin
:{
type
:
'Number'
,
default
:
STATE
.
否
},
//是否是管理员
userRegisterState
:{
type
:
'Number'
,
default
:
USERREGISTERSTATE
.
待审核
},
//用户注册状态 枚举USERREGISTERSTATE
documentType
:
'Number'
,
//证件类型 枚举DOCUMENTTYPE
memberState
:{
type
:
'Number'
,
default
:
MEMBERSTATE
.
正常
},
//会员状态 枚举MEMBERSTATE
individualMemberType
:{
type
:
'Number'
},
//个人会员类型 枚举INDIVIDUALMEMBERTYPE
memberLevel
:
'Number'
,
//会员等级、职务 枚举MEMBERLEVEL
unitMemberType
:{
type
:
'Number'
},
//单位会员类型 枚举UNITMEMBERTYPE
profCategory
:
'Number'
,
//专业类别 枚举PROFCATEGORY
certificateType
:
'Number'
,
//证书类型 枚举
/**宽限期状态 */
isGracePeriod
:{
type
:
'Number'
,
default
:
0
},
//是否宽限期 0:否, 1:是
gracePeriodEndTime
:
'Number'
,
//宽限期到期时间 时间戳
/**第一步流程表单 */
loginId
:{
type
:
'String'
,
index
:
true
},
//用户名 可用作登陆
pwd
:{
type
:
'String'
},
//密码
phone
:{
type
:
'String'
,
index
:
true
},
//联系电话(登陆手机号)
可用作登陆
phone
:{
type
:
'String'
,
index
:
true
},
//联系电话(登陆手机号)可用作登陆
mail
:{
type
:
'String'
,
index
:
true
},
//邮箱
/**第二步流程表单(个人) */
unitMemberType
:{
type
:
'Number'
},
//单位会员类型
individualMemberType
:{
type
:
'Number'
},
//个人会员类型
/**第二步流程表单(个人)【基础信息】 */
name
:{
type
:
'String'
},
//真实姓名
token
:{
type
:
'String'
,
default
:
''
},
//token
tokenMs
:{
type
:
'Number'
,
default
:
0
},
//token过期时间
sex
:
'Number'
,
//性别 枚举
documentType
:
'Number'
,
//证件类型 枚举
documentId
:
'String'
,
//证件id 身份证
documentId
:
'String'
,
//证件号码 身份证
birth
:
'Number'
,
//出生年月 时间戳
nation
:
'Number'
,
//民族 枚举
sheng
:
'String'
,
//省
shi
:
'String'
,
//市
qu
:
'String'
,
//区
addres
:
'String'
,
//通信地址
sheng
:
'String'
,
//省 共用
shi
:
'String'
,
//市 共用
qu
:
'String'
,
//区 共用
addres
:
'String'
,
//通信地址 共用
education
:
'Number'
,
//学历
photoUrl
:
'String'
,
//证件照图片地址 蓝底证件照
/**第二步流程表单(个人)【专业信息】 */
workUnit
:
'String'
,
//工作单位
workTitle
:
'String'
,
//职称
session
:
'String'
,
//届次
memberLevel
:
'Number'
,
//会员等级、职务 枚举
certificateType
:
'Number'
,
//证书类型 枚举
education
:
'Number'
,
//学历
applicationForm
:
'String'
,
//入会申请表
studyResume
:
'String'
,
//学习简历
workResume
:
'String'
,
//工作简历
profAchievement
:
'String'
,
//专业成果
otherEMP
:
'String'
,
//其他任职情况
otherPROF
:
'String'
,
//其他专业情况
/**第二步流程表单(个人)【其他附件】 */
cardUrl
:{
type
:
'[String]'
,
default
:[]},
//身份证正反面图片地址
academicCERTUrl
:
'String'
,
//学历证明图片地址
professionalCERTUrl
:
'String'
,
//工作证明图片地址
auxiliaryMaterial
:{
type
:
'[String]'
,
default
:[]},
//其他辅助材料
/**发票信息【新加 待定】 */
//原社会信用代码
//原发票抬头
//新社会信用代码
//新发票抬头
/**第二步流程表单(单位)【基础信息】 */
unitName
:
'String'
,
//单位名称
uscc
:
'String'
,
//统一信用代码
legalPerson
:
'String'
,
//法人
legalPersonMail
:
'String'
,
//法人邮箱
legalPerson
:
'String'
,
//法人代表
legalPersonPhone
:
'String'
,
//法人代表联系电话
legalPersonMail
:
'String'
,
//法人邮箱
unitMail
:
'String'
,
//单位电子邮箱
contactPerson
:
'String'
,
//日常联系人
contactPersonDuties
:
'String'
,
//日常联系人职务
contactPersonPhone
:
'String'
,
//日常联系人手机
unitMail
:
'String'
,
//单位电子邮箱
contactPersonPhone
:
'String'
,
//日常联系人手机号码
uusinessLicenseUrl
:
'String'
,
//营业执照 图片地址
/**单位会员信息 */
unitInfoType
:
'Number'
,
//单位信息类型 枚举
yuanXiaoBanXueLeiXing
:
'Number'
,
//院校办学类型 枚举
/**第二步流程表单(单位)【单位信息】 */
unitInfoType
:
'Number'
,
//单位信息类型 枚举UNITINFOTYPE
yuanXiaoBanXueLeiXing
:
'Number'
,
//院校办学类型 枚举BANXUELEIXING
yuanXiaoZhuGuanBuMen
:
'String'
,
//院校主管部门
yuanXiaoFuZeRen
:
'String'
,
//院校主要负责人
yuanXiaoFuZeRenZhiWu
:
'String'
,
//院校主要负责人职务
yuanXiaoFuZeRenDianHua
:
'String'
,
//院校主要负责人电话
yuanXiaoBanGongFuZeRen
:
'String'
,
//院校办公负责人
yuanXiaoBanGongFuZeRenDianHua
:
'String'
,
//院校办公负责人电话
ZhuYaoFuZeRenYouXiang
:
'String'
,
//主要负责人邮箱
yuanXiaoKeYanFuZeRen
:
'String'
,
//院校科研负责人
yuanXiaoKeYanFuZeRenDianHua
:
'String'
,
//院校科研负责人电话
yuanXiaoXueShengZongRenShu
:
'String'
,
//学生总人数
yuanXiaoJiaoZhiGongZongRenShu
:
'String'
,
//教职工总人数
jiaoXueFuZeRenXinMing
:
'String'
,
//教学负责人姓名
yuanXiaoXueShengZongRenShu
:
'String'
,
//院校学生总人数
yuanXiaoJiaoZhiGongZongRenShu
:
'String'
,
//教职工总人数
jiaoXueFuZeRenDianHua
:
'String'
,
//教学负责人电话
ZhuYaoFuZeRenYouXiang
:
'String'
,
//主要负责人邮箱
/**个人会员信息 */
cardUrl
:{
type
:
'[String]'
,
default
:[]},
//身份证正反面图片地址
academicCERTUrl
:
'String'
,
//学历证明图片地址
professionalCERTUrl
:
'String'
,
//工作证明图片地址
auxiliaryMaterial
:{
type
:
'[String]'
,
default
:[]},
//其他辅助材料
profCategory
:
'Number'
,
//专业类别 枚举
studyResume
:
'String'
,
//学习简历
workResume
:
'String'
,
//工作简历
profAchievement
:
'String'
,
//专业成果
otherEMP
:
'String'
,
//其他任职情况
otherPROF
:
'String'
,
//其他专业情况
paymentStatus
:
'Number'
,
//支付状态
}
},
{
...
...
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