fix: 提现排除处理中金额,选择报价改为重点提示
可提现额度扣除处理中提现,避免重复提现超总额;收到报价选择供应商时展示重点提示而非服务费提示。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -213,6 +213,64 @@ function getActionStatusTextByStatus(status) {
|
||||
return statusMap[Number(status)] || '';
|
||||
}
|
||||
|
||||
async function applyMerchantBalanceDelta({
|
||||
vk,
|
||||
transaction,
|
||||
merchantId,
|
||||
delta,
|
||||
lastLogId = '',
|
||||
updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
|
||||
}) {
|
||||
const accNo = String(merchantId || '').trim();
|
||||
if (!accNo) {
|
||||
throw new Error('提现账号不能为空');
|
||||
}
|
||||
const changeAmount = normalizeAmount(delta);
|
||||
const balanceRecord = await ensureBalanceRecord({ transaction, vk });
|
||||
const balanceInfoMap = buildBalanceInfoMap(balanceRecord.balanceInfo || {});
|
||||
const currentMerchantInfo = balanceInfoMap[accNo] || {
|
||||
accNo,
|
||||
merchantName: getMerchantLabel(accNo),
|
||||
balance: 0,
|
||||
updateTime: ''
|
||||
};
|
||||
const currentMerchantBalance = normalizeAmount(currentMerchantInfo.balance || 0);
|
||||
const nextMerchantBalance = normalizeAmount(currentMerchantBalance + changeAmount);
|
||||
if (nextMerchantBalance < 0) {
|
||||
throw new Error('余额不足');
|
||||
}
|
||||
const nextBalanceInfoMap = {
|
||||
...balanceInfoMap,
|
||||
[accNo]: {
|
||||
accNo,
|
||||
merchantName: currentMerchantInfo.merchantName || getMerchantLabel(accNo),
|
||||
balance: nextMerchantBalance,
|
||||
updateTime
|
||||
}
|
||||
};
|
||||
const nextTotalBalance = normalizeAmount(Number(balanceRecord.balance || 0) + changeAmount);
|
||||
const dataJson = {
|
||||
balance: nextTotalBalance,
|
||||
balanceInfo: nextBalanceInfoMap,
|
||||
updateTime
|
||||
};
|
||||
if (lastLogId) {
|
||||
dataJson.lastLogId = lastLogId;
|
||||
}
|
||||
await vk.baseDao.updateById({
|
||||
db: transaction,
|
||||
dbName: 'jjx-balance',
|
||||
id: balanceRecord._id,
|
||||
dataJson
|
||||
});
|
||||
return {
|
||||
balance: nextTotalBalance,
|
||||
merchantBalance: nextMerchantBalance,
|
||||
updateTime,
|
||||
balanceInfoMap: nextBalanceInfoMap
|
||||
};
|
||||
}
|
||||
|
||||
async function syncMerchantBalance({
|
||||
vk,
|
||||
accNo,
|
||||
@@ -323,6 +381,49 @@ async function checkBalanceAvailable({ transaction, vk, changeAmount, excludeLog
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计指定商户处理中的提现金额(status=1)
|
||||
*/
|
||||
async function getPendingWithdrawAmount({ transaction, vk, merchantId }) {
|
||||
const accNo = String(merchantId || '').trim();
|
||||
if (!accNo) {
|
||||
return 0;
|
||||
}
|
||||
const res = await vk.baseDao.select({
|
||||
db: transaction,
|
||||
dbName: 'jjx-balance-log',
|
||||
whereJson: {
|
||||
merchantId: accNo,
|
||||
type: 'expense',
|
||||
source: 'withdraw',
|
||||
status: 1
|
||||
},
|
||||
pageIndex: 1,
|
||||
pageSize: 1000,
|
||||
getCount: false
|
||||
});
|
||||
const rows = (res && res.rows) || [];
|
||||
return normalizeAmount(rows.reduce((sum, item) => sum + Number(item.amount || 0), 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* 可提现余额 = 当前余额 - 处理中提现金额
|
||||
*/
|
||||
async function getAvailableWithdrawBalance({ transaction, vk, merchantId, merchantBalance }) {
|
||||
const pendingAmount = await getPendingWithdrawAmount({
|
||||
transaction,
|
||||
vk,
|
||||
merchantId
|
||||
});
|
||||
const balance = normalizeAmount(merchantBalance);
|
||||
const availableBalance = normalizeAmount(Math.max(0, balance - pendingAmount));
|
||||
return {
|
||||
balance,
|
||||
pendingAmount,
|
||||
availableBalance
|
||||
};
|
||||
}
|
||||
|
||||
async function updateBalanceWithDelta({ transaction, vk, delta, lastLogId = '' }) {
|
||||
const balanceInfo = await ensureBalanceRecord({ transaction, vk });
|
||||
const nextBalance = Number((Number(balanceInfo.balance || 0) + Number(delta || 0)).toFixed(2));
|
||||
@@ -372,10 +473,13 @@ module.exports = {
|
||||
parseOrderSet,
|
||||
getActionStatus,
|
||||
getActionStatusTextByStatus,
|
||||
applyMerchantBalanceDelta,
|
||||
syncMerchantBalance,
|
||||
ensureBalanceRecord,
|
||||
recalculateBalance,
|
||||
checkBalanceAvailable,
|
||||
getPendingWithdrawAmount,
|
||||
getAvailableWithdrawBalance,
|
||||
updateBalanceWithDelta,
|
||||
rollbackTransaction
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user