<?php
declare (strict_types = 1);
namespace App\Controller;

use App\JsonRpc\PublicRpcServiceInterface;
use App\Tools\CommonService;
use App\Tools\PublicData;
use App\Tools\Result;
use function Hyperf\Support\env;
use Hyperf\Context\Context;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
use ZipArchive;

/**
 * Class PublicController
 * @package App\Controller
 */
//#[AutoController]

class PublicController extends AbstractController
{
    #[Inject]
    protected ValidatorFactoryInterface $validationFactory;
    /**
     * @var PublicRpcServiceInterface
     */
    #[Inject]
    private $publicServiceClient;

    /**
     * 地区
     * @return array
     */
    public function getDistrictList()
    {
        $pid = $this->request->input("pid", 0);
        $data = [
            'pid' => $pid,
        ];
        $result = $this->publicServiceClient->getDistrictList($data);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 获取用户等级
     * @return array
     */
    public function getUserLevelList()
    {
        $requireData = $this->request->all();
        $result = $this->publicServiceClient->getUserLevelList($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 上传图片
     * @return array
     */
    public function uploadFile()
    {
        $urlN = new CommonService();
        $file = $this->request->file('file');
       
        try {
            if ($file == null) {
                return Result::error("未找到上传文件");
            }
 
            $data = CommonService::uploadFile($file, ['txt','png', 'jpg', 'png', 'jpeg', 'gif', 'xls', 'xlsx', 'pdf', 'xls', 'xlsx', 'doc', 'docx', 'ppt', 'zip', 'pptx', 'mp4', 'flv'], 'image');
            var_dump($data);
            if (isset($data['code'])&&$data['code'] != 200) {
                return Result::error($data['message']);
            }
            $data['imgUrl'] = $urlN->imgUrl($data['src']);
            $fileName = $file->getClientFilename();
            $data['oldFileName'] = $fileName;
            return Result::success($data, '上传成功');
        } catch (\Exception $e) {
            return Result::error($e->getMessage());
        }
    }
    /**
     * 添加用户等级
     * @return array
     */
    public function addUserLevel()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'name' => 'required',
            ],
            [
                'name.required' => '等级名不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->publicServiceClient->addUserLevel($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除用户等级
     * @return array
     */
    public function delUserLevel()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
            ],
            [
                'id.required' => 'ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->publicServiceClient->delUserLevel($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 更新用户等级
     * @return array
     */
    public function updateUserLevel()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'name' => 'required',
                'id' => 'required',
            ],
            [
                'id.required' => 'ID不能为空',
                'name.required' => '名称不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->publicServiceClient->updateUserLevel($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 城市列表
     * @return array
     */
    public function getCityList()
    {
        $requireData = $this->request->all();
        var_dump($requireData);
        $result = $this->publicServiceClient->getDistrictList($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 投诉举报
     * @return void
     */
    public function addComplaint()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'title' => 'required',
                'nature' => 'required',
                'nature_level0' => 'required',
                'name' => 'required',
                'mobile' => 'required',
                'describe' => 'required',
            ],
            [
                'title.required' => '标题不能为空',
                'nature.required' => '类型不能为空',
                'nature_level0.required' => '类型进度不能为空',
                'name.required' => '姓名不能为空',
                'mobile.required' => '手机号码不能为空',
                'describe.required' => '详细说明不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData = $this->request->all();
        $requireData['user_id'] = Context::get("UserId");
        if ($requireData['id']) {
            $result = $this->publicServiceClient->userUpLetterOfComplaint($requireData);
        } else {
            $result = $this->publicServiceClient->addLetterOfComplaint($requireData);
        }

        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 更新投诉举报信息
     * @return array
     */
    public function upComplaint()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
            ],
            [
                'id.required' => 'id不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        var_dump($requireData);
        if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
            $requireData['admin_id'] = Context::get("UserId");
        }
        $result = $this->publicServiceClient->upLetterOfComplaint($requireData);
        return $result ? Result::success([]) : Result::error($result['message']);
    }
    /**
     * 获取投诉列表
     * @return array
     */
    public function getComplaint()
    {

        $requireData = $this->request->all();
        $requireData['user_id'] = Context::get("UserId");
        if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
            unset($requireData['user_id']);
        }
        $result = $this->publicServiceClient->getLetterOfComplaint($requireData);
        if($result['code']==200){
            foreach ($result['data']['rows']as $key=>$val){
                $result['data']['rows'][$key]['created_at'] = date("Y-m-d",strtotime($val['created_at']));
            }
        }
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 获取投诉举报信息
     * @return array
     */
    public function getLetterOfComplaintInfo()
    {
        $requireData = $this->request->all();
        $requireData['user_id'] = Context::get("UserId");
        if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
            unset($requireData['user_id']);
        }
        $result = $this->publicServiceClient->getLetterOfComplaintInfo($requireData);
        if ($result) {
            $result['data']['judgment'] = $result['data']['judgment'] ? json_decode($result['data']['judgment']) : '';
            $result['data']['audio_and_video'] = $result['data']['audio_and_video'] ? json_decode($result['data']['audio_and_video']) : '';
            $result['data']['contract'] = $result['data']['contract'] ? json_decode($result['data']['contract']) : '';
            $result['data']['qualifications'] = $result['data']['qualifications'] ? json_decode($result['data']['qualifications']) : '';
        }
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 删除投诉举报信息
     * @return array
     */
    public function delLetterOfComplaint()
    {
        $requireData = $this->request->all();
        $requireData['user_id'] = Context::get("UserId");
        if (isset($requireData['is_admin']) && !empty($requireData['is_admin'])) {
            unset($requireData['user_id']);
        }
        $result = $this->publicServiceClient->delLetterOfComplaint($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取投诉分类信息
     * @return array
     */
    public function getLetterType()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'type' => 'required',
            ],
            [
                'type.required' => '类型不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->publicServiceClient->getLetterType($requireData);
        $rep = PublicData::buildMenuTree($result['data']);
        return $rep ? Result::success($rep) : Result::error("查询失败");
    }

    /**
     * @return array
     */
    public function getLetterTypeChildren()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'type' => 'required',
                'pid' => 'required',
            ],
            [
                'type.required' => '类型不能为空',
                'pid.required' => 'PID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $result = $this->publicServiceClient->getLetterType($requireData);
        return $result['code']==200 ? Result::success($result['data']) : Result::error("查询失败");
    }

    public function downloadFile(RequestInterface $request, ResponseInterface $response)
    {
        //验证是否有传参数
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'files' => 'required',
            ],
            [
                'files.required' => '文件不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['fileName'] = $requireData['fileName'] ?? '政讯通';
        //打包文件
        $zip = new ZipArchive();
        $fileType = 'zip';
        $date = date('Ymd');
        $filePath = $fileType . DIRECTORY_SEPARATOR . $date;
        $allDir = 'public' . DIRECTORY_SEPARATOR . $filePath;
        if (!is_dir($allDir)) {
            if (!mkdir($allDir, 0755, true)) {
                return Result::error('创建文件夹失败');
            }
        }
        $fileName = $requireData['fileName'] . time() . mt_rand(1, 1000000) . '.zip';
        $zipFileName = $allDir . DIRECTORY_SEPARATOR . $requireData['fileName'] . time() . mt_rand(1, 1000000) . '.zip';
//        $zipFileName = 'public/zip/files.zip';

        if ($zip->open($zipFileName, ZipArchive::CREATE) === true) {
            // 将要下载的文件逐个添加到zip文件中
//            $string = trim($requireData['files'], "[]'"); // 去掉最外层的方括号和单引号(注意:这里假设了单引号,如果是双引号则替换为 ")
//            $string = str_replace("'", '', $string); // 去掉所有剩余的单引号(如果原字符串中使用的是双引号,则替换为双引号)
//            $filePaths = explode(',', $string);
            foreach ($requireData['files'] as $filePathu) {
                $attachmentItem = 'public/' . $filePathu;
                $zip->addFile($attachmentItem, pathinfo($attachmentItem, PATHINFO_BASENAME));
            }
            // 关闭zip文件
            $zip->close();
            // 将zip文件提供给用户进行下载
//            readfile($zipFileName);
            $fileUrlName = explode("public", $zipFileName);
            return Result::success(['fileUrl' => env('HOST') . $fileUrlName[1]]);
        } else {
            return Result::error('无法创建zip文件');
        }
    }
    /**
     * 检测是否被处理
     * @return array
     */
    public function checkMeasure()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
            ],
            [
                'id.required' => 'id不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->checkMeasure($requireData);
        return $result['code'] == 200 ? Result::success() : Result::error("已经处理了");
    }
    /**
     * 获取职能部门
     * @return void
     */
    public function getDepartment()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'pid' => 'required',
            ],
            [
                'pid.required' => 'id不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        $result = $this->publicServiceClient->getDepartment($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
    }


    /**
     * 获取职能部门
     * @return array
     */
    public function getZhinengbumenList()
    {

        // 获取请求参数
        $requireData = $this->request->all();

        // 参数验证
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'page' => 'integer|min:1',
                'pagesize' => 'integer|min:1',
                'search' => 'string|nullable',
            ],
            [
                'page.integer' => 'page 必须是整数',
                'page.min' => 'page 必须大于等于 1',
                'pagesize.integer' => 'pagesize 必须是整数',
                'pagesize.min' => 'pagesize 必须大于等于 1',
                'search.string' => 'search 必须是字符串',
            ]
        );

        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }

        // 添加用户 ID
        $requireData['user_id'] = Context::get("UserId");

        // 调用服务客户端方法获取分页数据
        $result = $this->publicServiceClient->getZhinengbumenList($requireData);

        // 处理结果
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
    }

    /**
     * 添加职能部门
     * @return array
     */
    public function addZhinengbumen()
    {
        // 获取请求参数
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'name' => 'required|string|regex:/^[\x{4e00}-\x{9fa5}]+$/u',
                'pid' => 'required|integer',
            ],
            [
                'name.required' => 'name 不能为空',
                'name.string' => 'name 必须是字符串',
                'name.regex' => 'name 必须是汉字',
                'pid.required' => 'pid 不能为空',
                'pid.integer' => 'pid 必须是整数',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        // $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->addZhinengbumen($requireData);
        return $result['code'] == 200 ? Result::success() : Result::error("添加失败");
    }
    /**
     * 删除职能部门
     * @return array
     */
    public function delZhinengbumen()
    {
        $requireData = $this->request->all();

        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->delZhinengbumen($requireData);
        return $result['code'] == 200 ? Result::success() : Result::error("删除失败");
    }
    /**
     * 职能部门详情
     * @return array
     */
    public function getZhinengbumen()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getZhinengbumen($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
    }
    /**
     * 获取职能部门某pid的所有子级,默认0级
     * @return array
     */
    public function getPidZhinengbumen()
    {
        // 获取请求参数
        $requireData = $this->request->all();

        // 参数验证
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'pid' => 'integer|min:0',
            ],
            [
                'pid.integer' => 'pid 必须是整数',
                'pid.min' => 'pid 必须大于等于 0',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getPidZhinengbumen($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
    }
    /**
     * 修改职能部门名称
     * @return array
     */
    public function modZhinengbumen()
    {
        $requireData = $this->request->all();

        // 参数验证
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
                'name' => 'required|string|regex:/^[\x{4e00}-\x{9fa5}]+$/u',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
                'name.required' => 'name 不能为空',
                'name.string' => 'name 必须是字符串',
                'name.regex' => 'name 必须是汉字',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->modZhinengbumen($requireData);
        return $result['code'] == 200 ? Result::success() : Result::error("修改失败");
    }
    /**
     * 获取风格名称
     * @return array
     */
    public function getTemplateClass()
    {
        $requireData = $this->request->all();
        // 参数验证
        $validator = $this->validationFactory->make(
            $requireData,
            [
                // 'type' => 'required|integer',
            ],
            [
                // 'type.required' => 'type 不能为空',
                // 'type.integer' => 'type 必须是整数',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getTemplateClass($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
    }
    /**
     * 获取风格列表
     * @return array
     */
    public function getTemplateList()
    {
      
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'page' => 'required|integer|min:1',
                'page_size' => 'required|integer|min:1',
                'template_name' => 'string|nullable',
            ],
            [
                'page.required' => 'page 不能为空',
                'page.integer' => 'page 必须是整数',
                'page.min' => 'page 必须大于等于 1',
                'page_size.required' => 'page_size 不能为空',
                'page_size.integer' => 'page_size 必须是整数',
                'page_size.min' => 'page_size 必须大于等于 1',
                'template_name.string' => 'template_name 必须是字符串',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getTemplateList($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
    }
    /**
     * 获取风格详情
     * @return array
     */
    public function getTemplateInfo()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getTemplateInfo($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
    }
    /**
     * 删除模板
     */
    
     public function delTemplate()
    {
        
        $requireData = $this->request->all();
        var_dump($requireData);
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->delTemplate($requireData);
       
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 更新模板
     */
    public function updateTemplate()
    {
       
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
            ],
            [
                'id.required' => 'id不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
       
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->updateTemplate($requireData);
        var_dump($result,'1001010');
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 新增风格
     */
    public function addTemplate()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make($requireData, [
            'template_name' => 'required',
            'template_class_id' => 'required',
            'template_img' => 'required',
        ],
        [   
            'template_name.required' => '请输入模板名称',
            'template_class_id.required' => '请选择模板分类',
            'template_img.required' => '请上传模板图片',
        ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->addTemplate($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 新增板块
     */
    public function addSector()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                // 'id' => 'required|integer',
                'template_id'=>'required|integer',
                'sector_name'=>'required|string',
                'sector_code'=>'required|string',
                'page_type'=>'required|integer',
                'sector_img'=>'required|string',
            ],
            [
                // 'id.required' => 'id 不能为空',
                // 'id.integer' => 'id 必须是整数',
                'template_id.required' => '模板id 不能为空',
                'template_id.integer' => '模板id 必须是整数',
                'sector_name.required' => '板块名称 不能为空',
                'sector_name.string' => '板块名称 必须是字符串',
                'sector_code.required' => '板块代码 不能为空',
                'sector_code.string' => '板块代码 必须是字符串',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->addSector($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取板块信息
     */
    public function getSectorInfo()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getSectorInfo($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 添加板块
     */
    public function delSector()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->delSector($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 更新板块
     */
    public function updateSector()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->updateSector($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取板块信息列表
     */
    public function getSectorList(){
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'page' => 'required|integer|min:1',
                'page_size' => 'required|integer|min:1',
            ],
            [
                'page.required' => 'page 不能为空',
                'page.integer' => 'page 必须是整数',
                'page.min' => 'page 必须大于等于 1',
                'page_size.required' => 'page_size 不能为空',
                'page_size.integer' => 'page_size 必须是整数',
                'page_size.min' => 'page_size 必须大于等于 1',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getSectorList($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /*
    * 获取板块列表
    */
    public function getComponentInfo()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getComponentInfo($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除板块
     */
    public function delComponent()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->delComponent($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function addComponent()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'template_id' => 'required|integer',
                'sector_id' => 'required|integer',
                'component_name' => 'required|string',
                'component_img' => 'required|string',
                'component_code' => 'required|string',
            ],
            [
                'template_id.required' => 'template_id 不能为空',
                'template_id.integer' => 'template_id 必须是整数',
                'sector_id.required' => 'sector_id 不能为空',
                'sector_id.integer' => 'sector_id 必须是整数',
                'component_name.required' => 'component_name 不能为空',
                'component_name.string' => 'component_name 必须是字符串',
                'component_type.required' => 'component_type 不能为空',
                'component_type.integer' => 'component_type 必须是整数',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        // $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->addComponent($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function getComponentList()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'page' => 'required|integer|min:1',
                'page_size' => 'required|integer|min:1',
            ],
            [
                'page.required' => 'page 不能为空',
                'page.integer' => 'page 必须是整数',
                'page.min' => 'page 必须大于等于 1',
                'page_size.required' => 'page_size 不能为空',
                'page_size.integer' => 'page_size 必须是整数',
                'page_size.min' => 'page_size 必须大于等于 1',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getComponentList($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function updateComponent()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        // $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->updateComponent($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function getWebsiteTemplateList()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'page' => 'required|integer|min:1',
                'page_size' => 'required|integer|min:1',
            ],
            [
                'page.required' => 'page 不能为空',
                'page.integer' => 'page 必须是整数',
                'page.min' => 'page 必须大于等于 1',
                'page_size.required' => 'page_size 不能为空',
                'page_size.integer' => 'page_size 必须是整数',
                'page_size.min' => 'page_size 必须大于等于 1',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getWebsiteTemplateList($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }

    public function getWebsiteTemplateInfo()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
            ],
            [
                'id.required' => 'id 不能为空',
                'id.integer' => 'id 必须是整数',
            ]
        );
         if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->publicServiceClient->getWebsiteTemplateInfo($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 获取所有的职能部门
     * @return array
     */
    public function getAllDepartment()
    {
        $result = $this->publicServiceClient->getDepartment([]);
        $result['data'] = PublicData::buildMenuTree($result['data']);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error("查询失败");
    }
}