Commit 0c62c9e7 by 庄冰

tj

parent 3e62f2ca
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings=require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
class AuthCtl extends CtlBase{
constructor(){
super("auth",CtlBase.getServiceName(AuthCtl));
}
async saveAuths(pobj,query,req){
var auths=pobj.auths;
var xrtn=await this.service.saveAuths(auths,pobj.app_id,pobj.company_id);
return system.getResult(xrtn);
}
async findAuthsByRoles(pobj,query,req){
var roleids=pobj.roleids;
var xrtn=await this.service.findAuthsByRole(roleids,pobj.app_id,pobj.company_id);
return system.getResult(xrtn);
}
}
module.exports=AuthCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings=require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const logCtl = system.getObject("web.common.oplogCtl");
class DataauthCtl extends CtlBase{
constructor(){
super("auth",CtlBase.getServiceName(DataauthCtl));
}
async saveauth(qobj,querybij,req){
var arys=qobj.arys;
var uid=qobj.uid;
var refmodel=qobj.modelname;
var u=await this.service.saveauth({
user_id:uid,
modelname:refmodel,
auths:arys.join(","),
app_id:req.appid,
});
return system.getResult(u);
}
async fetchInitAuth(qobj,querybij,req){
var uid=qobj.uid;
var refmodel=qobj.modelname;
var authtmp=await this.service.findOne({user_id:uid,modelname:refmodel,app_id:req.appid});
if(authtmp){
var auths= authtmp.auths;
var arys=auths.split(",");
return system.getResult(arys);
}else{
return system.getResultSuccess([]);
}
}
}
module.exports=DataauthCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings=require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const logCtl = system.getObject("web.common.oplogCtl");
class OrgCtl extends CtlBase{
constructor(){
super("auth",CtlBase.getServiceName(OrgCtl));
// this.compSvr=system.getObject("service.common.companySve");
}
//检查是否已经存在主要岗位
async checkMainPosition(p,q,req){
return this.service.checkMainPosition(p,q,req);
}
async changePos(p,q,req){
var toorgid=p.orgid;
var uid=p.uid;
var rtn= await this.service.changePos(toorgid,uid);
return system.getResult(rtn);
}
async create(p,q,req){
return super.create(p,q,req);
}
async delete(p,q,req){
return super.delete(p,q,req);
}
async update(p,q,req){
return super.update(p,q,req);
}
async initOrgs(p,q,req){
var tocompany=req.session.tocompany;
var cmkey=p.comkey;
if(cmkey){
tocompany =await this.compSvr.findOne({companykey:cmkey});
}
//按照公司名称查询,是否存在节点,不存在,就创建根节点
//如果存在就按照名称查询出当前和她的字节点
var rtn=await this.service.initOrgs(tocompany,req.appid);
return system.getResult(rtn);
}
async findOrgById(p,q,req){
var rtn=await this.service.findOrgById(p.id);
return system.getResult(rtn);
}
}
module.exports=OrgCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings=require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const logCtl = system.getObject("web.common.oplogCtl");
var cacheBaseComp = null;
class RoleCtl extends CtlBase {
constructor() {
super("auth",CtlBase.getServiceName(RoleCtl));
this.redisClient=system.getObject("util.redisClient");
}
async initNewInstance(pobj,queryobj, req) {
var rtn = {};
rtn.roles = [];
return system.getResultSuccess(rtn);
}
async create(pobj,queryobj, req) {
let r=await super.create(pobj,queryobj, req)
return system.getResult(r);
}
}
module.exports = RoleCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
class UserCtl extends CtlBase {
constructor() {
super("auth", CtlBase.getServiceName(UserCtl));
}
async resetPassword(pobj, qobj, req){
await this.service.resetPassword(req.xctx.username,pobj.onepassword)
return system.getResult({});
}
async allowOrNot(pobj, qobj, req){
await this.service.updateByWhere({isEnabled:!pobj.isEnabled},{company_id:pobj.company_id})
return system.getResult({});
}
async initNewInstance(queryobj, req) {
var rtn = {};
rtn.roles = [];
return system.getResultSuccess(rtn);
}
//获取验证码,发送给指定手机
// async sendVCode(pobj, qobj, req) {
// var mobile = pobj.mobile;
// let v = await this.smsS.sendVCode(mobile);
// return system.getResult({ vcodestr: v });
// }
async exit(pobj, qobj, req) {
}
//应用的自由用户注册,无需验证,需要前端头设置公司KEY
async pmregisterByFreeUser(p, q, req) {
//检查是否有用户名和密码
if (!pobj.userName || !pobj.password) {
return system.getResult(null, "请检查用户名和密码是否存在")
}
//p.company_id = req.xctx.companyid;//控制基类里已经添加
if (!p.company_id) {
return system.getResultFail(-201, "自有用户创建需要提供公司KEY");
}
let rtn = await this.service.pmregisterByFreeUser(p, q);
return rtn;
}
async create(p, q, req){
//检查是否有用户名和密码
if (!p.userName) {
return system.getResult(null, "请检查用户名和密码是否存在")
}
let rtn = await this.service.registerByTantent(p, q);
return system.getResult(rtn);
}
//登录后的租户创建属于租户的用户
//需要在控制器里取出公司ID
//和租户绑定同一家公司
//按照用户名和密码进行注册
//控制器端检查用户名和密码非空
async registerByTantent(p, q, req) {
//检查是否有用户名和密码
if (!pobj.userName) {
return system.getResult(null, "请检查用户名和密码是否存在")
}
let rtn = await this.service.registerByTantent(p, q);
return rtn;
}
//租户用户名和密码的租户注册
async pmregister(pobj, qobj, req) {
//平台注册设置平台的应用ID
pobj.app_id = settings.pmappid;
//检查是否有用户名和密码
if (!pobj.userName || !pobj.password) {
return system.getResult(null, "请检查用户名和密码是否存在")
}
var rtn = await this.service.pmregister(pobj);
return system.getResult(rtn);
}
async pmlogin(pobj, qobj, req) {
//平台注册设置平台的应用ID
let rtn = await this.service.pmlogin(pobj, qobj, req);
return system.getResult(rtn);
}
async getUserInfo(pobj, qobj, req) {
let uname = req.xctx.username;
let rtn = await this.service.getUserInfo(uname);
return system.getResult(rtn);
}
//按照电话创建自由用户
async pmloginByVCodeForFreeUser(p, q, req) {
if (!pobj.mobile || !pobj.vcode) {
return system.getResult(null, "请检查手机号和验证码是否存在")
}
p.companykey = req.xctx.companykey;
if (!p.companykey) {
return system.getResult(null, "自有用户创建需要提供公司KEY");
}
let rtn = await this.service.pmloginByVCodeForFreeUser(p, q);
return rtn;
}
async pmloginByVCode(pobj, qobj, req) {
let rtn = await this.service.pmloginByVCode(pobj, qobj);
return system.getResult(rtn);
}
async pmSendVCode(pobj, qobj, req) {
let rtn = await this.service.sendVCode(pobj, qobj);
return system.getResult(rtn);
}
}
module.exports = UserCtl;
var system = require("../../../system");
const http = require("http");
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const moment = require("moment");
class BizOptCtl extends CtlBase {
constructor() {
super("bizchance", CtlBase.getServiceName(BizOptCtl));
}
async findAndCountAll(pobj, qobj, req) {
//设置查询条件
const rs = await this.service.findAndCountAll(pobj);
if (rs.results && rs.results.rows) {
let result = [];
for (let val of rs.results.rows) {
val.company_name = val.business_info.company;
val.customer_number = val.business_info.contactsPhone;
val.customer_name = val.business_info.contactsName;
val.updated_at = moment(val.updated_at).format('YYYY-MM-DD HH:mm:ss');
val.created_at = moment(val.created_at).format('YYYY-MM-DD HH:mm:ss');
val.schemeStatus = val["scheme.scheme_status"];
val.source_name = system.SOURCENAME[val.source_name] ? system.SOURCENAME[val.source_name] : val.source_name;
result.push(val);
}
rs.results.rows = result;
}
return system.getResult(rs);
}
async findBizAndSheme(pobj, qobj, req) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
const rs = await this.service.findBizAndSheme(pobj);
return system.getResult(rs);
}
async closeBiz(pobj, qobj, req) {
if (!pobj.bizId) {
return system.getResult(null, "bizId can not be empty,100290");
}
if (!pobj.close_reason) {
return system.getResult(null, "close_reason can not be empty,100290");
}
try {
await this.service.closeBiz(pobj);
return system.getResultSuccess();
} catch (err) {
return system.getResult(null, err.message);
}
}
}
module.exports = BizOptCtl;
var system = require("../../../system");
const http = require("http");
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const moment = require("moment");
class SchemeCtl extends CtlBase {
constructor() {
super("bizchance", CtlBase.getServiceName(SchemeCtl));
}
async create(pobj, qobj, req) {
if (!pobj.bizopt_id) {
return system.getResult(null, "bizopt_id can not be empty,100290");
}
try {
let data = await this.service.create(pobj);
return system.getResult(data);
} catch (err) {
return system.getResult(null, err.message)
}
}
async findOne(pobj, qobj, req) {
if (!pobj.bizopt_id) {
return system.getResult(null, "bizopt_id can not be empty,100290");
}
const rs = await this.service.findOne({ bizopt_id: pobj.bizopt_id });
return system.getResult(rs);
}
}
module.exports = SchemeCtl;
var system = require("../../../system")
const http = require("http")
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
class CompanyCtl extends CtlBase {
constructor() {
super("common", CtlBase.getServiceName(CompanyCtl));
}
async update(p,q,req){
let u= await super.update(p,q,req)
//缓存失效
await this.cacheManager["CompanyCache"].invalidate(p.companykey)
let company=await this.cacheManager["CompanyCache"].cache(p.companykey)
return system.getResult(company)
}
async setOrgs(p,q,req){
let orgs=await this.service.setOrgs(p,req.xctx.fromcompanykey)
return system.getResult(orgs)
}
async getOrgs(p,q,req){
let companynew=await this.cacheManager["CompanyCache"].cache(req.xctx.fromcompanykey)
return system.getResult({orgJson:JSON.parse(companynew.orgJson)})
}
}
module.exports = CompanyCtl;
var system = require("../../../system");
const http = require("http");
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const moment = require("moment");
class DeliverCtl extends CtlBase {
constructor() {
super("delivery", CtlBase.getServiceName(DeliverCtl));
}
async findAndCountAll(pobj, qobj, req) {
//设置查询条件
const rs = await this.service.findAndCountAll(pobj);
let result = [];
for (let val of rs.results.rows) {
val.company_name = val.delivery_info.companyName;
val.customer_number = val.delivery_info.contactsPhone;
val.customer_name = val.delivery_info.contactsName;
val.service_address = val.delivery_info.serviceName;
val.updated_at = moment(val.updated_at).format('YYYY-MM-DD HH:mm:ss');
val.created_at = moment(val.created_at).format('YYYY-MM-DD HH:mm:ss');
if (val.delivery_status === system.ANNUALREPORT.TAKEEFFECT) {
val.delivery_status = val['annualreports.status'] || system.ANNUALREPORT.WAITDECLARE;
}
result.push(val);
}
rs.results.rows = result;
return system.getResult(rs);
}
// 查询 详情
async findInfo(pobj, qobj, req) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
try {
const rs = await this.service.findInfo(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async temporarySave(pobj, qobj, req) {
if (!pobj.deliver_id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
try {
let rs = await this.service.temporarySave(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async findTemporary(pobj, qobj, req) {
if (!pobj.deliver_id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
const rs = await this.service.findTemporary(pobj);
return system.getResultSuccess(rs);
}
// 提交材料
async submitMaterials(pobj, qobj, req) {
//TODO:各种参数校验
if (!pobj.deliver_id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
try {
let rs = await this.service.submitMaterials(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async changeDeliveryStatus(pobj, qobj, req) {
if (!pobj.id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
try {
let rs = await this.service.changeDeliveryStatus(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async addQualification(pobj, qobj, req) {
if (!pobj.deliver_id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
try {
let rs = await this.service.addQualification(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async closeDeliver(pobj) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
try {
let rs = await this.service.closeDeliver(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async addMail(pobj) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
try {
let rs = await this.service.addMail(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async findAnnualReportInfo(pobj) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
try {
const rs = await this.service.findAnnualReportInfo(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async declareReport(pobj) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
if (!pobj.file || !pobj.file.url) {
return system.getResult(null, "file can not be empty,100290");
}
try {
const rs = await this.service.declareReport(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
async toCollecting(pobj) {
if (!pobj.id) {
return system.getResult(null, "deliver_id can not be empty,100290");
}
try {
let rs = await this.service.toCollecting(pobj);
return system.getResult(rs);
} catch (err) {
return system.getResult(null, err.message)
}
}
}
module.exports = DeliverCtl;
var system = require("../../../system");
const http = require("http");
const querystring = require('querystring');
var settings = require("../../../../config/settings");
const CtlBase = require("../../ctl.base");
const moment = require("moment");
class MaterialCtl extends CtlBase {
constructor() {
super("delivery", CtlBase.getServiceName(MaterialCtl));
this.db = system.getObject("db.common.connection").getCon();
}
// 获取 组装 excl 文件 数据
async waitGenerate(pobj, qobj, req) {
const rs = await this.service.findAll({
ifDownload: false
}, [
{
model: this.db.models.deliver,
attributes: ["product_code"],
}
]);
// 组装数据
return system.getResult(rs.map(item => {
const type = item.deliver.product_code;
const { proposerInfo, otherMaterialsInfo, implementationPlanInfo, safetyInfo, shareholderData } = item;
const { businessLicense, businessInformation, principalInfo, contactInfo } = proposerInfo;
const { webApp, targetUser, profitableWay, specialApproval, serviceProjectEdi, serviceProjectIcp } = implementationPlanInfo;
// 1. id ,type
// 2.注册认证
let registeredAddressData = {
authentication: {},
files: []
};
let legalRepresentative = principalInfo.filter(item => {
return item.title === "法定代表人"
});
legalRepresentative = legalRepresentative.length > 0 ? legalRepresentative[0] : {};
registeredAddressData.authentication = {
personType: "法人",
companyType: businessLicense.type,
enterpriseCode: businessLicense.enterpriseCode,
name: businessLicense.name,
legalTypes: businessInformation.legalTypes,
legalName: legalRepresentative.name,
legalCertificateId: legalRepresentative.certificateId,
legalCertificateType: legalRepresentative.certificateType,
contactAddress: contactInfo.address
};
registeredAddressData.files.push(
...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return item.title === "营业执照";
}) : [])
, {
title: "法定代表人身份证件",
file: legalRepresentative.file
});
// 3. 发展和实施计划
let implementationPlanData = {
// ICP
// EDI
webApp: webApp,
files: []
};
let serviceProject = {};
if (type === "ICP") {
serviceProject = {
releaseAndDelivery: "",
community: "",
protectiveProcessing: "",
interactive: "",
search: ""
}
serviceProjectIcp.map(item => {
switch (item.title) {
case "信息发布平台和递送服务":
serviceProject["releaseAndDelivery"] = item.value.join().replace(/其他/, item.otherValue);
break
case "信息搜索查询服务":
serviceProject["search"] = item.value.join().replace(/其他/, item.otherValue);
break
case "信息社区服务":
serviceProject["community"] = item.value.join().replace(/其他/, item.otherValue);
break
case "信息保护加工处理服务":
serviceProject["protectiveProcessing"] = item.value.join().replace(/其他/, item.otherValue);
break
case "信息及时交互服务":
serviceProject["interactive"] = item.value.join().replace(/其他/, item.otherValue);
break
}
})
} else if (type === 'EDI') {
serviceProject = {
electronicExchange: "",
transactionProcessing: "",
dataProcessing: ""
}
serviceProjectEdi.map(item => {
switch (item.title) {
case "电子交换业务":
serviceProject["electronicExchange"] = item.value.join();
break
case "交易处理业务":
serviceProject["transactionProcessing"] = item.value.join();
break
case "网络/电子设备数据处理业务":
serviceProject["dataProcessing"] = item.value.join();
break
}
})
}
implementationPlanData[type] = {
...serviceProject,
targetUser: targetUser.join(),
profitableWay: profitableWay.join()
};
// 专项审批项目 ICP
if (type === "ICP") {
implementationPlanData.files.push(...specialApproval.filter(item => {
return item.file && item.file.url ? true : false
}).map(item => {
return {
file: item.file,
title: `专项审批项-${item.title}`
}
}));
}
implementationPlanData.files.push(...otherMaterialsInfo.filter(item => {
return item.title === "域名证书"
}));
if (type === "EDI") {
implementationPlanData.files.push(...serviceProjectEdi.filter(item => {
return item.file && item.file.url ? true : false
}).map(item => {
return {
title: item.title,
file: item.file
}
}));
}
// 4. 增值电信申请表
let licenceData = {
licence: {
companyName: businessLicense.name,
enterpriseCode: businessLicense.enterpriseCode,
registeredCapital: businessLicense.registeredCapital,
registerAddress: businessLicense.address,
fixedTelephone: businessInformation.fixedTelephone,
workAddress: businessInformation.address,
zipCode: businessInformation.zipCode,
comapnyNature: businessInformation.comapnyNature,
ifListed: businessInformation.ifListed ? "是" : "否"
},
files: [
...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return item.title === "营业执照";
}) : [])
]
}
// 5. 公司及人员情况
let companyPersonnelData = {
personnelInfo: principalInfo,
companyInfo: {
bussinessDirection: businessInformation.bussinessDirection,
staffSize: businessInformation.staffSize,
businessScale: businessInformation.businessScale
},
files: []
}
companyPersonnelData.files.push(...principalInfo.filter(item => {
return item.file && item.file.url ? true : false
}).map(item => {
return {
"title": `${item.title}身份证`,
file: item.file
}
}), ...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return item.title === "社保证明文件";
}) : []))
// 6. 网络与信息安全
let safetyData = {
safety: {
qualification: safetyInfo.qualification,
responsibility: safetyInfo.responsibility
},
files: []
}
// 7. 股东信息
let shareholdersData = {
shareholdes: shareholderData,
files: []
}
shareholdersData.files.push(...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return ["股东追溯承诺书", "申请者国家企业信用信息公示系统截图"].includes(item.title);
}) : []))
shareholdersData.files.push(...shareholderData.filter(item => {
return item.file && item.file.url ? true : false
}).map(item => {
return {
file: item.file,
title: `${item.name}身份证`
}
}));
// 8. 电信业务承诺书
let telecommunicationServiceData = {
files: [...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return ["依法经营电信业务承诺书"].includes(item.title);
}) : [])]
}
// 9. 其他材料
let otherMaterialsData = {
files: [...(Array.isArray(otherMaterialsInfo) ? otherMaterialsInfo.filter(item => {
return ["收费方案", "服务器托管协议", "服务器托管商IDC许可证"].includes(item.title) || item.fixed === false;
}) : [])]
}
return {
id: item.id,
type,
registeredAddressData,
implementationPlanData,
licenceData,
companyPersonnelData,
safetyData,
shareholdersData,
telecommunicationServiceData,
otherMaterialsData
}
}));
}
// 更新 下载 url
async updateUrl(pobj) {
if (!pobj.id) {
return system.getResult(null, "id can not be empty,100290");
}
if (!pobj.url) {
return system.getResult(null, "url can not be empty,100290");
}
await this.service.updateByWhere({
ifDownload: true,
downloadUrl: pobj.url
}, {
id: pobj.id,
});
return system.getResultSuccess();
}
// 返回 下载url
async getUrl(pobj) {
if (!pobj.deliver_id) {
return system.getResult(null, "id can not be empty,100290");
}
const rs = await this.service.findOne({ deliver_id: pobj.deliver_id }, ["downloadUrl", "ifDownload"]);
if (!rs) {
return system.getResult(null, "查不到数据");
}
return system.getResult(rs);
}
}
module.exports = MaterialCtl;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class AccountService extends ServiceBase{
constructor(){
super("auth",ServiceBase.getDaoName(AccountService));
//this.appDao=system.getObject("db.appDao");
}
}
module.exports=AccountService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class AuthService extends ServiceBase{
constructor(){
super("auth",ServiceBase.getDaoName(AuthService));
}
//字符串数组参数
//前端角色查询,按照来源应用和来源公司查询
async findAuthsByRole(roleids,appid,comid){
//{where:{id:{[this.db.Op.in]:ids}}}
//var newattrs=rolecodestr.split(",");
var aths=await this.dao.model.findAll({
attributes:["bizcode","authstrs","codepath"],
where:{role_id:{[this.db.Op.in]:roleids},app_id:appid,company_id:comid}});
return aths;
}
async saveAuths(auths,appid,cmid){
//先按照code 和 bizcode查询
var self=this;
console.log("yyyyyyyyyvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
console.log(auths);
return self.db.transaction(async function (t){
for(var i=0;i<auths.length;i++){
var tmpAuth=auths[i];
tmpAuth.app_id=appid;
tmpAuth.company_id=cmid;
var objrtn=await self.dao.model.findOrCreate({
defaults:tmpAuth,
where:{role_id:tmpAuth.role_id,bizcode:tmpAuth.bizcode},//注意这里bizcode存储的是节点的code值
transaction:t,
});
console.log("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
console.log(objrtn);
if(!objrtn[1].created){
//就执行更新操作
await objrtn[0].update(tmpAuth,{where:{role_id:tmpAuth.role_id,bizcode:tmpAuth.bizcode},transaction:t})
}
}
var aths=await self.dao.model.findAll({where:{role_id:tmpAuth.role_id,app_id:tmpAuth.app_id},transaction:t});
return aths;
});
}
}
module.exports=AuthService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base")
const settings=require("../../../../config/settings")
class DataauthService extends ServiceBase{
constructor(){
super("auth",ServiceBase.getDaoName(DataauthService));
}
async saveauth(obj){
//先按照uid,modelname,检查是否存在,不存在创建,存在更新
var oldauth= await this.dao.findOne({user_id:obj.user_id,modelname:obj.modelname,app_id:obj.add_id});
if(!oldauth){
return this.dao.create(obj);
}else{
obj.id=oldauth.id;
return this.dao.update(obj);
}
}
}
module.exports=DataauthService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class OrgService extends ServiceBase{
constructor(){
super("auth",ServiceBase.getDaoName(OrgService));
}
async delete(p,q,req){
var self=this;
var orgid=p.id;
var uone=await this.db.models.user.findOne({where:{org_id:orgid}});
if(!uone){
//先检查是否组织下有人员存在
return this.db.transaction(async function (t) {
var inst=await self.dao.model.findById(orgid);
var parentid=inst.org_id;
await inst.destroy({force:true,transaction:t});
//删除组织对应的角色
self.db.models.orgrole.destroy({where:{org_id:orgid},force:true,transaction:t});
//查询出父元素
var orgparent=await self.dao.model.findOne({
order:[["code","ASC"]],
where:{id:parentid},transaction:t,
include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]]}
]}
]});
return orgparent.orgs;
});
}else{
return null;
}
}
async update(p,q,req){
var self=this;
var cmkey=p.comkey;//如果是来自租户界面的修改
return this.db.transaction(async function (t) {
p.isLeaf=p.isPosition;
var orgupdate=await self.dao.model.findOne({where:{id:p.id},transaction:t});
await self.dao.model.update(p,{where:{id:p.id},transaction:t});
var usersupdate=await self.db.models.user.findAll({where:{org_id:orgupdate.id}});
//如果节点名称或岗位性质发生变化
//if(p.name!=orgupdate.name || p.isMain!=orgupdate.isMain){
for(var ud of usersupdate){
ud.opath=p.orgpath;
var n=p.orgpath.lastIndexOf("/");
ud.ppath=p.isMain?p.orgpath.substring(0,n):p.orgpath;
await ud.save({transaction:t});
}
//}
if(p.Roles && !cmkey){//如果不是来自租户界面的修改
var roles=await self.db.models.role.findAll({where:{id:{[self.db.Op.in]:p.Roles}}});
await orgupdate.setRoles(roles,{transaction:t});
//同时要给这个岗位下的user,更新角色 todo
for(var ud of usersupdate){
await ud.setRoles(roles,{transaction:t});
}
}
var orgparent=await self.dao.model.findOne({
order:[["code","ASC"]],
where:{id:orgupdate.org_id},transaction:t,
include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]});
return orgparent.orgs;
});
}
async checkMainPosition(p,q,req){
var orgmain=await this.dao.model.findOne({where:{org_id:p.org_id,isMain:true}});
if(orgmain){
return {"isHave":true};
}else{
return null;
}
}
async changePos(toorgid,uid){
//查询出当前用户,设置当前用户的orgid为修改目标
var self=this;
return this.db.transaction(async function (t) {
var ufind=await self.db.models.user.findById(uid);
var org=await self.dao.model.findOne({
where:{id:toorgid},
include:[
{model:self.db.models.role,as:"roles"},
]});
ufind.org_id=toorgid;
ufind.opath=org.orgpath;
if(org.isMain){//如果是主岗
var n=org.orgpath.lastIndexOf("/");
ufind.ppath=org.orgpath.substring(0,n);
}else{
ufind.ppath= org.orgpath;
}
await ufind.save({transaction:t});
await ufind.setRoles(org.roles,{transaction:t});
return ufind;
});
//查询出目标org,关联查询出角色
//设置当前用户的角色
}
async create(p,q,req){
var self=this;
var cmkey=p.comkey;
return this.db.transaction(async function (t) {
if(cmkey){
var tmpcompany =await self.db.models.company.findOne({where:{companykey:cmkey},transaction:t});
p.company_id=tmpcompany.id;
}
var roles=await self.db.models.role.findAll({where:{id:{[self.db.Op.in]:p.Roles}}});
p.isLeaf=p.isPosition;
p.app_id=null;
var orgnew=await self.dao.model.create(p,{transaction:t});
if(roles && roles.length>0){
await orgnew.setRoles(roles,{transaction:t});
}
var orgparent=await self.dao.model.findOne({
order:[["code","ASC"]],
where:{id:orgnew.org_id},transaction:t,
include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]});
return orgparent.orgs;
});
}
async findOrgById(id){
var org=await this.dao.model.findOne({
order:[["code","ASC"]],
where:{id:id},
include:[
{model:this.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:this.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:this.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:this.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:this.db.models.role,as:"roles",attributes:['id','code','name']},
]});
return org.orgs;
}
async initOrgs(company,appid){
var self=this;
return this.db.transaction(async function (t) {
var org=await self.dao.model.findOne({
order:[["code","ASC"]],
//where:{name:company.name,company_id:company.id,app_id:appid},transaction:t,
where:{name:company.name,company_id:company.id},transaction:t,
include:[
{model:self.db.models.org,as:"orgs", order:[["code","ASC"]],include:[
{model:self.db.models.org,as:"orgs",order:[["code","ASC"]],include:[
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]},
{model:self.db.models.role,as:"roles",attributes:['id','code','name']},
]});
if(org!=null){
return org;
}else{
var root= await self.dao.model.create({
code:"root"+company.id,
name:company.name,
isLeaf:false,
isPostion:false,
isMain:false,
orgpath:"/",
company_id:company.id,
app_id:null,
},{transaction:t});
return root;
}
});
}
}
module.exports=OrgService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class RoleService extends ServiceBase{
constructor(){
super("auth",ServiceBase.getDaoName(RoleService));
//this.appDao=system.getObject("db.appDao");
}
async findOneByCode(code){
return this.dao.model.findOne({where:{code:code}});
}
}
module.exports=RoleService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base")
const settings = require("../../../../config/settings")
const jwt = require('jsonwebtoken');
class UserService extends ServiceBase {
constructor() {
super("auth", ServiceBase.getDaoName(UserService));
this.companyDao = system.getObject("db.common.companyDao");
this.roleDao = system.getObject("db.auth.roleDao");
this.authS=system.getObject("service.auth.authSve");
}
//登录后的租户创建属于租户的用户
//需要在控制器里取出公司ID
//和租户绑定同一家公司
//按照用户名和密码进行注册
//控制器端检查用户名和密码非空
async registerByTantent(p, q) {
p.rolecodes = (p.roles && p.roles.length > 0) ? p.roles : [settings.pmroleid["pr"]];
let rtn = await this.pmregister(p, q)
return rtn;
}
//应用的自由用户注册,无需验证,需要前端头设置公司KEY
async pmregisterByFreeUser(p, q) {
p.rolecodes = [settings.pmroleid["pr"]];
let rtn = await this.pmregister(p, q)
return rtn;
}
//平台租户注册接口方法
//控制器端检查用户名和密码非空
async pmregister(p, q) {
var self = this;
let tmppwd = p.password;
if (!tmppwd) {
tmppwd = settings.defaultpwd;
}
p.password = this.getEncryptStr(tmppwd);
if (!p.nickName) {
p.nickName = p.userName;
}
return this.db.transaction(async function (t) {
//对于租户类型注册,创建一个默认公司,公司名称xxxx的公司
//如果非租户类型,需要按照传递进来的公司companykey,来查询公司,按照companykey缓存到redis
let cmpkey = self.getUUID();
let rolecodes = p.rolecodes ? p.rolecodes : [settings.pmroleid["ta"]];
if (rolecodes[0] == settings.pmroleid["ta"]) {//如果注册时,角色是租户,那么需要创建默认公司
p.isAdmin = true;//租户默认就是管理员的权限
let cmp = await self.companyDao.create({ name: p.userName + "的公司", companykey: cmpkey }, t);
p.company_id = cmp.id;
}
//如果是用户注册,平台用户应该只属于平台应用
let roleappid = p.app_id;//先取出当前应用的id,给后续的取角色用,角色是按照应用和公司区分
p.app_id = settings.pmappid
let u = await self.dao.create(p, t)
//设置默认角色,租户
//设置默认普通角色,由于有了租户概念,所以注册时,需要知道当前租户和应用的id 才可以设置默认角色 todo
//如果是非租户,那么按照当前应用ID是找不到指定的角色,所以是空的
var roles = await self.roleDao.model.findAll({ where: { id: { [self.db.Op.in]: rolecodes }, app_id: roleappid, company_id: p.company_id }, transaction: t });
if (roles && roles.length > 0) {
await u.setRoles(roles, { transaction: t });
}
//创建统一账号 to add extra fields
let cred = await self.cregister(u.userName, p.company_id, p.password, u.id + "")
console.log("......................................");
console.log(cred.consumer.id);
if (cred) {
u.center_id = cred.consumer.id;
u.jwtkey = cred.key;
u.jwtsecret = cred.secret;
try {
await u.save({ transaction: t });
} catch (e) {
console.log(e);
await self.cunregister(p.userName);
throw new Error("保存用户失败");
}
return { user: u, companykey: cmpkey };
} else {
throw new Error("创建统一账号失败");
}
});
}
//平台登录
//登录接口封装kong-url
//登录路由放行
//p里面含有appkey,company_id,userName,password
async pmlogin(p, q, req) {
var self = this;
//先要按照用户名,在统一账户中查找存在性
//如果不存在
let consumer = await this.cget(UserService.consumerUrl(p.userName));
if (!consumer.data) {
return null;
} else {
let password = consumer.data.tags[1].split("_")[1];
let inpassword = this.getEncryptStr(p.password);
if (password != inpassword) {
return null;
}
}
var rtn = {}
return this.db.transaction(async function (t) {
//从缓存中取得
// let userfind = await self.dao.model.findOne({
// where: { userName: p.userName, app_id: settings.pmappid },
// attributes: ['userName', 'nickName','headUrl','jwtkey','jwtsecret','created_at','isSuper','isAdmin'],
// include: [{ model: self.db.models.company, raw: true, attributes: ["companykey"] }]
// });
let userfind = await self.cacheManager["UserCache"].cache(p.userName)
if (userfind) {
let token = await self.cmakejwt(userfind.jwtkey, userfind.jwtsecret, null);
rtn.token = token;
let roleids=userfind.Roles.map(item=>{
return item.id
})
let auths= await self.authS.findAuthsByRole(roleids)
userfind["access"]=auths
delete userfind["jwtkey"]
delete userfind["jwtsecret"]
rtn.user = userfind;
return rtn;
} else {
return null;
}
})
}
async getUserInfo(uname) {
// let userfind = await this.dao.model.findOne({
// where: { userName: uname, app_id: settings.pmappid },
// attributes: ['userName', 'nickName',"headUrl",'isSuper','isAdmin'],
// include: [{ model: this.db.models.company, raw: true, attributes: ["companykey"] }]
// });
let userfind = await this.cacheManager["UserCache"].cache(uname)
//添加当前用户的权限信息
let roleids=userfind.Roles.map(item=>{
return item.id
})
let auths= await this.authS.findAuthsByRole(roleids)
userfind["access"]=auths
delete userfind["jwtkey"]
delete userfind["jwtsecret"]
return userfind;
}
//自由用户的电话登录和注册
//需要存在公司KEY
async pmloginByVCodeForFreeUser(p, q) {
p.rolecodes = [settings.pmroleid["pr"]];
let rtn = await this.pmloginByVCode(p, q, req)
return system.getResult(rtn);
}
//平台租户注册与登录
//用户验证码登录
//
async pmloginByVCode(p, q, req) {
var rtn = {}
//检查传递过来的手机验证码是否与缓存的一致
let mobile = p.mobile;
let vcode = p.vcode;
let cachevcode = await this.cacheManager["VCodeCache"].getCache(mobile, 60)
if (vcode != cachevcode.vcode) {
return null;
} else {
//检查是否在库里存在
//appkey--company_id---需要控制器基类里设置到p对象里
let user = await this.cacheManager["UserCache"].cache(mobile)
if (user) {
let roleids=user.Roles.map(item=>{
return item.id
})
let auths= await this.authS.findAuthsByRole(roleids)
user["access"]=auths
//生成token
let token = await this.cmakejwt(user.jwtkey, user.jwtsecret, null);
rtn.token = token;
rtn.user = user;
return rtn;
} else {
//先按照用户名查续身份信息,获取key,secret,
let regrtn = await this.pmregister({ userName: mobile, nickName: mobile, rolecodes: p.rolecodes, company_id: p.company_id, app_id: p.app_id });
let token = await this.cmakejwt(regrtn.user.jwtkey, regrtn.user.jwtsecret, null);
// rtn.token = token;
// rtn.user = u;
let userfind= await this.cacheManager["UserCache"].cache(mobile)
let roleids=userfind.Roles.map(item=>{
return item.id
})
let auths= await this.authS.findAuthsByRole(roleids)
userfind["access"]=auths
regrtn.user=userfind
regrtn.token = token
return regrtn;
}
}
//不一致那么就
}
//发送手机验证码并缓存
async sendVCode(p, q, req) {
let mobile = p.mobile;
let vcodeobj = await this.cacheManager["VCodeCache"].cache(mobile, null, 60);
return vcodeobj.vcode;
}
async reSendVCode(p, q, req) {
let mobile = p.mobile;
await this.cacheManager["VCodeCache"].invalidate(mobile);
let vcodeobj = await this.cacheManager["VCodeCache"].cache(mobile, null, 60);
return vcodeobj.vcode;
}
//修改中心密码
async cmodifypwd(uname, newpwd, cmpid) {
try {
let rtn = await system.postJsonTypeReq(UserService.consumerUrl(uname), { tags: ["cmp_" + cmpid, "pass_" + newpwd] }, "PATCH")
console.log(rtn)
if (rtn.statusCode == 200) {
return rtn.data;
}
return null;
} catch (e) {
console.log(e);
return null;
}
}
//创建统一账号及jwt身份
async cregister(uname, cmpid, pass, uid) {
try {
var rtn2 = null;
let rtn = await system.postJsonTypeReq(UserService.newConsumerUrl(), { username: uname, custom_id: uid, tags: ["cmp_" + cmpid, "pass_" + pass] })
console.log(rtn)
if (rtn.statusCode == 409) {
throw new Error("已经存在相同的统一账号名称!");
} else {
//创建身份
rtn2 = await system.post3wFormTypeReq(UserService.newJwtCredUrl(uname))
}
if (rtn.statusCode == 201 && rtn2.statusCode == 201) {
return rtn2.data;
}
return null;
} catch (e) {
console.log(e);
return null;
}
}
async jwtsign(plkey, secretstr, opts) {
let promise = new Promise(function (resv, rej) {
jwt.sign({ iss: plkey }, secretstr, opts, function (err, rtn) {
if (err) {
rej(err);
} else {
resv(rtn);
}
});
});
return promise;
}
//只要登录 生成新的访问jwttoken
async cmakejwt(key, secret, opts) {
var token = await this.jwtsign(key, secret, opts);
return token;
}
//删除统一账号
async cunregister(uname) {
try {
let rtn = await system.delReq(UserService.consumerUrl(uname))
if (rtn.statusCode == 204) {
return {};
}
return null;
} catch (e) {
return null;
}
}
//登录统一账号
async clogin(uname) {
//检查是否存在重名
}
//按用户名查询统一用户
async findCUser(uname) {
}
async resetPassword(uname, pwd) {
let inpassword = this.getEncryptStr(pwd);
var self = this;
return this.db.transaction(async function (t) {
let up = await self.dao.updateByWhere({ password: inpassword }, { userName: uname }, t);
//令缓存失效
await self.cacheManager["UserCache"].invalidate(uname);
let cacheUser = await self.cacheManager["UserCache"].cache(uname);
//修改认证中心的tag密码
let modi = await self.cmodifypwd(uname, inpassword, cacheUser.company.id)
if (!modi) {
throw new Error("修改中心密码出错")
}
return cacheUser;
});
}
//修改
async update(qobj, tm = null) {
var self = this;
return this.db.transaction(async function (t) {
let up = await self.dao.update(qobj, t);
//令缓存失效
await self.cacheManager["UserCache"].invalidate(qobj.userName);
let cacheUser = await self.cacheManager["UserCache"].cache(qobj.userName);
return cacheUser;
});
}
}
module.exports = UserService;
// // (async ()=>{
// let u=new UserService();
// // // let x=await u.cregister("jiangong")
// // // console.log(x)
// // // let x=await u.cunregister("jiangong")
// // // console.log(x)
// // // let t=await u.cmakejwt()
// // // console.log(t)
// let ux=u.register({userName:"jiangyong3",password:"123"})
// console.log(ux);
// // })()
\ No newline at end of file
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const moment = require("moment");
const pushTx = require("../../../utils/totxClient")
class BizoptService extends ServiceBase {
constructor() {
super("bizchance", ServiceBase.getDaoName(BizoptService));
this.schemeDao = system.getObject("db.bizchance.schemeDao");
this.statuslogDao = system.getObject("db.bizchance.statuslogDao");
}
async findBizAndSheme(pobj) {
let data = await this.dao.findBizAndSheme(pobj.id);
if (data) {
data = JSON.parse(JSON.stringify(data));
let bussinessData = {
id: data.id,
demand_code: data.demand_code,
business_type: data.business_type,
company_name: data.business_info.companyName,
customer_name: data.business_info.contactsName,
customer_number: data.business_info.contactsPhone,
annual_report: data.business_info.annual_report || false,
content: data.business_info.memoInfo,
service_address: data.business_info.serviceName,
source_name: data.source_name,
business_status: data.business_status,
source_number: data.source_number,
updated_at: moment(data.updated_at).format('YYYY-MM-DD HH:mm:ss'),
created_at: moment(data.created_at).format('YYYY-MM-DD HH:mm:ss'),
close_reason: data.close_reason
};
let schemeData = null;
if (data.scheme) {
schemeData = {
id: data.scheme.id,
scheme_number: data.scheme.scheme_number,
scheme_status: data.scheme.scheme_status,
reject_reason: data.scheme.reject_reason,
company_name: data.scheme.scheme_info.companyName,
address: data.scheme.scheme_info.address,
annual_report: data.scheme.scheme_info.annual_report || false,
remark_info: data.scheme.remark_info,
updated_at: moment(data.scheme.updated_at).format('YYYY-MM-DD HH:mm:ss'),
created_at: moment(data.scheme.created_at).format('YYYY-MM-DD HH:mm:ss'),
}
}
return {
bussinessData,
schemeData
}
}
return data
}
async closeBiz(pobj) {
/**
* 1. 回传给腾讯
* 2. 判断是否可以关闭
* 3. 更改 商机、方案状态
* 4. 插入更改记录
* 5. 查询 是否有权限
*/
const bizResult = await this.dao.findOne({
id: pobj.bizId
});
if (!bizResult) {
throw new Error("查不到该商机");
}
if ([system.BUSSTATUS.CLOSED, system.BUSSTATUS.SUCCESS].includes(bizResult.business_status)) {
throw new Error("此商机状态下不可操作");
}
const schemeResult = await this.schemeDao.findOne({
bizopt_id: pobj.bizId
});
await pushTx.pushCloseNeed(bizResult, pobj.close_reason);
return this.db.transaction(async (t) => {
await this.dao.updateByWhere({
business_status: system.BUSSTATUS.CLOSED,
close_reason: pobj.close_reason
}, {
id: pobj.bizId
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.BIZ,
flow_id: pobj.bizId,
status_code: system.BUSSTATUS.CLOSED,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
if (schemeResult) {
await this.schemeDao.updateByWhere({
scheme_status: system.SCHEMESTATUS.CLOSED
}, {
id: schemeResult.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.SCHEME,
flow_id: schemeResult.id,
status_code: system.SCHEMESTATUS.CLOSED,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
}
return "success"
})
}
}
module.exports = BizoptService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const moment = require("moment");
const pushTx = require("../../../utils/totxClient")
class SchemeService extends ServiceBase {
constructor() {
super("bizchance", ServiceBase.getDaoName(SchemeService));
this.bizoptDao = system.getObject("db.bizchance.bizoptDao");
this.statuslogDao = system.getObject("db.bizchance.statuslogDao");
}
async create(data) {
// TODO: 权限判断
let bizData = await this.bizoptDao.findOne({
id: data.bizopt_id
});
if (!bizData) {
throw new Error("查不到该商机");
}
if ([system.BUSSTATUS.CLOSED, system.BUSSTATUS.SUCCESS, system.BUSSTATUS.WAITINGCONFIRM].includes(bizData.business_status)) {
throw new Error("此商机状态下不可操作");
}
let schemeData = await this.dao.findOne({
bizopt_id: data.bizopt_id
})
if (schemeData && [system.SCHEMESTATUS.WAITINGCONFIRM, system.SCHEMESTATUS.CLOSED].includes(schemeData.scheme_status)) {
throw new Error("此方案状态下不可操作");
}
// scheme_number 提交到腾讯 获取更新 方案编号
data.scheme_number = await pushTx.pushScheme(bizData, schemeData ? { ...data, scheme_number: schemeData.scheme_number } : data);
return this.db.transaction(async (t) => {
/**
* 1. 更改 商机状态
* 2. 查询 是否有方案及方案状态
* 3. 新增 或更改 方案
* 4. 添加 状态记录更改
*/
try {
await this.bizoptDao.updateByWhere({
business_status: system.BUSSTATUS.WAITINGCONFIRM
}, {
id: data.bizopt_id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.BIZ,
flow_id: data.bizopt_id,
status_code: system.BUSSTATUS.WAITINGCONFIRM,
salesman_id: data.userid,
salesman_name: data.username
});
let scheme_id = null;
if (schemeData) {
await this.dao.updateByWhere({
...data,
demand_code: bizData.demand_code,
scheme_status: system.SCHEMESTATUS.WAITINGCONFIRM
}, {
id: schemeData.id
}, t);
scheme_id = schemeData.id
} else {
let schemeResult = await this.dao.create({
...data,
demand_code: bizData.demand_code,
scheme_status: system.SCHEMESTATUS.WAITINGCONFIRM,
bizopt_id: data.bizopt_id
}, t);
scheme_id = schemeResult.id;
}
this.statuslogDao.create({
flow_type: system.FLOWCODE.SCHEME,
flow_id: scheme_id,
status_code: system.SCHEMESTATUS.WAITINGCONFIRM,
salesman_id: data.userid,
salesman_name: data.username
});
return { bizId: data.bizopt_id };
} catch (err) {
console.log(err)
}
});
}
}
module.exports = SchemeService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
class ArticleService extends ServiceBase {
constructor() {
super(ServiceBase.getDaoName(ArticleService));
this.newschannelDao = system.getObject("db.newschannelDao");
}
//获取频道列表
async findChannel(obj) {
// const apps=await super.findAndCountAll(obj);
var usageType = obj.usageType;
if (usageType == null || usageType == "" || usageType == "undefined") {
return { code: -101, msg: "参数有误", data: null };
}
try {
var sqlwhere = {
where: { usageType: usageType },
attributes: ["id", "code", "title", "bgimg", "isPubed", "usageType", "app_id"],
order: [["orderNo", 'ASC']],
raw: true
};
var list = await this.newschannelDao.model.findAll(sqlwhere);
if (list == null || list.length == 0) {
return { code: 0, msg: "没有信息", data: null };
} else {
return { code: 1, msg: "操作成功", data: list };
}
} catch (e) {
return { code: -1, msg: "操作失败", data: null };
}
}
//获取该频道所有列表
async findAndCountAll2(obj) {
// const apps=await super.findAndCountAll(obj);
var newschannel = obj.newschannel_id;
var pageSize = obj.page_size;
var currentPage = obj.current_page;
if (newschannel == null || newschannel == "" || newschannel == "undefined") {
return { code: -101, msg: "参数有误", data: null };
}
if (pageSize == null || pageSize == "" || pageSize == "undefined") {
pageSize = "";
}
if (currentPage == null || currentPage == "" || currentPage == "undefined") {
currentPage = "";
}
try {
var sqlwhere = {
where: { newschannel_id: newschannel },
attributes: ["id", "code", "title", "listimg", "videourl", "desc", "mediaType", "usageType",
"test", "newschannel_id", "app_id"],
order: [["orderNo", 'ASC']],
raw: true
};
if (pageSize != "" && currentPage != "") {
var tPageSize = Number(pageSize);
var tCurrentPage = Number(currentPage);
if (tCurrentPage < 1) {
tCurrentPage = 1;
}
if (tPageSize > 50) {
tPageSize = 50;
}
if (tPageSize < 1) {
tPageSize = 1;
}
sqlwhere.limit = tPageSize;
sqlwhere.offset = (tCurrentPage - 1) * tPageSize;
}
var list = await this.dao.model.findAll(sqlwhere);
if (list == null || list.length == 0) {
return { code: 0, msg: "没有信息", data: null };
} else {
return { code: 1, msg: "操作成功", data: list };
}
} catch (e) {
return { code: -1, msg: "操作失败", data: null };
}
// apps.forEach(a=>{
// if(a.content && a.content!=""){
// a.content=decodeURIComponent(a.content);
// }
// });
// console.log("xxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxx");
// for(var arch of apps.rows){
// var c=arch.content.toString("utf-8") ;
// console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
// console.log(c);
// if(c && c!=""){
// arch.content=c;
// }
// }
// return apps;
}
//获取详细信息
async findArticle(obj) {
// const apps=await super.findAndCountAll(obj);
var id = obj.id;
if (id == null || id == "" || id == "undefined") {
return { code: -101, msg: "参数有误", data: null };
}
try {
var sqlwhere = {
where: { id: id },
attributes: ["id", "code", "title", "listimg", "videourl", "desc", "content", "mediaType", "usageType",
"test", "app_id"],
order: [["created_at", 'desc']],
raw: true
};
var list = await this.dao.model.findOne(sqlwhere);
if (list == null || list.length == 0) {
return { code: 0, msg: "没有信息", data: null };
} else {
return { code: 1, msg: "操作成功", data: list };
}
} catch (e) {
return { code: -1, msg: "操作失败", data: null };
}
}
}
module.exports = ArticleService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class NewschannelService extends ServiceBase{
constructor(){
super(ServiceBase.getDaoName(NewschannelService));
//this.appDao=system.getObject("db.appDao");
}
async findAgreenment(queryobj,qobj,req){
return this.dao.findAgreenment();
}
async findPrev5(queryobj,qobj){
return this.dao.findPrev5();
}
}
module.exports=NewschannelService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class SloganpictureService extends ServiceBase{
constructor(){
super(ServiceBase.getDaoName(SloganpictureService));
//this.appDao=system.getObject("db.appDao");
}
async findAndCountAll(obj){
const apps=await super.findAndCountAll(obj);
// apps.forEach(a=>{
// if(a.content && a.content!=""){
// a.content=decodeURIComponent(a.content);
// }
// });
// console.log("xxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxx");
// for(var arch of apps.rows){
// var c=arch.content.toString("utf-8") ;
// console.log("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
// console.log(c);
// if(c && c!=""){
// arch.content=c;
// }
// }
return apps;
}
}
module.exports=SloganpictureService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
const settings = require("../../../../config/settings");
const moment = require("moment");
const System = require("../../../system");
const pushTx = require("../../../utils/totxClient")
class DeliverService extends ServiceBase {
constructor() {
super("delivery", ServiceBase.getDaoName(DeliverService));
this.cacheinfoDao = system.getObject("db.delivery.cacheinfoDao");
this.materialDao = system.getObject("db.delivery.materialDao");
this.statuslogDao = system.getObject("db.bizchance.statuslogDao");
this.qualificationDao = system.getObject("db.delivery.qualificationDao");
this.annualreportDao = system.getObject("db.delivery.annualreportDao");
}
async temporarySave(pobj) {
const deliverData = await this.dao.findOne({
id: pobj.deliver_id
});
if (!deliverData) {
throw new Error("没有关联的交付单");
}
let result = await this.cacheinfoDao.createOrUpdate(pobj);
return result;
}
async findTemporary(pobj) {
return this.cacheinfoDao.findOne({
deliver_id: pobj.deliver_id
});
}
async submitMaterials(pobj) {
/**
* 1.此状态下是否可以提交材料
* 2.推送到腾讯
* 2.同步暂存数据表
* 3.存储到材料表
* 4.更改 交付单流转状态
*/
const deliverData = await this.dao.findOne({
id: pobj.deliver_id
});
if (!deliverData || ![
system.SERVERSESTATUS.COLLECTING,
system.SERVERSESTATUS.SUBMITING,
system.SERVERSESTATUS.DISPOSEING
].includes(deliverData.delivery_status)) {
throw new Error("此交付单不可提交材料");
}
// 推送到商城
await pushTx.submitMaterials(deliverData, JSON.parse(JSON.stringify(pobj.cache_info)))
return this.db.transaction(async (t) => {
await this.cacheinfoDao.createOrUpdate(pobj, t);
await this.materialDao.createOrUpdate(pobj, t);
if (deliverData.delivery_status === system.SERVERSESTATUS.COLLECTING) {
await this.dao.updateByWhere({
delivery_status: system.SERVERSESTATUS.SUBMITING
}, {
id: pobj.deliver_id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: pobj.deliver_id,
status_code: system.SERVERSESTATUS.SUBMITING,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
}
return "SUCCESS"
});
}
async findInfo(pobj) {
/**
* 交付单表 关联 材料表(材料基本信息、邮寄信息) 、 资质信息表
*/
let result = await this.dao.findInfo(pobj);
if (!result) {
throw new Error("交付单不可查看");
}
result = JSON.parse(JSON.stringify(result));
if (result.master_source_number) {
let annualReportData = await this.dao.findOne({
master_source_number: result.master_source_number,
id: {
$ne: result.id
}
});
if (annualReportData) {
result.delivery_info.annualReport = true;
} else {
result.delivery_info.annualReport = false;
}
}
return result;
}
async changeDeliveryStatus(pobj) {
/**
* 判断 交付单状态下能否更新
*/
const deliverData = await this.dao.findOne({
id: pobj.id
});
if (!deliverData) {
throw new Error("没有此交付单");
}
if (![system.SERVERSESTATUS.SUBMITING, system.SERVERSESTATUS.POSTING].includes(deliverData.delivery_status)) {
throw new Error("此状态下不可手动更新办理状态");
}
let status;
let txstatus;
switch (deliverData.delivery_status) {
case system.SERVERSESTATUS.SUBMITING:
status = system.SERVERSESTATUS.DISPOSEING;
txstatus = pushTx.TXSTATUS.DISPOSEING;
break
case system.SERVERSESTATUS.POSTING:
status = system.SERVERSESTATUS.SUCCESS;
txstatus = pushTx.TXSTATUS.SUCCESS;
break
}
await pushTx.pushChangeOrder(txstatus, deliverData.delivery_code);
await this.dao.updateByWhere({
delivery_status: status
}, {
id: pobj.id
})
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: pobj.id,
status_code: status,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
return "success"
}
// 点击详情 将 订单状态 从 已接单更新为收集材料中
async toCollecting(pobj) {
const deliverData = await this.dao.findOne({
id: pobj.id
});
if (!deliverData) {
throw new Error("没有此交付单");
}
if (system.SERVERSESTATUS.RECEIVED === deliverData.delivery_status) {
await pushTx.pushChangeOrder(pushTx.TXSTATUS.COLLECTING, deliverData.delivery_code);
await this.dao.updateByWhere({
delivery_status: system.SERVERSESTATUS.COLLECTING
}, {
id: pobj.id
});
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: pobj.id,
status_code: system.SERVERSESTATUS.COLLECTING,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
}
return "success"
}
async addQualification(pobj) {
/**
* 1. 保存资质信息
* 2. 判断是否有年报服务,有的话改变年报状态
*/
const deliverData = await this.dao.findOne({
id: pobj.deliver_id
});
if (!deliverData) {
throw new Error("查不到交付单");
}
if (deliverData.delivery_status !== system.SERVERSESTATUS.DISPOSEING) {
throw new Error("该交付单状态下不可提交");
}
let annualReportData;
let annualReportArry = [];
// 年报逻辑
if (deliverData.master_source_number) {
annualReportData = await this.dao.findOne({
master_source_number: deliverData.master_source_number,
id: {
$ne: deliverData.id
}
});
if (annualReportData && annualReportData.delivery_status === System.ANNUALREPORT.RECEIVED) {
// TODO: let year = annualReportData.delivery_info && annualReportData.delivery_info.numYear || 5
let year = 5;
for (let i = new Date().getFullYear(); i < new Date().getFullYear() + year; i++) {
annualReportArry.push({
year: i,
status: System.ANNUALREPORT.WAITDECLARE,
deliver_id: annualReportData.id
});
}
// 推送年报信息
await pushTx.pushChangeOrder(pushTx.TXSTATUS.WAITDECLARE, annualReportData.delivery_code, {
annualReport: annualReportArry
})
}
}
return this.db.transaction(async (t) => {
await this.qualificationDao.createOrUpdate(pobj, t);
if (annualReportData && annualReportData.delivery_status === System.ANNUALREPORT.RECEIVED) {
await this.dao.updateByWhere({
delivery_status: System.ANNUALREPORT.TAKEEFFECT
}, {
id: annualReportData.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: annualReportData.id,
status_code: System.ANNUALREPORT.TAKEEFFECT,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
await this.annualreportDao.bulkCreate(annualReportArry, t);
}
return "success"
});
}
async closeDeliver(pobj) {
/**
* 1 关闭资质
* 2 查询是否有年报信息 关闭
*/
const deliverData = await this.dao.findOne({
id: pobj.id
});
if (!deliverData) {
throw new Error("查不到交付单");
}
if (![system.SERVERSESTATUS.RECEIVED, system.SERVERSESTATUS.COLLECTING].includes(deliverData.delivery_status)) {
throw new Error("该交付单状态下不可提交");
}
// 推送 关闭交付
await pushTx.pushChangeOrder(pushTx.TXSTATUS.CLOSED, deliverData.delivery_code, {
close_reason: pobj.close_reason
});
// 推送 退费
await pushTx.returnPremium(deliverData.delivery_code);
// 年报逻辑
let annualReportData;
if (deliverData.master_source_number) {
annualReportData = await this.dao.findOne({
master_source_number: deliverData.master_source_number,
id: {
$ne: deliverData.id
}
});
// 推送 关闭交付 资质
if (annualReportData) {
await pushTx.pushChangeOrder(pushTx.TXSTATUS.CLOSED, annualReportData.delivery_code, {
close_reason: "对应的资质交付关闭了"
});
// 推送 年报退费
await pushTx.returnPremium(annualReportData.delivery_code);
}
}
return this.db.transaction(async (t) => {
await this.dao.updateByWhere({
delivery_status: system.SERVERSESTATUS.CLOSED,
close_reason: pobj.close_reason
}, {
id: pobj.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: pobj.id,
status_code: system.SERVERSESTATUS.CLOSED,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
if (annualReportData) {
await this.dao.updateByWhere({
delivery_status: system.SERVERSESTATUS.CLOSED,
close_reason: "对应的资质交付关闭了"
}, {
id: annualReportData.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: annualReportData.id,
status_code: system.SERVERSESTATUS.CLOSED,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
}
return "success"
});
}
async addMail(pobj) {
/**
* 判断状态
* 保存 邮寄信息
* 更改流转状态
*/
let result = await this.dao.findInfo(pobj);
if (!result) {
throw new Error("交付单不可查看");
}
if (!result.qualification) {
throw new Error("请先上传资质信息");
}
if (result.delivery_status !== system.SERVERSESTATUS.DISPOSEING) {
throw new Error("该状态下不可填写邮寄信息");
}
const { material } = result;
let { proposerInfo } = material
proposerInfo.recipientInfo = pobj.recipientInfo;
await pushTx.pushChangeOrder(pushTx.TXSTATUS.POSTING, result.delivery_code, {
qualification: result.qualification,
recipientInfo: pobj.recipientInfo
});
return this.db.transaction(async (t) => {
await this.materialDao.updateByWhere({
proposerInfo
}, {
id: material.id
}, t);
await this.dao.updateByWhere({
delivery_status: system.SERVERSESTATUS.POSTING,
}, {
id: pobj.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: pobj.id,
status_code: system.SERVERSESTATUS.POSTING,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
return "success"
});
}
async findAnnualReportInfo(pobj) {
let annualReportResult = await this.dao.findAnnualReportInfo(pobj);
if (!annualReportResult) {
throw new Error("交付单不可查看");
}
if (!annualReportResult.master_source_number) {
throw new Error("查不到主订单号");
}
let data = await this.dao.findOne({
master_source_number: annualReportResult.master_source_number,
id: {
$ne: annualReportResult.id
}
});
if (!data) {
throw new Error("查不到对应的交付单");
}
let result = await this.dao.findInfo({ ...pobj, id: data.id });
annualReportResult = JSON.parse(JSON.stringify(annualReportResult));
const { material: { proposerInfo: { businessLicense } }, qualification } = result;
annualReportResult.businessLicense = businessLicense;
annualReportResult.qualification = qualification;
return annualReportResult;
}
async declareReport(pobj) {
/**
* 1. 更新 年报信息
* 2. 判断是否 都已申报完毕
* 3. 改变 交付单状态
*/
const annualReportData = await this.annualreportDao.findOne({
id: pobj.id
});
if (!annualReportData) {
throw new Error("查不到此年报信息");
}
const deliverData = await this.dao.findOne({
id: annualReportData.deliver_id
});
// 年报逻辑
let isChange = false;
if (deliverData && deliverData.delivery_status === system.ANNUALREPORT.TAKEEFFECT) {
const annualReports = await this.annualreportDao.findAll({
deliver_id: deliverData.id,
status: system.ANNUALREPORT.WAITDECLARE
});
const ids = annualReports.map(item => {
return item.id;
});
if (ids.length === 1 && ids.includes(annualReportData.id)) {
isChange = true
}
}
// 推送年报信息
await pushTx.pushDeclareReport({ id: pobj.id, file: pobj.file }, deliverData);
//修改年报订单状态
if (isChange) {
await pushTx.pushChangeOrder(pushTx.TXSTATUS.SUCCESS, deliverData.delivery_code);
}
return this.db.transaction(async (t) => {
await this.annualreportDao.updateByWhere({
file: pobj.file,
status: system.ANNUALREPORT.DECLARESUCCESS
}, {
id: annualReportData.id
}, t);
if (isChange) {
await this.dao.updateByWhere({
delivery_status: system.ANNUALREPORT.SUCCESS
}, {
id: deliverData.id
}, t);
this.statuslogDao.create({
flow_type: system.FLOWCODE.DELIVERY,
flow_id: deliverData.id,
status_code: System.ANNUALREPORT.SUCCESS,
salesman_id: pobj.userid,
salesman_name: pobj.username
});
}
return 'success';
});
}
}
module.exports = DeliverService;
const system=require("../../../system");
const ServiceBase=require("../../sve.base");
class MsgHistoryService extends ServiceBase{
constructor(){
super(ServiceBase.getDaoName(MsgHistoryService));
this.msgnoticeDao = system.getObject("db.msg.msgnoticeDao");
this.userDao = system.getObject("db.auth.userDao");
this.redisClient = system.getObject("util.redisClient");
}
async saveMsg(msg) {
var self = this;
console.log("save msg ", msg);
// 事务
await this.db.transaction(async function (t){
// 1.保存聊天信息
msg = await self.dao.create(msg, t);
// 2.保存好友信息
await self.msgnoticeDao.saveNotice(msg, t);
});
return msg;
}
async pushBusinessLicenseMsg(senderId, targetId, businessLicense_id) {
if(!businessLicense_id) {
return 0;
}
var notice = await this.msgnoticeDao.findOne({fromId : senderId, toId : targetId});
if(notice && notice.businessLicense_id == businessLicense_id) {
return 0;
}
var senderUser = await this.userDao.findById(senderId);
var targetUser = await this.userDao.findById(targetId);
var senderChannel = senderUser.app_id + "¥" + senderUser.id;
var targetChannel = targetUser.app_id + "¥" + targetUser.id;
var sender = senderUser.app_id + "¥" + senderUser.id + "¥" + senderUser.headUrl;
var target = targetUser.app_id + "¥" + targetUser.id + "¥" + targetUser.headUrl;
var msg = {
msgType: "mryzLicense",
sender:sender,
senderId:senderId,
target:target,
targetId:targetId,
content:businessLicense_id,
isRead:false,
businessLicense_id:businessLicense_id
}
var obj = await this.saveMsg(msg);
var bl = await this.businesslicenseDao.findById(businessLicense_id);
msg.businessLicense = bl;
msg.id = obj.id;
msg.created_at = obj.created_at;
this.redisClient.publish(senderChannel, JSON.stringify(msg));
this.redisClient.publish(targetChannel, JSON.stringify(msg));
return 1;
}
async getChatList(senderId, targetId, maxId, pageSize) {
let sql = "SELECT * FROM `msghistory` WHERE id < :maxId AND ((senderId = :senderId AND targetId = :targetId) OR (targetId = :senderId AND senderId = :targetId)) ORDER BY id DESC LIMIT :pageSize "
let params = {senderId:senderId, targetId: targetId, maxId: maxId, pageSize: pageSize};
var list = await this.dao.customQuery(sql, params);
if(!list || list.length == 0) {
return [];
}
var licenseIds = [];
var msgIds = [];
list.forEach(item => {
if(item.msgType == 'mryzLicense') {
licenseIds.push(Number(item.businessLicense_id));
}
msgIds.push(item.id);
});
if(licenseIds.length > 0) {
let licenseSql = "SELECT * FROM yz_business_license WHERE id IN (" + licenseIds.join(",") + ") ";
var licenseList = await this.businesslicenseDao.customQuery(licenseSql);
var licenseMap = [];
licenseList.forEach(item => {
licenseMap["id" + item.id] = item;
});
list.forEach(item => {
if(item.msgType == 'mryzLicense') {
item.businessLicense = licenseMap['id' + item.businessLicense_id];
}
});
}
var self = this;
setTimeout(function(){
self.setRead(senderId, targetId, list);
}, 1000);
return list;
}
async setRead(senderId, targetId, list) {
if(!list || list.length == 0) {
return;
}
var target = await this.userDao.findById(targetId);
if(!target) {
return;
}
var pushIds = [];
for(var item of list) {
if(item.isRead || senderId != item.targetId) {
continue;
}
pushIds.push(item.id);
}
if(pushIds.length == 0) {
return;
}
this.dao.updateByWhere({isRead: true}, {where:{id:{[this.db.Op.in]:pushIds}}});
var channel = target.app_id + "¥" + target.id;
var rs = await this.redisClient.publish(channel, JSON.stringify({type:"readmsg", data : pushIds}));
console.log(rs, "------------------------------------------ publish result ");
}
async readMsg(userId, id) {
var msg = await this.dao.findById(id);
if(!msg || userId != msg.targetId) {
return 0;
}
msg.isRead = true;
await msg.save();
var user = await this.userDao.findById(msg.senderId);
if(!user) {
return 0;
}
var channel = user.app_id + "¥" + user.id;
return await this.redisClient.publish(channel, JSON.stringify({type:"readmsg", data : [msg.id]}));
}
}
module.exports=MsgHistoryService;
const system = require("../../../system");
const ServiceBase = require("../../sve.base");
class MsgNoticeService extends ServiceBase {
constructor() {
super(ServiceBase.getDaoName(MsgNoticeService));
this.userDao = system.getObject("db.auth.userDao");
this.msghistoryDao = system.getObject("db.msg.msghistoryDao");
}
getApp(appkey) {
return this.cacheManager["AppCache"].cacheApp(appkey);
}
async getUserList(userId) {
var list = await this.dao.model.findAll({
where: {
fromId: userId
},
order: [
["updated_at", "DESC"]
],
raw: true
});
if (!list || list.length == 0) {
return [];
}
var msgIds = [];
var businessLicenseIds = [];
var userIds = [];
for (var item of list) {
msgIds.push(item.lastMsgId);
businessLicenseIds.push(item.businessLicense_id);
userIds.push(item.toId);
}
var msgMap = [];
var businessLicenseMap = [];
var userMap = [];
var unreadMap = [];
// 最后一条聊天记录
if (msgIds.length > 0) {
var msgList = await this.msghistoryDao.customQuery("SELECT * FROM msghistory WHERE id IN (" + msgIds.join(",") + ") ");
msgList.forEach(item => {
msgMap["id" + item.id] = item;
});
}
// 最后一次聊天关联执照
if (businessLicenseIds.length > 0) {
var licenseList = await this.businesslicenseDao.customQuery("SELECT * FROM yz_business_license WHERE id IN (" + businessLicenseIds.join(",") + ") ");
var serviceTypeIds = [];
for (var item of licenseList) {
serviceTypeIds.push(item.serviceTypeOneId);
serviceTypeIds.push(item.serviceTypeTwoId);
}
if (serviceTypeIds.length > 0) {
var sql = "SELECT id, name FROM `p_service_type` WHERE id IN (" + serviceTypeIds.join(",") + ") ";
var typeList = await this.dao.customQuery(sql);
var typeMap = [];
if (typeList && typeList.length > 0) {
for (var t of typeList) {
typeMap["type_id_" + t.id] = t.name;
if (t.id == item.serviceTypeOneId) {
item.serviceTypeOneName = t.name;
} else if (t.id == item.serviceTypeTwoId) {
item.serviceTypeTwoName = t.name;
} else {}
}
}
}
for (var item of licenseList) {
item.serviceTypeOneName = typeMap["type_id_" + item.serviceTypeOneId];
item.serviceTypeTwoName = typeMap["type_id_" + item.serviceTypeTwoId];
}
licenseList.forEach(item => {
businessLicenseMap["id" + item.id] = item;
});
}
// 聊天好友用户信息
if (userIds.length > 0) {
var userList = await this.userDao.customQuery("SELECT * FROM p_user WHERE id IN (" + userIds.join(",") + ") ");
userList.forEach(item => {
userMap["id" + item.id] = item;
});
}
// 未读消息数量
var unreadList = await this.userDao.customQuery("SELECT senderId, COUNT(1) AS num FROM `msghistory` WHERE isRead = 0 AND targetId = " + userId + " GROUP BY senderId ");
unreadList.forEach(item => {
unreadMap["id" + item.senderId] = item.num;
});
var rs = [];
for (var i in list) {
var item = list[i];
item.lastMsg = msgMap["id" + item.lastMsgId];
item.businessLicense = businessLicenseMap["id" + item.businessLicense_id];
item.friend = userMap["id" + item.toId];
item.unreadCount = unreadMap["id" + item.toId] || 0;
rs.push(item);
}
return rs;
}
async countUnread(userId) {
debugger;
var unreadList = await this.userDao.customQuery("SELECT COUNT(1) AS num FROM `msghistory` WHERE isRead = 0 AND targetId = " + userId);
var count = 0;
if (unreadList && unreadList.length > 0) {
count = unreadList[0].num || 0;
}
return count;
}
}
module.exports = MsgNoticeService;
\ 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