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
5030dfac
Commit
5030dfac
authored
Mar 16, 2024
by
lixinming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
681962af
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
273 additions
and
0 deletions
+273
-0
register.ts
src/biz/register.ts
+273
-0
No files found.
src/biz/register.ts
0 → 100644
View file @
5030dfac
/**
* 注册流程
*/
import
{
BANXUELEIXING
,
CODETYPE
,
DOCUMENTTYPE
,
MEMBERLEVEL
,
MEMBERTYPE
,
NATION
,
OPERATIONREHAVIOR
,
PROFCATEGORY
,
REGISTERFLOW
,
SEX
,
STATE
,
UNITINFOTYPE
,
USERREGISTERSTATE
}
from
"../config/enum"
;
import
{
ERRORENUM
}
from
"../config/errorEnum"
;
import
{
addManyData
,
addOneData
}
from
"../data/add"
;
import
{
TABLEENUM
}
from
"../data/models/model"
;
import
{
findCount
,
findOnce
,
findOnceToSort
}
from
"../data/select"
;
import
{
updateOneData
}
from
"../data/update"
;
import
*
as
sysTools
from
"../tools/system"
;
import
{
BizError
}
from
"../util/bizError"
;
import
{
extractData
}
from
"../util/piecemeal"
;
import
{
eccEnumValue
}
from
"../util/verificationEnum"
;
/**
* 会员注册【个人会员】【流程一】success
* @param form
*/
export
async
function
memberRegister1
({
form
})
{
let
{
loginId
,
mail
,
pwd
,
confirmation
,
phone
,
codeNum
}
=
form
;
const
NowMs
=
new
Date
().
valueOf
();
/**校验密码 */
if
(
pwd
.
search
(
/^
[
A-Za-z0-9
]{6,18}
$/
)
<
0
)
throw
new
BizError
(
ERRORENUM
.
密码只能由
6
至
18
位字符和数字组成
);
if
(
pwd
!=
confirmation
)
throw
new
BizError
(
ERRORENUM
.
两次密码不一致
);
/**校验去重 */
let
oldData
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
"$or"
:[{
loginId
:
loginId
},
{
phone
:
phone
},
{
mail
:
mail
}]
});
if
(
oldData
&&
oldData
.
userId
)
{
if
(
oldData
.
loginId
==
loginId
)
throw
new
BizError
(
ERRORENUM
.
用户名重复
,
loginId
);
if
(
oldData
.
phone
==
phone
)
throw
new
BizError
(
ERRORENUM
.
联系人手机号重复
,
phone
);
if
(
oldData
.
mail
==
mail
)
throw
new
BizError
(
ERRORENUM
.
邮箱重复
,
loginId
);
}
/**比对验证码 */
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
userId
=
sysTools
.
generateUserId
();
//系统生成唯一id
let
addInfo
=
{
userId
,
memberType
:
MEMBERTYPE
.
个人会员
,
isAdmin
:
STATE
.
否
,
registerFlow
:
REGISTERFLOW
.
完成第一步
,
//会员注册流程状态
askForTime
:
NowMs
,
//申请时间
loginId
,
mail
,
pwd
,
phone
,
};
await
addOneData
(
TABLEENUM
.
用户表
,
addInfo
);
await
updateOneData
(
TABLEENUM
.
验证码表
,
{
phone
,
code
:
codeNum
,
isUse
:
false
},
{
isUse
:
true
});
return
{
userId
}
}
/**
* 会员注册【个人会员】【流程二】success
* @param form
* @param userId
* @returns
*/
export
async
function
memberRegister2
({
form
,
userId
})
{
/**校验用户是否存在 */
let
selectUserFiles
=
[
"userId"
,
"registerFlow"
,
"userRegisterState"
];
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
,
memberType
:
MEMBERTYPE
.
个人会员
,
isAdmin
:
STATE
.
否
},
selectUserFiles
);
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
if
(
oldInfo
.
registerFlow
!=
REGISTERFLOW
.
完成第一步
)
throw
new
BizError
(
ERRORENUM
.
重复提交
);
let
operationBehavior
=
0
;
if
(
oldInfo
.
userRegisterState
!=
USERREGISTERSTATE
.
待审核
&&
oldInfo
.
userRegisterState
!=
USERREGISTERSTATE
.
驳回修改
)
{
throw
new
BizError
(
ERRORENUM
.
数据状态错误
);
}
/**判断是否第一次提交审核 并更新状态*/
let
remarks
=
"第一次提交"
;
if
(
oldInfo
.
userRegisterState
==
USERREGISTERSTATE
.
待审核
)
operationBehavior
=
OPERATIONREHAVIOR
.
用户提交
else
{
//驳回
operationBehavior
=
OPERATIONREHAVIOR
.
重新提交
;
form
.
userRegisterState
=
USERREGISTERSTATE
.
重新提交
;
remarks
=
"重新提交"
;
}
/**校验枚举 */
const
EccFuncName
=
'注册个人会员流程2'
;
eccEnumValue
(
EccFuncName
,
'性别'
,
SEX
,
form
.
sex
);
eccEnumValue
(
EccFuncName
,
'证件类型'
,
DOCUMENTTYPE
,
form
.
documentType
);
eccEnumValue
(
EccFuncName
,
'民族'
,
NATION
,
form
.
nation
);
eccEnumValue
(
EccFuncName
,
'专业类别'
,
PROFCATEGORY
,
form
.
profCategory
);
eccEnumValue
(
EccFuncName
,
'会员等级职务'
,
MEMBERLEVEL
,
form
.
memberLevel
);
//更新注册流程
form
.
registerFlow
=
REGISTERFLOW
.
完成第二步
;
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
form
);
/**提交审批历史信息 */
let
addApprovalHistory
=
{
userId
,
operationTime
:
new
Date
().
valueOf
(),
operationBehavior
:
operationBehavior
,
remarks
:
`个人会员
${
remarks
}
`
};
await
addOneData
(
TABLEENUM
.
审批历史表
,
addApprovalHistory
);
return
{
userId
};
}
/**
* 会员注册【单位会员】【流程一】success
* @param form
*/
export
async
function
unitMemberRegister1
({
form
})
{
let
{
loginId
,
mail
,
pwd
,
confirmation
,
phone
,
codeNum
}
=
form
;
const
NowMs
=
new
Date
().
valueOf
();
/**校验密码 */
if
(
pwd
.
search
(
/^
[
A-Za-z0-9
]{6,18}
$/
)
<
0
)
throw
new
BizError
(
ERRORENUM
.
密码只能由
6
至
18
位字符和数字组成
);
if
(
pwd
!=
confirmation
)
throw
new
BizError
(
ERRORENUM
.
两次密码不一致
);
/**校验去重 */
let
oldData
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
"$or"
:[{
loginId
:
loginId
},
{
phone
:
phone
},
{
mail
:
mail
}]
});
if
(
oldData
&&
oldData
.
userId
)
{
if
(
oldData
.
loginId
==
loginId
)
throw
new
BizError
(
ERRORENUM
.
用户名重复
,
loginId
);
if
(
oldData
.
phone
==
phone
)
throw
new
BizError
(
ERRORENUM
.
联系人手机号重复
,
phone
);
if
(
oldData
.
mail
==
mail
)
throw
new
BizError
(
ERRORENUM
.
邮箱重复
,
loginId
);
}
/**比对验证码 */
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
userId
=
sysTools
.
generateUserId
();
let
addInfo
=
{
userId
,
memberType
:
MEMBERTYPE
.
单位会员
,
isAdmin
:
STATE
.
否
,
//是否管理员
registerFlow
:
REGISTERFLOW
.
完成第一步
,
//会员注册流程状态
askForTime
:
NowMs
,
//申请时间
loginId
,
mail
,
pwd
,
phone
};
await
addOneData
(
TABLEENUM
.
用户表
,
addInfo
);
/**修改验证码状态为已使用 */
await
updateOneData
(
TABLEENUM
.
验证码表
,
{
phone
,
code
:
codeNum
,
isUse
:
false
},
{
isUse
:
true
});
return
{
userId
};
}
/**
* 会员注册【单位会员】【流程二】success
* @param form 表单
* @param keyanForm 科研表单
* @param userId
* @returns
*/
export
async
function
unitMemberRegister2
({
form
,
keyanForm
,
userId
})
{
let
selectUserFiles
=
[
"userId"
,
"registerFlow"
,
"userRegisterState"
];
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
,
memberType
:
MEMBERTYPE
.
单位会员
,
isAdmin
:
STATE
.
否
},
selectUserFiles
);
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
if
(
oldInfo
.
registerFlow
!=
REGISTERFLOW
.
完成第一步
)
throw
new
BizError
(
ERRORENUM
.
重复提交
);
if
(
oldInfo
.
userRegisterState
!=
USERREGISTERSTATE
.
待审核
&&
oldInfo
.
userRegisterState
!=
USERREGISTERSTATE
.
驳回修改
)
{
throw
new
BizError
(
ERRORENUM
.
数据状态错误
);
}
/**校验枚举 */
const
EccFuncName
=
'注册单位会员流程2'
;
eccEnumValue
(
EccFuncName
,
'专业类别'
,
PROFCATEGORY
,
form
.
profCategory
);
eccEnumValue
(
EccFuncName
,
'院校办学类型'
,
BANXUELEIXING
,
form
.
yuanXiaoBanXueLeiXing
);
eccEnumValue
(
EccFuncName
,
'单位信息类型'
,
UNITINFOTYPE
,
form
.
unitInfoType
);
form
.
registerFlow
=
REGISTERFLOW
.
完成第二步
;
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
form
);
/**注册提交单位科研成果信息 */
let
addList
=
[];
for
(
let
i
=
0
;
i
<
keyanForm
.
length
;
i
++
)
{
keyanForm
[
i
].
id
=
sysTools
.
generateSystemId
(
TABLEENUM
.
单位所获得科研成果表
,
userId
);
keyanForm
[
i
].
userId
=
userId
;
addList
.
push
(
keyanForm
[
i
]);
}
await
addOneData
(
TABLEENUM
.
单位所获得科研成果表
,
addList
);
return
sysTools
.
successResult
();
}
/**
* 会员注册【单位会员】【流程三】success
* @param application 入会申请表地址
* @param userId
*/
export
async
function
unitMemberRegister3
({
application
,
userId
})
{
let
selectUserFiles
=
[
"userId"
,
"registerFlow"
,
"userRegisterState"
,
"application"
];
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
,
memberType
:
MEMBERTYPE
.
单位会员
,
isAdmin
:
STATE
.
否
},
selectUserFiles
);
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
if
(
oldInfo
.
registerFlow
!=
REGISTERFLOW
.
完成第二步
)
throw
new
BizError
(
ERRORENUM
.
重复提交
);
if
(
oldInfo
.
memberType
!=
MEMBERTYPE
.
单位会员
)
throw
new
BizError
(
ERRORENUM
.
流程
3
不支持会员身份非单位会员
);
/**判断是否第一次提交审核 并更新状态*/
let
operationBehavior
=
0
;
let
userRegisterState
=
USERREGISTERSTATE
.
待审核
;
let
remarks
=
"第一次提交"
;
if
(
oldInfo
.
userRegisterState
==
USERREGISTERSTATE
.
待审核
)
operationBehavior
=
OPERATIONREHAVIOR
.
用户提交
else
{
//驳回
operationBehavior
=
OPERATIONREHAVIOR
.
重新提交
;
userRegisterState
=
USERREGISTERSTATE
.
重新提交
;
remarks
=
"重新提交"
;
}
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
{
userRegisterState
,
application
,
registerFlow
:
REGISTERFLOW
.
完成第三步
});
/**提交审批历史信息 */
let
addApprovalHistory
=
{
id
:
sysTools
.
generateSystemId
(
TABLEENUM
.
审批历史表
,
userId
),
userId
,
operationTime
:
new
Date
().
valueOf
(),
operationBehavior
:
operationBehavior
,
remarks
:
`单位会员
${
remarks
}
`
};
await
addManyData
(
TABLEENUM
.
审批历史表
,
addApprovalHistory
);
return
sysTools
.
successResult
();
}
/**
* 获取当前会员注册流程
* registerFlow:注册流程状态 REGISTERFLOW 会员注册流程步骤
* userRegisterState:用户注册状态 USERREGISTERSTATE 会员注册是否已审批通过
* 前端通过该方法获取注册流程状态,流程1通过返回状态【完成第一步】,流程2通过返回状态【完成第二步】,流程3通过返回状态【完成第三步】
*/
export
async
function
registerFlowType
({
userId
})
{
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
,
isAdmin
:
STATE
.
否
},
[
"userId"
,
"registerFlow"
,
"userRegisterState"
]);
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
if
(
oldInfo
.
userRegisterState
==
USERREGISTERSTATE
.
通过
)
throw
new
BizError
(
ERRORENUM
.
用户已注册成功
);
let
dataInfo
:
any
=
extractData
(
oldInfo
,
[
"userId"
,
"registerFlow"
,
"userRegisterState"
]);
return
{
dataInfo
};
}
/**
* 会员注册【短信验证码】 success
* @param userId
* @param phone
* @returns
*/
export
async
function
memberRegisterSendCode
({
phone
})
{
const
NowMs
=
new
Date
().
valueOf
();
let
codeSelectParam
=
{
phone
,
isUse
:
false
,
type
:
CODETYPE
.
用户注册
,
sendMs
:{
"$gt"
:
sysTools
.
getTodayMs
()}
}
let
lastCodeInfo
=
await
findOnceToSort
(
TABLEENUM
.
验证码表
,
codeSelectParam
,
{
sendMs
:
-
1
});
if
(
lastCodeInfo
.
code
)
{
if
(
(
lastCodeInfo
.
sendMs
+
(
60
*
1000
))
>
NowMs
)
throw
new
BizError
(
ERRORENUM
.
频繁操作请稍后再试
);
/**校验今日同类型验证码次数 */
let
todayNotUseCount
=
await
findCount
(
TABLEENUM
.
验证码表
,
codeSelectParam
);
if
(
todayNotUseCount
>=
4
)
throw
new
BizError
(
ERRORENUM
.
发送验证码次数超限制
,
`
${
phone
}
注册验证码超过限制3`
);
}
const
Code
=
sysTools
.
generateSMSCode
();
//生成短信验证码
let
addInfo
=
{
code
:
Code
,
phone
,
sendMs
:
NowMs
,
type
:
CODETYPE
.
用户注册
,
isUse
:
false
};
await
addOneData
(
TABLEENUM
.
验证码表
,
addInfo
);
return
{
code
:
Code
};
}
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