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",
"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