session("user")['type']]); } public function list() { $res = EnterpriseLaApi::getList($this->request); return json($res); } /** * 申请 */ public function apply(\think\Request $request) { $type = $this->user["type"]; $param = $request->param(); $id = isset($param["id"]) ? $param["id"] : 0; $info = CommonLaApi::getInfoById($id); $ep = EnterpriseApi::getOne($this->user["uid"]); if (!chkEnterpriseFull($ep)) return; /* if ($info && !in_array($info["checkState"], [LaState::LA_SAVE, LaState::LA_FIRST_REJECT])) { return view("", ["row" => $info, "enterprise" => $ep, "hand" => "select"]); } */ if ($request->isPost()) { return $this->save($info, $request); } $hand = $info ? "update" : "add"; $batch = $info["year"] ?: BatchApi::getValidBatch(ProjectState::LIVINGALLOWANCE, $this->user["type"])["batch"]; return view("", ["year" => $batch, "row" => $info, "enterprise" => $ep, "hand" => $hand]); } public function detail(\think\Request $request) { $param = $request->param(); $id = $param["id"]; $info = CommonLaApi::getInfoById($id); $ep = EnterpriseApi::getOne($this->user["uid"]); if (!chkEnterpriseFull($ep)) return; return view("apply", ["row" => $info, "enterprise" => $ep, "hand" => "select"]); } private function other_validate($info) { $responseObj = new \stdClass(); /* 校验姓名是否与人才库一致 */ $where = []; $where[] = ["checkState", ">=", \app\common\api\TalentState::REVERIFY_PASS]; $where[] = ["checkState", "not in", [\app\common\api\TalentState::REVERIFY_REJECT, \app\common\api\TalentState::REVERIFY_FAIL]]; $where[] = ["card_number", "=", $info["idCard"]]; $talentInfo = Db::table("new_talent_info")->where($where)->order("createTime desc")->find(); if ($talentInfo && $talentInfo["name"] != $info["name"]) { $responseObj->msg = "该证件号码的姓名与人才库姓名不匹配!"; return $responseObj; } $year = substr($info["year"], 0, 4); /* 查询当前批次审核通过的数量以及当前批次未审核完成的数量 */ $where = []; $where[] = ["year", "like", "{$year}%"]; $where[] = ["idCard", "=", $info["idCard"]]; $where[] = ["checkState", "<>", LaState::LA_NOTPASS]; if ($info["id"]) { $where[] = ["id", "<>", $info["id"]]; } $nowYearApplyCount = LaModel::where($where)->count(); if ($nowYearApplyCount > 0) { $responseObj->msg = "不能重复申报"; return $responseObj; } if (!$info["id"]) { $passYears = CommonLaApi::getPassYearsByIdCard($info["idCard"]); if (in_array($year, $passYears)) { return $responseObj->msg = "您今年度已经申报过了,每年度仅能享受一次生活补贴!"; } if (count($passYears) >= 3) { return $responseObj->msg = "一个人最多享受三次!"; } } $responseObj->code = 200; return $responseObj; } private function validateIsEdit($checkState) { $responseObj = new \stdClass(); if ($checkState != LaState::LA_SAVE && $checkState != LaState::LA_BEFORE_REJECT && $checkState != LaState::LA_FIRST_REJECT) { if ($checkState == LaState::LA_NOTPASS) { $responseObj->msg = "您的申报审核不通过,无法操作"; } else if ($checkState >= LaState::LA_PASS) { $responseObj->msg = "您的申报已审核通过,无法操作"; } else { $responseObj->msg = "您的申报正在审核中,请耐心等待"; } $responseObj->code = 500; return $responseObj; } $responseObj->code = 200; return $responseObj; } /** * 提交表单 */ public function submitToCheck() { try { $id = $this->request["id"]; $info = CommonLaApi::getInfoById($id); if (!$info) { throw new ValidateException("提交审核失败,请先填写基础信息"); } if ($info["enterpriseId"] != $this->user["uid"]) { throw new ValidateException("没有对应的人才认定申报信息"); } $batch = BatchApi::checkBatchValid(["type" => ProjectState::LIVINGALLOWANCE, "year" => $info["year"], "first_submit_time" => $info["firstSubmitTime"]], $this->user["type"]); if ($batch["code"] != 200) { throw new ValidateException($batch["msg"]); } $response = $this->validateIsEdit($info["checkState"]); if ($response->code != 200) { throw new ValidateException($response->msg); } validate(LivingAllowanceValidator::class)->check($info); $response = $this->other_validate($info); if ($response->code != 200) { throw new ValidateException($response->msg); } $where = []; $where[] = ["mainId", "=", $id]; $where[] = ["type", "=", ProjectState::LIVINGALLOWANCE]; $uploadedFileTypes = Db::table("new_talent_file")->where($where)->column("distinct typeId"); $where = []; $where[] = ["project", "=", ProjectState::LIVINGALLOWANCE]; $where[] = ["type", "=", $this->user["type"]]; $where[] = ["must", "=", 1]; $where[] = ["active", "=", 1]; $where[] = ["delete", "=", 0]; $where[] = ["id", "not in", $uploadedFileTypes]; $unUploadfiletypes = Db::table("new_common_filetype")->where($where)->select()->toArray(); if ($unUploadfiletypes) { $msg = "以下附件为必传:
"; foreach ($unUploadfiletypes as $ft) { $msg .= "*" . $ft["name"] . "
"; } throw new ValidateException($msg); } $data["id"] = $id; $data["checkState"] = LaState::LA_NEED_FIRST_CHECK; if (!$info["firstSubmitTime"]) { $data["firstSubmitTime"] = date("Y-m-d H:i:s"); } $data["newSubmitTime"] = date("Y-m-d H:i:s"); $data["checkMsg"] = ""; $data["files"] = ""; $data["fields"] = ""; $res = LaModel::update($data); if ($res) { $user = session("user"); $log["id"] = getStringId(); $log["active"] = 1; $log["state"] = 1; $log["step"] = 0; $log["stateChange"] = LaState::getStateDesc($info["checkState"]) . "->" . LaState::getStateDesc($data["checkState"]); $log["type"] = ProjectState::LIVINGALLOWANCE; $log["mainId"] = $id; $log["description"] = "确认提交审核"; $log["createUser"] = $user ? sprintf("%s(%s)", $user["account"], $user["companyName"] ?: $user["rolename"]) : "系统"; $log["createTime"] = date("Y-m-d H:i:s"); TalentLog::create($log); return json(["code" => 200, "msg" => "提交审核成功"]); } throw new ValidateException("提交审核失败"); } catch (ValidateException $e) { $responseObj = new \stdClass(); $responseObj->code = 500; $responseObj->msg = $e->getMessage(); return json($responseObj); } catch (\think\Exception $e) { $res = ["code" => 500, "msg" => "发生预料外错误,请联系管理员处理,错误代码:" . $e->getCode()]; $logInfo = [ "enterprise_id" => $this->user["uid"], "data" => $data, "controller" => $this->request->controller(), "action" => $this->request->action(), "errCode" => $e->getCode(), "errMsg" => $e->getMessage() ]; Log::write($logInfo, "error"); return json($res); } } public function save($info, \think\Request $request) { try { $batch = BatchApi::checkBatchValid(["type" => ProjectState::LIVINGALLOWANCE, "year" => $info["year"], "first_submit_time" => $info["firstSubmitTime"]], $this->user["type"]); if ($batch["code"] != 200) { throw new ValidateException($batch["msg"]); } if ($info) { $response = $this->validateIsEdit($info["checkState"]); if ($response->code != 200) { throw new ValidateException($response->msg); } } $data = $request->param(); $data["year"] = $batch["batch"]; validate(LivingAllowanceValidator::class)->check($data); $response = $this->other_validate($data); if ($response->code != 200) { throw new ValidateException($response->msg); } $id = $data["id"]; if ($id) { if (!$info || $info["id"] != $id || $info["enterpriseId"] != $this->user["uid"]) { throw new ValidateException("没有对应的人才认定申报信息"); } $data["checkState"] = $info["checkState"]; } else { $data["id"] = getStringId(); $data["active"] = 1; $data["checkState"] = LaState::LA_SAVE; $data["isPublic"] = 1; $data["recommendIsPay"] = 0; $data["isPay"] = 0; $data["createTime"] = date("Y-m-d H:i:s"); $data["createUser"] = $this->user["uid"]; $data["creditStatus"] = 1; $count = count(CommonLaApi::getPassYearsByIdCard($data["idCard"])); $data["applyCount"] = $count + 1; if ($data["applyCount"] > 1 && !$data["personalTax"]) { throw new ValidateException("非首年申报必须填写个税缴交情况!"); } } $checkState = $data["checkState"]; $data["photo"] = $info["photo"]; if ($request->file()) { $headimg = $request->file("file"); $upload = new \app\common\api\UploadApi(); $result = $upload->uploadOne($headimg, "image", "talent/photo"); $file = imagecreatefromstring(file_get_contents("storage/" . $result->filepath)); $width = imagesx($file); $height = imagesy($file); //免冠二寸照长宽413:579 if ($width * 579 != $height * 413) { @unlink("storage/" . $result->filepath); //像素不符合,删除上传文件 throw new ValidateException("近期免冠半身彩照(二寸)不符合二寸像素标准。*二寸像素标准[413*579]"); } if ($info && $info["photo"]) { //如果新照片符合像素要求,则删除旧照片 $old_head_url = "storage/" . $info["photo"]; if (file_exists($old_head_url)) @unlink($old_head_url); } $data["photo"] = $result->filepath; } if (!$data["photo"]) throw new ValidateException("请上传头像。*二寸像素标准[413*579]"); if ($info["checkState"] == LaState::LA_FIRST_REJECT) { //驳回,需要判断什么字段可以提交 $modify_fields = array_filter(explode(",", $info["fields"])); $tmp_data = $data; $data = []; foreach ($modify_fields as $field) { $data[$field] = $tmp_data[$field]; } $data["id"] = $id; } if ($id) { $res = LaModel::update($data); } else { $res = LaModel::insertGetId($data); } if ($res) { return json(["code" => 200, "msg" => "保存成功", "obj" => ["id" => $data["id"], "checkState" => $checkState]]); } throw new ValidateException("保存失败"); } catch (ValidateException $e) { $responseObj = new \stdClass(); $responseObj->code = 500; $responseObj->msg = $e->getMessage(); return json($responseObj); } catch (\think\Exception $e) { $res = ["code" => 500, "msg" => "发生预料外错误,请联系管理员处理,错误代码:" . $e->getCode()]; $logInfo = [ "enterprise_id" => $this->user["uid"], "data" => $data, "controller" => $this->request->controller(), "action" => $this->request->action(), "errCode" => $e->getCode(), "errMsg" => $e->getMessage() ]; Log::write($logInfo, "error"); return json($res); } } public function delete() { $id = $this->request->param("id"); $info = CommonLaApi::getInfoById($id); if (!$info || $info["enterpriseId"] != $this->user["uid"]) { return json(["msg" => "操作失败"]); } $checkState = $info["checkState"]; if ($checkState != LaState::LA_SAVE) { return json(["msg" => "该申报已提交审核,无法删除"]); } TalentModel::delete($id); $where = [["mainId", "=", $id], ["type", "=", ProjectState::LIVINGALLOWANCE]]; $list = Db::table("new_talent_file")->where($where)->select()->toArray(); foreach ($list as $key => $file) { if (!empty($file["url"])) { $filepath = "storage/" . $file["url"]; if (file_exists($filepath)) { @unlink($filepath); } } Db::table("new_talent_file")->delete($file["id"]); } return json(["msg" => "删除成功"]); } }