<?php

namespace app\common\api;

use app\common\model\Dict;
use think\Facade\Db;

/**
 * Description of DictApi
 *
 * @author sgq
 */
class DictApi {

    public static function create($params) {
        $data["code"] = $params["dictCode"];
        $data["name"] = $params["dictName"];
        $data["tips"] = $params["dictTips"];
        $data["pid"] = 0;
        $values = $params["dictValues"];
        if (self::isExistByCode($data["code"]))
            return ["msg" => sprintf("编码[%s]已经存在", $data["code"])];
        $items = array_filter(explode(";", $values));
        $id = Dict::insertGetId($data);
        $childs = [];
        for ($i = 0; $i < count($items); $i++) {
            $fields = array_filter(explode(":", $items[$i]));
            $childs[] = ["pid" => $id, "code" => $fields[0], "name" => $fields[1], "num" => $fields[2]];
        }
        Dict::insertAll($childs);
        return ["code" => 200, "msg" => "成功"];
    }

    public static function update($params) {
        $data["id"] = $params["dictId"];
        $data["code"] = $params["dictCode"];
        $data["name"] = $params["dictName"];
        $data["tips"] = $params["dictTips"];
        $data["pid"] = 0;
        $values = $params["dictValues"];
        if (self::isExistByCode($data["code"], $params["dictId"]))
            return ["msg" => sprintf("编码[%s]已经存在", $data["code"])];
        $items = array_filter(explode(";", $values));
        Dict::update($data);
        //删除原来的子项
        Dict::where(["pid" => $params["dictId"]])->delete();
        $childs = [];
        for ($i = 0; $i < count($items); $i++) {
            $fields = array_filter(explode(":", $items[$i]));
            $childs[] = ["pid" => $params["dictId"], "code" => $fields[0], "name" => $fields[1], "num" => $fields[2]];
        }
        Dict::insertAll($childs);
        return ["code" => 200, "msg" => "成功"];
    }

    public static function delete($id) {
        Dict::where(["id" => $id])->delete();
        Dict::where(["pid" => $id])->delete();
        return ["code" => 200, "msg" => "成功"];
    }

    public static function isExistByCode($code, $id = 0) {
        $where = [];
        if ($id > 0) {
            $where[] = ["id", "<>", $id];
        }
        $where[] = ["code", "=", $code];
        $dict = Dict::where($where)->findOrEmpty()->toArray();
        return $dict;
    }

    /**
     * 获取一条
     * @param type $id
     * @return type
     */
    public static function getOne($id) {
        $info = Dict::where("id", $id)->findOrEmpty()->toArray();
        if ($info) {
            $items = Dict::where("pid", "=", $id)->select()->toArray();
            $info["children"] = $items;
        }
        return $info;
    }

    /**
     * 获取列表
     * @param type $request
     * @return type
     */
    public static function getList($request) {
        $order = trim($request->param("order")) ?: "desc";
        $offset = trim($request->param("offset")) ?: 0;
        $limit = trim($request->param("limit")) ?: 10;
        $name = trim($request->param("condition"));
        $where = [];
        $where[] = ["pid", "=", "0"];
        if ($name) {
            $where[] = ["name", "like", "%" . $name . "%"];
        }
        $count = Dict::where($where)->count();
        $list = Dict::where($where)->limit($offset, $limit)->order("id " . $order)->select()->toArray();
        foreach ($list as &$item) {
            $items = Dict::where("pid", "=", $item["id"])->column("name");
            $item["detail"] = implode(",", $items);
        }
        return ["total" => $count, "rows" => $list];
    }

    /**
     * 
     * @param type $code
     * @return type
     */
    public static function selectByParentCode($code) {
        $parent = Dict::where("code", $code)->findOrEmpty()->toArray();
        $dictList = Dict::where("pid", $parent["id"])->select()->toArray();
        $tmp = [];
        foreach ($dictList as $dict) {
            $tmp[$dict["code"]] = $dict["name"];
        }
        return $tmp;
    }

    /**
     * 
     * @param type $code
     * @return type
     */
    public static function findChildDictByCode($code) {
        $parent = Dict::where("code", $code)->findOrEmpty()->toArray();
        $dictList = Dict::where("pid", $parent["id"])->select()->toArray();
        return $dictList;
    }

    public static function findDictByCode($code) {
        $dict = Dict::where("code", $code)->findOrEmpty();
        return $dict;
    }

