|
|
@@ -4,7 +4,7 @@ const Cache = require('../libs/cache');
|
|
|
const Setting = require('./Setting');
|
|
|
const { eventSolutions } = require('../triangle/eventSolutions');
|
|
|
const { getPassableEvents, eventsCombination } = require('../triangle/trangleCalc');
|
|
|
-const { calcTotalProfit, calcTotalProfitWithFixedFirst } = require('../triangle/totalProfitCalc');
|
|
|
+const { calcTotalProfit, calcTotalProfitWithFixedFirst, getFirstInfo } = require('../triangle/totalProfitCalc');
|
|
|
const { getSetting, updateSetting } = require('../triangle/settings');
|
|
|
|
|
|
const fs = require('fs');
|
|
|
@@ -729,10 +729,6 @@ const getPCData = (id) => {
|
|
|
* @returns {object[]}
|
|
|
*/
|
|
|
const getGamesRelation = ({ mk=-1, ids, listEvents=false, listPC=false } = {}) => {
|
|
|
- let idsSet = null;
|
|
|
- if (ids?.length) {
|
|
|
- idsSet = new Set(ids);
|
|
|
- }
|
|
|
|
|
|
let relations;
|
|
|
if (ids?.length) {
|
|
|
@@ -742,12 +738,7 @@ const getGamesRelation = ({ mk=-1, ids, listEvents=false, listPC=false } = {}) =
|
|
|
relations = Object.values(GAMES.Relations);
|
|
|
}
|
|
|
|
|
|
- relations = relations.filter(item => {
|
|
|
- if (idsSet && !idsSet.has(item.id)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- return mk == -1 || item.mk == mk;
|
|
|
- }).sort((a, b) => a.timestamp - b.timestamp);
|
|
|
+ relations = relations.filter(item => mk == -1 || item.mk == mk).sort((a, b) => a.timestamp - b.timestamp);
|
|
|
|
|
|
if (listEvents && !listPC) {
|
|
|
return relations;
|
|
|
@@ -1255,28 +1246,28 @@ const getTotalProfitWithBetInfo = async (betInfo1, betInfo2, fixed=false, inner_
|
|
|
/**
|
|
|
* 计算补单综合利润
|
|
|
*/
|
|
|
-const getTotalReplacement = async (event_id, inner_base, inner_rebate, inner_ior, inner_odds, outer_golds) => {
|
|
|
+const getTotalReplacement = async (event_id, inner_rebate, inner_ior, inner_odds, pre_bet_info) => {
|
|
|
// return Promise.resolve();
|
|
|
+ Logs.out('getTotalReplacement', event_id, inner_ior, inner_odds, pre_bet_info);
|
|
|
if (!event_id) {
|
|
|
return Promise.reject(new Error('event_id 无效'));
|
|
|
}
|
|
|
if (!inner_ior) {
|
|
|
return Promise.reject(new Error('inner_ior 无效'));
|
|
|
}
|
|
|
- if (inner_odds?.length != 2 || inner_odds.some(item => typeof(item) !== 'number')) {
|
|
|
+ if (typeof(inner_odds) !== 'number') {
|
|
|
return Promise.reject(new Error('inner_odds 无效'));
|
|
|
}
|
|
|
- if (!outer_golds?.length || outer_golds.some(item => typeof(item?.gold) !== 'number' || typeof(item?.rebate) !== 'number')) {
|
|
|
- return Promise.reject(new Error('outer_golds 无效'));
|
|
|
+ if (!pre_bet_info || typeof(pre_bet_info) !== 'object') {
|
|
|
+ return Promise.reject(new Error('pre_bet_info 无效'));
|
|
|
}
|
|
|
|
|
|
- const { innerDefaultAmount, innerRebateRatio } = getSetting();
|
|
|
- inner_base = typeof(inner_base) != 'undefined' ? +inner_base : innerDefaultAmount;
|
|
|
+ const { loss_out, inner_ref_value: inner_base, inner_odds: inner_odds_first } = getFirstInfo(pre_bet_info);
|
|
|
+
|
|
|
+ const { innerRebateRatio } = getSetting();
|
|
|
inner_rebate = typeof(inner_rebate) != 'undefined' ? +inner_rebate : fixFloat(innerRebateRatio / 100, 3);
|
|
|
|
|
|
- const inner_odds_value = fixFloat(inner_odds[0] * inner_odds[1], 3);
|
|
|
- const outer_golds_rebate = outer_golds.map(item => item.gold * item.rebate).reduce((sum, rebate) => sum + rebate, 0);
|
|
|
- const outer_golds_loss = outer_golds.map(item => item.gold).reduce((sum, gold) => sum + gold, 0) - outer_golds_rebate;
|
|
|
+ const inner_odds_value = fixFloat(inner_odds * (inner_odds_first+1), 3);
|
|
|
|
|
|
const relation = getGamesRelation({ ids: [event_id], listEvents: true, listPC: true }).map(item => {
|
|
|
const { rel, ...relationInfo } = item;
|
|
|
@@ -1298,10 +1289,10 @@ const getTotalReplacement = async (event_id, inner_base, inner_rebate, inner_ior
|
|
|
const { sid, info, sol, ...solutionInfo } = solution;
|
|
|
const { win_profit_rate, win_average_rate, ...solInfo } = sol;
|
|
|
const { cross_type } = solInfo;
|
|
|
- solInfo.win_side_a = typeof(solInfo.win_side_a) !== 'number' ? undefined : fixFloat(solInfo.win_side_a - outer_golds_loss);
|
|
|
- solInfo.win_side_b = typeof(solInfo.win_side_b) !== 'number' ? undefined : fixFloat(solInfo.win_side_b - outer_golds_loss);
|
|
|
- solInfo.win_side_c = cross_type == 'la_wa_rv' ? 0 : (typeof(solInfo.win_side_c) !== 'number' ? undefined : fixFloat(solInfo.win_side_c - outer_golds_loss));
|
|
|
- solInfo.win_average = fixFloat(solInfo.win_average - outer_golds_loss);
|
|
|
+ solInfo.win_side_a = typeof(solInfo.win_side_a) !== 'number' ? undefined : fixFloat(solInfo.win_side_a - loss_out);
|
|
|
+ solInfo.win_side_b = typeof(solInfo.win_side_b) !== 'number' ? undefined : fixFloat(solInfo.win_side_b - loss_out);
|
|
|
+ solInfo.win_side_c = cross_type == 'la_wa_rv' ? 0 : (typeof(solInfo.win_side_c) !== 'number' ? undefined : fixFloat(solInfo.win_side_c - loss_out));
|
|
|
+ solInfo.win_average = fixFloat(solInfo.win_average - loss_out);
|
|
|
|
|
|
return { ...solutionInfo, sol: solInfo };
|
|
|
});
|