PR

【7/29】レイドチームランキング対応 #4190

kouho opened this at 2025-07-25T20:57:23; closed

Description

opened by kouho at 2025-07-25T20:57:23; updated 2025-07-30T11:46:43

概要

仕様書
https://docs.google.com/spreadsheets/d/181i6VUOWLRfMVX_bkHqy6PMekdmGvpxtywXr5iVVH44/edit?gid=873565837#gid=873565837

実装シート
https://docs.google.com/spreadsheets/d/1KeEvVBqLumGGgA_izqDUH0ovnPys48e6CIGQrd5KQss/edit?gid=0#gid=0

TODO

  • [x] メインページ看板対応
  • [x] チェックリスト作成
  • [x] 海賊団ページ(近いランキング対応
  • [ ] 参照が汚い

Comment

#41631 by kouho at 2025-07-25T20:57:35; updated 2025-07-25T20:57:35

@wada
レビューお願いいたします

Comment

#41632 by wada at 2025-07-26T10:07:02; updated 2025-07-26T10:08:13

@kouho ①
Raid_rental_deck.phpとlog_team_raid_monster_per_damage.phpのcreate_log引数にteam_noが追加されている理由はなんですか?

Comment

#41633 by wada at 2025-07-26T10:08:42; updated 2025-07-26T10:08:42

@kouho ②
チームランキングのチーム移動周りの仕様は、どこかにまとまって記載されていますか?

Comment

#41634 by kouho at 2025-07-27T05:43:56; updated 2025-07-27T05:43:56

@wada
① シートに記載できておりませんでしたが、log_team_raid_monster_per_damageのテーブルにteam_noカラムを追加してます。
チームランキング追加にあたりどのチームでいつ、誰がいくらのダメージを出したかのログを確認できる場所を作成するためにteam_noをカラムに追加しようとしています。
(既存データでログを確認できる場所があればこの更新は戻します。

②チーム移動周りの仕様についてはSlackにも仕様書にもまとめれていないです。口頭で確認したことをベースにしておりました。

  • イベント終了時に所属しているチームを参照して報酬配布(注意事項に記載)
  • チームの移籍自体は従来通り可能とする
  • チームランキング用のダメージはユーザーが所属するチームにカウントされ、ユーザーが移籍してもチームの合計ダメージは変動しない

Comment

#41635 by wada at 2025-07-27T16:59:57; updated 2025-07-27T16:59:57

@kouho
① 記載をお願いします。
② 記載をお願いします。

Comment

#41636 by wada at 2025-07-27T17:09:45; updated 2025-07-27T17:09:45

@kouho
③ user_raid_damage.phpで使用していないメソッドがありますが、リリースまでに参照する予定はありますか?
なければ削除か使用していない旨記載お願いします。

Comment

#41637 by wada at 2025-07-27T17:24:38; updated 2025-07-27T17:24:38

@kouho
④user_raid_damageテーブルは開催回ごとにTRUNCATEやログ移動などを実施しますか?

Comment

#41638 by wada at 2025-07-27T17:27:55; updated 2025-07-27T17:27:55

@kouho
⑤user_raid_damage.phpのget_sum_damage_by_team_noメソッドのmysqlクエリをローカルで実行したところインデックスが効いておらず全レコードスキャンになっていました。
こちらの環境だけかもしれませんが確認お願いします。

Comment

#41639 by wada at 2025-07-27T17:52:19; updated 2025-07-27T17:52:19

@kouho
⑥user_raid_damage.phpのget_rank_by_team_noメソッドで、順位を全データ取得してループする方式を採用していますが、event_ranking_team_raid_monster.inc内のsqlクエリと一部重複しています。
個人ランキングの方ではポイントからsqlクエリで順位を取得する方法を採っていますが、今回そちらを採用しなかった理由はなんですか?

#ループ方式
①全件取得
②自分のチームまでループ
③順位をキャッシュ保存

#ポイント方式
①自分のポイントより多いのチーム数をカウント
②結果をキャッシュ保存

Comment

#41640 by wada at 2025-07-27T18:09:32; updated 2025-07-27T18:09:32

@kouho
⑦ランキングページで「累積」と「累計」で表記ゆれがあります。
<img src="https://jolly-gitbucket.curl-catla.ts.net/gitbucket/jolly/jr-web/_attached/17536073167956urpMnVn9i" width="300">

Comment

#41641 by wada at 2025-07-27T18:16:58; updated 2025-07-27T18:16:58

@kouho
⑧user_raid_damage.phpのget_by_user_noメソッド、get_sum_damage_by_team_noメソッドですが、結果が1件になるので$this->query()ではなく$this->query_one()で良いと思います。

wada add_label at 2025-07-27T18:21:43: コメントあり

Comment

#41652 by wada at 2025-07-28T09:19:39; updated 2025-07-28T09:19:39

@kouho
⑨event_ranking_team_raid_monster.inc内のsqlクエリのLIMIT 3000はどのような意図がありますか?

Comment

#41653 by wada at 2025-07-28T09:21:17; updated 2025-07-28T09:21:17

@kouho
⑩イベント終了時のチームデータ確定スクリプトはいつどのように実行しますか?

Comment

#41654 by kouho at 2025-07-28T10:36:22; updated 2025-07-28T10:36:22

@wada
確認ありがとうございます。

記載いたしました。
> ① 記載をお願いします。
② 記載をお願いします。

create_tableメソッドを削除しました
> ③user_raid_damage.phpで使用していないメソッドがありますが、リリースまでに参照する予定はありますか?
なければ削除か使用していない旨記載お願いします。

> 考慮できておりませんでした。プランナーにデータを残しておきたいかを確認し対応を決めます。
④user_raid_damageテーブルは開催回ごとにTRUNCATEやログ移動などを実施しますか?

INDEXを追加します。SQLのCREATE TABLE更新しましたが、
CREATE INDEX idx_event_team ON user_raid_damage(event_no, team_no);

> ⑤user_raid_damage.phpのget_sum_damage_by_team_noメソッドのmysqlクエリをローカルで実行したところインデックスが効いておらず全レコードスキャンになっていました。
こちらの環境だけかもしれませんが確認お願いします。

表記揺れ修正しました。
> ⑦ランキングページで「累積」と「累計」で表記ゆれがあります。

修正しました
> ⑧user_raid_damage.phpのget_by_user_noメソッド、get_sum_damage_by_team_noメソッドですが、結果が1件になるので$this->query()ではなく$this->query_one()で良いと思います。

> 元にしたスクリプトのままでした。LIMITが不要でしたので削除しました。
⑨event_ranking_team_raid_monster.inc内のsqlクエリのLIMIT 3000はどのような意図がありますか?

> イベント終了時の8/8 0:00にcronを回す予定です。
⑩イベント終了時のチームデータ確定スクリプトはいつどのように実行しますか?

Comment

#41655 by kouho at 2025-07-28T10:42:21; updated 2025-07-28T10:42:21

@wada
プランナー確認してデータを残しておかなくても大丈夫とのことでした。テーブル参照もあり運用を極力軽くするため、開催回毎にTRUNCATEの対応でいきます。
> ④user_raid_damageテーブルは開催回ごとにTRUNCATEやログ移動などを実施しますか?

Comment

#41659 by wada at 2025-07-28T14:50:27; updated 2025-07-28T14:50:27

@kouho

再確認

> ① シートに記載できておりませんでしたが、log_team_raid_monster_per_damageのテーブルにteam_noカラムを追加してます。

log_raid_rental_deck_damgeにもteam_noカラムを追加するのであれば記載をお願いします。

---

> ③user_raid_damage.phpで使用していないメソッドがありますが、リリースまでに参照する予定はありますか?

get_sum_damage_by_all_team_noメソッドは使用する予定ですか?

---

> ⑤INDEXを追加します。SQLのCREATE TABLE更新しました

毎回テーブルをtruncateするのでインデックスが多くなっても問題ないですが、おそらくsqlクエリでgroup byを使用すればインデックスは効くと思います。

---

> ⑥user_raid_damage.phpのget_rank_by_team_noメソッドで、順位を全データ取得してループする方式を採用していますが、event_ranking_team_raid_monster.inc内のsqlクエリと一部重複しています。

対応待ち

---

> ⑧user_raid_damage.phpのget_by_user_noメソッド、get_sum_damage_by_team_noメソッドですが、結果が1件になるので$this->query()ではなく$this->query_one()で良い

get_by_user_noメソッドのみの対応で大丈夫ですか?
呼び出し側の修正をお願いします。

---

> ⑨元にしたスクリプトのままでした。LIMITが不要でしたので削除しました。

ランキングページに全チーム表示するということであっていますか?

確認済み

②チームランキングのチーム移動周りの仕様記載
④user_raid_damageテーブルのTRUNCATEやログ移動
⑦ランキングページ表記ゆれ
⑩イベント終了時のチームデータ確定スクリプト

Comment

#41660 by wada at 2025-07-28T15:24:52; updated 2025-07-28T15:24:52

@kouho
⑪user_raid_damageテーブルのdamageカラムがint型なので桁あふれの可能性があります。

Comment

#41661 by wada at 2025-07-28T15:50:52; updated 2025-07-28T15:50:52

@kouho
⑫event_end_team_raid_monster.incで以下の確認お願いします。

um.total_raid_point > 0
AND urd.event_no = %d
AND urd.damage >= $d //%dです
$val['uu'], //存在しません
$event_no,
$val['ut'] //存在しません

Comment

#41662 by wada at 2025-07-28T15:54:54; updated 2025-07-28T15:55:37

@kouho
⑬チームダメージランキング報酬配布スクリプト(tool_event_raid_team_present.inc)を実行したところ、各報酬1チームしか配布されませんでした。

Comment

#41663 by wada at 2025-07-28T16:17:27; updated 2025-07-28T16:17:27

@kouho
⑭10分ごとの集計スクリプト(event_ranking_team_raid_monster.inc)は、event_ranking_raid_monster.incと同じくevent_ranking_event_island.shで呼び出しますか?

Comment

#41664 by kouho at 2025-07-28T16:46:08; updated 2025-07-28T16:46:08

@wada
log_raid_rental_deck_damgeの記載をSQLに追加しました。
>① シートに記載できておりませんでしたが、log_team_raid_monster_per_damageのテーブルにteam_noカラムを追加してます。
>
log_raid_rental_deck_damgeにもteam_noカラムを追加するのであれば記載をお願いします。

get_sum_damage_by_all_team_noメソッドも使用しない予定なので削除しました。
> ③user_raid_damage.phpで使用していないメソッドがありますが、リリースまでに参照する予定はありますか?
>
> get_sum_damage_by_all_team_noメソッドは使用する予定ですか?

get_by_user_noメソッド以外にget_sum_damage_by_team_noも修正しました。
呼び出し側も修正しました
> ⑧user_raid_damage.phpのget_by_user_noメソッド、get_sum_damage_by_team_noメソッドですが、結果が1件になるので$this->query()ではなく$this->query_one()で良い
>
> get_by_user_noメソッドのみの対応で大丈夫ですか?
> 呼び出し側の修正をお願いします。

bigintにCREATE文を修正しました
> ⑪user_raid_damageテーブルのdamageカラムがint型なので桁あふれの可能性があります。

同じくevent_ranking_event_island.shで呼び出します
> ⑭10分ごとの集計スクリプト(event_ranking_team_raid_monster.inc)は、event_ranking_raid_monster.incと同じくevent_ranking_event_island.shで呼び出しますか?

その他

メインページの看板表示対応を入れました。
元々の看板→タップで看板用モーダルを開く
チームランキング用の看板→タップでチームランキングページを開く の対応でいっています
(黄さんと順に表示だけでよいかを相談)

Comment

#41665 by kouho at 2025-07-28T16:56:39; updated 2025-07-28T16:56:39

@wada
event_end_team_raid_monster.inc修正しました

> ⑫event_end_team_raid_monster.incで以下の確認お願いします。
>
um.total_raid_point > 0
AND urd.event_no = %d
AND urd.damage >= $d //%dです
$val['uu'], //存在しません
$event_no,
$val['ut'] //存在しません

Comment

#41666 by kouho at 2025-07-28T17:17:03; updated 2025-07-28T17:17:03

@wada
順位の集計方法が違うため、S_GetRaidSumDamageRank関数よりもevent_ranking_team_raid_monster.incと同じ方式を取っておりました。無駄はあるかもですが、このままで今回は行きます。global変数を使うように修正しました。
> ⑥user_raid_damage.phpのget_rank_by_team_noメソッドで、順位を全データ取得してループする方式を採用していますが、event_ranking_team_raid_monster.inc内のsqlクエリと一部重複しています。
>
対応待ち

Comment

#41667 by kouho at 2025-07-28T17:37:14; updated 2025-07-28T17:37:14

@wada
黄さんに確認して、全チームではなく、300位まで表示したいとのことなのでLIMIT 300に変更しました。
> ⑨元にしたスクリプトのままでした。LIMITが不要でしたので削除しました。
>
ランキングページに全チーム表示するということであっていますか?

Comment

#41668 by wada at 2025-07-28T17:52:25; updated 2025-07-28T17:52:25

@kouho
以下確認しました。

①ダメージログテーブルにteam_noカラムの追加
②チームランキングのチーム移動周りの仕様記載
③user_raid_damage.phpの使用していないメソッド
④user_raid_damageテーブルのTRUNCATEやログ移動
⑤user_raid_damage.phpのget_sum_damage_by_team_noメソッドのsqlクエリ
⑥user_raid_damage.phpのget_rank_by_team_noメソッド
⑦ランキングページ表記ゆれ
⑧user_raid_damage.phpのget_by_user_noメソッド、get_sum_damage_by_team_noメソッド
⑨event_ranking_team_raid_monster.incのsqlクエリのLIMIT 3000
⑩イベント終了時のチームデータ確定スクリプト
⑪user_raid_damageテーブルのdamageカラム桁あふれ
⑫event_end_team_raid_monster.inc修正
⑭10分ごとの集計スクリプト

確認中
⑬チームダメージランキング報酬配布スクリプト

Comment

#41672 by kouho at 2025-07-29T10:37:55; updated 2025-07-29T10:37:55

@wada
報酬配布スクリプト修正しました
> ⑬チームダメージランキング報酬配布スクリプト(tool_event_raid_team_present.inc)を実行したところ、各報酬1チームしか配布されませんでした。

Comment

#41694 by wada at 2025-07-29T16:55:59; updated 2025-07-29T16:55:59

@kouho
ランキング集計を1週間ごとに3回Slack通知しているようですが、どのような理由がありますか?
集計しているかどうかだけならランキングページを見れば良いですし。

Comment

#41695 by wada at 2025-07-29T17:04:48; updated 2025-07-29T17:04:48

@kouho
確認OKです。

wada delete_label at 2025-07-29T17:04:52: コメントあり
wada add_label at 2025-07-29T17:04:53: 和田 LGTM

Comment

#41698 by kouho at 2025-07-29T17:20:54; updated 2025-07-29T17:20:54

@wada
初の試みなのでSlack通知入れましたがランキングページ見ればいいだけはそのとおりなので削除しました。
> ランキング集計を1週間ごとに3回Slack通知しているようですが、どのような理由がありますか?
集計しているかどうかだけならランキングページを見れば良いですし。

kouho merge at 2025-07-30T11:46:43: 【7/29】レイドチームランキング対応
kouho close at 2025-07-30T11:46:43: Close

Commit range

base642991f775e3097b7640b601897fc095c2242d7c
head0d15c5fffff47640a5e9f04f832a10ff9493cae0
base branchjolly/jr-web:master
head branchjolly/jr-web:team_raid_ranking

View commits

Commit details are loaded from Git when a dynamic archive server is running, or can be embedded with --include-commits.
Files changed24 filesView patch
statusfile
modifiedlib/SubFunc.inc
modifiedlib/class/const/RewardConst.class.php
modifiedlib/conf/class/RaidMonsterConfig.class.php
addedlib/exec/event_end_team_raid_monster.inc
modifiedlib/exec/event_ranking_event_island.sh
addedlib/exec/event_ranking_team_raid_monster.inc
addedlib/exec/tool_event_raid_team_present.inc
modifiedlib/models/Raid_rental_deck.php
modifiedlib/models/Raid_reward.php
modifiedlib/models/dao/log_team_raid_monster_per_damage.php
addedlib/models/dao/user_raid_damage.php
modifiedlib/models/raid/Battle_user.php
modifiedlib/models/raid/Rental_battle_user.php
modifiedlib/public/Main.inc
modifiedlib/public/Raid-BattleSpirit.inc
addedlib/public/Raid-RankingTeam.inc
modifiedpublic_html/index.php
modifiedpublic_html/js/jr_battle.min.js
modifiedpublic_html/template/Main.tpl
modifiedpublic_html/template/Raid-Ranking.tpl
addedpublic_html/template/Raid-RankingTeam.tpl
modifiedpublic_html/template/RaidEvent-InfoDetails.tpl
modifiedpublic_html/template/Team.tpl
modifiedpublic_html/template/header_sp.tpl
Patch body is stored as a separate file to keep this page lightweight.