<?php

declare (strict_types=1);

namespace app\command;

use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\facade\Db;
use think\facade\Log;
use app\common\api\TalentState;
use app\common\api\MenuApi;
use app\admin\model\SysRelation;
use app\admin\model\User;
use app\common\model\TalentChecklog;
use app\common\state\ProjectState;
use app\common\api\TalentLogApi;
use app\common\api\VerifyApi;
use app\enterprise\model\Talent as TalentModel;

/**
 * 人才认定部门审核检查
 */
class DeptVerifyChecker extends Command {

    protected function configure() {
        // 指令配置
        $this->setName('DeptVerifyChecker')
                ->setDescription('Dept Verify Checker');
    }

    protected function execute(Input $input, Output $output) {
        $where[] = ["e.type", "=", 1];
        $where[] = ["ti.checkState", "=", TalentState::FST_VERIFY_PASS];
        $where[] = ["ti.pass_dept_check", "=", 0];
        $jjrc_list = TalentModel::alias("ti")
                        ->leftJoin("new_talent_condition tc", "tc.id=ti.talent_condition")
                        ->leftJoin("un_enterprise e", "e.id=ti.enterprise_id")
                        ->where($where)->field("ti.id,tc.companyIds,ti.re_check_companys")->select()->toArray();
        $jjrc_counts = [];
        foreach ($jjrc_list as $item) {
            $companyIds = array_filter(explode(",", $item["companyIds"]));
            $pass_companyIds = TalentLogApi::getPassDepts($item["id"]); //已经通过的单位
            $re_check_companys = $item["re_check_companys"] ? array_filter(explode(",", $item["re_check_companys"])) : [];
            $companyIds = VerifyApi::getNewReCheckCompanyIds($re_check_companys, $companyIds, $pass_companyIds);
            $unpass_companyIds = array_diff($companyIds, (array) $pass_companyIds); //排除已经通过的单位
            foreach ($unpass_companyIds as $companyId) {
                $jjrc_counts[$companyId] += 1;
            }
        }

        /* $where[] = ["type", "=", ProjectState::TALENT];
          $where[] = ["step", "=", 3];
          $where[] = ["active", "=", 0];
          $jjrc_list = TalentChecklog::where($where)->column("companyId");

          $jjrc_counts = [];
          for ($i = 0; $i < count($jjrc_list); $i++) {
          $jjrc_counts[$jjrc_list[$i]] += 1;
          } */
        $codes = ["talentInfo_depCheck"];
        $menuIds = MenuApi::getMenuIdsByCodes($codes);

        $where = [];
        $where[] = ["menuid", "in", $menuIds];
        $roleIds = SysRelation::where($where)->group("roleid")->having("count(*)=" . count($codes))->column("roleid");
        foreach ($jjrc_counts as $companyId => $count) {
            $where = [];
            $where[] = ["type", "=", 1];
            $where[] = ["status", "=", 1];
            $where[] = ["roleid", "<>", 1];
            $where[] = ["companyId", "=", $companyId];
            $regstr = ",(" . implode("|", $roleIds) . "),";
            $whereRaw = "concat(',',roleid,',') REGEXP '$regstr'";
            $users = User::where($where)->whereRaw($whereRaw)->select()->toArray();
            foreach ($users as $user) {
                if ($user["phone"]) {
                    queue("app\job\Messenger", ["type" => 3, "userId" => $user["id"], "name" => $user["name"], "phone" => $user["phone"], "count" => $count]);
                }
            }
        }
    }

}
