|
@@ -227,7 +227,7 @@ class TalentAllowance extends AdminController {
|
|
|
$updCheck["checkState"] = AllowanceStateEnum::REVIEW_PASS;
|
|
|
$updCheck["reviewPassTime"] = date("Y-m-d H:i:s");
|
|
|
/* * * 在此处需要判断津补贴类型 */
|
|
|
- $arrangeList = $this->validateAllowanceType(&$updCheck);
|
|
|
+ $arrangeList = $this->validateAllowanceType($updCheck);
|
|
|
TalentAllowanceArrange::update($arrangeList);
|
|
|
break;
|
|
|
case 2:
|
|
@@ -269,7 +269,7 @@ class TalentAllowance extends AdminController {
|
|
|
return new Response(Response::SUCCESS, "提交审核成功");
|
|
|
}
|
|
|
|
|
|
- private function validateAllowanceType($info) {
|
|
|
+ private function validateAllowanceType(&$info) {
|
|
|
$old = TalentAllowanceApi::getInfoById($info["id"]);
|
|
|
$talentTypeMap = DictApi::selectByParentCode("enterprise_tag");
|
|
|
$enterpriseMap = \app\common\model\Enterprise::where("type", $this->user["type"])->column("name", "id");
|
|
@@ -278,23 +278,11 @@ class TalentAllowance extends AdminController {
|
|
|
$detaiPdList = []; //用于判定类型
|
|
|
$detailMonthList = []; //用于计算月份
|
|
|
$recommendAllowanceMsg = [];
|
|
|
-
|
|
|
+
|
|
|
foreach ($initDetailList as $detail) {
|
|
|
$projectList = \app\common\model\TalentAllowanceProject::where("baseId", $detail["id"])->select()->toArray();
|
|
|
$projectMap = [];
|
|
|
foreach ($projectList as $project) {
|
|
|
- switch ($project["project"]) {
|
|
|
- case AllowanceProjectEnum::PROJECT_TAX:
|
|
|
- case AllowanceProjectEnum::PROJECT_WAGES:
|
|
|
- case AllowanceProjectEnum::PROJECT_SB_PENSION:
|
|
|
- case AllowanceProjectEnum::PROJECT_SB_UNEMPLOYMENT:
|
|
|
- case AllowanceProjectEnum::PROJECT_SB_MEDICA:
|
|
|
- break;
|
|
|
- case AllowanceProjectEnum::PROJECT_ATTENDANCE:
|
|
|
- break;
|
|
|
- case AllowanceProjectEnum::PROJECT_WORKDAY:
|
|
|
- break;
|
|
|
- }
|
|
|
$projectMap[$project["project"]] = $project;
|
|
|
}
|
|
|
$detail["list"] = $projectList;
|
|
@@ -305,35 +293,314 @@ class TalentAllowance extends AdminController {
|
|
|
$detaiPdList[] = $detail;
|
|
|
$detailMonthList[] = $detail;
|
|
|
}
|
|
|
-// /**查询人才标签字典表*/
|
|
|
-// Set<String> retainMonths = new TreeSet<>((o1, o2) -> {
|
|
|
-// int o1Int = Integer.parseInt(o1);
|
|
|
-// int o2Int = Integer.parseInt(o2);
|
|
|
-// return o1Int - o2Int;
|
|
|
-// });
|
|
|
-// /**集成电路优秀人才*/
|
|
|
-// if($this->user["type"] == 2) {
|
|
|
-// /**获取各个项目的综合月份*/
|
|
|
-// Map<Integer, Set<String>> monthMap = $this->mergeMonth($detailMonthList);
|
|
|
-// Map<Integer, Map<String, Integer>> monthAndDayMap = $this->mergeMonthNeedDay($detailMonthList);
|
|
|
-// info.setRecommendAllowanceType(1);
|
|
|
-// info.setRecommendAllowanceMsg("");
|
|
|
-// TalentInfo talentInfo = this.talentInfoService.selectById(info.getTalentId());
|
|
|
-// List<TalentAllowanceProject> projectList = this.talentAllowanceProjectService.selectList(new EntityWrapper<TalentAllowanceProject>().eq("mainId", info.getId()));
|
|
|
-// Set<String> set = AllowanceICDecideUtil.valideAllowanceType(info, talentInfo, projectList, monthMap, monthAndDayMap);
|
|
|
-// info.setRecommendAllowanceMsg(info.getRecommendAllowanceMsg() + "\n综合以上所有判断得到最终补贴类型为:");
|
|
|
-// if (info.getRecommendAllowanceType() == 1) {
|
|
|
-// info.setRecommendAllowanceMsg(info.getRecommendAllowanceMsg() + "人才津贴;可享受月份为:" + set.stream().collect(Collectors.joining(",")) + "\n");
|
|
|
-// }
|
|
|
-// if (info.getRecommendAllowanceType() == 2)
|
|
|
-// info.setRecommendAllowanceMsg(info.getRecommendAllowanceMsg() + "一次性交通补贴;");
|
|
|
-// if (info.getRecommendAllowanceType() == 3)
|
|
|
-// info.setRecommendAllowanceMsg(info.getRecommendAllowanceMsg() + "不予兑现;");
|
|
|
-// retainMonths.addAll(set);
|
|
|
-// }
|
|
|
-// info.setRecommendMonths(StringUtils.join(retainMonths.toArray(), ","));
|
|
|
-// List<TalentAllowanceArrange> arrangeList = calculateAllowance(info, retainMonths, detailMonthList);
|
|
|
-// return arrangeList;
|
|
|
+ /* * 集成电路优秀人才 */
|
|
|
+ if ($this->user["type"] == 2) {
|
|
|
+ /* * 获取各个项目的综合月份 */
|
|
|
+ $monthMap = $this->mergeMonth($detailMonthList);
|
|
|
+ $monthAndDayMap = $this->mergeMonthNeedDay($detailMonthList);
|
|
|
+ $info["recommendAllowanceType"] = 1;
|
|
|
+ $info["recommendAllowanceMsg"] = "";
|
|
|
+ $projectList = \app\common\model\TalentAllowanceProject::where("mainId", $info["id"])->select()->toArray();
|
|
|
+ $set = $this->valideAllowanceType($info, $projectList, $monthMap, $monthAndDayMap);
|
|
|
+ $info["recommendAllowanceMsg"] = $info["recommendAllowanceMsg"] . "\n综合以上所有判断得到最终补贴类型为:";
|
|
|
+ if ($info["recommendAllowanceType"] == 1) {
|
|
|
+ $info["recommendAllowanceMsg"] = $info["recommendAllowanceMsg"] . "工作津贴;可享受月份为:" . implode(",", $set) . "\n";
|
|
|
+ }
|
|
|
+ if ($info["recommendAllowanceType"] == 2)
|
|
|
+ $info["recommendAllowanceMsg"] = $info["recommendAllowanceMsg"] . "一次性交通补贴;";
|
|
|
+ if ($info["recommendAllowanceType"] == 3)
|
|
|
+ $info["recommendAllowanceMsg"] = $info["recommendAllowanceMsg"] . "不予兑现;";
|
|
|
+ usort($set, function($a, $b) {
|
|
|
+ return (int) $a - (int) $b;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ $info["recommendMonths"] = implode(",", $set);
|
|
|
+ $arrangeList = $this->calculateAllowance($info, $set, $detailMonthList);
|
|
|
+ return $arrangeList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 集成电路津补贴总校验
|
|
|
+ * */
|
|
|
+ private function valideAllowanceType(&$info, $projectList, $monthMap, $monthAndDayMap) {
|
|
|
+ $set = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];
|
|
|
+ /* * 2.判定工作月份、五险和个税是否满足重叠6个月要求* */
|
|
|
+ $workdaySet = $this->chkMonths($monthMap[AllowanceProjectEnum::PROJECT_WORKDAY], $info, "上年度工作月份", "①");
|
|
|
+ $pensionSet = $this->chkMonths($monthMap[AllowanceProjectEnum::PROJECT_SB_PENSION], $info, "养老保险", "②");
|
|
|
+ $injurySet = $this->chkMonths($monthMap[AllowanceProjectEnum::PROJECT_SB_INJURY], $info, "工伤保险", "③");
|
|
|
+ $unemploymentSet = $this->chkMonths($monthMap[AllowanceProjectEnum::PROJECT_SB_UNEMPLOYMENT], $info, "失业保险", "④");
|
|
|
+ $medicaSet = $this->chkMonths($monthMap[AllowanceProjectEnum::PROJECT_SB_MEDICA], $info, "医疗保险", "⑤");
|
|
|
+ $taxSet = $this->chkMonths($monthMap[AllowanceProjectEnum::PROJECT_TAX], $info, "个税", "⑥");
|
|
|
+ $set = array_intersect($set, $workdaySet);
|
|
|
+ $set = array_intersect($set, $pensionSet);
|
|
|
+ $set = array_intersect($set, $injurySet);
|
|
|
+ $set = array_intersect($set, $unemploymentSet);
|
|
|
+ $set = array_intersect($set, $medicaSet);
|
|
|
+ $set = array_intersect($set, $taxSet);
|
|
|
+ if ($info["recommendAllowanceType"] == 1 && count($set) < 6) {
|
|
|
+ //如果全部满足6个月,但是重叠时间不满足6个月,开始检测是否符合交通补贴要求
|
|
|
+ $info["recommendAllowanceType"] == 2;
|
|
|
+ }
|
|
|
+ if ($info["recommendAllowanceType"] == 2) {
|
|
|
+ //判断境内工作时间是否大于30天
|
|
|
+ $totalDays = 0;
|
|
|
+ $workmonths = $monthAndDayMap[AllowanceProjectEnum::PROJECT_WORKDAY];
|
|
|
+ foreach ($workmonths as $days) {
|
|
|
+ $totalDays += $days;
|
|
|
+ }
|
|
|
+ if ($totalDays < 30) {
|
|
|
+ $info["recommendAllowanceType"] == 3;
|
|
|
+ $info["recommendAllowanceMsg"] = $info["recommendAllowanceMsg"] . "\n全年在我市工作仅{$totalDays}天,未达到30天,无法享受一次性交通津贴(×)";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $set;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算津补贴
|
|
|
+ */
|
|
|
+ private function calculateAllowance(&$info, $retainMonths, $detailMonthList) {
|
|
|
+ /**查询人才层次变更记录*/
|
|
|
+ List<TalentAllowanceArrange> arrangeList = this.talentAllowanceArrangeService.selectListAndAmount(new EntityWrapper<TalentAllowanceArrange>().eq("mainId", info.getId()).orderBy("talentArrange"));
|
|
|
+ AmountStandard amountStandard = this.amountStandardService.selectOne(new EntityWrapper<AmountStandard>().eq("type", 1).eq("allowanceType", 1).eq("talentArrange", "4"));
|
|
|
+ /*** 容器*/
|
|
|
+ BigDecimal jobMoney = BigDecimal.ZERO; //计算所得工作津贴
|
|
|
+ BigDecimal jtMoney = BigDecimal.ZERO; //计算所得一次性交通补贴
|
|
|
+ Set<String> recommendMonths = new TreeSet<>(new Comparator<String>() {
|
|
|
+ @Override
|
|
|
+ public int compare(String o1, String o2) {
|
|
|
+ int o1Int = Integer.parseInt(o1);
|
|
|
+ int o2Int = Integer.parseInt(o2);
|
|
|
+ return o1Int - o2Int;
|
|
|
+ }
|
|
|
+ }); //推荐月份
|
|
|
+ String talentArrange = null;
|
|
|
+ /***********计算**************/
|
|
|
+ StringBuilder msgBulider = new StringBuilder();
|
|
|
+ switch (info.getRecommendAllowanceType()) {
|
|
|
+ case 1:
|
|
|
+ if (info.getType() == 1) { //晋江市优秀人才
|
|
|
+ /**判断判定最终月份和人才层次有效月份是否存在共同月份,不存在则为一次性交通补贴*/
|
|
|
+ Set<String> totalArrangeMonth = new HashSet<>();
|
|
|
+ for (TalentAllowanceArrange arrange : arrangeList) {
|
|
|
+ List<String> levelList = new ArrayList<>(Arrays.asList(arrange.getPrepareMonths().split(",")));
|
|
|
+ //对于2019年度的津补贴申报人才层次可享受月份均在07-12月
|
|
|
+ if ("2019".equals(info.getYear())) {
|
|
|
+ levelList.retainAll(new ArrayList<>(Arrays.asList("07", "08", "09", "10", "11", "12")));
|
|
|
+ }
|
|
|
+ totalArrangeMonth.addAll(levelList);
|
|
|
+ }
|
|
|
+ totalArrangeMonth.retainAll(retainMonths);
|
|
|
+ /**对于人才标签中存在在站博士后的需要去除在站博士后计算,在站博士后不考虑人才层次(不予人才层次取交集),默认第四层次*/
|
|
|
+ for (TalentAllowancecontractDetail detail : detailMonthList) {
|
|
|
+ if (DictValueConst.TALENTTYPE_ZZBSH.equals(detail.getTalentType())) {
|
|
|
+ String months = detail.getMonths();
|
|
|
+ if (FengStringUtil.isNotEmpAndNull(months)) {
|
|
|
+ List<String> monthsList = new ArrayList<>(Arrays.asList(months.split(",")));
|
|
|
+ BigDecimal total = amountStandard.getMoney().multiply(new BigDecimal(monthsList.size())).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ jobMoney = jobMoney.add(total);
|
|
|
+ msgBulider.append(monthsList.size() + "(" + StringUtils.join(monthsList.toArray(), ",") + ")x" + amountStandard.getMoney() + "(第" + amountStandard.getTalentArrange() + "层次)+");
|
|
|
+ recommendMonths.addAll(monthsList);
|
|
|
+ retainMonths.removeAll(monthsList); //去除在站博士后已计算月份
|
|
|
+ /**当存在在站博士后时无需计算月份和人才层次的交集,此处在交集内加入月份 数据,防止下面if判断导致津贴类型变更*/
|
|
|
+ totalArrangeMonth.addAll(monthsList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (totalArrangeMonth.size() == 0) {
|
|
|
+ int tempArrange = Integer.parseInt(arrangeList.get(0).getTalentArrange());
|
|
|
+ if (tempArrange < 6) {
|
|
|
+ info.setRecommendAllowanceType(2);
|
|
|
+ info.setRecommendAllowanceMsg(info.getRecommendAllowanceMsg() + "\n由于判定结果月份与人才层次有效月份无交集,因此津贴类型为:一次性交通补贴");
|
|
|
+ } else {
|
|
|
+ info.setRecommendAllowanceType(3);
|
|
|
+ info.setRecommendAllowanceMsg(info.getRecommendAllowanceMsg() + "\n由于判定结果月份与人才层次有效月份无交集且为第" + tempArrange + "层次,因此津贴类型为:不予兑现");
|
|
|
+ }
|
|
|
+ return calculateAllowance(info, retainMonths, detailMonthList);
|
|
|
+ }
|
|
|
+ if (retainMonths.size() > 0) {
|
|
|
+ for (TalentAllowanceArrange arrange : arrangeList) {
|
|
|
+ if (FengStringUtil.isNotEmpAndNull(arrange.getPrepareMonths())) {
|
|
|
+ List<String> levelList = new ArrayList<>(Arrays.asList(arrange.getPrepareMonths().split(",")));
|
|
|
+ //对于2019年度的津补贴申报人才层次可享受月份均在07-12月
|
|
|
+ if ("2019".equals(info.getYear())) {
|
|
|
+ levelList.retainAll(new ArrayList<>(Arrays.asList("07", "08", "09", "10", "11", "12")));
|
|
|
+ }
|
|
|
+ levelList.retainAll(retainMonths);
|
|
|
+ BigDecimal total = arrange.getJobMoney().multiply(new BigDecimal(levelList.size())).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ jobMoney = jobMoney.add(total);
|
|
|
+ msgBulider.append(levelList.size() + "(" + StringUtils.join(levelList.toArray(), ",") + ")x" + arrange.getJobMoney() + "(第" + arrange.getTalentArrange() + "层次)+");
|
|
|
+ recommendMonths.addAll(levelList);
|
|
|
+ arrange.setMonths(StringUtils.join(levelList.toArray(), ","));
|
|
|
+ arrange.setCount(levelList.size());
|
|
|
+ arrange.setTotal(total);
|
|
|
+ } else {
|
|
|
+ msgBulider.append("0()x" + arrange.getJobMoney() + "(第" + arrange.getTalentArrange() + "层次)+");
|
|
|
+ arrange.setCount(0);
|
|
|
+ arrange.setTotal(new BigDecimal(0.00));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ info.setRecommendMonths(StringUtils.join(recommendMonths.toArray(), ","));
|
|
|
+ info.setRecommendAllowanceMsg(info.getRecommendAllowanceMsg() + "通过与人才证书有效期取交集得到最终可享受月份:" + StringUtils.join(recommendMonths.toArray(), ",") + "\n经过计算:人才津贴为" + jobMoney + ";");
|
|
|
+ info.setRecommendMoney(jobMoney);
|
|
|
+ info.setRecommendMoneyDesc(msgBulider.substring(0, msgBulider.length() - 1));
|
|
|
+ info.setWorkAllowanceMoney(jobMoney.multiply(new BigDecimal(0.8)).setScale(2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ info.setDevelopAllowanceMoney(jobMoney.multiply(new BigDecimal(0.2)).setScale(2, BigDecimal.ROUND_HALF_UP));
|
|
|
+ info.setRecommendAllowanceMsg(info.getRecommendAllowanceMsg() + "工作津贴为" + info.getWorkAllowanceMoney() + ";发展津贴为:" + info.getDevelopAllowanceMoney());
|
|
|
+ this.talentAllowancecontractDetailService.updateBatchById(detailMonthList);
|
|
|
+ } else if (info.getType() == 2) { //集成电路优秀人才
|
|
|
+ for (TalentAllowanceArrange arrange : arrangeList) {
|
|
|
+ if (FengStringUtil.isNotEmpAndNull(arrange.getPrepareMonths())) {
|
|
|
+ List<String> levelList = new ArrayList<>(Arrays.asList(arrange.getPrepareMonths().split(",")));
|
|
|
+ levelList.retainAll(retainMonths);
|
|
|
+ BigDecimal total = arrange.getJobMoney().multiply(new BigDecimal(levelList.size())).setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ jobMoney = jobMoney.add(total);
|
|
|
+ msgBulider.append(levelList.size() + "(" + StringUtils.join(levelList.toArray(), ",") + ")x" + arrange.getJobMoney() + "(第" + arrange.getTalentArrange() + "层次)+");
|
|
|
+ recommendMonths.addAll(levelList);
|
|
|
+ arrange.setMonths(StringUtils.join(levelList.toArray(), ","));
|
|
|
+ arrange.setCount(levelList.size());
|
|
|
+ arrange.setTotal(total);
|
|
|
+ } else {
|
|
|
+ msgBulider.append("0()x" + arrange.getJobMoney() + "(第" + arrange.getTalentArrange() + "层次)+");
|
|
|
+ arrange.setCount(0);
|
|
|
+ arrange.setTotal(new BigDecimal(0.00));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ info.setRecommendMonths(StringUtils.join(recommendMonths.toArray(), ","));
|
|
|
+ info.setRecommendAllowanceMsg(info.getRecommendAllowanceMsg() + "通过与人才证书有效期取交集得到最终可享受月份:" + StringUtils.join(recommendMonths.toArray(), ",") + "\n经过计算:人才津贴为" + jobMoney + ";");
|
|
|
+ info.setRecommendMoney(jobMoney);
|
|
|
+ info.setRecommendMoneyDesc(msgBulider.substring(0, msgBulider.length() - 1));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ for (TalentAllowanceArrange arrange : arrangeList) {
|
|
|
+ Integer intArragnge = Integer.parseInt(arrange.getTalentArrange());
|
|
|
+ if (FengStringUtil.isNotEmpAndNull(arrange.getPrepareMonths()) && intArragnge <=5) {
|
|
|
+ if (jtMoney.compareTo(BigDecimal.ZERO) == 0 || arrange.getJtMoney().compareTo(jtMoney) == 1) {
|
|
|
+ jtMoney = arrange.getJtMoney();
|
|
|
+ talentArrange = arrange.getTalentArrange();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ info.setRecommendMoney(jtMoney);
|
|
|
+ info.setRecommendMonths("");
|
|
|
+ info.setRecommendMoneyDesc("一次性交通补贴");
|
|
|
+ info.setWorkAllowanceMoney(new BigDecimal(0.00));
|
|
|
+ info.setDevelopAllowanceMoney(new BigDecimal(0.00));
|
|
|
+ info.setRecommendTalentArrange(talentArrange);
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ info.setRecommendMoney(new BigDecimal(0.00));
|
|
|
+ info.setRecommendMoneyDesc("不予兑现");
|
|
|
+ info.setRecommendMonths("");
|
|
|
+ info.setWorkAllowanceMoney(new BigDecimal(0.00));
|
|
|
+ info.setDevelopAllowanceMoney(new BigDecimal(0.00));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+// this.talentAllowanceArrangeService.updateBatchById(arrangeList);
|
|
|
+ return arrangeList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判定是否交足6个月(集成电路)
|
|
|
+ * @param set
|
|
|
+ * @param info
|
|
|
+ * @param name
|
|
|
+ */
|
|
|
+ private function chkMonths($set, &$info, $name, $sort) {
|
|
|
+ if ($info["recommendAllowanceType"] == 1 && (!$set || count($set) < 6)) {
|
|
|
+ $info["recommendAllowanceType"] = 2;
|
|
|
+ $info["recommendAllowanceMsg"] = $info["recommendAllowanceMsg"] . $sort . $name . "不足6个月,无法享受工作津贴(×)";
|
|
|
+ }
|
|
|
+ return set;
|
|
|
+ }
|
|
|
+
|
|
|
+ //合并所有项目的月份
|
|
|
+ private function mergeMonth($detailList) {
|
|
|
+ $taxList = [];
|
|
|
+ $wagesList = [];
|
|
|
+ $pensionList = [];
|
|
|
+ $unemploymentList = [];
|
|
|
+ $medicaList = [];
|
|
|
+ $attendanceList = [];
|
|
|
+ $workdayList = [];
|
|
|
+ foreach ($detailList as $detail) {
|
|
|
+ $projectMap = $detail["projectMap"];
|
|
|
+ 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_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 function mergeMonthNeedDay($detailList) {
|
|
|
+ $attendMap = [];
|
|
|
+ $workDayMap = [];
|
|
|
+ foreach ($detailList as $detail) {
|
|
|
+ $attendMap = $this->getMergeMonthNeedDayMap($detail["projectMap"][AllowanceProjectEnum::PROJECT_ATTENDANCE], $attendMap);
|
|
|
+ $workDayMap = $this->getMergeMonthNeedDayMap($detail["projectMap"][AllowanceProjectEnum::PROJECT_WORKDAY], $workDayMap);
|
|
|
+ }
|
|
|
+ $res = [
|
|
|
+ AllowanceProjectEnum::PROJECT_ATTENDANCE => $attendMap,
|
|
|
+ AllowanceProjectEnum::PROJECT_WORKDAY => $workDayMap
|
|
|
+ ];
|
|
|
+ return $res;
|
|
|
+ }
|
|
|
+
|
|
|
+ private 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 = $obj[1];
|
|
|
+ $count = $map[$month];
|
|
|
+ if ($count == 0) {
|
|
|
+ $map[$month] = $day;
|
|
|
+ } else {
|
|
|
+ $map[$month] = $day + $count;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $map;
|
|
|
}
|
|
|
|
|
|
/**
|