|  | @@ -227,7 +227,7 @@ class TalentAllowance extends AdminController {
 | 
											
												
													
														|  |                          $updCheck["checkState"] = AllowanceStateEnum::REVIEW_PASS;
 |  |                          $updCheck["checkState"] = AllowanceStateEnum::REVIEW_PASS;
 | 
											
												
													
														|  |                          $updCheck["reviewPassTime"] = date("Y-m-d H:i:s");
 |  |                          $updCheck["reviewPassTime"] = date("Y-m-d H:i:s");
 | 
											
												
													
														|  |                          /*                         * * 在此处需要判断津补贴类型 */
 |  |                          /*                         * * 在此处需要判断津补贴类型 */
 | 
											
												
													
														|  | -                        $arrangeList = $this->validateAllowanceType(&$updCheck);
 |  | 
 | 
											
												
													
														|  | 
 |  | +                        $arrangeList = $this->validateAllowanceType($updCheck);
 | 
											
												
													
														|  |                          TalentAllowanceArrange::update($arrangeList);
 |  |                          TalentAllowanceArrange::update($arrangeList);
 | 
											
												
													
														|  |                          break;
 |  |                          break;
 | 
											
												
													
														|  |                      case 2:
 |  |                      case 2:
 | 
											
										
											
												
													
														|  | @@ -269,7 +269,7 @@ class TalentAllowance extends AdminController {
 | 
											
												
													
														|  |          return new Response(Response::SUCCESS, "提交审核成功");
 |  |          return new Response(Response::SUCCESS, "提交审核成功");
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    private function validateAllowanceType($info) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +    private function validateAllowanceType(&$info) {
 | 
											
												
													
														|  |          $old = TalentAllowanceApi::getInfoById($info["id"]);
 |  |          $old = TalentAllowanceApi::getInfoById($info["id"]);
 | 
											
												
													
														|  |          $talentTypeMap = DictApi::selectByParentCode("enterprise_tag");
 |  |          $talentTypeMap = DictApi::selectByParentCode("enterprise_tag");
 | 
											
												
													
														|  |          $enterpriseMap = \app\common\model\Enterprise::where("type", $this->user["type"])->column("name", "id");
 |  |          $enterpriseMap = \app\common\model\Enterprise::where("type", $this->user["type"])->column("name", "id");
 | 
											
										
											
												
													
														|  | @@ -278,23 +278,11 @@ class TalentAllowance extends AdminController {
 | 
											
												
													
														|  |          $detaiPdList = [];                //用于判定类型
 |  |          $detaiPdList = [];                //用于判定类型
 | 
											
												
													
														|  |          $detailMonthList = [];            //用于计算月份
 |  |          $detailMonthList = [];            //用于计算月份
 | 
											
												
													
														|  |          $recommendAllowanceMsg = [];
 |  |          $recommendAllowanceMsg = [];
 | 
											
												
													
														|  | -        
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |          foreach ($initDetailList as $detail) {
 |  |          foreach ($initDetailList as $detail) {
 | 
											
												
													
														|  |              $projectList = \app\common\model\TalentAllowanceProject::where("baseId", $detail["id"])->select()->toArray();
 |  |              $projectList = \app\common\model\TalentAllowanceProject::where("baseId", $detail["id"])->select()->toArray();
 | 
											
												
													
														|  |              $projectMap = [];
 |  |              $projectMap = [];
 | 
											
												
													
														|  |              foreach ($projectList as $project) {
 |  |              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;
 |  |                  $projectMap[$project["project"]] = $project;
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              $detail["list"] = $projectList;
 |  |              $detail["list"] = $projectList;
 | 
											
										
											
												
													
														|  | @@ -305,35 +293,314 @@ class TalentAllowance extends AdminController {
 | 
											
												
													
														|  |              $detaiPdList[] = $detail;
 |  |              $detaiPdList[] = $detail;
 | 
											
												
													
														|  |              $detailMonthList[] = $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;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /**
 |  |      /**
 |