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
d189eccb
Commit
d189eccb
authored
Aug 22, 2025
by
lixinming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
ebdf38c9
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
343 additions
and
207 deletions
+343
-207
mail.ts
src/biz/mail.ts
+5
-13
apply.ts
src/biz/member/apply.ts
+74
-1
authority.ts
src/biz/member/authority.ts
+1
-1
cost.ts
src/biz/member/cost.ts
+2
-2
examine.ts
src/biz/member/examine.ts
+5
-2
costVerification.ts
src/biz/member/finance/costVerification.ts
+7
-3
invoice.ts
src/biz/member/finance/invoice.ts
+23
-4
homePage.ts
src/biz/member/homePage.ts
+3
-3
rightsMgmt.ts
src/biz/member/rightsMgmt.ts
+1
-1
taskSMS.ts
src/biz/member/taskSMS.ts
+44
-0
user.ts
src/biz/portal/user.ts
+61
-128
sms.ts
src/biz/sms.ts
+27
-27
task.ts
src/biz/task.ts
+1
-1
enum.ts
src/config/enum.ts
+21
-7
errorEnum.ts
src/config/errorEnum.ts
+3
-1
model.ts
src/data/models/model.ts
+3
-4
main.ts
src/main.ts
+1
-1
router.ts
src/routers/apply/router.ts
+17
-0
router.ts
src/routers/member/router.ts
+9
-8
router.ts
src/routers/msgActivity/router.ts
+21
-0
router.ts
src/routers/public/router.ts
+14
-0
No files found.
src/biz/mail.ts
View file @
d189eccb
...
...
@@ -17,6 +17,8 @@ let transporter = nodemailer.createTransport({
auth
:
{
user
:
'cefa_office@163.com'
,
// 你的邮箱地址
pass
:
'EJRazhkkXK65gnLe'
// 你的邮箱密码或应用专用密码
// user:"16621071125@163.com",
// pass:"KEbayDGArktek67T"
}
});
...
...
@@ -38,6 +40,7 @@ async function send(toMail, name, type, code?) {
// 设置邮件选项
let
mailOptions
=
{
from
:
'学会办公室 <cefa_office@163.com>'
,
// 发送者地址
// from: '学会办公室 <16621071125@163.com>', // 发送者地址
to
:
toMail
,
subject
:
`关于CEFA会员系统的
${
title
}
通知`
,
// 邮件主题
// text: 'Hello world?', // 邮件正文(纯文本)
...
...
@@ -190,19 +193,8 @@ export async function systemSendMail(userId, type) {
* @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
);
}
export
async
function
sendVerificationCode
(
mail
,
nameStr
,
code
)
{
let
result
=
await
send
(
mail
,
nameStr
,
MAILTYPE
.
邮箱获取验证码
,
code
);
return
successResult
();
}
...
...
src/biz/member/apply.ts
View file @
d189eccb
...
...
@@ -152,12 +152,17 @@ export async function applyList({name, memberType, pageNumber, pageSize}) {
}
let
lableId
=
newLable
;
let
memberLevelChangeTime
=
0
;
if
(
takeeffectType
==
ZHIWUSHENGXIAOTYPE
.
上半年
)
memberLevelChangeTime
=
new
Date
().
getFullYear
();
else
memberLevelChangeTime
=
new
Date
().
getFullYear
()
+
1
;
let
updateInfo
:
any
=
{
memberLevel
:
userInfo
.
applyMemberLevel
,
applyReviewTime
:
NowMs
,
changeApplyType
:
CHANGEAPPLYTYPE
.
通过
,
lableId
,
takeeffectType
takeeffectType
,
memberLevelChangeTime
};
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
:
id
},
updateInfo
);
/**添加审批历史 */
...
...
@@ -1004,3 +1009,70 @@ export async function outPutInfomationChangeList({name, changeState}) {
export
async
function
liShiList
({
name
,
memberType
,
phone
,
memberLevel
,
memberState
,
year
,
page
})
{
let
selectParam
:
any
=
{
memberLevel
:{
"$gt"
:
MEMBERLEVEL
.
普通会员
}};
if
(
name
)
selectParam
.
name
=
{
"$regex"
:
name
};
if
(
memberType
)
{
if
(
memberType
>
1
)
{
selectParam
.
unitMemberType
=
memberType
;
}
else
{
selectParam
.
memberType
=
memberType
;
}
}
if
(
phone
)
selectParam
.
phone
=
{
"$regex"
:
phone
};
if
(
memberLevel
&&
memberLevel
>
1
)
selectParam
.
memberLevel
=
memberLevel
;
if
(
memberState
)
selectParam
.
memberState
=
memberState
;
if
(
year
)
selectParam
.
memberLevelChangeTime
=
year
;
let
selectConf
=
[
"userId"
,
"memberType"
,
"memberState"
,
"contactPerson"
,
"name"
,
"sex"
,
"phone"
,
"unitName"
,
"contactPersonDuties"
,
"duties"
,
"lableId"
,
"memberLevel"
,
"memberLevelChangeTime"
];
let
dbList
=
await
findToSortToPage
(
TABLEENUM
.
用户表
,
selectParam
,
selectConf
,
{
joinTime
:
-
1
},
page
);
let
dataCount
=
await
findCount
(
TABLEENUM
.
用户表
,
selectParam
);
let
dataList
=
[];
let
labelList
=
await
find
(
TABLEENUM
.
标签表
,
{},
[
"lableId"
,
"lableName"
,
"createTime"
]
);
let
labelMap
=
{};
labelList
.
forEach
(
item
=>
{
labelMap
[
item
.
lableId
]
=
item
.
lableName
;
});
for
(
let
i
=
0
;
i
<
dbList
.
length
;
i
++
)
{
let
info
=
dbList
[
i
];
let
item
:
any
=
{
userId
:
info
.
userId
};
item
.
memberState
=
changeEnumValue
(
MEMBERSTATE
,
info
.
memberState
);
item
.
memberType
=
changeEnumValue
(
MEMBERTYPE
,
info
.
memberType
);
item
.
memberLevel
=
changeEnumValue
(
MEMBERLEVEL
,
info
.
memberLevel
);
if
(
info
.
memberType
==
MEMBERTYPE
.
个人会员
)
{
item
.
name
=
info
.
unitName
;
item
.
fuzeren
=
info
.
name
;
item
.
sex
=
changeEnumValue
(
SEX
,
info
.
sex
)
||
"-"
;
item
.
duties
=
info
.
duties
;
}
else
{
item
.
fuzeren
=
info
.
contactPerson
;
//
item
.
name
=
info
.
unitName
;
item
.
duties
=
info
.
contactPersonDuties
;
}
item
.
phone
=
info
.
phone
;
item
.
changeTime
=
info
.
memberLevelChangeTime
||
"-"
;
// let labelStr = "";
// if (info.lableId && info.lableId.length) {
// info.lableId.forEach(labelitemId => {
// if (label) {
// if (label == labelitemId) labelStr += labelMap[label] || "";
// }
// else {
// labelStr += labelMap[labelitemId] || "";
// }
// })
// }
// item.label = labelStr;
dataList
.
push
(
item
);
}
return
{
dataList
,
dataCount
}
}
\ No newline at end of file
src/biz/member/authority.ts
View file @
d189eccb
...
...
@@ -102,7 +102,7 @@ export async function freeze({id}) {
if
(
!
userInfo
||
!
userInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
if
(
userInfo
.
memberState
==
MEMBERSTATE
.
冻结
)
{
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
:
id
},
{
memberState
:
MEMBERSTATE
.
正常
});
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
:
id
},
{
memberState
:
MEMBERSTATE
.
运行
});
}
else
{
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
:
id
},
{
memberState
:
MEMBERSTATE
.
冻结
});
}
...
...
src/biz/member/cost.ts
View file @
d189eccb
...
...
@@ -153,7 +153,7 @@ export async function testCallback(weChartPR) {
updateUserInfo
.
lifespanEndTime
=
newOrderInfo
.
orderCycleEnd
;
updateUserInfo
.
isGracePeriod
=
STATE
.
否
;
updateUserInfo
.
gracePeriodEndTime
=
0
;
updateUserInfo
.
memberState
=
MEMBERSTATE
.
正常
;
updateUserInfo
.
memberState
=
MEMBERSTATE
.
运行
;
updateUserInfo
.
paymentStatus
=
PAYMENTSTATUS
.
已支付
;
}
else
{
//非一笔订单 要更新会员到期时间 到 用户表
updateUserInfo
.
lifespanStartTime
=
oldInfo
.
orderCycleStart
;
...
...
@@ -221,7 +221,7 @@ export async function payCallback(body) {
updateUserInfo
.
lifespanEndTime
=
newOrderInfo
.
orderCycleEnd
,
updateUserInfo
.
isGracePeriod
=
STATE
.
否
,
updateUserInfo
.
gracePeriodEndTime
=
0
,
updateUserInfo
.
memberState
=
MEMBERSTATE
.
正常
,
updateUserInfo
.
memberState
=
MEMBERSTATE
.
运行
,
updateUserInfo
.
paymentStatus
=
PAYMENTSTATUS
.
已支付
}
else
{
//非一笔订单 要更新会员到期时间 到 用户表
updateUserInfo
.
lifespanStartTime
=
oldInfo
.
orderCycleStart
;
...
...
src/biz/member/examine.ts
View file @
d189eccb
...
...
@@ -115,6 +115,7 @@ export async function pendingReviewList({name, memberType, documentId, phone, ma
if
(
item
.
userRegisterState
==
"驳回修改"
)
item
.
userRegisterState
=
"已驳回"
;
if
(
item
.
userRegisterState
==
"重新提交"
)
item
.
userRegisterState
=
"驳回提交"
;
if
(
item
.
userRegisterState
==
"待审核"
)
item
.
userRegisterState
=
"待审批"
item
.
memberLevel
=
changeEnumValue
(
MEMBERLEVEL
,
item
.
memberLevel
);
item
.
sheng
=
getCityNameByCode
(
item
.
sheng
);
...
...
@@ -207,6 +208,8 @@ export async function submitDocument({name, memberType, documentId, phone, mail,
if
(
!
item
.
userRegisterState
)
item
.
userRegisterState
=
USERREGISTERSTATE
.
待审核
;
else
item
.
userRegisterState
=
changeEnumValue
(
USERREGISTERSTATE
,
item
.
userRegisterState
);
item
.
registerFlow
=
changeEnumValue
(
REGISTERFLOWCLIENT
,
item
.
registerFlow
);
item
.
memberLevel
=
changeEnumValue
(
MEMBERLEVEL
,
item
.
memberLevel
);
item
.
sheng
=
getCityNameByCode
(
item
.
sheng
);
...
...
@@ -428,7 +431,7 @@ export async function adopt({id, session}) {
lifespanStartTime
:
joinTime
,
lifespanEndTime
:
joinTime
+
1000
,
memberLevel
:
MEMBERLEVEL
.
普通会员
,
memberState
:
MEMBERSTATE
.
异常
,
memberState
:
MEMBERSTATE
.
提醒
,
memberNum
};
let
unitName
=
userInfo
.
unitName
;
...
...
@@ -514,7 +517,7 @@ export async function batchAdopt({idList, session}) {
lifespanStartTime
:
joinTime
,
lifespanEndTime
:
joinTime
+
1000
,
memberLevel
:
MEMBERLEVEL
.
普通会员
,
memberState
:
MEMBERSTATE
.
异常
,
memberState
:
MEMBERSTATE
.
提醒
,
memberNum
};
let
unitName
=
userInfo
.
unitName
;
...
...
src/biz/member/finance/costVerification.ts
View file @
d189eccb
...
...
@@ -3,7 +3,7 @@
*/
import
moment
=
require
(
"moment"
);
import
{
COSTTYPE
,
INVOICESTATUS
,
ISRECEIVE
,
MAILTYPE
,
MEMBERLEVEL
,
MEMBERSTATE
,
MEMBERTYPE
,
MEMBERTYPEECCENUM
,
MSGTYPE
,
ORDEREXAMINE
,
ORDERSTATE
,
PAYMENTSTATUS
,
PAYMENTTYPE
,
RECEIPTCONFIRMATION
,
STATE
}
from
"../../../config/enum"
;
import
{
COSTTYPE
,
INVOICESTATUS
,
ISRECEIVE
,
MAILTYPE
,
MEMBERLEVEL
,
MEMBERSTATE
,
MEMBERTYPE
,
MEMBERTYPEECCENUM
,
MSGTYPE
,
ORDEREXAMINE
,
ORDERSTATE
,
PAYMENTSTATUS
,
PAYMENTTYPE
,
RECEIPTCONFIRMATION
,
STATE
,
UNITMEMBERTYPE
}
from
"../../../config/enum"
;
import
{
ERRORENUM
}
from
"../../../config/errorEnum"
;
import
{
TABLEENUM
}
from
"../../../data/models/model"
;
import
{
find
,
findCount
,
findOnce
,
findOnceToSort
,
findToPage
,
findToSortToPage
}
from
"../../../data/select"
;
...
...
@@ -137,6 +137,10 @@ export async function paidList({name, memberType, documentId, phone, mail, joinS
itemData
.
joinTime
=
moment
(
info
.
orderCycleStart
).
format
(
"YYYY-MM-DD"
);
itemData
.
operationTime
=
moment
(
info
.
payTime
).
format
(
"YYYY-MM-DD"
);
itemData
.
memberType
=
changeEnumValue
(
MEMBERTYPE
,
info
.
memberCategory
);
if
(
info
.
memberCategory
==
MEMBERTYPE
.
单位会员
)
{
let
itemMemberInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
:
info
.
userId
},
[
"unitMemberType"
]);
itemData
.
memberType
=
changeEnumValue
(
UNITMEMBERTYPE
,
itemMemberInfo
.
unitMemberType
);
}
itemData
.
paymentMethod
=
changeEnumValue
(
PAYMENTTYPE
,
info
.
paymentMethod
);
if
(
payType
==
2
)
{
...
...
@@ -201,7 +205,7 @@ export async function confirmReceiptPass({id}) {
updateUserInfo
.
lifespanEndTime
=
newOrderInfo
.
orderCycleEnd
,
updateUserInfo
.
isGracePeriod
=
STATE
.
否
,
updateUserInfo
.
gracePeriodEndTime
=
0
,
updateUserInfo
.
memberState
=
MEMBERSTATE
.
正常
,
updateUserInfo
.
memberState
=
MEMBERSTATE
.
运行
,
updateUserInfo
.
paymentStatus
=
PAYMENTSTATUS
.
已支付
}
else
{
//非一笔订单 要更新会员到期时间 到 用户表
updateUserInfo
.
lifespanStartTime
=
orderInfo
.
orderCycleStart
;
...
...
@@ -421,7 +425,7 @@ export async function confirmReceiptManyPass({idList}) {
updateUserInfo
.
lifespanEndTime
=
newOrderInfo
.
orderCycleEnd
,
updateUserInfo
.
isGracePeriod
=
STATE
.
否
,
updateUserInfo
.
gracePeriodEndTime
=
0
,
updateUserInfo
.
memberState
=
MEMBERSTATE
.
正常
,
updateUserInfo
.
memberState
=
MEMBERSTATE
.
运行
,
updateUserInfo
.
paymentStatus
=
PAYMENTSTATUS
.
已支付
}
else
{
//非一笔订单 要更新会员到期时间 到 用户表
updateUserInfo
.
lifespanStartTime
=
orderInfo
.
orderCycleStart
;
...
...
src/biz/member/finance/invoice.ts
View file @
d189eccb
...
...
@@ -4,7 +4,7 @@
*/
import
moment
=
require
(
"moment"
);
import
{
INVOICESTATUS
,
ISPAYENUM
,
MAILTYPE
,
MEMBERLEVEL
,
MEMBERSTATE
,
MEMBERTYPE
,
MEMBERTYPEECCENUM
,
MSGTYPE
,
ORDEREXAMINE
,
ORDERSTATE
,
PAYMENTTYPE
,
RECEIPTCONFIRMATION
,
STATE
}
from
"../../../config/enum"
;
import
{
INVOICESTATUS
,
ISPAYENUM
,
MAILTYPE
,
MEMBERLEVEL
,
MEMBERSTATE
,
MEMBERTYPE
,
MEMBERTYPEECCENUM
,
MSGTYPE
,
ORDEREXAMINE
,
ORDERSTATE
,
PAYMENT
STATUS
,
PAYMENT
TYPE
,
RECEIPTCONFIRMATION
,
STATE
}
from
"../../../config/enum"
;
import
{
TABLEENUM
}
from
"../../../data/models/model"
;
import
{
find
,
findCount
,
findOnce
,
findOnceToSort
,
findToPage
,
findToSortToPage
}
from
"../../../data/select"
;
import
{
extractData
}
from
"../../../util/piecemeal"
;
...
...
@@ -46,16 +46,20 @@ export async function billStateList({name, memberType, documentId, invoiceApplyM
if
(
payState
==
1
)
{
//已支付
findParam
.
state
=
ORDERSTATE
.
已支付
;
findParam
.
confirmReceipt
=
RECEIPTCONFIRMATION
.
收款确认
;
if
(
invoiceState
==
1
)
{
//已申请
findParam
.
invoiceStatus
=
INVOICESTATUS
.
未开发票
}
else
if
(
invoiceState
==
2
)
{
//未申请
findParam
[
"$or"
]
=
[{
invoiceStatus
:
INVOICESTATUS
.
不具备开票条件
},
{
invoiceStatus
:
INVOICESTATUS
.
退回
}];
}
else
{
//全部
// findParam.invoiceStatus = {"$ne": INVOICESTATUS.已开发票};
}
}
else
if
(
payState
==
2
){
//未支付
findParam
.
state
=
ORDERSTATE
.
未支付
;
// findParam.state = ORDERSTATE.未支付;// todo 这里的条件有问题
findParam
[
"$or"
]
=
[
{
state
:
ORDERSTATE
.
未支付
},
{
state
:
ORDERSTATE
.
已支付
,
confirmReceipt
:{
"$ne"
:
RECEIPTCONFIRMATION
.
收款确认
}
}
];
if
(
!
invoiceState
||
invoiceState
==
1
)
{
//已申请 和 全部
findParam
.
invoiceStatus
=
INVOICESTATUS
.
未开发票
}
else
{
//未申请
...
...
@@ -185,6 +189,21 @@ export async function billStateList({name, memberType, documentId, invoiceApplyM
// if (orderInfo && orderInfo.operationTime) itemData.invoiceTime = moment(orderInfo.operationTime).format("YYYY-MM-DD");
// else itemData.invoiceTime = "-";
}
itemData
.
tjTime
=
""
;
if
(
info
.
state
==
PAYMENTSTATUS
.
未支付
)
{
itemData
.
weChartCreatePayMs
=
"-"
;
itemData
.
paymentMethod
=
"-"
;
}
if
(
itemData
.
isPay
==
"核对中"
)
{
itemData
.
state
=
PAYMENTSTATUS
.
未支付
;
//提交时间
itemData
.
tjTime
=
moment
(
info
.
payTime
).
format
(
"YYYY-MM-DD"
);
}
dataList
.
push
(
itemData
);
}
...
...
@@ -579,7 +598,7 @@ export async function invoicedList({name, memberType, documentId, invoiceExamine
itemData
.
name
=
userInfo
.
name
;
/**会员状态显示修改为:只记录当前一笔订单的状态,如:已支付订单状态显示正常 */
// itemData.memberState = changeEnumValue(MEMBERSTATE, userInfo.memberState); //修改前的
itemData
.
memberState
=
(
info
.
state
==
ORDERSTATE
.
已支付
&&
info
.
confirmReceipt
==
RECEIPTCONFIRMATION
.
收款确认
)
?
"
正常"
:
"异常
"
;
//修改后的
itemData
.
memberState
=
(
info
.
state
==
ORDERSTATE
.
已支付
&&
info
.
confirmReceipt
==
RECEIPTCONFIRMATION
.
收款确认
)
?
"
运行"
:
"提醒
"
;
//修改后的
dataList
.
push
(
itemData
);
}
...
...
src/biz/member/homePage.ts
View file @
d189eccb
...
...
@@ -71,7 +71,7 @@ export async function getMemberData({userId}) {
topInfo
.
integral
=
0
;
if
(
topInfo
.
joinTime
)
topInfo
.
joinTime
=
moment
(
topInfo
.
joinTime
).
format
(
"YYYY-MM-DD"
);
if
(
topInfo
.
lifespanEndTime
)
{
if
(
topInfo
.
memberState
==
MEMBERSTATE
.
异常
)
topInfo
.
lifespanEndTime
=
"欠费中"
;
if
(
topInfo
.
memberState
==
MEMBERSTATE
.
提醒
)
topInfo
.
lifespanEndTime
=
"欠费中"
;
else
topInfo
.
lifespanEndTime
=
moment
(
topInfo
.
lifespanEndTime
).
format
(
"YYYY-MM-DD"
);
}
...
...
@@ -443,7 +443,7 @@ export async function getApply({userId}) {
if
(
oldInfo
.
memberType
==
MEMBERTYPE
.
个人会员
)
{
if
(
oldInfo
.
lifespanEndTime
)
{
// 会员有效期结束时间小于当前时间的欠费会员
if
(
oldInfo
.
memberState
==
MEMBERSTATE
.
异常
||
oldInfo
.
lifespanEndTime
<
NowMs
)
isApply
=
false
;
if
(
oldInfo
.
memberState
==
MEMBERSTATE
.
提醒
||
oldInfo
.
lifespanEndTime
<
NowMs
)
isApply
=
false
;
}
}
...
...
@@ -764,7 +764,7 @@ export async function applyReason({applyStr, userId}) {
export
async
function
applyReasonMember
({
applyName
,
applySex
,
applyDuties
,
applyPhone
,
applyStr
,
userId
})
{
let
oldInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
});
if
(
!
oldInfo
||
!
oldInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
if
(
oldInfo
.
memberState
==
MEMBERSTATE
.
异常
)
throw
new
BizError
(
ERRORENUM
.
请先缴费
);
if
(
oldInfo
.
memberState
==
MEMBERSTATE
.
提醒
)
throw
new
BizError
(
ERRORENUM
.
请先缴费
);
const
Now
=
new
Date
().
valueOf
();
let
applyId
=
generateSystemId
(
TABLEENUM
.
理事变更审批历史表
,
userId
);
...
...
src/biz/member/rightsMgmt.ts
View file @
d189eccb
...
...
@@ -159,7 +159,7 @@ export async function info({id}) {
if
(
!
userInfo
||
!
userInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
目标数据不存在
);
if
(
userInfo
.
memberState
==
ADMINSTATE
.
冻结
)
{
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
:
id
},
{
memberState
:
MEMBERSTATE
.
正常
});
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
:
id
},
{
memberState
:
MEMBERSTATE
.
运行
});
}
else
{
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
:
id
},
{
memberState
:
ADMINSTATE
.
冻结
});
}
...
...
src/biz/member/taskSMS.ts
0 → 100644
View file @
d189eccb
/**
* 手动发送短信
*/
import
{
CODETYPE
,
MEMBERTYPE
,
MSGTYPE
}
from
"../../config/enum"
;
import
{
ERRORENUM
}
from
"../../config/errorEnum"
;
import
{
TABLEENUM
}
from
"../../data/models/model"
;
import
{
findOnce
}
from
"../../data/select"
;
import
{
BizError
}
from
"../../util/bizError"
;
import
{
sendMessage
}
from
"../sms"
;
export
async
function
taskOneSMS
({
sendType
,
userId
})
{
let
selectParam
=
{
userId
:
userId
};
let
userInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
selectParam
,
[
"userId"
,
"phone"
,
"memberType"
,
"name"
,
"unitName"
]);
if
(
!
userInfo
||
!
userInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
用户不存在
);
if
(
!
userInfo
.
phone
)
throw
new
BizError
(
ERRORENUM
.
手机号不存在
);
let
nameStr
=
userInfo
.
memberType
==
MEMBERTYPE
.
个人会员
?
userInfo
.
name
:
userInfo
.
unitName
;
await
sendMessage
(
userInfo
.
phone
,
{
name
:
nameStr
},
sendType
);
return
{
isSuccess
:
true
};
}
export
async
function
taskManySMS
({
sendType
,
userIdList
})
{
for
(
let
i
=
0
;
i
<
userIdList
.
length
;
i
++
)
{
let
userId
=
userIdList
[
i
];
let
selectParam
=
{
userId
:
userId
};
let
userInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
selectParam
,
[
"userId"
,
"phone"
,
"memberType"
,
"name"
,
"unitName"
]);
if
(
!
userInfo
||
!
userInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
用户不存在
);
if
(
!
userInfo
.
phone
)
throw
new
BizError
(
ERRORENUM
.
手机号不存在
);
let
nameStr
=
userInfo
.
memberType
==
MEMBERTYPE
.
个人会员
?
userInfo
.
name
:
userInfo
.
unitName
;
sendMessage
(
userInfo
.
phone
,
{
name
:
nameStr
},
sendType
);
}
return
{
isSuccess
:
true
};
}
\ No newline at end of file
src/biz/
member
/user.ts
→
src/biz/
portal
/user.ts
View file @
d189eccb
...
...
@@ -94,7 +94,7 @@ export async function logout({userId}) {
* @param param0
* @returns
*/
export
async
function
changePwd
({
userId
,
phone
,
pwd
,
confirmation
,
code
})
{
export
async
function
changePwd
({
userId
,
phone
,
pwd
,
confirmation
,
code
,
type
})
{
if
(
pwd
.
search
(
/^
[
A-Za-z0-9
]{6,18}
$/
)
<
0
)
throw
new
BizError
(
ERRORENUM
.
密码只能由
6
至
18
位字符和数字组成
);
if
(
pwd
!=
confirmation
)
throw
new
BizError
(
ERRORENUM
.
两次密码不一致
);
let
codeInfo
=
await
findOnce
(
TABLEENUM
.
验证码表
,
{
codeNum
:
code
,
phone
,
type
:
CODETYPE
.
修改密码
,
isUse
:
false
});
...
...
@@ -102,7 +102,10 @@ export async function changePwd({userId, phone, pwd, confirmation, code}) {
throw
new
BizError
(
ERRORENUM
.
验证码错误
);
}
if
(
!
userId
)
{
let
userInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
phone
},
[
"userId"
,
"isInput"
,
"inputUserChangePwd"
,
"unitMemberType"
,
"memberType"
]);
let
selectParam
:
any
=
{};
if
(
type
==
2
)
selectParam
.
mail
=
phone
;
else
selectParam
.
phone
=
phone
;
let
userInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
selectParam
,
[
"userId"
,
"isInput"
,
"inputUserChangePwd"
,
"unitMemberType"
,
"memberType"
]);
if
(
!
userInfo
||
!
userInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
手机号不正确
);
if
(
userInfo
.
isInput
&&
!
userInfo
.
inputUserChangePwd
&&
(
userInfo
.
memberType
==
MEMBERTYPE
.
单位会员
&&
userInfo
.
unitMemberType
==
UNITMEMBERTYPE
.
院校
))
{
throw
new
BizError
(
ERRORENUM
.
密码修改错误
);
...
...
@@ -119,7 +122,12 @@ export async function changePwd({userId, phone, pwd, confirmation, code}) {
if
(
!
userInfo
.
userId
)
{
throw
new
BizError
(
ERRORENUM
.
账号不存在
)
}
let
checkUserInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
phone
},
[
"userId"
]);
let
selectParam
:
any
=
{};
if
(
type
==
2
)
selectParam
.
mail
=
phone
;
else
selectParam
.
phone
=
phone
;
let
checkUserInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
selectParam
,
[
"userId"
]);
if
(
checkUserInfo
&&
checkUserInfo
.
userId
&&
checkUserInfo
.
userId
!=
userInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
该手机号已被注册
);
if
(
!
userInfo
.
isInput
)
{
throw
new
BizError
(
ERRORENUM
.
密码修改错误
);
...
...
@@ -289,71 +297,35 @@ export async function changeMailById({userId, mail, code}) {
* @param phone
* @returns
*/
export
async
function
memberChangePwdSendCode
({
userId
,
phone
})
{
if
(
!
userId
)
{
let
userInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
phone
},
[
"userId"
]);
if
(
!
userInfo
||
!
userInfo
.
userId
)
throw
new
BizError
(
ERRORENUM
.
不存在该手机号的账号
);
const
NowMs
=
new
Date
().
valueOf
();
let
codeSelectParam
=
{
phone
,
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
.
发送验证码次数超限制
,
`
${
phone
}
注册验证码超过限制3`
);
}
export
async
function
memberChangePwdSendCode
({
loginId
,
phone
})
{
const
Code
=
generateSMSCode
();
//生成短信验证码
/**发送短信模块 */
await
sendALSMS
(
Code
,
phone
);
let
addInfo
=
{
codeNum
:
Code
,
phone
,
sendMs
:
NowMs
,
type
:
CODETYPE
.
修改密码
,
isUse
:
false
};
await
addOneData
(
TABLEENUM
.
验证码表
,
addInfo
);
let
selectParam
=
{
"$or"
:[
{
loginId
:
loginId
,
memberType
:
MEMBERTYPE
.
个人会员
},
{
phone
:
loginId
},
{
unitName
:
loginId
,
memberType
:
MEMBERTYPE
.
单位会员
},
{
mail
:
loginId
,
memberType
:
MEMBERTYPE
.
单位会员
},
{
loginId
:
loginId
}
]
};
return
{
code
:
""
};
let
userInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
selectParam
,
[
"userId"
,
"phone"
]);
if
(
!
userInfo
)
{
throw
new
BizError
(
ERRORENUM
.
账号不存在
);
}
let
userInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
{
userId
},
[
"userId"
,
"isInput"
,
"inputUserChangePwd"
,
"phone"
,
"memberType"
,
"unitMemberType"
]);
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
=
{
phone
,
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
.
发送验证码次数超限制
,
`
${
phone
}
注册验证码超过限制3`
);
}
const
Code
=
generateSMSCode
();
//生成短信验证码
/**发送短信模块 */
await
sendALSMS
(
Code
,
phone
);
let
addInfo
=
{
codeNum
:
Code
,
phone
,
sendMs
:
NowMs
,
type
:
CODETYPE
.
修改密码
,
isUse
:
false
};
await
addOneData
(
TABLEENUM
.
验证码表
,
addInfo
);
return
{
code
:
""
};
}
else
{
//非导入用户
if
(
phone
!=
userInfo
.
phone
)
throw
new
BizError
(
ERRORENUM
.
与预览手机号码不一致
);
const
NowMs
=
new
Date
().
valueOf
();
let
codeSelectParam
=
{
phone
,
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
.
发送验证码次数超限制
,
`
${
phone
}
注册验证码超过限制3`
);
}
const
Code
=
generateSMSCode
();
//生成短信验证码
/**发送短信模块 */
await
sendALSMS
(
Code
,
phone
);
let
addInfo
=
{
codeNum
:
Code
,
phone
,
sendMs
:
NowMs
,
type
:
CODETYPE
.
修改密码
,
isUse
:
false
};
await
addOneData
(
TABLEENUM
.
验证码表
,
addInfo
);
return
{
code
:
""
};
}
if
(
userInfo
.
phone
!=
phone
)
throw
new
BizError
(
ERRORENUM
.
手机号不正确
);
const
Code
=
generateSMSCode
();
//生成短信验证码
const
NowMs
=
new
Date
().
valueOf
();
/**发送短信模块 */
await
sendALSMS
(
Code
,
phone
);
let
addInfo
=
{
codeNum
:
Code
,
phone
,
sendMs
:
NowMs
,
type
:
CODETYPE
.
修改密码
,
isUse
:
false
};
await
addOneData
(
TABLEENUM
.
验证码表
,
addInfo
);
return
{
isSuccess
:
true
};
}
...
...
@@ -363,74 +335,35 @@ export async function memberChangePwdSendCode({userId, phone}) {
* @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`
);
}
export
async
function
memberMailChangePwdSendCode
({
loginId
,
mail
})
{
let
selectParam
=
{
"$or"
:[
{
loginId
:
loginId
,
memberType
:
MEMBERTYPE
.
个人会员
},
{
phone
:
loginId
},
{
unitName
:
loginId
,
memberType
:
MEMBERTYPE
.
单位会员
},
{
mail
:
loginId
,
memberType
:
MEMBERTYPE
.
单位会员
},
{
loginId
:
loginId
}
]
};
const
Code
=
generateSMSCode
();
//生成短信验证码
let
userInfo
=
await
findOnce
(
TABLEENUM
.
用户表
,
selectParam
,
[
"userId"
,
"mail"
,
"name"
,
"unitName"
,
"memberType"
]);
if
(
!
userInfo
)
{
throw
new
BizError
(
ERRORENUM
.
账号不存在
);
}
/**发送邮件验证码模块 */
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
);
if
(
userInfo
.
mail
!=
mail
)
throw
new
BizError
(
ERRORENUM
.
邮箱不正确
);
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
();
//生成邮件验证码
const
Code
=
generateSMSCode
();
//生成短信验证码
/**发送邮件验证码模块 */
await
sendVerificationCode
(
userId
,
mail
,
MAILTYPE
.
邮箱获取验证码
,
Code
);
const
NowMs
=
new
Date
().
valueOf
();
let
addInfo
=
{
codeNum
:
Code
,
mail
,
sendMs
:
NowMs
,
type
:
CODETYPE
.
修改密码
,
isUse
:
false
};
await
addOneData
(
TABLEENUM
.
验证码表
,
addInfo
);
return
{
code
:
""
};
}
/**发送短信模块 */
let
nameStr
=
userInfo
.
memberType
==
MEMBERTYPE
.
个人会员
?
userInfo
.
name
:
userInfo
.
unitName
;
sendVerificationCode
(
mail
,
nameStr
,
Code
);
let
addInfo
=
{
codeNum
:
Code
,
phone
:
mail
,
sendMs
:
NowMs
,
type
:
CODETYPE
.
修改密码
,
isUse
:
false
};
await
addOneData
(
TABLEENUM
.
验证码表
,
addInfo
);
return
{
isSuccess
:
true
};
}
...
...
src/biz/sms.ts
View file @
d189eccb
...
...
@@ -109,33 +109,33 @@ export async function sendPassNotice(phone:string, name:string) {
export
async
function
test
()
{
// await check();
let
phone1
=
"18711017326"
;
//17274689187
await
sendALSMS
(
"3321"
,
phone1
);
// let phone2 = "16621071125";
// await sendALSMS("1234", phone2);
// let phone3 = "18120935727";
// await sendALSMS("1234", phone3);
// let param = {name:"测试测试1"};
// await sendMessage(phone, param, MSGTYPE.审核期间驳回通知, 1);
// await sendMessage(phone, param, MSGTYPE.审核期间驳回通知, 2);
// await sendMessage(phone, param, MSGTYPE.审核通过以及缴费通知);
// await sendMessage(phone, param, MSGTYPE.会员缴费财务驳回无需退款);
// await sendMessage(phone, param, MSGTYPE.会员缴费财务驳回需退款);
// await sendMessage(phone, param, MSGTYPE.会员缴费成功后针对线下汇款财务审核通过的时候发送);
// await sendMessage(phone, param, MSGTYPE.会员会费到期缴费通知);
// await sendMessage(phone, param, MSGTYPE.会员催缴通知提前开发票);
// await sendMessage(phone, param, MSGTYPE.会员宽限期最后一天);
// await sendMessage(phone, param, MSGTYPE.往期欠费通知);
// await sendMessage(phone, param, MSGTYPE.变更驳回);
// await sendMessage(phone, param, MSGTYPE.变更已通过);
// await sendMessage(phone, param, MSGTYPE.会员活动or会议通知);
// await sendMessage(phone, param, MSGTYPE.会员活动or会议催促未报名人员通知);
// await sendMessage(phone, param, MSGTYPE.财务退款通知);
console
.
log
(
"验证码测试完成"
);
}
//
export async function test() {
//
// await check();
//
let phone1 = "18711017326";//17274689187
//
await sendALSMS("3321", phone1);
//
// let phone2 = "16621071125";
//
// await sendALSMS("1234", phone2);
//
// let phone3 = "18120935727";
//
// await sendALSMS("1234", phone3);
//
// let param = {name:"测试测试1"};
//
// await sendMessage(phone, param, MSGTYPE.审核期间驳回通知, 1);
//
// await sendMessage(phone, param, MSGTYPE.审核期间驳回通知, 2);
//
// await sendMessage(phone, param, MSGTYPE.审核通过以及缴费通知);
//
// await sendMessage(phone, param, MSGTYPE.会员缴费财务驳回无需退款);
//
// await sendMessage(phone, param, MSGTYPE.会员缴费财务驳回需退款);
//
// await sendMessage(phone, param, MSGTYPE.会员缴费成功后针对线下汇款财务审核通过的时候发送);
//
// await sendMessage(phone, param, MSGTYPE.会员会费到期缴费通知);
//
// await sendMessage(phone, param, MSGTYPE.会员催缴通知提前开发票);
//
// await sendMessage(phone, param, MSGTYPE.会员宽限期最后一天);
//
// await sendMessage(phone, param, MSGTYPE.往期欠费通知);
//
// await sendMessage(phone, param, MSGTYPE.变更驳回);
//
// await sendMessage(phone, param, MSGTYPE.变更已通过);
//
// await sendMessage(phone, param, MSGTYPE.会员活动or会议通知);
//
// await sendMessage(phone, param, MSGTYPE.会员活动or会议催促未报名人员通知);
//
// await sendMessage(phone, param, MSGTYPE.财务退款通知);
//
console.log("验证码测试完成");
//
}
export
async
function
sendMessage
(
phone
,
param
,
type
,
subType
?)
{
...
...
src/biz/task.ts
View file @
d189eccb
...
...
@@ -64,7 +64,7 @@ export async function createUserOrder() {
let
subType
=
memberType
==
MEMBERTYPE
.
个人会员
?
individualMemberType
:
unitMemberType
;
let
newOrderStartTime
=
itemInfo
.
orderCycleEnd
;
//新订单的开始时间是上一条订单的结束时间
await
createOrder
(
userId
,
loginId
,
phone
,
unitName
,
newOrderStartTime
,
memberLevel
,
memberType
,
subType
,
false
);
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
{
paymentStatus
:
PAYMENTSTATUS
.
未支付
,
memberState
:
MEMBERSTATE
.
异常
,
});
await
updateOneData
(
TABLEENUM
.
用户表
,
{
userId
},
{
paymentStatus
:
PAYMENTSTATUS
.
未支付
,
memberState
:
MEMBERSTATE
.
提醒
,
});
addCount
+=
1
;
//发送邮件
...
...
src/config/enum.ts
View file @
d189eccb
...
...
@@ -327,18 +327,25 @@ export enum DWTYPE {
* 会员状态
*/
export
enum
MEMBERSTATE
{
正常
=
1
,
异常
,
运行
=
1
,
提醒
,
冻结
}
export
enum
MEMBERSTATECLIENT
{
运行
=
1
,
提醒
}
/**
* 已开发票-会员状态 前端用
*/
export
enum
INVOICESTATE
{
正常
=
1
,
异常
,
// 正常 = 1,
// 异常,
运行
=
1
,
提醒
,
}
...
...
@@ -402,6 +409,13 @@ export enum MEMBERLEVEL {
常务理事会员
,
}
export
enum
MEMBERLEVELCLIENT
{
理事会员
=
2
,
常务理事会员
,
}
/**
* 用户注册状态
...
...
@@ -895,9 +909,9 @@ export enum MSGTYPE {
会员缴费财务驳回无需退款
,
会员缴费财务驳回需退款
,
会员缴费成功后针对线下汇款财务审核通过的时候发送
,
会员会费到期缴费通知
,
会员催缴通知提前开发票
,
往期欠费通知
,
会员会费到期缴费通知
,
//本期未缴纳
会员催缴通知提前开发票
,
//提前开票
往期欠费通知
,
//往期未缴纳
会员宽限期最后一天
,
变更驳回
,
变更已通过
,
...
...
src/config/errorEnum.ts
View file @
d189eccb
...
...
@@ -85,7 +85,9 @@ export enum ERRORENUM {
与预览邮箱不一致
,
不存在该邮箱的账号
,
该邮箱已被注册
,
请先缴费
请先缴费
,
邮箱不正确
,
手机号不存在
}
export
enum
ERRORCODEENUM
{
...
...
src/data/models/model.ts
View file @
d189eccb
...
...
@@ -369,9 +369,9 @@ const ModelArray = [
registerFlow
:{
type
:
'Number'
,
default
:
REGISTERFLOW
.
未注册
},
//会员注册流程 枚举
isAdmin
:{
type
:
'Number'
,
index
:
true
,
default
:
STATE
.
否
},
//是否是管理员
userRegisterState
:{
type
:
'Number'
,
default
:
USERREGISTERSTATE
.
待审核
},
//用户注册状态 枚举USERREGISTERSTATE
memberState
:{
type
:
'Number'
,
default
:
MEMBERSTATE
.
异常
},
//会员状态 枚举 MEMBERSTATE
memberState
:{
type
:
'Number'
,
default
:
MEMBERSTATE
.
提醒
},
//会员状态 枚举 MEMBERSTATE
certificateType
:
'Number'
,
//证书类型 枚举CERTIFICATETYPE
individualMemberType
:{
type
:
'Number'
},
//个人会员类型 枚举INDIVIDUALMEMBERTYPE
individualMemberType
:{
type
:
'Number'
},
//个人会员类型 枚举
INDIVIDUALMEMBERTYPE
memberLevel
:{
type
:
'Number'
,
default
:
MEMBERLEVEL
.
普通会员
},
//会员等级、职务 枚举 MEMBERLEVEL 【会员管理用】
isFirstPay
:{
type
:
'Boolean'
,
default
:
false
},
//是否完成首次支付
/**宽限期状态 */
...
...
@@ -459,8 +459,7 @@ const ModelArray = [
rejectRemarks
:
'String'
,
//变更理事驳回理由
applyId
:{
type
:
'String'
,
index
:
true
},
takeeffectType
:
'Number'
,
//生效类型 上半年/下半年 ZHIWUSHENGXIAOTYPE
memberLevelChangeTime
:{
type
:
'Number'
},
//变更时间 年
infoChangeId
:{
type
:
"String"
,
index
:
true
},
//资料更新关联id
infoChangeMs
:{
type
:
"Number"
},
//资料更新申请时间
infoChangeOptionType
:{
type
:
"Number"
},
//INFOCHANGEAPPLYTYPE
...
...
src/main.ts
View file @
d189eccb
import
{
testCallback
}
from
"./biz/member/cost"
;
import
{
initActivity
}
from
"./biz/member/msgActivity"
;
import
{
initSMS
,
test
}
from
"./biz/sms"
;
import
{
initSMS
}
from
"./biz/sms"
;
import
{
initSystemTask
}
from
"./biz/task"
;
import
{
initConfig
,
systemConfig
}
from
"./config/serverConfig"
;
import
{
initDataBaseModel
}
from
"./data/db/db"
;
...
...
src/routers/apply/router.ts
View file @
d189eccb
...
...
@@ -136,6 +136,23 @@ export const Config = {
],
bindBiz
:
applyBiz
.
infomationChangeOut
}
],
"理事名单"
:[
{
apiName
:
"理事会员列表"
,
subUrl
:
'/lishi/list'
,
param
:[
{
key
:
"name"
,
type
:
"String"
,
desc
:
"单位/个人名称"
,
isNull
:
true
},
{
key
:
"memberType"
,
type
:
"Number"
,
desc
:
"会员类别"
,
isNull
:
true
},
{
key
:
"phone"
,
type
:
"String"
,
desc
:
"当前页"
,
isNull
:
true
},
{
key
:
"memberLevel"
,
type
:
"Number"
,
desc
:
"一页大小"
,
isNull
:
true
},
{
key
:
"memberState"
,
type
:
"Number"
,
desc
:
"一页大小"
,
isNull
:
true
},
{
key
:
"year"
,
type
:
"Number"
,
desc
:
"一页大小"
,
isNull
:
true
},
{
key
:
"pageNumber"
,
type
:
"Number"
,
desc
:
"一页大小"
},
{
key
:
"pageSize"
,
type
:
"Number"
,
desc
:
"一页大小"
},
],
bindBiz
:
applyBiz
.
liShiList
},
]
}
...
...
src/routers/member/router.ts
View file @
d189eccb
import
*
as
userBiz
from
"../../biz/
member
/user"
;
import
*
as
userBiz
from
"../../biz/
portal
/user"
;
import
*
as
memberBiz
from
"../../biz/member/member"
;
import
*
as
examineBiz
from
"../../biz/member/examine"
;
import
*
as
memberFeesBiz
from
"../../biz/member/memberFees"
;
...
...
@@ -449,15 +449,16 @@ export const Config = {
bindBiz
:
userBiz
.
logout
},
{
apiName
:
"修改密码"
,
apiName
:
"修改密码"
,
//未登录修改密码
subUrl
:
'/changepwd'
,
notMiddleware
:
true
,
param
:[
{
key
:
"userId"
,
type
:
"String"
,
desc
:
"userId"
,
isNull
:
true
},
//
{key:"userId", type:"String", desc:"userId", isNull:true},
{
key
:
"phone"
,
type
:
"String"
,
desc
:
"绑定手机号"
},
{
key
:
"pwd"
,
type
:
"String"
,
desc
:
"密码"
},
{
key
:
"confirmation"
,
type
:
"String"
,
desc
:
"二次确认密码"
},
{
key
:
"code"
,
type
:
"String"
,
desc
:
"验证码"
}
{
key
:
"code"
,
type
:
"String"
,
desc
:
"验证码"
},
{
key
:
"type"
,
type
:
"Number"
,
desc
:
"=1d的时候是手机号 =2的时候是邮箱"
},
],
bindBiz
:
userBiz
.
changePwd
},
...
...
@@ -511,20 +512,20 @@ export const Config = {
],
bindBiz
:
userBiz
.
changeMailById
},{
apiName
:
"修改密码用短信验证码"
,
apiName
:
"修改密码用短信验证码"
,
//未登录情况下修改密码
subUrl
:
'/getchangepwdcode'
,
notMiddleware
:
true
,
param
:[
{
key
:
"
userId"
,
type
:
"String"
,
desc
:
"userId"
,
isNull
:
true
},
{
key
:
"
loginId"
,
type
:
"String"
,
desc
:
"loginId"
},
{
key
:
"phone"
,
type
:
"String"
,
desc
:
"绑定手机号"
}
],
bindBiz
:
userBiz
.
memberChangePwdSendCode
},{
apiName
:
"修改密码用邮件验证码"
,
apiName
:
"修改密码用邮件验证码"
,
//未登录情况下修改密码
subUrl
:
'/getmailchangepwdcode'
,
notMiddleware
:
true
,
param
:[
{
key
:
"
userId"
,
type
:
"String"
,
desc
:
"user
Id"
,
isNull
:
true
},
{
key
:
"
loginId"
,
type
:
"String"
,
desc
:
"login
Id"
,
isNull
:
true
},
{
key
:
"mail"
,
type
:
"String"
,
desc
:
"绑定邮箱"
}
],
bindBiz
:
userBiz
.
memberMailChangePwdSendCode
...
...
src/routers/msgActivity/router.ts
View file @
d189eccb
...
...
@@ -3,6 +3,7 @@
*/
import
*
as
msgActivityBiz
from
"../../biz/member/msgActivity"
;
import
*
as
taskSMSBiz
from
"../../biz/member/taskSMS"
;
import
{
ACTIVITYTYPE
}
from
"../../config/enum"
;
export
const
FirstName
=
'消息管理'
;
...
...
@@ -261,6 +262,26 @@ export const Config = {
bindBiz
:
msgActivityBiz
.
homeActivityDetailed
},
],
"手动发送短信"
:[
{
apiName
:
"手动发送单个"
,
subUrl
:
'/sms/send/one'
,
param
:[
{
key
:
"sendType"
,
type
:
"Number"
,
desc
:
"参考枚举"
},
{
key
:
"userId"
,
type
:
"String"
,
desc
:
"参考枚举"
},
],
bindBiz
:
taskSMSBiz
.
taskOneSMS
},
{
apiName
:
"手动发送多个"
,
subUrl
:
'/sms/send/many'
,
param
:[
{
key
:
"sendType"
,
type
:
"Number"
,
desc
:
"参考枚举"
},
{
key
:
"userIdList"
,
type
:
"[String]"
,
desc
:
"参考枚举"
},
],
bindBiz
:
taskSMSBiz
.
taskManySMS
},
]
}
...
...
src/routers/public/router.ts
View file @
d189eccb
...
...
@@ -174,6 +174,13 @@ export const Config = {
bindBiz
:
publicBiz
.
setEnumInterface
},
{
apiName
:
"会员职务"
,
subUrl
:
'/memberlevelclient'
,
param
:[],
defaultParam
:
enumConfig
.
MEMBERLEVELCLIENT
,
bindBiz
:
publicBiz
.
setEnumInterface
},
{
apiName
:
"会员类别"
,
//前端用
subUrl
:
'/membertypeecc'
,
param
:[],
...
...
@@ -209,6 +216,13 @@ export const Config = {
bindBiz
:
publicBiz
.
setEnumInterface
},
{
apiName
:
"会员状态"
,
subUrl
:
'/memberstateclient'
,
param
:[],
defaultParam
:
enumConfig
.
MEMBERSTATECLIENT
,
bindBiz
:
publicBiz
.
setEnumInterface
},
{
apiName
:
"下拉框选择届次"
,
subUrl
:
'/session'
,
param
:[],
...
...
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