Commit f805b696 by 蒋勇

d

parent 2a769098
#!/bin/bash #!/bin/bash
FROM registry.cn-beijing.aliyuncs.com/hantang2/node105:v2 FROM registry.cn-beijing.aliyuncs.com/hantang2/node105:v2
MAINTAINER jy "jiangyong@gongsibao.com" MAINTAINER jy "jiangyong@gongsibao.com"
ADD taskexecutor /apps/taskexecutor/ ADD rpt_result /apps/rpt_result/
WORKDIR /apps/taskexecutor/ WORKDIR /apps/rpt_result/
RUN cnpm install -S RUN cnpm install -S
CMD ["node","/apps/taskexecutor/main.js"] CMD ["python","/apps/rpt_result/main.py"]
......
const system = require("../system")
const settings = require("../../config/settings.js");
class CacheBase {
constructor() {
this.redisClient = system.getObject("util.redisClient");
this.desc = this.desc();
this.prefix = this.prefix();
this.cacheCacheKeyPrefix = "sadd_children_appkeys:" + settings.appKey + "_cachekey";
this.isdebug = this.isdebug();
}
isdebug() {
return false;
}
desc() {
throw new Error("子类需要定义desc方法,返回缓存描述");
}
prefix() {
throw new Error("子类需要定义prefix方法,返回本缓存的前缀");
}
async cache(inputkey, val, ex, ...items) {
const cachekey = this.prefix + inputkey;
var cacheValue = await this.redisClient.get(cachekey);
if (!cacheValue || cacheValue == "undefined" || cacheValue == "null" || this.isdebug) {
var objvalstr = await this.buildCacheVal(cachekey, inputkey, val, ex, ...items);
if (!objvalstr) {
return null;
}
if (ex) {
await this.redisClient.setWithEx(cachekey, objvalstr, ex);
} else {
await this.redisClient.set(cachekey, objvalstr);
}
//缓存当前应用所有的缓存key及其描述
this.redisClient.sadd(this.cacheCacheKeyPrefix, [cachekey + "|" + this.desc]);
return JSON.parse(objvalstr);
} else {
return JSON.parse(cacheValue);
}
}
async invalidate(inputkey) {
const cachekey = this.prefix + inputkey;
this.redisClient.delete(cachekey);
return 0;
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
throw new Error("子类中实现构建缓存值的方法,返回字符串");
}
}
module.exports = CacheBase;
const CacheBase = require("../cache.base");
const system = require("../../system");
class ApiAccessControlCache extends CacheBase {
constructor() {
super();
}
desc() {
return "API访问控制缓存";
}
prefix() {
return "api_access_control_:";
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
return val;
}
}
module.exports = ApiAccessControlCache;
const CacheBase=require("../cache.base");
const system=require("../../system");
const settings = require("../../../config/settings");
class ApiAccessKeyCache extends CacheBase{
constructor(){
super();
this.restS=system.getObject("util.restClient");
}
desc(){
return "应用中缓存访问token";
}
prefix(){
return "g_accesskey_";
}
async buildCacheVal(cachekey,inputkey,val,ex,...items){
var acckapp=await this.restS.execPost({appkey:settings.appKey,secret:settings.secret},settings.paasUrl()+"api/auth/accessAuth/getAccessKey");
var s=acckapp.stdout;
if(s){
var tmp=JSON.parse(s);
if(tmp.status==0){
return JSON.stringify(tmp.data);
}
}
return null;
}
}
module.exports=ApiAccessKeyCache;
const CacheBase=require("../cache.base");
const system=require("../../system");
const settings = require("../../../config/settings");
//缓存首次登录的赠送的宝币数量
class ApiAccessKeyCheckCache extends CacheBase{
constructor(){
super();
this.restS=system.getObject("util.restClient");
}
desc(){
return "应用中来访访问token缓存";
}
prefix(){
return "g_accesskeycheck_";
}
async buildCacheVal(cachekey,inputkey,val,ex,...items){
var cacheManager=system.getObject("db.common.cacheManager");
//当来访key缓存不存在时,需要去开放平台检查是否存在来访key缓存
var acckapp=await cacheManager["ApiAccessKeyCache"].cache(settings.appKey,null,ex);//先获取本应用accessKey
var checkresult=await this.restS.execPostWithAK({checkAccessKey:inputkey},settings.paasUrl()+"api/auth/accessAuth/authAccessKey",acckapp.accessKey);
if(checkresult.status==0){
var s=checkresult.data;
return JSON.stringify(s);
}else{
await cacheManager["ApiAccessKeyCache"].invalidate(settings.appKey);
var acckapp=await cacheManager["ApiAccessKeyCache"].cache(settings.appKey,null,ex);//先获取本应用accessKey
var checkresult=await this.restS.execPostWithAK({checkAccessKey:inputkey},settings.paasUrl()+"api/auth/accessAuth/authAccessKey",acckapp.accessKey);
var s=checkresult.data;
return JSON.stringify(s);
}
}
}
module.exports=ApiAccessKeyCheckCache;
const CacheBase = require("../cache.base");
const system = require("../../system");
class MagCache extends CacheBase {
constructor() {
super();
this.prefix = "magCache";
}
desc() {
return "缓存管理";
}
prefix() {
return "magCache:";
}
async buildCacheVal(cachekey, inputkey, val, ex, ...items) {
return val;
}
async getCacheSmembersByKey(key) {
return this.redisClient.smembers(key);
}
async delCacheBySrem(key, value) {
return this.redisClient.srem(key, value)
}
async keys(p) {
return this.redisClient.keys(p);
}
async get(k) {
return this.redisClient.get(k);
}
async del(k) {
return this.redisClient.delete(k);
}
async clearAll() {
console.log("xxxxxxxxxxxxxxxxxxxclearAll............");
return this.redisClient.flushall();
}
}
module.exports = MagCache;
const fs=require("fs");
const settings=require("../../../../config/settings");
class CacheManager{
constructor(){
//await this.buildCacheMap();
this.buildCacheMap();
}
buildCacheMap(){
var self=this;
self.doc={};
var cachePath=settings.basepath+"/app/base/db/cache/";
const files=fs.readdirSync(cachePath);
if(files){
files.forEach(function(r){
var classObj=require(cachePath+"/"+r);
self[classObj.name]=new classObj();
var refTmp=self[classObj.name];
if(refTmp.prefix){
self.doc[refTmp.prefix]=refTmp.desc;
}
else{
console.log("请在"+classObj.name+"缓存中定义prefix");
}
});
}
}
}
module.exports=CacheManager;
// var cm= new CacheManager();
// cm["InitGiftCache"].cacheGlobalVal("hello").then(function(){
// cm["InitGiftCache"].cacheGlobalVal().then(x=>{
// console.log(x);
// });
// });
const Sequelize = require('sequelize');
const settings=require("../../../../config/settings")
const fs=require("fs")
const path=require("path");
var glob = require("glob");
class DbFactory{
constructor(){
const dbConfig=settings.database();
this.db=new Sequelize(dbConfig.dbname,
dbConfig.user,
dbConfig.password,
dbConfig.config);
this.db.Sequelize=Sequelize;
this.db.Op=Sequelize.Op;
this.initModels();
this.initRelations();
}
async initModels(){
var self=this;
var modelpath=path.normalize(path.join(__dirname, '../..'))+"/models/";
console.log("modelpath=====================================================");
console.log(modelpath);
var models=glob.sync(modelpath+"/**/*.js");
console.log(models.length);
models.forEach(function(m){
console.log(m);
self.db.import(m);
});
console.log("init models....");
}
async initRelations(){
}
//async getCon(){,用于使用替换table模型内字段数据使用
getCon(){
var that=this;
// await this.db.authenticate().then(()=>{
// console.log('Connection has been established successfully.');
// }).catch(err => {
// console.error('Unable to connect to the database:', err);
// throw err;
// });
//同步模型
if(settings.env=="dev"){
//console.log(pa);
// pconfigObjs.forEach(p=>{
// console.log(p.get({plain:true}));
// });
// await this.db.models.user.create({nickName:"dev","description":"test user",openId:"testopenid",unionId:"testunionid"})
// .then(function(user){
// var acc=that.db.models.account.build({unionId:"testunionid",nickName:"dev"});
// acc.save().then(a=>{
// user.setAccount(a);
// });
// });
}
return this.db;
}
}
module.exports=DbFactory;
// const dbf=new DbFactory();
// dbf.getCon().then((db)=>{
// //console.log(db);
// // db.models.user.create({nickName:"jy","description":"cccc",openId:"xxyy",unionId:"zz"})
// // .then(function(user){
// // var acc=db.models.account.build({unionId:"zz",nickName:"jy"});
// // acc.save().then(a=>{
// // user.setAccount(a);
// // });
// // console.log(user);
// // });
// // db.models.user.findAll().then(function(rs){
// // console.log("xxxxyyyyyyyyyyyyyyyyy");
// // console.log(rs);
// // })
// });
// const User = db.define('user', {
// firstName: {
// type: Sequelize.STRING
// },
// lastName: {
// type: Sequelize.STRING
// }
// });
// db
// .authenticate()
// .then(() => {
// console.log('Co+nnection has been established successfully.');
//
// User.sync(/*{force: true}*/).then(() => {
// // Table created
// return User.create({
// firstName: 'John',
// lastName: 'Hancock'
// });
// });
//
// })
// .catch(err => {
// console.error('Unable to connect to the database:', err);
// });
//
// User.findAll().then((rows)=>{
// console.log(rows[0].firstName);
// });
const system=require("../system")
class TaskBase{
constructor(className){
this.redisClient=system.getObject("util.redisClient");
this.restS=system.getObject("util.restClient");
this.serviceName=className;
this.isThrough=false;
this.isDaemon=false;
this.TASK_CHANNEL="k8stask";
}
async subBeforeTask(params){
console.log("前置操作......",this.serviceName);
}
async beforeTask(params){
var self=this;
//订阅任务频道
await this.redisClient.subscribe(this.TASK_CHANNEL);
//频道事件处理函数
this.redisClient.subclient.on("message", async function (channel, message) {
await self.taskHandle(channel, message);
});
await this.subBeforeTask(params);
}
async taskHandle(channel, message){
await this.subTaskHandle(channel, message);
}
async subTaskHandle(channel, message){
console.log(channel, message);
}
async subPostTask(params){
console.log("后置操作......",this.serviceName);
}
async postTask(params){
await this.subPostTask();
}
async doTask(params){
try {
await this.beforeTask(params);
if(!this.isThrough){
await this.subDoTask(params);
await this.postTask(params);
if(this.isDaemon){
var http = require('http');
var server = http.createServer((req,res) => {
this.reqHandler(req,res);
})
server.listen(process.env.TASK_PORT);//监听端口号是3000的服务器
console.log("is listenning........on "+process.env.TASK_PORT);
}
}
} catch (e) {
await this.redisClient.unsubscribe(this.TASK_CHANNEL);
console.log(e);
//日志记录
console.log(JSON.stringify({
optitle:this.serviceName+",任务执行存在错误",
op:"base/db/task.base.js",
content:"",
clientIp:"",
status:"error"
}));
}
}
async subReqHandler(req,res){
//设置 HTTP 头部,状态码是 200,文件类型是 html,字符集是 utf-8
res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"});
res.write('<h1>Node.js</h1>');
}
async reqHandler(req,res){
await this.subReqHandler(req,res);
res.end('Hello World\\n');
}
async subDoTask(params){
throw new Error("请在子类中重写此方法进行操作业务逻辑............................!");
}
static getServiceName(ClassObj){
return ClassObj["name"];
}
async apiCallWithAk(url,params){
var acck="task";
//按照访问token
var restResult=await this.restS.execPostWithAK(params,url,acck);
console.log("restResultrestResultrestResultrestResultrestResultrestResultrestResultrestResult");
if(restResult){
if(restResult.status==0){
var resultRtn=restResult.data;
return resultRtn;
}else{
await this.cacheManager["ApiAccessKeyCache"].invalidate(settings.appKey);
return null;
}
}
return null;
}
sleep(milliSeconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliSeconds);
}
}
module.exports=TaskBase;
const TaskBase=require("../../task.base");
const settings=require("../../../../config/settings");
var excel = require('exceljs');
const system = require("../../../system");
class ParseRptTask extends TaskBase{
constructor(){
super(TaskBase.getServiceName(ParseRptTask));
this.cacheData=[];
this.ossC=system.getObject("util.ossClient");
}
async subBeforeTask(params){
console.log("前置操作......",this.serviceName);
//this.isThrough=true;
//console.log(this.cacheManager);
this.isDaemon=true;
}
async subTaskHandle(channel, message){
var x=await this.redisClient.rpop(message);
if(x){
this.cacheData.push(x);
}
setImmediate(async ()=>{
await this.parseXls();
});
}
//读取模板文件
async readxls(path) {
var promise = new Promise((resv, rej) => {
var workbook = new excel.Workbook();
workbook.properties.date1904 = true;
workbook.xlsx.readFile(path)
.then(function () {
return resv(workbook);
}).catch(function (e) {
return rej(e);
});
});
return promise;
}
async parseXls(){
var pv=this.cacheData.pop();
if(pv){
var tohandleurls=pv.split("~");
var rptid=tohandleurls[0];
var bid=tohandleurls[1];
var rptDate=tohandleurls[2];
var rptCode=tohandleurls[3];
var urldownload=tohandleurls[4];
//下载文件
var keyindex=urldownload.lastIndexOf("/");
var keystr=urldownload.substring(keyindex+1);
var result= await this.ossC.downfile(keystr);
var localpath="/tmp/"+keystr;
var wb= await this.readxls(localpath);
var parserByCode=require("./rptHandler/"+rptCode);
var rows=await parserByCode(wb);
console.log(JSON.stringify(rows));
this.apiCallWithAk(settings.fkweb(),{
rptid:rptid,
batchid:bid,
rptdate:rptDate,
rptcode:rptCode,
hisdata:rows
});
this.parseXls();
}
}
async subDoTask(params){
console.log(params);
console.log("TestTask1.....");
}
}
module.exports=ParseRptTask;
\ No newline at end of file
module.exports =(async (wb)=>{
var sheet = wb.getWorksheet(1);
var insertrows=[];
sheet.eachRow({ includeEmpty: true }, function(row, rowNumber) {
if(rowNumber>=10 && rowNumber<=47){
console.log(rowNumber,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..");
var rowDesc="";
var cacheStr="";
row.eachCell({ includeEmpty: true }, function(cell, colNumber) {
if(colNumber==2){
if(typeof cell.value=="object"){
cell.value.richText.forEach(element => {
rowDesc+=element.text;
});
}else{
rowDesc+=cell.value;
}
cacheStr=rowDesc;
}
if(colNumber==19 || colNumber==26 || colNumber==36 || colNumber==40){
var colPos=1;
var buildRow={};
if(colNumber==19 || colNumber==26){
rowDesc=rowDesc+"/"+"一般项目";
}
if(colNumber==36 || colNumber==40){
rowDesc=rowDesc+"/"+"即征即退项目";
}
if(colNumber==19){
rowDesc+="/"+"本月数";
colPos=1;
}
if(colNumber==26){
rowDesc+="/"+"本年累计";
colPos=2;
}
if(colNumber==36){
rowDesc+="/"+"本月数";
colPos=3;
}
if(colNumber==40){
rowDesc+="/"+"本年累计";
colPos=4;
}
buildRow.rpttypecode="GT";
buildRow.position=rowNumber+"-"+colPos;
buildRow.desc=rowDesc;
buildRow.valstr=cell.value;
insertrows.push(buildRow);
rowDesc=cacheStr;
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports = (async (wb) => {
var sheet = wb.getWorksheet(1);
var insertrows = [];
sheet.eachRow({ includeEmpty: true }, function (row, rowNumber) {
if (rowNumber >= 13 && rowNumber <= 27) {
row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
if (colNumber == 2) {
if (typeof cell.value == "object") {
desc = "";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
console.log(desc, ">>>>>>>>>>>>>>>");
}
if (colNumber == 11) {
var buildRow = {};
buildRow.rpttypecode = "ITQ";
buildRow.valstr = cell.value;
buildRow.desc = desc + "/本年累计金额";
buildRow.position = rowNumber + "-" + 1;
insertrows.push(buildRow);
}
});
}
if (rowNumber >= 29 && rowNumber <= 34) {
row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
if (colNumber == 4) {
if (typeof cell.value == "object") {
desc = "";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
console.log(desc, ">>>>>>>>>>>>>>>");
}
if (colNumber == 11) {
var buildRow = {};
buildRow.rpttypecode = "ITQ";
buildRow.valstr = cell.value;
buildRow.desc = desc + "/本年累计金额";
buildRow.position = rowNumber + "-" + 1;
insertrows.push(buildRow);
}
});
}
if (rowNumber >= 39 && rowNumber <= 40) {
row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
if (colNumber == 1) {
if (typeof cell.value == "object") {
desc = "";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
console.log(desc, ">>>>>>>>>>>>>>>");
}
if (colNumber == 5) {
var buildRow = {};
buildRow.rpttypecode = "ITQ";
buildRow.valstr = cell.value;
buildRow.desc = desc;
buildRow.position = rowNumber + "-" + 1;
insertrows.push(buildRow);
}
if (colNumber == 8) {
if (typeof cell.value == "object") {
desc = "";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
console.log(desc, ">>>>>>>>>>>>>>>");
}
if (colNumber == 11) {
var buildRow = {};
buildRow.rpttypecode = "ITQ";
buildRow.valstr = cell.value;
buildRow.desc = desc;
buildRow.position = rowNumber + "-" + 2;
insertrows.push(buildRow);
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb) => {
var sheet = wb.getWorksheet(1);
var insertrows = [];
sheet.eachRow({ includeEmpty: true }, function (row, rowNumber) {
if (rowNumber >= 3 && rowNumber <= 38) {
row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
if (colNumber == 3) {
if (typeof cell.value == "object") {
desc = "";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
console.log(desc, ">>>>>>>>>>>>>>>");
}
if (colNumber == 4) {
var buildRow = {};
buildRow.rpttypecode = "ITY";
buildRow.valstr = cell.value;
buildRow.desc = desc + "/金额";
buildRow.position = rowNumber + "-" + 1;
insertrows.push(buildRow);
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb) => {
var sheet = wb.getWorksheet(1);
var insertrows = [];
sheet.eachRow({ includeEmpty: true }, function (row, rowNumber) {
if (rowNumber >= 3 && rowNumber <= 16) {
row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
if (colNumber == 2) {
if (typeof cell.value == "object") {
desc = "";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
console.log(desc, ">>>>>>>>>>>>>>>");
}
if (colNumber == 3) {
var buildRow = {};
buildRow.rpttypecode = "ITY";
buildRow.valstr = cell.value;
buildRow.desc = desc + "/金额";
buildRow.position = rowNumber + "-" + 1;
insertrows.push(buildRow);
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb) => {
var sheet = wb.getWorksheet(1);
var insertrows = [];
sheet.eachRow({ includeEmpty: true }, function (row, rowNumber) {
if (rowNumber >= 3 && rowNumber <= 28) {
row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
if (colNumber == 2) {
if (typeof cell.value == "object") {
desc = "";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
console.log(desc, ">>>>>>>>>>>>>>>");
}
if (colNumber == 3) {
var buildRow = {};
buildRow.rpttypecode = "ITY_COST";
buildRow.valstr = cell.value;
buildRow.desc = desc + "/金额";
buildRow.position = rowNumber + "-" + 1;
insertrows.push(buildRow);
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb) => {
var sheet = wb.getWorksheet(1);
var insertrows = [];
sheet.eachRow({ includeEmpty: true }, function (row, rowNumber) {
if (rowNumber >= 5 && rowNumber <= 41) {
row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
if (colNumber == 3) {
if (typeof cell.value == "object") {
desc="";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
cachetmp=desc;
console.log(desc, ">>>>>>>>>>>>>>>");
}
if (colNumber == 4) {
desc=cachetmp+"/资产原值";
console.log(desc,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
if (colNumber == 5) {
desc=cachetmp+"/本年折旧、摊销额";
}
if (colNumber == 6) {
desc+="/累计折旧、摊销额";
}
if (colNumber == 7) {
desc=cachetmp+"/资产计税基础";
}
if (colNumber == 8) {
desc=cachetmp+"/税收折旧、摊销额";
}
if (colNumber == 9) {
desc=cachetmp+"/享受加速折旧政策的资产按税收一般规定计算的折旧、摊销额";
}
if (colNumber == 10) {
desc=cachetmp+"/加速折旧、摊销统计额";
}
if (colNumber == 11) {
desc=cachetmp+"/ 累计折旧、摊销额";
}
if (colNumber == 12) {
desc=cachetmp+"/ 纳税调整金额";
}
if (colNumber >=4 && colNumber <=12) {
var colpos=colNumber-3;
var buildRow = {};
buildRow.rpttypecode = "ITY_COST";
buildRow.valstr = cell.value;
buildRow.desc = desc;
buildRow.position = rowNumber + "-" + colpos;
insertrows.push(buildRow);
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb) => {
var sheet = wb.getWorksheet(1);
var insertrows = [];
sheet.eachRow({ includeEmpty: true }, function (row, rowNumber) {
if (rowNumber >= 6 && rowNumber <= 17) {
row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
if (colNumber == 2) {
if (typeof cell.value == "object") {
desc="";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
cachetmp=desc;
console.log(desc, ">>>>>>>>>>>>>>>");
}
if (colNumber == 3) {
desc=cachetmp+"/年度";
console.log(desc,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
if (colNumber == 4) {
desc=cachetmp+"/当年境内所得额";
}
if (colNumber == 5) {
desc+=cachetmp+"/分立转出的亏损额";
}
if (colNumber == 6) {
desc=cachetmp+"/可弥补年限5年";
}
if (colNumber == 7) {
desc=cachetmp+"/可弥补年限10年";
}
if (colNumber == 8) {
desc=cachetmp+"/弥补亏损企业类型";
}
if (colNumber == 9) {
desc=cachetmp+"/当年亏损额";
}
if (colNumber == 10) {
desc=cachetmp+"/ 当年待弥补的亏损额";
}
if (colNumber == 11) {
desc=cachetmp+"/使用境内所得弥补";
}
if (colNumber == 12) {
desc=cachetmp+"/使用境外所得弥补";
}
if (colNumber == 13) {
desc=cachetmp+"/当年可结转以后年度弥补的亏损额";
}
if (colNumber >=3 && colNumber <=13) {
var colpos=colNumber-2;
var buildRow = {};
buildRow.rpttypecode = "ITY_FILL_LOST";
buildRow.valstr = cell.value;
buildRow.desc = desc;
buildRow.position = rowNumber + "-" + colpos;
insertrows.push(buildRow);
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb) => {
var sheet = wb.getWorksheet(1);
var insertrows = [];
sheet.eachRow({ includeEmpty: true }, function (row, rowNumber) {
if (rowNumber >= 3 && rowNumber <= 28) {
row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
if (colNumber == 2) {
if (typeof cell.value == "object") {
desc="";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
cachetmp=desc;
}
if (colNumber ==3 ) {
var buildRow = {};
buildRow.rpttypecode = "ITY_INCOME_DESC";
buildRow.timetypecode = "Q";
buildRow.valstr = cell.value;
buildRow.desc = desc+"/金额";
buildRow.position = rowNumber + "-" + 1;
insertrows.push(buildRow);
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb) => {
var sheet = wb.getWorksheet(1);
var insertrows = [];
sheet.eachRow({ includeEmpty: true }, function (row, rowNumber) {
if (rowNumber >= 5 && rowNumber <= 30) {
row.eachCell({ includeEmpty: true }, function (cell, colNumber) {
if (colNumber == 2) {
if (typeof cell.value == "object") {
desc="";
cell.value.richText.forEach(element => {
desc += element.text;
});
} else {
desc = cell.value;
}
cachetmp=desc;
console.log(desc, ">>>>>>>>>>>>>>>");
}
if (colNumber == 3) {
desc=cachetmp+"/销售费用";
console.log(desc,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
if (colNumber == 4) {
desc=cachetmp+"/其中:境外支付";
}
if (colNumber == 5) {
desc+=cachetmp+"/管理费用";
}
if (colNumber == 6) {
desc=cachetmp+"/其中:境外支付";
}
if (colNumber == 7) {
desc=cachetmp+"/财务费用";
}
if (colNumber == 8) {
desc=cachetmp+"/其中:境外支付";
}
if (colNumber >=3 && colNumber <=8) {
var colpos=colNumber-2;
var buildRow = {};
buildRow.rpttypecode = "ITY_PERIOD";
buildRow.valstr = cell.value;
buildRow.desc = desc;
buildRow.position = rowNumber + "-" + colpos;
insertrows.push(buildRow);
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb)=>{
var sheet = wb.getWorksheet(1);
var insertrows=[];
sheet.eachRow({ includeEmpty: true }, function(row, rowNumber) {
if(rowNumber>=5 && rowNumber<=45){
row.eachCell({ includeEmpty: true }, function(cell, colNumber) {
if(colNumber==1){
desc="资产/"+cell.value;
}
if(colNumber==3 || colNumber==4){
if(desc!="资产/"){
var buildRow={};
buildRow.rpttypecode="NA";
buildRow.valstr=cell.value;
if(colNumber==3){
buildRow.desc=desc+"/期末余额";
buildRow.position=rowNumber+"-"+1;
}else{
buildRow.desc=desc+"/年初余额";
buildRow.position=rowNumber+"-"+2;
}
insertrows.push(buildRow);
}
}
if(colNumber==5){
desc="负债和所有者权益/"+cell.value;
}
if(colNumber==7 || colNumber==8){
if(desc!="负债和所有者权益/"){
buildRow={};
buildRow.rpttypecode="NA";
buildRow.valstr=cell.value;
if(colNumber==7){
buildRow.desc=desc+"/期末余额";
buildRow.position=rowNumber+"-"+3;
}else{
buildRow.desc=desc+"/年初余额";
buildRow.position=rowNumber+"-"+4;
}
insertrows.push(buildRow);
}
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb)=>{
var sheet = wb.getWorksheet(1);
var insertrows=[];
sheet.eachRow({ includeEmpty: true }, function(row, rowNumber) {
if(rowNumber>=5 && rowNumber<=38){
row.eachCell({ includeEmpty: true }, function(cell, colNumber) {
if(colNumber==1){
if(typeof cell.value=="object"){
desc="";
cell.value.richText.forEach(element => {
desc+=element.text;
});
}else{
desc=cell.value;
}
console.log(desc,">>>>>>>>>>>>>>>");
}
if(colNumber==3 || colNumber==4){
var buildRow={};
buildRow.rpttypecode="NP";
buildRow.valstr=cell.value;
if(colNumber==3){
buildRow.desc=desc+"/本期金额";
buildRow.position=rowNumber+"-"+1;
}else{
buildRow.desc=desc+"/本年累计金额";
buildRow.position=rowNumber+"-"+2;
}
insertrows.push(buildRow);
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb)=>{
var sheet = wb.getWorksheet(1);
var insertrows=[];
sheet.eachRow({ includeEmpty: true }, function(row, rowNumber) {
if(rowNumber>=5 && rowNumber<=36){
row.eachCell({ includeEmpty: true }, function(cell, colNumber) {
if(colNumber==1){
desc="资产/"+cell.value;
console.log(desc,">>>>>>>>>>>>>>>");
}
if(colNumber==3 || colNumber==4){
if(desc!="资产/"){
var buildRow={};
buildRow.rpttypecode="SA";
buildRow.valstr=cell.value;
buildRow.valstr=cell.value;
if(colNumber==3){
buildRow.desc=desc+"/期末余额";
buildRow.position=rowNumber+"-"+1;
}else{
buildRow.desc=desc+"/年初余额";
buildRow.position=rowNumber+"-"+2;
}
insertrows.push(buildRow);
}
}
if(colNumber==5){
desc="负债和所有者权益/"+cell.value;
}
if(colNumber==7 || colNumber==8){
if(desc!="负债和所有者权益/"){
buildRow={};
buildRow.rpttypecode="SA";
buildRow.valstr=cell.value;
if(colNumber==7){
buildRow.desc=desc+"/期末余额";
buildRow.position=rowNumber+"-"+3;
}else{
buildRow.desc=desc+"/年初余额";
buildRow.position=rowNumber+"-"+4;
}
insertrows.push(buildRow);
}
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb)=>{
var sheet = wb.getWorksheet(1);
var insertrows=[];
sheet.eachRow({ includeEmpty: true }, function(row, rowNumber) {
if(rowNumber>=5 && rowNumber<=38){
row.eachCell({ includeEmpty: true }, function(cell, colNumber) {
if(colNumber==1){
if(typeof cell.value=="object"){
desc="";
cell.value.richText.forEach(element => {
desc+=element.text;
});
}else{
desc=cell.value;
}
console.log(desc,">>>>>>>>>>>>>>>");
}
if(colNumber==3 || colNumber==4){
var buildRow={};
buildRow.rpttypecode="SP";
buildRow.valstr=cell.value;
if(colNumber==3){
buildRow.desc=desc+"/本年累计金额";
buildRow.position=rowNumber+"-"+1;
}else{
buildRow.desc=desc+"/本月金额";
buildRow.position=rowNumber+"-"+2;
}
insertrows.push(buildRow);
}
});
}
});
return insertrows;
});
\ No newline at end of file
module.exports=(async (wb)=>{
var sheet = wb.getWorksheet(1);
var insertrows=[];
sheet.eachRow({ includeEmpty: true }, function(row, rowNumber) {
if(rowNumber>=9 && rowNumber<=33){
console.log(rowNumber,">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..");
var rowDesc="";
var cacheStr="";
row.eachCell({ includeEmpty: true }, function(cell, colNumber) {
if(colNumber==2){
if(typeof cell.value=="object"){
cell.value.richText.forEach(element => {
rowDesc+=element.text;
});
}else{
rowDesc+=cell.value;
}
console.log(rowDesc);
cacheStr=rowDesc;
}
if(colNumber==5 || colNumber==6 || colNumber==7 || colNumber==8){
var colPos=1;
var buildRow={};
if(colNumber==5 || colNumber==6){
rowDesc=rowDesc+"/"+"本期数";
}
if(colNumber==7 || colNumber==8){
rowDesc=rowDesc+"/"+"本年累计";
}
if(colNumber==5){
rowDesc+="/"+"货物及劳务";
colPos=1;
}
if(colNumber==6){
rowDesc+="/"+"服务、不动产和无形资产";
colPos=2;
}
if(colNumber==7){
rowDesc+="/"+"货物及劳务";
colPos=3;
}
if(colNumber==8){
rowDesc+="/"+"服务、不动产和无形资产";
colPos=4;
}
buildRow.position=rowNumber+"-"+colPos;
buildRow.desc=rowDesc;
buildRow.valstr=cell.value;
insertrows.push(buildRow);
rowDesc=cacheStr;
}
});
}
});
return insertrows;
});
\ No newline at end of file
var fs = require("fs");
var objsettings = require("../config/objsettings");
var settings = require("../config/settings");
class System {
static declare(ns) {
var ar = ns.split('.');
var root = System;
for (var i = 0, len = ar.length; i < len; ++i) {
var n = ar[i];
if (!root[n]) {
root[n] = {};
root = root[n];
} else {
root = root[n];
}
}
}
static register(key, ClassObj) {
if (System.objTable[key] != null) {
throw new Error("相同key的对象已经存在");
} else {
let obj = new ClassObj();
System.objTable[key] = obj;
}
return System.objTable[key];
}
/**
* 请求返回成功
* @param {*} data 操作成功返回的数据,有值为成功,无值为失败
* @param {*} okmsg 操作成功的描述
* @param {*} req 请求头信息
*/
static getResult(data, opmsg = "操作成功", req) {
return {
status: !data ? -1 : 0,
msg: opmsg,
data: data,
bizmsg: req && req.session && req.session.bizmsg ? req.session.bizmsg : "empty"
};
}
/**
* 请求返回成功
* @param {*} data 操作成功返回的数据
* @param {*} okmsg 操作成功的描述
*/
static getResultSuccess(data, okmsg = "success") {
return {
status: 0,
msg: okmsg,
data: data,
};
}
/**
* 请求返回失败
* @param {*} status 操作失败状态,默认为-1
* @param {*} errmsg 操作失败的描述,默认为fail
* @param {*} data 操作失败返回的数据
*/
static getResultFail(status = -1, errmsg = "fail", data = null) {
return {
status: status,
msg: errmsg,
data: data,
};
}
/**
* 请求处理异常
* @param {*} errmsg 操作失败的描述,默认为fail
* @param {*} data 操作失败返回的数据
*/
static getResultError(errmsg = "fail", data = null) {
return {
status: -200,
msg: errmsg,
data: data,
};
}
static getObject(objpath) {
var pathArray = objpath.split(".");
var packageName = pathArray[0];
var groupName = pathArray[1];
var filename = pathArray[2];
var classpath = "";
if (filename) {
classpath = objsettings[packageName] + "/" + groupName;
} else {
classpath = objsettings[packageName];
filename = groupName;
}
var objabspath = classpath + "/" + filename + ".js";
if (System.objTable[objabspath] != null) {
return System.objTable[objabspath];
} else {
var ClassObj = require(objabspath);
return System.register(objabspath, ClassObj);
}
}
static getUiConfig(appid) {
var configPath = settings.basepath + "/app/base/db/metadata/" + appid + "/index.js";
if (settings.env == "dev") {
delete require.cache[configPath];
}
var configValue = require(configPath);
return configValue;
}
static getUiConfig2(appid) {
var configPath = settings.basepath + "/app/base/db/metadata/index.js";
// if(settings.env=="dev"){
// console.log("delete "+configPath+"cache config");
// delete require.cache[configPath];
// }
delete require.cache[configPath];
var configValue = require(configPath);
return configValue[appid];
}
static get_client_ip(req) {
var ip = req.headers['x-forwarded-for'] ||
req.ip ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
(req.connection.socket && req.connection.socket.remoteAddress) || '';
var x = ip.match(/(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/);
if (x) {
return x[0];
} else {
return "localhost";
}
};
}
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
/*
编码说明,
1000----1999 为请求参数验证和app权限验证
2000----2100 为请求用户信息操作验证,如:注册,登录,获取验证码,修改用户信息,修改用户密码
*/
System.objTable = {};
//访问token失效,请重新获取
System.tokenFail = 1000;
//appKey授权有误
System.appKeyError = 1100;
//应用处于待审核等待启用状态
System.waitAuditApp = 1110;
//获取访问token失败
System.getAppInfoFail = 1130;
//已经存在此用户,注册失败
System.existUserRegFail = 2000;
//用户名或密码错误
System.userLoginFail = 2010;
//用户名错误
System.userNameLoginFail = 2020;
//验证验证码错误
System.verifyVCodeFail = 2030;
//opencode存储的值已经失效
System.verifyOpencodeFail = 2040;
module.exports = System;
// rc=System.getObject("tool.restClient");
// rc.execDownload("http://gsb-public.oss-cn-beijing.aliyuncs.com/netsharp_SPEPdWCBp4xAtzrsiTcZWQ2CXK7aW8Dz.jpg","./a.jpg").then(function(result){
// console.log(result.stderr);
// });
// var oss=System.getObject("tool.oss");
// oss.upfile(key,"/usr/devws/OMC/igirl-api/r3resize.jpg").then(function(result){
// console.log(result);
// }).then(function(){
// oss.downfile(key).then(function(result){
// console.log(result);
// });
// });
// eimage=System.getObject("tool.easyimage");
// eimage.convert("/usr/devws/OMC/igirl-api/r3.jpg","/usr/devws/OMC/igirl-api/r4.pdf").then(function(r,t){
// console.log(r)
// console.log(t)
// }).catch(function(e){
// console.log(e);
// });
//var coss=System.getObject("service.convertoss");
//======================模板嵌套
// tmplTable=attrs=>`
// <table>
// ${attrs.map(attr=>`
// <tr><td>${attr.id}</td><td>${attr.name}</td></tr>
// `).join()}
// </table>
// `
// var data=[
// {id:1,name:'jy'},
// {id:2,name:'tom'},
// ]
// var rtnHtml=tmplTable(data)
// console.log(rtnHtml)
//========根据模板,动态生成javascript表达式,根据模板生成脚本表达式
// let template = `
// <ul>
// <% for(let i=0; i < data.supplies.length; i++) { %>
// <li><%= data.supplies[i] %></li>
// <% } %>
// </ul>
// `;
// //===>通过郑则编译为
// echo('<ul>');
// for(let i=0; i < data.supplies.length; i++) {
// echo('<li>');
// echo(data.supplies[i]);
// echo('</li>');
// };
// echo('</ul>');
// let evalExpr = /<%=(.+?)%>/g;
// let expr = /<%([\s\S]+?)%>/g;
// template = template
// .replace(evalExpr, '`); \n echo( $1 ); \n echo(`')
// .replace(expr, '`); \n $1 \n echo(`');
// console.log(template)
// //生成脚本表达式
// template = 'echo(`' + template + '`);';
// //=========模板编译函数--返回渲染函数
// function compile(template){
// const evalExpr = /<%=(.+?)%>/g;
// const expr = /<%([\s\S]+?)%>/g;
// template = template
// .replace(evalExpr, '`); \n echo( $1 ); \n echo(`')
// .replace(expr, '`); \n $1 \n echo(`');
// template = 'echo(`' + template + '`);';
// let script =
// `(function parse(data){
// let output = "";
// function echo(html){
// output += html;
// }
// ${ template }
// return output;
// })`;
// return script;
// }
var co = require('co');
var OSS = require('ali-oss');
class OSSClient{
constructor(){
this.client=new OSS({
endpoint: 'https://oss-cn-beijing.aliyuncs.com',
accessKeyId: 'LTAIyAUK8AD04P5S',
accessKeySecret: 'DHmRtFlw2Zr3KaRwUFeiu7FWATnmla'
});
this.client.useBucket('gsb-zc');
}
async downfile(key){
var me=this;
var result=await co(function* () {
var result = yield me.client.get(key, '/tmp/'+key);
return result;
});
return result;
}
async upfile(key,filepath){
var me=this;
var result=await co(function* () {
var result = yield me.client.put(key, filepath);
return result;
})
return result;
}
async putBuffer (key,buf) {
try {
var result = await this.client.put(key, buf);
console.log(result);
return result
} catch (e) {
console.log(e);
return null
}
}
}
module.exports=OSSClient;
// var oss=new OSSClient();
// var key="GT.xlsx"
// oss.upfile(key,"./GT.xlsx").then(function(result){
// console.log(result);
// });
// oss.downfile(key).then(function(result){
// console.log(result);
// });
const System = require("../system");
const redis = require("redis");
const settings = require("../../config/settings");
const bluebird = require("bluebird");
bluebird.promisifyAll(redis);
// const logCtl=System.getObject("web.oplogCtl");
class RedisClient {
constructor() {
const redisConfig = settings.redis();
this.client = redis.createClient({
host: redisConfig.host,
port: redisConfig.port,
password: redisConfig.password,
db: redisConfig.db,
retry_strategy: function (options) {
// if (options.error && options.error.code === 'ECONNREFUSED') {
// // End reconnecting on a specific error and flush all commands with
// // a individual error
// return new Error('The server refused the connection');
// }
if (options.total_retry_time > 1000 * 60 * 60) {
// End reconnecting after a specific timeout and flush all commands
// with a individual error
return new Error('Retry time exhausted');
}
if (options.attempt > 10) {
// End reconnecting with built in error
return 10000;
}
// reconnect after
return Math.min(options.attempt * 100, 3000);
}
});
this.client.on("error", function (err) {
console.log("Error " + err);
});
this.subclient = this.client.duplicate();
this.subclient.on("error", function (err) {
console.log("Error " + err);
});
var self = this;
}
async subscribe(channel) {
return this.subclient.subscribeAsync(channel);
}
async unsubscribe(channel) {
//this.chatserver=null;
return this.subclient.unsubscribeAsync(channel);
}
async publish(channel, msg) {
console.log("publish--"+channel + ":" + msg);
return this.client.publishAsync(channel, msg);
}
async notifyConsume(channel, consumetarget,val) {
await this.client.rpush(consumetarget,val);
console.log("publish--"+channel + ":" + consumetarget);
return this.client.publishAsync(channel, consumetarget);
}
async rpush(key, val) {
return this.client.rpushAsync(key, val);
}
async llen(key) {
return this.client.llenAsync(key);
}
async rpushWithEx(key, val, t) {
var p = this.rpush(key, val);
this.client.expire(key, t);
return p;
}
async rpop(key) {
return this.client.rpopAsync(key);
}
async lpop(key) {
return this.client.lpopAsync(key);
}
async lrem(key, val) {
return this.client.lremAsync(key, 1, val);
}
async ltrim(key, s, e) {
return this.client.ltrimAsync(key, s, e);
}
async clearlist(key) {
await this.client.ltrim(key, -1, -1);
await this.client.ltrim(key, 1, -1);
return 0;
}
async flushall() {
console.log("sss");
return this.client.flushallAsync();
}
async keys(p) {
return this.client.keysAsync(p);
}
async set(key, val) {
if (typeof val == "undefined" || typeof key == "undefined") {
console.log("......................cache val undefined");
console.log(key);
return null;
}
return this.client.setAsync(key, val);
}
async setWithEx(key, val, t) {
var p = this.client.setAsync(key, val);
this.client.expire(key, t);
return p;
}
async get(key) {
return this.client.getAsync(key);
}
async delete(key) {
return this.client.delAsync(key);
}
async hmset(key, jsonObj) {
return this.client.hmsetAsync(key, jsonObj);
}
async hmsetWithEx(key, jsonObj, t) {
var p = this.client.hmsetAsync(key, jsonObj);
this.client.expire(key, t);
return p;
}
async hgetall(key) {
return this.client.hgetallAsync(key);
}
async hincrby(key, f, n) {
return this.client.hincrbyAsync(key, f, n);
}
async sadd(key, vals) {
await this.client.saddAsync(key, ...vals);
return this.scard(key);
}
async scard(key) {
return this.client.scardAsync(key);
}
async srem(key, val) {
return this.client.sremAsync(key, val);
}
async sismember(key, val) {
return this.client.sismemberAsync(key, val);
}
async smembers(key) {
return this.client.smembersAsync(key);
}
async exists(key) {
return this.client.existsAsync(key);
}
async incr(key) {
return this.client.incrAsync(key);
}
}
module.exports = RedisClient;
// client.keys('*').then(s=>{
// console.log(s);
// });
// let clients = {};
// clients.watcher = redis.createClient({ ... } );
// clients.alterer = clients.watcher.duplicate();
// client.sadd("h",["ok","jy","ok"]).then(function(r){
// console.log(r);
// });
// client.smembers("h").then(function(r){
// console.log(r);
// });
// client.sismember("h","ok").then(function(r){
// console.log(r);
// });
// console.dir(client);ti.exec( callback )回调函数参数err:返回null或者Array,出错则返回对应命令序列链中发生错误的错误信息,这个数组中最后一个元素是源自exec本身的一个EXECABORT类型的错误
// r.set("hello","oooo").then(function(result){
// console.log(result);
// });
// r.get("hello").then(function(result){
// console.log(result);
// });
// client.hmset("user_1",{name:"jy",age:13}).then(function(r){
// console.log(r);
//
// });
// client.hincrby("user_1","age",2).then(function(r){
// console.log(r);
// setTimeout(function(){
// client.hgetall("user_1").then(function(u){
// console.log(u);
// });
// },3000);
// });
var childproc = require('child_process');
const util = require('util');
const exec = util.promisify(require('child_process').exec);
const querystring = require('querystring');
var settings=require("../../config/settings");
class RestClient{
constructor(){
this.cmdGetPattern = "curl {-G} -k -d '{data}' {url}";
this.cmdPostPattern="curl -k -H 'Content-type: application/json' -d '{data}' '{url}'";
this.cmdPostPatternWithAK="curl -k -H 'Content-type: application/json' -H 'AccessKey:{ak}' -d '{data}' {url}";
this.cmdDownLoadFilePattern="curl -G -o {fileName} {url}";
this.cmdPostPattern2="curl -k -H 'Content-type: application/x-www-form-urlencoded' -d '{data}' {url}";
// form-data形式post data参数类型 md5=2&data=1
this.cmdPostPattern5="curl -k --data '{data}' {url}";
}
FetchGetCmd(subData, url) {
var cmd = this.cmdGetPattern.replace(/\{\-G\}/g, "-G").replace(
/\{data\}/g, subData).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd(subData, url) {
var data=JSON.stringify(subData);
var cmd= this.cmdPostPattern.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmdWithAK(subData, url,acck) {
var data=JSON.stringify(subData);
var cmd= this.cmdPostPatternWithAK.replace(/\{data\}/g,
data).replace(/\{url\}/g, url).replace(/\{ak\}/g,acck);
return cmd;
}
FetchPostCmd2(subData, url) {
var data=subData;
var cmd= this.cmdPostPattern2.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd3(subData, url) {
var data=subData;
var cmd= this.cmdPostPattern3.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchGetCmd3(url) {
var cmd = this.cmdGetPattern3.replace(/\{\-G\}/g, "-G").replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd4(subData, url) {
var data=subData;
var cmd= this.cmdPostPattern4.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchPostCmd5(subData, url) {
var data=subData;
var cmd= this.cmdPostPattern5.replace(/\{data\}/g,
data).replace(/\{url\}/g, url);
return cmd;
}
FetchDownLoadCmd(outfname,url) {
// console.log(this.cmdPattern);
var cmd = this.cmdDownLoadFilePattern.replace(/\{fileName\}/g, outfname).replace(
/\{url\}/g, url);
return cmd;
}
async exec(cmd,options) {
//await后面表达式返回的promise对象,是then的语法糖,await返回then函数的返回值
//异常需要try/catch自己捕获或外部catch捕获
if(options){
const { stdout, stderr } = await exec(cmd,options);
return { stdout, stderr };
}else{
const { stdout, stderr } = await exec(cmd);
return { stdout, stderr };
}
}
async execDownload(url,outfname){
let cmd=this.FetchDownLoadCmd(outfname,url);
var result=await this.exec(cmd);
return result;
}
async execGet(subData, url){
let cmd=this.FetchGetCmd(subData,url);
var result=await this.exec(cmd);
return result;
}
async execGet2(subData, url){
var data=querystring.stringify(subData);
let cmd=this.FetchGetCmd(data,url);
var result=await this.exec(cmd);
return result;
}
async execPost(subData, url){
let cmd=this.FetchPostCmd(subData,url);
var result=await this.exec(cmd,{
maxBuffer: 10000 * 1024
});
return result;
}
async execPostWithAK(subData, url,ak){
let cmd=this.FetchPostCmdWithAK(subData,url,ak);
console.log(cmd);
var result=await this.exec(cmd,{
maxBuffer:1024*1024*15
});
var rtn=result.stdout;
if(rtn){
return JSON.parse(rtn);
}else{
return null;
}
}
async execPost2(subData, url){
let cmd=this.FetchPostCmd2(subData,url);
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
async execPost3(subData, url){
let cmd=this.FetchPostCmd3(subData,url);
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
async execGet3(url){
let cmd=this.FetchGetCmd3(url);
console.log("execGet3-----01");
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
async execPostESignBao(subData, url){
let cmd=this.FetchPostCmd4(subData,url);
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
async execPostForm(subData, url){
let cmd=this.FetchPostCmd5(subData,url);
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
async execCustomPostESignBao(cmd){
console.log(cmd);
var result=await this.exec(cmd);
return result;
}
test(){
console.log("hello");
}
}
module.exports=RestClient;
var RC=require("./redisClient.js");
var client=new RC();
(async ()=>{
// var tohandleurls=pv.split("~");
// var rptDate=tohandleurls[0];
// var rptCode=tohandleurls[1];
// var urldownload=tohandleurls[2];
// var mm="1~2019~GT~https://gsb-zc.oss-cn-beijing.aliyuncs.com/GT.xlsx";
// await client.notifyConsume("k8stask","docurls",
await client.rpush("riskmq",JSON.stringify({
key:new Date().toLocaleString(),
content:59+""
}));
})()
\ No newline at end of file
var settings = {
redis: {
host: "43.247.184.32",
port: 8967,
password: "Gongsibao2018",
db: 15,
},
database: function () {
return {
dbname: "tasks",
user: "write",
password: "write",
config: {
host: '43.247.184.35',
port: 8899,
dialect: 'mysql',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 90000000,
idle: 1000000
},
logging: true,
debug: true,
dialectOptions: {
requestTimeout: 999999,
} //设置MSSQL超时时间
}
};
},
}
module.exports = settings;
var path= require('path');
var basepath=path.normalize(path.join(__dirname, '../..'));
var settings = {
db:path.join(basepath,"app/base/db/impl"),
util:path.join(basepath,"app/base/utils"),
task:path.join(basepath,"app/base/db/task"),
};
module.exports = settings;
var path = require('path');
var ENVINPUT={
DB_HOST:process.env.DB_HOST,
DB_PORT:process.env.DB_PORT,
DB_USER:process.env.DB_USER,
DB_PWD:process.env.DB_PWD,
REDIS_HOST:process.env.REDIS_HOST,
REDIS_PORT:process.env.REDIS_PORT,
REDIS_PWD:process.env.REDIS_PWD,
REDIS_DB:process.env.TASK_REDIS_DB,
DB_NAME:process.env.TASK_DB_NAME,
APP_ENV:process.env.APP_ENV?process.env.APP_ENV:"dev"
};
var settings = {
env:ENVINPUT.APP_ENV,
basepath : path.normalize(path.join(__dirname, '../..')),
fkweb:function(){
if(this.env=="dev"){
return "http://localhost:3003/api/rpt/rptApi/saveRptHistory";
}else {
return "http://fktaxctl-service.chaolai/api/rpt/rptApi/saveRptHistory";
}
},
redis:function(){
if(this.env=="dev"){
console.log("dev.........................................................");
var localsettings=require("./localsettings");
return localsettings.redis;
}else {
return {
host:ENVINPUT.REDIS_HOST,
port:ENVINPUT.REDIS_PORT,
password:ENVINPUT.REDIS_PWD,
db:ENVINPUT.REDIS_DB,
};
}
},
database:function(){
if(this.env=="dev"){
console.log("===========================");
var localsettings=require("./localsettings");
return localsettings.database;
}else{
return {
dbname : ENVINPUT.DB_NAME,
user : ENVINPUT.DB_USER,
password : ENVINPUT.DB_PWD,
config : {
host: ENVINPUT.DB_HOST,
dialect: 'mysql',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 90000000,
idle: 1000000
},
debug:false,
dialectOptions:{
requestTimeout: 999999,
// instanceName:'DEV'
} //设置MSSQL超时时间
},
};
}
}
};
settings.ENVINPUT=ENVINPUT;
module.exports = settings;
const system=require("./app/base/system");
const fs=require("fs");
//数据库支持暂缓支持
// var dbf=system.getObject("db.common.connection");
// con=dbf.getCon();
var taskName = process.env.TASK_NAME;
var params= process.env.TASK_PARAM?process.env.TASK_PARAM:"";
var port=process.env.TASK_PORT;
if(taskName){
var task=system.getObject("task."+taskName);
(async()=>{
await task.doTask(params);
})();
}else{
console.log("not find task,please check ............................");
}
{
"name": "taskexecutor",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@types/geojson": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz",
"integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w=="
},
"@types/node": {
"version": "12.12.14",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz",
"integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA=="
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"cls-bluebird": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz",
"integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=",
"requires": {
"is-bluebird": "^1.0.2",
"shimmer": "^1.1.0"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"requires": {
"ms": "^2.1.1"
}
},
"denque": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
"integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
},
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
},
"dottie": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz",
"integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg=="
},
"double-ended-queue": {
"version": "2.1.0-0",
"resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz",
"integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=",
"dev": true
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"generate-function": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
"integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
"requires": {
"is-property": "^1.0.2"
}
},
"generic-pool": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.5.0.tgz",
"integrity": "sha512-dEkxmX+egB2o4NR80c/q+xzLLzLX+k68/K8xv81XprD+Sk7ZtP14VugeCz+fUwv5FzpWq40pPtAkzPRqT8ka9w=="
},
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"iconv-lite": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz",
"integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"inflection": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz",
"integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY="
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"is-bluebird": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz",
"integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI="
},
"is-property": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ="
},
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"requires": {
"yallist": "^3.0.2"
}
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "^1.1.7"
}
},
"moment": {
"version": "2.24.0",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
},
"moment-timezone": {
"version": "0.5.27",
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.27.tgz",
"integrity": "sha512-EIKQs7h5sAsjhPCqN6ggx6cEbs94GK050254TIJySD1bzoM5JTYDwAU1IoVOeTOL6Gm27kYJ51/uuvq1kIlrbw==",
"requires": {
"moment": ">= 2.9.0"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"mysql2": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.7.0.tgz",
"integrity": "sha512-xTWWQPjP5rcrceZQ7CSTKR/4XIDeH/cRkNH/uzvVGQ7W5c7EJ0dXeJUusk7OKhIoHj7uFKUxDVSCfLIl+jluog==",
"requires": {
"denque": "^1.4.1",
"generate-function": "^2.3.1",
"iconv-lite": "^0.5.0",
"long": "^4.0.0",
"lru-cache": "^5.1.1",
"named-placeholders": "^1.1.2",
"seq-queue": "^0.0.5",
"sqlstring": "^2.3.1"
}
},
"named-placeholders": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz",
"integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==",
"requires": {
"lru-cache": "^4.1.3"
},
"dependencies": {
"lru-cache": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
}
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
}
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
},
"redis": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz",
"integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==",
"dev": true,
"requires": {
"double-ended-queue": "^2.1.0-0",
"redis-commands": "^1.2.0",
"redis-parser": "^2.6.0"
}
},
"redis-commands": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.5.0.tgz",
"integrity": "sha512-6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg==",
"dev": true
},
"redis-parser": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz",
"integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=",
"dev": true
},
"retry-as-promised": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz",
"integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=",
"requires": {
"bluebird": "^3.4.6",
"debug": "^2.6.9"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
},
"seq-queue": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4="
},
"sequelize": {
"version": "4.44.3",
"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.44.3.tgz",
"integrity": "sha512-r2A4EVDKRCcABcZhY4ItvbcosvMJKpQMooxg/S8ouRFrZzqMPQ9O2thOUfgW59q8ZcEa5ccNeqwg15MCciqPMg==",
"requires": {
"bluebird": "^3.5.0",
"cls-bluebird": "^2.1.0",
"debug": "^3.1.0",
"depd": "^1.1.0",
"dottie": "^2.0.0",
"generic-pool": "3.5.0",
"inflection": "1.12.0",
"lodash": "^4.17.1",
"moment": "^2.20.0",
"moment-timezone": "^0.5.14",
"retry-as-promised": "^2.3.2",
"semver": "^5.5.0",
"terraformer-wkt-parser": "^1.1.2",
"toposort-class": "^1.0.1",
"uuid": "^3.2.1",
"validator": "^10.4.0",
"wkx": "^0.4.1"
}
},
"shimmer": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
"integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="
},
"sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
},
"terraformer": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.9.tgz",
"integrity": "sha512-YlmQ1fsMWTkKGDGibCRWgmLzrpDRUr63Q025LJ/taYQ6j1Yb8q9McKF7NBi6ACAyUXO6F/bl9w6v4MY307y5Ag==",
"requires": {
"@types/geojson": "^1.0.0"
}
},
"terraformer-wkt-parser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz",
"integrity": "sha512-QU3iA54St5lF8Za1jg1oj4NYc8sn5tCZ08aNSWDeGzrsaV48eZk1iAVWasxhNspYBoCqdHuoot1pUTUrE1AJ4w==",
"requires": {
"@types/geojson": "^1.0.0",
"terraformer": "~1.0.5"
}
},
"toposort-class": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz",
"integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg="
},
"uuid": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
"integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
},
"validator": {
"version": "10.11.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz",
"integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw=="
},
"wkx": {
"version": "0.4.8",
"resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz",
"integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==",
"requires": {
"@types/node": "*"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
}
}
}
{
"name": "taskexecutor",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"ali-oss": "^6.3.1",
"co": "^4.6.0",
"exceljs": "^3.5.0",
"glob": "^7.1.4",
"mysql2": "^1.5.3",
"sequelize": "^4.37.8"
},
"devDependencies": {
"redis": "^2.8.0"
}
}
大家关注:
任务开发说明(建议任务通过restapi去调用各应用的接口服务)
分支:taskexecutor 开发说明见readme.txt
1、各个应用实现任务的目录 taskexecutor/app/base/db/task
按照各自应用名称建立任务子目录,在子目录内实现任务实现类
需要继承TaskBase
2、TaskBase实现集成如下功能
A、缓存管理器
B、数据库连接器
C、三个方法
beforeTask(params)------前置
subDoTask(params)------任务主要逻辑
postTask(params)---------后置
3、任务部署:支持两种类型的任务(通过配置文件配置,联系上线人员)
3.1:Cron定时任务
3.2 : 非定时任务
A-一次性任务
B-指定固定执行次数任务,依次非并发执行
C-指定并发执行个数任务,保证一个完成即可
D-既有执行次数,又有并发个数
var http = require('http');
var server = http.createServer((req,res) => {
//设置 HTTP 头部,状态码是 200,文件类型是 html,字符集是 utf-8
res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"});
res.write('<h1>Node.js</h1>');
res.end('Hello World\\n');
})
server.listen(3000);//监听端口号是3000的服务器
console.log("end");
\ 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