Commit 4ed06084 Harvey

no message

1 个父辈 cfce6459
正在显示 173 个修改的文件 包含 7 行增加643 行删除
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_Admin', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_BasketBallArea', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_BasketBallMatchType', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_Company', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_Goal', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_Match', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_MatchJson', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_MatchType', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBACompany', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBALeagueRank', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBAMatch', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBAMatchType', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBAOdds100', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBAOddsBigSmall', {
MatchId: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBAOddsLetGoal', {
MatchId: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBAPlayer', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBAState', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBATeam', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_NBAYearMonth', {
MatchTypeId: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_Odds100', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_OddsBigSmall', {
MatchId: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_OddsHalfBigSmall', {
MatchId: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_OddsHalfLetGoal', {
MatchId: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_OddsLetGoal', {
MatchId: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_OddsStandard', {
MatchId: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_Player', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_PlayerInTeam', {
PlayerId: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_State', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_Team', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('T_WordRank', {
Location: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('chart_issue', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('chart_lottery', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('core_issue', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('core_issue_sub', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('core_issue', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('core_lottery', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('core_match', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('core_news', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('core_news_comment', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('cps_expert', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('cps_user', {
id: {
......
......@@ -227,7 +227,6 @@ const ms_chart_field = sequelize.import('ms_chart_field');
exports.ms_chart_field = ms_chart_field;
const ms_chart_router = sequelize.import('ms_chart_router');
exports.ms_chart_router = ms_chart_router;
// sporttery_pool
const sporttery_pool = sequelize.import('sporttery_pool');
exports.sporttery_pool = sporttery_pool;
const ms_coupons = sequelize.import('ms_coupons');
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('lottery_shop_info', {
id: {
......@@ -12,11 +11,6 @@ module.exports = function (sequelize, DataTypes) {
allowNull: true,
comment: '彩店名称'
},
// real_name: {
// type: DataTypes.STRING(50),
// allowNull: true,
// comment: '店主姓名'
// },
type: {
type: DataTypes.INTEGER(2),
allowNull: true,
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('lottery_shop_relation', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('match', {
match_time: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('match_inputs', {
id: {
......
/*********************************************************************
# Autor: sandyWqh
# Date: 2020-11-02 17:42:13
# Description:
# Version: 1.0
# LastEditors: sandyWqh
# LastEditTime: 2020-11-11 09:36:59
**********************************************************************/
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_admin_menu', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_admin_role', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_app_log', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_appversion', {
Id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_article', {
uuid: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_basketball_company', {
ms_nba_company_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_basketball_competition', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_basketball_competition_history', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_basketball_game', {
id: {
......
/*********************************************************************
# Autor: sandyWqh
# Date: 2021-01-08 15:20:22
# Description:
# Version: 1.0
# LastEditors: sandyWqh
# LastEditTime: 2021-03-16 15:33:12
**********************************************************************/
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_basketball_game_odds', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_basketball_player', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_basketball_state', {
ms_nba_state_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_basketball_team', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_chart_field', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_chart_router', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_coupons', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_message_stat', {
message_stat_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_order', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_order_middle', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_pay_type', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_recharge_channels', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_schedule', {
ms_schedule_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_base_surface', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_club_rank', {
club_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_coach_rank', {
year: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_company', {
ms_company_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_competition', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_competition_history', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_game', {
id: {
......@@ -413,7 +412,6 @@ module.exports = function (sequelize, DataTypes) {
type: DataTypes.JSON,
allowNull: true
},
//oversea_info_0
oversea_info_0: {
type: DataTypes.JSON,
allowNull: true
......@@ -442,12 +440,10 @@ module.exports = function (sequelize, DataTypes) {
type: DataTypes.STRING(20),
allowNull: true
},
//标签
tags: {
type: DataTypes.JSON,
allowNull: true
},
//倍率
odds: {
type: DataTypes.JSON,
allowNull: true
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_game_event', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_game_lineup', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_hdaodds_814', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_nation_rank', {
national_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_player', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_player_rank', {
player_Id: {
......
/*********************************************************************
# Autor: sandyWqh
# Date: 2021-03-16 15:31:34
# Description:
# Version: 1.0
# LastEditors : sandyWqh
# LastEditTime : 2021-04-08 16:17:17
**********************************************************************/
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_result_trend', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_state', {
ms_state_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_soccer_team', {
id: {
......@@ -206,12 +205,10 @@ module.exports = function (sequelize, DataTypes) {
type: DataTypes.STRING(50),
allowNull: true
},
//predictz_name
predictz_name: {
type: DataTypes.STRING(200),
allowNull: true
},
//footballsuper_name
footballsuper_name: {
type: DataTypes.STRING(200),
allowNull: true
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_trend_stat', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_user', {
user_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_user_attention', {
uuid: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_user_charge', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_user_log', {
uuid: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_user_operation', {
uuid: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_video_room', {
uuid: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('ms_xcx_message', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('prediction_dictionary', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('prediction_expert', {
expertid: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('prediction_result', {
dbno: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('prediction_template', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('sporttery_lineups', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('sporttery_match', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('sporttery_match_lineup', {
m_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('sporttery_pool', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_history_same_odds', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_13', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_13_pre', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_3', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_39', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_39_history', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_39_pre', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_3_pre', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_5', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_5_history', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_5_pre', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_6', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_63', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_63_history', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_63_pre', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_63_temp', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_64', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_64_pre', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_6_history', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_6_pre', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_6_temp', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_72', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_72_pre', {
id: {
......@@ -115,7 +114,6 @@ module.exports = function (sequelize, DataTypes) {
type: DataTypes.STRING(2000),
allowNull: true
},
// 价格
price: {
type: DataTypes.DECIMAL,
allowNull: true
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_8', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_8_pre', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_inner_prediction_8_temp', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('stat_simple_predict', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('tools_ledger', {
id: {
......
......@@ -5,26 +5,6 @@ module.exports = function (sequelize, DataTypes) {
allowNull: false,
primaryKey: true,
},
// asia:{
// type: DataTypes.JSON,
// allowNull: false
// },
// europe:{
// type: DataTypes.JSON,
// allowNull: false
// },
// user:{
// type: DataTypes.JSON,
// allowNull: false
// },
// lstp:{
// type: DataTypes.JSON,
// allowNull: false
// },
// avg:{
// type: DataTypes.JSON,
// allowNull: false
// },
xxzs: {
type: DataTypes.JSON,
allowNull: true
......
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* jshint indent: 2 */
const moment = require("moment");
module.exports = function (sequelize, DataTypes) {
return sequelize.define('transfer_competitions', {
......
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* jshint indent: 2 */
const moment = require("moment");
module.exports = function (sequelize, DataTypes) {
return sequelize.define('transfer_national', {
......
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* jshint indent: 2 */
const moment = require("moment");
module.exports = function (sequelize, DataTypes) {
return sequelize.define('transfer_players', {
......
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* jshint indent: 2 */
const moment = require("moment");
module.exports = function (sequelize, DataTypes) {
return sequelize.define('transfer_players_history_transfer', {
......
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* jshint indent: 2 */
const moment = require("moment");
module.exports = function (sequelize, DataTypes) {
return sequelize.define('transfer_players_injury_transfer', {
......
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* jshint indent: 2 */
const moment = require("moment");
module.exports = function (sequelize, DataTypes) {
return sequelize.define('transfer_players_workers_transfer', {
......
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* jshint indent: 2 */
const moment = require("moment");
module.exports = function (sequelize, DataTypes) {
return sequelize.define('transfer_teams', {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('coache_history', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('coache_honors', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('competition_point_rank', {
season_id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('competition_statistics_details', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('europe_companys', {
id: {
......
......@@ -95,18 +95,6 @@ const odds_corner_ball_history = sequelize.import("odds_corner_ball_history");
exports.odds_corner_ball_history = odds_corner_ball_history;
const season_ranks = sequelize.import("season_ranks");
exports.season_ranks = season_ranks;
// coache_history.ts
// coache_honors.ts
// intelligence.ts
// player_honors.ts
// player_transfer.ts
// season_best_lineup.ts
// team_honor.ts
// team_injury.ts
// team_rank_club.ts
// team_rank_fifa_men.ts
// team_rank_fifa_women.ts
// team_squad.ts
const coache_history = sequelize.import("coache_history");
exports.coache_history = coache_history;
const coache_honors = sequelize.import("coache_honors");
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('intelligence', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('match_history_compensation', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('odds_asian_roll_ball', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('odds_big_small_history', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('odds_big_small_immedicate', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('odds_big_small_roll_ball', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('odds_corner_ball_history', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('odds_corner_ball_immediate', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('odds_corner_roll_ball', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('odds_europe_roll_ball', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('odds_european_immediate', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('player_honors', {
id: {
......
......@@ -11,13 +11,6 @@ module.exports = function (sequelize, DataTypes) {
allowNull: true,
comment: "球员统计数据"
},
// updated_at: {
// type: DataTypes.BIGINT,
// allowNull: true,
// get(){
// return moment(this.getDataValue('updated_at')).format('YYYY-MM-DD HH:mm:ss');
// }
// },
created_at: {
type: DataTypes.DATE,
allowNull: true
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('player_transfer', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('season_best_lineup', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('season_bracket_matches', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('team_honor', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('team_injury', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('team_rank_club', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('team_rank_fifa_men', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('team_rank_fifa_women', {
id: {
......
/* jshint indent: 2 */
module.exports = function (sequelize, DataTypes) {
return sequelize.define('team_squad', {
id: {
......
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.calc_pre_win = exports.create_match_data = void 0;
//处理纳米数据,共用调用
const info_db = require("../info_mysql/table");
const nami_db = require("../nami_mysql/table");
const moment = require("moment");
......@@ -33,7 +32,6 @@ ORDER BY match_time desc LIMIT 10;`)
if (v[0].rating < 1) {
continue;
}
//select short_name_zh,logo from players where id in (1332014)
var res = await nami_db.players.findAll({
attributes: ['id', 'short_name_zh', 'logo'],
where: {
......@@ -289,16 +287,6 @@ from odds_european_immediate where id= :matchid`, {
if (!data || data.length != 2 || !data[0][0].s || !data[1][0].s) {
return null;
}
// 亚洲态度:取全部公司的均值后,计算百分比,根据下面方式取概率大的一方加平。
// 如:通过多家亚指公司算出均值如下:
// 1.01 -0.78 0.85
// 第一步:先把本金加上水位都加1.则为2.01 -0.78 1.85
// 第二步:让球方为主队,则主水2.01+盘口0.78=2.79
// 第三步:用2.79 1.85计算百分比:
// 胜:4.64/(1.23+1.85)=60%
// 负:1-60%=40%
// 平:平固定算20%;
// 取概率大的一方加平,则可取:胜 平 百分比为80%。
var asia_data = data[0][0];
var asia;
if (asia_data.p > 0) {
......@@ -333,34 +321,6 @@ from odds_european_immediate where id= :matchid`, {
};
}
async function lstp(sp) {
// let sql = `
// select game_id as GameId,
// competition_id,
// score as Score,
// host_id as SportsdtHostId,
// guest_id as SportsdtGuestId,
// host_name,
// guest_name,
// game_date as Date,
// game_name,
// yiqiu_game_id,
// JSON_ARRAY(first_odds_host,first_odds_guest,first_odds_handicap,sport_odds_host,sport_odds_guest,sport_odds_handicap) as Data
// from db_info.stat_soccer_ahodds
// where first_odds_host=${sp[0]}
// and first_odds_guest=${sp[1]}
// and first_odds_handicap=${sp[2]}
// and game_date<'${moment().add(-1, 'days').format("YYYY-MM-DD HH:mm:ss")}'
// order by game_date desc
// limit 300 `
// let list = await info_db.sequelize.query(sql)
// if (list[0].length > 0) {
// list = list[0]
// } else {
// list = []
// }
// if (list && list.length) {
// return;
// }
if (sp[0] < sp[2]) {
return {
rate: (1 / sp[0] + 1 / sp[1]) / (1 / sp[0] + 1 / sp[1] + 1 / sp[2]),
......@@ -373,16 +333,9 @@ async function lstp(sp) {
pre: ['负', '平']
};
}
// list = JSON.parse(JSON.stringify(list))
// list = _.filter(list, (o) => {
// return o.host_name && o.guest_name
// })
// list = _.unionBy(list, "yiqiu_game_id");
// return base.getItemResultByList(list, true)
return null;
}
async function start1(issue_name) {
// var issue_name = moment().format('YYYY-MM-DD');
var data = await info_db.ms_soccer_game.findAll({
attributes: ['id', 'leisu_match_id', 'odds', 'yiqiu_host_team_id', 'yiqiu_guest_team_id', 'leisu_host_id', 'leisu_guest_id', 'match_time'],
where: {
......@@ -486,7 +439,6 @@ async function start1(issue_name) {
model.meeting = await meeting([item.yiqiu_host_team_id, item.yiqiu_guest_team_id], item.match_time);
var history_host_team = await history_team(item.yiqiu_host_team_id, true, item.match_time);
var history_guest_team = await history_team(item.yiqiu_guest_team_id, false, item.match_time);
// { data: res, avg_jq: time > 0 ? 1.0 * sum_jq_time / time : 0, sum_jq, host_jq }
model.history = [history_host_team.data, history_guest_team.data,
{ sum_jq: history_host_team.sum_jq, host_jq: history_host_team.host_jq, spf: history_host_team.spf },
{ sum_jq: history_guest_team.sum_jq, host_jq: history_guest_team.host_jq, spf: history_guest_team.spf }
......@@ -497,20 +449,11 @@ async function start1(issue_name) {
if (sum_avg_jq > 6)
sum_avg_jq = 6.1;
model.pre[1] = [Math.floor(sum_avg_jq), Math.ceil(sum_avg_jq)];
// if (model.meeting && model.meeting.sum_jq && model.meeting.z_spf.length) {
// var avg_jq = model.meeting.sum_jq * 1.0 / model.meeting.z_spf.length;
// model.pre[1] = [Math.floor(avg_jq), Math.ceil(avg_jq)];
// } else if (history_host_team.sum_jq && history_guest_team.sum_jq) {
// var avg_jq = (1.0 * history_host_team.sum_jq / history_host_team.data.length + 1.0 * history_guest_team.sum_jq / history_guest_team.data.length) / 2.0;
// model.pre[1] = [Math.floor(avg_jq), Math.ceil(avg_jq)];
// }
model.pre[1] = _.uniq(model.pre[1]);
var h = await trait_team(item.yiqiu_host_team_id, item.match_time);
var g = await trait_team(item.yiqiu_guest_team_id, item.match_time);
model.trait = [h, g];
try {
// 胜平负 总进球 比分 半全场
//[["胜", "平"], [3, 4]]
model.pre_all = [...model.pre, ...predictScoreAndHalfFull(model.pre)];
}
catch (error) {
......@@ -521,45 +464,33 @@ async function start1(issue_name) {
}
}
function predictScoreAndHalfFull(pre) {
// 输入参数结构: pre = [["胜", "平"], [3, 4]]
const [winDrawLose, totalGoals] = pre;
// 比分预测结果
const scorePredictions = [];
// 半全场预测结果
const halfFullPredictions = [];
// 根据胜平负和总进球生成比分预测
for (const outcome of winDrawLose) {
for (const goals of totalGoals) {
// 随机生成2-4个比分预测
const count = Math.floor(Math.random() * 3) + 2;
for (let i = 0; i < count; i++) {
if (outcome === "胜") {
// 主队胜的比分: 主队进球 > 客队进球,且总和=goals
// 主队至少进1球,最多进goals-1球
// 客队最多进主队进球-1球
const minHome = Math.max(1, Math.ceil(goals / 2));
const maxHome = goals;
if (minHome > maxHome)
continue; // 无解情况跳过
continue;
const home = Math.floor(Math.random() * (maxHome - minHome + 1)) + minHome;
const away = goals - home;
scorePredictions.push(`${home}-${away}`);
}
else if (outcome === "平") {
// 平局的比分: 主队进球 = 客队进球,且总和=goals
if (goals % 2 === 0) {
const score = goals / 2;
scorePredictions.push(`${score}-${score}`);
}
}
else if (outcome === "负") {
// 客队胜的比分: 主队进球 < 客队进球,且总和=goals
// 客队至少进1球,最多进goals-1球
// 主队最多进客队进球-1球
const minAway = Math.max(1, Math.ceil(goals / 2));
const maxAway = goals;
if (minAway > maxAway)
continue; // 无解情况跳过
continue;
const away = Math.floor(Math.random() * (maxAway - minAway + 1)) + minAway;
const home = goals - away;
scorePredictions.push(`${home}-${away}`);
......@@ -567,29 +498,23 @@ function predictScoreAndHalfFull(pre) {
}
}
}
// 根据胜平负生成半全场预测
for (const outcome of winDrawLose) {
// 随机生成2-4个半全场预测
const count = Math.floor(Math.random() * 3) + 2;
for (let i = 0; i < count; i++) {
if (outcome === "胜") {
// 可能的情况: 胜胜, 平胜
const options = ["胜胜", "平胜"];
halfFullPredictions.push(options[Math.floor(Math.random() * options.length)]);
}
else if (outcome === "平") {
// 可能的情况: 平平, 胜平, 负平
const options = ["平平", "胜平", "负平"];
halfFullPredictions.push(options[Math.floor(Math.random() * options.length)]);
}
else if (outcome === "负") {
// 可能的情况: 负负, 平负
const options = ["负负", "平负"];
halfFullPredictions.push(options[Math.floor(Math.random() * options.length)]);
}
}
}
// 去重并限制数量
const uniqueScores = [...new Set(scorePredictions)].slice(0, 4);
const uniqueHalfFull = [...new Set(halfFullPredictions)].slice(0, 4);
return [uniqueScores, uniqueHalfFull];
......@@ -675,7 +600,6 @@ async function calc_pre_win() {
await (0, common_1.sleep)(1000);
}
exports.calc_pre_win = calc_pre_win;
//生成比赛数据
async function create_match_data() {
for (let index = -3; index < 1; index++) {
await start1(moment().add(-index, 'days').format('YYYY-MM-DD')).catch(a => console.log(a));
......
......@@ -13,12 +13,7 @@ if (global['app_config'].job.enable_piscina) {
minThreads: 1,
maxQueue: 100,
idleTimeout: 60000,
concurrentTasksPerWorker: 5, //单个工作线程同时处理的任务数 任务包含异步操作时可以考虑增加
// resourceLimits: {
// maxOldGenerationSizeMb: 1024,
// maxYoungGenerationSizeMb: 256,
// stackSizeMb: 4,
// },
concurrentTasksPerWorker: 5,
});
async function run_task(args) {
return piscina.run(args);
......
......@@ -2,18 +2,9 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.demo_test = exports.demoJobHandler = void 0;
const common_1 = require("../../libs/common");
/**
* demo任务
* @param {any} jobLogger 由xxl-job组件定义的任务logger,会将日志内容输出到文件,可在调度中心查看执行日志
* @param {{ jobParam1: any, jobParam2: any }} jobParams 任务参数
* @param {Object} context 任务上下文
* @return {Promise<void>} 函数必须返回一个 promise
*/
async function demoJobHandler(jobLogger, jobParams, context) {
// jobLogger.debug('params: %o, context: %o', jobParams, context)
for (let i = 1; i < 10; i++) {
await (0, common_1.sleep)(1000);
// jobLogger.debug(`${i}s passed`)
}
return { result: 'return value' };
}
......@@ -22,7 +13,6 @@ async function demo_test(jobLogger, jobParams, context) {
jobLogger.debug('params: %o, context: %o', jobParams, context);
for (let i = 1; i < 5; i++) {
await (0, common_1.sleep)(1000);
// jobLogger.debug(`${i}s passed`)
}
return { result: 'return value' };
}
......
......@@ -2,28 +2,16 @@
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const path = require('path');
//多线程情况下 需要重新初始化config配置
require('../../config/index');
const job_handlers = new Map();
/**
* 递归加载指定目录下所有 .js 文件
* @param {string|string[]} dirPaths 要加载的目录路径(可以是字符串或数组)
* @param {object} [options] 配置选项
* @param {boolean} [options.ignoreNodeModules=true] 是否忽略 node_modules 目录
* @param {RegExp|function} [options.filter] 自定义过滤条件
* @returns {object} 包含所有加载模块的对象(以相对路径为键)
*/
function loadAllJSFiles(dirPaths, options = {}) {
const { ignoreNodeModules = true, filter = null } = options;
const loadedModules = {};
// 统一处理为数组形式
if (!Array.isArray(dirPaths)) {
dirPaths = [dirPaths];
}
dirPaths.forEach(dirPath => {
// 解析为绝对路径
const absoluteDir = path.resolve(dirPath);
// 递归读取目录
function scanDirectory(currentDir, relativePath = '') {
const files = fs.readdirSync(currentDir);
files.forEach(file => {
......@@ -31,11 +19,9 @@ function loadAllJSFiles(dirPaths, options = {}) {
const stat = fs.statSync(fullPath);
const newRelativePath = path.join(relativePath, file);
if (stat.isDirectory()) {
// 跳过 node_modules 目录(如果配置了忽略)
if (ignoreNodeModules && file === 'node_modules') {
return;
}
// 递归扫描子目录
scanDirectory(fullPath, newRelativePath);
}
else if (path.extname(file) === '.js' &&
......@@ -43,7 +29,6 @@ function loadAllJSFiles(dirPaths, options = {}) {
(typeof filter === 'function' && filter(fullPath)) ||
(filter instanceof RegExp && filter.test(fullPath)))) {
try {
// 加载模块并存储
const module = require(fullPath);
const moduleKey = newRelativePath.replace(/\.js$/, '');
loadedModules[moduleKey] = module;
......@@ -83,7 +68,6 @@ function wrapper_task(func) {
continue;
}
job_handlers.set(key2, wrapper_task(m[key2]));
// console.log(key2)
}
}
}
......
......@@ -2,8 +2,6 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.Executor = void 0;
const job_manager_1 = require("./job_manager");
// const logger = require('./logger')
// const log = logger('xxl-job-executor')
const axios_1 = require("axios");
class Executor {
executorKey;
......@@ -12,14 +10,6 @@ class Executor {
executorUrl;
jobHandlers;
jobManager;
/**
* @param {string} executorKey
* @param {string} scheduleCenterUrl
* @param {string} accessToken
* @param {string} jobLogPath
* @param {Map} jobHandlers
* @param {*} context
*/
constructor(executorKey, scheduleCenterUrl, accessToken, jobLogPath, jobHandlers, context) {
this.executorKey = executorKey;
this.scheduleCenterUrl = scheduleCenterUrl;
......@@ -27,16 +17,10 @@ class Executor {
this.jobHandlers = jobHandlers;
this.jobManager = new job_manager_1.JobManager(jobLogPath, context);
}
/**
* 应用执行器中间件
* @param {*} app
* @param {string} domain
*/
applyMiddleware({ app, domain }) {
this.executorUrl = domain;
const express = require('express');
var router = new express.Router();
//请求认证
router.use(async (req, res, next) => {
res.status(200);
const token = req.headers && req.headers['xxl-job-access-token'];
......@@ -53,11 +37,6 @@ class Executor {
this.addJobRoutes(router);
app.use(router);
}
/**
* 添加xxl-job相关的路由,供调度中心访问
* @param {express.Router} router
* @param {string} baseUri
*/
addJobRoutes(router) {
router.post(`/beat`, async (req, res, next) => {
res.send(this.beat());
......@@ -77,31 +56,12 @@ class Executor {
res.send(data);
});
}
/**
* 心跳检测:调度中心检测执行器是否在线时使用
* @return {{code: number, msg: string}}
*/
beat() {
return { code: 200, msg: 'success' };
}
/**
* 忙碌检测:调度中心检测指定执行器上指定任务是否忙碌(运行中)时使用
* @param {string} jobId - 任务ID
* @return {{code: number, msg: string}}
*/
idleBeat(jobId) {
return (this.jobManager.hasJob(jobId) ? { code: 500, msg: 'busy' } : { code: 200, msg: 'idle' });
}
/**
* 触发任务执行
* @param {number} jobId - 任务ID
* @param {string} handlerName - 任务的handler名字
* @param {string} jobJsonParams - 任务参数
* @param {number} executorTimeout - 任务超时时间,单位秒,大于零时生效
* @param {number} logId - 本次调度日志ID
* @param {number} - 本次调度日志时间
* @return {{code: number, msg: string}}
*/
run({ jobId, executorHandler: handlerName, executorParams: jobJsonParams, executorTimeout, logId, logDateTime }) {
const jobHandler = this.jobHandlers.get(handlerName);
if (!jobHandler) {
......@@ -110,67 +70,19 @@ class Executor {
this.jobManager.runJob(jobId, jobJsonParams, logId, logDateTime, executorTimeout, handlerName, jobHandler, this.callback.bind(this));
return { code: 200, msg: 'success' };
}
/**
* 终止任务
* @param {number} jobId - 任务ID
* @return {{code: number, msg: string}}
*/
killJob(jobId) {
return { code: 500, msg: `not yet support, jobId(${jobId})` };
}
/**
* 查看执行日志
* @param {number} logDateTime - 本次调度日志时间
* @param {number} logId - 本次调度日志ID
* @param {number} fromLineNum - 日志开始行号
* @return {*} - fromLineNum:日志开始行号; toLineNum:日志结束行号; logContent:日志内容
*/
async readLog(logDateTime, logId, fromLineNum) {
//待实现
return {
code: 200, content: {
"fromLineNum": 0,
"toLineNum": 100,
"logContent": "test",
"isEnd": true // 日志是否全部加载完
"isEnd": true
}
};
//let logContent
//let toLineNum
// try {
// const lines = await this.jobManager.readJobLog(logDateTime, logId)
// lines.splice(0, fromLineNum - 1)
// if (last(lines) === '') lines.pop()
// toLineNum = fromLineNum + lines.length - 1
// lines.unshift('')
// logContent = lines.join('\n')
// } catch (err) {
// log.err('readLog error: %o', err.message)
// toLineNum = fromLineNum
// logContent = err.toString()
// }
// 请求数据格式如下,放置在 RequestBody 中,JSON格式:
// {
// "logDateTim":0, // 本次调度日志时间
// "logId":0, // 本次调度日志ID
// "fromLineNum":0 // 日志开始行号,滚动加载日志
// }
// 响应数据格式:
// {
// "code":200, // 200 表示正常、其他失败
// "msg": null // 错误提示消息
// "content":{
// "fromLineNum":0, // 本次请求,日志开始行数
// "toLineNum":100, // 本次请求,日志结束行号
// "logContent":"xxx", // 本次请求日志内容
// "isEnd":true // 日志是否全部加载完
// }
// }
// return { code: 200, content: { fromLineNum, toLineNum, logContent } }
}
/**
* 执行器注册:执行器注册时使用,调度中心会实时感知注册成功的执行器并发起任务调度
*/
async registry() {
return axios_1.default.post(`${this.scheduleCenterUrl}/api/registry`, {
registryGroup: 'EXECUTOR',
......@@ -182,12 +94,8 @@ class Executor {
'Content-Type': 'application/json'
}
}).then((response) => {
// console.log('执行器注册成功:', response.data);
}).catch(error => console.error('执行器注册失败:', error.message));
}
/**
* 执行器注册摘除:执行器注册摘除时使用,注册摘除后的执行器不参与任务调度与执行
*/
async registryRemove() {
return axios_1.default.post(`${this.scheduleCenterUrl}/api/registryRemove`, {
'registryGroup': 'EXECUTOR',
......@@ -200,11 +108,6 @@ class Executor {
}
}).then((response) => console.log('执行器移除成功:', response.data)).catch(error => console.error('执行器移除失败:', error.message));
}
/**
* 任务回调:执行器执行完任务后,回调任务结果时使用
* @param {Error|null} error 错误对象
* @param {{logId: number, result: any ,use_time:number}} jobResult 任务结果
*/
async callback(error, { logId, result, use_time }) {
var handleMsg = JSON.stringify({ use_time, result, error: error && error.message });
return axios_1.default.post(`${this.scheduleCenterUrl}/api/callback`, [{
......
......@@ -2,35 +2,18 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.XxlJobExecutor = void 0;
const executor_1 = require("./executor");
/**
* XxlJobExecutor
*/
class XxlJobExecutor {
executor;
registryInterval;
/**
* 创建 XxlJobExecutor 实例
* @param {Map<String, Function>} jobHandlers 所有的任务执行函数,key: 任务标识,即调度中心任务配置的JobHandler;value: 任务执行函数
* @param {Object} context 为所有任务执行函数指定公共的上下文对象,常见比如数据库实例 { database, redis }
*/
constructor(opts, jobHandlers, context = undefined) {
const { XXL_JOB_EXECUTOR_KEY: executorKey, XXL_JOB_SCHEDULE_CENTER_URL: scheduleCenterUrl, XXL_JOB_ACCESS_TOKEN: accessToken, XXL_JOB_JOB_LOG_PATH: jobLogPath, } = opts;
this.executor = new executor_1.Executor(executorKey, scheduleCenterUrl, accessToken, jobLogPath, jobHandlers, context);
}
/**
* 应用执行器组件
* @param {Object} args
* @param {any} args.app 执行器server, express
* @param {string} args.appDomain 执行器 server 地址
*/
applyMiddleware({ app, domain }) {
this.executor.applyMiddleware({ app, domain });
const registry = this.executor.registry.bind(this.executor);
registry() && (this.registryInterval = setInterval(registry, 30000));
}
/**
* 关闭服务前应调用该方法,将执行器从调度中心摘除
*/
async close() {
if (this.registryInterval) {
clearInterval(this.registryInterval);
......
......@@ -3,66 +3,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.JobManager = void 0;
const moment = require("moment");
const Path = require("path");
// const Path = require('path')
// const logger = require('./logger')
// const log = logger('xxl-job-manager')
// const { Task, tapTask } = require('./purefuncs')
// const { mkdir, searchInFile } = require('./file')
/**
* 任务管理
*/
class JobManager {
context;
runningJobs;
jobLogPath;
/**
* @param {string} jobLogPath
* @param {*} context
*/
constructor(jobLogPath, context) {
// mkdir(jobLogPath)
this.jobLogPath = jobLogPath;
this.context = context;
this.runningJobs = new Set();
}
/**
* 根据调度时间获取日志文件路径
* @param {number} dateTime
* @return {string}
*/
getLogFilePath(dateTime) {
return Path.resolve(process.cwd(), `${this.jobLogPath}/${moment(dateTime, 'x').format('YYYY-MM-DD')}.log`);
}
/**
* 构造任务logger的namespace
* @param {string} handlerName
* @param {number} dateTime
* @param {number} logId
* @return {string}
*/
getJobLoggerNamespace(handlerName, dateTime, logId) {
return `${handlerName}-${moment(dateTime, 'x').format('YYMMDD')}-${logId}-executing`;
}
/**
* @param {{number}} jobId
* @return {boolean}
*/
hasJob(jobId) {
return this.runningJobs.has(jobId);
}
async runJob(jobId, // 任务ID
jobJsonParams, // 任务参数(JSON格式)
logId, // 日志ID
logDateTime, // 日志时间
executorTimeout, // 执行超时时间(秒)
handlerName, // 处理器名称
jobHandler, // 任务处理函数
callback // 回调函数
) {
// 1. 初始化日志记录器
// const loggerNamespace = this.getJobLoggerNamespace(handlerName, logDateTime, logId);
// const logFilePath = this.getLogFilePath(logDateTime);
// const jobLogger = logger(loggerNamespace, logFilePath);
async runJob(jobId, jobJsonParams, logId, logDateTime, executorTimeout, handlerName, jobHandler, callback) {
let result, timeoutTimer, error;
let use_time = new Date().getTime();
try {
......@@ -110,27 +69,11 @@ class JobManager {
error
});
}
/**
* @param {number} logDateTime
* @param {number} logId
* @return {Promise<Array>}
*/
async readJobLog(logDateTime, logId) {
const logFilePath = this.getLogFilePath(logDateTime);
const jobLogNamespace = this.getJobLoggerNamespace('', logDateTime, logId) + ' ';
return fs.existsSync(logFilePath) ? await searchInFile(logFilePath, jobLogNamespace, `${jobLogNamespace} end`) : [];
}
/**
* @param {number} jobId
* @param {number} logId
* @param {*} jobLogger
* @param {function} callback
* @param {number} timeoutTimer
* @param {number} use_time
* @param {*} result
* @param {*} error
* @return {Promise<void>}
*/
async finishJob({ jobId, logId, callback, timeoutTimer, use_time, result, error }) {
try {
timeoutTimer && clearTimeout(timeoutTimer);
......
// import debug from 'debug';
// import fs from 'fs';
// import os from 'os';
// import util from 'util';
// // 类型定义
// type LogLevel = 'error' | 'info' | 'warn' | 'debug' | 'trace';
// type LoggerMethods = {
// [key in LogLevel]: debug.Debugger;
// } & {
// close: () => void;
// };
// interface LoggerOptions {
// namespace: string;
// logFilePath?: string;
// enabledLevels?: string;
// debugEnabled?: boolean;
// }
// // 配置解析
// const parseEnvBool = (envVar: string): boolean => {
// const value = process.env[envVar] || '';
// return /^(yes|on|true|enable|enabled|1)$/i.test(value);
// };
// const getEnvValue = (envVar: string, defaultValue: string): string => {
// return process.env[envVar] !== undefined ? process.env[envVar] : defaultValue;
// };
// // 默认配置
// const DEFAULT_LOG_LEVELS = 'info:*,warn:*,error:*,debug:*,trace:*';
// const WRITE_STREAM_OPTIONS: fs.WriteStreamOptions = {
// flags: 'a',
// encoding: 'utf8',
// autoClose: true,
// emitClose: true
// };
// // 空日志函数
// const noop = (..._args: any[]): void => {};
// const noopLogger: LoggerMethods = {
// error: noop,
// info: noop,
// warn: noop,
// debug: noop,
// trace: noop,
// close: noop
// };
// // 创建基础日志函数
// const createBaseLoggers = (namespace: string): Omit<LoggerMethods, 'close'> => {
// return {
// error: debug('error').extend(namespace),
// info: debug('info').extend(namespace),
// warn: debug('warn').extend(namespace),
// debug: debug('debug').extend(namespace),
// trace: debug('trace').extend(namespace)
// };
// };
// // 配置日志级别
// const configureLogLevels = (
// logger: Omit<LoggerMethods, 'close'>,
// enabledLevels: string
// ): void => {
// Object.entries(logger).forEach(([level]) => {
// logger[level as LogLevel].enabled = enabledLevels.includes(level);
// });
// };
// // 创建文件日志写入器
// const createFileLogger = (
// logFilePath: string,
// logger: Omit<LoggerMethods, 'close'>,
// enabledLevels: string
// ): LoggerMethods => {
// const writeStream = fs.createWriteStream(logFilePath, WRITE_STREAM_OPTIONS);
// const logToFile = (...args: any[]): void => {
// writeStream.write(`${util.format(...args)}${os.EOL}`);
// };
// const logToConsoleAndFile = (...args: any[]): void => {
// const message = util.format(...args);
// console.error(message);
// writeStream.write(`${message}${os.EOL}`);
// };
// // 配置日志输出方式
// Object.entries(logger).forEach(([level, logFn]) => {
// logFn.log = enabledLevels.includes(level) ? logToConsoleAndFile : logToFile;
// });
// // 返回完整logger对象
// return {
// ...logger,
// close: (): void => {
// writeStream.end();
// // 切换回仅控制台日志
// Object.values(logger).forEach((logFn) => {
// logFn.log = console.error;
// });
// }
// };
// };
// // 主导出函数
// export const createLogger = (
// options: LoggerOptions | string
// ): LoggerMethods => {
// // 处理参数重载
// const normalizedOptions = typeof options === 'string'
// ? { namespace: options }
// : options;
// const {
// namespace,
// logFilePath,
// enabledLevels = getEnvValue('DEBUG', DEFAULT_LOG_LEVELS),
// debugEnabled = parseEnvBool('XXL_JOB_DEBUG_LOG')
// } = normalizedOptions;
// if (!debugEnabled && !logFilePath) {
// return noopLogger;
// }
// const logger = createBaseLoggers(namespace);
// // 配置日志级别
// configureLogLevels(logger, enabledLevels);
// if (!logFilePath) {
// return {
// ...logger,
// close: noop
// };
// }
// // 文件日志配置
// return createFileLogger(logFilePath, logger, enabledLevels);
// };
// // 默认导出
// export default createLogger;
//# sourceMappingURL=logger.js.map
\ No newline at end of file
......@@ -5,7 +5,8 @@
"outDir": "build/",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"sourceMap": true
"sourceMap": true,
"removeComments": true
},
"include": [
"src/**/*.ts"
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!