request; $params = $request->param(); $id = $params["id"]; $info = VerifyApi::getTalentInfoById($id); if (in_array($info["checkState"], [-1, 2])) { return view("talentInfo_base_check", ["info" => $info]); } else { return view("talentInfo_common_check", ["info" => $info]); } } public function cancel_verify() { $params = $this->request->param(); $ids = $params["ids"]; $msg = $params["msg"]; if ($msg == "") { return json(["msg" => "请填写审核不通过的原因"]); } $ids_arr = array_filter(explode(",", $ids)); $counts = 0; foreach ($ids_arr as $id) { $ti = VerifyApi::getOne($id); $data["id"] = $id; if ($ti["checkState"] == TalentState::FST_SUBMIT) { $data["checkState"] = TalentState::BASE_VERIFY_FAIL; TalentLogApi::write(1, $id, TalentState::BASE_VERIFY_FAIL, $msg, 1); TalentModel::update($data); $counts++; } else if ($ti["checkState"] == TalentState::SCND_SAVE) { $data["checkState"] = TalentState::FST_VERIFY_FAIL; TalentLogApi::write(1, $id, TalentState::FST_VERIFY_FAIL, $msg, 1); TalentModel::update($data); $counts++; } else { return json(["msg" => "不在审核范围"]); } } return json(["code" => 200, sprintf("%d个申请已审核失败", $counts)]); } public function base_verify() { return view(); } public function base_verify_list() { $request = $this->request; return json(VerifyApi::getList($request)); } /** * 部门初审 * @auth {{/talentInfo/gotoIndex/-1}} */ public function dept_fst_verify() { return view(); } /** * 初审 * @auth {{/talentInfo/gotoIndex/1}} */ public function fst_verify() { return view(); } /** * 初审-审核 * @auth {{/talentInfo/firstCheck}} */ public function fst_check() { } /** * 初审-修改驳回字段 * @auth {{/talentInfo/updateFieldsAndFiles}} */ public function updateFieldsAndFiles() { } /** * 初审-审核不通过 * @auth {{/talentInfo/setNotPass}} */ public function dis_pass() { } /** * 部门审核 * @auth {{/talentInfo/gotoIndex/2}} */ public function dept_verify() { return view(); } /** * 复审 * @auth {{/talentInfo/gotoIndex/3}} */ public function re_verify() { return view(); } /** * 复审-撤销复核 * @auth {{/talentInfo/cancleThirdCheck}} */ public function cancel_check() { } /** * 预备人才库 * @auth {{/talentInfo/gotoIndex/4}} */ public function pre_list() { return view(); } public function selectNeedCheckData() { $params = $this->request->param(); return json(["code" => 200, "obj" => VerifyApi::getPublicList($params)]); } /** * 预备人才库-核查征信 * @auth {{/talentInfo/prepareHczx}} */ public function prepareHczx() { $ids = $this->request->param("ids"); $ids_arr = array_filter(explode(",", $ids)); if (!$ids_arr) { $res = ["code" => 500, "msg" => "没有选择导出的名单"]; echo sprintf("", json_encode($res)); } $where[] = ["ti.id", "in", $ids_arr]; $list = TalentModel::alias("ti")->leftJoin("new_enterprise e", "e.id=ti.enterprise_id")->field("ti.name,ti.card_type,ti.card_number,e.name as enterpriseName,e.description")->where($where)->select(); if (!$list) { $res = ["code" => 500, "msg" => "没有可以导出的内容"]; echo sprintf("", json_encode($res)); } $columns = ["序号", "姓名", "证件类型", "证件号码", "工作单位", "备注"]; $rows = []; $i = 1; $card_types = DictApi::selectByParentCode("card_type"); foreach ($list as $item) { $row = [ $i, $item["name"], $card_types[$item["card_type"]], $item["card_number"], $item["enterpriseName"], $item["description"] ]; $rows[] = $row; $i++; } $filename = "优秀人才核查征信名单导出"; if ($rows) { export($columns, $rows, $filename); exit(); } echo ""; } /** * 预备人才库-征信通过 * @auth {{/talentInfo/hczxPass}} */ public function hczxPass() { $params = $this->request->param(); $ids = $params["ids"]; $ids = array_filter(explode(",", $ids)); $msg = "征信通过"; $state = TalentState::ZX_PASS; //征信通过 $total = count($ids); $error = 0; $success = 0; foreach ($ids as $id) { $talent_info = VerifyApi::getOne($id); if ($talent_info["checkState"] != TalentState::REVERIFY_PASS) { $error++; continue; } if (VerifyApi::setPublic($id, $state, $msg)) { $success++; } else { $error++; } } return json(["code" => 200, "msg" => sprintf("核查征信完成:共提交%d个人才,通过%d个,失败%d个", $total, $success, $error)]); } /** * 预备人才库-征信失信 * @auth {{/talentInfo/hczxReject}} */ public function hczxReject() { $params = $this->request->param(); $id = $params["id"]; $msg = $params["outMsg"]; if (!$msg) return json(["msg" => "请填写审核意见"]); $msg = "征信失信:" . $msg; $state = TalentState::ZX_FAIL; //征信不通过 $talent_info = VerifyApi::getOne($id); if ($talent_info["checkState"] != TalentState::REVERIFY_PASS) { return json(["msg" => "当前记录不是待核查征信状态,无法核查"]); } if (VerifyApi::setPublic($id, $state, $msg)) { return json(["code" => 200, "msg" => "已设置征信失信"]); } return json(["msg" => "设置征信失信失败"]); } /** * 预备人才库-公示预览 * @auth {{/talentInfo/publicExportBefore}} */ public function publicExportBefore() { $params = $this->request->param(); $ids_arr = array_filter(explode(",", $params["ids"])); $columns = ["序号", "批次", "姓名", "性别", "工作单位", "本人具备的认定条件", "拟认定人才层次", "审核状态", "备注"]; if ($ids_arr) { $where[] = ["id", "in", $ids_arr]; $list = TalentModel::where($where)->order("talent_arrange asc,enterprise_id asc")->select(); $rows = []; $i = 1; $talentArranges = DictApi::selectByParentCode("talent_arrange"); foreach ($list as $item) { $talent_condition = TalentConditionApi::getOne($item["talent_condition"]); $enterprise = EnterpriseApi::getOne($item["enterprise_id"]); $checkLog = TalentLogApi::getLastLog($item["id"], 1); $row = [ $i, $item["apply_year"], $item["name"], $item["sex"] == 1 ? "男" : "女", $enterprise["name"], $talent_condition["name"], $talentArranges[$item["talent_arrange"]], $item["checkState"] == TalentState::ZX_PASS ? "审核通过" : "审核不通过", $checkLog["description"] ]; $rows[] = $row; $i++; } } if ($rows) { $filename = "优秀人才公示预览导出"; export($columns, $rows, $filename); exit(); } echo ""; } /** * 预备人才库-公示导出 * @auth {{/talentInfo/publicExport}} */ public function publicExport() { $params = $this->request->param(); $columns = ["序号", "批次", "姓名", "性别", "工作单位", "本人具备的认定条件", "拟认定人才层次", "审核状态", "备注"]; $startTime = $params["startTime"]; $endTime = $params["endTime"]; if (!strtotime($startTime) || !strtotime($endTime)) return json(["msg" => "时间格式错误"]); $where[] = ["checkState", "=", TalentState::ANNOUNCED]; $where[] = ["publicBatch", "between", [$startTime, $endTime]]; $list = TalentModel::where($where)->order("talent_arrange asc,enterprise_id asc")->select(); $rows = []; $i = 1; $talentArranges = DictApi::selectByParentCode("talent_arrange"); foreach ($list as $item) { $talent_condition = TalentConditionApi::getOne($item["talent_condition"]); $enterprise = EnterpriseApi::getOne($item["enterprise_id"]); $checkLog = TalentLogApi::getLastLog($item["id"], 1); $row = [ $i, $item["apply_year"], $item["name"], $item["sex"] == 1 ? "男" : "女", $enterprise["name"], $talent_condition["name"], $talentArranges[$item["talent_arrange"]], $item["checkState"] == TalentState::ANNOUNCED ? "审核通过" : "审核不通过", $checkLog["description"] ]; $rows[] = $row; $i++; } if ($rows) { $filename = "优秀人才公示导出"; export($columns, $rows, $filename); exit(); } echo ""; } /** * 预备人才库-公示 * @auth {{/talentInfo/preparePublic}} */ public function preparePublic() { $params = $this->request->param(); $isMessage = $params["isMessage"] ?: 2; $ids = $params["ids"]; $publicBatch = $params["batch"]; if (!$publicBatch || strlen($publicBatch) != 6 || !is_numeric($publicBatch)) return json(["msg" => "公示批次错误"]); $ids = array_filter(explode(",", $ids)); $msg = "已公示"; $state = TalentState::ANNOUNCED; //公示 $total = count($ids); $error = 0; $success = 0; foreach ($ids as $id) { $talent_info = VerifyApi::getOne($id); if ($talent_info["checkState"] != TalentState::ZX_PASS) { $error++; continue; } if (VerifyApi::setPublic($id, $state, $msg, $publicBatch)) { $success++; } else { $error++; } } return json(["code" => 200, "msg" => sprintf("公示完成:共提交%d个人才,通过%d个,失败%d个", $total, $success, $error)]); } /** * 预备人才库-公示再审核 * @auth {{/talentInfo/prepareCheck}} */ public function prepareCheck() { $params = $this->request->param(); $id = $params["id"]; $checkState = $params["checkState"]; $msg = $params["checkMsg"]; if (!$msg) return json(["msg" => "请填写审核意见"]); if ($checkState == 1) { $msg = "公示再审核通过:" . $msg; $state = TalentState::ANNOUNCED_REVERIFY_PASS; //公示再审核通过 } else { $msg = "公示再审核不通过:" . $msg; $state = TalentState::ANNOUNCED_REVERIFY_FAIL; //公示再审核不通过 } $talent_info = VerifyApi::getOne($id); if ($talent_info["checkState"] != TalentState::ANNOUNCED) { return json(["msg" => "当前记录不是公示状态,无法审核"]); } if (VerifyApi::setPublic($id, $state, $msg)) { return json(["code" => 200, "msg" => "公示再审核完成"]); } return json(["msg" => "公示再审核失败"]); } /** * 预备人才库-公示通过(批量) * @auth {{/talentInfo/publicPass}} */ public function publicPass() { $params = $this->request->param(); $ids = $params["ids"]; $ids = array_filter(explode(",", $ids)); $msg = "公示再审核批量通过"; $state = TalentState::ANNOUNCED_REVERIFY_PASS; //公示再审核通过 $total = count($ids); $error = 0; $success = 0; foreach ($ids as $id) { $talent_info = VerifyApi::getOne($id); if ($talent_info["checkState"] != TalentState::ANNOUNCED) { $error++; continue; } if (VerifyApi::setPublic($id, $state, $msg)) { $success++; } else { $error++; } } return json(["code" => 200, "msg" => sprintf("公示再审核完成:共提交%d个人才,通过%d个,失败%d个", $total, $success, $error)]); } /** * 预备人才库-公布预览 * @auth {{/talentInfo/publishExportBefore}} */ public function publishExportBefore() { $params = $this->request->param(); $ids = $params["ids"]; $ids = array_filter(explode(",", $ids)); if ($ids) { $where[] = ["id", "in", $ids]; $list = TalentModel::where($where)->order("talent_arrange asc,enterprise_id asc")->select(); $rows = []; $i = 1; $talentArranges = DictApi::selectByParentCode("talent_arrange"); foreach ($list as $item) { $talent_condition = TalentConditionApi::getOne($item["talent_condition"]); $enterprise = EnterpriseApi::getOne($item["enterprise_id"]); $checkLog = TalentLogApi::getLastLog($item["id"], 1); $row = [ $i, $item["apply_year"], $item["name"], $item["sex"] == 1 ? "男" : "女", $enterprise["name"], $talent_condition["name"], $talentArranges[$item["talent_arrange"]], $item["checkState"] == TalentState::ANNOUNCED_REVERIFY_PASS ? "审核通过" : "审核不通过", $checkLog["description"] ]; $rows[] = $row; $i++; } } $columns = ["序号", "批次", "姓名", "性别", "工作单位", "本人具备的认定条件", "认定人才层次", "审核状态", "备注"]; $filename = "优秀人才" . date("Ym") . "公布预览名单导出(公示批次-" . $list[0]["publicBatch"] . ")"; if ($rows) { export($columns, $rows, $filename); exit(); } echo ""; } /** * 预备人才库-公布导出 * @auth {{/talentInfo/publishExport}} */ public function publishExport() { $params = $this->request->param(); $startTime = $params["startTime"]; $endTime = $params["endTime"]; if (!strtotime($startTime) || !strtotime($endTime)) return json(["msg" => "时间格式错误"]); $where[] = ["checkState", "=", TalentState::PUBLISH_PASS]; $where[] = ["certificateGetTime", "between", [$startTime, $endTime]]; $list = TalentModel::where($where)->order("talent_arrange asc,enterprise_id asc")->select(); $rows = []; $i = 1; $talentArranges = DictApi::selectByParentCode("talent_arrange"); foreach ($list as $item) { $talent_condition = TalentConditionApi::getOne($item["talent_condition"]); $enterprise = EnterpriseApi::getOne($item["enterprise_id"]); $checkLog = TalentLogApi::getLastLog($item["id"], 1); $row = [ $i, $item["apply_year"], $item["name"], $item["sex"] == 1 ? "男" : "女", $enterprise["name"], $talent_condition["name"], $talentArranges[$item["talent_arrange"]], $item["checkState"] == TalentState::PUBLISH_PASS ? "审核通过" : "审核不通过", $checkLog["description"] ]; $rows[] = $row; $i++; } $columns = ["序号", "批次", "姓名", "性别", "工作单位", "本人具备的认定条件", "认定人才层次", "审核状态", "备注"]; $filename = "优秀人才" . date("Ym") . "公布名单导出(公示批次-" . $list[0]["publicBatch"] . ")"; if ($rows) { export($columns, $rows, $filename); exit(); } echo ""; } /** * 预备人才库-公布 * @auth {{/talentInfo/publish}} */ public function publish() { $params = $this->request->param(); $id = $params["id"]; $msg = $params["checkMsg"]; $checkState = $params["checkState"]; $batch = $params["batch"]; if ($checkState == 1) { $state = TalentState::PUBLISH_PASS; $msg = "公布审核通过:" . $msg; } else { $state = TalentState::PUBLISH_FAIL; $msg = "公布审核不通过:" . $msg; } if (!$batch || !strtotime($batch)) return json(["msg" => "公布批次时间错误"]); if (!$msg) return json(["msg" => "请填写审核意见"]); $state = TalentState::PUBLISH_PASS; //公示再审核通过 $batch = $params["batch"]; if (!strtotime($batch)) return json(["msg" => "公布批次时间错误"]); $talent_info = VerifyApi::getOne($id); if ($talent_info["checkState"] != TalentState::ANNOUNCED_REVERIFY_PASS) { return json(["msg" => "当前记录不是公示再审核通过状态,无法审核"]); } if (VerifyApi::setPublic($id, $state, $msg, $batch)) { return json(["code" => 200, "msg" => "公布审核完成"]); } return json(["msg" => "公布审核失败"]); } /** * 预备人才库-批量公布通过 * @auth {{/talentInfo/preparePublish}} */ public function preparePublish() { $params = $this->request->param(); $ids = $params["ids"]; $ids = array_filter(explode(",", $ids)); $msg = "批量公布"; $state = TalentState::PUBLISH_PASS; //公示再审核通过 $batch = $params["batch"]; if (!strtotime($batch)) return json(["msg" => "公布批次时间错误"]); $total = count($ids); $error = 0; $success = 0; foreach ($ids as $id) { $talent_info = VerifyApi::getOne($id); if ($talent_info["checkState"] != TalentState::ANNOUNCED_REVERIFY_PASS) { $error++; continue; } if (VerifyApi::setPublic($id, $state, $msg, $batch)) { $success++; } else { $error++; } } return json(["code" => 200, "msg" => sprintf("公布完成:共提交%d个人才,通过%d个,失败%d个", $total, $success, $error)]); } /** * 预备人才库-批量发证 * @auth {{/talentInfo/prepareCertification}} */ public function prepareCertification() { $lockFile = fopen("send_certificate.lock", "a"); if (flock($lockFile, LOCK_EX | LOCK_NB)) {//文件锁(独占) //查询所有待发证的数据 $params = $this->request->param(); $ids = array_filter(explode(",", $params["ids"])); //晋江市优秀人才证书:当前年份+层次+四位递增数字 //集成电路优秀人才证书:IC+当前年份+递增四位数,如IC20190001 Db::startTrans(); $talent_max_no = []; $user = session("user"); try { $talent_list = VerifyApi::getListByIds($ids); $year = date("Y"); foreach ($talent_list as $talent_info) { if ($talent_info["checkState"] != TalentState::PUBLISH_PASS) { Db::rollback(); return json(["msg" => "只能对公布通过的对象进行发证,请核查待发证名单后再重新发证"]); } $no_prefix = $year . $talent_info["talent_arrange"]; $where[] = ["certificateNo", "like", $no_prefix . "%"]; $max_no = $talent_max_no[$talent_info["talent_arrange"]] ?: Db::table("new_talent_info")->where($where)->max("certificateNo"); if (!$max_no) { $max_no = $no_prefix . "0001"; } else { $new_no = intval(substr($max_no, 5)) + 1; $max_no = $no_prefix . str_pad($new_no, 4, "0", STR_PAD_LEFT); } //更新证书编号 $data["id"] = $talent_info["id"]; $data["certificateNo"] = $max_no; $data["checkState"] = TalentState::CERTIFICATED; $data["isPublic"] = 5; Db::table("new_talent_info")->update($data); //写入日志 $log["last_state"] = TalentState::PUBLISH_PASS; $log["id"] = getStringId(); $log["state"] = $log["new_state"] = TalentState::CERTIFICATED; $log["type"] = 1; $log["mainId"] = $talent_info["id"]; $log["companyId"] = $user["companyId"]; $log["active"] = 1; $log["description"] = "人才编号为:" . $max_no; $log["createUser"] = sprintf("%s(%s)", $user["account"], $user["companyName"] ?: $user["rolename"]); $log["createTime"] = date("Y-m-d H:i:s"); Db::table("new_talent_checklog")->insert($log); $talent_max_no[$talent_info["talent_arrange"]] = $max_no; } Db::commit(); return json(["code" => 200, "msg" => "发证成功"]); } catch (\Exception $e) { Db::rollback(); return json(["msg" => "发证失败:" . $e->getMessage()]); } flock($lockFile, LOCK_UN); } else { return json(["msg" => "同一时间只能有一个管理员进行发证操作"]); } } /** * 预备人才库-撤销公布 * @auth {{/talentInfo/prepareCanclePublish}} */ public function pre_cancel_publish() { } /** * 基本条件审核-提交未保存 * @param \think\Request $request * @param type $talent_info * @return type json */ private function baseCheck(\think\Request $request, $talent_info) { $params = $request->param(); if ($params["checkState"] == 3) { //审核成功 $log_checkState = $checkState = TalentState::BASE_VERIFY_PASS; //初审成功 } else { //审核驳回并记录需要修改的字段和上传文件 $checkState = TalentState::FST_SAVE; //退回提交材料阶段 $log_checkState = TalentState::BASE_REJECT; //日志记录拒绝状态 } $log = TalentLogApi::getLastLog($talent_info["id"], 1); if (!$log) return json(["msg" => "日志数据异常,保存失败"]); if ($log["active"] == 0) { TalentLogApi::rewrite($log["id"], [$log_checkState, $checkState], $params["checkMsg"]); } else { TalentLogApi::write(1, $talent_info["id"], [$log_checkState, $checkState], $params["checkMsg"]); } $data["id"] = $talent_info["id"]; $data["modify_files"] = $params["files"]; $data["modify_fields"] = $params["fields"]; TalentModel::update($data); return json(["code" => 200, "msg" => "保存成功"]); } /** * 基本条件审核-提交审核 * @param type $talent_info * @return type json */ private function baseSubmitCheck($talent_info) { return $this->commonSubmitCheck($talent_info, 1); } /** * 初审-提交未保存 * @param \think\Request $request * @param type $talent_info * @return type json */ private function fstCheck(\think\Request $request, $talent_info) { $params = $request->param(); if ($params["checkState"] == 3) { //审核成功,并取消设置越过部门并审 $log_checkState = $checkState = TalentState::FST_VERIFY_PASS; //初审成功 $data["pass_dept_check"] = 0; } else if ($params["checkState"] == 4) { if ($talent_info["highProcess"] < 3) return json(["msg" => "只有曾经通过部门并审,初审时才可以选择直接跳过部门并审阶段"]); //审核成功,并设置越过部门并审。附加条件:最高进度曾经通过部门并审3(包含部门并审) $log_checkState = $checkState = TalentState::FST_VERIFY_PASS; //初审成功 $data["pass_dept_check"] = $talent_info["highProcess"] >= 3 ? 1 : 0; } else { //审核驳回并记录需要修改的字段和上传文件 $checkState = TalentState::SCND_SAVE; //退回材料编辑状态 $log_checkState = TalentState::FST_VERIFY_REJECT; //日志记录拒绝状态 } $log = TalentLogApi::getLastLog($talent_info["id"], 1); if (!$log) return json(["msg" => "日志数据异常,保存失败"]); if ($log["active"] == 0) { TalentLogApi::rewrite($log["id"], [$log_checkState, $checkState], $params["checkMsg"]); } else { TalentLogApi::write(1, $talent_info["id"], [$log_checkState, $checkState], $params["checkMsg"]); } $data["id"] = $talent_info["id"]; $data["modify_files"] = $params["files"]; $data["modify_fields"] = $params["fields"]; TalentModel::update($data); return json(["code" => 200, "msg" => "保存成功"]); } /** * 初审-提交审核 * @param type $talent_info * @return type json */ private function fstSubmitCheck($talent_info) { $nowProcess = 2; $log = TalentLogApi::getLastLog($talent_info["id"], 1); if (!$log || $log["active"] == 1) return json(["msg" => "请先保存审核状态,再提交审核"]); if (in_array($log["new_state"], [TalentState::BASE_VERIFY_PASS, TalentState::FST_VERIFY_PASS, TalentState::REVERIFY_PASS])) { $data["highProcess"] = $nowProcess > $talent_info["highProcess"] ? $nowProcess : $talent_info["highProcess"]; } if ($log["new_state"] == TalentState::FST_VERIFY_PASS && $talent_info["pass_dept_check"] == 0) { $data["first_dept_check_time"] = date("Y-m-d H:i:s"); $condition = TalentConditionApi::getOne($talent_info["talent_condition"]); $companyIds = array_filter(explode(",", $condition["companyIds"])); //该条件下需要审核的所有单位 //这边去除已经审核通过的单位,主要通过日志是否存在记录。 $pass_companyIds = TalentLogApi::getPassDepts($talent_info["id"]); //已经通过的单位 $unpass_companyIds = array_diff($companyIds, (array) $pass_companyIds); //排除已经通过的单位 sort($unpass_companyIds); TalentLogApi::writeDeptLogs($talent_info["id"], $unpass_companyIds, TalentState::FST_VERIFY_PASS); } $data["id"] = $talent_info["id"]; $data["checkState"] = $log["new_state"]; TalentModel::update($data); TalentLogApi::setActive($log["id"], 1); return json(["code" => 200, "msg" => "审核成功"]); } /** * 部门审核-提交未保存 * @param \think\Request $request * @param type $talent_info * @return type json */ private function deptCheck(\think\Request $request, $talent_info, $companys) { if ($talent_info["pass_dept_check"] == 1) return json(["msg" => "不在审核范围。(初审部门已经选择跳过部门并审阶段)"]); if (!in_array($this->user["companyId"], $companys)) return json(["msg" => "您的部门不在该申请的并审部门列表中。"]); $pass_companyIds = TalentLogApi::getPassDepts($talent_info["id"]); //已经通过的单位 if (in_array($this->user["companyId"], $pass_companyIds)) return json(["msg" => "您的部门已经审核过了,无需重复审核。"]); $params = $request->param(); if ($params["checkState"] == 3) { //审核成功 $log_checkState = TalentState::FST_VERIFY_PASS; //当前状态不变 $checkState = TalentState::DEPT_VERIFY_PASS; //审核成功 } else { //审核驳回并记录需要修改的字段和上传文件 $checkState = TalentState::SCND_SUBMIT; //退回待初审 $log_checkState = TalentState::FST_VERIFY_PASS; //当前状态不变 $talent_condition = TalentConditionApi::getOne($talent_info["talent_condition"]); if (!$talent_condition["companyWithFileType"]) return json(["msg" => "尚未设置单位可审的附件,请联系管理员设置后再进行审批"]); $cwfts = explode(";", $talent_condition["companyWithFileType"]); $company_setting = []; foreach ($cwfts as $cwft) { $_company_setting = explode(":", $cwft); if ($_company_setting[0] == $this->user["companyId"]) { $company_setting = explode(",", $_company_setting[1]); break; } } if (!$company_setting) return json(["msg" => "尚未设置单位可审的附件,请联系管理员设置后再进行审批"]); //$data["modify_fields"] = $params["fields"]; $original_modify_files = explode(",", $talent_info["modify_files"]); $_current_modify_files = explode(",", $params["files"]); $unselect_files = array_diff($company_setting, $_current_modify_files); //比较设置和当前提交的,取差值集,既是可选而未选的附件集合 $new_modify_files = array_unique(array_merge($original_modify_files, $_current_modify_files)); //合并当前提交及库中原来保存的值 foreach ($new_modify_files as $key => $item) { if (in_array($item, $unselect_files)) unset($new_modify_files[$key]); } $data["modify_files"] = implode(",", array_unique($new_modify_files)); } $fst_dept_check_time = $talent_info["first_dept_check_time"]; $dept_log = TalentLogApi::getLogByCompanyId($talent_info["id"], $this->user["companyId"], $fst_dept_check_time); if (!$dept_log) return json(["msg" => "未匹配日志,审核失败"]); if ($dept_log["active"] == 1) return json(["msg" => "您的部门已经审核过了"]); $data["id"] = $talent_info["id"]; TalentModel::update($data); //修改日志 TalentLogApi::rewrite($dept_log["id"], [$log_checkState, $checkState], $params["checkMsg"]); return json(["code" => 200, "msg" => "保存成功"]); } /** * 部门审核-提交审核 * @param type $talent_info * @return type json */ private function deptSubmitCheck($talent_info, $companys) { if ($talent_info["pass_dept_check"] == 1) return json(["msg" => "不在审核范围。(初审部门已经选择跳过部门并审阶段)"]); if (!in_array($this->user["companyId"], $companys)) return json(["msg" => "您的部门不在该申请的并审部门列表中。"]); $pass_companyIds = TalentLogApi::getPassDepts($talent_info["id"]); //已经通过的单位 if (in_array($this->user["companyId"], $pass_companyIds)) return json(["msg" => "您的部门已经审核过了,无需重复审核。"]); $dept_log = TalentLogApi::getLogByCompanyId($talent_info["id"], $this->user["companyId"], $talent_info["first_dept_check_time"]); $over = $pass_companyIds ? count($pass_companyIds) : 0; //完成度,如果重审之前已有通过审核的部门,不用再审,直接按通过算 $error = 0; //失败数 $nowProcess = 3; if (!$dept_log) return json(["msg" => "未匹配日志,审核失败"]); if ($dept_log["state"] == $dept_log["new_state"]) return json(["msg" => "请先保存审核状态,再提交审核"]); if ($dept_log["active"] == 1) return json(["msg" => "您的部门已经审核过了"]); $over++; if ($dept_log["new_state"] == TalentState::SCND_SUBMIT) { $error++; } $logs = TalentLogApi::getListLogByTime($talent_info["id"], $talent_info["first_dept_check_time"]); for ($i = 0; $i < count($logs); $i++) { if (!in_array($logs[$i]["companyId"], $pass_companyIds)) { $over += $logs[$i]["active"] == 1 ? 1 : 0; if ($logs[$i]["new_state"] == TalentState::SCND_SUBMIT) { $error++; } } } if ($over == count($companys)) { //全部已审核 $checkState = TalentState::SCND_SUBMIT; $log_checkState = TalentState::DEPT_VERIFY_REJECT; if ($error == 0) { $log_checkState = $checkState = TalentState::DEPT_VERIFY_PASS; $data["highProcess"] = $nowProcess > $talent_info["highProcess"] ? $nowProcess : $talent_info["highProcess"]; } $data["id"] = $talent_info["id"]; $data["checkState"] = $checkState; $data["first_dept_check_time"] = null; TalentModel::update($data); TalentLogApi::write(1, $talent_info["id"], [$log_checkState, $checkState], "部门审核结束", 1); } TalentLogApi::setActive($dept_log["id"], 1); return json(["code" => 200, "msg" => "审核成功"]); } /** * 复审-提交未保存 * @param \think\Request $request * @param type $talent_info * @param type json */ private function reCheck(\think\Request $request, $talent_info) { $params = $request->param(); if ($params["checkState"] == 3) { //审核成功 $log_checkState = $checkState = TalentState::REVERIFY_PASS; //复核成功 } else if ($params["checkState"] == 2) { //审核驳回并记录需要修改的字段和上传文件 $checkState = TalentState::SCND_SUBMIT; //退回待初审 $log_checkState = TalentState::REVERIFY_REJECT; //日志记录拒绝状态 } else { $log_checkState = $checkState = TalentState::REVERIFY_FAIL; //审核失败 } $log = TalentLogApi::getLastLog($talent_info["id"], 1); if (!$log) return json(["msg" => "日志数据异常,保存失败"]); if ($log["active"] == 0) { TalentLogApi::rewrite($log["id"], [$log_checkState, $checkState], $params["checkMsg"]); } else { TalentLogApi::write(1, $talent_info["id"], [$log_checkState, $checkState], $params["checkMsg"]); } $data["id"] = $talent_info["id"]; $data["modify_files"] = $params["files"]; $data["modify_fields"] = $params["fields"]; TalentModel::update($data); return json(["code" => 200, "msg" => "保存成功"]); } /** * 复审-提交审核 * @param type $talent_info * @return type json */ private function reSubmitCheck($talent_info) { return $this->commonSubmitCheck($talent_info, 4); } private function commonSubmitCheck($talent_info, $nowProcess) { $log = TalentLogApi::getLastLog($talent_info["id"], 1); if (!$log || $log["active"] == 1) return json(["msg" => "请先保存审核状态,再提交审核"]); if (in_array($log["new_state"], [TalentState::BASE_VERIFY_PASS, TalentState::FST_VERIFY_PASS, TalentState::REVERIFY_PASS])) { $data["highProcess"] = $nowProcess > $talent_info["highProcess"] ? $nowProcess : $talent_info["highProcess"]; } $data["id"] = $talent_info["id"]; $data["checkState"] = $log["new_state"]; TalentModel::update($data); TalentLogApi::setActive($log["id"], 1); return json(["code" => 200, "msg" => "审核成功"]); } public function check() { //公共调度方法 $request = $this->request; $params = $request->param(); $check = $params["checkState"]; $check_msg = trim($params["checkMsg"]); $files = $params["files"]; $fields = $params["fields"]; $id = $params["id"]; $talent_info = VerifyApi::getOne($id); $checkState = $talent_info["checkState"]; if (!$talent_info) { return json(["msg" => "数据错误"]); } if (!$check) { return json(["msg" => "请选择审核状态"]); } if (!$check_msg) { return json(["msg" => "请填写审核说明"]); } if ($checkState == TalentState::FST_SUBMIT) { return $this->baseCheck($request, $talent_info); } else if ($checkState == TalentState::SCND_SUBMIT) { return $this->fstCheck($request, $talent_info); } else if ($checkState == TalentState::FST_VERIFY_PASS) { $condition = TalentConditionApi::getOne($talent_info["talent_condition"]); $companys = array_filter(explode(",", $condition["companyIds"])); if ($companys && $talent_info["pass_dept_check"] != 1) { if (!in_array($this->user["companyId"], $companys)) return json(["msg" => "你的部门不在并审部门列表"]); return $this->deptCheck($request, $talent_info, $companys); } else { return $this->reCheck($request, $talent_info); } } else if ($checkState == TalentState::DEPT_VERIFY_PASS) { return $this->reCheck($request, $talent_info); } else { return json(["msg" => "不在审核范围内,保存失败"]); } } public function submitCheck() { //公共调度方法 $id = $this->request->param("id"); $talent_info = VerifyApi::getOne($id); $checkState = $talent_info["checkState"]; if (!$talent_info) { return json(["msg" => "数据错误"]); } if ($checkState == TalentState::FST_SUBMIT) { return $this->baseSubmitCheck($talent_info); } else if ($checkState == TalentState::SCND_SUBMIT) { return $this->fstSubmitCheck($talent_info); } else if ($checkState == TalentState::FST_VERIFY_PASS) { $condition = TalentConditionApi::getOne($talent_info["talent_condition"]); $companys = array_filter(explode(",", $condition["companyIds"])); if ($companys && $talent_info["pass_dept_check"] != 1) { if (!in_array($this->user["companyId"], $companys)) return json(["msg" => "你的部门不在并审部门列表"]); return $this->deptSubmitCheck($talent_info, $companys); } else { return $this->reSubmitCheck($talent_info); } } else if ($checkState == TalentState::DEPT_VERIFY_PASS) { return $this->reSubmitCheck($talent_info); } else { return json(["msg" => "不在审核范围内,审核失败"]); } } public function validateIsCheck() { $params = $this->request->param(); $id = $params["id"]; $talent_info = VerifyApi::getOne($id); if ($talent_info) { $checkState = $talent_info["checkState"]; // 0正在填写 1保存未提交 2已提交未审核 3已审核 4驳回 5保存补充材料未提交 6提交补充材料进入初审 7初审通过 8初审驳回 9部门审核通过 10部门审核驳回 11复核通过 12复核驳回 13复核失败 $process = 0; if (in_array($checkState, [2, 6, 7, 9])) { switch ($checkState) { case 2: $enterprise = \app\common\model\Enterprise::findOrEmpty($talent_info["enterprise_id"]); $fields = DictApi::getTalentFields(1); $field_tmp = []; foreach ($fields as $key => $field) { $field_tmp[] = ["key" => $key, "value" => $field]; } $where[] = ["project", "=", 1]; $where[] = ["step", "=", 1]; $where[] = ["active", "=", 1]; $where[] = ["type", "=", $enterprise["type"]]; $files = \think\facade\Db::table("new_common_filetype")->where($where)->select(); $process = 1; break; case 6: $fields = DictApi::getTalentFields(2); $process = 2; break; case 7: $tc = TalentConditionApi::getOne($talent_info["talent_condition"]); if ($tc["companyIds"] && $talent_info["pass_dept_check"] != 1) { $process = 3; } else { $process = 4; } $fields = DictApi::getTalentFields($process); break; case 9: $process = 4; $fields = DictApi::getTalentFields($process); break; } if ($checkState != 2) { $enterprise = \app\common\model\Enterprise::findOrEmpty($talent_info["enterprise_id"]); //$fields = DictApi::getTalentFields(2); $field_tmp = []; if ($fields) { foreach ($fields as $key => $field) { $field_tmp[] = ["key" => $key, "value" => $field]; } } $where = []; $whr = []; $condition = TalentConditionApi::getOne($talent_info["talent_condition"]); $where[] = ["project", "=", 1]; $where[] = ["step", "=", 2]; $where[] = ["active", "=", 1]; $where[] = ["type", "=", $enterprise["type"]]; $where[] = ["isConditionFile", "<>", 1]; if ($process == 3) { $where = []; $cwfts = explode(";", $condition["companyWithFileType"]); foreach ($cwfts as $cwft) { $_company_setting = explode(":", $cwft); if ($_company_setting[0] == $this->user["companyId"]) { $where[] = ["id", "in", explode(",", $_company_setting[1])]; break; } } if ($where) { $files = \think\facade\Db::table("new_common_filetype")->where($where)->select(); } else { $files = []; } } else { if ($condition && $condition["bindFileTypes"]) { $whr[] = ["id", "in", explode(",", $condition["bindFileTypes"])]; $files = \think\facade\Db::table("new_common_filetype")->whereOr([$where, $whr])->select(); } else { $files = \think\facade\Db::table("new_common_filetype")->where($where)->select(); } } } $talent_info["files"] = array_filter(explode(",", $talent_info["modify_files"])); $talent_info["fields"] = array_filter(explode(",", $talent_info["modify_fields"])); return json(["code" => 200, "obj" => ["process" => $process, "talentInfo" => $talent_info, "fieldList" => $field_tmp, "fileList" => $files]]); } else { return json(["msg" => "该申报不在审核范围内,无法审核"]); } } } public function findFieldsAndFiles() { } public function commonExport() { $params = $this->request->param(); $fields = $params["export"]; if (!$fields) return json(["msg" => "请选择要导出的数据"]); $names = DictApi::getTalentFields(4); $names["industryFieldNew"] = "产业领域"; $names["enterpriseName"] = "单位名称"; $names["enterpriseTag"] = "单位标签"; $names["street"] = "所属镇街"; $names["checkState"] = "审核状态"; $list = VerifyApi::getExportDatas($fields); foreach ($fields as $field) { $columns[] = $names[$field]; } $datas = []; for ($i = 0; $i < count($list); $i++) { $data = []; for ($n = 0; $n < count($fields); $n++) { $data[] = $list[$i][$fields[$n]]; } $datas[] = $data; } if ($datas) { export($columns, $datas); exit(); } echo ""; } public function getPhones() { $list = VerifyApi::getListByProcess($this->request->param("process")); $result = []; if ($list) { foreach ($list as $item) { if ($item["phone"] && $item["name"]) { $result[] = sprintf("%s:%s", $item["name"], $item["phone"]); } } } return json(["code" => 200, "obj" => implode(";", $result)]); } public function getEnterprisePhones() { $list = VerifyApi::getListByProcess($this->request->param("process")); $result = []; if ($list) { foreach ($list as $item) { if ($item["agentName"] && $item["agentPhone"]) { $result[] = sprintf("%s:%s", $item["agentName"], $item["agentPhone"]); } } } return json(["code" => 200, "obj" => implode(";", $result)]); } }