feat: 补齐客户端/管理端服务模块与数据库 schema,完善登录短信、法大大签署及公共函数
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
'use strict';
|
||||
const dayjs = require('dayjs');
|
||||
const balanceUtil = require('./util.js');
|
||||
const merchantMap = balanceUtil.MERCHANT_MAP;
|
||||
|
||||
module.exports = {
|
||||
/**
|
||||
* 提现
|
||||
* @url admin/finance/balance/sys/withdraw 前端调用的url参数地址
|
||||
*/
|
||||
main: async (event) => {
|
||||
let { data = {}, userInfo, util } = event;
|
||||
let { vk } = util;
|
||||
const transaction = await vk.baseDao.startTransaction();
|
||||
|
||||
try {
|
||||
const merchantId = String(data.merchantId || '').trim();
|
||||
if (!merchantMap[merchantId]) {
|
||||
throw new Error('提现商户不正确');
|
||||
}
|
||||
const amount = balanceUtil.normalizeAmount(data.amount);
|
||||
if (amount <= 0) {
|
||||
throw new Error('提现金额必须大于0');
|
||||
}
|
||||
const balanceRecord = await balanceUtil.ensureBalanceRecord({
|
||||
transaction,
|
||||
vk
|
||||
});
|
||||
const balanceInfoMap = balanceUtil.buildBalanceInfoMap(balanceRecord.balanceInfo || {});
|
||||
const merchantBalanceInfo = balanceInfoMap[merchantId] || {
|
||||
accNo: merchantId,
|
||||
merchantName: merchantMap[merchantId],
|
||||
balance: 0,
|
||||
updateTime: ''
|
||||
};
|
||||
const merchantBalance = balanceUtil.normalizeAmount(merchantBalanceInfo.balance || 0);
|
||||
if (merchantBalance <= 0) {
|
||||
throw new Error('当前企业余额小于等于0,无法提现');
|
||||
}
|
||||
if (amount > merchantBalance) {
|
||||
throw new Error('提现金额不能大于当前企业余额');
|
||||
}
|
||||
const description = String(data.description || '').trim() || `余额提现-${merchantMap[merchantId]}`;
|
||||
|
||||
const requestRes = await vk.request({
|
||||
method: "POST",
|
||||
url: 'http://jjx-union-pay.gxwebsoft.com/api/union-pay-jjx/transByAmount',
|
||||
header: {
|
||||
"content-type": "application/json; charset=utf-8",
|
||||
},
|
||||
data: {
|
||||
accNo: merchantId,
|
||||
amount
|
||||
},
|
||||
timeout: 60000
|
||||
});
|
||||
console.log('requestRes', requestRes)
|
||||
const code = Number(requestRes && requestRes.code);
|
||||
const success = requestRes && (
|
||||
code === 0 ||
|
||||
code === 200 ||
|
||||
requestRes.success === true ||
|
||||
(typeof requestRes.code === 'undefined' && !requestRes.msg && !requestRes.message)
|
||||
);
|
||||
if (!success) {
|
||||
throw new Error(
|
||||
(requestRes && (requestRes.msg || requestRes.message)) ||
|
||||
(requestRes && requestRes.content && (requestRes.content.msg || requestRes.content.message)) ||
|
||||
'提现失败'
|
||||
);
|
||||
}
|
||||
|
||||
const logData = {
|
||||
description,
|
||||
amount,
|
||||
type: 'expense',
|
||||
logTime: Date.now(),
|
||||
operatorId: userInfo && userInfo.uid ? userInfo.uid : '',
|
||||
source: 'withdraw',
|
||||
merchantId,
|
||||
merchantName: merchantMap[merchantId],
|
||||
srcReqId: requestRes.srcReqId,
|
||||
status: 1
|
||||
};
|
||||
const changeAmount = balanceUtil.buildBalanceChange(logData);
|
||||
|
||||
await balanceUtil.checkBalanceAvailable({
|
||||
transaction,
|
||||
vk,
|
||||
changeAmount
|
||||
});
|
||||
|
||||
const addRes = await vk.baseDao.add({
|
||||
db: transaction,
|
||||
dbName: 'jjx-balance-log',
|
||||
dataJson: logData
|
||||
});
|
||||
|
||||
const updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
|
||||
const nextMerchantBalance = Number((merchantBalance + changeAmount).toFixed(2));
|
||||
const nextBalance = Number((Number(balanceRecord.balance || 0) + changeAmount).toFixed(2));
|
||||
await vk.baseDao.updateById({
|
||||
db: transaction,
|
||||
dbName: 'jjx-balance',
|
||||
id: balanceRecord._id,
|
||||
dataJson: {
|
||||
balance: nextBalance,
|
||||
lastLogId: addRes.id,
|
||||
updateTime,
|
||||
balanceInfo: {
|
||||
...balanceInfoMap,
|
||||
[merchantId]: {
|
||||
accNo: merchantId,
|
||||
merchantName: merchantMap[merchantId],
|
||||
balance: nextMerchantBalance,
|
||||
updateTime
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
await transaction.commit();
|
||||
return {
|
||||
code: 0,
|
||||
msg: '',
|
||||
data: {
|
||||
balance: nextBalance,
|
||||
merchantBalance: nextMerchantBalance
|
||||
}
|
||||
};
|
||||
} catch (err) {
|
||||
return await balanceUtil.rollbackTransaction({
|
||||
transaction,
|
||||
err
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user