|
@@ -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);
|
|
|
}
|