    public static function getIntegralFields() {
        return [
            "name" => "姓名",
            "card_type" => "证件类型",
            "card_number" => "证件号码",
            "phone" => "手机号码",
            "email" => "电子邮箱",
            "shareholder" => "是否股东"
        ];
    }

    public static function getTalentFields($step, $isImport = 0) {
        $dict1 = [
            "name" => "姓名",
            "nation" => "民族",
            "headimgurl" => "头像",
            "card_type" => "证件类型",
            "card_number" => "证件号码",
            "sex" => "性别",
            "birthday" => "出生日期",
            "politics" => "政治面貌",
            "nationality" => "国籍/地区",
            "province" => "籍贯省",
            "city" => "籍贯市",
            "county" => "籍贯县",
            "talent_type" => "人才类型",
            "fst_work_time" => "来晋工作时间",
            "tax_insurance_month" => "在我市缴交社会保险或个人所得税月份",
            "labor_contract_rangetime" => "劳动合同起止时间",
            "salary_pay_way" => "工资发放渠道",
            "salary_pay_month" => "工资发放月份",
            "pre_import_type" => "预引进类型",
            "return" => "流出晋江满3年后又返回晋江的",
            "import_way" => "引进方式",
            "cur_entry_time" => "本单位入职时间",
            "position" => "本单位现任职务",
            "experience" => "工作简历",
            "education" => "教育背景",
        ];
        $dict2 = [
            "apply_year" => "申报年度",
            "phone" => "手机号码",
            "email" => "电子邮箱",
            "highest_degree" => "最高学历",
            "graduate_school" => "毕业院校",
            "major" => "专业",
            "study_abroad" => "是否有留学经历",
            "abroad_school" => "留学毕业院校",
            "abroad_major" => "留学专业",
            "pro_qua" => "职业资格",
            "professional" => "专业技术职称",
        ];
        if ($isImport) {
            $dict2["isMatchZhiren"] = "是否符合直认条件";
        }
        $dict2_ = [
            "source" => "申报来源",
            "source_city" => "入选来源地级市",
            "source_county" => "入选来源县市区",
            "talent_arrange" => "人才层次",
            "talent_arrange_category" => "人才条款",
            "talent_condition" => "认定条件",
            "identifyGetTime" => "认定条件取得时间",
            "annual_salary" => "上一年度年薪(元)",
            "bank" => "开户银行",
            "bank_number" => "银行行号",
            "bank_branch_name" => "开户银行网点",
            "bank_account" => "个人银行账号"
                //"source_batch" => "入选名单的文件号及批次",
                //"fujian_highcert_pubtime" => "福建省高层次人才证书发证日期",
                //"fujian_highcert_exptime" => "福建省高层次人才证书有效期",
                //"quanzhou_highcert_pubtime" => "泉州高层次人才证书发证日期",
                //"quanzhou_highcert_exptime" => "泉州高层次人才证书有效期",
        ];
        $dict2 = array_merge($dict2, $dict2_);
        if ($step == 1) {
            return $dict1;
        }
        if ($step == 2) {
            return $dict2;
        }
        if ($step == 3) {
            return null;
        }
        return array_merge($dict1, $dict2);
    }

    public static function getTalentFields_IC() {
        $dict = [
            "name" => "姓名",
            "card_type" => "证件类型",
            "card_number" => "证件号码",
            "sex" => "性别",
            "birthday" => "出生日期",
            "nationality" => "国籍/地区",
            "province" => "籍贯省",
            "city" => "籍贯市",
            "county" => "籍贯县",
            "nation" => "民族",
            "politics" => "政治面貌",
            "break_faith" => "是否曾被相关主管部门列为失信个人",
            "phone" => "手机号码",
            "email" => "电子邮箱",
            "highest_degree" => "最高学历",
            "graduate_school" => "毕业院校",
            "major" => "专业",
            "study_abroad" => "是否有留学经历",
            "position" => "职务",
            "cur_entry_time" => "入职时间",
            "labor_contract_rangetime" => "工作合同起止时间",
            "talent_arrange" => "人才层次",
            "talent_condition" => "认定条件",
            "identifyConditionName" => "认定条件名称",
            "identifyGetTime" => "认定条件取得时间",
            "title" => "职称",
            "pro_qua" => "国家职业资格",
            "bank" => "开户银行",
            "bank_branch_name" => "开户银行网点",
            "bank_account" => "银行账号",
            "education" => "教育背景及工作简历",
            "experience" => "主要业绩及取得的荣誉",
            "description" => "备注",
            "headimgurl" => "头像"
        ];
        return $dict;
    }

