Commit 5030dfac by lixinming

no message

parent 681962af
/**
* 注册流程
*/
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.密码只能由618位字符和数字组成);
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.密码只能由618位字符和数字组成);
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};
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment