Example #1
0
function userActionUpdate($user_code, $action_code, $action_value)
{
    // 取行为规则
    $action = M(TB_DET_USER_ACTION_CONFIG)->where("action_code = {$action_code}")->select();
    for ($i = 0; $i < count($action); $i++) {
        // 可变更新值取对应的实际值
        if (!$action[$i]['update_value']) {
            $condition = $action[$i]['code_column'] . ' = ' . $action_value;
            $value = M($action[$i]['table_name'])->where("{$condition}")->find();
            $action[$i]['update_value'] = $value[$action[$i]['value_column']];
        }
        // 计算需要更新的值
        $data[$action[$i]['update_type']] = $action[$i]['update_value'] * $action[$i]['update_logic'];
    }
    // 更新用户账户信息表中的金币积分等级
    if (userAccoutUpdate($user_code, $data)) {
        // 写日志必要字段赋值
        $log['user_code'] = $user_code;
        // 用户编码
        $log['action_time'] = date('Y-m-d H:i:s');
        // 行为发生时间
        $log['action_code'] = $action_code;
        // 行为编码
        $log['action_value'] = $action_value;
        // 行为值
        // 对需要写日志的行为做处理
        for ($i = 0; $i < count($action); $i++) {
            if ($action[$i]['write_log'] == 1) {
                $condition = $action[$i]['code_column'] . ' = ' . $action_value;
                $value = M($action[$i]['table_name'])->where("{$condition}")->find();
                $log['action_name'] = $value[$action[$i]['desc_column']];
                // 行为名称
                $log['action_type'] = $action[$i]['update_type'];
                // 行为类型
                $log['change_value'] = $action[$i]['update_value'] * $action[$i]['update_logic'];
                // 数据写入日志表
                if (!insertTable(TB_BAS_USER_ACTION_LOG, $log)) {
                    return false;
                }
            }
        }
        // 判断是否需要更新用户等级
        $userAccout = M(TB_BAS_USER_ACCOUT)->where("user_code = '{$user_code}'")->find();
        // 取当前用户账户信息
        $condition = "score_lower_value <= " . $userAccout['user_score'] . " and score_upper_value >= " . $userAccout['user_score'];
        $level = M(TB_DET_USER_LEVEL)->where($condition)->find();
        // 取需要的积分规则
        // 如果计算出的最新等级与之前等级不同,更新用户最新等级
        if ($level['user_level_value'] != $userAccout['user_level']) {
            $accout['user_level'] = $level['user_level_value'];
            if (!userAccoutAlter($user_code, $accout)) {
                return false;
            }
        }
    } else {
        return false;
    }
    // 所有更新顺利完成返回true
    return true;
}
Example #2
0
function api_user_accout_update()
{
    $action = func_get_args()[0]['action'];
    // 取参数:用户行为
    $times_type = func_get_args()[0]['times_type'];
    // 取参数:次数类型
    $times_type = $_POST['times_type'];
    $action = json_decode($_POST['action'], true);
    // 用户行为信息
    $action['action_time'] = date('Y-m-d H:i:s');
    // 行为发生时间
    $user_code = $action['user_code'];
    $action_code = $action['action_code'];
    if ($times_type) {
        $times_type = $times_type . '_times';
    }
    // 取行为编码对应行为规则信息合并到用户行为信息数据中
    $actionConfig = M(TB_DET_USER_ACTION_CONFIG)->where("action_code = '{$action_code}'")->find();
    $action = array_merge($actionConfig, $action);
    // 生成行为名称$action['action_name']
    $condition = $action['action_column'] . '=' . $action['action_value'];
    $dtAction = M($action['action_table'])->where("{$condition}")->find();
    $target = $action['action_target'];
    $action['action_name'] = $dtAction[$target];
    // 取两个行为日志表表结构
    $keyBasScoreActionLog = M(TB_BAS_SCORE_ACTION_LOG)->getDbFields();
    $keyBasCoinsActionLog = M(TB_BAS_COINS_ACTION_LOG)->getDbFields();
    // 生成两个行为日志表对应字段的数据
    $action_score = arrayExtract($action, $keyBasScoreActionLog);
    $action_coins = arrayExtract($action, $keyBasCoinsActionLog);
    // 计算需要更新的用户积分值和金币值
    $accout_add['user_score'] = $action['score_value'] * $action['score_logic'];
    $accout_add['user_coins'] = $action['coins_value'] * $action['coins_logic'];
    if ($times_type) {
        $accout_add["{$times_type}"] = 1;
    }
    // 更新用户账户信息表中的金币积分等级
    if (userAccoutUpdate($user_code, $accout_add)) {
        if ($action_score['score_value']) {
            $res_sc = userActionAdd($action_score, 'score');
            // 用户积分累计日志
            // 如果更新过用户积分,再判断是否需要更新用户等级
            $userAccout = M(TB_BAS_USER_ACCOUT)->where("user_code = '{$user_code}'")->find();
            // 取当前用户账户信息
            $condition = "score_lower_value <= " . $userAccout['user_score'] . " and score_upper_value >= " . $userAccout['user_score'];
            $userLvl = M(TB_DET_USER_LEVEL)->where($condition)->find();
            // 取需要的积分规则
            // 如果计算出的最新等级与之前等级不同,更新用户最新等级
            if ($userLvl['user_level_value'] != $userAccout['user_level']) {
                $userAc['user_level'] = $userLvl['user_level_value'];
                alterUserAccout($user_code, $userAc);
            }
        }
        if ($action_coins['coins_value']) {
            $res_co = userActionAdd($action_coins, 'coins');
            // 用户金币使用日志
        }
    }
    if ($res_sc && $res_co) {
        $this->ajaxReturn(1, "success", 1);
    } else {
        $this->ajaxReturn(0, "failed", 0);
    }
}