Commit 94a62cc6 by lixinming

no message

parent dc8b3b4b
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -25,7 +25,7 @@
"request": "^2.88.0",
"sequelize": "^6.35.2",
"svg-captcha": "^1.3.12",
"tencentcloud-sdk-nodejs": "^4.0.562",
"tencentcloud-sdk-nodejs": "^4.0.821",
"wechatpay-node-v3": "^2.2.0",
"ws": "^5.2.2",
"xml2js": "^0.4.23"
......@@ -46,7 +46,5 @@
],
"outputPath": "dist"
},
"devDependencies": {
"province-city-china": "^8.5.7"
}
"devDependencies": {}
}
......@@ -31,11 +31,13 @@ const pay = new WxPay({
* @returns
*/
export async function placeAnOrder({id}) {
let orderInfo = await findOnce(TABLEENUM.订单表, {id}, ["id", "loginId", "userId", "memberCategory", "money", "orderCycleStart", "orderCycleEnd","weChartState", "state", "weChartCreatePayMs"]);
let orderInfo = await findOnce(TABLEENUM.订单表, {id}, ["id", "loginId", "userId", "memberCategory", "money", "orderCycleStart", "orderCycleEnd","weChartState", "state", "weChartCreatePayMs", "weChartPayUrl", "weChartPR"]);
if (!orderInfo || !orderInfo.id) throw new BizError(ERRORENUM.订单不存在);
if (orderInfo.state == ORDERSTATE.已支付) throw new BizError(ERRORENUM.该订单已支付);
if (orderInfo.weChartCreatePayMs && orderInfo.weChartState == WEICHARTPAYSTATE.未支付) {
if (new Date(orderInfo.weChartCreatePayMs).valueOf() < (new Date().valueOf() + (15 * 60 * 1000)) ) throw new BizError(ERRORENUM.该订单正在支付);
if (new Date(orderInfo.weChartCreatePayMs).valueOf() < (new Date().valueOf() + (15 * 60 * 1000)) ) {
return {code_url:orderInfo.weChartPayUrl, weChartPR:orderInfo.weChartPR};
}
}
/**生成 out_trade_no */
......@@ -56,13 +58,14 @@ export async function placeAnOrder({id}) {
};
const result = await pay.transactions_native(Param);
if (result.status != 200) throw new BizError(ERRORENUM.调起微信支付失败);
let code_url = result.data.code_url;
let updateInfo = {
weChartCreatePayMs:new Date().valueOf(),
weChartPR:out_trade_no, paymentMethod:PAYMENTTYPE.微信支付, weChartState:WEICHARTPAYSTATE.未支付
weChartPR:out_trade_no, paymentMethod:PAYMENTTYPE.微信支付, weChartState:WEICHARTPAYSTATE.未支付,
weChartPayUrl:code_url
};
await updateOneData(TABLEENUM.订单表, {id}, updateInfo );
return {code_url:result.code_url, weChartPR:out_trade_no};
return {code_url, weChartPR:out_trade_no};
}
async function close(id:string) {
......
......@@ -9,7 +9,7 @@ import { addManyData } from "../../data/add";
import { TABLEENUM } from "../../data/models/model";
import { find, findCount, findOnce, findOnceToSort, findToPage } from "../../data/select";
import { updateOneData } from "../../data/update";
import { generateSystemId, getAreaCode, getMenberNum, successResult } from "../../tools/system";
import { generateSystemId, getMenberNum, successResult } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { extractData } from "../../util/piecemeal";
import { changeEnumValue } from "../../util/verificationEnum";
......@@ -92,10 +92,9 @@ export async function adopt({id, session}) {
let thisDate = new Date();
const NowMs = thisDate.valueOf();
let menberTypeStr = "";
if(userInfo.memberType == MEMBERTYPE.个人会员) menberTypeStr = "GR";
if(userInfo.memberType == MEMBERTYPE.单位会员) menberTypeStr = "DW";
let memberNum = getMenberNum(TABLEENUM.用户表, thisDate, userInfo.sheng, menberTypeStr);
let userCount = await findCount(TABLEENUM.用户表, {isAdmin:0, memberType:userInfo.memberType, userRegisterState:USERREGISTERSTATE.通过});
let memberNum = getMenberNum(thisDate, userInfo.sheng, userCount, userInfo.memberType);
let updateInfo:any = {
auditTime:NowMs,
......
......@@ -11,11 +11,12 @@ import { deleteManyData } from "../../data/delete";
import { TABLEENUM } from "../../data/models/model";
import { find, findOnce } from "../../data/select";
import { updateOneData } from "../../data/update";
import { generateSystemId, successResult } from "../../tools/system";
import { generateSystemId, getEdition, successResult } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { extractData } from "../../util/piecemeal";
import { eccEnumValue } from "../../util/verificationEnum";
import { eccFormParam } from "../../util/verificationParam";
import { getCityNameByCode } from "../../config/cityConfig";
/**
......@@ -239,10 +240,14 @@ export async function getSheng ({userId}) {
* @returns
*/
export async function getCertificate({userId}) {
let userInfo = await findOnce(TABLEENUM.用户表, {userId}, ["userId", "memberType", "userRegisterState", "paymentStatus", "individualMemberType", "unitMemberType"]);
const Files = ["userId", "memberType", "userRegisterState", "paymentStatus", "individualMemberType", "unitMemberType",
"sheng", "documentId", "memberNum", "lifespanStartTime", "lifespanEndTime", "shi","qu","addres", "unitName", "session"];
let userInfo = await findOnce(TABLEENUM.用户表, {userId}, Files);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
let certificate = false;
let cefaInfo = {};
let msg = '会员注册尚未审核通过,无法下载证书';
//判断是否审批通过
if (userInfo.userRegisterState == USERREGISTERSTATE.通过) {
if(userInfo.memberType == MEMBERTYPE.个人会员) {
......@@ -250,6 +255,18 @@ export async function getSheng ({userId}) {
if (userInfo.individualMemberType == INDIVIDUALMEMBERTYPE.个人会员 && userInfo.paymentStatus != PAYMENTSTATUS.未支付) certificate = true;
//个人会员专家无需支付可下载
if (userInfo.individualMemberType == INDIVIDUALMEMBERTYPE.个人会员专家) certificate = true;
if (certificate) {
cefaInfo = {
area:getCityNameByCode(userInfo.sheng),
documentId:userInfo.documentId,
memberNum:userInfo.memberNum,
session:getEdition(Math.floor(userInfo.session/100), userInfo.session%100 ),
lifespanTime:`${moment(userInfo.lifespanStartTime).format("YYYY年MM月DD日")}${moment(userInfo.lifespanEndTime).format("YYYY年MM月DD日")}`
}
msg = ``;
} else {
msg = `会员注册尚未缴费,无法下载证书`;
}
} else if(userInfo.memberType == MEMBERTYPE.单位会员) {
//院校无需支付可下载
if (userInfo.unitMemberType == UNITMEMBERTYPE.院校) certificate = true;
......@@ -257,10 +274,22 @@ export async function getSheng ({userId}) {
if (userInfo.unitMemberType == UNITMEMBERTYPE.机构 || userInfo.unitMemberType == UNITMEMBERTYPE.其他 && userInfo.paymentStatus != PAYMENTSTATUS.未支付) {
certificate = true;
}
if (certificate) {
cefaInfo = {
unitName:userInfo.unitName,
addres:`${getCityNameByCode(userInfo.sheng)}${getCityNameByCode(userInfo.shi)}${getCityNameByCode(userInfo.qu)}${userInfo.addres}`,
memberNum:userInfo.memberNum,
session:getEdition(Math.floor(userInfo.session/100), userInfo.session%100 ),
lifespanTime:`${moment(userInfo.lifespanStartTime).format("YYYY年MM月DD日")}${moment(userInfo.lifespanEndTime).format("YYYY年MM月DD日")}`
}
msg = ``;
} else {
msg = `会员注册尚未缴费,无法下载证书`;
}
}
}
return {certificate};
return {certificate, cefaInfo, msg};
}
......
......@@ -188,7 +188,7 @@ export async function paidList({unitName, paymentType, costType, pageNumber }) {
let dataList = [];
let itemFile = ["id", "unitName", "money", "paymentNum"];
let itemFile = ["id", "unitName", "money", "paymentNum", "userId"];
for ( let i = 0; i < dbList.length; i++) {
let info = dbList[i];
let itemData:any = extractData(info, itemFile);
......
......@@ -2,15 +2,15 @@
* 用户逻辑
*/
import { ADMINTYPE, DOCUMENTTYPE, MEMBERLEVEL, MEMBERSTATE, MEMBERTYPE, NATION, PROFCATEGORY, SEX, STATE, USERREGISTERSTATE } from "../../config/enum";
import { ERRORCODEENUM, ERRORENUM } from "../../config/errorEnum";
import { ADMINTYPE, CODETYPE, MEMBERSTATE, STATE, USERREGISTERSTATE } from "../../config/enum";
import { ERRORENUM } from "../../config/errorEnum";
import { addOneData } from "../../data/add";
import { TABLEENUM } from "../../data/models/model";
import { findOnce } from "../../data/select";
import { findCount, findOnce, findOnceToSort } from "../../data/select";
import { updateOneData } from "../../data/update";
import { generateToken, generateUserId, successResult } from "../../tools/system";
import { generateSMSCode, generateToken, getTodayMs, successResult } from "../../tools/system";
import { BizError } from "../../util/bizError";
import { changeEnumValue, eccEnumValue } from "../../util/verificationEnum";
import { changeEnumValue } from "../../util/verificationEnum";
......@@ -24,6 +24,14 @@ export async function login({loginId, pwd}) {
let userInfo = await findOnce(TABLEENUM.用户表, selectParam);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.账号或密码错误);
if (userInfo.isInput && !userInfo.inputUserChangePwd) {
return {
isInput:userInfo.isInput,
phone:userInfo.phone
}
}
if (userInfo.pwd != pwd ) throw new BizError(ERRORENUM.账号或密码错误);
let token = "";
......@@ -45,10 +53,12 @@ export async function login({loginId, pwd}) {
adminLv:userInfo.adminLv,
timeMs:Now,
isPass:userInfo.userRegisterState == USERREGISTERSTATE.通过,
memberType:userInfo.memberType
memberType:userInfo.memberType,
isInput:(userInfo.isInput && !userInfo.inputUserChangePwd),
phone:userInfo.phone
};
return {dataInfo}
return {dataInfo};
}
......@@ -65,4 +75,54 @@ export async function logout({userId}) {
}
/**
* 修改密码
* @param param0
* @returns
*/
export async function changePwd({phone, pwd, confirmation, code}) {
if (pwd.search(/^[A-Za-z0-9]{6,18}$/) < 0) throw new BizError(ERRORENUM.密码只能由618位字符和数字组成);
if (pwd != confirmation) throw new BizError(ERRORENUM.两次密码不一致);
let userInfo = await findOnce(TABLEENUM.用户表, {phone}, ["userId"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.手机号不正确);
// let pwdStr = generatePwd(userInfo.userId, pwd); todo
let pwdStr = pwd;
let updateInfo:any = {pwd:pwdStr};
if (userInfo.isInput && !userInfo.inputUserChangePwd) {
updateInfo.inputUserChangePwd = true;
}
await updateOneData(TABLEENUM.用户表, {userId:userInfo.userId}, updateInfo);
return successResult();
}
/**
* 修改密码【短信验证码】 success
* @param userId
* @param phone
* @returns
*/
export async function memberChangePwdSendCode({phone}) {
const NowMs = new Date().valueOf();
let codeSelectParam = { phone, isUse:false, type:CODETYPE.修改密码, sendMs:{"$gt":getTodayMs()} }
let lastCodeInfo = await findOnceToSort(TABLEENUM.验证码表, codeSelectParam, {sendMs:-1});
let codeNum = lastCodeInfo.codeNum;
if (codeNum) {
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 = generateSMSCode();//生成短信验证码
/**发送短信模块 */
let addInfo = {codeNum:Code, phone, sendMs:NowMs, type:CODETYPE.修改密码, isUse:false};
await addOneData(TABLEENUM.验证码表, addInfo);
return {code:Code};
}
\ No newline at end of file
......@@ -3,7 +3,7 @@
*/
import moment = require("moment");
import { ARTICLEPOSITION, BANNERPOSITION, BRANCHPOSITION, CODPARTICIPANT, DANGJIANVIDEO, DONGTAIZIXUNSUBTYPE, IMGEDITFUNENUM, PARTYBUILDSUBTYPEENUM, PARTYBUILDTYPEENUM, STATE, TONGZHIGONGGAO } from "../config/enum";
import { ARTICLEPOSITION, BANNERPOSITION, BRANCHPOSITION, CODPARTICIPANT, DANGJIANVIDEO, DONGTAIZIXUNSUBTYPE, IMGEDITFUNENUM, MEMBERSTATE, MEMBERTYPE, PARTYBUILDSUBTYPEENUM, PARTYBUILDTYPEENUM, STATE, TONGZHIGONGGAO } from "../config/enum";
import { TABLEENUM } from "../data/models/model";
import { find, findCount, findOnce, findToPage, findToSortToPage } from "../data/select";
import { extractData } from "../util/piecemeal";
......@@ -656,3 +656,15 @@ export async function xueXiYuanDiShiPinType() {
return {dataList};
}
export async function zhengShuChaXun({memberType, name, carId }) {
eccEnumValue("证书查询", "会员类型", MEMBERTYPE, memberType);
let selectParam = {};
if (memberType == MEMBERTYPE.个人会员) selectParam = {name, documentId:carId};
else selectParam = {unitName:name, uscc:carId}
let userInfo = await findOnce(TABLEENUM.用户表, selectParam, ["userId", "lifespanEndTime"]);
if (!userInfo || !userInfo.userId) return {success:false, msg:"无法查询到该信息,请联系学会工作人员"};
if ( new Date().valueOf() > userInfo.lifespanEndTime ){
return {success:true, msg:`会员到期,请续会员`};
}
return {success:true, msg:`证书有效期至${moment(userInfo.lifespanEndTime).format("YYYY年MM月DD日")}`};
}
\ No newline at end of file
......@@ -2,6 +2,7 @@
* 分支机构-机构管理-内容管理-委员名单
*/
import { BRANCHPOSITION } from "../../../config/enum";
import { ERRORENUM } from "../../../config/errorEnum";
import { addOneData } from "../../../data/add";
import { deleteOneData } from "../../../data/delete";
......@@ -11,6 +12,7 @@ import { updateOneData } from "../../../data/update";
import { generateSystemId, successResult } from "../../../tools/system";
import { BizError } from "../../../util/bizError";
import { extractData } from "../../../util/piecemeal";
import { changeEnumValue } from "../../../util/verificationEnum";
/**
......@@ -56,14 +58,13 @@ export async function del({userId, id}) {
export async function list({userId, agencyId, pageNumber}) {
let jiGouNameMap = await getJiGouMap();
let dbList = await findToPage(TABLEENUM.委员名单, {agencyId}, ["id", "name", "branchDuties", "unit", "unitDuties"], pageNumber);
let dataCount = await findCount(TABLEENUM.委员名单, {agencyId});
let dataList = [];
dbList.forEach(info => {
let item:any = extractData(info, ["id", "name", "branchDuties", "unit", "unitDuties"]);
item.jiGouName = jiGouNameMap[info.agencyId];
item.branchDuties = changeEnumValue(BRANCHPOSITION, item.branchDuties);
dataList.push(item);
});
......
......@@ -89,13 +89,14 @@ export async function list({pageNumber}) {
* 预览
* @param id
*/
export async function preview(secureArgs:any) {
export async function preview({}) {
/**获取上下3位的排名列表 */
let dbList = await find(TABLEENUM.学会领导, {});
let dataList = [];
dbList.forEach(info => {
let item = extractData(info, ["id", "rank", "name", "position", "imgUrl", "miniImgUrl", "desc"]);
let item:any = extractData(info, ["id", "rank", "name", "position", "imgUrl", "miniImgUrl", "desc"]);
item.position = changeEnumValue(XUEHUILINGDAOZHIWEI, item.position);
dataList.push(item);
});
......
......@@ -130,10 +130,10 @@ export async function memberRegister2({form, id}) {
}
/**比对验证码 */
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 != codeNum) throw new BizError(ERRORENUM.验证码错误, `${phone}不存在${codeNum}`);
if (( codeInfo.sendMs + (30 * 60 *1000) ) < NowMs ) throw new BizError(ERRORENUM.验证码过期);
// 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 != codeNum) throw new BizError(ERRORENUM.验证码错误, `${phone}不存在${codeNum}`);
// if (( codeInfo.sendMs + (30 * 60 *1000) ) < NowMs ) throw new BizError(ERRORENUM.验证码过期);
/**初始化账号信息 */
let userId = sysTools.generateUserId();
......@@ -274,7 +274,7 @@ 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});
let codeNum = lastCodeInfo?.codeNum;
let codeNum = lastCodeInfo.codeNum;
if (codeNum) {
if ( (lastCodeInfo.sendMs + (60*1000)) > NowMs ) throw new BizError(ERRORENUM.频繁操作请稍后再试);
/**校验今日同类型验证码次数 */
......@@ -283,6 +283,9 @@ export async function memberRegisterSendCode({phone}) {
}
const Code = sysTools.generateSMSCode();//生成短信验证码
/**发送短信模块 */
let addInfo = {codeNum:Code, phone, sendMs:NowMs, type:CODETYPE.用户注册, isUse:false};
await addOneData(TABLEENUM.验证码表, addInfo);
......
import moment = require("moment");
import { ARTICLEPOSITION, MEMBERLEVEL, MEMBERTYPE, PARTYBUILDSUBTYPEENUM, PARTYBUILDTYPEENUM, STATE, USERREGISTERSTATE } from "../config/enum";
import { ARTICLEPOSITION, MEMBERLEVEL, MEMBERTYPE, PARTYBUILDSUBTYPEENUM, PARTYBUILDTYPEENUM, PAYMENTSTATUS, STATE, USERREGISTERSTATE } from "../config/enum";
import { TABLEENUM } from "../data/models/model";
import { find, findCount, findOnce } from "../data/select";
import { createOrder } from "./member/order";
import { updateOneData } from "../data/update";
/**
* 初始化任务
......@@ -10,7 +11,7 @@ import { createOrder } from "./member/order";
export async function initSystemTask() {
/**初始文字管理名称 */
await initWenZangQueue();
/**孵化器月度任务 */
await createUserOrder();
setInterval(async function () {
await createUserOrder();
......@@ -41,6 +42,7 @@ export async function createUserOrder() {
/**创建一条新的订单 */
let subType = memberType == MEMBERTYPE.个人会员 ? individualMemberType : unitMemberType;
await createOrder(userId, loginId, phone, unitName, lifespanEndTime, memberLevel, memberType, subType, false);
await updateOneData(TABLEENUM.用户表, {userId}, {paymentStatus:PAYMENTSTATUS.未支付});
addCount += 1;
}
}
......
......@@ -405,7 +405,8 @@ export enum ORDERSTATE {
* 验证码类型
*/
export enum CODETYPE {
用户注册 = 1
用户注册 = 1,
修改密码
}
......
......@@ -46,7 +46,8 @@ export enum ERRORENUM {
微信支付回调错误,
支付失败,
地址数据错误,
该账号已被冻结
该账号已被冻结,
手机号不正确
}
export enum ERRORCODEENUM {
......
......@@ -336,7 +336,7 @@ const ModelArray = [
askForTime:'Number',//申请时间 注册流程发起时间
auditTime:'Number',//审核时间 会员审核列表审核时间
joinTime:'Number',//入会时间 审核通过时间
memberNum:{type:'String', index:true},//会员编号
memberNum:{type:'String'},//会员编号
memberType:{type:'Number'},//会员类型 枚举MEMBERTYPE
lifespanStartTime:{type:'Number'},//会员有效期开始时间 时间戳 每次缴费成功更新
lifespanEndTime:{type:'Number', index:true},//会员有效期结束时间 时间戳 每次缴费成功更新
......@@ -344,7 +344,9 @@ const ModelArray = [
tokenMs:{type:'Number', default:0},//token过期时间
lastLoginMs:'Number',//上次登陆时间
session:'Number',//届次
paymentStatus:'Number',//支付状态 PAYMENTSTATUS
paymentStatus:'Number',//支付状态 PAYMENTSTATUS
isInput:{type:'Boolean', default:false},//是否是导入用户
inputUserChangePwd:{type:'Boolean', default:false},//导入账号修改密码
/**管理员字段 */
adminType:{type:'Number'},//管理员类别 ADMINTYPE
adminLv:"[Number]",//管理员等级 多选 ADMINLV
......@@ -366,9 +368,9 @@ const ModelArray = [
phone:{type:'String', index:true},//联系电话(登陆手机号)可用作登陆
mail:{type:'String', index:true},//邮箱
/**第二步流程表单(个人)【基础信息】 */
name:{type:'String'},//真实姓名
name:{type:'String', index:true},//真实姓名
sex:'Number',//性别 枚举
documentId:'String',//证件号码 身份证
documentId:{type:'String', index:true},//证件号码 身份证
documentType:'Number',//证件类型 枚举DOCUMENTTYPE
birth:'Number',//出生年月 时间戳
nation:'Number',//民族 枚举
......@@ -394,8 +396,8 @@ const ModelArray = [
professionalCERTUrl:'String',//工作证明图片地址
auxiliaryMaterial:{type:'[String]', default:[]},//其他辅助材料
/**第二步流程表单(单位)【基础信息】 */
unitName:'String',//单位名称
uscc:'String',//统一信用代码
unitName:{type:'String', index:true},//单位名称
uscc:{type:'String', index:true},//统一信用代码
legalPerson:'String',//法人代表
legalPersonPhone:'String',//法人代表联系电话
legalPersonMail:'String',//法人邮箱
......@@ -455,6 +457,7 @@ const ModelArray = [
weChartPR:{type:'String', default:""},//微信订单号 微信支付用
weChartState:{type:'Number', default:WEICHARTPAYSTATE.未提交},//微信支付状态 WEICHARTPAYSTATE
weChartCreatePayMs:{type:'Number'},//微信创建订单时间
weChartPayUrl:'String',//微信创建订单时支付链接
// membershipFeesType:'Number',//会费类别 枚举
invoiceAdd:'String',//发票图片地址
isFirst:{type:'Boolean', default:true},//首次订单
......
......@@ -158,9 +158,7 @@ export const Config = {
notMiddleware:true,
subUrl:'/memberdb/registersendcode',
param:[
{key:"loginId", type:"String", desc:"用户名"},
{key:"phone", type:"String", desc:"联系人手机号"},
{key:"codeType", type:"Number", desc:"验证码类型枚举"}
{key:"phone", type:"String", desc:"联系人手机号"}
],
bindBiz:registerBiz.memberRegisterSendCode
},
......@@ -227,6 +225,26 @@ export const Config = {
],
bindBiz:userBiz.logout
},
{
apiName:"修改密码",
subUrl:'/changepwd',
notMiddleware:true,
param:[
{key:"phone", type:"String", desc:"绑定手机号"},
{key:"pwd", type:"String", desc:"密码"},
{key:"confirmation", type:"String", desc:"二次确认密码"},
{key:"code", type:"String", desc:"验证码"}
],
bindBiz:userBiz.changePwd
},{
apiName:"修改密码用短信验证码",
subUrl:'/getchangepwdcode',
notMiddleware:true,
param:[
{key:"phone", type:"String", desc:"绑定手机号"}
],
bindBiz:userBiz.memberChangePwdSendCode
}
],
"会员库":[
{
......
......@@ -225,4 +225,17 @@ export const Config = {
}
],
"会员服务":[
{
apiName:"证书查询",
subUrl:'/zhengshuchaxun',
param:[
{key:"memberType", type:"Number", desc:"会员类型"},
{key:"name", type:"String", desc:"个人会员姓名 or 单位会员名称"},
{key:"carId", type:"String", desc:"个人会员身份证号码 or 单位会员统一信用代码"}
],
bindBiz:officialWebsiteBiz.zhengShuChaXun
},
]
}
\ No newline at end of file
......@@ -23,12 +23,12 @@ const Look = false;//true更新文档
export async function setRouter(httpServer){
if (Look) {
await getDoc();
await initDoc(portalRouter.FirstName, portalRouter.Config, portalRouter.FirstRouter);//网站编辑
await initDoc(publicRouter.FirstName, publicRouter.Config, publicRouter.FirstRouter);//公用组件
// await initDoc(portalRouter.FirstName, portalRouter.Config, portalRouter.FirstRouter);//网站编辑
// await initDoc(publicRouter.FirstName, publicRouter.Config, publicRouter.FirstRouter);//公用组件
await initDoc(memberRouter.FirstName, memberRouter.Config, memberRouter.FirstRouter);//用户路由
await initDoc(officalWebsiteRouter.FirstName, officalWebsiteRouter.Config, officalWebsiteRouter.FirstRouter);//官网路由
await initDoc(orderRouter.FirstName, orderRouter.Config, orderRouter.FirstRouter);//会费相关
await initDoc(costRouter.FirstName, costRouter.Config, costRouter.FirstRouter);//支付
// await initDoc(officalWebsiteRouter.FirstName, officalWebsiteRouter.Config, officalWebsiteRouter.FirstRouter);//官网路由
// await initDoc(orderRouter.FirstName, orderRouter.Config, orderRouter.FirstRouter);//会费相关
// await initDoc(costRouter.FirstName, costRouter.Config, costRouter.FirstRouter);//支付
}
analysisRouter(httpServer, portalRouter.Config, portalRouter.FirstRouter, false);//网站编辑
analysisRouter(httpServer, publicRouter.Config, publicRouter.FirstRouter, false);//公用组件
......@@ -92,7 +92,7 @@ function routerFun(apiName, defaultParam, subUrl, param, bindBiz, notMiddleware)
export async function setAdditionalRouter(httpServer) {
httpServer.post('/pay/wechart/callback', asyncHandler(async (req, res) => {
await payCallback(req.body);
res.success({});
let result = await payCallback(req.body);
res.success(result);
}));
}
......@@ -6,8 +6,8 @@
import moment = require("moment");
import { wenZhangQueue } from "../biz/task";
import { MEMBERTYPE } from "../config/enum";
const md5 = require("md5");
const provinces = require('province-city-china/dist/data.json');
/**
* 返回编辑正确的结果
......@@ -140,21 +140,6 @@ export function changeArticleName(idList) {
/**
* 获取行政区域代码
* @param areaName
*/
export function getAreaCode(areaName) {
let areaCode;
provinces.forEach( info => {
let {code, name, province} = info; //城市代码、城市名称、省/直辖市/特别行政区代码
if (name == areaName) areaCode = province
})
return areaCode;
}
/**
* 获取会员编号
* @param db
* @param memberTypeStr
......@@ -165,26 +150,29 @@ export function getAreaCode(areaName) {
* 单位会员:以审核时间算正式入会时间
* 例 CEFA-20230620-11-00001GR
*/
export async function getMenberNum(db, joinTime, sheng, memberTypeStr) {
export function getMenberNum( joinTime, sheng, userCount, memberType) {
//定义编号前缀
const prefix = 'CEFA';
//获取流水号计数器
const counterCollection = db.collection('serialNumberCounter');
// 尝试找到并更新计数器
let result = await counterCollection.findOneAndUpdate(
{ _id: 'memberCounter' },
{ $inc: { count: 1 } },
{ upsert: true, returnDocument: 'after' }
);
// 生成5位流水号(这里简单地将计数器值转为字符串并填充0至5位)
let serialNumber = (result.value.count + '').padStart(5, '0');
let areaCode = getAreaCode(sheng);
let memberNum = `${prefix}-${moment(joinTime).format("YYYYMMDD")}-${areaCode}-${serialNumber}${memberTypeStr}`
return memberNum;
const JoinTimeStr = moment(joinTime).format("YYYYMMDD");
const Province = parseInt(`${parseInt(sheng)/10000}`);
let numStr = '';
for (let i = `${userCount}`.length; i < 5;i++) {
numStr+='0';
}
numStr += (userCount+1);
let memberTypeStr = "";
if(memberType == MEMBERTYPE.个人会员) memberTypeStr = "GR";
if(memberType == MEMBERTYPE.单位会员) memberTypeStr = "DW";
return `CEFA-${JoinTimeStr}-${Province}-${numStr}-${memberTypeStr}`;
}
/**
* 生成密码
* @param userId
* @returns
*/
export function generatePwd(userId:string, pwd:string) {
return md5(`${userId}${pwd}`);
}
\ No newline at end of file
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