refund settlement判断修正

This commit is contained in:
lxy 2025-07-21 19:24:10 +08:00
parent 52e95b487b
commit 8ac886cb15
3 changed files with 54 additions and 15 deletions

View File

@ -90,14 +90,27 @@ async function startRefunding(context, data) {
assert(order);
// 对settlePlan检查
// 未结算的settlePlan的金额总和 = order.paid - order.refunded - order.settled - refunded.price
const { settlePlan$order: settlePlans, paid, refunded, settled } = order;
const { settlePlan$order: settlePlans, paid, refunded, settled, id: orderId } = order;
let settlePlanAmount = 0;
settlePlans.forEach((settlePlan) => settlePlanAmount += settlePlan.price);
const allowPlanPrice = paid - refunded - settled - data.price;
const allowPlanPrice = Math.max((paid - refunded - settled - data.price), 0);
if (settlePlanAmount > allowPlanPrice) {
throw new settlePlanExceed(settlePlanAmount - allowPlanPrice);
}
const settlements = settlePlans?.map((plan) => plan.settlement$plan).flat();
const settledSettlements = await context.select('settlement', {
data: {
id: 1,
accountId: 1,
price: 1,
iState: 1,
},
filter: {
iState: 'settled',
plan: {
orderId,
}
}
}, { forUpdate: true });
const { accountOper$entity: opers, } = data;
// 对opers检查
if (order.settled === (order.paid - order.refunded)) {
@ -111,7 +124,7 @@ async function startRefunding(context, data) {
const { type, totalPlus, availPlus, accountId } = data;
assert(type === 'refund');
assert(totalPlus === availPlus);
const settlement = settlements?.find((ele) => ele?.accountId === accountId);
const settlement = settledSettlements?.find((ele) => ele?.accountId === accountId);
assert(!!settlement, '请从订单分账的相关账户中选择订单退款的account来源');
amount += -totalPlus;
});
@ -148,7 +161,7 @@ async function startRefunding(context, data) {
const { type, totalPlus, availPlus, accountId } = data;
assert(type === 'refund');
assert(totalPlus === availPlus);
const settlement = settlements?.find((ele) => ele?.accountId === accountId);
const settlement = settledSettlements?.find((ele) => ele?.accountId === accountId);
assert(!!settlement, '请从订单分账的相关账户中选择订单退款的account来源');
opersPrice += -totalPlus;
});

View File

@ -93,14 +93,27 @@ async function startRefunding(context, data) {
(0, assert_1.default)(order);
// 对settlePlan检查
// 未结算的settlePlan的金额总和 = order.paid - order.refunded - order.settled - refunded.price
const { settlePlan$order: settlePlans, paid, refunded, settled } = order;
const { settlePlan$order: settlePlans, paid, refunded, settled, id: orderId } = order;
let settlePlanAmount = 0;
settlePlans.forEach((settlePlan) => settlePlanAmount += settlePlan.price);
const allowPlanPrice = paid - refunded - settled - data.price;
const allowPlanPrice = Math.max((paid - refunded - settled - data.price), 0);
if (settlePlanAmount > allowPlanPrice) {
throw new Exception_1.settlePlanExceed(settlePlanAmount - allowPlanPrice);
}
const settlements = settlePlans?.map((plan) => plan.settlement$plan).flat();
const settledSettlements = await context.select('settlement', {
data: {
id: 1,
accountId: 1,
price: 1,
iState: 1,
},
filter: {
iState: 'settled',
plan: {
orderId,
}
}
}, { forUpdate: true });
const { accountOper$entity: opers, } = data;
// 对opers检查
if (order.settled === (order.paid - order.refunded)) {
@ -114,7 +127,7 @@ async function startRefunding(context, data) {
const { type, totalPlus, availPlus, accountId } = data;
(0, assert_1.default)(type === 'refund');
(0, assert_1.default)(totalPlus === availPlus);
const settlement = settlements?.find((ele) => ele?.accountId === accountId);
const settlement = settledSettlements?.find((ele) => ele?.accountId === accountId);
(0, assert_1.default)(!!settlement, '请从订单分账的相关账户中选择订单退款的account来源');
amount += -totalPlus;
});
@ -151,7 +164,7 @@ async function startRefunding(context, data) {
const { type, totalPlus, availPlus, accountId } = data;
(0, assert_1.default)(type === 'refund');
(0, assert_1.default)(totalPlus === availPlus);
const settlement = settlements?.find((ele) => ele?.accountId === accountId);
const settlement = settledSettlements?.find((ele) => ele?.accountId === accountId);
(0, assert_1.default)(!!settlement, '请从订单分账的相关账户中选择订单退款的account来源');
opersPrice += -totalPlus;
});

View File

@ -96,16 +96,29 @@ async function startRefunding(context: BRC, data: EntityDict['refund']['CreateOp
assert(order);
// 对settlePlan检查
// 未结算的settlePlan的金额总和 = order.paid - order.refunded - order.settled - refunded.price
const { settlePlan$order: settlePlans, paid, refunded, settled } = order;
const { settlePlan$order: settlePlans, paid, refunded, settled, id: orderId } = order;
let settlePlanAmount = 0;
settlePlans!.forEach(
(settlePlan) => settlePlanAmount += settlePlan.price
);
const allowPlanPrice = paid - refunded - settled - data.price!
const allowPlanPrice = Math.max((paid - refunded - settled - data.price!), 0);
if (settlePlanAmount > allowPlanPrice) {
throw new settlePlanExceed(settlePlanAmount - allowPlanPrice);
}
const settlements = settlePlans?.map((plan) => plan.settlement$plan).flat();
const settledSettlements = await context.select('settlement', {
data: {
id: 1,
accountId: 1,
price: 1,
iState: 1,
},
filter: {
iState: 'settled',
plan: {
orderId,
}
}
}, { forUpdate: true });
const { accountOper$entity: opers, } = data;
// 对opers检查
@ -122,7 +135,7 @@ async function startRefunding(context: BRC, data: EntityDict['refund']['CreateOp
assert(type === 'refund');
assert(totalPlus === availPlus);
const settlement = settlements?.find((ele) => ele?.accountId === accountId);
const settlement = settledSettlements?.find((ele) => ele?.accountId === accountId);
assert(!!settlement, '请从订单分账的相关账户中选择订单退款的account来源');
amount += -totalPlus!;
@ -162,7 +175,7 @@ async function startRefunding(context: BRC, data: EntityDict['refund']['CreateOp
assert(type === 'refund');
assert(totalPlus === availPlus);
const settlement = settlements?.find((ele) => ele?.accountId === accountId);
const settlement = settledSettlements?.find((ele) => ele?.accountId === accountId);
assert(!!settlement, '请从订单分账的相关账户中选择订单退款的account来源');
opersPrice += -totalPlus!;