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