<?php
/**
 * ReturnUserReward.php  UTF-8
 * 新用户奖励回退
 *
 * @date    : 2018/10/25 15:55
 *
 * @license 这不是一个自由软件,未经授权不许任何使用和传播。
 * @author  : chenbingling <cbl@huosdk.com>
 * @version : HuoMap 1.0
 */

namespace console\index\controller;

use huo\controller\agent\AgentCache;
use huo\controller\common\CommonFunc;
use huo\controller\member\MemCache;
use huo\model\integral\MemItgLogModel;
use huo\model\user\UserModel;
use huolib\constant\IaConst;
use huomp\model\member\UnusualMemModel;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\Log;

class ReturnUserReward extends Command {
    protected function configure() {
        $this->setName('return_user_reward')->setDescription('新用户奖励bug,数据修复');
    }

    protected function execute(Input $input, Output $output) {
        set_time_limit(0);
        $_mil_model = new MemItgLogModel();
        $_agent_model = new UserModel();
        $_um_model = new UnusualMemModel();
        $_all_list = $_mil_model->field('mem_id,count(mem_id) AS mem_count')
                                ->where(
                                    'itg_type = 1 AND sub_ia_id = 81234671 AND ia_id = 12 AND create_time > 1540396800 AND is_delete=2'
                                )
                                ->group('mem_id')
                                ->having('count(mem_id) > 1')->select();
        foreach ($_all_list as $member) {
            $_agent_id = $_agent_model->getIdByMemId($member['mem_id']);
            if (empty($_agent_id)) {
                Log::write('新用户奖励bug,数据修复,set1玩家信息'.json_encode($member), Log::ERROR);
                continue;
            }
            $_where = [
                'mem_id'    => $member['mem_id'],
                'is_delete' => 2,
            ];
            $_field = ['id,itg_type,integral_total,my_integral,integral,ia_id'];
            $_list = $_mil_model->where($_where)->field($_field)->order('id asc')->select();
            if (!empty($_list)) {
                $_list = $_list->toArray();
                $_itg_total = 0;  //修正总积分
                $_my_integral = 0;  //修正玩家当前积分
                $_err_total = 0; //错误总积分
                foreach ($_list as $_k => $_v) {
                    $_err_total = $_v['integral_total'];
                    if (0 == $_k || 1 == $_k) {
                        $_itg_total = $_v['integral_total'];
                        $_my_integral = $_v['my_integral'];
                        continue;
                    }
                    $_map = ['id' => $_v['id']];
                    $_time = time();
                    if (IaConst::IA_OPEN_GAME == $_v['ia_id']) {
                        $_up_data = [
                            'is_delete'   => 1,
                            'delete_time' => $_time
                        ];
                    } else {
                        if (1 == $_v['itg_type']) {
                            $_itg_total += $_v['integral'];
                            $_my_integral += $_v['integral'];
                            $_up_data = [
                                'integral_total' => $_itg_total,
                                'my_integral'    => $_my_integral,
                            ];
                        } else {
                            $_up_data = [
                                'integral_total' => $_itg_total,
                                'my_integral'    => $_my_integral - $_v['integral'],
                            ];
                        }
                    }
                    $_mil_model->where($_map)->update($_up_data);
                }
                $_cha_total = $_err_total - $_itg_total;
                if (!empty($_cha_total)) {
                    /* 玩家余额回滚 */
                    $_money = ($_cha_total / CommonFunc::getGoldRmbRate());
                    $_ae_data = AgentCache::ins()->getAgentExtByAgentId($_agent_id);
                    $_share_total = $_ae_data['share_total'];
                    $_share_remain = $_ae_data['share_remain'];
                    $_share_total -= $_money;
                    $_share_remain -= $_money;
                    $_ae_data['share_total'] = $_share_total > 0 ? $_share_total : 0;
                    $_ae_data['share_remain'] = $_share_remain > 0 ? $_share_remain : 0;
                    AgentCache::ins()->updateAgentExt($_agent_id, $_ae_data, true);
                    /* 玩家积分回滚 */
                    $_me_data = MemCache::ins()->getMeInfoById($member['mem_id']);
                    $_me_data['integral_total'] = $_itg_total > 0 ? $_itg_total : 0;
                    $_me_data['my_integral'] = $_my_integral > 0 ? $_my_integral : 0;
                    MemCache::ins()->updateMeCache($member['mem_id'], $_me_data);
                }
            }
            /* 删除玩家标记 */
            $_um_model->deleteByAgentId($_agent_id);
        }
    }
}