|
|
@@ -19,7 +19,11 @@ const fixFloat = (number, x = 2) => {
|
|
|
*/
|
|
|
const CROSS_TYPE_MAP = { w: -1, l: 1, a: 1, h: 0.5, d: 0, r: 0, v: 0 };
|
|
|
const lossProportion = (sol) => {
|
|
|
- const { cross_type, odds_side_a, odds_side_b, rebate_side_a, rebate_side_b } = sol;
|
|
|
+ const {
|
|
|
+ cross_type, odds_side_a, odds_side_b,
|
|
|
+ rebate_side_a, rebate_side_b,
|
|
|
+ rebate_type_side_a, rebate_type_side_b,
|
|
|
+ } = sol;
|
|
|
const typeList = cross_type.split('_').map(part => {
|
|
|
return part.split('').map(key => CROSS_TYPE_MAP[key]);
|
|
|
}).map(([a, b])=> a * b);
|
|
|
@@ -29,14 +33,24 @@ const lossProportion = (sol) => {
|
|
|
loss_proportion_a = typeList[0] * (1 - rebate_side_a);
|
|
|
}
|
|
|
else {
|
|
|
- loss_proportion_a = typeList[0] * odds_side_a * (1 + rebate_side_a);
|
|
|
+ if (rebate_type_side_a == 1) {
|
|
|
+ loss_proportion_a = typeList[0] * (odds_side_a + rebate_side_a);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ loss_proportion_a = typeList[0] * odds_side_a * (1 + rebate_side_a);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (typeList[1] >= 0) {
|
|
|
loss_proportion_b = typeList[1] * (1 - rebate_side_b);
|
|
|
}
|
|
|
else {
|
|
|
- loss_proportion_b = typeList[1] * odds_side_b * (1 + rebate_side_b);
|
|
|
+ if (rebate_type_side_b == 1) {
|
|
|
+ loss_proportion_b = typeList[1] * (odds_side_b + rebate_side_b);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ loss_proportion_b = typeList[1] * odds_side_b * (1 + rebate_side_b);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return { loss_proportion_a, loss_proportion_b };
|
|
|
@@ -46,13 +60,13 @@ const lossProportion = (sol) => {
|
|
|
* 不同组合的金额计算
|
|
|
*/
|
|
|
const HandicapCalc = function (data) {
|
|
|
- const { i, g, a, b, c, A, B, C, w, l } = data;
|
|
|
+ const { i, g, a, b, c, A, B, C, TA, TB, TC, w, l } = data;
|
|
|
const t = w + l;
|
|
|
- const k1 = a * (1 + A);
|
|
|
+ const k1 = TA == 1 ? a + A : a * (1 + A);
|
|
|
const k2 = 1 - A;
|
|
|
- const k3 = b * (1 + B);
|
|
|
+ const k3 = TB == 1 ? b + B : b * (1 + B);
|
|
|
const k4 = 1 - B;
|
|
|
- const k5 = c * (1 + C);
|
|
|
+ const k5 = TC == 1 ? c + C : c * (1 + C);
|
|
|
const k6 = 1 - C;
|
|
|
|
|
|
const calcTemplate = (handlers) => {
|
|
|
@@ -210,12 +224,15 @@ const calcGoldsWithTarget = (data) => {
|
|
|
rebate_side_a: A,
|
|
|
rebate_side_b: B,
|
|
|
rebate_side_c: C,
|
|
|
+ rebate_type_side_a: TA,
|
|
|
+ rebate_type_side_b: TB,
|
|
|
+ rebate_type_side_c: TC,
|
|
|
inner_index: i,
|
|
|
cross_type: t,
|
|
|
win_target: w,
|
|
|
loss_out: l = 0,
|
|
|
} = data;
|
|
|
- const calc = new HandicapCalc({ i, g, a, b, c, A, B, C, w, l });
|
|
|
+ const calc = new HandicapCalc({ i, g, a, b, c, A, B, C, TA, TB, TC, w, l });
|
|
|
const { x, y, z } = calc?.[t]() ?? {};
|
|
|
return {
|
|
|
gold_side_a: fixFloat(x),
|
|
|
@@ -237,6 +254,9 @@ const calcWinResultWithTarget = (data) => {
|
|
|
rebate_side_a: rebateA1,
|
|
|
rebate_side_b: rebateB1,
|
|
|
rebate_side_c: rebateC1,
|
|
|
+ rebate_type_side_a: rebateTypeA1,
|
|
|
+ rebate_type_side_b: rebateTypeB1,
|
|
|
+ rebate_type_side_c: rebateTypeC1,
|
|
|
inner_index: inner_index_1,
|
|
|
} = sol1;
|
|
|
const {
|
|
|
@@ -272,6 +292,9 @@ const calcWinResultWithTarget = (data) => {
|
|
|
rebate_side_a: rebateA2,
|
|
|
rebate_side_b: rebateB2,
|
|
|
rebate_side_c: rebateC2,
|
|
|
+ rebate_type_side_a: rebateTypeA2,
|
|
|
+ rebate_type_side_b: rebateTypeB2,
|
|
|
+ rebate_type_side_c: rebateTypeC2,
|
|
|
inner_index: inner_index_2,
|
|
|
} = sol2;
|
|
|
const {
|
|
|
@@ -321,6 +344,9 @@ const calcWinResultWithTarget = (data) => {
|
|
|
rebate_side_a: rebateA1,
|
|
|
rebate_side_b: rebateB1,
|
|
|
rebate_side_c: rebateC1,
|
|
|
+ rebate_type_side_a: rebateTypeA1,
|
|
|
+ rebate_type_side_b: rebateTypeB1,
|
|
|
+ rebate_type_side_c: rebateTypeC1,
|
|
|
inner_index: inner_index_1,
|
|
|
},
|
|
|
{
|
|
|
@@ -334,6 +360,9 @@ const calcWinResultWithTarget = (data) => {
|
|
|
rebate_side_a: rebateA2,
|
|
|
rebate_side_b: rebateB2,
|
|
|
rebate_side_c: rebateC2,
|
|
|
+ rebate_type_side_a: rebateTypeA2,
|
|
|
+ rebate_type_side_b: rebateTypeB2,
|
|
|
+ rebate_type_side_c: rebateTypeC2,
|
|
|
inner_index: inner_index_2,
|
|
|
}
|
|
|
],
|
|
|
@@ -439,6 +468,9 @@ const calcTotalProfitWithFixedFirst = (betInfo1, betInfo2, inner_base, inner_reb
|
|
|
rebate_side_a: rebateA1,
|
|
|
rebate_side_b: rebateB1,
|
|
|
rebate_side_c: rebateC1,
|
|
|
+ rebate_type_side_a: rebateTypeA1,
|
|
|
+ rebate_type_side_b: rebateTypeB1,
|
|
|
+ rebate_type_side_c: rebateTypeC1,
|
|
|
} = betInfo1;
|
|
|
|
|
|
let loss_out_1 = 0, inner_ref_value = 0, inner_odds_1 = 0;
|