q-koa 12.7.1 → 12.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -73,27 +73,23 @@ exports.upload = async (ctx) => {
73
73
  return ctx.SUCCESS(responseData)
74
74
  }
75
75
 
76
- exports.oss_upload = async (ctx) => {
76
+ exports.oss_upload = async (ctx, _data) => {
77
77
  const { app } = getAppByCtx(ctx)
78
78
 
79
- if (
80
- !(ctx.request.files && ctx.request.files.file) &&
81
- !(ctx.request.body.url && ctx.request.body.filename)
82
- ) {
83
- ctx.status = 500
84
- ctx.ERROR('请选择上传文件')
79
+ if (!_data) {
80
+ if (
81
+ !(ctx.request.files && ctx.request.files.file) &&
82
+ !(ctx.request.body.url && ctx.request.body.filename)
83
+ ) {
84
+ ctx.status = 500
85
+ ctx.ERROR('请选择上传文件')
86
+ }
85
87
  }
86
88
 
87
89
  const appConfig = getConfig(app)
88
90
 
89
- const {
90
- accessKeyId,
91
- accessKeySecret,
92
- bucket,
93
- region,
94
- cdn_host,
95
- oss_host,
96
- } = await appConfig.getObject('oss')
91
+ const { accessKeyId, accessKeySecret, bucket, region, cdn_host, oss_host } =
92
+ await appConfig.getObject('oss')
97
93
 
98
94
  if (!(accessKeyId && accessKeySecret && bucket && region)) {
99
95
  throw new Error('没有配置oss设置')
@@ -108,6 +104,7 @@ exports.oss_upload = async (ctx) => {
108
104
  })
109
105
  let fileName
110
106
  let imageData
107
+
111
108
  if (ctx.request.files && ctx.request.files.file) {
112
109
  const { file } = ctx.request.files
113
110
  fileName = `${String(
@@ -115,32 +112,45 @@ exports.oss_upload = async (ctx) => {
115
112
  )}.${file.name.split('.')[file.name.split('.').length - 1]}`
116
113
  imageData = file.path
117
114
  } else {
118
- const { url: imageUrl, filename: imageFileName } = ctx.request.body
119
- fileName = imageFileName
120
- const formatUrl = imageUrl.startsWith('//') ? 'http:' + imageUrl : imageUrl
121
- try {
122
- imageData = await axios
123
- .get(formatUrl, {
124
- responseType: 'arraybuffer',
125
- })
126
- .then((res) => res.data)
127
- } catch (e) {
128
- ctx.status = 500
129
- ctx.ERROR('请求图片错误')
115
+ if (_data) {
116
+ fileName = _data.fileName
117
+ imageData = _data.buffer
118
+ } else {
119
+ const { url: imageUrl, filename: imageFileName } = ctx.request.body
120
+ fileName = imageFileName
121
+ const formatUrl = imageUrl.startsWith('//')
122
+ ? 'http:' + imageUrl
123
+ : imageUrl
124
+ try {
125
+ imageData = await axios
126
+ .get(formatUrl, {
127
+ responseType: 'arraybuffer',
128
+ })
129
+ .then((res) => res.data)
130
+ } catch (e) {
131
+ ctx.status = 500
132
+ ctx.ERROR('请求图片错误')
133
+ }
130
134
  }
131
135
  }
132
136
  const result = await client.put(fileName, imageData)
133
137
  if (result.res && result.res.status === 200) {
134
138
  if (oss_host && cdn_host) {
135
139
  const url = result.url.replace(oss_host, cdn_host)
136
- return ctx.SUCCESS({
140
+ ctx.SUCCESS({
137
141
  url,
138
142
  })
143
+ return {
144
+ url,
145
+ }
139
146
  } else {
140
147
  const url = result.url
141
- return ctx.SUCCESS({
148
+ ctx.SUCCESS({
142
149
  url,
143
150
  })
151
+ return {
152
+ url,
153
+ }
144
154
  }
145
155
  } else {
146
156
  throw new Error(result.res.statusMessage)
@@ -1,4 +1,7 @@
1
1
  const axios = require('axios')
2
+ const XLSX = require('xlsx')
3
+ const moment = require('moment')
4
+
2
5
  exports.gpt = async ({ content }) => {
3
6
  let result = ''
4
7
  let messages = [
@@ -35,3 +38,17 @@ exports.gpt = async ({ content }) => {
35
38
 
36
39
  return result
37
40
  }
41
+
42
+ exports.formatXLSX = ({ header, data, fileName: _fileName }) => {
43
+ const fileName = `${_fileName || moment().format('YYYYMMDDHHmmss') + ''}.xlsx`
44
+ const workbook = XLSX.utils.book_new()
45
+ const worksheetData = [header, ...data]
46
+ const worksheet = XLSX.utils.aoa_to_sheet(worksheetData)
47
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
48
+ const buffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' })
49
+
50
+ return {
51
+ fileName,
52
+ buffer,
53
+ }
54
+ }
@@ -1215,6 +1215,20 @@ exports.url_link = async (ctx) => {
1215
1215
  ctx.SUCCESS(result)
1216
1216
  }
1217
1217
 
1218
+ exports.short_link = async (ctx) => {
1219
+ const { app } = getAppByCtx(ctx)
1220
+
1221
+ const { page, scene, config = 'weixin_mp' } = ctx.request.body
1222
+ if (!app.service.weixin) throw new Error(`weixin可能没有service.js`)
1223
+ const result = await app.service.weixin.short_link({
1224
+ app,
1225
+ page,
1226
+ scene,
1227
+ config,
1228
+ })
1229
+ ctx.SUCCESS(result)
1230
+ }
1231
+
1218
1232
  exports.url_scheme = async (ctx) => {
1219
1233
  const { app } = getAppByCtx(ctx)
1220
1234
 
@@ -103,7 +103,6 @@ exports.refund = async ({
103
103
  }/${appName}/weixin/refund_notify/${pay_config}`,
104
104
  }
105
105
 
106
- console.log(data)
107
106
  const { result_code, err_code_des, ...restData } = isPem
108
107
  ? await wxpay.refund(data)
109
108
  : await payObj.refund(data)
@@ -198,7 +197,6 @@ exports.refundOnly = async ({
198
197
  out_refund_no,
199
198
  }
200
199
 
201
- console.log(data)
202
200
  const { result_code, err_code_des, ...restData } = (await isPem)
203
201
  ? await wxpay.refund(data)
204
202
  : await payObj.refund(data)
@@ -452,6 +450,21 @@ exports.url_link = async ({ app, page, scene, config = 'weixin_mp' }) => {
452
450
  return result
453
451
  }
454
452
 
453
+ exports.short_link = async ({ app, page, scene, config = 'weixin_mp' }) => {
454
+ const appConfig = getConfig(app)
455
+ const { app_id, app_secrect } = await appConfig.getObject(config)
456
+ const weixinMp = new WeixinMp({
457
+ appid: app_id,
458
+ secrect: app_secrect,
459
+ })
460
+ weixinMp.init()
461
+ const result = await weixinMp.createShortLink({
462
+ page,
463
+ scene,
464
+ })
465
+ return result
466
+ }
467
+
455
468
  exports.user_enter_tempsession = async ({ app, result }) => {
456
469
  console.log('user_enter_tempsession', result)
457
470
  }
@@ -12,6 +12,8 @@ const createUrlschemeUrl =
12
12
  'https://api.weixin.qq.com/wxa/generatescheme?access_token=%s'
13
13
  const createUrlLinkUrl =
14
14
  'https://api.weixin.qq.com/wxa/generate_urllink?access_token=%s'
15
+ const createShortLinkUrl =
16
+ 'https://api.weixin.qq.com/wxa/genwxashortlink?access_token=%s'
15
17
  const sendMessageUrl =
16
18
  'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=%s'
17
19
  const handleMessageUrl =
@@ -367,6 +369,34 @@ module.exports = class Singleton {
367
369
  return result.url_link
368
370
  }
369
371
 
372
+ async createShortLink(options) {
373
+ const { page, scene, ...rest } = options
374
+ const access_token = await this.getAccessToken()
375
+ const url = util.format(createShortLinkUrl, access_token)
376
+ const query = options.scene
377
+ ? Object.keys(options.scene)
378
+ .map((item) => `${item}=${options.scene[item]}`)
379
+ .join('&')
380
+ : ''
381
+ const payLoad = {
382
+ ...rest,
383
+ page_url: options.page + (query ? '?' + query : ''),
384
+ page_title: options.page_title,
385
+ is_permanent: true,
386
+ }
387
+
388
+ const result = await axios.post(url, payLoad).then((res) => res.data)
389
+
390
+ if (result.errcode) {
391
+ if (result.errcode === 40001) {
392
+ cache.reset()
393
+ return await this.createShortLink(options)
394
+ }
395
+ throw new Error(`${result.errcode};${result.errmsg}`)
396
+ }
397
+ return result.link
398
+ }
399
+
370
400
  async createUrlscheme(options) {
371
401
  const { page, scene, ...rest } = options
372
402
  const access_token = await this.getAccessToken()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "q-koa",
3
- "version": "12.7.1",
3
+ "version": "12.7.4",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -59,7 +59,8 @@
59
59
  "sha1": "^1.1.1",
60
60
  "redis": "^4.0.3",
61
61
  "yly-nodejs-sdk": "^1.0.2",
62
- "vm2": "^3.9.19"
62
+ "vm2": "^3.9.19",
63
+ "xlsx": "^0.18.5"
63
64
  },
64
65
  "devDependencies": {
65
66
  "eslint": "^4.19.1",