0"; if (\StrUtil::isNotEmpAndNull($params["checkState"])) { switch ($params["checkState"]) { case 1: $where[] = ["ta.checkState", "=", AllowanceStateEnum::SAVE]; break; case 5: $where[] = ["ta.publicState", "<>", 5]; $whereRaw = "ta.checkState=5 or ta.checkState >= 13"; break; case 10: $where[] = ["ta.checkState", "=", AllowanceStateEnum::FIRST_REJECT]; break; case 30: $where[] = ["ta.checkState", "=", AllowanceStateEnum::REVIEW_PASS]; $where[] = ["ta.publicState", "=", 5]; break; case -1: $where[] = ["ta.checkState", "=", AllowanceStateEnum::NOTPASS]; break; } } $count = TaModel::where($where)->whereRaw($whereRaw)->alias("ta")->leftJoin("un_enterprise e", "e.id=ta.enterpriseId")->count(); $list = TaModel::where($where)->whereRaw($whereRaw)->alias("ta")->leftJoin("un_enterprise e", "e.id=ta.enterpriseId")->field("ta.*")->limit($offset, $limit)->order("year {$order},ta.createTime {$order}")->select()->toArray(); $levelList = DictApi::selectByParentCode("talent_arrange"); $talentTypeList = DictApi::selectByParentCode("enterprise_tag"); $streetList = DictApi::selectByParentCode("street"); $identifyConditionIds = array_filter(array_unique(array_column($list, "identifyCondition"))); $whr[] = ["id", "in", $identifyConditionIds]; $whr[] = ["type", "=", $user["type"]]; $identifyConditionKvList = TalentConditionApi::getKvList($whr); foreach ($list as $key => $item) { $list[$key]["talentArrangeName"] = $levelList[$item["talentArrange"]]; $list[$key]["talentTypeName"] = $talentTypeList[$item["talentType"]]; $list[$key]["addressName"] = $streetList[$item["address"]]; $list[$key]["identifyConditionText"] = $identifyConditionKvList[$item["identifyCondition"]]; } return ["total" => $count, "rows" => $list]; } public static function getHospitalExamineList($params) { $user = session("user"); $order = trim($params["order"]) ?: "desc"; $offset = trim($params["offset"]) ?: 0; $limit = trim($params["limit"]) ?: 10; $where = []; $where[] = ["ta.delete", "=", 0]; $where[] = ["ta.type", "=", 5]; $where[] = ["e.medicalCommunityId", "=", $user["medicalCommunityId"]]; $where[] = ["e.isGeneral", "=", 2]; if ($_where = self::setTalentAllowanceInfo($params)) { $where = array_merge($where, $_where); } $whereRaw = "ta.id>0"; if (\StrUtil::isNotEmpAndNull($params["checkState"])) { switch ($params["checkState"]) { case -1: $where[] = ["ta.checkState", "=", AllowanceStateEnum::NOTPASS]; break; case -2: $where[] = ["ta.checkState", "=", AllowanceStateEnum::SAVE]; break; case 1: $where[] = ["ta.checkState", "=", AllowanceStateEnum::NEED_GENERAL_CHECK]; $whereRaw = "ta.highProcess is null or ta.highProcess < 1"; break; case 2: $where[] = ["ta.checkState", "=", AllowanceStateEnum::GENERAL_REJECT]; break; case 3: $where[] = ["ta.checkState", "=", AllowanceStateEnum::REVIEW_PASS]; $where[] = ["ta.publicState", "=", 5]; break; case 4: $where[] = ["ta.checkState", "=", AllowanceStateEnum::FIRST_REJECT]; break; case 5: $where[] = ["ta.checkState", "=", AllowanceStateEnum::FIRST_REJECT_BRANCH]; break; case 6: $where[] = ["ta.publicState", "<>", 5]; $whereRaw = "ta.checkState=5 or ta.checkState >= 13"; break; case 9: $where[] = ["ta.checkState", "=", AllowanceStateEnum::NEED_GENERAL_CHECK]; $whereRaw = "ta.highProcess is not null and ta.highProcess >= 1"; break; } } $count = TaModel::where($where)->whereRaw($whereRaw)->alias("ta")->leftJoin("un_enterprise e", "e.id=ta.enterpriseId")->count(); $list = TaModel::where($where)->whereRaw($whereRaw)->alias("ta")->leftJoin("un_enterprise e", "e.id=ta.enterpriseId")->field("ta.*")->limit($offset, $limit)->order("year {$order},ta.createTime {$order}")->select()->toArray(); $levelList = DictApi::selectByParentCode("talent_arrange"); $talentTypeList = DictApi::selectByParentCode("enterprise_tag"); $streetList = DictApi::selectByParentCode("street"); $identifyConditionIds = array_filter(array_unique(array_column($list, "identifyCondition"))); $whr[] = ["id", "in", $identifyConditionIds]; $whr[] = ["type", "=", $user["type"]]; $identifyConditionKvList = TalentConditionApi::getKvList($whr); foreach ($list as $key => $item) { $list[$key]["talentArrangeName"] = $levelList[$item["talentArrange"]]; $list[$key]["talentTypeName"] = $talentTypeList[$item["talentType"]]; $list[$key]["addressName"] = $streetList[$item["address"]]; $list[$key]["identifyConditionText"] = $identifyConditionKvList[$item["identifyCondition"]]; } return ["total" => $count, "rows" => $list]; } public static function setTalentAllowanceInfo($params) { $where = []; if (\StrUtil::isNotEmpAndNull($params["year"])) { $where[] = ["ta.year", "like", $params["year"] . "%"]; } if (\StrUtil::isNotEmpAndNull($params["enterpriseName"])) { $where[] = ["ta.enterpriseName", "like", "%" . $params["enterpriseName"] . "%"]; } if (\StrUtil::isNotEmpAndNull($params["name"])) { $where[] = ["ta.name", "like", "%" . $params["name"] . "%"]; } if (\StrUtil::isNotEmpAndNull($params["talentType"])) { $where[] = ["ta.talentType", "=", $params["talentType"]]; } if (\StrUtil::isNotEmpAndNull($params["talentArrange"])) { $where[] = ["ta.talentArrange", "=", $params["talentArrange"]]; } if (\StrUtil::isNotEmpAndNull($params["identiryCondition"])) { $where[] = ["ta.identifyCondition", "=", $params["identifyCondition"]]; } if (\StrUtil::isNotEmpAndNull($params["allowanceType"])) { $where[] = ["ta.allowanceType", "=", $params["allowanceType"]]; } if (\StrUtil::isNotEmpAndNull($params["address"])) { $where[] = ["ta.address", "=", $params["address"]]; } return $where; } public static function getInfoById($id) { return TaModel::findOrEmpty($id)->toArray(); } public static function getApplyCountByIdCard($idCard) { $where = []; $where[] = ["idCard", "=", $idCard]; $where[] = ["checkState", "<>", MainState::NOTPASS]; $list = TaModel::where($where)->distinct(true)->field("substr(year,1,4) as year")->select()->toArray(); $years = array_column($list, "year"); return $years; } public static function getPassYearsByIdCard($idCard) { $where = []; $where[] = ["idCard", "=", $idCard]; $where[] = ["checkState", "=", MainState::PASS]; $list = TaModel::where($where)->distinct(true)->field("substr(year,1,4) as year")->select()->toArray(); $passYears = array_column($list, "year"); return $passYears; } public static function validateAllowanceType($id) { $info = ["id" => $id]; $old = self::getInfoById($id); $info["type"] = $old["type"]; $info["backWork"] = $old["backWork"]; $info["allowanceType"] = $old["allowanceType"]; $info["otherEnjoyedMoney"] = $old["otherEnjoyedMoney"]; $info["otherEnjoyedDescription"] = $old["otherEnjoyedDescription"]; $enterpriseMap = \app\common\model\Enterprise::where("type", $old["type"])->column("name", "id"); /* * 查询工作单位记录 */ $initDetailList = \app\common\model\TalentAllowancecontractDetail::where("mainId", $info["id"])->select()->toArray(); $detaiPdList = []; //用于判定类型 $detailMonthList = []; //用于计算月份 foreach ($initDetailList as $detail) { $projectList = \app\common\model\TalentAllowanceProject::where("baseId", $detail["id"])->select()->toArray(); $projectMap = []; foreach ($projectList as $project) { $projectMap[$project["project"]] = $project; } $detail["list"] = $projectList; $detail["projectMap"] = $projectMap; $detail["enterpriseName"] = $enterpriseMap[$detail["enterpriseId"]]; /* * 筛选符合条件的人才标签 */ $detaiPdList[] = $detail; $detailMonthList[] = $detail; } $monthMap = self::mergeMonth($detailMonthList); $monthAndDayMap = self::mergeMonthNeedDay($detailMonthList); $info["recommendAllowanceType"] = $old["allowanceType"]; $info["recommendAllowanceMsg"] = []; $projectList = \app\common\model\TalentAllowanceProject::where("mainId", $id)->select()->toArray(); $set = self::valideAllowanceType($info, $projectList, $monthMap, $monthAndDayMap); $info["recommendAllowanceMsg"][] = "综合以上所有判断得到最终补贴类型为:"; if ($info["recommendAllowanceType"] == 1) { $info["recommendAllowanceMsg"][] = "工作津贴;"; $info["recommendAllowanceMsg"][] = "可享受月份为:"; $info["recommendAllowanceMsg"][] = "" . implode(",", $set) . ";"; } if ($info["recommendAllowanceType"] == 2) $info["recommendAllowanceMsg"][] = "一次性交通补贴;"; if ($info["recommendAllowanceType"] == 3) $info["recommendAllowanceMsg"][] = "不予兑现;"; usort($set, function ($a, $b) { return (int) $a - (int) $b; }); $info["recommendMonths"] = implode(",", $set); self::calculateAllowance($info, $set, $detailMonthList); return $info; } /** * 集成电路津补贴总校验 * */ private static function valideAllowanceType(&$info, $projectList, $monthMap, $monthAndDayMap) { $set = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; /* * 2.判定合同月份、工作月份、五险和个税是否满足重叠6个月要求* */ $contractSet = self::chkMonths($monthMap[AllowanceProjectEnum::PROJECT_CONTRACT], $info, "上年度合同月份", "①"); $workdaySet = self::chkMonths($monthMap[AllowanceProjectEnum::PROJECT_ATTENDANCE], $info, "上年度工作月份", "②"); $wageSet = self::chkMonths($monthMap[AllowanceProjectEnum::PROJECT_WAGES], $info, "上年度工资发放月份", "③"); $pensionSet = self::chkMonths($monthMap[AllowanceProjectEnum::PROJECT_SB_PENSION], $info, "养老保险", "④"); $unemploymentSet = self::chkMonths($monthMap[AllowanceProjectEnum::PROJECT_SB_UNEMPLOYMENT], $info, "失业保险", "⑤"); $medicaSet = self::chkMonths($monthMap[AllowanceProjectEnum::PROJECT_SB_MEDICA], $info, "医疗保险", "⑥"); $taxSet = self::chkMonths($monthMap[AllowanceProjectEnum::PROJECT_TAX], $info, "个税", "⑦"); $str = "工作合同月份、考勤月份、工资发放月份"; if ($info["type"] == CommonConst::ENTERPRISE_WJ) { $str = "工作合同月份、考勤月份"; $set = array_intersect($set, $contractSet); $set = array_intersect($set, $workdaySet); $checkSet = $set; //$set = array_intersect($set, $pensionSet); //$set = array_intersect($set, $taxSet); } else if ($info["type"] == CommonConst::ENTERPRISE_GJ) { if ($info["backWork"] == 1) { //$set = array_intersect($set, $workdaySet); $set = array_intersect($set, $wageSet); } else { //$set = array_intersect($set, $workdaySet); $set = array_intersect($set, $wageSet); } } else { $set = array_intersect($set, $contractSet); $set = array_intersect($set, $workdaySet); $set = array_intersect($set, $wageSet); $checkSet = $set; $set = array_intersect($set, $pensionSet); $set = array_intersect($set, $unemploymentSet); $set = array_intersect($set, $medicaSet); $set = array_intersect($set, $taxSet); } usort($set, function ($a, $b) { return (int) $a - (int) $b; }); if ($info["recommendAllowanceType"] == 1) { if ($info["type"] == CommonConst::ENTERPRISE_GJ) { //高教另外判断 $taxCount = 1; foreach ($taxSet as $s) { $currentVal = intval($s); $nextVal = $currentVal + 1; $nextKey = str_pad($nextVal, 2, "0", STR_PAD_LEFT); if (in_array($nextKey, $taxSet)) { $taxCount++; if ($taxCount >= 2) { break; } } else { $taxCount = 1; } } if ($info["backWork"] == 1) { //需要判断缴税有没有连续两个月以上 if ($taxCount < 2) { $info["recommendAllowanceType"] = 3; $info["recommendAllowanceMsg"][] = "上年度个税缴纳月份不满足连续缴纳2个月(" . implode(",", $taxSet) . "),无法享受工作津贴(×)"; } } else { //需要判断缴税或者养老有没有连续两个月以上 $pensionCount = 1; foreach ($pensionSet as $s) { $currentVal = intval($s); $nextVal = $currentVal + 1; $nextKey = str_pad($nextVal, 2, "0", STR_PAD_LEFT); if (in_array($nextKey, $pensionSet)) { $pensionCount++; if ($pensionCount >= 2) { break; } } else { $pensionCount = 1; } } if ($taxCount < 2 && $pensionCount < 2) { $info["recommendAllowanceType"] = 3; $info["recommendAllowanceMsg"][] = "上年度个税缴纳月份(" . implode(",", $taxSet) . ")与养老保险缴纳月份(" . implode(",", $pensionSet) . ")均不满足连续缴纳2个月,无法享受工作津贴(×)"; } } } else { if (count($checkSet) < 6) { //如果全部满足6个月,但是重叠时间不满足6个月,开始检测是否符合交通补贴要求 $info["recommendAllowanceType"] = 3; $info["recommendAllowanceMsg"][] = "上年度{$str}交集月份不满足6个月(" . implode(",", $checkSet) . "),无法享受工作津贴(×)"; } else { //检查连续缴纳月份是否满足6个月 $count = 1; foreach ($checkSet as $s) { $currentVal = intval($s); $nextVal = $currentVal + 1; $nextKey = str_pad($nextVal, 2, "0", STR_PAD_LEFT); if (in_array($nextKey, $checkSet)) { $count++; if ($count >= 6) { break; } } else { $count = 1; } } if ($count < 6) { $info["recommendAllowanceType"] = 3; $info["recommendAllowanceMsg"][] = "上年度{$str}交集月份不满足连续缴纳6个月(" . implode(",", $checkSet) . "),无法享受工作津贴(×)"; } } } } if ($info["recommendAllowanceType"] == 2) { //判断境内工作时间是否大于30天 if ($info["allowanceType"] == 2) { $totalDays = 0; $workmonths = $monthAndDayMap[AllowanceProjectEnum::PROJECT_ATTENDANCE]; foreach ($workmonths as $days) { $totalDays += $days; } if ($totalDays < 30) { $info["recommendAllowanceType"] = 3; $info["recommendAllowanceMsg"][] = "全年在我市工作仅{$totalDays}天,未达到30天,无法享受一次性交通津贴(×)"; } } else { if (count($workdaySet) == 0) { $info["recommendAllowanceType"] = 3; $info["recommendAllowanceMsg"][] = "全年在我市工作未达到30天,无法享受一次性交通津贴(×)"; } else { $info["recommendAllowanceType"] = 2; $info["recommendAllowanceMsg"][] = "*首选为工作津贴,未录入实际工作天数,需要进一步核实提交的相关附件是否满足全年在我市工作30天"; } } } return $set; } /** * 计算津补贴 */ private static function calculateAllowance(&$info, $retainMonths, $detailMonthList) { /* * 查询人才层次变更记录 */ $arrangeList = TalentAllowanceArrange::where("mainId", $info["id"])->order("talentArrange")->select()->toArray(); foreach ($arrangeList as &$arrange) { $where = []; $where[] = ["type", "=", $info["type"]]; $where[] = ["allowanceType", "in", [1, 2]]; $where[] = ["talentArrange", "=", $arrange["talentArrange"]]; $list = AsModel::where($where)->field("money,allowanceType")->select()->toArray(); foreach ($list as $amount) { if ($amount["allowanceType"] == 1) { $arrange["jobMoney"] = $amount["money"]; } if ($amount["allowanceType"] == 2) { $arrange["jtMoney"] = $amount["money"]; } } }unset($arrange); /* * * 容器 */ $jobMoney = 0.00; //计算所得工作津贴 $jtMoney = 0.00; //计算所得一次性交通补贴 $recommendMonths = []; //推荐月份 $talentArrange = null; /* * *********计算************* */ $msgBulider = []; $identifyExpiredName = "人才证书有效期"; if ($info["type"] == CommonConst::ENTERPRISE_JC) { $identifyExpiredName = "认定条件有效期"; } switch ($info["recommendAllowanceType"]) { case 1: foreach ($arrangeList as &$arrange) { if (\StrUtil::isNotEmpAndNull($arrange["prepareMonths"])) { $levelList = array_filter(explode(",", $arrange["prepareMonths"])); $levelList = array_intersect($levelList, $retainMonths); $total = round($arrange["jobMoney"] * count($levelList), 2); $jobMoney += $total; $msgBulider[] = sprintf("%d(%s)x%s(第%d层次)", count($levelList), $levelList ? implode(",", $levelList) : "", $arrange["jobMoney"], $arrange["talentArrange"]); $recommendMonths = array_merge($recommendMonths, $levelList); usort($recommendMonths, function ($a, $b) { return (int) $a - (int) $b; }); $arrange["months"] = implode(",", $levelList); $arrange["count"] = count($levelList); $arrange["total"] = $total; } else { $msgBulider[] = sprintf("0()x%s(第%d层次)", $arrange["jobMoney"], $arrange["talentArrange"]); $arrange["count"] = 0; $arrange["total"] = 0.00; } }unset($arrange); $info["recommendMonths"] = implode(",", $recommendMonths); $info["recommendAllowanceMsg"][] = "通过与{$identifyExpiredName}取交集得到最终可享受月份:"; $info["recommendAllowanceMsg"][] = "" . implode(",", $recommendMonths) . ";"; $info["recommendAllowanceMsg"][] = "经过计算:兑现月份" . count($recommendMonths) . "个月,人才津贴为" . $jobMoney . ";"; $finnalMoney = $jobMoney; if ($info["otherEnjoyedMoney"] > 0) { $finnalMoney = number_format($jobMoney - $info["otherEnjoyedMoney"], 2); $info["recommendAllowanceMsg"][] = "扣除其它已享受补贴金额" . $info["otherEnjoyedMoney"] . "元,最终可享受人才津贴为" . number_format($jobMoney - $info["otherEnjoyedMoney"], 2) . ";"; } $info["finnalMoney"] = $finnalMoney; $info["recommendMoney"] = $jobMoney; $info["recommendMoneyDesc"] = implode("+", $msgBulider); $updAllowance["id"] = $info["id"]; $updAllowance["virtualAmount"] = $jobMoney; TaModel::update($updAllowance); break; case 2: foreach ($arrangeList as $arrange) { $jtMoney = $arrange["jtMoney"]; $talentArrange = $arrange["talentArrange"]; } $info["recommendMoney"] = $jtMoney; $info["recommendMonths"] = ""; $info["recommendMoneyDesc"] = "一次性交通补贴"; $info["workAllowanceMoney"] = 0.00; $info["developAllowanceMoney"] = 0.00; $info["recommendTalentArrange"] = $talentArrange; $updAllowance["id"] = $info["id"]; $updAllowance["virtualAmount"] = $jtMoney; $finnalMoney = $jtMoney; if ($info["otherEnjoyedMoney"] > 0) { $finnalMoney = number_format($jobMoney - $info["otherEnjoyedMoney"], 2); $info["recommendAllowanceMsg"][] = "扣除其它已享受补贴金额" . $info["otherEnjoyedMoney"] . "元,最终可享受人才津贴为" . number_format($jtMoney - $info["otherEnjoyedMoney"], 2) . ";"; } $info["finnalMoney"] = $finnalMoney; TaModel::update($updAllowance); break; case 3: $info["recommendMoney"] = 0.00; $info["recommendMonths"] = ""; $info["recommendMoneyDesc"] = "不予兑现"; $info["workAllowanceMoney"] = 0.00; $info["developAllowanceMoney"] = 0.00; break; } return $arrangeList; } /** * 判定是否交足6个月(集成电路) * @param set * @param info * @param name */ private static function chkMonths($set, &$info, $name, $sort) { if ($name == "上年度工作月份") { if ($info["allowanceType"] == 2) { $tmp = []; foreach ($set as $s) { $_s = explode("=", $s); $month = $_s[0]; $days = $_s[1]; if ($days > 0) { $tmp[] = $month; } } $set = $tmp; } } $preCheckProjects = ["①", "②", "③"]; if ($info["type"] == CommonConst::ENTERPRISE_WJ) { $preCheckProjects = ["①", "②"]; } if ($info["type"] == CommonConst::ENTERPRISE_GJ) { if ($info["backWork"] == 1) { $preCheckProjects = ["②", "③"]; } else { $preCheckProjects = ["②", "③"]; } } if ($info["recommendAllowanceType"] == 1 && (!$set || count($set) < 6) && in_array($sort, $preCheckProjects)) { $info["recommendAllowanceType"] = 3; $info["recommendAllowanceMsg"][] = $sort . $name . "不足6个月,无法享受工作津贴(×)"; } return $set; } //合并所有项目的月份 private static function mergeMonth($detailList) { $contractList = []; $taxList = []; $wagesList = []; $pensionList = []; $unemploymentList = []; $medicaList = []; $attendanceList = []; $workdayList = []; foreach ($detailList as $detail) { $projectMap = $detail["projectMap"]; if ($detail["months"]) { $tmp = array_filter(explode(",", $detail["months"])); $contractList = array_merge($contractList, $tmp); } if ($projectMap[AllowanceProjectEnum::PROJECT_TAX] && \StrUtil::isNotEmpAndNull($projectMap[AllowanceProjectEnum::PROJECT_TAX]["months"])) { $tmp = array_filter(explode(",", $projectMap[AllowanceProjectEnum::PROJECT_TAX]["months"])); $taxList = array_merge($taxList, $tmp); } if ($projectMap[AllowanceProjectEnum::PROJECT_WAGES] && \StrUtil::isNotEmpAndNull($projectMap[AllowanceProjectEnum::PROJECT_WAGES]["months"])) { $tmp = array_filter(explode(",", $projectMap[AllowanceProjectEnum::PROJECT_WAGES]["months"])); $wagesList = array_merge($wagesList, $tmp); } if ($projectMap[AllowanceProjectEnum::PROJECT_SB_PENSION] && \StrUtil::isNotEmpAndNull($projectMap[AllowanceProjectEnum::PROJECT_SB_PENSION]["months"])) { $tmp = array_filter(explode(",", $projectMap[AllowanceProjectEnum::PROJECT_SB_PENSION]["months"])); $pensionList = array_merge($pensionList, $tmp); } if ($projectMap[AllowanceProjectEnum::PROJECT_SB_UNEMPLOYMENT] && \StrUtil::isNotEmpAndNull($projectMap[AllowanceProjectEnum::PROJECT_SB_UNEMPLOYMENT]["months"])) { $tmp = array_filter(explode(",", $projectMap[AllowanceProjectEnum::PROJECT_SB_UNEMPLOYMENT]["months"])); $unemploymentList = array_merge($unemploymentList, $tmp); } if ($projectMap[AllowanceProjectEnum::PROJECT_SB_MEDICA] && \StrUtil::isNotEmpAndNull($projectMap[AllowanceProjectEnum::PROJECT_SB_MEDICA]["months"])) { $tmp = array_filter(explode(",", $projectMap[AllowanceProjectEnum::PROJECT_SB_MEDICA]["months"])); $medicaList = array_merge($medicaList, $tmp); } if ($projectMap[AllowanceProjectEnum::PROJECT_ATTENDANCE] && \StrUtil::isNotEmpAndNull($projectMap[AllowanceProjectEnum::PROJECT_ATTENDANCE]["months"])) { $tmp = array_filter(explode(",", $projectMap[AllowanceProjectEnum::PROJECT_ATTENDANCE]["months"])); $attendanceList = array_merge($attendanceList, $tmp); } if ($projectMap[AllowanceProjectEnum::PROJECT_WORKDAY] && \StrUtil::isNotEmpAndNull($projectMap[AllowanceProjectEnum::PROJECT_WORKDAY]["months"])) { $tmp = array_filter(explode(",", $projectMap[AllowanceProjectEnum::PROJECT_WORKDAY]["months"])); $workdayList = array_merge($workdayList, $tmp); } } $map = [ AllowanceProjectEnum::PROJECT_CONTRACT => $contractList, AllowanceProjectEnum::PROJECT_TAX => $taxList, AllowanceProjectEnum::PROJECT_WAGES => $wagesList, AllowanceProjectEnum::PROJECT_SB_PENSION => $pensionList, AllowanceProjectEnum::PROJECT_SB_UNEMPLOYMENT => $unemploymentList, AllowanceProjectEnum::PROJECT_SB_MEDICA => $medicaList, AllowanceProjectEnum::PROJECT_ATTENDANCE => $attendanceList, AllowanceProjectEnum::PROJECT_WORKDAY => $workdayList, ]; return $map; } /** * 合并多个单位带有天数的项目的月份如考勤1月30天, * */ private static function mergeMonthNeedDay($detailList) { $attendMap = []; $workDayMap = []; foreach ($detailList as $detail) { $attendMap = self::getMergeMonthNeedDayMap($detail["projectMap"][AllowanceProjectEnum::PROJECT_ATTENDANCE], $attendMap); $workDayMap = self::getMergeMonthNeedDayMap($detail["projectMap"][AllowanceProjectEnum::PROJECT_WORKDAY], $workDayMap); } $res = [ AllowanceProjectEnum::PROJECT_ATTENDANCE => $attendMap, AllowanceProjectEnum::PROJECT_WORKDAY => $workDayMap ]; return $res; } private static function getMergeMonthNeedDayMap($project, $map) { if (\StrUtil::isNotEmpAndNull($project["months"])) { $monthAndDayList = array_filter(explode(",", $project["months"])); for ($i = 0; $i < count($monthAndDayList); $i++) { $obj = explode("=", $monthAndDayList[$i]); $month = $obj[0]; $day = is_numeric($obj[1]) ? $obj[1] : 0; $count = $map[$month]; if ($count == 0) { $map[$month] = $day; } else { $map[$month] = $day + $count; } } } return $map; } }