Sfoglia il codice sorgente

凯悦成都新增升职日期字段 余额小数保留两位 非必填字段校验设置默认值

wzy 1 anno fa
parent
commit
0d6cb26315

+ 53 - 30
mjava-kaiyue_cd/src/main/java/com/malk/kaiyue_cd/service/impl/KYCDServiceImpl.java

@@ -94,7 +94,7 @@ public class KYCDServiceImpl implements KYCDService {
         //查询接口body添加参数
         //field_filter_list:要查询字段(花名册字段信息参考:https://open.dingtalk.com/document/orgapp/roster-custom-field-business-code)
         //agentid:企业内部应用AgentId
-        map.put("field_filter_list","sys00-name,sys01-positionLevel,sys00-confirmJoinTime,b433c687-c3b3-4f97-8498-d23944f3316b");
+        map.put("field_filter_list","sys00-name,sys01-positionLevel,sys00-confirmJoinTime,b433c687-c3b3-4f97-8498-d23944f3316b,80292628-1c88-4c25-9c40-3e91283552e7");
         map.put("agentid",agentId);
 
         List<String> result = new ArrayList<>();
@@ -114,11 +114,14 @@ public class KYCDServiceImpl implements KYCDService {
                 String name = "";
                 //原职级
                 String oldPositionLevel = "";
+                //升职日期
+                String promotionTime = "";
 
                 List<Map> fieldDataList = (List<Map>) data.get("field_data_list");
                 for (Map fieldData : fieldDataList) {
                     String fieldCode = fieldData.get("field_code").toString();
                     List<Map> fieldValueList = (List<Map>) fieldData.get("field_value_list");
+
                     if (Objects.nonNull(fieldValueList.get(0).get("value"))){
                         String value = fieldValueList.get(0).get("value").toString();
                         switch (fieldCode){
@@ -127,18 +130,25 @@ public class KYCDServiceImpl implements KYCDService {
                             case "sys00-name": name = value;break;
                             case "b433c687-c3b3-4f97-8498-d23944f3316b": oldPositionLevel = value;break;//成都原职级
 //                            case "7482b192-9f1d-49fa-adab-6f33f7d0951e": oldPositionLevel = value;break;//高级假期原职级
+                            case "80292628-1c88-4c25-9c40-3e91283552e7": promotionTime = value;break;//升职日期
                             default:break;
                         }
-                    }else {
-                        log.info("更新员工年假余额:参数缺啦!");
-                        return McR.errorParam("参数缺啦!");
                     }
-
                 }
                 //若没有原职级 则默认原职级是现职级
                 if ("".equals(oldPositionLevel)){
                     oldPositionLevel = positionLevel;
                 }
+                //若没有升职日期 则默认升职日期是入职日期
+                if ("".equals(promotionTime)){
+                    promotionTime = confirmJoinTime;
+                }
+
+                if ("".equals(confirmJoinTime) || "".equals(positionLevel) || "".equals(name) || "".equals(oldPositionLevel)){
+                    log.info("更新员工年假余额:参数缺啦!");
+                    return McR.errorParam("参数缺啦!");
+                }
+
 
                 //假期有效开始日期为当年1月1日
                 DateTime beginDate = DateUtil.beginOfYear(new Date());
@@ -151,7 +161,7 @@ public class KYCDServiceImpl implements KYCDService {
                 //年假
                 double yearLeave = 0.0;
                 //预支年假
-                double advanceLeave = 10.0;
+                double advanceLeave = 8.0;
                 //获取原职级年假基数
                 int oldPositionLevelBaseNum = getAnnualLeaveBaseNum(oldPositionLevel);
                 //获取现职级年假基数
@@ -167,45 +177,55 @@ public class KYCDServiceImpl implements KYCDService {
                 long anniversary = DateUtil.betweenYear(DateUtil.parse(confirmJoinTime), anniversaryOfEmployment, true) - 1;
                 //判断员工是否当年新入职
                 if (DateUtil.year(DateUtil.parse(confirmJoinTime)) == DateUtil.year(new Date())){
-                    //分两段计算:入职日到今天,今天到年底
-                    long day1 = DateUtil.betweenDay(DateUtil.parse(confirmJoinTime), today, true);
-                    long day2 = DateUtil.betweenDay(today, endDate, true);
+                    //分两段计算:入职日到升职日,升职日到年底
+                    long day1 = DateUtil.betweenDay(DateUtil.parse(confirmJoinTime), DateUtil.parse(promotionTime), true);
+                    long day2 = DateUtil.betweenDay(DateUtil.parse(promotionTime), endDate, true);
                     yearLeave = (double) (day1 * oldPositionLevelBaseNum + day2 * positionLevelBaseNum ) / yearDays;
                 }else {
-                    //当前日期在今年入职周年日之前
-                    if (DateUtil.compare(anniversaryOfEmployment, today) >= 0){
-                        //获取年初到今天的天数
-                            int day1 = DateUtil.dayOfYear(today);
-                        //获取今天到入职周年日的天数
-                        long day2 = DateUtil.betweenDay(today, anniversaryOfEmployment, true);
-                        //获取入职周年日到年底的天数
-                        long day3 = DateUtil.betweenDay(anniversaryOfEmployment, endDate, true);
-                        //分三段计算:年初-今天,今天到入职周年日,入职周年日到年底
-                        yearLeave = (double) (day1 * (oldPositionLevelBaseNum + (anniversary > 4 ? 4 : anniversary)) + day2 * (positionLevelBaseNum + (anniversary > 4 ? 4 : anniversary)) + day3 * (positionLevelBaseNum + (anniversary + 1 > 4 ? 4 : anniversary + 1))) / yearDays ;
+                    //升职日期在今年入职周年日之前
+                    if (DateUtil.compare(anniversaryOfEmployment, DateUtil.parse(promotionTime)) >= 0){
+                        //升职日期在今年
+                        if (DateUtil.compare(DateUtil.parse(promotionTime),today) >= 0){
+                            //获取年初到升职日的天数
+                            int day1 = DateUtil.dayOfYear(DateUtil.parse(promotionTime));
+                            //获升职值日到入职周年日的天数
+                            long day2 = DateUtil.betweenDay(DateUtil.parse(promotionTime), anniversaryOfEmployment, true);
+                            //获取入职周年日到年底的天数
+                            long day3 = DateUtil.betweenDay(anniversaryOfEmployment, endDate, true);
+                            //分三段计算:年初-升职日,升职日到入职周年日,入职周年日到年底
+                            yearLeave = (double) (day1 * (oldPositionLevelBaseNum + (anniversary > 4 ? 4 : anniversary)) + day2 * (positionLevelBaseNum + (anniversary > 4 ? 4 : anniversary)) + day3 * (positionLevelBaseNum + (anniversary + 1 > 4 ? 4 : anniversary + 1))) / yearDays ;
+                        }else{
+                            //获取年初到入职周年日的天数
+                            int day1 = DateUtil.dayOfYear(anniversaryOfEmployment);
+                            //获取入职周年日到年底的天数
+                            long day2 = DateUtil.betweenDay(anniversaryOfEmployment, endDate, true);
+                            //分两段计算:年初到入职周年日,入职周年日到年底
+                            yearLeave = (double) (day1 * (positionLevelBaseNum + (anniversary > 4 ? 4 : anniversary)) + day2 * (positionLevelBaseNum + (anniversary + 1 > 4 ? 4 : anniversary + 1))) / yearDays ;
+                        }
                     }else {
-                        //当前日期在今年入职周年日之后
+                        //升职日在今年入职周年日之后
                         //获取年初到入职周年日的天数
                         int day1 = DateUtil.dayOfYear(anniversaryOfEmployment);
-                        //获取入职周年日到今天的天数
-                        long day2 = DateUtil.betweenDay(anniversaryOfEmployment, today, true);
-                        //获取今天到年底的天数
-                        long day3 = DateUtil.betweenDay(today, endDate, true);
-                        //分三段计算:年初-入职周年日,入职周年日到今天,今天到年底
+                        //获取入职周年日到升职日的天数
+                        long day2 = DateUtil.betweenDay(anniversaryOfEmployment, DateUtil.parse(promotionTime), true);
+                        //获取升职日到年底的天数
+                        long day3 = DateUtil.betweenDay(DateUtil.parse(promotionTime), endDate, true);
+                        //分三段计算:年初-入职周年日,入职周年日到升职日,升职日到年底
                         yearLeave = (double) (day1 * (oldPositionLevelBaseNum + (anniversary > 4 ? 4 : anniversary)) + day2 * (oldPositionLevelBaseNum + (anniversary + 1 > 4 ? 4 : anniversary + 1)) + day3 * (positionLevelBaseNum + (anniversary + 1 > 4 ? 4 : anniversary + 1))) / yearDays;
                     }
                 }
 
-                result.add("姓名:"+name+",职级:" + positionLevel+",原职级:" + oldPositionLevel+ ",年假基数:" + yearLeave + "天,入职日期:" + confirmJoinTime + ",开始日期:" + beginDate+",截止日期:" + endDate);
 
                 //年假小数
-                double yearLeaveDecimalPart = yearLeave - (int) yearLeave;
+                /*double yearLeaveDecimalPart = yearLeave - (int) yearLeave;
                 if (yearLeaveDecimalPart < 0.25){
                     yearLeave = (int) yearLeave;
                 }else if (yearLeaveDecimalPart < 0.75){
                     yearLeave = (int) yearLeave + 0.5;
                 }else if (yearLeaveDecimalPart < 1){
                     yearLeave = (int) yearLeave + 1;
-                }
+                }*/
+                yearLeave = Math.round(yearLeave * 100.0) / 100.0;
 
                 //查询出用户消费年假记录 当返回leaveRecords中calType为null或不返回该字段则为请假消耗 将计算出的年假数减去请假消耗的数量
                 Map body = new HashMap();
@@ -270,16 +290,17 @@ public class KYCDServiceImpl implements KYCDService {
 
 
                 //更新假期余额接口的body
+                DateTime deadline = DateUtil.parse((DateUtil.year(new Date()) + 1) + "-03-31");
                 Map<String,Object> updateBody = new HashMap<>();
                 Map<String,Object> leave_quotas = new HashMap<>();
                 //额度有效期开始时间,毫秒级时间戳
                 leave_quotas.put("start_time",beginDate.getTime());
                 //额度有效期结束时间,毫秒级时间戳。
-                leave_quotas.put("end_time",endDate.getTime());
+                leave_quotas.put("end_time",deadline.getTime());
                 //操作原因
                 leave_quotas.put("reason","接口测试修改");
                 //以天计算的额度总数 假期类型按天计算时,该值不为空且按百分之一天折算。 例如:1000=10天。
-                leave_quotas.put("quota_num_per_day",(int) realYearLeave);
+                leave_quotas.put("quota_num_per_day",realYearLeave);
                 //以小时计算的额度总数 假期类型按小时,计算该值不为空且按百分之一小时折算。例如:1000=10小时。
                 leave_quotas.put("quota_num_per_hour",0);
                 //额度所对应的周期,格式必须是"yyyy",例如"2021"
@@ -305,6 +326,8 @@ public class KYCDServiceImpl implements KYCDService {
                 long currentTime = System.currentTimeMillis();
                 bodyList.put(bodyStr, currentTime);
 
+                result.add("姓名:"+name+",职级:" + positionLevel+",原职级:" + oldPositionLevel+ ",年假基数:" + yearLeave + "天,入职日期:" + confirmJoinTime + ",升职日期:" + promotionTime + ",开始日期:" + beginDate+",截止日期:" + deadline);
+
                 //更新假期余额
                 UtilHttp.doPost("https://oapi.dingtalk.com/topapi/attendance/vacation/quota/update", null, DDConf.initTokenParams(access_token), updateBody, DDR.class);
             }