diff --git a/src/models/ChainTask.ts b/src/models/ChainTask.ts index 04b545c..f4629c2 100644 --- a/src/models/ChainTask.ts +++ b/src/models/ChainTask.ts @@ -32,8 +32,12 @@ export class ChainTaskClass extends BaseModule { public name: string @prop() public desc: string + // 谁发起的 @prop() public starter: string + // 发起人的名称 + @prop() + public starterName: string @prop({ type: mongoose.Schema.Types.Mixed }) public taskData: any @@ -128,9 +132,9 @@ export class ChainTaskClass extends BaseModule { /** * 解析企业微信审批信息 */ - public static async parseWxApprovalInfo({ taskId, name, desc, data, starter }) { + public static async parseWxApprovalInfo({ taskId, name, desc, data, starter, starterName }) { let maxTryCount = parseInt(process.env.CHAIN_MAX_TRY) - let chainTask = await ChainTask.insertOrUpdate({ taskId }, { name, desc, starter, data }) + let chainTask = await ChainTask.insertOrUpdate({ taskId }, { name, desc, starter, starterName, data }) let subTasks: any = [] if (chainTask.newRecord) { let subTask diff --git a/src/service/wechatwork.service.ts b/src/service/wechatwork.service.ts index 1e05f82..b455639 100644 --- a/src/service/wechatwork.service.ts +++ b/src/service/wechatwork.service.ts @@ -90,6 +90,108 @@ export class WechatWorkService { }) return response } + /** + * 获取用户信息 + * @param userid + */ + public async fetchUserInfo(userid: string) { + const url = `${WX_API_HOST}/cgi-bin/user/get` + const access_token = await this.getAccessToken() + let config: AxiosRequestConfig = { + method: 'get', + url, + params: { + access_token, + userid, + }, + } + let response = await axios.request(config).then(response => { + return response.data + }) + if (response.errcode) { + throw new Error(response.errmsg) + } + return response + } + + /** + * 发起一个审核, 用于流程结束时的通知 + * @param userid + * @returns + */ + public async beginApproval({ + userid, + title, + desc, + info, + }: { + userid: string + title: string + desc: string + info: string + }) { + const url = `${WX_API_HOST}/cgi-bin/oa/applyevent` + const access_token = await this.getAccessToken() + let config: AxiosRequestConfig = { + method: 'post', + url, + params: { + access_token, + }, + data: { + creator_userid: userid, + template_id: process.env.WX_NOTIFY_TEMPLATE_ID, + use_template_approver: 0, + approver: [ + { + userid: userid, + attr: 1, + }, + ], + apply_data: { + contents: [ + { + control: 'Text', + id: process.env.WX_NOTIFY_TEXT_ID, + value: { + text: title, + }, + }, + ], + }, + summary_list: [ + { + summary_info: [ + { + text: title, + lang: 'zh_CN', + }, + ], + }, + { + summary_info: [ + { + text: desc, + lang: 'zh_CN', + }, + ], + }, + { + summary_info: [ + { + text: info, + lang: 'zh_CN', + }, + ], + }, + ], + }, + } + let response = await axios.request(config).then(response => { + return response.data + }) + return response + } /** * 调用企业微信审核详情接口, 并处理返回数据 * @param spNo 审批单号 @@ -122,9 +224,11 @@ export class WechatWorkService { if (!fileId) { throw new Error('no file') } + let userInfo = await this.fetchUserInfo(starter) + let starterName = userInfo.name let filePath = await this.fetchFile(fileId) let data = excelToJson(filePath) - return { taskId: spNo, name, desc, data, starter } + return { taskId: spNo, name, desc, data, starter, starterName } } /**