Commit 2a08afc0 by lixinming
parents eda3384a d8b0caa2
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -3,7 +3,7 @@
<!-- 默认null mysql填入mysql mongodb填入mongo 都有填all 如果没有数据库填null -->
<specifyDB>all</specifyDB>
<mongodb>
<path>127.0.0.1</path>
<path>192.168.0.105</path>
<port>27017</port>
<w>1</w>
<!-- <dataBase>baseDB</dataBase> -->
......
/**
* 黑名单
*/
import moment = require("moment");
import { MEMBERLEVEL, MEMBERSTATE, MEMBERTYPE, STATE } from "../../config/enum";
import { TABLEENUM } from "../../data/models/model";
import { findCount, findOnce, findToPage } from "../../data/select";
import { extractData } from "../../util/piecemeal";
import { changeEnumValue } from "../../util/verificationEnum";
import { getCityNameByCode } from "../../config/cityConfig";
import { BizError } from "../../util/bizError";
import { ERRORENUM } from "../../config/errorEnum";
import { updateOneData } from "../../data/update";
import { successResult } from "../../tools/system";
import { deleteOneData } from "../../data/delete";
/**
* 移入黑名单【操作在单位会员页、个人会员页】
* @param id 会员Id
* @returns
*/
export async function moveInBlackUser({id}) {
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id}, ["userId"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.用户表, {userId:id}, {isBlackUser:STATE.});
return successResult();
}
/**
* 黑名单列表
* @param param0
* @returns
*/
export async function blackList({name, joinStartTime, joinEndTime, memberType, memberLevel, session, sheng, shi, qu, pageNumber}) {
let selectParam:any = {
isAdmin: STATE.,
isBlackUser: STATE.
};
if (name) selectParam["$or"] = [{name:name}, {unitName:name}];
if (joinStartTime) {
selectParam["joinTime"] = {"$gt":joinStartTime};
};
if (joinEndTime) {
if (!selectParam["joinTime"]) selectParam["joinTime"] = {};
selectParam["joinTime"]["$lt"] = joinEndTime;
};
if (memberType && memberType.length) selectParam["$or"] = [ {unitMemberType:{"$in":memberType}}, {individualMemberType:{"$in":memberType}} ];
if (memberLevel && memberLevel.length) selectParam.memberLevel = {"$in":memberLevel};
if (session) selectParam.session = session;
if (sheng) selectParam.sheng = sheng;
if (shi) selectParam.shi = shi;
if (qu) selectParam.qu = qu;
const SelectFiles = ["userId", "memberState", "loginId", "phone", "joinTime", "memberLevel", "sheng", "shi", "qu", "unitName", "name", "memberType"];
let dbList = await findToPage(TABLEENUM.用户表, selectParam, SelectFiles, pageNumber);
let dataCount = await findCount(TABLEENUM.用户表, selectParam);
const DataFiles = ["userId", "memberState", "loginId", "phone", "joinTime", "memberLevel", "sheng", "shi", "qu", "name", "memberType"];
let dataList = [];
dbList.forEach(info => {
let item:any = extractData(info, DataFiles);
if (info.memberType == MEMBERTYPE.单位会员) {
item.name = info.unitName;
}
item.memberState = changeEnumValue(MEMBERSTATE, item.memberState);
if (!item.memberLevel) item.memberLevel = "未选择";
else item.memberLevel = changeEnumValue(MEMBERLEVEL, item.memberLevel);
item.memberType = changeEnumValue(MEMBERTYPE, item.memberType);
item.joinTime = moment(item.joinTime).format("YYYY-MM-DD");
item.sheng = getCityNameByCode(item.sheng);
item.shi = getCityNameByCode(item.shi);
item.qu = getCityNameByCode(item.qu);
dataList.push(item);
});
return {dataList, dataCount};
}
/**
* 移除黑名单
* @param id 会员Id
* @returns
*/
export async function shiftOutBlackUser({id}) {
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id}, ["userId"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
await updateOneData(TABLEENUM.用户表, {userId:id}, {isBlackUser:STATE.});
return successResult();
}
/**
* 删除信息
* @param id 会员Id
* @returns
*/
export async function delBlackUser({id}) {
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id, isBlackUser:STATE.}, ["userId"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
await deleteOneData(TABLEENUM.用户表, {userId:id});
return successResult();
}
/**
* 标签系统
*/
import moment = require("moment");
import { TABLEENUM } from "../../data/models/model";
import { find, findCount, findOnce, findToPage, findToSortToPage } from "../../data/select";
import { extractData } from "../../util/piecemeal";
import { BizError } from "../../util/bizError";
import { generateSystemId, successResult } from "../../tools/system";
import { addOneData } from "../../data/add";
import { ERRORENUM } from "../../config/errorEnum";
import { updateOneData } from "../../data/update";
import { deleteOneData } from "../../data/delete";
/**
* 标签系统列表
* @param lableName 标签名称
* @param createTime 创建时间
* @param pageNumber 当前页
*/
export async function lableList({lableName, startCreateTime, endCreateTime, pageNumber}) {
let selectParam:any = {};
if (lableName) selectParam.lableName = lableName;
if (startCreateTime) selectParam.createTime = {"$gt":startCreateTime};
if (endCreateTime) {
if (!selectParam["createTime"]) selectParam["createTime"] = {};
selectParam["createTime"]["$lt"] = endCreateTime;
}
const SelectFiles = ["lableId", "lableName", "createTime"];
let dbList = await findToSortToPage(TABLEENUM.标签表, selectParam, SelectFiles, {createTime:-1}, pageNumber);
let dataCount = await findCount(TABLEENUM.标签表, selectParam);
let dataList = [];
dbList.forEach( info => {
let item:any = extractData(info, SelectFiles);
item.createTime = moment(item.createTime).format("YYYY-MM-DD");
dataList.push(item);
});
return {dataList, dataCount};
}
/**
* 新建标签
* @param id
* @param lableName 标签名称
* @returns
*/
export async function createLable({userId, lableName}) {
let lableInfo = await findOnce(TABLEENUM.标签表, {lableName}, ["lableId"]);
if (lableInfo) throw new BizError(ERRORENUM.标签重复);
/**标签Id */
const lableId = generateSystemId(TABLEENUM.标签表, userId);
let addInfo = {
lableId,
lableName,
createTime:new Date().valueOf()
};
await addOneData(TABLEENUM.标签表, addInfo);
return successResult();
}
/**
* 修改标签名称
* @param lableId 标签id
* @param lableName 标签名称
*/
export async function updateLable({lableId, lableName}) {
let lableInfo = await findOnce(TABLEENUM.标签表, {lableId}, ["lableId"]);
if (!lableInfo || !lableInfo.lableId) throw new BizError(ERRORENUM.标签数据不存在);
await updateOneData(TABLEENUM.标签表, {lableId}, {lableName});
return successResult();
}
/**
* 删除标签
* @param lableId 标签Id
*/
export async function delLable({lableId}) {
let lableInfo = await findOnce(TABLEENUM.标签表, {lableId}, ["lableId"]);
if (!lableInfo || !lableInfo.lableId) throw new BizError(ERRORENUM.标签数据不存在);
await deleteOneData(TABLEENUM.标签表, {lableId});
return successResult();
}
/**
* 添加标签只显示未选中标签数据
* @param id 选中需要添加标签的会员id
*/
export async function unCheckedLable({id}) {
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id}, ["userId", "lableId"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
let lableInfo = await find(TABLEENUM.标签表, {lableId:{"$nin":userInfo.lableId}}, ["lableId", "lableName"]);
return lableInfo;
}
/**
* 个人会员-分配标签
* @param id 会员id
* @param lableId 选中新增的标签id 多选 ["", ""]
*/
export async function addMemberLable({id, lableId}) {
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id}, ["userId", "lableId"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
let lableInfo = userInfo.lableId || [];
for (let i = 0; i < lableId.length; i++) {
lableInfo.push(lableId[i]);
console.log();
}
await updateOneData(TABLEENUM.用户表, {userId:id}, {lableId:lableInfo});
return successResult();
}
/**
* 删除标签只显示已选中标签数据
* @param id 选中需要添加标签的会员id
*/
export async function checkedLable({id}) {
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id}, ["userId", "lableId"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
let lableInfo = await find(TABLEENUM.标签表, {lableId:{"$in":userInfo.lableId}}, ["lableId", "lableName"]);
return lableInfo;
}
/**
* 个人会员-删除标签
* @param id 会员id
* @param lableId 需要删除的标签Id 多选 ["", ""]
*/
export async function delMemberLable({id, lableId}) {
let userInfo = await findOnce(TABLEENUM.用户表, {userId:id}, ["userId", "lableId"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.目标数据不存在);
let lableInfo = userInfo.lableId;
let newLable = lableInfo.filter(item => !lableId.includes(item));
await updateOneData(TABLEENUM.用户表, {userId:id}, {lableId:newLable});
return successResult();
}
......@@ -32,11 +32,12 @@ import { eccFormParam } from "../../util/verificationParam";
* @param shi 市
* @param pageNumber 当前页
*/
export async function unitMemberList({unitName, mail, phone, joinStartTime, joinEndTime, unitMemberType, memberLevel, session, memberState, sheng, shi, pageNumber}) {
export async function unitMemberList({unitName, mail, phone, joinStartTime, joinEndTime, unitMemberType, memberLevel, session, memberState, sheng, shi, lableId, pageNumber}) {
let selectParam:any = {
isAdmin:STATE.,
memberType : MEMBERTYPE.单位会员,
userRegisterState : USERREGISTERSTATE.通过
userRegisterState : USERREGISTERSTATE.通过,
isBlackUser:STATE.
};
if (unitName) selectParam.unitName = unitName;
if (mail) selectParam.mail = mail;
......@@ -54,14 +55,17 @@ export async function unitMemberList({unitName, mail, phone, joinStartTime, join
if (memberState) selectParam.memberState = memberState;
if (sheng) selectParam.sheng = sheng;
if (shi) selectParam.shi = shi;
if (lableId && lableId.length) selectParam.lableId = {"$in":lableId};
const SelectFiles = ["userId", "memberState", "unitName", "loginId", "phone", "joinTime", "unitMemberLevel", "sheng", "shi", "qu"];
const SelectFiles = ["userId", "memberState", "unitName", "loginId", "phone", "joinTime", "unitMemberLevel", "sheng", "shi", "qu", "lableId"];
let dbList = await findToPage(TABLEENUM.用户表, selectParam, SelectFiles, pageNumber);
let dataCount = await findCount(TABLEENUM.用户表, selectParam);
let dataList = [];
dbList.forEach(info => {
for (let i = 0; i < dbList.length; i++) {
let info = dbList[i];
let item:any = extractData(info, SelectFiles);
item.memberState = changeEnumValue(MEMBERSTATE, item.memberState);
if (!item.memberLevel) item.memberLevel = "未选择";
......@@ -70,8 +74,14 @@ export async function unitMemberList({unitName, mail, phone, joinStartTime, join
item.sheng = getCityNameByCode(item.sheng);
item.shi = getCityNameByCode(item.shi);
item.qu = getCityNameByCode(item.qu);
item.lableId = [];
let lableInfo = await find(TABLEENUM.标签表, {lableId:{"$in":info.lableId}}, ["lableName"]);
lableInfo.forEach ( lableItem => {
item.lableId.push(lableItem.lableName);
})
dataList.push(item);
});
}
return {dataList, dataCount};
}
......@@ -173,7 +183,6 @@ export async function unitMemberUpdate({form, keyanForm, id}) {
await deleteManyData(TABLEENUM.单位所获得科研成果表, {userId:id});
}
/**添加新的科研信息 */
let addList = [];
for (let i = 0; i < keyanForm.length; i++) {
......@@ -219,10 +228,11 @@ export async function delResearch({id}) {
* @param sheng 省
* @param shi 市
*/
export async function individualMemberList({name, documentId, phone, mail, joinStartTime, joinEndTime, memberLevel, session, profCategory, memberState, sheng, shi, pageNumber}) {
export async function individualMemberList({name, documentId, phone, mail, joinStartTime, joinEndTime, memberLevel, session, profCategory, memberState, sheng, shi, lableId, pageNumber}) {
let selectParam:any = {
memberType : MEMBERTYPE.个人会员,
userRegisterState : USERREGISTERSTATE.通过
userRegisterState : USERREGISTERSTATE.通过,
isBlackUser:STATE.
};
if (name) selectParam.name = name;
if (documentId) selectParam.documentId = documentId;
......@@ -241,27 +251,34 @@ export async function individualMemberList({name, documentId, phone, mail, joinS
if (memberState) selectParam.memberState = memberState;
if (sheng) selectParam.sheng = sheng;
if (shi) selectParam.shi = shi;
if (lableId && lableId.length) selectParam.lableId = {"$in":lableId};
let selectConf = ["userId", "memberState", "unitName", "name", "sex", "nation", "loginId", "phone", "joinTime", "memberLevel", "sheng", "shi", "qu"];
let selectConf = ["userId", "memberState", "unitName", "name", "sex", "nation", "loginId", "phone", "joinTime", "memberLevel", "sheng", "shi", "qu", "lableId"];
let dbList = await findToPage(TABLEENUM.用户表, selectParam, selectConf, pageNumber);
let dataCount = await findCount(TABLEENUM.用户表, selectParam);
let dataList = [];
dbList.forEach(info => {
for (let i = 0; i < dbList.length; i++) {
let info = dbList[i];
let item:any = extractData(info, selectConf);
item.memberState = changeEnumValue(MEMBERSTATE, item.memberState);
if (!item.memberLevel) item.memberLevel = "未选择";
else item.memberLevel = changeEnumValue(MEMBERLEVEL, item.memberLevel);
item.joinTime = moment(item.joinTime).format("YYYY-MM-DD");
else item.memberLevel = changeEnumValue(MEMBERLEVEL, item.memberLevel)
item.joinTime = moment(item.joinTime).format("YYYY-MM-DD")
item.shi = getCityNameByCode(item.shi);
item.sheng = getCityNameByCode(item.sheng);
item.qu = getCityNameByCode(item.qu);
item.lableId = [];
let lableInfo = await find(TABLEENUM.标签表, {lableId:{"$in":info.lableId}}, ["lableName"]);
lableInfo.forEach ( lableItem => {
item.lableId.push(lableItem.lableName);
})
dataList.push(item);
});
}
return {dataList, dataCount};
}
......@@ -390,7 +407,9 @@ export async function outPutIndividualMembers({exportColumns}) {
let addList = ["sheng", "shi", "qu"];
let dataList = [selectTitle];
dbList.forEach(info => {
for (let i = 0; i < dbList.length; i++) {
let info = dbList[i];
let subList = [];
for (let i = 0; i < selectConf.length; i++) {
let key = selectConf[i];
......@@ -408,11 +427,19 @@ export async function outPutIndividualMembers({exportColumns}) {
else if (key == "education") value = changeEnumValue(EDUCATION, value);
else if (key == "profCategory") value = changeEnumValue(PROFCATEGORY, value);
else if (addList.indexOf(key) != -1) value = getCityNameByCode(value);
else if (key == "lableId") {
value = [];
let lableInfo = await find(TABLEENUM.标签表, {lableId:{"$in":info.lableId}}, ["lableName"]);
lableInfo.forEach ( lableItem => {
value.push(lableItem.lableName);
});
value = value.toString();
}
}
subList.push(value);
}
dataList.push(subList);
});
}
return {dataList};
}
......@@ -449,7 +476,9 @@ export async function outPutUnitMembers({exportColumns}) {
let timeChnageList = ["joinTime"];
let dataList = [selectTitle];
dbList.forEach(info => {
for (let i = 0; i < dbList.length; i++) {
let info = dbList[i];
let subList = [];
for (let i = 0; i < selectConf.length; i++) {
let key = selectConf[i];
......@@ -461,11 +490,19 @@ export async function outPutUnitMembers({exportColumns}) {
else if (key == "certificateType") value = changeEnumValue(CERTIFICATETYPE, value);
else if (key == "individualMemberType") value = changeEnumValue(INDIVIDUALMEMBERTYPE, value);
else if (key == "memberLevel") value = changeEnumValue(MEMBERLEVEL, value);
else if (key == "lableId") {
value = [];
let lableInfo = await find(TABLEENUM.标签表, {lableId:{"$in":info.lableId}}, ["lableName"]);
lableInfo.forEach ( lableItem => {
value.push(lableItem.lableName);
});
value = value.toString();
}
}
subList.push(value);
}
dataList.push(subList);
});
}
return {dataList}
}
......
......@@ -23,6 +23,8 @@ import { sendALSMS } from "../sms";
export async function login({loginId, pwd}) {
let selectParam = { "$or":[{loginId:loginId}, {phone:loginId}] };
let userInfo = await findOnce(TABLEENUM.用户表, selectParam);
if (userInfo.isBlackUser == STATE.) throw new BizError(ERRORENUM["您的会员服务已过期,如需恢复请联系秘书处:010-86208681"]);
if (!userInfo || !userInfo.userId) throw new BizError(ERRORENUM.账号或密码错误);
......@@ -126,4 +128,6 @@ export async function memberChangePwdSendCode({phone}) {
await addOneData(TABLEENUM.验证码表, addInfo);
return {code:""};
}
\ No newline at end of file
}
......@@ -28,7 +28,7 @@ export function getOss({userId, type, fileName}) {
OSSAccessKeyId:OSSAccessKeyId,
dirName:`${userId}/${FirName}/${new Date().valueOf()}`,
policyBase64,
host:'http://wenhuabu-files.oss-cn-beijing.aliyuncs.com',
host:'https://wenhuabu-files.oss-cn-beijing.aliyuncs.com',
signature
};
}
\ No newline at end of file
import moment = require("moment");
import { ARTICLEPOSITION, DONGTAIZIXUNSUBTYPE, PARTYBUILDSUBTYPEENUM, PARTYBUILDTYPEENUM } from "../config/enum";
import { ARTICLEPOSITION, CLIENTACTIVITYLABLE, CLIENTMSGLABLE, DONGTAIZIXUNSUBTYPE, PARTYBUILDSUBTYPEENUM, PARTYBUILDTYPEENUM } from "../config/enum";
import { TABLEENUM } from "../data/models/model";
import { find } from "../data/select";
import { getEdition } from "../tools/system";
......@@ -99,4 +99,50 @@ export async function getSession() {
}
return {session}
}
\ No newline at end of file
}
/**
* 获取所有标签
*/
export async function getLable() {
let lableInfo = await find(TABLEENUM.标签表, {}, ["lableId", "lableName"]);
return lableInfo;
}
/**
* 获取通知对象
*/
export async function getMsgNoticeObject() {
let lableData = setEnumInterface({defaultParam:CLIENTMSGLABLE});
let lableInfo = await find(TABLEENUM.标签表, {}, ["lableId", "lableName"]);
lableInfo.forEach( info => {
let item = {key:info.lableName, value:info.lableId}
lableData.dataList.push(item);
})
return {lableData};
}
/**
* 获取通知对象
*/
export async function getNoticeObject() {
let lableData = setEnumInterface({defaultParam:CLIENTACTIVITYLABLE});
let lableInfo = await find(TABLEENUM.标签表, {}, ["lableId", "lableName"]);
lableInfo.forEach( info => {
let item = {key:info.lableName, value:info.lableId}
lableData.dataList.push(item);
})
return {lableData};
}
......@@ -5,12 +5,12 @@
import { BANXUELEIXING, CODETYPE, DOCUMENTTYPE, INDIVIDUALMEMBERTYPE, MEMBERLEVEL, MEMBERTYPE, NATION, OPERATIONREHAVIOR, PROFCATEGORY, REGISTERFLOW, SEX, STATE, UNITMEMBERTYPE, USERREGISTERSTATE } from "../config/enum";
import { ERRORENUM } from "../config/errorEnum";
import { addManyData, addOneData } from "../data/add";
import { deleteManyData } from "../data/delete";
import { deleteManyData, deleteOneData } from "../data/delete";
import { TABLEENUM } from "../data/models/model";
import { find, findCount, findOnce, findOnceToSort } from "../data/select";
import { updateOneData } from "../data/update";
import * as sysTools from "../tools/system";
import { BizError } from "../util/bizError";
import { BizError, ConsoleError } from "../util/bizError";
import { extractData } from "../util/piecemeal";
import { changeEnumValue, eccEnumValue } from "../util/verificationEnum";
import { eccFormParam } from "../util/verificationParam";
......@@ -53,7 +53,10 @@ export async function memberRegister1({form}) {
registerFlow:REGISTERFLOW.完成第一步,//会员注册流程状态
loginId, mail, pwd, phone,
token,
individualMemberType:INDIVIDUALMEMBERTYPE.普通会员
individualMemberType:INDIVIDUALMEMBERTYPE.普通会员,
isBlackUser:STATE.,
saveUnsubmitted:STATE.,
firstStep:NowMs,
};
await addOneData(TABLEENUM.用户表, addInfo);
......@@ -99,6 +102,7 @@ export async function memberRegister2({form, id}) {
//更新注册流程
form.registerFlow = REGISTERFLOW.完成第二步;
form.askForTime = new Date().valueOf();
form.saveUnsubmitted = STATE.;
await updateOneData(TABLEENUM.用户表, {userId:id}, form);
/**提交审批历史信息 */
......@@ -154,6 +158,9 @@ export async function memberRegister2({form, id}) {
phone,
token,
unitMail:mail,
isBlackUser:STATE.,
saveUnsubmitted:STATE.,
firstStep:NowMs,
};
await addOneData(TABLEENUM.用户表, addInfo);
......@@ -195,7 +202,7 @@ export async function unitMemberRegister2({form, keyanForm, id}) {
eccEnumValue(EccFuncName, '单位会员类型', UNITMEMBERTYPE, form.unitMemberType);
form.registerFlow = REGISTERFLOW.完成第二步;
await updateOneData(TABLEENUM.用户表, {userId:id}, form);
await updateOneData(TABLEENUM.用户表, {userId:id, saveUnsubmitted:STATE.}, form);
/**注册提交单位科研成果信息 */
await deleteManyData(TABLEENUM.单位所获得科研成果表, {userId:id});
......@@ -237,7 +244,14 @@ export async function unitMemberRegister3({application, id}) {
remarks = "重新提交";
}
await updateOneData(TABLEENUM.用户表, {userId:id}, {userRegisterState, applicationForm:application, registerFlow:REGISTERFLOW.完成第三步, askForTime : new Date().valueOf()});
let updateForm = {
userRegisterState,
applicationForm:application,
registerFlow:REGISTERFLOW.完成第三步,
askForTime : new Date().valueOf(),
saveUnsubmitted:STATE.
};
await updateOneData(TABLEENUM.用户表, {userId:id}, updateForm);
/**提交审批历史信息 */
let addApprovalHistory = {
......@@ -376,4 +390,139 @@ export async function individualMemberDetails({id}) {
}
// 2.0 注册第二步保存功能
/**
* 会员注册【单位会员】【流程二】
* 注册第二步保存未提交
* @param form 表单
* @param keyanForm 科研表单
* @param userId
* @returns
*/
export async function unitMemberNotSaved({form, keyanForm, id}) {
const keyanFormItemConfig = {
startTime: {type:'Number'},
endTime: {type:'Number'},
describe: {type:'String'}
};
if (keyanForm) {
keyanForm.forEach(item => {
eccFormParam("注册单位会员第二步保存未提交", keyanFormItemConfig, item );
});
}
let selectUserFiles = ["userId", "registerFlow", "userRegisterState"];
let oldInfo = await findOnce(TABLEENUM.用户表, {userId:id, 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 = '注册单位会员流程第二步保存未提交';
eccEnumValue(EccFuncName, '专业类别', PROFCATEGORY, form.profCategory);
eccEnumValue(EccFuncName, '院校办学类型', BANXUELEIXING, form.yuanXiaoBanXueLeiXing);
eccEnumValue(EccFuncName, '单位会员类型', UNITMEMBERTYPE, form.unitMemberType);
form.saveUnsubmitted = STATE.;
await updateOneData(TABLEENUM.用户表, {userId:id, saveUnsubmitted:STATE.}, form);
return sysTools.successResult();
}
/**
* 会员注册【个人会员】【流程二】
* 注册第二步保存未提交
* @param form
* @param userId
* @returns
*/
export async function memberNotSaved({form, id}) {
/**校验用户是否存在 */
let selectUserFiles = ["userId", "registerFlow", "userRegisterState"];
let oldInfo = await findOnce(TABLEENUM.用户表, {userId:id, 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 = '注册个人会员第二步保存未提交';
eccEnumValue(EccFuncName, '性别', SEX, form.sex);
eccEnumValue(EccFuncName, '证件类型', DOCUMENTTYPE, form.documentType);
eccEnumValue(EccFuncName, '民族', NATION, form.nation);
eccEnumValue(EccFuncName, '专业类别', PROFCATEGORY, form.profCategory);
//更新注册流程
// form.registerFlow = REGISTERFLOW.完成第一步;
form.saveUnsubmitted = STATE.;
form.askForTime = new Date().valueOf();
await updateOneData(TABLEENUM.用户表, {userId:id}, form);
return {userId:id};
}
/**
* 删除14天未注册成功的用户
* 设置定时器,一天检查一次是否注册成功
*/
export async function initSaveUnsubmitted() {
deleteSaveUnsubmitted();
setInterval(async function () {
await deleteSaveUnsubmitted();
}, 3600 * 1000 * 24);
}
export async function deleteSaveUnsubmitted() {
let time = sysTools.getTodayMs();
let oldInfo = await find(TABLEENUM.用户表, {saveUnsubmitted:STATE.}, ["userId", "firstStep"]);
if (!oldInfo || !oldInfo.length) return;
// 14天的时间间隔(毫秒)
const fourteenDays = 14 * 24 * 3600 * 1000;
for (let i = 0; i < oldInfo.length; i++) {
let info = oldInfo[i];
let futureDate = info.firstStep + fourteenDays; //计算第一步创建14天后时间戳
/**判断今天是否已经是14天后 */
if (time > futureDate) { //14天后,直接删除该用户信息
await deleteOneData(TABLEENUM.用户表, {userId:info.userId});
// throw new ConsoleError(`用户超出14天未提交注册,已删除改用户信息 userid:${info.userId}`);
}
}
}
......@@ -332,6 +332,7 @@ export enum MEMBERSTATE {
冻结
}
/**
* 管理员状态
*/
......@@ -390,7 +391,7 @@ export enum USERREGISTERSTATE {
待审核 = 1,
重新提交,
驳回修改,
通过
通过,
}
......@@ -487,7 +488,8 @@ export enum REGISTERFLOW {
未注册 = 0,
完成第一步,
完成第二步,
完成第三步
完成第三步,
// 第二步保存,
}
......@@ -582,7 +584,9 @@ export enum ADMINLV {
会费管理,
发票管理,
会员管理,
管理设置 = 206
管理设置 = 206,
标签系统,
通知管理 = 208,
}
......@@ -668,6 +672,60 @@ export enum OOSCODE {
会费发票,
个人会员详情 = 15,
单位会员详情,
注册信息
注册信息,
退款凭证 = 18,
}
/**
* 消息通知-除标签外固定通知类型
*/
export enum CLIENTMSGLABLE {
所有人 = "所有人(包括游客)", //所有人(包括游客)
个人会员 = "个人会员",
单位会员 = "单位会员",
理事 = "理事会员",
常务理事 = "常务理事会员",
}
/**
* 活动通知-除标签外固定通知类型
*/
export enum CLIENTACTIVITYLABLE {
个人会员 = "个人会员",
单位会员 = "单位会员",
理事 = "理事会员",
常务理事 = "常务理事会员",
}
/**
* 活动通知-活动类型
* activityType
*/
export enum ACTIVITYTYPE {
线上活动 = 1,
线下活动
}
/**
* 活动通知-活动状态
*/
export enum ACTIVITYSTATE {
已开始 = 1,
已结束
}
/**
* 前端参数
*/
export enum CLIENTACTIVITYSTATE {
全部 = 0,
已结束 = 2,
已参加,
}
......@@ -54,7 +54,12 @@ export enum ERRORENUM {
该动态未开放,
找不到该机构,
源文章已被删除,
批量操作超过个数限制
批量操作超过个数限制,
标签重复,
标签数据不存在,
线下活动的活动时间必填,
用户没有在此活动对象内,
"您的会员服务已过期,如需恢复请联系秘书处:010-86208681" = "您的会员服务已过期,如需恢复请联系秘书处:010-86208681",
}
export enum ERRORCODEENUM {
......
......@@ -37,7 +37,9 @@ export enum UNITAUDITINGCOLUMNS {
法人联系电话 = "legalPersonPhone",
主管部门 = "yuanXiaoZhuGuanBuMen",
科研负责人 = "yuanXiaoKeYanFuZeRen",
单位简介 = "danWeiJianJie"
单位简介 = "danWeiJianJie",
标签 = "lableId"
}
......@@ -59,7 +61,8 @@ export enum AUDITINGCOLUMNS {
证件号码 = "documentId",
职务 = "duties",
学历 = "education",
职称 = "workTitle"
职称 = "workTitle",
标签 = "lableId"
}
......
......@@ -54,7 +54,7 @@
*/
import { Schema } from "mongoose";
import { INVOICESTATUS, MEMBERLEVEL, MEMBERSTATE, REGISTERFLOW, STATE, USERREGISTERSTATE, WEICHARTPAYSTATE } from "../../config/enum";
import { ACTIVITYSTATE, INVOICESTATUS, MEMBERLEVEL, MEMBERSTATE, REGISTERFLOW, STATE, USERREGISTERSTATE, WEICHARTPAYSTATE } from "../../config/enum";
......@@ -88,7 +88,12 @@ enum TABLEENUM {
验证码表 = "code",
审批历史表 = "approvalHistory",
权限表 = "authority",
订单审批历史表 = "orderApprovalHistory"
订单审批历史表 = "orderApprovalHistory",
标签表 = "lable",
消息通知表 = "massageNotice",
消息已读状态表 = "massageReads",
活动通知表 = "activityNotice",
活动报名表 = "activityEnroll"
}
......@@ -433,6 +438,13 @@ const ModelArray = [
danWeiJianJie:'String',//单位简介 2024.04.22修改
/**第三步流程表单(单位)【申请表上传】 */
applicationForm:'String',//入会申请表
/**标签管理 */
lableId:{type:'[String]', default:[]},//标签id 外键
/**黑名单 */
isBlackUser:{type:'Number', default:STATE.},//是否黑名单用户 0:否, 1:是
/**注册第二步保存未提交 */
saveUnsubmitted:{type:'Number', default:STATE.},//是否提交注册完成 0:否, 1:是
firstStep:'Number',//第一步完成时间
}
},
{
......@@ -504,6 +516,69 @@ const ModelArray = [
operationBehavior:{ type:'Number'},//操作行为 枚举
remarks:{ type:'String' },//备注
}
},
{
tableName:TABLEENUM.标签表,
source:TABLESOURCEENUM.mongo,
schema:{
lableId:{type:'String', index:true},//标签id
lableName:'String',//标签名称
createTime:'Number',//创建时间
}
},
{
tableName:TABLEENUM.消息通知表,
source:TABLESOURCEENUM.mongo,
schema:{
msgId:{type:'String', index:true},//消息id
msgTitle:'String',//消息标题
createTime:'Number',//创建时间
effectiveTime:'Number',//有效时间
msgContent:'String',//消息内容
lableId:{type:'[String]', default:[]},//消息对象 标签id 外键
isPop:{type:'Number', default:STATE.}//是否弹窗
}
},
{
tableName:TABLEENUM.消息已读状态表,
source:TABLESOURCEENUM.mongo,
schema:{
readId:{type:'String', index:true},//消息已读id
msgId:'String',//消息id
userId:'String',//用户id
readTime:'Number',//阅读时间
isRead:{type:'Number', default:STATE.}//是否已读
}
},
{
tableName:TABLEENUM.活动通知表,
source:TABLESOURCEENUM.mongo,
schema:{
activityId:{type:'String', index:true},//活动id
activityType:'Number',//活动类型 ACTIVITYTYPE
activityState:{type:'Number', default:ACTIVITYSTATE.已开始},//活动状态 ACTIVITYSTATE
activityName:'String',//活动名称
enrollForm:'String',//报名表模板地址
activityAdd:'String',//活动地点
activityStartTime:'Number',//活动开始时间
activityEndTime:'Number',//活动结束时间
lableId:'[String]',//活动对象 标签id 外键
enrollStartTime:'Number',//报名开始时间
enrollEndTime:'Number',//报名结束时间
activityContent:'String',//详细内容
createTime:'Number',//创建时间
isTopUp:{type:'Number', default:STATE.},//是否置顶
}
},
{
tableName:TABLEENUM.活动报名表,
source:TABLESOURCEENUM.mongo,
schema:{
enrollId:{type:'String', index:true},//活动报名id
activityId:{type:'String'},//活动报名id
userId:{type:'String'},//活动报名用户id
enrollUrl:{type:'String'}//报名表位置
}
}
];
......@@ -511,3 +586,4 @@ const ModelArray = [
export {ModelArray, TABLEENUM, TABLESOURCEENUM};
......@@ -12,6 +12,7 @@ export async function findToPage(tableEnumValue:string, param:object, files:obje
export async function findToSortToPage(tableEnumValue:string, param:object, files:object, sortParam, pageNumber:number, pageSize?) {
pageSize = pageSize || 10;//默认每页10个
sortParam["_id"] = 1;
let data = await dataModels[tableEnumValue].find(param, files).sort(sortParam).skip((pageNumber - 1) *pageSize).limit(pageSize);
return data;
......
......@@ -13,7 +13,8 @@ export async function updateManyData(tableEnumValue:string, param:object, data:o
export async function updateOneData(tableEnumValue:string, param:object, data:object) {
await dataModels[tableEnumValue].updateOneData(param, data);
// await dataModels[tableEnumValue].updateOneData(param, data);
let row = await dataModels[tableEnumValue].updateOneData(param, data);
return {isSuccess:true};
}
\ No newline at end of file
import { TABLEENUM } from "./data/models/model";
import { find } from "./data/select";
import { updateOneData } from "./data/update";
export async function test() {
let conf = ["photoUrl", "cardUrlJust", "cardUrlBack", "academicCERTUrl", "professionalCERTUrl", "uusinessLicenseUrl", "applicationForm"];
for(let i = 0; i < conf.length; i++) {
let name = conf[i];
await updateHttps(name);
}
}
export async function updateHttps(name) {
// 查找并更新所有包含http的uusinessLicenseUrl
let selectParam = {};
selectParam[name] = {"$regex":"http"};
let userInfo = await find(TABLEENUM.用户表, selectParam);
for (let i = 0; i < userInfo.length; i++) {
let info:any = userInfo[i];
let str = info[name];
let newUrl = str.replace(/http:\/\//g, 'https://');
// 更新文档
if (newUrl) {
let selectParam = {userId:info.userId};
let formParam = {};
formParam[name] = newUrl;
await updateOneData(TABLEENUM.用户表, selectParam, formParam);
}
}
console.log();
}
import { initActivity } from "./biz/member/msgActivity";
import { initAdmin } from "./biz/member/rightsMgmt";
import { t } from "./biz/provide";
import { initSaveUnsubmitted } from "./biz/register";
import { initSMS } from "./biz/sms";
import { initSystemTask } from "./biz/task";
import { initConfig, systemConfig} from "./config/serverConfig";
import { initDataBaseModel } from "./data/db/db";
import { test } from "./httpTOhttps";
import { httpServer } from "./net/http_server";
async function lanuch() {
......@@ -18,11 +21,16 @@ async function lanuch() {
await initSMS();
await initAdmin();
await initSystemTask();
await initActivity();
await initSaveUnsubmitted();
// await test1();
// await inputData(); 20240520日导入数据
await t();
// await t();
// await test();
console.log("服务初始化成功");
}
lanuch();
/**
* 黑名单
*/
import * as blacklistBiz from "../../biz/member/blacklist";
export const FirstName = '黑名单';
export const FirstRouter = '/manage/blacklist';
export const Config = {
"黑名单管理":[
{
apiName:"黑名单列表",
subUrl:'/blacklistdb/blacklist',
param:[
{key:"name", type:"String", desc:"单位/个人名称", isNull:true},
{key:"joinStartTime", type:"Number", desc:"入会开始时间", isNull:true},
{key:"joinEndTime", type:"Number", desc:"入会结束时间", isNull:true},
{key:"memberType", type:"[Number]", desc:"单位会员类型", isNull:true},
{key:"memberLevel", type:"[Number]", desc:"会员等级职务", isNull:true},
{key:"session", type:"Number", desc:"届次", isNull:true},
{key:"sheng", type:"String", desc:"省", isNull:true},
{key:"shi", type:"String", desc:"市", isNull:true},
{key:"qu", type:"String", desc:"区", isNull:true},
{key:"pageNumber", type:"Number", desc:"当前页"}
],
bindBiz:blacklistBiz.blackList
},
{
apiName:"移入黑名单【操作在单位会员页、个人会员页】",
subUrl:'/blacklistdb/moveinblackuser',
param:[
{key:"id", type:"String", desc:"用户id"},
],
bindBiz:blacklistBiz.moveInBlackUser
},
{
apiName:"移除黑名单",
subUrl:'/blacklistdb/shiftoutblackuser',
param:[
{key:"id", type:"String", desc:"用户id"},
],
bindBiz:blacklistBiz.shiftOutBlackUser
},
{
apiName:"删除信息",
subUrl:'/blacklistdb/delblackuser',
param:[
{key:"id", type:"String", desc:"用户id"},
],
bindBiz:blacklistBiz.delBlackUser
},
]
}
\ No newline at end of file
/**
* 标签
*/
import * as lableBiz from "../../biz/member/labelSystem";
export const FirstName = '标签相关';
export const FirstRouter = '/manage/lable';
export const Config = {
"标签管理":[
{
apiName:"标签列表",
subUrl:'/labledb/lablelist',
param:[
{key:"lableName", type:"String", desc:"标签名称", isNull:true},
{key:"startCreateTime", type:"Number", desc:"创建开始时间", isNull:true},
{key:"endCreateTime", type:"Number", desc:"创建结束时间", isNull:true},
{key:"pageNumber", type:"Number", desc:"当前页"}
],
bindBiz:lableBiz.lableList
},
{
apiName:"新建标签",
subUrl:'/labledb/createlable',
param:[
{key:"lableName", type:"String", desc:"标签名称"},
],
bindBiz:lableBiz.createLable
},
{
apiName:"重命名标签",
subUrl:'/labledb/updatelable',
param:[
{key:"lableId", type:"String", desc:"标签Id"},
{key:"lableName", type:"String", desc:"标签名称", isNull:true},
],
bindBiz:lableBiz.updateLable
},
{
apiName:"删除标签",
subUrl:'/labledb/dellable',
param:[
{key:"lableId", type:"String", desc:"标签Id"},
],
bindBiz:lableBiz.delLable
},
{
apiName:"获取未选中的标签",
subUrl:'/labledb/unchecked',
param:[
{key:"id", type:"String", desc:"用户id"},
],
bindBiz:lableBiz.unCheckedLable
},
{
apiName:"会员分配标签",
subUrl:'/labledb/addmemberlable',
param:[
{key:"id", type:"String", desc:"用户id"},
{key:"lableId", type:"[String]", desc:"选中新增的标签id"},
],
bindBiz:lableBiz.addMemberLable
},
{
apiName:"获取已选中的标签",
subUrl:'/labledb/checked',
param:[
{key:"id", type:"String", desc:"用户id"},
],
bindBiz:lableBiz.checkedLable
},
{
apiName:"删除会员标签",
subUrl:'/labledb/delmemberlable',
param:[
{key:"id", type:"String", desc:"用户id"},
{key:"lableId", type:"[String]", desc:"需要删除的标签Id"},
],
bindBiz:lableBiz.delMemberLable
},
// {
// apiName:"获取所有标签id",
// subUrl:'/labledb/getlable',
// param:[],
// bindBiz:lableBiz.getLable
// }
]
}
......@@ -209,7 +209,99 @@ export const Config = {
}
],
bindBiz:registerBiz.individualMemberDetails
}
},
{
apiName:"单位入会流程2保存未提交",
notMiddleware:false,
subUrl:'/memberdb/unitmembernotsaved',
param:[
{
key:"form", type:"Object", sub:
{
unitName:{type:'String', desc:'单位名称', notMustHave:true},
sheng:{type:'String', desc:'省', notMustHave:true},
shi:{type:'String', desc:'市', notMustHave:true},
qu:{type:'String', desc:'区', notMustHave:true},
addres:{type:'String', desc:'通信地址', notMustHave:true},
uscc:{type:'String', desc:'单位信用代码', notMustHave:true},
legalPerson:{type:'String', desc:'法人代表', notMustHave:true},
legalPersonPhone:{type:'String', desc:'法人联系电话', notMustHave:true},
legalPersonMail:{type:'String', desc:'法人邮箱', notMustHave:true},
contactPerson:{type:'String', desc:'日常联系人', notMustHave:true},
contactPersonDuties:{type:'String', desc:'日常联系人职务', notMustHave:true},
contactPersonPhone:{type:'String', desc:'日常联系人手机', notMustHave:true},
uusinessLicenseUrl:{type:'String', desc:'营业执照复印件', notMustHave:true},
/**单位信息 */
unitMemberType:{type:'Number', desc:'单位信息类型,枚举', notMustHave:true},
yuanXiaoBanXueLeiXing:{type:'Number', desc:'院校办学类型,枚举', notMustHave:true},
yuanXiaoZhuGuanBuMen:{type:'String', desc:'院校主管部门', notMustHave:true},
yuanXiaoFuZeRen:{type:'String', desc:'院校主要负责人', notMustHave:true},
yuanXiaoFuZeRenZhiWu:{type:'String', desc:'院校主要负责人职务', notMustHave:true},
yuanXiaoFuZeRenDianHua:{type:'String', desc:'院校主要负责人电话', notMustHave:true},
yuanXiaoBanGongFuZeRen:{type:'String', desc:'院校办公负责人', notMustHave:true},
yuanXiaoBanGongFuZeRenDianHua:{type:'String', desc:'院校办公负责人电话', notMustHave:true},
ZhuYaoFuZeRenYouXiang:{type:'String', desc:'主要负责人邮箱', notMustHave:true},
yuanXiaoKeYanFuZeRen:{type:'String', desc:'院校科研负责人', notMustHave:true},
yuanXiaoKeYanFuZeRenDianHua:{type:'String', desc:'院校科研负责人电话', notMustHave:true},
jiaoXueFuZeRenXinMing:{type:'String', desc:'教学负责人姓名', notMustHave:true},
yuanXiaoXueShengZongRenShu:{type:'Number', desc:'院校学生总人数', notMustHave:true},
yuanXiaoJiaoZhiGongZongRenShu:{type:'Number', desc:'院校教职工总人数', notMustHave:true},
jiaoXueFuZeRenDianHua:{type:'String', desc:'教学负责人电话', notMustHave:true},
kaishezhuanYe:{type:'String', desc:'开设专业', notMustHave:true},
danWeiJianJie:{type:'String', desc:'单位简介', notMustHave:true},
}
},
{
key:"keyanForm", type:"[Object]", desc:"单位所获得科研成果表单", isNull:true
},
{
key:"id", type:"String", desc:"会员id"
}
],
bindBiz:registerBiz.unitMemberNotSaved
},
{
apiName:"个人入会流程2保存未提交",
notMiddleware:false,
subUrl:'/memberdb/membernotsaved',
param:[
{
key:"form", type:"Object", sub:
{
name:{type:'String', desc:'真实姓名', notMustHave:true},
sex:{type:'Number', desc:'性别', notMustHave:true},
documentType:{type:'Number', desc:'证件类型', notMustHave:true},
documentId:{type:'String', desc:'证件号码', notMustHave:true},
birth:{type:'Number', desc:'出生年月', notMustHave:true},
nation:{type:'Number', desc:'民族', notMustHave:true},
sheng:{type:'String', desc:'省', notMustHave:true},
shi:{type:'String', desc:'市', notMustHave:true},
qu:{type:'String', desc:'区', notMustHave:true},
addres:{type:'String', desc:'通信地址', notMustHave:true},
education:{type:'Number', desc:'学历', notMustHave:true},
photoUrl:{type:'String', desc:'蓝底证件照', notMustHave:true},
unitName:{type:'String', desc:'工作单位', notMustHave:true},
duties:{type:'String', desc:'职务', notMustHave:true},
workTitle:{type:'String', desc:'职称', notMustHave:true},
profCategory:{type:'[Number]', desc:'专业类别', notMustHave:true},
studyResume:{type:'String', desc:'学习简历', notMustHave:true},
workResume:{type:'String', desc:'工作简历', notMustHave:true},
profAchievement:{type:'String', desc:'专业成果', notMustHave:true},
otherEMP:{type:'String', desc:'在其他社会组织任职情况', notMustHave:true},
otherPROF:{type:'String', desc:'其他与本学会专业有关的情况', notMustHave:true},
cardUrlJust:{type:'String', desc:'个人身份证扫描件正面', notMustHave:true},
cardUrlBack:{type:'String', desc:'个人身份证扫描件反面', notMustHave:true},
academicCERTUrl:{type:'String', desc:'个人学历证明扫描件', notMustHave:true},
professionalCERTUrl:{type:'String', desc:'个人工作证明扫描件', notMustHave:true},
auxiliaryMaterial:{type:'[String]', desc:'论文发表等证明工作成果或成绩的材料', notMustHave:true},
}
},
{
key:"id", type:"String", desc:"会员id"
}
],
bindBiz:registerBiz.memberNotSaved
},
],
"登陆相关":[
{
......@@ -266,6 +358,7 @@ export const Config = {
{key:"memberState", type:"Number", desc:"状态", isNull:true},
{key:"sheng", type:"String", desc:"省", isNull:true},
{key:"shi", type:"String", desc:"市", isNull:true},
{key:"lableId", type:"[String]", desc:"标签Id", isNull:true},
{key:"pageNumber", type:"Number", desc:"当前页"}
],
bindBiz:memberBiz.unitMemberList
......@@ -286,6 +379,7 @@ export const Config = {
{key:"memberState", type:"Number", desc:"状态", isNull:true},
{key:"sheng", type:"String", desc:"省", isNull:true},
{key:"shi", type:"String", desc:"市", isNull:true},
{key:"lableId", type:"[String]", desc:"标签Id", isNull:true},
{key:"pageNumber", type:"Number", desc:"当前页"}
],
bindBiz:memberBiz.individualMemberList
......
import * as officialWebsiteBiz from "../../biz/officialWebsite";
import * as msgActivityBiz from "../../biz/member/msgActivity";
export const FirstName = '官网路由';
export const FirstRouter = '/officialwebsite';
......@@ -248,5 +249,14 @@ export const Config = {
bindBiz:officialWebsiteBiz.zhengShuChaXun
},
],
"消息通知":[
{
apiName:"游客消息通知",
notMiddleware:true,
subUrl:'/touristmessage',
param:[],
bindBiz:msgActivityBiz.touristMessage,
},
]
}
\ No newline at end of file
import * as publicBiz from '../../biz/public';
import * as enumConfig from '../../config/enum';
import * as outPutConfig from '../../config/outPutConfig';
import * as msgActivityBiz from "../../biz/member/msgActivity";
export const FirstName = '公共接口';
export const FirstRouter = '/public';
......@@ -247,6 +248,54 @@ export const Config = {
param:[],
defaultParam:outPutConfig.AUDITINGCOLUMNS,
bindBiz:publicBiz.setEnumInterface
}
},
{
apiName:"获取所有标签id",
subUrl:'/lable',
param:[],
bindBiz:publicBiz.getLable
},
{
apiName:"消息对象固定类型",
subUrl:'/msglabletype',
param:[],
bindBiz:publicBiz.getMsgNoticeObject
},
{
apiName:"活动对象固定类型",
subUrl:'/activitylabletype',
param:[],
bindBiz:publicBiz.getNoticeObject
},
{
apiName:"是否弹窗",
subUrl:'/ispop',
param:[],
defaultParam:enumConfig.STATE,
bindBiz:publicBiz.setEnumInterface
},
{
apiName:"是否置顶",
subUrl:'/istopup',
param:[],
defaultParam:enumConfig.STATE,
bindBiz:publicBiz.setEnumInterface
},
{
apiName:"活动状态",
subUrl:'/activitystate',
param:[],
defaultParam:enumConfig.CLIENTACTIVITYSTATE,
bindBiz:publicBiz.setEnumInterface
},
{
apiName:"活动类型",
subUrl:'/activitytype',
param:[],
defaultParam:enumConfig.ACTIVITYTYPE,
bindBiz:publicBiz.setEnumInterface
},
],
}
......@@ -15,6 +15,9 @@ import * as costRouter from "./cost/router";
import * as officalWebsiteRouter from "./officalWebsite/router";
import * as orderRouter from "./order/router";
import * as outPutRouter from "./outPut/routers";
import * as labelRouter from "./lable/router";
import * as blacklistRouter from "./blackList/router";
import * as msgActivityRouter from "./msgActivity/router";
import * as asyncHandler from 'express-async-handler';
import { payCallback } from "../biz/member/cost";
import { checkUser } from "../middleware/user";
......@@ -24,13 +27,17 @@ 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(outPutRouter.FirstName, outPutRouter.Config, outPutRouter.FirstRouter);//导出路由
// await initDoc(labelRouter.FirstName, labelRouter.Config, labelRouter.FirstRouter);//标签路由
// await initDoc("2.0", labelRouter.Config, labelRouter.FirstRouter);//标签路由
// await initDoc("2.0", blacklistRouter.Config, blacklistRouter.FirstRouter);//黑名单路由
await initDoc("2.0", msgActivityRouter.Config, msgActivityRouter.FirstRouter);//消息活动通知路由
}
analysisRouter(httpServer, portalRouter.Config, portalRouter.FirstRouter, true);//网站编辑
analysisRouter(httpServer, publicRouter.Config, publicRouter.FirstRouter, false);//公用组件
......@@ -39,6 +46,9 @@ export async function setRouter(httpServer){
analysisRouter(httpServer, orderRouter.Config, orderRouter.FirstRouter, true);//会费相关
analysisRouter(httpServer, costRouter.Config, costRouter.FirstRouter, true);//支付
analysisRouter(httpServer, outPutRouter.Config, outPutRouter.FirstRouter, true);//导出路由
analysisRouter(httpServer, labelRouter.Config, labelRouter.FirstRouter, true);//标签相关
analysisRouter(httpServer, blacklistRouter.Config, blacklistRouter.FirstRouter, true);//黑名单相关
analysisRouter(httpServer, msgActivityRouter.Config, msgActivityRouter.FirstRouter, true);//消息活动通知
}
......@@ -46,7 +56,7 @@ function analysisRouter(httpServer, config, firstRouter, haveMiddleware) {
for (let modelKey in config) {
config[modelKey].forEach(info => {
let {apiName, defaultParam, subUrl, param, bindBiz, notMiddleware} = info;
if (haveMiddleware && !notMiddleware) httpServer.post(firstRouter+subUrl, checkUser , asyncHandler(routerFun(apiName, defaultParam, subUrl, param, bindBiz, notMiddleware)));
if (haveMiddleware && !notMiddleware) httpServer.post(firstRouter+subUrl, checkUser, asyncHandler(routerFun(apiName, defaultParam, subUrl, param, bindBiz, notMiddleware)));
else httpServer.post(firstRouter+subUrl, asyncHandler(routerFun(apiName, defaultParam, subUrl, param, bindBiz, notMiddleware)));
});
}
......
......@@ -143,7 +143,7 @@ export async function initDoc(firstName, apiConfig, apiFirstRouter) {
itemStr += `|:---- |:----- |:----- |----- |\n`;
itemStr += `|401 |身份验证失败 |headers中的userid错误 |强制跳转到登陆页面 |\n`;
itemStr += `|402 |非法登录 |headers中没有token或者userid |强制跳转到登陆页面 |\n`;
itemStr += `|403 |身份验证过期 |token过期 |+强制跳转到登陆页面 |\n`;
itemStr += `|403 |身份验证过期 |token过期 |强制跳转到登陆页面 |\n`;
itemStr += ``;
......
......@@ -17,6 +17,16 @@ export function successResult() {
return {success:true}
}
/**
* 抛出错误信息
* @returns
*/
export function successErrorResult(msg) {
return {code:500, success:false, msg};
}
/**
* 生成系统id
* @param tableName
......
......@@ -4,7 +4,7 @@
*/
import { getBizMsg } from "../config/errorEnum";
import { logError } from "./log";
import { logConsole, logError } from "./log";
export class BizError extends Error {
constructor(...msgs) {
......@@ -24,3 +24,27 @@ export class BizError extends Error {
super(reqErrorMsg);
}
}
export class ConsoleError extends Error {
constructor(...msgs) {
let reqErrorMsg = '';
let logErrorMsg = '';
for (let i = 0; i <msgs.length; i++) {
if (!i) {
let msg = getBizMsg(msgs[i]);
reqErrorMsg = msg;
logErrorMsg = msg;
} else {
logErrorMsg += ` | ${msgs[i]} `;
}
}
logConsole(logErrorMsg);
super(reqErrorMsg);
}
}
......@@ -12,7 +12,9 @@ export const systemLogPath = {
errorLogFile:"error",
errorLogDir:"error",
handleLogFile:"handle",
handleLogDir:"handle"
handleLogDir:"handle",
recordLogFile:"record",
recordLogDir:"record",
}
//日志根目录
......@@ -20,6 +22,7 @@ export const systemLogPath = {
let baseLogPath = path.resolve('./', 'logs');
let errFile = path.resolve(baseLogPath, systemLogPath.errorLogDir, systemLogPath.errorLogFile);
let handFile =path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile);
let recordFile =path.resolve(baseLogPath, systemLogPath.recordLogDir, systemLogPath.recordLogFile);
let config = {
appenders:
{
......@@ -43,13 +46,24 @@ let config = {
"maxLogSize": 1000,
"numBackups": 3,
"path": `/${systemLogPath.handleLogDir}`
},
"recordLogger": {
"type": "dateFile",
"filename": recordFile,
"pattern": "yyyy-MM-dd.log",
"alwaysIncludePattern": true,
"encoding": "utf-8",
"maxLogSize": 1000,
"numBackups": 3,
"path": `/${systemLogPath.recordLogDir}`
}
},
categories: {
"default": {"appenders": ["rule-console"], "level": "all"}, //这个配置一定要有
"errorLogger": {"appenders": ["errorLogger"], "level": "error"},
"handleLogger": {"appenders": ["handleLogger"], "level": "all"}
"handleLogger": {"appenders": ["handleLogger"], "level": "all"},
"recordLogger": {"appenders": ["recordLogger"], "level": "info"},
},
"baseLogPath": path.resolve(baseLogPath, systemLogPath.handleLogDir, systemLogPath.handleLogFile)
};
......@@ -60,6 +74,7 @@ log4js.configure(config); //加载配置文件
let errorLogger = log4js.getLogger("errorLogger");
let handleLogger = log4js.getLogger("handleLogger");
let consoleLogger = log4js.getLogger("rule-console");
let recordLogger = log4js.getLogger("recordLogger");
//错误日志
export function logError(...errStrs) {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
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