    // 1保存未提交 2已提交未审核 3已审核 4驳回 5保存补充材料未提交 6提交补充材料进入初审 7初审通过 8初审驳回 9部门审核通过 10部门审核驳回 11复核通过 12复核驳回 13复核失败
    public static function getCheckLogStepName($state, $step) {
        $stepName = "";
        switch ($state) {
            case -1:
            case 3:
            case 4:
                $stepName = '<span class="label label-primary">基础信息审核</span>';
                break;
            case 5:
            case 6:
            case 7:
                $stepName = '<span class="label label-primary">基础信息复审</span>';
                break;
            case -2:
            case 10:
            case 11:
                if ($step == 3) {
                    $stepName = '<span class="label label-primary">部门审核</span>';
                } else {
                    $stepName = '<span class="label label-primary">初级审核</span>';
                }
                break;
            case 12:
            case 13:
                $stepName = '<span class="label label-primary">部门审核</span>';
                break;
            case 14:
            case 15:
                $stepName = '<span class="label label-info">复核</span>';
                break;
            case 16:
                $stepName = '<span class="label label-danger">审核不通过</span>';
                break;
            case 21:
            case 22:
                $stepName = '<span class="label label-info">核查征信</span>';
                break;
            case 23:
            case 24:
            case 25:
                $stepName = '<span class="label label-info">公示</span>';
                break;
            case 26:
            case 27:
                $stepName = '<span class="label label-info">公布</span>';
                break;
            case 28:
                $stepName = '<span class="label label-inverse">发放人才码</span>';
                break;
            default:
                switch ($step) {
                    case 60:
                        $stepName = '<span class="label">取消优秀人才</span>';
                        break;
                    case 65:
                        $stepName = '<span class="label">恢复优秀人才</span>';
                        break;
                    default:
                        $stepName = '<span class="label">用户操作</span>';
                        break;
                }
                break;
        }
        return $stepName;
    }

    public static function getTalentInfoStateName($state, $step = 0, $last_state = 0) {
        $str = "";
        switch ($state) {
            case -2:
                $str = '<span class="label label-danger">初审失败</span>';
                break;
            case -1:
                $str = '<span class="label label-danger">基础信息审核失败</span>';
                break;
            case 1:
                if ($last_state > $state) {
                    $str = '<span class="label label-danger">基础信息审核驳回</span>';
                } else {
                    $str = '<span class="label">待提交基础信息</span>';
                }
                break;
            case 2:
                /* if ($last_state > $state) {
                  $str = '<span class="label label-success">待重审</span>';
                  } else */
                if ($last_state == 3) {
                    $str = '<span class="label label-danger">基础信息复审驳回</span>';
                } else {
                    $str = '<span class="label label-success">待审核</span>';
                }
                break;
            case 3:
                $str = '<span class="label label-primary">基础信息审核通过</span>';
                break;
            case 4:
                $str = '<span class="label">再提交基础信息</span>';
                break;
            case 5:
                $str = '<span class="label label-primary">基础信息复审通过</span>';
                break;
            case 6:
                $str = '<span class="label label-danger">基础信息复审驳回</span>';
                break;
            case 7:
                $str = '<span class="label label-danger">基础信息复审失败</span>';
                break;
            case 8:
                if ($last_state > $state) {
                    $str = '<span class="label label-danger">初审驳回</span>';
                } else {
                    $str = '<span class="label">待提交认定材料</span>';
                }
                break;
            case 9:
                if ($step == 3) {
                    $str = '<span class="label label-danger">部门驳回</span>';
                } else {
                    if ($last_state == TalentState::FST_VERIFY_REJECT) {
                        $str = '<span class="label label-success">待重审</span>';
                    } else if ($last_state == TalentState::DEPT_VERIFY_REJECT) {
                        $str = '<span class="label label-danger">部门驳回</span>';
                    } else if ($last_state == TalentState::REVERIFY_REJECT) {
                        $str = '<span class="label label-danger">复核驳回</span>';
                    } else {
                        $str = '<span class="label label-success">待初审</span>';
                    }
                }
                break;
            case 10:
                if ($step == 3) {
                    $str = '<span class="label label-success">待部门审核</span>';
                } else {
                    $str = '<span class="label label-success">待复审</span>';
                }
                break;
            case 11:
                $str = '<span class="label">再提交认定材料</span>';
                break;
            case 12:
                if ($step == 3) {
                    $str = '<span class="label label-primary">部门通过</span>';
                } else {
                    $str = '<span class="label label-success">待复审</span>';
                }
                break;
            case 13:
                if ($step == 3) {
                    $str = '<span class="label label-danger">部门驳回</span>';
                } else {
                    $str = '<span class="label label-success">待初审</span>';
                }
                break;
            case 14:
                $str = '<span class="label label-success">待核查征信</span>';
                break;
            case 15:
                $str = '<span class="label label-danger">待重新审核</span>';
                break;
            case 16:
                $str = '<span class="label label-danger">复核不通过</span>';
                break;
            case 22:
                $str = '<span class="label label-danger">征信不通过</span>';
                break;
            case 25:
                $str = '<span class="label label-danger">公示审核不通过</span>';
                break;
            case 27:
                $str = '<span class="label label-danger">公布不通过</span>';
                break;
            case 21:
                $str = '<span class="label label-success">待公示</span>';
                break;
            case 23:
                $str = '<span class="label label-success">待公示审核</span>';
                break;
            case 24:
                $str = '<span class="label label-success">待公布</span>';
                break;
            case 26:
                $str = '<span class="label label-success">待发放人才码</span>';
                break;
            case 28:
                $str = '<span class="label label-primary">已发放人才码</span>';
                break;
        }
        return $str;
    }

