UNPKG

owhat-job

Version:

owhat红包清理

594 lines (466 loc) 21.4 kB
import V from 'gcl'; import pro from 'myprocesscontroller'; import OSS from 'ali-oss'; pro.start(async function () { const conf = V.AppSettings(this.Config, "law_static"); if (!conf) throw new Error('law-static配置获取失败!'); const count = parseInt(conf.count || 1000); const max = parseInt(conf.max || 1); const threadcount = conf.threadcount || 1; const ossprop = conf.ossprop; //OSS配置 let indexOssPath = ossprop.objectNames.IndexObject; console.log('数据初始化完成', threadcount, max); const that = this; //获取“redis"操作实例 that.Temp = this.Middler.getObjectByAppName('Ni', 'MT'); var refreshOSS = async function (objectName, result) { //上传 let client = new OSS({ region: ossprop.region, bucket: ossprop.bucket, internal: ossprop.internal, accessKeyId: ossprop.key, accessKeySecret: ossprop.secret, secure: true, }); console.log('oss待上传--' + objectName, result); await client.put(objectName, Buffer.from(result)); console.log('oss已上传--' + objectName); return false; } //“类别”递归获取子节点 var buidCategoryData = function getJsonTree(arrays, parentId) { var dest = []; for (var i = 0; i < arrays.length; i++) { var obj = arrays[i]; if (obj.ParentID == parentId) { var newObj = {}; newObj.ID = obj.ID; newObj.Name = obj.Name; // newObj.Sort = obj.Sort; var childs = getJsonTree(arrays, obj.ID); if (childs.length > 0) { newObj.childs = getJsonTree(arrays, obj.ID); } dest.push(newObj); } } return dest; } //生成categoryID列表页 var buildArticlePage = async function (lcount, alistPageSize, categoryID) { var pageNums = lcount % alistPageSize == 0 ? lcount / alistPageSize : parseInt(lcount / alistPageSize) + 1; var pageFn = async function (jsonObj) { let ret = await that.Ni.excute('law.getArtsByPageIndex', { Fileds: jsonObj["Fileds"], Table: jsonObj["Table"], Where: jsonObj["Where"], Order: jsonObj["Order"], PageIndex: jsonObj["PageIndex"], PageSize: jsonObj["PageSize"] }); if (ret.hasData()) { const dataList = ret.last()[0]; if (dataList.length > 0) { //静态文件上传OSS await refreshOSS(jsonObj.OssPath, V.toJsonString({ "data": dataList })); } } } for (let index = 0; index < pageNums; index++) { let pageIndex = index + 1; let pageObj = { Fileds: "*", Table: 'v_article', Where: 'categoryID=' + categoryID, Order: 'isHomeTop DESC,weight DESC', PageIndex: pageIndex, PageSize: alistPageSize, OssPath: ossprop.objectNames.articleList_new + categoryID + "/" + pageIndex + ".json" } await pageFn(pageObj); pageObj.Order = 'isHomeTop DESC, viewCount DESC, collectCount DESC'; pageObj.OssPath = ossprop.objectNames.articleList_hot + categoryID + "/" + pageIndex + ".json"; await pageFn(pageObj); pageObj.Where += " AND isExcel=1 "; pageObj.Order = 'isHomeTop DESC,weight DESC'; pageObj.OssPath = ossprop.objectNames.articleList_classic + categoryID + "/" + pageIndex + ".json"; await pageFn(pageObj); } } //文章列表生成 var buildArticleList = async function () { //获取类别文章数 let ret = await that.Ni.excute('law.groupCategory'); if (ret.hasData()) { let result = ret.last()[0]; result.forEach(async item => { // console.log("||||||||||||||||||||||||||||||||||"); buildArticlePage(item.lcount, conf.alistPageSize, item.categoryID) }); } } //文章列表初始数据生成 await buildArticleList(); //“首页”除文章列表数据生成 var initData = async function () { //首次获取全部数据 let ret = await that.Ni.excute('law.getStaticData', { Type: 0 }); //初始化 var data = { "authors": [], "classics": [], "famousQuotes": [], "finances": [], "banners": [], "categorys": [], "topicings": [], "topiceds": [] } if (ret.hasData()) { const dataList = ret.last(); // console.log(dataList); //文章类别数据 var categorys = dataList[0]; // console.log("5555555555555555555555"); // var filterCats=categorys.filter((item)=>{ // return item.ParentID!=null; // }); // console.log(filterCats); data.categorys = buidCategoryData(categorys, null); //todo:https://law-jxrc.oss-cn-beijing.aliyuncs.com/static/index/categorys.js?spm=5176.8466032.0.dopenurl.52971450Dm8Lz7&file=categorys.js //专家数据 var authors = dataList[1]; data.authors = authors; //经典文章数据 var classics = dataList[2]; data.classics = classics; //名人名言数据 var famousQuotes = dataList[3]; data.famousQuotes = famousQuotes; //融资数据 var finances = dataList[4]; data.finances = finances; //banner数据 var banners = dataList[5]; data.banners = banners; // //进行中课题数据 // var topicings = dataList[6]; // data.topicings = topicings; //课题数据 let topics = dataList[6]; // data.topiceds = topiceds; let topiceds = topics.filter(x => { return x.Type === 0; }).map(x => { delete x.Type; return x; }); let topicings = topics.filter(x => { return x.Type === 1; }).map(x => { delete x.Type; return x; }); let topicJsonObj = { "topiceds": topiceds, "topicings": topicings }; data.topics = topicJsonObj; } let comUpOss = async function (objName, propName) { // let result = {}; // result[propName] = data[propName]; let jsStr = 'var ' + propName + ' = ' + V.toJsonString(data[propName]); await refreshOSS(objName, jsStr); } //上传categorys comUpOss(indexOssPath + "categorys.js", "categorys") //上传authors comUpOss(indexOssPath + "authors.js", "authors") //上传classics comUpOss(indexOssPath + "classics.js", "classics") //上传famousQuotes comUpOss(indexOssPath + "famousQuotes.js", "famousQuotes") //上传finances comUpOss(indexOssPath + "finances.js", "finances") //上传banners comUpOss(indexOssPath + "banners.js", "banners") //上传课题 comUpOss(indexOssPath + "topics.js", "topics") // //上传topicings // comUpOss(indexOssPath + "topiceds.js", "topiceds") } await initData(); // const recommendedbit = { // "启动页面": { value: 0, path: '/getStart.json', count: 1 } // }; return new pro.CACProcess(new class extends pro.ADataWorker { constructor() { super('wk', threadcount, max); } async getData(data) { console.log('static-schedule获取数据'); let ret = null; try { ret = await that.Temp.excute('add.redis.getschedulemsmq', { count: count }); console.log('getschedulemsmq', ret.hasData() && ret.last()[0]); if (ret.hasData() && ret.last()[0].length && !ret.last()[0][0].affected) { let result = []; const map = {}; ret.last()[0].map(v => { try { let value = V.json(v.value); !map[value.Type] && (map[value.Type] = { type: value.Type, paras: value.paras }, result[result.length] = map[value.Type]); } catch (ee) { that.Log.release('add.redis.getschedulemsmq-单条 -' + ee.message + ',json=' + V.toJsonString(v)); console.log('add.redis.getschedulemsmq-单条 -', ee.stack, V.toJsonString(v)); } }); console.log('add.redis.getschedulemsmq', `获取${ret.last()[0].length}条数据`, result); return result; } else if (!ret.hasData()) { console.log('没有返回数据!', ret.last()); } else { console.log('奇怪错误 未返回返回数据 也没有此次请求的num'); } // return [{ // "type": "upd.banner" // }, { // "type": "upd.article", // "paras": ["d8216378ce2311e9a66300163e308174"] // }, { // "type": "upd.author" // }, { // "type": "upd.category", // "paras": [22] // }, { // "type": "upd.topic" // }, { // "type": "upd.finance" // }, { // "type": "upd.famousQuote" // }]; } catch (e) { that.Log.release('add.redis.getschedulemsmq -' + e.message + ',json=' + V.toJsonString(ret.last())); console.log('add.redis.getschedulemsmq -', e.stack, ret.last()); } if (ret) { ret.clear(); } return null; } async custom(ret, data) { if (!data.array) data.array = 1; else data.array++; if (!data.Log) { data.Log = that.Log; //data.Ni = that.Ni; // data.Ni = that.Middler.getObjectByAppName('Ni', 'MT'); data.Config = that.Config; } let res = null; let result; let params = ret.paras; if (!params) { params = []; } // console.log(V.toJsonString(params)); let ni = that.Middler.getObjectByAppName('Ni', 'MT'); try { var buildData = async function (type, ossObjName, propName) { res = await ni.excute('law.getStaticData', { Type: type }); result = {}; result[propName] = []; if (res.hasData()) { let jsonObj = null; let returnObj = res.last()[0]; switch (type) { case 1: jsonObj = buidCategoryData(returnObj, null); // jsStr = 'var categorys = ' + V.toJsonString(buidCategoryData(res.last()[0], null)); // result[propName] = buidCategoryData(res.last()[0], null); break; case 7: let topiceds = returnObj.filter(x => { return x.Type === 0; }).map(x => { delete x.Type; return x; }); let topicings = returnObj.filter(x => { return x.Type === 1; }).map(x => { delete x.Type; return x; }); jsonObj = { "topiceds": topiceds, "topicings": topicings }; break; default: // result[propName] = res.last()[0]; // jsStr = 'var ' + propName + ' = ' + V.toJsonString(res.last()[0]); jsonObj = returnObj; break; } if (jsonObj != null) { let jsStr = 'var ' + propName + ' = ' + V.toJsonString(jsonObj); //静态文件结构 await refreshOSS(ossObjName, jsStr); } } } var buildAuthorByID = async function (authorID) { let authorRes = await that.Middler.getObjectByAppName('Ni', 'MT').excute('law.getAuthorByID', { AuthorID: authorID }); if (authorRes.hasData()) { let authorObj = authorRes.last()[0][0]; let jsonStr = V.toJsonString(authorObj); let jsStr = 'var author = ' + jsonStr; await refreshOSS(ossprop.objectNames.author + authorObj.ID + ".json", jsonStr); await refreshOSS(ossprop.objectNames.author + authorObj.ID + ".js", jsStr); } } var buildArticleList = async function (categoryID) { let alRet = await that.Middler.getObjectByAppName('Ni', 'MT').excute('law.getCategoryPage', { categoryID: categoryID }); if (alRet.hasData() && alRet.last()[0][0]) { await buildArticlePage(alRet.last()[0][0].lcount, conf.alistPageSize, categoryID); } } switch (ret.type) { case 'upd.category': //更新类别下文章列表 params.forEach(async item => { await buildArticleList(item); }); //更新“首页”类别 await buildData(1, indexOssPath + "categorys.js", "categorys") break; case 'upd.author': //更新“投稿人” params.forEach(async item => { await buildAuthorByID(item); }); //更新首页“投稿人”列表 await buildData(2, indexOssPath + "authors.js", "authors") break; case 'upd.classic': await buildData(3, indexOssPath + "classics.js", "classics") break; case 'upd.famousQuote': await buildData(4, indexOssPath + "famousQuotes.js", "famousQuotes") break; case 'upd.finance': await buildData(5, indexOssPath + "finances.js", "finances") break; case 'upd.banner': await buildData(6, indexOssPath + "banners.js", "banners") break; case 'upd.topic': await buildData(7, indexOssPath + "topics.js", "topics") break; // case 'upd.topiceds': // await buildData(8, ossprop.objectNames.topiceds + "data.js", "topiceds") // break; // case 'upd.articlelist': // const categoryID = 22; //ret.params[0] // var alRet = await ni.excute('law.getCategoryPage', { // categoryID: categoryID // }); // if (alRet.hasData() && alRet.last()[0][0]) { // await buildArticlePage(alRet.last()[0][0].lcount, conf.alistPageSize, categoryID); // } // break; case 'upd.article': params.forEach(async item => { // const articleID = '1ecab369caee11e9a66300163e308174'; //ret.params[0] let articleDes = await ni.excute('law.getArticleByID', { ArticleID: item }); if (articleDes.hasData() && articleDes.last()[0][0]) { let articleObj = articleDes.last()[0][0]; await refreshOSS(ossprop.objectNames.article + item + "/body.js", 'var article =' + V.toJsonString(articleObj)); let top6CommentsRes = await ni.excute('law.getTop6Comments', { ArticleID: item }); await buildArticleList(articleObj.categoryID); if (top6CommentsRes.hasData() && top6CommentsRes.last()[0]) { /* //“类别”递归获取子节点 var buidCommentsData = function getJsonTree(arrays, parentId) { var dest = []; for (var i = 0; i < arrays.length; i++) { var obj = arrays[i]; if (obj.parentCommentID == parentId) { var newObj = {}; newObj.ID = obj.ID; newObj.comment = obj.comment; newObj.creater = obj.creater; newObj.childs = getJsonTree(arrays, obj.ID); dest.push(newObj); } } return dest; } var comms = buidCommentsData(top6CommentsRes.last()[0], 0); await refreshOSS(ossprop.objectNames.article + articleID + "/comments.json", { "data": comms }); */ await refreshOSS(ossprop.objectNames.article + item + "/comments.js", 'var comments = {"data":' + V.toJsonString(top6CommentsRes.last()[0]) + ' }'); } } }); break; default: break; } console.log(ret.type + '完成', ret); } catch (e) { console.log("单条处理失败" + e.message, V.toJsonString(ret)); that.Log.release("单条处理失败" + e.message + ' ' + V.toJsonString(ret)); } finally {} if (res) { res.clear(); } return false; } async rollback(v, data) { console.log('rollback 抛弃数据', v); that.Log.release("单条处理放弃" + ' ' + V.toJsonString(v)); return false; } async dispose(data) { try { await super.dispose(data); } catch (e) { console.log('dispose', e.message); } finally { // if (data.Ni) { // that.Middler.setObjectByAppName('Ni', 'MT', data.Ni); // } delete data.Log; // delete data.Ni; delete data.Config; } return false; } }, this.Log, threadcount, 10000); });