user = session("user");
}
public function findIdentifyConditionByLevel() {
$params = $this->request->param();
$id = $params["id"];
$type = $this->user["type"];
$showAll = $params["showAll"] == 1 ? true : false;
if ($id) {
$talentInfo = TalentApi::getOne($id);
$enterprise = \app\common\model\Enterprise::findOrEmpty($talentInfo["enterprise_id"]);
$type = $enterprise["type"];
}
$list = TalentConditionApi::getList($params["level"], $type, $params["cat"], $showAll);
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() {
$userType = session("user")["usertype"];
$params = $this->request->param();
$mainId = $params["mainId"];
$enterpriseId = $params["enterpriseId"];
$category = $params["category"];
$type = $params["type"];
$list = [];
switch ($type) {
case 1:
$talentInfo = TalentApi::getOne($mainId);
$talent_condition = TalentConditionApi::getOne($talentInfo["talent_condition"]);
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 19:
case 20:
$list = TalentLogApi::getList($type, $mainId);
break;
case 10:
if ($enterpriseId) {
$where[] = ["mainId", "=", $enterpriseId];
$ids = \app\enterprise\model\EnterpriseRecord::where($where)->column("id");
$ids[] = $enterpriseId;
$where = [];
$where[] = ["type", "=", $type];
$where[] = ["active", "=", 1];
$where[] = ["mainId", "in", $ids];
$list = TalentChecklog::where($where)->order("createTime desc")->select();
} else {
$list = TalentLogApi::getList($type, $mainId);
}
break;
}
$new_list = [];
foreach ($list as $key => $item) {
if (($item["createUser"] == "系统" || $item["updateUser"] == "系统") && $userType != 1)//非管理员用户不显示系统自动生成或修改的日志
continue;
$new_item["description"] = $item["description"];
switch ($item['type']) {
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 19:
$new_item["stateName"] = \app\common\state\LivingAllowanceState::getStateName($item["state"]);
$new_item["stepName"] = \app\common\state\LivingAllowanceState::getStepName($item["step"]);
$new_item["stateChange"] = $item["stateChange"];
break;
case 20:
$new_item["stepName"] = IntegralState::getLogStepName($item["state"]);
$new_item["stateName"] = IntegralState::getLogStateName($item["state"], $item["last_state"]);
if ($item["last_state"] && $item["new_state"]) {
$new_item["stateChange"] = sprintf("%s -> %s", IntegralState::getLogChangeName($item["last_state"]), IntegralState::getLogChangeName($item["new_state"], $item["last_state"]));
} else {
$new_item["stateChange"] = "";
}
break;
case 10:
if ($item["category"] == "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;
}
if ($category == "close_account") {
$new_item["stateName"] = \app\common\state\MainState::getStateName($item['state']);
} else {
switch ($item['state']) {
case 1:
if ($item["stateChange"]) {
$new_item["stateName"] = "待提交";
} else {
$item['stateChange'] = "修改密码";
}
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;
case 6:
$new_item["stateName"] = "初审驳回";
break;
case 7:
$new_item["stateName"] = "初审通过";
break;
}
}
$new_item["stateChange"] = $item['stateChange'];
} else {
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;
case 6:
$new_item["stateName"] = "初审通过";
break;
default:
break;
}
$new_item["stateChange"] = $item['stateChange'];
}
break;
case 1:
if ($item["step"] && $item["step"] != 3) {
$new_item["stepName"] = \app\common\state\LivingAllowanceState::getStepName($item["step"]);
} else {
$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::BASE_REVERIFY_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"] = '待审核';
}
if ($item["active"] === 0 && !in_array($item["companyId"], explode(",", $talent_condition["companyIds"]))) {
$new_item["stateName"] = '已废弃';
}
} else {
$new_item["stateName"] = '审核通过';
}
} else if (in_array($item["state"], [TalentState::BASE_REJECT, TalentState::BASE_REVERIFY_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 (in_array($item["state"], [TalentState::REVERIFY_CANCEL])) {
$new_item["stateName"] = '撤销审核';
} else if (!$item["state"]) {
if ($item["typeFileId"]) {
$new_item["stateName"] = '添加附件';
}
} else {
if (($item["last_state"] == TalentState::BASE_REJECT && $item["state"] == TalentState::FST_SUBMIT) || ($item["last_state"] == TalentState::FST_VERIFY_REJECT && $item["state"] == TalentState::SCND_SUBMIT)) {
$new_item["stateName"] = '待审核(重新提交)';
} else {
$new_item["stateName"] = '待审核';
}
}
if ($item["step"] == 3) {
$company = CompanyApi::getOne($item["companyId"]);
if ($item["active"] == 0) {
$new_item["description"] = "等待部门审核";
$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"] = $item["stateChange"] ?: "";
}
}
break;
}
$new_item["createUser"] = $item["updateUser"] && strpos($item["updateUser"], "企业用户") === false ? $item["updateUser"] : $item["createUser"]; //$item["updateUser"] ?: $item["createUser"];
if ($new_item["createUser"] != "用户") {
list($name, $company) = explode("(", $new_item["createUser"]);
$where = [];
$where[] = ["name", "=", $name];
$user = \app\admin\model\User::where($where)->find();
if ($user) {
$new_item["createUser"] = implode("(", [$user["account"], $company]);
}
}
$new_item["createTime"] = $item["updateTime"] ?: $item["createTime"];
$new_list[] = $new_item;
}
if ($type == ProjectState::TALENT) {
if ($talentInfo["oldId"]) {
$where = [];
$where[] = ["mainId", "=", $talentInfo["oldId"]];
$where[] = ["type", "=", ProjectState::TALENT];
$before_list = Db::table("un_talent_checklog")->where($where)->order("createTime desc")->select();
foreach ($before_list as $before_item) {
$new_list[] = [
"stepName" => DictApi::getOldStepNameByStep($before_item["step"]),
"stateName" => DictApi::getOldStateNameByState($before_item["state"]),
"stateChange" => $before_item["stateChange"],
"description" => $before_item["description"],
"createUser" => $before_item["createUser"],
"createTime" => $before_item["createTime"]
];
}
}
}
if ($type == ProjectState::LEVELCHANGE) {
$where = [];
$where[] = ["mainId", "=", $mainId];
$where[] = ["type", "=", ProjectState::LEVELCHANGE];
$before_list = Db::table("un_talent_checklog")->where($where)->order("createTime desc")->select();
foreach ($before_list as $before_item) {
$new_list[] = [
"stepName" => DictApi::getOldStepNameByStep($before_item["step"]),
"stateName" => DictApi::getOldStateNameByState($before_item["state"]),
"stateChange" => $before_item["stateChange"],
"description" => $before_item["description"],
"createUser" => $before_item["createUser"],
"createTime" => $before_item["createTime"]
];
}
}
return json(["rows" => $new_list]);
}
public function getJbtCheckLog() {
$obj = $this->request->param();
$where = [];
if ($obj["type"] != null) {
$where[] = ["type", "=", $obj["type"]];
}if (\StrUtil::isNotEmpAndNull($obj["mainId"])) {
$where[] = ["mainId", "=", $obj["mainId"]];
}
if (\StrUtil::isNotEmpAndNull($obj["typeFileId"])) {
$where[] = ["typeFileId", "=", $obj["typeFileId"]];
} else {
$where[] = ["typeFileId", "EXP", Db::raw("is null")];
}
if ($obj["active"] != null) {
$where[] = ["active", "=", $obj["active"]];
}
$list = TalentChecklog::where($where)->select()->order("createTime desc")->toArray();
foreach ($list as &$log) {
$log["stateName"] = \app\common\state\AllowanceStateEnum::getStateName($log["state"]);
$log["stepName"] = \app\common\state\AllowanceStepEnum::getStepName($log["step"]);
}unset($log);
$res = [
"rows" => $list,
"total" => count($list)
];
return json($res);
}
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"];
$isMix = $param["isMix"] ?: 0;
$talent_condition = $param["talent_condition"];
$token = $param["pageToken"];
$year = $param["year"];
$showOldFile = $param["showOldFile"];
$where[] = ["project", "=", $project];
$where[] = ["active", "=", 1];
$where[] = ["delete", "=", 0];
$where[] = ["type", "=", $type];
switch ($project) {
case 2:
$where[] = ["isConditionFile", "=", $param["allowanceType"]];
break;
case 1:
case 8:
//if (in_array($checkState, [TalentState::BASE_VERIFY_FAIL, 0, TalentState::FST_SAVE, TalentState::FST_SUBMIT, TalentState::BASE_VERIFY_PASS]) && $isMix != 1) {
//$where[] = ["step", "=", 1]; //只查找人才第一步所需文件
//} else {
$where[] = ["isConditionFile", "<>", 1]; //排除人才条件上传文件
//}
if (($talent_condition && in_array($source, [3, 4, 5])) || $type == \app\common\state\CommonConst::ENTERPRISE_WJ || $type == \app\common\state\CommonConst::ENTERPRISE_GJ) {
$condition_info = Db::table("new_talent_condition")->findOrEmpty($talent_condition);
if ($condition_info["bindFileTypes"]) {
$whr[] = ["id", "in", $condition_info["bindFileTypes"]];
}
}
break;
case 20:
//积分申报的附件需要特殊处理
$newList = [];
$_where = $where;
$_where[] = ["isConditionFile", "=", 1];
$fileTypes = Db::table("new_common_filetype")->where($_where)->order("must asc")->order("sn " . $order)->select()->toArray();
foreach ($fileTypes as $k => $ft) {
$_whr = [];
if ($id) {
$_whr[] = ["mainId", "=", $id];
} else {
$_whr[] = ["description", "=", $token];
}
$_whr[] = ["relationId", "=", 0];
$_whr[] = ["typeId", "=", $ft["id"]];
$files = Db::table("new_talent_file")->where($_whr)->field("id,typeId,orignName,url,relationId")->order("sn asc")->select()->toArray();
foreach ($files as $n => $file) {
$files[$n]["ext"] = pathinfo($file["url"])["extension"];
$files[$n]["url"] = getStoragePath($file["url"]);
}
$fileTypes[$k]["files"] = $files;
}
$newList[] = [
"id" => 0,
"name" => "公共附件",
"fileTypes" => $fileTypes
];
$itemIds = $param["itemId"];
$redis = \app\common\Redis::instance(\think\facade\Config::get("cache.stores.redis.select"));
if ($itemIds) {
foreach ($itemIds as $key => $item_id) {
$integral_item = json_decode($redis->hGet("IntegralItem", $item_id), true);
if ($integral_item["fileTypeId"]) {
$typeIds = array_filter(explode(",", $integral_item["fileTypeId"]));
$whr = $where;
$whr[] = ["id", "in", $typeIds];
$whr[] = ["isConditionFile", "=", 0];
$fileTypes = Db::table("new_common_filetype")->where($whr)->order("must asc")->order("sn " . $order)->select()->toArray();
foreach ($fileTypes as $k => $ft) {
$_whr = [];
if ($id) {
$_whr[] = ["mainId", "=", $id];
} else {
$_whr[] = ["description", "=", $token];
}
$_whr[] = ["relationId", "=", $item_id];
$_whr[] = ["typeId", "=", $ft["id"]];
$files = Db::table("new_talent_file")->where($_whr)->field("id,typeId,orignName,url,relationId")->order("sn asc")->select()->toArray();
foreach ($files as $n => $file) {
$files[$n]["ext"] = pathinfo($file["url"])["extension"];
$files[$n]["url"] = getStoragePath($file["url"]);
}
$fileTypes[$k]["files"] = $files;
}
$newList[] = [
"id" => $integral_item["id"],
"name" => $integral_item["name"],
"fileTypes" => $fileTypes
];
}
}
}
return json(["rows" => $newList]);
break;
}
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 ($project == ProjectState::JBT) {
$allowanceInfo = \app\common\api\TalentAllowanceApi::getInfoById($id);
$where = [];
$where[] = ["enterpriseId", "=", $allowanceInfo["enterpriseId"]];
$where[] = ["batch", "=", $allowanceInfo["year"]];
$commonFiles = Db::table("un_talent_allowance_common_file")->alias("f")->leftJoin("new_common_filetype ft", "ft.id=f.fileTypeId")->field("f.*,ft.relationIds")->where($where)->select()->toArray();
$relationIds = [];
foreach ($commonFiles as $key => $row) {
$_relationIds = array_filter(explode(",", $row["relationIds"]));
$relationIds = array_merge($relationIds, $_relationIds);
}
foreach ($rows as $key => $row) {
if (in_array($row["id"], $relationIds)) {
$rows[$key]["must"] = 2;
}
}
$rows = bubbleSort($rows, "must");
}
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;
}
}
$old_types = [];
if ($showOldFile == 1) {
$where = [];
$where[] = ["type", "=", $type];
$where[] = ["project", "=", $project];
$where[] = ["active", "=", 1];
$old_types = Db::table("un_common_filetype")->where($where)->order("must")->order("sn")->select()->toArray();
}
if ($old_types) {
$rows = array_merge($rows, $old_types);
}
return json(["rows" => $rows, "old_types" => $old_types]);
}
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();
$_where = [["mainId", "=", $mainId], ["fileTypeId", "=", $typeId]];
$old_list = Db::table("un_talent_file")->where($_where)->select()->toArray();
if ($old_list) {
$list = array_merge($list, $old_list);
}
foreach ($list as $key => $item) {
$list[$key]["ext"] = pathinfo($item["url"])["extension"];
$list[$key]["url"] = getStoragePath($item["url"]);
}
return json($list);
}
public function listNonPredefinedFiles() {
$param = $this->request->param();
$memo = $param["batch"];
$fileTag = $param["fileTag"];
$where = [["fileTag", "=", $fileTag], ["memo", "=", $memo]];
$list = Db::table("new_non_predefined_file")->where($where)->select()->toArray();
foreach ($list as $key => $item) {
$list[$key]["ext"] = pathinfo($item["url"])["extension"];
$list[$key]["url"] = getStoragePath($item["url"]);
}
return json(["rows" => $list]);
}
public function listTalentAllowanceCommonFile() {
$param = $this->request->param();
$id = $param["id"];
$info = \app\common\api\TalentAllowanceApi::getInfoById($id);
$list = [];
if ($info) {
$where = [["batch", "=", $info["year"]], ["enterpriseId", "=", $info["enterpriseId"]], ["fileTypeId", "<>", 0]];
$list = Db::table("un_talent_allowance_common_file")->alias("f")->leftJoin("new_common_filetype ft", "ft.id=f.fileTypeId")->where($where)->field("f.*,ft.name as fileTypeName")->select()->toArray();
foreach ($list as $key => $item) {
$list[$key]["ext"] = pathinfo($item["url"])["extension"];
$list[$key]["url"] = getStoragePath($item["url"]);
}
}
return json(["rows" => $list]);
}
public function addTalentFile() {
$backName = $this->request->param("backName");
$fileId = $this->request->param("fileId");
$mainId = $this->request->param("mainId");
$fileTypeId = $this->request->param("fileTypeId");
$relationId = $this->request->param("relationId");
$pageToken = $this->request->param("pageToken");
$index = $this->request->param("index");
$type = $this->request->param("type");
$upload = new \app\common\api\UploadApi();
$file = $this->request->file("fileUrl");
$isFileEditable = false;
switch ($type) {
case ProjectState::INTEGRAL:
$isFileEditable = \app\common\api\IntegralRecordApi::checkIsEditable($mainId);
break;
default:
$isFileEditable = TalentApi::checkIsEditable($mainId);
break;
}
if (!$isFileEditable) {
$res = ["msg" => "当前状态不能修改附件", "obj" => $index];
echo sprintf("", $backName, json_encode($res));
exit();
}
$mime = $file->getMime();
switch ($mime) {
case "application/msword"://word
case "application/vnd.openxmlformats-officedocument.wordprocessingml.document"://word
case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"://xlsx
case "application/pdf"://pdf
case "application/vnd.ms-excel"://xls
case "application/CDFV2"://wps版word
$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;
case "application/zip":
case "application/x-rar-compressed":
case "application/x-7z-compressed":
if (!in_array($file->extension(), ['zip', '7z', 'rar'])) {
$filestd = $upload->uploadOne($file, "file", "talent_files");
} else {
if (in_array($type, [ProjectState::JBT])) {
$filestd = $upload->uploadOne($file, "hybrid", "talent_files");
} else {
$res = ["msg" => "不支持的附件类型", "obj" => $index];
echo sprintf("", $backName, json_encode($res));
exit();
}
}
break;
default:
$res = ["msg" => "不支持的附件类型", "obj" => $index];
echo sprintf("", $backName, json_encode($res));
exit();
break;
}
if ($filestd->code != 200) {
$res = ["msg" => $filestd->msg, "obj" => $index];
echo sprintf("", $backName, json_encode($res));
exit();
}
$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["relationId"] = $relationId;
$data["description"] = $pageToken;
$data["type"] = $type;
$data["typeId"] = $fileTypeId;
$data["orignName"] = $file->getOriginalName();
$data["url"] = $filestd->filepath;
$data["sn"] = $index;
$data["createTime"] = date("Y-m-d H:i:s");
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"])) {
if (!empty($file["url"])) {
$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 deleteTalentCommonFile() {
$param = $this->request->param();
$where = [["id", "=", $param["id"]]];
$file = Db::table("new_talent_common_file")->where($where)->findOrEmpty();
$filepath = "storage/" . $file["url"];
if (file_exists($filepath)) {
unlink($filepath);
}
Db::table("new_talent_common_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 deleteNonPredefinedFile() {
$param = $this->request->param();
$where = [["id", "=", $param["id"]]];
$file = Db::table("new_non_predefined_file")->where($where)->findOrEmpty();
$filepath = "storage/" . $file["url"];
if (file_exists($filepath) && $file["url"]) {
@unlink($filepath);
}
Db::table("new_non_predefined_file")->delete($file["id"]);
return json(["code" => 200, "msg" => "删除成功"]);
}
/**
* 下载文件
*/
public function downloadFile() {
$param = $this->request->param();
$type = $param["type"];
$id = $param["id"];
$where = [];
$where[] = ["id", "=", $id];
$url = "";
switch ($type) {
case 1:
case 2:
case 8:
case 19:
$fileinfo = Db::table("new_talent_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;
case 4:
$fileinfo = Db::table("sys_common_file")->where($where)->findOrEmpty();
$filename = $fileinfo["orignName"];
$url = $fileinfo["url"];
break;
case 5:
$fileinfo = Db::table("new_common_filetype")->where($where)->findOrEmpty();
$filename = $fileinfo["templateUrl"];
$url = $fileinfo["templateUrl"];
break;
case 6://预定义外的文件类型下载
$fileinfo = Db::table("new_non_predefined_file")->where($where)->findOrEmpty();
$filename = $fileinfo["originalName"];
$url = $fileinfo["url"];
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() {
$table = "new_talent_file";
$param = $this->request->param();
$type = $param["type"];
$id = $param["id"];
$where = [];
switch ($type) {
case ProjectState::TALENT:
$where[] = ["type", "=", $type];
$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"]);
break;
case ProjectState::JBT:
$where[] = ["type", "=", $type];
$info = \app\common\model\TalentAllowance::findOrEmpty($id);
$enterprise_info = \app\common\model\Enterprise::findOrEmpty($info["enterpriseId"]);
$zip_filename = sprintf("%s(%s)津补贴申报材料.zip", $info["talentName"], $enterprise_info["name"]);
break;
case ProjectState::QUIT:
$table = "new_talent_common_file";
$info = \app\common\model\TalentQuit::findOrEmpty($id);
$enterprise_info = \app\common\model\Enterprise::findOrEmpty($info["enterpriseId"]);
$zip_filename = sprintf("%s(%s)离职材料.zip", $info["talentName"], $enterprise_info["name"]);
break;
case ProjectState::WORKCHANGE:
$table = "new_talent_common_file";
$info = \app\common\model\TalentWorkUnitChange::findOrEmpty($id);
$enterprise_info = \app\common\model\Enterprise::findOrEmpty($info["enterpriseId"]);
$zip_filename = sprintf("%s(%s)工作单位变更材料.zip", $info["talentName"], $enterprise_info["name"]);
break;
case ProjectState::LEVELCHANGE:
$info = \app\enterprise\model\TalentTypeChange::findOrEmpty($id);
$enterprise_info = \app\common\model\Enterprise::findOrEmpty($info["enterpriseId"]);
$zip_filename = sprintf("%s(%s)人才层次变更材料.zip", $info["talentName"], $enterprise_info["name"]);
break;
case ProjectState::INTEGRAL:
$where[] = ["type", "=", $type];
$record = \app\common\api\IntegralRecordApi::getOne($id);
$zip_filename = sprintf("%s(%s)积分申报材料.zip", $record["name"], $record["enterprise"]["name"]);
break;
case 109:
$table = "un_enterpriseclose_record";
$record = \app\common\model\EnterpriseCloseAccount::where("id", $id)->find();
$zip_filename = sprintf("%s(%s)注销申请材料.zip", $record["name"], $record["username"]);
$files = json_decode($record["files"], true);
break;
}
$where[] = ["mainId", "=", $id];
if (!$files)
$files = Db::table($table)->where($where)->select()->toArray();
if (!$files) {
//die("没有附件不能打包下载");
echo "";
}
$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) {
if (is_array($file)) {
$filepath = "storage/" . $file["url"];
$fileTypeInfo = Db::table("new_common_filetype")->where("id", $file["typeId"])->find();
$filename = $fileTypeInfo["name"] . "/" . $file["orignName"];
$zip->addFile($filepath, $filename);
} else {
$filepath = "storage/" . $file;
$filename = basename($filepath);
$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);
}
/**
* 打包下载人才申请附件
*/
public function downloadCommonZip() {
$table = "un_talent_allowance_common_file";
$param = $this->request->param();
$id = $param["id"];
$year = $param["year"];
$info = \app\common\model\TalentAllowance::findOrEmpty($id);
$enterprise_info = \app\common\model\Enterprise::findOrEmpty($info["enterpriseId"]);
$zip_filename = sprintf("%s(%s)津补贴申报通用材料.zip", $info["talentName"], $enterprise_info["name"]);
$where = [];
$where[] = ["enterpriseId", "=", $info["enterpriseId"]];
$where[] = ["batch", "=", $year];
$files = Db::table($table)->where($where)->select()->toArray();
if (!$files) {
//die("没有附件不能打包下载");
echo "";
}
$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) {
if (is_array($file)) {
$filepath = "storage/" . $file["url"];
$fileTypeInfo = Db::table("new_common_filetype")->where("id", $file["fileTypeId"])->find();
$filename = $fileTypeInfo["name"] . "/" . $file["originalName"];
$zip->addFile($filepath, $filename);
} else {
$filepath = "storage/" . $file;
$filename = basename($filepath);
$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 ProjectState::TALENT:
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;
case ProjectState::JBT:
if ($this->user["usertype"] == 2) {
$user_id = $this->user["uid"];
$talent_info = \app\common\model\TalentAllowance::findOrEmpty($mainId);
if ($user_id == $talent_info["enterpriseId"])
return true;
}
if ($this->user["usertype"] == 1) {
return true;
}
break;
case ProjectState::EDUCATION:
if ($this->user["usertype"] == 3) {
$user_id = $this->user["uid"];
$talent_info = \app\common\model\EducationSchool::findOrEmpty($mainId);
if ($user_id == $talent_info["personId"])
return true;
}
break;
case ProjectState::LEVELCHANGE:
if ($this->user["usertype"] == 2) {
$user_id = $this->user["uid"];
$talent_info = \app\enterprise\model\TalentTypeChange::findOrEmpty($mainId);
if ($user_id == $talent_info["enterpriseId"])
return true;
}
break;
case ProjectState::LIVINGALLOWANCE:
if ($this->user["usertype"] == 2) {
$user_id = $this->user["uid"];
$record = Db::table("md_living_allowance_info")->findOrEmpty($mainId);
if ($user_id == $record["enterpriseId"])
return true;
}
break;
case ProjectState::INTEGRAL:
if ($this->user["usertype"] == 2) {
$user_id = $this->user["uid"];
$record = Db::table("new_integral_record")->findOrEmpty($mainId);
if ($user_id == $record["enterprise_id"])
return true;
}
break;
case ProjectState::BASICCHANGE:
if ($this->user["usertype"] == 2) {
$user_id = $this->user["uid"];
$record = Db::table("un_talent_basic_change")->findOrEmpty($mainId);
if ($user_id == $record["enterpriseId"])
return true;
}
break;
}
return false;
}
public function getCompanyKvs() {
$companys = \app\common\model\Company::field("name,id")->select();
return json($companys);
}
public function getEnterpriseKvs() {
$where[] = ["type", "=", $this->user["type"]];
$enterprises = \app\common\model\Enterprise::field("name,id")->where($where)->select();
return json($enterprises);
}
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()->toArray();
if (\StrUtil::isNotEmpAndNull($this->request['mainId']) && \StrUtil::isNotEmpAndNull($this->request['typeId'])) {
$_where = [["mainId", "=", $this->request['mainId']], ["typeId", "=", $this->request['typeId']]];
$old_list = Db::table("un_talent_common_file")->where($_where)->select()->toArray();
}
if ($old_list) {
$res = array_merge($res, $old_list);
}
if ($res) {
foreach ($res as $k => &$v) {
$v["ext"] = pathinfo($v["url"])["extension"];
$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) {
$file_check_res->obj = $index;
return \StrUtil::back($file_check_res, $backName);
}
$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,
'typeFileId' => 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)]);
}
}
function getIntegralRecordByIdCard() {
$cardType = $this->request->param("cardType");
$cardNumber = $this->request->param("cardNumber");
$tips = \app\common\api\IntegralRecordApi::getIntegralRecordByIdCard($cardType, $cardNumber);
return json(["tips" => $tips]);
}
function getIntegralProjectsByType() {
$projectType = $this->request->param("projectType") ?: 0;
if (session("user")["usertype"] == 2) {
$where[] = ["type", "=", 2];
} else {
$type = $this->request->param("type") ?: 0;
$where[] = ["type", "=", $type];
}
$where[] = ["projectType", "=", $projectType];
$where[] = ["active", "=", 1];
$list = \app\common\api\IntegralProjectApi::getAll($where);
return json($list);
}
public function getIntegralItemsByProject() {
$projectId = $this->request->param("projectId") ?: 0;
$where[] = ["projectId", "=", $projectId];
$where[] = ["active", "=", 1];
$list = \app\common\api\IntegralItemApi::getAll($where);
return json($list);
}
public function calIntegral() {
$params = $this->request->param();
$enterpriseId = $params["enterpriseId"];
$cardType = $params["cardType"];
$cardNumber = $params["cardNumber"];
$itemId = $params["itemId"];
$amount = $params["amount"];
if (session("user")["usertype"] == 2) {
//企业端只能通过企业自身id来查询积分
$enterpriseId = session("user")["uid"];
}
return json(\app\common\api\IntegralRecordApi::calIntegral($enterpriseId, $cardType, $cardNumber, $itemId, $amount));
}
public function imgViewer() {
$img = urldecode($this->request["picShow"]);
return view("", ["img" => $img]);
}
public function gotoFileShow() {
return view("admin@talent/filesShow");
}
public function getJbtFiletypesExceptCommon() {
$type = $this->user["type"];
$where[] = ["type", "=", $type];
$where[] = ["project", "=", 2];
$where[] = ["isConditionFile", "in", [1, 2]];
$fileTypes = \app\common\api\FileTypeApi::getAll($where);
foreach ($fileTypes as &$ft) {
$ft["name"] = sprintf("%s(%s)", $ft["name"], \app\common\state\AllowanceTypeEnum::getTypeName($ft["isConditionFile"]));
}
return json($fileTypes);
}
public function findContractFileType() {
$talentId = $this->request["talentId"];
$talentInfo = \app\common\api\VerifyApi::getTalentInfoById($talentId);
$project = ProjectState::TALENT;
//检查是否有工作单位变更记录
$_where = [];
$_where[] = ["checkState", "=", 3];
$_where[] = ["delete", "=", 0];
$_where[] = ["idCard", "=", $talentInfo["card_number"]];
$workChange = Db::table("un_talent_workunit_change")->where($_where)->order("passTime desc")->find();
//检查是否有基础信息变更记录并且有合同变更
$_where = [];
$_where[] = ["checkState", "=", 3];
$_where[] = ["delete", "=", 0];
$_where[] = ["newIdCard", "=", $talentInfo["card_number"]];
$_string = "oldContractTime <> '' and oldContractTime <> concat(newContractStartTime,' - ',newContractEndTime)";
$baseChange = Db::table("un_talent_basic_change")->where($_where)->where($_string)->order("newSubmitTime desc")->find();
if ($workChange && !$baseChange) {
$project = ProjectState::WORKCHANGE;
}
if (!$workChange && $baseChange) {
$project = ProjectState::BASICCHANGE;
}
if ($workChange && $baseChange) {
$project = strtotime($workChange["passTime"]) > strtotime($baseChange["newSubmitTime"]) ? ProjectState::WORKCHANGE : ProjectState::BASICCHANGE;
}
$type = $this->request["type"];
if ($project == ProjectState::TALENT) {
$where[] = ["name", "like", "%工作%"];
}
$where[] = ["project", "=", $project];
$where[] = ["active", "=", 1];
$where[] = ["isConditionFile", "<>", 1];
$where[] = ["delete", "=", 0];
$where[] = ["type", "=", $type];
$rows = Db::table("new_common_filetype")->where($where)->order("must asc")->order("sn asc")->select()->toArray();
return json(["rows" => $rows]);
}
public function contractView() {
$id = $this->request["id"];
$talentInfo = \app\common\api\VerifyApi::getTalentInfoById($id);
$type = $talentInfo["enterpriseType"];
return view("", ["id" => $talentInfo["id"], "type" => $type]);
}
public function filePreview() {
$url = $this->request["url"];
$title = $this->request["title"];
return view("", ["url" => $url, "title" => $title]);
}
public function getEnterpriseData() {
}
}