    public static function getOldStateNameByState($state) {
        switch ($state) {
            case -2:
                return "<span class='label label-success'>待提交</span>";
            case -1:
                return "<span class='label label-success'>审核不通过</span>";
            case 1:
                return "<span class='label label-success'>待审核</span>";
            case 2:
                return "<span class='label label-danger'>审核驳回</span>";
            case 3:
                return "<span class='label label-primary'>审核通过</span>";
            case 4:
                return "<span class='label label-warm'>上级驳回</span>";
            case 10:
                return "<span class='label label-default'>冻结</span>";
            case 8:
                return "<span class='label label-primary'>提交审核</span>";
            case 11:
                return "<span class='label label-primary'>撤销审核</span>";
            case 9:
                return "<span class='label label-primary'>重新提交</span>";
            default:
                return "";
        }
    }

    public static function getOldStepNameByStep($step) {
        switch ($step) {
            case -1:
                return "<span class='label label-primary'>部门初审</span>";
            case 0:
                return "<span class='label'>用户操作</span>";
            case 1:
                return "<span class='label label-primary'>初级审核</span>";
            case 2:
                return "<span class='label label-success'>部门审核</span>";
            case 3:
                return "<span class='label label-danger'>复核</span>";
            case 4:
                return "<span class='label label-warning'>核查征信</span>";
            case 5:
                return "<span class='label label-warning'>公示</span>";
            case 6:
                return "<span class='label label-success'>公示再审核</span>";
            case 7:
                return "<span class='label label-warning'>公布</span>";
            case 8:
                return "<span class='label label-info'>发证</span>";
            case 11:
                return "<span class='label label-danger'>审核</span>";
            case 12:
                return "<span class='label label-primary'>撤回审核</span>";
            case 20:
                return "<span class='label label-success'>人才层次变更</span>";
            case 21:
                return "<span class='label label-success'>工作单位变更</span>";
            case 22:
                return "<span class='label label-success'>离职变更</span>";
            case 23:
                return "<span class='label label-success'>银行账号变更</span>";
            case 24:
                return "<span class='label label-success'>基础信息变更</span>";
            case 50:
                return "<span class='label label-primary'>兑现</span>";
            case 55:
                return "<span class='label label-primary'>撤销公布</span>";
            case 60:
                return "<span class='label label-primary'>取消优秀人才</span>";
            case 65:
                return "<span class='label label-primary'>恢复优秀人才</span>";
            case 70:
                return "<span class='label label-danger'>设置审核不通过</span>";
            default:
                return "";
        }
    }

    public static function findByParentCodeAndCode($parentCode, $code) {
        $parent_info = Dict::where('code', $parentCode)->findOrEmpty();
        if ($parent_info) {
            return Dict::where('pid', $parent_info['id'])->where('code', $code)->findOrEmpty();
        }
        return false;
    }

    public static function getLayerCatsByLayer($lv) {
        $kv = [1 => "A", 2 => "B", 3 => "C", 4 => "D", 5 => "E", 6 => "F", 7 => "G"];
        $chr = $kv[$lv];
        if ($chr) {
            $parent_info = Dict::where('code', "talent_condition_cats")->findOrEmpty();
            $where[] = ["pid", "=", $parent_info["id"]];
            if ($parent_info) {
                $where[] = ["code", "like", $chr . "%"];
                return Dict::where($where)->select()->toArray();
            }
        }
        return false;
    }

}