ProjectAssociationController.php 4.4 KB
<?php

namespace App\Http\Controllers\Bside\ProjectAssociation;

use App\Enums\Common\Code;
use App\Exceptions\BsideGlobalException;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Aside\ProjectAssociation\ProjectAssociationLogic;
use App\Models\ProjectAssociation\ProjectAssociation;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;

class ProjectAssociationController extends BaseController
{
    private $ProjectAssociationLogic;

    public function __construct(Request $request)
    {
        $this->ProjectAssociationLogic = new ProjectAssociationLogic();
        parent::__construct($request);
    }

    /**
     * V6与AICC数据关联
     * @return void
     * @throws BsideGlobalException
     */
    public function saveWeChatData()
    {
        $project_id = (int)request()->post('project_id', 0);
        if (empty($project_id)) {
            $this->fail('请选择项目!', Code::USER_PARAMS_ERROE);
        }
        $status = (bool)request()->post('status', 1); # 1 - 正常, 0 - 禁用

        $user_id = (int)env('AICC_WECHAT_USER_ID') ?? 0;
        if (empty($user_id) && $status) {
            $this->fail('请选择要绑定的AICC用户!', Code::USER_PARAMS_ERROE);
        }
        $friend_id = (int)request()->post('friend_id', 0);
        if (empty($friend_id) && $status) {
            $this->fail('请选择要绑定的AICC用户列表!', Code::USER_PARAMS_ERROE);
        }
        $nickname  = request()->post('nickname', '');
        $user_name = request()->post('user_name', '');
        $image     = request()->post('image', '');
        $data      = compact('project_id', 'user_id', 'friend_id', 'nickname', 'user_name', 'image');
        $this->ProjectAssociationLogic->saveWeChatData($data);
        $this->response('success');
    }

    /**
     * 获取aicc用户列表 并返回绑定的数据
     * @return array|void
     */
    public function check()
    {
        $project_id = (int)request()->input('project_id', 0);
        $status     = request()->input('status');
        // 重载redis缓存
        $cache = request()->input('cache');
        if (isset($status)) {
            $status = (int)$status ? ProjectAssociation::STATUS_NORMAL : ProjectAssociation::STATUS_DISABLED;
        }
        $isRes = $this->ProjectAssociationLogic->normal($project_id);
        DB::beginTransaction();
        try {
            // 当数据不存在时并开启状态,自动添加一条数据
            if (is_null($isRes) && (!is_null($status) && $status)) {
                $isRes = $this->ProjectAssociationLogic->disabled($project_id);
                if (is_null($isRes)) {
                    $isRes = new ProjectAssociation();
                }
                $isRes->project_id = $project_id;
                $isRes->user_id    = (int)env('AICC_WECHAT_USER_ID');
                $isRes->status     = $status;
                $isRes->save();
                DB::commit();
            } // 关闭状态
            elseif (!is_null($isRes) && (!is_null($status) && empty($status))) {
                $isRes->status = $status;
                $isRes->save();
                DB::commit();
                return [
                    'code'    => Code::SUCCESS,
                    'data'    => [],
                    'message' => '关闭AICC绑定成功!',
                ];
            }
        } catch (\Exception $exception) {
            DB::rollBack();
            // 数据错误,请重试
            $this->response('error', Code::SERVER_ERROR);
        }
        if (is_null($isRes)) {
            // 请开启AICC绑定
            $this->response('success', Code::SERVER_ERROR);
        }
        $redis_key = 'aicc_friend_lists_' . (int)env('AICC_WECHAT_USER_ID');
        $result    = isset($cache) ? false : redis_get($redis_key);
        if (empty($result)) {
            $url    = env('AICC_URL') . env('AICC_WECHAT_FRIEND_API_URL');
            $result = curlGet($url);
            redis_set($redis_key, json_encode($result), 60);
        } else {
            $result = json_decode($result, true);
        }

        $result['info'] = [
            'friend_id' => $isRes->friend_id ?? 0,
            'nickname'  => $isRes->nickname ?? '',
            'user_name' => $isRes->user_name ?? '',
            'image'     => $isRes->image ?? '',
        ];
        $this->response('success', Code::SUCCESS, $result);
    }
}