Commit cbbc26e6 by chenjinjing

no message

parent 3b98ca75
......@@ -3,7 +3,7 @@ import { ERRORENUM } from "../config/errorEnum";
import { CLIENTMAILTYPE } from "../config/outPutConfig";
import { TABLEENUM } from "../data/models/model";
import { findOnce } from "../data/select";
import { successErrorResult, successResult } from "../tools/system";
import { generateSMSCode, successErrorResult, successResult } from "../tools/system";
import { BizError } from "../util/bizError";
import { eccEnumValue } from "../util/verificationEnum";
......@@ -33,8 +33,8 @@ let transporter = nodemailer.createTransport({
async function send(toMail, name, type) {
let {title, mailStr} = getModel(name, type);
async function send(toMail, name, type, code?) {
let {title, mailStr} = getModel(name, type, code);
// 设置邮件选项
let mailOptions = {
from: '学会办公室 <cefa_office@163.com>', // 发送者地址
......@@ -63,7 +63,7 @@ await systemSendMail(userInfo.userId, MAILTYPE.审核期间驳回通知 );
*/
function getModel(name, type) {
function getModel(name, type, code?) {
let str = "";
let title = "";
switch (type) {
......@@ -119,6 +119,10 @@ function getModel(name, type) {
str = "您的会费退款已处理,请登陆会员网站重新缴纳会费。";
title = "退款处理";
break;
case MAILTYPE.邮箱获取验证码:
str = `您的验证码为:${code},请勿泄露于他人!`;
title = "验证码";
break;
}
let mailStr = ""
......@@ -145,7 +149,7 @@ function getModel(name, type) {
* @returns
*/
export async function sendMail({id, type}) {
return;
// return;
eccEnumValue("发送邮件", "邮件类型", CLIENTMAILTYPE, type);
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id}, ["userId", "name", "unitName", "memberType", "mail"]);
......@@ -178,4 +182,35 @@ export async function systemSendMail(userId, type) {
}
return successResult();
}
\ No newline at end of file
}
/**
* 发送验证码邮件
* @param param0
* @returns
*/
export async function sendVerificationCode(userId, mail, type, code) {
let userInfo = await findOnce(TABLEENUM.用户表, {userId:userId, mail}, ["userId", "name", "unitName", "memberType", "mail"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.用户不存在);
if (!userInfo.mail) {
new BizError(ERRORENUM.该用户邮箱为空, userId, userInfo.name || userId.unitName);
} else {
if (userInfo.mail != mail) {
new BizError(ERRORENUM.该用户邮箱与输入邮箱不匹配, userId, userInfo.name || userId.unitName);
}
let nameStr = userInfo.memberType == MEMBERTYPE.个人会员 ? userInfo.name : userInfo.unitName;
let result = await send(mail, nameStr, type, code);
}
return successResult();
}
......@@ -2,7 +2,7 @@
* 用户逻辑
*/
import { ADMINTYPE, CODETYPE, MEMBERSTATE, MEMBERTYPE, REGISTERSTART, STATE, UNITMEMBERTYPE, USERREGISTERSTATE } from "../../config/enum";
import { ADMINTYPE, CODETYPE, MAILTYPE, MEMBERSTATE, MEMBERTYPE, REGISTERSTART, STATE, UNITMEMBERTYPE, USERREGISTERSTATE } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { addOneData } from "../../data/add";
import { TABLEENUM } from "../../data/models/model";
......@@ -11,6 +11,7 @@ import { updateOneData } from "../../data/update";
import { generateSMSCode, generateToken, getTodayMs, successResult } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { changeEnumValue } from "../../util/verificationEnum";
import { sendMail, sendVerificationCode } from "../mail";
import { sendALSMS } from "../sms";
......@@ -215,3 +216,83 @@ export async function memberChangePwdSendCode({userId, phone}) {
}
/**
* 修改密码【邮箱验证码】 success
* @param userId
* @param phone
* @returns
*/
export async function memberMailChangePwdSendCode({userId, mail}) {
if (!userId) {
let userInfo = await findOnce(TABLEENUM.用户表, {mail}, ["userId", "name", "unitName", "mail"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.不存在该邮箱的账号);
const NowMs = new Date().valueOf();
let codeSelectParam = { mail, isUse:false, type:CODETYPE.修改密码, sendMs:{"$gt":getTodayMs()} }
let lastCodeInfo = await findOnceToSort(TABLEENUM.验证码表, codeSelectParam, {sendMs:-1});
if (lastCodeInfo && lastCodeInfo.codeNum) {
if ( (lastCodeInfo.sendMs + (60*1000)) > NowMs ) throw new BizError(ERRORENUM.频繁操作请稍后再试);
/**校验今日同类型验证码次数 */
let todayNotUseCount = await findCount(TABLEENUM.验证码表, codeSelectParam);
if (todayNotUseCount >= 4) throw new BizError(ERRORENUM.发送验证码次数超限制, `${mail} 注册验证码超过限制3`);
}
const Code = generateSMSCode();//生成短信验证码
/**发送邮件验证码模块 */
await sendVerificationCode(userId, mail, MAILTYPE.邮箱获取验证码, Code);
// await sendALSMS(Code, mail);
let addInfo = {codeNum:Code, mail, sendMs:NowMs, type:CODETYPE.修改密码, isUse:false};
await addOneData(TABLEENUM.验证码表, addInfo);
return {code:""};
}
let userInfo = await findOnce(TABLEENUM.用户表, {userId}, ["userId", "isInput" ,"inputUserChangePwd", "phone", "memberType", "unitMemberType", "mail"]);
if (!userInfo.userId) {
throw new BizError(ERRORENUM.账号不存在)
}
if (userInfo.isInput && userInfo.inputUserChangePwd == false && userInfo.memberType == MEMBERTYPE.单位会员 && userInfo.unitMemberType == UNITMEMBERTYPE.院校) {
//首次修改密码
const NowMs = new Date().valueOf();
let codeSelectParam = { mail, isUse:false, type:CODETYPE.修改密码, sendMs:{"$gt":getTodayMs()} };
let lastCodeInfo = await findOnceToSort(TABLEENUM.验证码表, codeSelectParam, {sendMs:-1});
if (lastCodeInfo && lastCodeInfo.codeNum) {
if ( (lastCodeInfo.sendMs + (60*1000)) > NowMs ) throw new BizError(ERRORENUM.频繁操作请稍后再试);
/**校验今日同类型验证码次数 */
let todayNotUseCount = await findCount(TABLEENUM.验证码表, codeSelectParam);
if (todayNotUseCount >= 4) throw new BizError(ERRORENUM.发送验证码次数超限制, `${mail} 注册验证码超过限制3`);
}
const Code = generateSMSCode();//生成短信验证码
/**发送短信模块 */
await sendVerificationCode(userId, mail, MAILTYPE.邮箱获取验证码, Code);
let addInfo = {codeNum:Code, mail, sendMs:NowMs, type:CODETYPE.修改密码, isUse:false};
await addOneData(TABLEENUM.验证码表, addInfo);
return {code:""};
} else {
//非导入用户
if (mail != userInfo.mail) throw new BizError(ERRORENUM.与预览邮箱不一致);
const NowMs = new Date().valueOf();
let codeSelectParam = { mail, isUse:false, type:CODETYPE.修改密码, sendMs:{"$gt":getTodayMs()} };
let lastCodeInfo = await findOnceToSort(TABLEENUM.验证码表, codeSelectParam, {sendMs:-1});
if (lastCodeInfo && lastCodeInfo.codeNum) {
if ( (lastCodeInfo.sendMs + (60*1000)) > NowMs ) throw new BizError(ERRORENUM.频繁操作请稍后再试);
/**校验今日同类型验证码次数 */
let todayNotUseCount = await findCount(TABLEENUM.验证码表, codeSelectParam);
if (todayNotUseCount >= 4) throw new BizError(ERRORENUM.发送验证码次数超限制, `${mail} 注册验证码超过限制3`);
}
const Code = generateSMSCode();//生成邮件验证码
/**发送邮件验证码模块 */
await sendVerificationCode(userId, mail, MAILTYPE.邮箱获取验证码, Code);
let addInfo = {codeNum:Code, mail, sendMs:NowMs, type:CODETYPE.修改密码, isUse:false};
await addOneData(TABLEENUM.验证码表, addInfo);
return {code:""};
}
}
......@@ -882,7 +882,8 @@ export enum MAILTYPE {
变更驳回,
变更已通过,
会员活动or会议通知,
财务退款通知
财务退款通知,
邮箱获取验证码
}
......
......@@ -80,7 +80,10 @@ export enum ERRORENUM {
请先付款后进行发票操作,
短信发送失败,
用户不存在,
该用户邮箱为空
该用户邮箱为空,
该用户邮箱与输入邮箱不匹配,
与预览邮箱不一致,
不存在该邮箱的账号
}
export enum ERRORCODEENUM {
......
......@@ -263,6 +263,7 @@ export enum MEMBERPAYMENTCOLUMNS {
export enum CLIENTMAILTYPE {
会员会费到期缴费通知 = 6,
会员催缴通知提前开发票 = 7,
会员活动or会议通知 = 12
会员活动or会议通知 = 12,
会员修改密码 = 15,
}
......@@ -470,8 +470,16 @@ export const Config = {
{key:"phone", type:"String", desc:"绑定手机号"}
],
bindBiz:userBiz.memberChangePwdSendCode
},
{
},{
apiName:"修改密码用邮件验证码",
subUrl:'/getmailchangepwdcode',
notMiddleware:true,
param:[
{key:"userId", type:"String", desc:"userId", isNull:true},
{key:"mail", type:"String", desc:"绑定邮箱"}
],
bindBiz:userBiz.memberMailChangePwdSendCode
},{
apiName:"获取个人基础信息",
subUrl:'/memberdb/systembase',
param:[],
......
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