重构:重构企业微信API的任务队列和XML解析器。
- 添加fast-xml-parser并删除xml-js的依赖关系 - 重构TaskQueue并将ChainQueue重命名为TaskQueue - 改进错误日志记录并添加parseOneTask中缺少applyer对象的错误处理 - 修改parseWxApprovalInfo方法以接受starter参数并将starter属性添加到ChainTaskClass中 - 使用TaskStatus.PASS来检查批准是否通过,并在XML中找到SpNo后将任务添加到队列中。
This commit is contained in:
parent
ab782820fe
commit
b14d2cb058
@ -30,6 +30,7 @@
|
||||
"dotenv": "^16.0.3",
|
||||
"ethereumjs-util": "^7.1.5",
|
||||
"fast-rbac": "^1.3.0",
|
||||
"fast-xml-parser": "^4.1.3",
|
||||
"fastify": "^3.9.2",
|
||||
"fastify-cors": "^5.1.0",
|
||||
"fastify-file-upload": "^3.0.0",
|
||||
@ -44,8 +45,7 @@
|
||||
"node-xlsx": "^0.21.0",
|
||||
"redis": "^3.1.2",
|
||||
"tracer": "^1.1.6",
|
||||
"web3": "^1.7.4",
|
||||
"xml-js": "^1.6.11"
|
||||
"web3": "^1.7.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/dotenv": "^8.2.0",
|
||||
|
@ -3,7 +3,9 @@ import { ZError } from 'common/ZError'
|
||||
import { role, router } from 'decorators/router'
|
||||
import { getSignature, decrypt } from '@wecom/crypto'
|
||||
import { excelToJson } from 'utils/excel.util'
|
||||
var convert = require('xml-js')
|
||||
import { XMLParser } from 'fast-xml-parser'
|
||||
import { TaskQueue } from 'queue/task.queue'
|
||||
import { TaskStatus } from 'service/wechatwork.service'
|
||||
|
||||
class WorkFlowController extends BaseController {
|
||||
@role('anon')
|
||||
@ -32,8 +34,16 @@ class WorkFlowController extends BaseController {
|
||||
}
|
||||
const { message, id } = decrypt(aesKey, xml.Encrypt)
|
||||
console.log(message)
|
||||
const jsonData = convert.xml2json(message, {})
|
||||
console.log(jsonData)
|
||||
let parser = new XMLParser()
|
||||
let jsonData = parser.parse(message)
|
||||
let spStatus = jsonData.xml?.ApprovalInfo?.SpStatus
|
||||
if (spStatus === TaskStatus.PASS) {
|
||||
let spNo = jsonData.xml?.ApprovalInfo?.SpNo
|
||||
if (spNo) {
|
||||
new TaskQueue().addTaskToQueue(spNo)
|
||||
}
|
||||
}
|
||||
|
||||
res.send('success')
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,8 @@ export class ChainTaskClass extends BaseModule {
|
||||
public name: string
|
||||
@prop()
|
||||
public desc: string
|
||||
@prop()
|
||||
public starter: string
|
||||
|
||||
@prop({ type: mongoose.Schema.Types.Mixed })
|
||||
public taskData: any
|
||||
@ -103,9 +105,9 @@ export class ChainTaskClass extends BaseModule {
|
||||
/**
|
||||
* 解析企业微信审批信息
|
||||
*/
|
||||
public static async parseWxApprovalInfo({ taskId, name, desc, data }) {
|
||||
public static async parseWxApprovalInfo({ taskId, name, desc, data, starter }) {
|
||||
let maxTryCount = parseInt(process.env.CHAIN_MAX_TRY)
|
||||
let chainTask = await ChainTask.insertOrUpdate({ taskId }, { name, desc, data })
|
||||
let chainTask = await ChainTask.insertOrUpdate({ taskId }, { name, desc, starter, data })
|
||||
let subTasks: any = []
|
||||
if (chainTask.newRecord) {
|
||||
for (let sub of data) {
|
||||
|
@ -1,14 +1,11 @@
|
||||
import { AsyncQueue, createAsyncQueue } from 'common/AsyncQueue'
|
||||
import { singleton } from 'decorators/singleton'
|
||||
import { DocumentType } from '@typegoose/typegoose'
|
||||
import { ReqTaskStatus, RequestTaskClass } from 'models/RequestTask'
|
||||
import { BlockChain } from 'chain/BlockChain'
|
||||
import { ChainTask } from 'models/ChainTask'
|
||||
import logger from 'logger/logger'
|
||||
import { TaskSvr } from 'service/task.service'
|
||||
|
||||
@singleton
|
||||
export class ChainQueue {
|
||||
export class TaskQueue {
|
||||
private queue: AsyncQueue
|
||||
private blockChain: BlockChain
|
||||
|
||||
|
@ -101,11 +101,12 @@ export class WechatWorkService {
|
||||
if (info.status !== TaskStatus.PASS) {
|
||||
throw new Error('approval status error, status: ' + info.status)
|
||||
}
|
||||
const { apply_data } = info
|
||||
const { apply_data, applyer } = info
|
||||
const { contents } = apply_data
|
||||
let name = ''
|
||||
let desc = ''
|
||||
let fileId = ''
|
||||
let starter = applyer.userid
|
||||
for (let content of contents) {
|
||||
let { control, value, title } = content
|
||||
if (control === 'Text' && title.text == '名字') {
|
||||
@ -121,7 +122,7 @@ export class WechatWorkService {
|
||||
}
|
||||
let filePath = await this.fetchFile(fileId)
|
||||
let data = excelToJson(filePath)
|
||||
return { taskId: spNo, name, desc, data }
|
||||
return { taskId: spNo, name, desc, data, starter }
|
||||
}
|
||||
|
||||
/**
|
||||
|
35
yarn.lock
35
yarn.lock
@ -2024,7 +2024,7 @@ fast-safe-stringify@^2.0.8:
|
||||
resolved "https://registry.npmmirror.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
|
||||
integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==
|
||||
|
||||
fast-xml-parser@^4.1.2:
|
||||
fast-xml-parser@^4.1.2, fast-xml-parser@^4.1.3:
|
||||
version "4.1.3"
|
||||
resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.1.3.tgz#0254ad0d4d27f07e6b48254b068c0c137488dd97"
|
||||
integrity sha512-LsNDahCiCcJPe8NO7HijcnukHB24tKbfDDA5IILx9dmW3Frb52lhbeX6MPNUSvyGNfav2VTYpJ/OqkRoVLrh2Q==
|
||||
@ -3952,11 +3952,6 @@ saslprep@^1.0.0:
|
||||
dependencies:
|
||||
sparse-bitfield "^3.0.3"
|
||||
|
||||
sax@^1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||
|
||||
scrypt-js@^3.0.0, scrypt-js@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmmirror.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"
|
||||
@ -4422,26 +4417,7 @@ ts-node-dev@^2.0.0:
|
||||
ts-node "^10.4.0"
|
||||
tsconfig "^7.0.0"
|
||||
|
||||
ts-node@^10.4.0:
|
||||
version "10.9.1"
|
||||
resolved "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
|
||||
integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
|
||||
dependencies:
|
||||
"@cspotcode/source-map-support" "^0.8.0"
|
||||
"@tsconfig/node10" "^1.0.7"
|
||||
"@tsconfig/node12" "^1.0.7"
|
||||
"@tsconfig/node14" "^1.0.0"
|
||||
"@tsconfig/node16" "^1.0.2"
|
||||
acorn "^8.4.1"
|
||||
acorn-walk "^8.1.1"
|
||||
arg "^4.1.0"
|
||||
create-require "^1.1.0"
|
||||
diff "^4.0.1"
|
||||
make-error "^1.1.1"
|
||||
v8-compile-cache-lib "^3.0.1"
|
||||
yn "3.1.1"
|
||||
|
||||
ts-node@^10.9.1:
|
||||
ts-node@^10.4.0, ts-node@^10.9.1:
|
||||
version "10.9.1"
|
||||
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
|
||||
integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
|
||||
@ -5054,13 +5030,6 @@ xlsx@^0.17.4:
|
||||
wmf "~1.0.1"
|
||||
word "~0.3.0"
|
||||
|
||||
xml-js@^1.6.11:
|
||||
version "1.6.11"
|
||||
resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9"
|
||||
integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==
|
||||
dependencies:
|
||||
sax "^1.2.4"
|
||||
|
||||
xtend@^4.0.0, xtend@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||
|
Loading…
x
Reference in New Issue
Block a user