123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- <?php
- namespace app\job;
- use think\queue\Job;
- use think\facade\Log;
- use think\facade\Db;
- use app\common\api\TalentState;
- use app\common\state\ProjectState;
- use app\common\model\TalentChecklog;
- use app\common\model\TalentAllowance as TaModel;
- use app\common\state\MainState;
- use app\common\api\LocationApi;
- use app\enterprise\model\TalentTypeChange;
- use app\common\state\AllowanceProjectEnum;
- use app\common\state\AllowanceTypeEnum;
- /**
- * Description of TalentAllowance
- *
- * @author sgq
- */
- class TalentAllowance {
- public function fire(Job $job, $data) {
- if ($this->deal($data)) {
- $job->delete();
- return true;
- }
- if ($job->attempts() >= 3) {
- $job->delete();
- return false;
- }
- $job->release(10); //10秒后重试
- }
- /**
- * 处理业务逻辑
- * @param type $data
- * @return bool
- */
- public function deal($data): bool {
- switch ($data["type"]) {
- case 1:
- //添加保存未提交的津补贴申报
- try {
- $method = $data["method"];
- $talentId = $data["talentId"];
- $importRow = $data["data"];
- $enterprise = $data["enterprise"];
- $year = $data["year"];
- $allowanceType = $data["allowanceType"];
- if ($method == 1) {
- $ti = \app\common\api\VerifyApi::getTalentInfoById($talentId);
- if ($ti["talent_type"] == 1 && $ti["enterpriseType"] == \app\common\state\CommonConst::ENTERPRISE_WJ && $allowanceType == AllowanceTypeEnum::JBT_JT) {
- return false;
- }
- } else {
- $where[] = ["card_number", "=", $importRow[1]];
- $where[] = ["delete", "=", 0];
- $where[] = ["checkState", "=", TalentState::CERTIFICATED];
- $ti = Db::table("new_talent_info")->where($where)->order("talent_arrange asc")->find();
- $talentId = $ti["id"];
- $ti = \app\common\api\VerifyApi::getTalentInfoById($talentId);
- if ($ti["talent_type"] == 1 && $ti["enterpriseType"] == \app\common\state\CommonConst::ENTERPRISE_WJ && $allowanceType == AllowanceTypeEnum::JBT_JT) {
- return false;
- }
- }
- if ($ti["checkState"] != TalentState::CERTIFICATED || $ti["enterprise_id"] != $enterprise["uid"] || !$year || !$allowanceType) {
- return false;
- }
- $where = [];
- $where[] = ["year", "=", $year];
- $where[] = ["delete", "=", 0];
- $where[] = ["idCard", "=", $ti["card_number"]];
- $where[] = ["checkState", "not in", [MainState::NOTPASS, MainState::PASS]];
- $exists = TaModel::where($where)->find();
- if ($exists) {
- return false;
- }
- $data = [
- "talentId" => $talentId,
- "enterpriseId" => $ti["enterprise_id"],
- "enterpriseName" => $enterprise["name"],
- "year" => $year,
- "source" => $ti["source"],
- "qzgccrcActiveTime" => $ti["certificateExpireTime"],
- "talentType" => $ti["enterpriseTag"],
- "address" => $ti["street"],
- "name" => $ti["name"],
- "sex" => $ti["sex"],
- "cardType" => $ti["card_type"],
- "idCard" => $ti["card_number"],
- "firstInJJTime" => $ti["fst_work_time"],
- "entryTime" => $ti["cur_entry_time"],
- "post" => $ti["position"],
- "phone" => $ti["phone"],
- "talentArrange" => $ti["talent_arrange"],
- "identifyCondition" => $ti["talent_condition"],
- "identifyGetTime" => $ti["identifyGetTime"],
- "identifyOutTime" => $ti["identifyExpireTime"],
- "identifyConditionName" => $ti["identifyConditionName"],
- "identifyMonth" => $ti["identifyMonth"],
- "bank" => $ti["bank"],
- "bankNetwork" => $ti["bank_branch_name"],
- "bankAccount" => $ti["bank_account"],
- "bankNumber" => $ti["bank_number"],
- "checkState" => 1,
- "type" => $enterprise["type"],
- "provinceCode" => $ti["province"],
- "provinceName" => LocationApi::getNameByCode($ti["province"]),
- "cityCode" => $ti["city"],
- "cityName" => LocationApi::getNameByCode($ti["city"]),
- "countyCode" => $ti["county"],
- "countyName" => LocationApi::getNameByCode($ti["county"]),
- "isSupple" => 2,
- "createTime" => date("Y-m-d H:i:s"),
- "createUser" => $enterprise["uid"],
- "id" => getStringId(),
- "allowanceType" => $allowanceType
- ];
- $submitTime = $ti["first_submit_time"] ? $ti["first_submit_time"] : $ti["new_submit_time"];
- $identifyYear = date("Y", strtotime($submitTime));
- $year = substr($year, 0, 4);
- if ((($ti["enterpriseType"] == \app\common\state\CommonConst::ENTERPRISE_JC) || (in_array($ti["enterpriseType"], [\app\common\state\CommonConst::ENTERPRISE_WJ, \app\common\state\CommonConst::ENTERPRISE_GJ]) && $year != 2023)) && $identifyYear > $year) {
- return false;
- }
- /* * 1.获取上一年度的人才层次 */
- $arrangeList = $this->getLastYearTalentType($data, $ti);
- if (!$arrangeList) {
- if ($ti["enterpriseType"] == \app\common\state\CommonConst::ENTERPRISE_JC) {
- $identifyYear = substr($ti["identifyMonth"], 0, 4);
- if (!$year || !$identifyYear || $identifyYear > $year) {
- return false;
- }
- } else {
- return false;
- }
- }
- /* * 2.获取上一年度所在单位* */
- $contractDetailList = $this->getConcatList($ti, $data, $year); //保存上一年度的工作单位
- if (!$contractDetailList) {
- return false;
- }
- TaModel::insert($data);
- \app\common\model\TalentAllowancecontractDetail::insertAll($contractDetailList);
- /**
- * 4.添加津补贴核查项目
- */
- //核查项目详情表
- if ($method == 1) {
- $this->createAllowanceProject($data, $contractDetailList);
- } else {
- $this->createAllowanceProject_m2($data, $contractDetailList, $importRow);
- }
- \app\common\model\TalentAllowanceArrange::insertAll($arrangeList);
- //添加日志
- TalentChecklog::create([
- 'id' => getStringId(),
- 'mainId' => $data['id'],
- 'type' => intval(ProjectState::JBT),
- 'typeFileId' => null,
- 'active' => 1,
- 'state' => 1,
- 'step' => 0,
- 'stateChange' => "保存未提交",
- 'description' => "添加津补贴申报",
- 'createTime' => date("Y-m-d H:i:s", time()),
- 'createUser' => sprintf("%s(%s)", $enterprise["account"], $enterprise["companyName"])
- ]);
- return true;
- } catch (\Exception $e) {
- Log::write($e->getMessage(), "error");
- }
- break;
- }
- return false;
- }
- /* * 获取上一年度的人才层次变更信息 */
- private function getLastYearTalentType($info, $talentInfo) {
- $year = substr($info["year"], 0, 4);
- $arrangeList = [];
- /* * * 添加人才层次记录 */
- $oldStartTimeField = "oldIdentifyMonth";
- $newStartTimeField = "newIdentifyMonth";
- if ($info["type"] == \app\common\state\CommonConst::ENTERPRISE_JC) {
- $oldStartTimeField = "oldIdentifyGetTime";
- $newStartTimeField = "newIdentifyGetTime";
- }
- if (in_array($info["type"], [\app\common\state\CommonConst::ENTERPRISE_WJ]) && date("Y", strtotime($talentInfo["identifyMonth"])) == "2023") {
- $talentInfo["identifyMonth"] = "2022-12-01"; //让卫健包含2023全年
- }
- $where = [];
- $where[] = ["idCard", "=", $info["idCard"]];
- $where[] = ["checkState", "=", MainState::PASS];
- $where[] = ["isPublic", "=", 6];
- $where[] = [$oldStartTimeField, "<=", $year . "-12-31"];
- $typeList = TalentTypeChange::where($where)->field("oldTalentArrange,oldIdentifyCondition,oldIdentifyGetTime,oldIdentifyOutTime,oldIdentifyMonth,oldCertificateStartTime,oldCertificateOutTime,newIdentifyMonth,newIdentifyGetTime")->order("createTime desc")->select()->toArray();
- $typeList[] = [
- "oldTalentArrange" => $talentInfo["talent_arrange"],
- "oldIdentifyCondition" => $talentInfo["talent_condition"],
- "oldIdentifyGetTime" => $talentInfo["identifyGetTime"],
- "oldIdentifyOutTime" => $talentInfo["identifyExpireTime"],
- "oldIdentifyMonth" => $talentInfo["identifyMonth"],
- "oldCertificateStartTime" => $talentInfo["certificateGetTime"],
- "oldCertificateOutTime" => $talentInfo["certificateExpireTime"],
- "newIdentifyMonth" => $year . "-12-31",
- "newIdentifyGetTime" => $year . "-12-31"
- ];
- if (in_array($info["idCard"], \app\common\api\VerifyApi::getTwiceIdentifyPersons())) {
- $whr = [];
- $whr[] = ["ti.checkState", "=", TalentState::CERTIFICATED];
- $whr[] = ["ti.enterprise_id", "=", $talentInfo["enterpriseId"]];
- $whr[] = ["e.type", "=", $talentInfo["enterpriseType"]];
- $whr[] = ["ti.id", "<>", $talentInfo["id"]];
- $whr[] = ["card_number", "=", $info["idCard"]];
- $otherChangeList = \app\enterprise\model\Talent::alias("ti")->leftJoin("un_enterprise e", "e.id=ti.enterprise_id")->field("ti.*,e.`type` as eType")->order("identifyMonth desc")->where($whr)->select()->toArray();
- foreach ($otherChangeList as $k => $oc) {
- if ($k == 0) {
- $newIdentifyMonth = $talentInfo["identifyMonth"];
- $newIdentifyGetTime = $talentInfo["identifyGetTime"];
- } else {
- $newIdentifyMonth = $oc[$k - 1]["identifyMonth"];
- $newIdentifyGetTime = $oc[$k - 1]["identifyGetTime"];
- }
- $typeList[] = [
- "oldTalentArrange" => $oc["talent_arrange"],
- "oldIdentifyCondition" => $oc["talent_condition"],
- "oldIdentifyGetTime" => $oc["identifyGetTime"],
- "oldIdentifyOutTime" => $oc["identifyExpireTime"],
- "oldIdentifyMonth" => $oc["identifyMonth"],
- "oldCertificateStartTime" => $oc["certificateGetTime"],
- "oldCertificateOutTime" => $oc["certificateExpireTime"],
- "newIdentifyMonth" => $newIdentifyMonth,
- "newIdentifyGetTime" => $newIdentifyGetTime
- ];
- }
- }
- $totalMonth = \DateUtil::getMonthBetweenDates($year . "-01-01", $year . "-12-31");
- /* * 获取上一年度有效的人才层次 */
- usort($typeList, function($a, $b) {
- return (int) $b["oldTalentArrange"] - (int) $a["oldTalentArrange"];
- });
- $commonMonth = [];
- foreach ($typeList as $talentTypeChange) {
- $startTime = $talentTypeChange[$oldStartTimeField];
- $endTime = $talentTypeChange[$newStartTimeField];
- if (in_array($info["type"], [\app\common\state\CommonConst::ENTERPRISE_GJ])) {
- $monthList = \DateUtil::getMonthBetweenDatesNotEnd($startTime, $endTime);
- if ($endTime == $year . "-12-31") {
- $monthList[] = $year . "-12";
- }
- } else {
- $monthList = \DateUtil::getMonthBetweenDatesNotBegin($startTime, $endTime);
- }
- if ($monthList) {
- $monthList = array_intersect($monthList, $totalMonth);
- }
- if ($monthList) {
- $months = implode(",", $monthList);
- $monthList = array_filter($monthList, function($value) use ($commonMonth) {
- return !in_array($value, $commonMonth);
- });
- $commonMonth = array_filter(array_merge($commonMonth, $monthList));
- if (count($monthList) > 0) {
- $arrange = [
- "id" => getStringId(),
- "mainId" => $info["id"],
- "talentArrange" => $talentTypeChange["oldTalentArrange"],
- "identifyCondition" => $talentTypeChange["oldIdentifyCondition"],
- "startTime" => $startTime,
- "endTime" => $endTime,
- "prepareMonths" => null,
- "description" => "申报年度有效月份:" . $months,
- "identifyConditionName" => $talentTypeChange["oldIdentifyConditionName"],
- "identifyConditionGetTime" => $talentTypeChange["oldIdentifyGetTime"],
- ];
- $sb = '';
- foreach ($monthList as $month) {
- $sb .= substr($month, 5, 2) . ",";
- }
- $arrange["prepareMonths"] = rtrim($sb, ",");
- $arrangeList[] = $arrange;
- }
- }
- }
- return $arrangeList;
- }
- /**
- * @param
- * @returns void
- * @author Liu
- * @date 2020/4/26
- * @description 获取上一年度所在单位
- * */
- private function getConcatList($talentInfo, $info, $year) {
- $totalMonth = \DateUtil::getMonthBetweenDates($year . "-01-01", $year . "-12-31");
- /** 添加申报人才上一年度工作单位记录 */
- $where = [];
- $where[] = ["idCard", "=", $talentInfo["card_number"]];
- $where[] = ["checkState", "=", 3];
- $quitList = \app\common\model\TalentQuit::where($where)->field("enterpriseId,enterpriseName,talentType,identifyGetTime,starttime,endtime,entryTime,quitTime,post")->select()->toArray();
- /* * * 将最新的人才数据转为工作变更记录(为了统一处理) */
- if ($talentInfo["active"] == 1) {
- $labor_contract_rangetime = explode(" - ", $talentInfo["labor_contract_rangetime"]);
- $starttime = $labor_contract_rangetime[0];
- $endtime = $labor_contract_rangetime[1];
- $quitList[] = [
- "enterpriseId" => $talentInfo["enterprise_id"],
- "enterpriseName" => $talentInfo["enterpriseName"],
- "talentType" => $talentInfo["enterpriseTag"],
- "identifyGetTime" => $talentInfo["identifyGetTime"],
- "starttime" => $starttime,
- "endtime" => $endtime,
- "entryTime" => $talentInfo["cur_entry_time"],
- "quitTime" => null,
- "post" => $talentInfo["position"]
- ];
- }
- $list = [];
- foreach ($quitList as $quit) {
- $monthList = \DateUtil::getMonthBetweenDates($quit["entryTime"], \StrUtil::isEmpOrNull($quit["quitTime"]) ? $year . "-12-31" : $quit["quitTime"]);
- $monthList = array_intersect($monthList, $totalMonth);
- if ($monthList) {
- $sb = '';
- foreach ($monthList as $month) {
- $sb .= substr($month, 5, 2) . ",";
- }
- $list[] = [
- "id" => getStringId(),
- "mainId" => $info["id"],
- "enterpriseId" => $quit["enterpriseId"],
- "talentType" => $quit["talentType"],
- "startTime" => $quit["starttime"],
- "endTime" => $quit["endtime"],
- "entryTime" => $quit["entryTime"],
- "quitTime" => \StrUtil::isEmpOrNull($quit["quitTime"]) ? $year . "-12-31" : $quit["quitTime"],
- "letterTime" => $quit["letterTime"],
- "gygb" => $quit["gygb"],
- "identifyGetTime" => $quit["identifyGetTime"],
- "isQuit" => \StrUtil::isEmpOrNull($quit["quitTime"]) ? 2 : 1,
- "post" => $quit["post"],
- "months" => rtrim($sb, ",")
- ];
- }
- }
- return $list;
- }
- private function createAllowanceProject($info, $contractList) {
- $count = 0;
- foreach ($contractList as $detail) {
- $count++;
- $projects = AllowanceProjectEnum::getProjectsByEnterpriseType($info["type"], $info["enterpriseId"]);
- $list = [];
- foreach ($projects as $project) {
- $months = "";
- if ($count == count($contractList) && $info["allowanceType"] == AllowanceTypeEnum::JBT_TALENT)
- $months = "01,02,03,04,05,06,07,08,09,10,11,12";
- $list[] = [
- "mainId" => $info["id"],
- "baseId" => $detail["id"],
- "enterpriseId" => $detail["enterpriseId"],
- "project" => $project,
- "months" => $months,
- "isLock" => 1,
- "createTime" => date("Y-m-d H:i:s")
- ];
- }
- \app\common\model\TalentAllowanceProject::insertAll($list);
- }
- }
- private function createAllowanceProject_m2($info, $contractList, $rowdata) {
- $count = 0;
- $projects = AllowanceProjectEnum::getProjectsByEnterpriseType($info["type"], $info["enterpriseId"]);
- $need_extra_project = getJsonConfig("../sys_config.json", "talent_allowance_need_extra_project");
- foreach ($contractList as $detail) {
- $count++;
- $list = [];
- for ($i = 3; $i < count($rowdata); $i++) {
- $project = 1;
- switch ($i) {
- case 3:
- $project = AllowanceProjectEnum::PROJECT_TAX;
- break;
- case 4:
- $project = AllowanceProjectEnum::PROJECT_WAGES;
- break;
- case 5:
- $project = AllowanceProjectEnum::PROJECT_ATTENDANCE;
- break;
- case 6:
- $project = AllowanceProjectEnum::PROJECT_SB_PENSION;
- break;
- case 7:
- if ($info["type"] == \app\common\state\CommonConst::ENTERPRISE_GJ && $need_extra_project[$info["enterpriseId"]]) {
- $project = $need_extra_project[$info["enterpriseId"]][0];
- } else {
- $project = AllowanceProjectEnum::PROJECT_SB_UNEMPLOYMENT;
- }
- break;
- case 8:
- if ($info["type"] == \app\common\state\CommonConst::ENTERPRISE_GJ && $need_extra_project[$info["enterpriseId"]]) {
- $project = $need_extra_project[$info["enterpriseId"]][1];
- } else {
- $project = AllowanceProjectEnum::PROJECT_SB_MEDICA;
- }
- break;
- }
- if (!in_array($project, $projects))
- continue;
- $months = "";
- if ($count == count($contractList)) {
- if ($info["allowanceType"] == 2 && $i == 5) {
- $monthstr = str_replace([" ", ","], ",", trim($rowdata[5]));
- $monthstr = str_replace(":", ":", $monthstr);
- $months = array_filter(explode(",", $monthstr));
- $tmp = [];
- for ($n = 0; $n < count($months); $n++) {
- list($a, $b) = explode(":", $months[$n]);
- $a = str_pad($a, 2, 0, STR_PAD_LEFT);
- $tmp[] = sprintf("%s=%s", $a, $b);
- }
- $months = $tmp ? implode(",", $tmp) : "";
- } else {
- $monthstr = str_replace([" ", ","], ",", trim($rowdata[$i]));
- $months = array_filter(explode(",", $monthstr));
- for ($n = 0; $n < count($months); $n++) {
- $months[$n] = str_pad($months[$n], 2, 0, STR_PAD_LEFT);
- }
- $months = $months ? implode(",", $months) : "";
- }
- }
- $list[] = [
- "mainId" => $info["id"],
- "baseId" => $detail["id"],
- "enterpriseId" => $detail["enterpriseId"],
- "project" => $project,
- "months" => $months,
- "isLock" => 1,
- "createTime" => date("Y-m-d H:i:s")
- ];
- }
- \app\common\model\TalentAllowanceProject::insertAll($list);
- }
- }
- }
|