'use strict'; const balanceUtil = require('./util.js'); module.exports = { /** * 查询状态 * @url admin/finance/balance/sys/getActionLog 前端调用的url参数地址 * @param {String} accNo 账号 * @param {String} reqDate 请求日期,格式:yyyyMMdd * @param {String} reqJournalNo 请求流水号 * @param {String} logId 可选,流水ID,传入后会回写状态 */ main: async (event) => { let { data = {}, util } = event; let { vk } = util; let { accNo, reqDate, reqJournalNo, logId } = data; accNo = String(accNo || '').trim(); reqDate = String(reqDate || '').trim(); reqJournalNo = String(reqJournalNo || '').trim(); logId = String(logId || '').trim(); if (!accNo) { return { code: -1, msg: 'accNo不能为空' }; } if (!reqDate) { return { code: -1, msg: 'reqDate不能为空' }; } if (!/^\d{8}$/.test(reqDate)) { return { code: -1, msg: 'reqDate格式不正确' }; } if (!reqJournalNo) { return { code: -1, msg: 'reqJournalNo不能为空' }; } let res = await balanceUtil.requestActionLog({ vk, accNo, reqDate, reqJournalNo }); if (res && typeof res === 'object' && typeof res.code === 'undefined') { res.code = 0; } const status = balanceUtil.getActionStatus(res); const statusText = balanceUtil.getActionStatusTextByStatus(status); if (status !== null) { let logInfo = null; if (logId) { logInfo = await vk.baseDao.findByWhereJson({ dbName: 'jjx-balance-log', whereJson: { _id: logId } }); } if (!logInfo) { logInfo = await vk.baseDao.findByWhereJson({ dbName: 'jjx-balance-log', whereJson: { srcReqId: reqJournalNo, merchantId: accNo } }); } if (logInfo && logInfo._id) { logId = logInfo._id; const prevStatus = Number(logInfo.status); const nextStatus = Number(status); const updateData = { status: nextStatus }; // 新提现单(balanceDeducted === false):成功时再扣减余额缓存 // 旧提现单无该字段:创建时已扣减,这里只更新状态 const needDeductOnSuccess = logInfo.balanceDeducted === false && prevStatus === 1 && nextStatus === 2; if (needDeductOnSuccess) { const amount = balanceUtil.normalizeAmount(logInfo.amount); await balanceUtil.applyMerchantBalanceDelta({ vk, merchantId: accNo, delta: -amount, lastLogId: logId }); updateData.balanceDeducted = true; } await vk.baseDao.updateById({ dbName: 'jjx-balance-log', id: logId, dataJson: updateData }); } } const responseObjects = balanceUtil.getRemoteResponseObjects(res); if (responseObjects.data && typeof responseObjects.data === 'object' && !Array.isArray(responseObjects.data)) { responseObjects.data.status = status; responseObjects.data.statusText = statusText; responseObjects.data.logId = logId; } else if (res && typeof res === 'object') { res.data = { status, statusText, logId }; } return res; } };