<?php
/**
 * Created by PhpStorm.
 * User: 86132
 * Date: 2020/7/6
 * Time: 10:13
 */

namespace app\api\controller;

use app\common\model\Company;
use think\Db;
use app\common\controller\Api;


/**
 * 团队接口
 */
class Team extends Api
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = '*';

    public function _initialize()
    {
        parent::_initialize();
    }


    /**
     * @ApiTitle    (团队接口-类型,行业展示)
     * @ApiSummary  (类型,行业展示)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/TypeIndustryList)
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    "data": [
    {
    "type2": [
    {
    "type": "类型",
    "type_id": "id"
    ]
    },
    {
    "industrys": [
    {
    "industry": "行业",
    "industry_id": "id"
    }
    ]
    }
    ]
    })
     */
    public function TypeIndustryList()
    {
        $type = Db::name('type')->select();
        $industry = Db::name('industry')->select();
        foreach ($type as $k => $v) {
            $type1[$k]['type'] = $v['type'];
            $type1[$k]['type_id'] = $v['id'];
        }
        foreach ($industry as $k => $v) {
            $industry1[$k]['industry'] = $v['industry'];
            $industry1[$k]['industry_id'] = $v['id'];
        }
        $return[]['types'] = $type1;
        $return[]['industrys'] = $industry1;
        $this->success('成功', $return);
    }


    /**
     * @ApiTitle    (团队接口-公司申请状态)
     * @ApiSummary  (公司申请状态)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/CompanyStatus)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    "data": {
    "type": 审核状态:0=审核未通过,1=审核已通过,2=待审核,3=未申请过
    }
    })
     */
    public function CompanyStatus()
    {
        $user_id = $this->is_token($this->request->header());
        $is_company_holder = Db::name('company')->where(['company_holder' => $user_id])->find();
        if (empty($is_company_holder)) {
            $type = 3;
        } else {
            $type = $is_company_holder['status'];
        }
        if ($type == 1) {
            Db::name('user')->where(['id' => $user_id])->update(['user_level' => 3]);
        }
        $return = [
            'type' => $type
        ];
        $this->success('成功', $return);
    }


    /**
     * @ApiTitle    (团队接口-申请公司团队)
     * @ApiSummary  (申请公司团队)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/ApplicationCompanyTeam)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="company_name", type="integer", required=true, description="公司名")
     * @ApiParams   (name="credit", type="integer", required=true, description="公司信用代码")
     * @ApiParams   (name="company_address", type="string", required=true, description="公司地址")
     * @ApiParams   (name="address_con", type="string", required=true, description="公司详细地址")
     * @ApiParams   (name="invoice_address", type="string", required=true, description="开票地址")
     * @ApiParams   (name="bank_name", type="string", required=true, description="银行名称")
     * @ApiParams   (name="bank_num", type="string", required=true, description="银行账号")
     * @ApiParams   (name="company_tel", type="string", required=true, description="注册电话")
     * @ApiParams   (name="register_tel", type="string", required=true, description="公司电话")
     * @ApiParams   (name="type_id", type="int", required=true, description="类型")
     * @ApiParams   (name="industry_id", type="int", required=true, description="行业")
     * @ApiParams   (name="paragraph", type="int", required=true, description="税号")
     * @ApiParams   (name="business_avatar", type="string", required=true, description="营业执照")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1', //申请中 审核状态接口[CompanyStatus]//code:9991
    'msg':'返回成功'
    "data": "1"
    })
     */
    public function ApplicationCompanyTeam()
    {
        $user_id = $this->is_token($this->request->header());
        $is_company = Db::name('company')->where(['company_holder' => $user_id])->find();
        if (!empty($is_company)) {
            $this->success('申请过或正在申请中', 1, 9991);
        }
        $param = $this->request->param();
        $data = [
            'company_name' => $param['company_name'],
            'credit' => $param['credit'],
            'company_address' => $param['company_address'],
            'address_con' => $param['address_con'],
            'invoice_address' => $param['invoice_address'],
            'bank_name' => $param['bank_name'],
            'bank_num' => $param['bank_num'],
            'company_tel' => $param['company_tel'],
            'register_tel' => $param['register_tel'],
            'type_id' => $param['type_id'],
            'industry_id' => $param['industry_id'],
            'business_avatar' => $param['business_avatar'],
            'paragraph' => $param['paragraph'],
            'status' => 2,
            'company_holder' => $user_id
        ];
        $model = new Company();
        $res = $model->save($data);
        if ($res) {
            Db::name('company')->where(['company_holder' => $user_id])->where(['status' => 0])->delete();
            $this->success('成功', 1);
        } else {
            $this->error('失败', 0);
        }
    }


    /**
     * @ApiTitle    (团队接口-加入公司列表)
     * @ApiSummary  (加入公司列表)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/InsertCompanyList)
     * @ApiParams   (name="keywords", type="string", required=true, description="搜索关键词[不搜索为空]")
     * @ApiParams   (name="pages", type="int", required=true, description="分页")
     * @ApiParams   (name="rows", type="int", required=true, description="数量")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    "data": {
    "count": "数据总数",
    "list": [
    {
    "company_name": "天津银河百荣科技有限公司",
    "company_id": "公司ID"
    }
    ]
    }
    })
     */
    public function InsertCompanyList()
    {
        $param = $this->request->param();
        $map = [];
        if (!empty($param['keywords'] || $param['keywords'] != null || $param['keywords'] != "")) {
            $map['company_name'] = ['like', '%' . $param['keywords'] . '%'];
        }
        $company = Db::name('company')->where($map)->page($param['pages'], $param['rows'])->where(['status' => 1])->select();
        $count = Db::name('company')->where($map)->where(['status' => 1])->select();
        if (!empty($company)) {
            foreach ($company as $k => $v) {
                $return[$k]['company_name'] = $v['company_name'];
                $return[$k]['company_id'] = $v['id'];
            }
            $return1['count'] = count($count);
            $return1['list'] = $return;
            $this->success('成功', $return1);
        } else {
            $return1['count'] = [];
            $return1['list'] = [];
            $this->success('成功', $return1);
        }
    }


    /**
     * @ApiTitle    (团队接口-申请加入)
     * @ApiSummary  (申请加入)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/ApplyToJoin)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="company_id", type="int", required=true, description="要加入的公司ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1', //'您已申请过加入其他团队,请耐心等待审核结果'code:9995//'您已加入其他公司团队,暂时不能加入其他团队'code:9996//'您已申请公司团队,暂时不能加入其他团队'code:9997
    'msg':'返回成功'
    "data": "1"
    })
     */
    public function ApplyToJoin()
    {
        $user_id = $this->is_token($this->request->header());
        $company_id = input('company_id');
        $is_company_holder = Db::name('company')->where(['company_holder' => $user_id])->find();
        if ($is_company_holder) {
            $this->success('您已申请公司团队,暂时不能加入其他团队', 1, 9997);
        }
        $is_team = Db::name('team')->where(['user_id' => $user_id])->where(['status' => 1])->find();
        if ($is_team) {
            $this->success('您已加入其他公司团队,暂时不能加入其他团队', 1, 9996);
        }
        $is_status = Db::name('team')->where(['user_id' => $user_id])->where(['status' => 3])->find();
        if ($is_status) {
            $this->success('您已申请过加入其他团队,请耐心等待审核结果', 1, 9995);
        }
        $is_ApplyToJoin = Db::name('team')->insert(['company_id' => $company_id, 'user_id' => $user_id, 'createtime' => time(), 'updatetime' => time(), 'status' => 3]);
        if ($is_ApplyToJoin) {
            Db::name('team')->where(['user_id' => $user_id])->where(['status' => 2])->delete();
            $this->success('申请已提交', 1);
        } else {
            $this->error('申请失败', 0);
        }
    }


    /**
     * @ApiTitle    (团队接口-公司成员管理-申请列表)
     * @ApiSummary  (申请列表)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/CompanyMemberManagementApplicationList)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="pages", type="int", required=true, description="分页")
     * @ApiParams   (name="rows", type="int", required=true, description="数量")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',  //code为9998 此用户不是公司持有人
    'msg':'返回成功'
    "data": {
    "count": 总数,
    "list": [
    {
    "username": "姓名",
    "id": 用户ID
    }
    ]
    }
    })
     */
    public function CompanyMemberManagementApplicationList()
    {
        $user_id = $this->is_token($this->request->header());
        $param = $this->request->param();
        $company_id = Db::name('company')->where(['company_holder' => $user_id])->value('id');
        if (empty($company_id)) {
            $this->success('', '', 9998);
        }
        $user_id_arr = Db::name('team')->where(['company_id' => $company_id])->where(['status' => 3])->page($param['pages'], $param['rows'])->select();
        $count = Db::name('team')->where(['company_id' => $company_id])->where(['status' => 3])->select();
        if (empty($user_id_arr)) {
            $return['count'] = [];
            $return['list'] = [];
            $this->success('成功', $return);
        }
        foreach ($user_id_arr as $k => $v) {
            $user_data[$k] = Db::name('user')->where(['id' => $v['user_id']])->select();
        }
        $user_data_arr = $this->three_arr($user_data);
        foreach ($user_data_arr as $k => $v) {
            $data[$k]['username'] = $v['username'];
            $data[$k]['id'] = $v['id'];
        }
        $return['count'] = count($count);
        $return['list'] = $data;
        $this->success('成功', $return);
    }


    /**
     * @ApiTitle    (团队接口-公司成员管理-公司成员)
     * @ApiSummary  (公司成员)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/CompanyMemberManagementCompanyMember)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    "data": "1"
    })
     */
    public function CompanyMemberManagementCompanyMember()
    {
        $user_id = $this->is_token($this->request->header());
        $param = $this->request->param();
        $company_id = Db::name('company')->where(['company_holder' => $user_id])->value('id');
        if (empty($company_id)) {
            $this->success('', '', 9998);
        }
        $user_id_arr = Db::name('team')->where(['company_id' => $company_id])->where(['status' => 1])->page($param['pages'], $param['rows'])->select();
        $count = Db::name('team')->where(['company_id' => $company_id])->where(['status' => 1])->select();
        if (empty($user_id_arr)) {
            $return['count'] = [];
            $return['list'] = [];
            $this->success('成功', $return);
        }
        foreach ($user_id_arr as $k => $v) {
            $user_data[$k] = Db::name('user')->where(['id' => $v['user_id']])->select();
        }
        $user_data_arr = $this->three_arr($user_data);
        foreach ($user_data_arr as $k => $v) {
            $data[$k]['username'] = $v['username'];
            $data[$k]['id'] = $v['id'];
        }
        $return['count'] = count($count);
        $return['list'] = $data;
        $this->success('成功', $return);
    }


    /**
     * @ApiTitle    (团队接口-公司成员管理-申请列表-操作成员)
     * @ApiSummary  (操作成员)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/OperationMember)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="type", type="int", required=true, description="1=同意,2=拒绝")
     * @ApiParams   (name="id", type="int", required=true, description="用户ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    "data": "1"
    })
     */
    public function OperationMember()
    {
        $user_id = $this->is_token($this->request->header());
        $param = $this->request->param();
        $company_id = Db::name('company')->where(['company_holder' => $user_id])->value('id');
        if ($param['type'] == 1) {
            $type = 1;
            Db::name('user')->where(['id' => $param['id']])->update(['user_level' => 2]);
        }
        if ($param['type'] == 2) {
            $type = 2;
        }
        $res = Db::name('team')->where(['company_id' => $company_id])->where(['user_id' => $param['id']])->update(['status' => $type]);
        if ($res) {
            $this->success('成功', 1);
        } else {
            $this->error('失败', 0);
        }
    }


    /**
     * @ApiTitle    (团队接口-公司成员管理-公司成员-删除成员)
     * @ApiSummary  (删除成员)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/DeleteMember)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="id", type="int", required=true, description="用户ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    "data": "1"
    })
     */
    public function DeleteMember()
    {
        $user_id = $this->is_token($this->request->header());
        $param = $this->request->param();
        $company_id = Db::name('company')->where(['company_holder' => $user_id])->value('id');
        $res = Db::name('team')->where(['company_id' => $company_id])->where(['user_id' => $param['id']])->delete();
        Db::name('user')->where(['id' => $param['id']])->update(['user_level' => 1]);
        if ($res) {
            $this->success('成功', 1);
        } else {
            $this->error('失败', 0);
        }
    }


    /**
     * @ApiTitle    (团队接口-我的公司)
     * @ApiSummary  (我的公司)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/MyCompany)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1', //还没有创建公司或加入公司 code=99993
    'msg':'返回成功'
    "data": {
    "company_name": "天津银河百荣科技有限公司",
    "type": 1=管理员,2=普通成员
    }
    })
     */
    public function MyCompany()
    {
        $user_id = $this->is_token($this->request->header());
        $is_company = Db::name('company')->where(['company_holder' => $user_id])->where(['status' => 1])->find();
        if (empty($is_company)) {
            $is_team = Db::name('team')->where(['user_id' => $user_id])->where(['status' => 1])->value('company_id');
            if (empty($is_team)) {
                $this->success('还没有创建公司或加入公司', '', 99993);
            }
            $company_name = Db::name('company')->where(['id' => $is_team])->value('company_name');
            $return = [
                'company_name' => $company_name,
                'type' => 2
            ];
            $this->success('成功', $return);
        }
        $return = [
            'company_name' => $is_company['company_name'],
            'type' => 1
        ];
        $this->success('成功', $return);
    }


    /**
     * @ApiTitle    (团队接口-我的公司-注销或退出公司)
     * @ApiSummary  (注销或退出公司)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/WriteOffOrWithdrawFromTheCompany)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="type", type="int", required=true, description="1=管理员[注销公司],2=普通成员[退出公司]")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    "data": "1"
    })
     */
    public function WriteOffOrWithdrawFromTheCompany()
    {
        $user_id = $this->is_token($this->request->header());
        $param = $this->request->param();
        if ($param['type'] == 1) {
            $company_id = Db::name('company')->where(['company_holder' => $user_id])->value('id');
            Db::name('team')->where(['company_id' => $company_id])->delete();
            Db::name('company')->where(['company_holder' => $user_id])->delete();
            $this->success('成功', 1);
        }
        if ($param['type'] == 2) {
            Db::name('team')->where(['user_id' => $user_id])->delete();
            $this->success('成功', 1);
        }
    }


    /**
     * @ApiTitle    (团队接口-我的公司-转移管理渲染)
     * @ApiSummary  (转移管理渲染)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/TransferManagementRendering)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    "data": [
    {
    "username": "3323231",
    "id": 4
    }
    ]
    })
     */
    public function TransferManagementRendering()
    {
        $user_id = $this->is_token($this->request->header());
        $company_id = Db::name('company')->where(['company_holder' => $user_id])->value('id');
        $user_id_arr = Db::name('team')->where(['company_id' => $company_id])->select();
        if (empty($user_id_arr)) {
            $return = [];
            $this->error('公司没有其他成员', $return);
        }
        foreach ($user_id_arr as $k => $v) {
            $user_arr[$k] = Db::name('user')->where(['id' => $v['user_id']])->select();
        }
        $user = $this->three_arr($user_arr);
        foreach ($user as $k => $v) {
            $return[$k]['username'] = $v['username'];
            $return[$k]['id'] = $v['id'];
        }
        $this->success('成功', $return);
    }


    /**
     * @ApiTitle    (团队接口-我的公司-转移管理)
     * @ApiSummary  (转移管理)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/Team/TransferManagement)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="id", type="int", required=true, description="要转移的用户ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    "data": {
    }
    })
     */

    public function TransferManagement()
    {
        $user_id = $this->is_token($this->request->header());
        $id = input('id');
        Db::name('company')->where(['company_holder' => $user_id])->update(['company_holder' => $id]);
        Db::name('user')->where('user_id', $user_id)->update(['user_level' => 1]);
        $res = Db::name('team')->where(['user_id' => $id])->delete();
        Db::name('user')->where('user_id', $id)->update(['user_level' => 3]);

        if ($res) {
            $this->success('成功', 1);
        } else {
            $this->error('失败', 0);
        }
    }
}