user = session("user"); } public function findIdentifyConditionByLevel() { $params = $this->request->param(); $id = $params["id"]; if ($this->user["usertype"] == 2) { $type = $this->user["type"]; } else { $talentInfo = TalentApi::getOne($id); $enterprise = \app\common\model\Enterprise::findOrEmpty($talentInfo["enterprise_id"]); $type = $enterprise["type"]; } $list = TalentConditionApi::getList($params["level"], $type, $params["cat"]); return json($list, 200); } public function getTalentCondtionUploadFile() { $param = $this->request->param(); $id = $param["mainId"]; $order = $param["order"]; $project = $param["project"]; $type = $param["type"]; $talent_condition = $param["talent_condition"]; $condition_info = Db::table("new_talent_condition")->findOrEmpty($talent_condition); if (!$condition_info["bindFileTypes"]) return json(["rows" => null]); $whr[] = ["id", "in", $condition_info["bindFileTypes"]]; $whr[] = ["active", "=", 1]; $whr[] = ["delete", "=", 0]; $rows = Db::table("new_common_filetype")->where($whr)->order("sn " . $order)->select()->toArray(); if ($id) { foreach ($rows as $key => $row) { $where = []; $where[] = ["mainId", "=", $id]; $where[] = ["typeId", "=", $row["id"]]; $files = Db::table("new_talent_file")->where($where)->field("id,typeId,orignName,url")->order("sn asc")->select()->toArray(); foreach ($files as &$file) { $file["ext"] = pathinfo($file["url"])["extension"]; $file["url"] = getStoragePath($file["url"]); } $rows[$key]["files"] = $files; } } return json(["rows" => $rows, "info" => $condition_info]); } public function getCheckLog() { $params = $this->request->param(); $mainId = $params["mainId"]; $type = $params["type"]; /* $talentInfo = TalentApi::getOne($mainId); $condition = TalentConditionApi::getOne($talentInfo["talent_condition"]); $needDeptVerify = false; if ($condition["companyIds"] && $talentInfo["pass_dept_check"] != 1) $needDeptVerify = true; */ $list = TalentLogApi::getList($type, $mainId); $new_list = []; foreach ($list as $key => $item) { switch ($item['category']) { case 'enterprise_change': switch ($item['step']) { case 100: $new_item["stepName"] = "用户操作"; break; case 101: $new_item["stepName"] = "审核"; break; case 102: $new_item["stepName"] = "设置冻结"; break; case 103: $new_item["stepName"] = "重置密码"; break; } switch ($item['state']) { case 1: $new_item["stateName"] = "待提交"; break; case 2: $new_item["stateName"] = "待审核"; break; case 3: $new_item["stateName"] = "审核驳回"; break; case 4: $new_item["stateName"] = "审核通过"; break; case 5: $new_item["stateName"] = "重新提交"; break; } $new_item["stateChange"] = $item['stateChange']; break; default: $new_item["stepName"] = DictApi::getCheckLogStepName($item["state"], $item["step"]); if (in_array($item["state"], [TalentState::REVERIFY_FAIL, TalentState::ZX_FAIL, TalentState::ANNOUNCED_REVERIFY_FAIL, TalentState::PUBLISH_FAIL])) { $new_item["stateName"] = '审核不通过'; } else if (in_array($item["state"], [TalentState::BASE_VERIFY_PASS, TalentState::FST_VERIFY_PASS, TalentState::DEPT_VERIFY_PASS, TalentState::REVERIFY_PASS])) { if ($item["step"] == 3) { if ($item["new_state"] == TalentState::SCND_SUBMIT) { $new_item["stateName"] = '审核驳回'; } else if ($item["new_state"] == TalentState::DEPT_VERIFY_PASS) { $new_item["stateName"] = '审核通过'; } else { $new_item["stateName"] = '待审核'; } } else { $new_item["stateName"] = '审核通过'; } } else if (in_array($item["state"], [TalentState::BASE_REJECT, TalentState::FST_VERIFY_REJECT, TalentState::DEPT_VERIFY_REJECT, TalentState::REVERIFY_REJECT])) { $new_item["stateName"] = '审核驳回'; } else if (in_array($item["state"], [TalentState::ZX_PASS, TalentState::ANNOUNCED, TalentState::ANNOUNCED_REVERIFY_PASS, TalentState::PUBLISH_PASS, TalentState::CERTIFICATED])) { $new_item["stateName"] = '审核通过'; } else if (in_array($item["state"], [TalentState::FST_SAVE, TalentState::SCND_SAVE])) { $new_item["stateName"] = '保存未提交'; } else if ($item["state"] == 0) { $new_item["stateName"] = '添加附件'; } else { if (($item["last_state"] == 4 && $item["state"] == 2) || ($item["last_state"] == 8 && $item["state"] == 6)) { $new_item["stateName"] = '待审核(重新提交)'; } else { $new_item["stateName"] = '待审核'; } } if ($item["step"] == 3) { $company = CompanyApi::getOne($item["companyId"]); if ($item["active"] == 0) { $new_item["stateChange"] = str_replace("部门", '"' . $company["name"] . '"', DictApi::getTalentInfoStateName($item["state"], $item["step"])); } else { $new_item["stateChange"] = sprintf("%s -> %s", str_replace("部门", '"' . $company["name"] . '"', DictApi::getTalentInfoStateName($item["state"], $item["step"])), DictApi::getTalentInfoStateName($item["new_state"], $item["step"])); } } else { if ($item["last_state"] && $item["new_state"]) { $new_item["stateChange"] = sprintf("%s -> %s", DictApi::getTalentInfoStateName($item["last_state"], $list[$key + 1]["step"]), DictApi::getTalentInfoStateName($item["new_state"], $list[$key - 1]["step"], $item["last_state"])); } else { $new_item["stateChange"] = ""; } } break; } $new_item["description"] = $item["description"]; $new_item["createUser"] = $item["updateUser"] ?: $item["createUser"]; $new_item["createTime"] = $item["updateTime"] ?: $item["createTime"]; $new_list[] = $new_item; } return json(["rows" => $new_list]); } public function findCommonFileType() { $param = $this->request->param(); $id = $param["mainId"]; $source = $param["source"]; $order = $param["order"]; $project = $param["project"]; $type = $param["type"]; $checkState = $param["checkState"]; $talent_condition = $param["talent_condition"]; if (in_array($checkState, [-1, 0, 1, 2])) { $where[] = ["step", "=", 1]; //只查找人才第一步所需文件 } else { $where[] = ["isConditionFile", "<>", 1]; //排除人才条件上传文件 } $where[] = ["project", "=", $project]; $where[] = ["active", "=", 1]; $where[] = ["delete", "=", 0]; $where[] = ["type", "=", $type]; if ($talent_condition && $source == 5) { $condition_info = Db::table("new_talent_condition")->findOrEmpty($talent_condition); if ($condition_info["bindFileTypes"]) { $whr[] = ["id", "in", $condition_info["bindFileTypes"]]; } } if ($whr) { $rows = Db::table("new_common_filetype")->whereOr([$where, $whr])->order("must asc")->order("sn " . $order)->select()->toArray(); } else { $rows = Db::table("new_common_filetype")->where($where)->order("must asc")->order("sn " . $order)->select()->toArray(); } if ($id) { foreach ($rows as $key => $row) { $where = []; $where[] = ["mainId", "=", $id]; $where[] = ["typeId", "=", $row["id"]]; $files = Db::table("new_talent_file")->where($where)->field("id,typeId,orignName,url")->order("sn asc")->select()->toArray(); foreach ($files as &$file) { $file["ext"] = pathinfo($file["url"])["extension"]; $file["url"] = getStoragePath($file["url"]); } $rows[$key]["files"] = $files; } } return json(["rows" => $rows]); } public function listTalentFile() { $param = $this->request->param(); $mainId = $param["mainId"]; $typeId = $param["fileTypeId"]; $where = [["mainId", "=", $mainId], ["typeId", "=", $typeId]]; $list = Db::table("new_talent_file")->where($where)->select()->toArray(); foreach ($list as $key => $item) { $list[$key]["url"] = getStoragePath($item["url"]); } return json($list); } public function addTalentFile() { $backName = $this->request->param("backName"); $fileId = $this->request->param("fileId"); $mainId = $this->request->param("mainId"); $fileTypeId = $this->request->param("fileTypeId"); $index = $this->request->param("index"); $type = $this->request->param("type"); $upload = new \app\common\api\UploadApi(); $file = $this->request->file("fileUrl"); if (!TalentApi::checkIsEditable($mainId)) { $res = ["msg" => "当前状态不能修改附件", "obj" => $index]; echo sprintf("", $backName, json_encode($res)); exit(); } $mime = $file->getMime(); switch ($mime) { case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"://xlsx case "application/pdf"://pdf case "application/vnd.ms-excel"://xls $filestd = $upload->uploadOne($file, "file", "talent_files"); break; case "image/jpg": case "image/jpeg": case "image/png": case "image/gif": $filestd = $upload->uploadOne($file, "image", "talent_files"); break; default: $res = ["msg" => "不支持的附件类型", "obj" => $index]; echo sprintf("", $backName, json_encode($res)); exit(); break; } $change = false; if ($fileId) { if (!$this->chkIsFileOwner($mainId, $type)) { $res = ["msg" => "删除失败", "obj" => $index]; echo sprintf("", $backName, json_encode($res)); exit(); } $old = Db::table("new_talent_file")->findOrEmpty($fileId); $old_filepath = "storage/" . $old["url"]; if (file_exists($old_filepath)) unlink($old_filepath); $data["id"] = $fileId; $change = true; } $data["mainId"] = $mainId; $data["type"] = $type; $data["typeId"] = $fileTypeId; $data["orignName"] = $file->getOriginalName(); $data["url"] = $filestd->filepath; $data["sn"] = $index; $data["createTime"] = time(); if ($fileId) { Db::table("new_talent_file")->save($data); } else { $fileId = Db::table("new_talent_file")->insertGetId($data); } $ext = pathinfo($filestd->filepath)["extension"]; TalentLogApi::write($type, $mainId, 0, sprintf("%s附件,附件名为:%s", $change ? "修改" : "添加", $data["orignName"]), 1, $fileTypeId, $fileId); $res = ["code" => 200, "msg" => "上传附件成功", "obj" => $index, "ext" => $ext, "info" => getStoragePath($filestd->filepath), "typeId" => $fileTypeId, "id" => $fileId, "orignName" => $data["orignName"]]; echo sprintf("", $backName, json_encode($res)); } public function deleteFile() { $param = $this->request->param(); $where = [["id", "=", $param["id"]]]; $file = Db::table("new_talent_file")->where($where)->findOrEmpty(); if (!TalentApi::checkIsEditable($file["mainId"])) return json(["msg" => "当前状态不能删除"]); if ($this->chkIsFileOwner($file["mainId"], $file["type"])) { $filepath = "storage/" . $file["url"]; if (file_exists($filepath)) { unlink($filepath); } Db::table("new_talent_file")->delete($file["id"]); TalentLogApi::write($file["type"], $file["mainId"], 0, sprintf("删除附件,附件名为:%s", $file["orignName"]), 1, $file["typeId"], $param["id"]); return json(["code" => 200, "msg" => "删除成功"]); } return json(["msg" => "不能删除"]); } /** * 下载文件 */ public function downloadFile() { $param = $this->request->param(); $type = $param["type"]; $id = $param["id"]; $where = []; $where[] = ["id", "=", $id]; $url = ""; switch ($type) { case 1: $fileinfo = Db::table("new_talent_file")->where($where)->findOrEmpty(); $filename = $fileinfo["orignName"]; $url = $fileinfo["url"]; break; case 2: $fileinfo = Db::table("new_talent_common_file")->where($where)->findOrEmpty(); $filename = $fileinfo["orignName"]; $url = $fileinfo["url"]; break; case 3: $fileinfo = Db::table("new_currency_filetype")->where($where)->findOrEmpty(); $filename = $fileinfo["templateUrl"]; $url = $fileinfo["templateUrl"]; break; } $filepath = "storage/" . $url; // 下载文件名 if (!file_exists($filepath)) { header('HTTP/1.1 404 NOT FOUND'); } else { $file = fopen($filepath, "rb"); Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length: " . filesize($filepath)); Header("Content-Disposition: attachment; filename=" . $filename); echo fread($file, filesize($filepath)); fclose($file); exit(); } } /** * 打包下载人才申请附件 */ public function downloadZip() { $param = $this->request->param(); $type = $param["type"]; $id = $param["id"]; $where = []; $where[] = ["mainId", "=", $id]; $where[] = ["type", "=", $type]; $files = Db::table("new_talent_file")->where($where)->select()->toArray(); if (!$files) die("没有附件不能打包下载"); $talent_info = \app\enterprise\model\Talent::findOrEmpty($id); $enterprise_info = \app\common\model\Enterprise::findOrEmpty($talent_info["enterprise_id"]); $zip_filename = sprintf("%s(%s)人才申报材料.zip", $talent_info["name"], $enterprise_info["name"]); $tmp_path = "storage/temp/"; $tmp_file_path = $tmp_path . $zip_filename; if (!file_exists($tmp_path)) { mkdir($tmp_path); } $zip = new \ZipArchive(); if (!$zip->open($tmp_file_path, \ZipArchive::CREATE | \ZipArchive::OVERWRITE)) { header('HTTP/1.1 404 NOT FOUND'); } foreach ($files as $file) { $filepath = "storage/" . $file["url"]; $filename = $file["orignName"]; $zip->addFile($filepath, $filename); } $zip->close(); if (file_exists($tmp_file_path)) { header("Cache-Control: public"); header("Content-Description: File Transfer"); header('Content-disposition: attachment; filename=' . $zip_filename); //文件名 header("Content-Type: application/octet-stream;charset=utf-8"); //zip格式的 header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件 header('Content-Length: ' . filesize($tmp_file_path)); //告诉浏览器,文件大小 @readfile($tmp_file_path); } //删除临时文件 @unlink($tmp_file_path); } private function chkIsFileOwner($mainId, $type) { if (!$mainId) return true; switch ($type) { case 1: if ($this->user["usertype"] == 2) { $user_id = $this->user["uid"]; $talent_info = Db::table("new_talent_info")->findOrEmpty($mainId); if ($user_id == $talent_info["enterprise_id"]) return true; } break; } return false; } public function getCompanyKvs() { $companys = \app\common\model\Company::field("name,id")->select(); return json($companys); } public function getLayerCatsByLayer() { $lv = $this->request->param("level"); return json(DictApi::getLayerCatsByLayer($lv)); } /** * 通过人才类别查找人才认定第二步骤支持的所有文件类型 * 默认人才认定第二步骤,当前只有人才认定分了两步,所以此方法目前默认参数高度匹配人才认定第二阶段附件的查找 */ public function getConditionFileTypesByType() { $params = $this->request->param(); $type = $params["type"]; //人才类型不默认,需要传 $declare_type = $params["project"] ?: 1; //默认人才认定 $active = $params["active"] ?: 1; //默认查找启用的附件 $where[] = ["type", "=", $type]; $where[] = ["project", "=", $declare_type]; $where[] = ["active", "=", $active]; $where[] = ["delete", "=", 0]; $where[] = ["isConditionFile", "=", 1]; $list = Db::table("new_common_filetype")->where($where)->order("sn " . $order)->select()->toArray(); return json($list); } public function listCurrencyFileType() { $where = [ 'type' => $this->request['type'], 'active' => 1 ]; $rows = CurrentcyFileType::where($where)->select(); return json(["rows" => $rows, 'total' => count($rows)]); } public function listTalentCommonFile() { $where = []; if (\StrUtil::isNotEmpAndNull($this->request['mainId'])) { $where[] = ['mainId', '=', $this->request['mainId']]; } if (\StrUtil::isNotEmpAndNull($this->request['typeId'])) { $where[] = ['typeId', '=', $this->request['typeId']]; } $res = TalentCommonFile::where($where)->order('sn')->select(); if ($res) { foreach ($res as $k => &$v) { $v['url'] = getStoragePath($v['url']); } } return json($res); } public function addTalentCommonFile() { $backName = \StrUtil::getRequestDecodeParam($this->request, 'backName'); $id = \StrUtil::getRequestDecodeParam($this->request, "fileId"); $mainId = \StrUtil::getRequestDecodeParam($this->request, "mainId"); $typeId = \StrUtil::getRequestDecodeParam($this->request, "typeId"); $index = \StrUtil::getRequestDecodeParam($this->request, "index"); if ($backName == "EpChangeEdit.callBack") { $type = 1; $error = "文件格式不正确,只能上传图片"; } else { $type = 4; $error = "文件格式不正确,只能上传pdf和图片"; } $uploadapi = new UploadApi(); $file_check_res = $uploadapi->uploadOne($this->request->file('fileUrl'), 'system'); if ($file_check_res->code == 500) { return \StrUtil::back($file_check_res, "Register.epCallBack"); } $file_data = [ 'id' => getStringId(), 'mainId' => $mainId, 'typeId' => $typeId, 'orignName' => $this->request->file('fileUrl')->getOriginalName(), 'url' => $file_check_res->filepath ]; if (\StrUtil::isEmpOrNull($id)) { $tc = TalentCommonFile::where('mainId', $mainId)->where('typeId', $typeId)->order('sn', 'desc')->findOrEmpty(); if ($tc) { $file_data['sn'] = $tc['sn'] + 1; } else { $file_data['sn'] = 1; } $file_data['createTime'] = date("Y-m-d H:i:s"); TalentCommonFile::create($file_data); $response_object = new \StdClass(); $response_object->code = 200; $response_object->msg = "附件上传成功!"; $response_object->obj = $index; return \StrUtil::back($response_object, $backName); } else { $tf = TalentCommonFile::findOrEmpty($id); $tf->originalName = $file_data['orignName']; $tf->updateTime = date("Y-m-d H:i:s"); $tf->url = $file_check_res->filepath; $tf->save(); $response_object = new \StdClass(); $response_object->code = 200; $response_object->msg = "附件修改成功!"; $response_object->obj = $index; return \StrUtil::back($response_object, $backName); } } public function changePwd() { $password = \StrUtil::getRequestDecodeParam($this->request, 'password'); $newPassword = \StrUtil::getRequestDecodeParam($this->request, 'newPassword'); //数据校验(原密码与新密码不能为空) if (\StrUtil::isEmpOrNull($password)) { return json(['code' => 500, 'msg' => "请填写原密码!"]); } if (\StrUtil::isEmpOrNull($newPassword)) { return json(['code' => 500, 'msg' => "请填写新密码!"]); } try { validate(Enterprise::class)->batch(true)->scene('changePwd')->check(['password' => $password, 'password' => $newPassword]); $ep = EnterpriseApi::getOne(session("user")['uid']); if (!$ep) { return json(['code' => 500, 'msg' => "请刷新页面后重试!"]); } if ($ep->password != hash('md5', $password)) { return json(['code' => 500, 'msg' => "旧密码不正确!"]); } $ep->password = hash('md5', $newPassword); $ep->updateUser = session("user")['uid']; $ep->updateTime = date("Y-m-d H:i:s"); $ep->save(); TalentChecklog::create([ 'id' => getStringId(), 'category' => 'enterprise_change', 'mainId' => $ep->id, 'type' => 10, 'typeField' => null, 'active' => 1, 'state' => 1, 'step' => 100, 'stateChange' => null, 'description' => '用户修改密码', 'createTime' => date("Y-m-d H:i:s", time()), 'createUser' => '用户' ]); return json(['code' => 200, 'msg' => "修改成功!"]); } catch (ValidateException $e) { $error = $e->getError(); return json(['code' => 500, 'msg' => array_pop($error)]); } } }