Issue

チーム合併実装 #47

wada opened this at 2020-07-17T10:49:03; closed

Description

opened by wada at 2020-07-17T10:49:03; updated 2022-07-13T12:16:37

戦争に参加できるようにチーム人数がすくないチームを合併する

  • [x] team_merge_submit.inc
  • [x] cpanel_team_merge.inc

Comment

#5908 by wada at 2020-07-30T10:08:37; updated 2020-07-30T10:08:37

紅玉消費量: 100
ボーダチーム人数: 11
チーム最大人数: 15
チーム最小人数: 3

統合予約の取得

チームデータを取得

現状のチームデータを確認し、条件に応じて統合予約から削除されるチーム
・チーム統合拒否もしくは、承認制
・ボーダチーム人数を超えた

統合予約に追加されるチーム
・メンバー数が最小人数から最大人数かつ、承認なし

統合チームの取得

登録後、2.5日経過したチーム

対象チームのユーザ取得

削除ユーザ
・紅玉消費量が指定以下かつ、チュートリアル突破後1日以上経過
newユーザ
・チュートリアル突破後1日以内

削除ユーザに対して実行
・チームリーダを取得
・統合対象から除外
・チーム情報を削除
・チームリーダ交代

統合実行

チームを分類
・ユーザ数4名以上
・ユーザ数4名未満
・ユーザ数0

ユーザ数0のチームを削除

ユーザ数4名未満のチームと4名以上のチームに統合
どちらかのチームが0になるまで実行
Lvが高い方が親になる
親でないチームのユーザを親チームに移籍
親でないチームを削除
親チームの人数を変更

wada assign at 2020-07-30T19:00:50: Not assigned:wada
wada commit at 2020-07-30T19:28:49: ログにデータ格納 #47 c0b506ceea7331b86527748d491df1806d50fa8f

Comment

#6029 by wada at 2020-08-03T17:34:24; updated 2020-08-03T18:48:30

テストレコードを追加後、バッチ実行で以下の状態になる

  • team_no:500,900がteam_merge_reserveに追加

500は合併後に、規定人数をクリアいていないため引き続き予約状態

  • user_no:50001,50002,70002,80001がチームから除外
  • team_no:600のユーザが500に、400が700に移籍
  • team_no:500のリーダが交代

実行

docker-compose exec web bash
cd /home/web/jr-web/lib/exec
ENVIRONMENT=development PF=yamada HTTP_HOST=127.0.0.1 IS_DOCKER=true php team_merge_submit.inc

テストレコード追加sql

# チームデータ
INSERT INTO `team_data` (`team_no`, `team_name`, `team_message`, `lv`, `total_exp`, `join_type`, `member`, `leader_no`, `leader_type`, `team_receive`, `team_move`, `reg_date` )
VALUES
	(100, '合併拒否'				, '', 1, 0, 0, 1 , 10000, 0, 0, 1, 1591065081),
	(200, '承認制'				, '', 1, 0, 1, 1 , 20000, 0, 0, 0, 1591065081),
	(300, 'ボーダ人数クリア'		, '', 1, 0, 0, 11, 30000, 0, 0, 0, 1591065081),
	(400, 'ユーザ4人以上'			, '', 1, 0, 0, 10, 40001, 0, 0, 0, 1591065081),
	(500, 'ユーザ4人以上(削除後)'	, '', 1, 0, 0, 7 , 50001, 0, 0, 0, 1591065081),
	(600, 'ユーザ4人未満'			, '', 1, 0, 0, 3 , 60001, 0, 0, 0, 1591065081),
	(700, 'ユーザ4人未満(削除後)'	, '', 2, 0, 0, 4 , 70001, 0, 0, 0, 1591065081),
	(800, 'ユーザ0人(削除後)'		, '', 1, 0, 0, 1 , 80001, 0, 0, 0, 1591065081),
	(900, '合併予約'				, '', 1, 0, 0, 5 , 90001, 0, 0, 0, 1591065081);

# チーム合併予約情報
INSERT INTO `team_merge_reserve` (`team_no`, `reg_date`)
VALUES
	(100, 1591065081),
	(200, 1591065081),
	(300, 1591065081),
	(400, 1591065081),
	(500, 1591065081),
	(600, 1591065081),
	(700, 1591065081),
	(800, 1591065081);

