PR

【7/27】集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする #981

kouho opened this at 2021-07-21T10:22:19; closed

Description

opened by kouho at 2021-07-21T10:22:19; updated 2025-01-27T11:12:43

状況のメモ Slackより転載

user_gold_collect_report.best_gold_collectとdaily_user_collect_gold.goldのユーザーごとの最大値が異なっています。
user_gold_collect_report.best_gold_collectはユーザーごとのこれまでの1日の最大集金額で
daily_user_collect_gold.goldはユーザーの日毎の集金額のため、
user_gold_collect_report.best_gold_collectとdaily_user_collect_gold.goldのユーザーごとの最大値が一致しないのは不具合と思います。
当日分はdaily_user_collect_goldが更新されていないため一致しなくても問題ないですが、
当日分以外で上記の状態になっているデータを190件確認しました。
問題対象取得クエリ

SELECT * FROM(
    SELECT `user_gold_collect_report`.user_no, best_gold_collect_date ,best_gold_collect as best_gold,tmp_tb.gold as daily_gold
    FROM `user_gold_collect_report`
    INNER JOIN (
        SELECT user_no, MAX(gold) as gold
        FROM `daily_user_collect_gold`
        GROUP BY `daily_user_collect_gold`.user_no
    ) as tmp_tb
    ON `user_gold_collect_report`.user_no=`tmp_tb`.user_no
    GROUP BY `user_gold_collect_report`.user_no ) as join_tb
WHERE join_tb.best_gold != join_tb.daily_gold
AND best_gold_collect_date != '2021-07-19'
kouho change_title at 2021-07-21T10:22:27: 集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする [WIP]集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする

Comment

#12344 by kouho at 2021-07-21T10:28:11; updated 2021-07-21T10:28:11

S_GetUserGoldCollectReportで当日分の集金データと最高集金額を取得してたいところを
S_GetUserGoldCollectReportとS_GetBestUserGoldCollectReport の2つの関数に分けようとして失敗しています。

Comment

#12352 by wada at 2021-07-21T13:15:09; updated 2021-07-21T13:15:09

@kouho
この方向で合っていますか?

方針

  • 当日分のデータは毎回集計
  • 最高額も毎回取得
  • 過去データはキャッシュ使用

対応

  • 当日の集金額取得処理を分離
  • 最高額取得処理を分離
  • キャッシュは過去データ格納のみ使用

具体的な実装

---

既存の関数

S_UpdateTodayGoldCollectReport: 当日の集金データの更新

当日データは毎回集計するため関数不要

S_UpdateBestGoldCollectReport: 最高額の更新

比較用の当日データは、専用の関数から取得に変更

S_GetUserGoldCollectReport: 集金レポート表示用のデータを取得

過去データのみキャッシュに格納
当日データと最高額データは毎回取得し、過去データとマージして返す
過去データがキャッシュに入っている場合は、キャッシュから取得したデータと当日・最高額データをマージ

---

新規実装

当日の集金情報を集計する関数

当日のデータを取得、整形して返す

最高額を取得する関数

最高額を取得、整形して返す
レコードがなければ作成

Comment

#12356 by kouho at 2021-07-21T13:43:54; updated 2021-07-21T13:43:54

@wada
方向は和田さんにまとめていただもので良いかと思います。

wada add_label at 2021-07-26T17:17:09: レビュー待ち

Comment

#12424 by wada at 2021-07-26T17:22:23; updated 2021-07-26T17:22:23

@iwamoto @kouho
レビューお願いします。
対応方針に沿って修正しています。

2点追加対応入れています。

  • 過去データは頻繁に更新する必要がなくなったので、キャッシュ期間を1日に延長
  • 処理中にエラーが発生すると、集金だけ実行されて最高値が更新されないことがあったので、ロールバック対応を追加
wada change_title at 2021-07-26T17:24:09: [WIP]集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする 【7/27】集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする

Comment

#12460 by wada at 2021-07-27T14:18:45; updated 2021-07-27T14:18:45

最高額データの修正スクリプトはこのprに含めず、別対応します

Comment

#12463 by iwamoto at 2021-07-27T14:55:07; updated 2021-07-27T14:55:07

@wada
こちらレビューを行いました。
動作させてみましたが、問題ないようには感じます

iwamoto add_label at 2021-07-27T14:55:13: 岩本 LGTM

Comment

#12477 by kouho at 2021-07-27T19:13:09; updated 2021-07-27T19:13:09

@wada
対応ありがとうございます。確認しました。動作上問題なく、対応方針に沿って修正されていると思います。

kouho add_label at 2021-07-27T19:13:12: 皇甫 LGTM
wada merge at 2021-07-28T09:29:40: 【7/27】集金レポート 本日分と最高集金額の更新にmemcacheを利用しないようにする
wada close at 2021-07-28T09:29:40: Close
wada refer at 2021-07-28T09:36:52: 1001:【7/28】集金レポート修正

Commit range

based7496a8acd07847133c775f66df44c72f67e2a30
head761fb43b940928706f52bf65176345b8256020ad
base branchjolly/jr-web:develop
head branchjolly/jr-web:fix_report

View commits

Commit details are loaded from Git when a dynamic archive server is running, or can be embedded with --include-commits.
Files changed2 filesView patch
statusfile
modifiedlib/SubFunc.inc
modifiedlib/ajax/main_listGoldExec.inc
Patch body is stored as a separate file to keep this page lightweight.