# ユーザデータ
INSERT INTO `user_info` (`user_no`, `nickname`, `team_no`, `reg_date`, `uuid`)
VALUES
	(40001, 'ユーザ4人以上1リーダ', 400, 1591065081, ''),
	(40002, 'ユーザ4人以上2', 400, 1591065081, ''),
	(40003, 'ユーザ4人以上3', 400, 1591065081, ''),
	(40004, 'ユーザ4人以上4', 400, 1591065081, ''),
	(40005, 'ユーザ4人以上5', 400, 1591065081, ''),
	(40006, 'ユーザ4人以上6', 400, 1591065081, ''),
	(40007, 'ユーザ4人以上7', 400, 1591065081, ''),
	(40008, 'ユーザ4人以上8', 400, 1591065081, ''),
	(40009, 'ユーザ4人以上9', 400, 1591065081, ''),
	(40010, 'ユーザ4人以上10', 400, 1591065081, ''),
	(50001, 'ユーザ4人以上(削除後)リーダ(削除)', 500, 1591065081, ''),
	(50002, 'ユーザ4人以上(削除後)(削除)', 500, 1591065081, ''),
	(50003, 'ユーザ4人以上(削除後)', 500, 1591065081, ''),
	(50004, 'ユーザ4人以上(削除後)', 500, 1591065081, ''),
	(50005, 'ユーザ4人以上(削除後)', 500, 1591065081, ''),
	(50006, 'ユーザ4人以上(削除後)', 500, 1591065081, ''),
	(50007, 'ユーザ4人以上(削除後)', 500, 1591065081, ''),
	(60001, 'ユーザ4人未満1リーダ', 600, 1591065081, ''),
	(60002, 'ユーザ4人未満2', 600, 1591065081, ''),
	(60003, 'ユーザ4人未満3', 600, 1591065081, ''),
	(70001, 'ユーザ4人未満(削除後)1リーダ', 700, 1591065081, ''),
	(70002, 'ユーザ4人未満(削除後)2(削除)', 700, 1591065081, ''),
	(70003, 'ユーザ4人未満(削除後)3', 700, 1591065081, ''),
	(70004, 'ユーザ4人未満(削除後)4', 700, 1591065081, ''),
	(80001, 'ユーザ0人(削除後)1(削除)', 800, 1591065081, '');

# チュートリアル終了時間参照用
INSERT INTO `user_setting` (`user_no`, `tutorial_fin_time`)
VALUES
	(40001, 1592281778),
	(40002, 1592281778),
	(40003, 1592281778),
	(40004, 1592281778),
	(40005, 1592281778),
	(40006, 1592281778),
	(40007, 1592281778),
	(40008, 1592281778),
	(40009, 1592281778),
	(40010, 1592281778),
	(50001, 1592281778),
	(50002, 1592281778),
	(50003, 1592281778),
	(50004, 1592281778),
	(50005, 1592281778),
	(50006, 1592281778),
	(50007, 1592281778),
	(60001, 1592281778),
	(60002, 1592281778),
	(60003, 1592281778),
	(70001, 1592281778),
	(70002, 1592281778),
	(70003, 1592281778),
	(70004, 1592281778),
	(80001, 1592281778);

# 紅玉消費数参照用
INSERT INTO `user_mission` (`user_no`, `total_stamina`)
VALUES
	(40001, 102),
	(40002, 102),
	(40003, 102),
	(40004, 102),
	(40005, 102),
	(40006, 102),
	(40007, 102),
	(40008, 102),
	(40009, 102),
	(40010, 102),
	(50001, 100),
	(50002, 100),
	(50003, 102),
	(50004, 102),
	(50005, 102),
	(50006, 102),
	(50007, 102),
	(60001, 102),
	(60002, 102),
	(60003, 102),
	(70001, 102),
	(70002, 10),
	(70003, 102),
	(70004, 102),
	(80001, 0);

テストレコードリセット

# テスト用チーム情報を削除
DELETE FROM `team_data` WHERE `team_no` BETWEEN 100 AND 900;
# 合併予約情報を削除
TRUNCATE TABLE `team_merge_reserve`;
# テスト用ユーザ情報を削除
DELETE FROM `user_info` WHERE `user_no` BETWEEN 40001 AND 80001;
# 合併ログを削除
TRUNCATE TABLE `log_team_merge`;

# 以下のtableのsqlを再度実行
`team_data`, `team_merge_reserve`, `user_info`
wada commit at 2020-08-03T17:42:30: チーム合併バッチ修正 #47 ee01ef5a6b0f642d8afbd3ba207f95a64a826413

Comment

#6032 by wada at 2020-08-03T18:50:40; updated 2020-08-03T18:50:40

合併予約状態になると、チームページ上部に「連合合併」ボタンが追加されるので、team_merge_reserveに自分のチームを追加して、確認してみてください。
合併ボタンから、合併のON/OFFができます。

wada add_label at 2020-08-03T18:50:44: レビュー待ち
wada commit at 2020-08-03T18:52:26: foreachの部分がeachと同じ挙動になるよう修正 #47 9c46f3b4e79d22a8b3b7cfbf70951b4d87db7d2e

Comment

#6047 by iwamoto at 2020-08-04T11:48:51; updated 2020-08-04T11:48:51

@wada
こちらレビューを行いました。
バッチ実行後の動作も問題ないと思います。

wada refer at 2020-08-04T15:19:16: 94:Team merge 47
wada refer at 2020-08-04T15:36:55: 95:Team merge 47
wada close_comment at 2020-08-04T16:00:03: 本番設定済み
wada delete_label at 2020-08-04T16:00:42: レビュー待ち
iwamoto refer at 2020-11-19T21:02:36: 440:チーム合併処理の修正
wada refer at 2021-03-05T18:47:35: 654:合併失敗時にチームチャット投稿