|
@@ -278,11 +278,11 @@ public class TimingTask {
|
|
|
}
|
|
|
|
|
|
|
|
|
- //每天2:11 同步钉钉用户前2天到未来30天时间段的打卡,请假,出差数据
|
|
|
+ //每天2:11 同步泛微用户前2天到未来30天时间段的打卡,请假,出差数据
|
|
|
@Scheduled(cron = "0 11 2 ? * *")
|
|
|
private void synFanWeiWorkData() {
|
|
|
- if (isDev) return;
|
|
|
- if(!isPrivateDeploy) return;
|
|
|
+ /*if (isDev) return;
|
|
|
+ if(!isPrivateDeploy) return;*/
|
|
|
List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("sync_fanwei", 1));
|
|
|
List<Integer> compIds = timeTypeList.stream().map(TimeType::getCompanyId).collect(Collectors.toList());
|
|
|
if(compIds.isEmpty()){
|
|
@@ -294,85 +294,113 @@ public class TimingTask {
|
|
|
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("HH:mm");
|
|
|
- LocalDateTime yesterday = LocalDateTime.now().minusDays(2);
|
|
|
+ //需要修改************************************************ 日期
|
|
|
+ LocalDateTime yesterday = LocalDateTime.now().minusDays(100);
|
|
|
String startDate = dtf.format(yesterday);
|
|
|
- String endDate = dtf.format(yesterday.plusDays(32));
|
|
|
+ String endDate = dtf.format(yesterday.plusDays(30));
|
|
|
List<UserFvTime> oldUserFvTimeList = userFvTimeService.list(new QueryWrapper<UserFvTime>().eq("company_id", compId));
|
|
|
List<LeaveSheet> oldLeaveSheetList = leaveSheetService.list(new QueryWrapper<LeaveSheet>().eq("company_id", compId));
|
|
|
List<BusinessTrip> oldBusinessTripList = businessTripService.list(new QueryWrapper<BusinessTrip>().eq("company_id", compId));
|
|
|
- jsonObject.put("startDate",startDate);
|
|
|
+ /*jsonObject.put("startDate",startDate);
|
|
|
jsonObject.put("endDate",endDate);
|
|
|
+ jsonObject.put("workDate",startDate);*/
|
|
|
String jsonString = jsonObject.toJSONString();
|
|
|
List<UserFvTime> userFvTimeList=new ArrayList<>();
|
|
|
List<LeaveSheet> leaveSheetList=new ArrayList<>();
|
|
|
List<BusinessTrip> businessTripList=new ArrayList<>();
|
|
|
TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", compId));
|
|
|
+ List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", compId));
|
|
|
//获取休息设置
|
|
|
TimeAutoExclude timeAutoExclude = timeAutoExcludeMapper.selectOne(new QueryWrapper<TimeAutoExclude>().eq("company_id", compId));
|
|
|
- //Todo: 获取打卡数据
|
|
|
+ //Todo: 获取考勤打卡数据
|
|
|
HttpRespMsg workDataMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getWorkData", jsonString);
|
|
|
List<Map<String,Object>> workDataList= (List<Map<String, Object>>) workDataMsg.data;
|
|
|
- List<String> userIds = workDataList.stream().map(map -> String.valueOf(map.get("userId"))).collect(Collectors.toList());
|
|
|
+ //Todo: 获取外出打卡数据
|
|
|
+ HttpRespMsg outWorkDataMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getOutRecord", jsonString);
|
|
|
+ List<Map<String,Object>> outWorkDataList= (List<Map<String, Object>>) outWorkDataMsg.data;
|
|
|
+ //Todo: 获取考勤补卡数据
|
|
|
+ HttpRespMsg replaceWorkDataMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getReplaceRecord", jsonString);
|
|
|
+ List<Map<String,Object>> replaceWorkDataList= (List<Map<String, Object>>) replaceWorkDataMsg.data;
|
|
|
+ List<String> userIds = workDataList.stream().map(map -> String.valueOf(map.get("userId"))).distinct().collect(Collectors.toList());
|
|
|
List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("job_number", userIds));
|
|
|
+ List<LocalDateTime> dateTimeList = getDays(yesterday, yesterday.plusDays(132));
|
|
|
for (User user : userList) {
|
|
|
- System.out.println("需要同步的用户列表-----"+userList);
|
|
|
- LocalTime startTime=null;
|
|
|
- LocalTime endTime=null;
|
|
|
- LocalDate workDate=null;
|
|
|
- for (Map<String, Object> map : workDataList) {
|
|
|
- if (map.get("userId").equals(user.getJobNumber())) {
|
|
|
- if(String.valueOf(map.get("signtype")).equals("签到")){
|
|
|
+ for (LocalDateTime localDateTime : dateTimeList) {
|
|
|
+ LocalDate workDate=localDateTime.toLocalDate();
|
|
|
+ //当天的考勤记录
|
|
|
+ List<Map<String, Object>> list = workDataList.stream().filter(wl -> wl.get("userId").equals(user.getJobNumber())&&wl.get("workDate").equals(workDate.format(dtf))).collect(Collectors.toList());
|
|
|
+ UserFvTime userFvTime=new UserFvTime();
|
|
|
+ userFvTime.setWorkDate(workDate);
|
|
|
+ LocalTime startTime=null;
|
|
|
+ LocalTime endTime=null;
|
|
|
+ for (Map<String, Object> map : list) {
|
|
|
+ if(String.valueOf(map.get("signtype")).equals("签到")&&!map.get("signtime").equals("")){
|
|
|
startTime=LocalTime.parse(String.valueOf(map.get("signtime")), dtf2);
|
|
|
- workDate= LocalDate.parse(String.valueOf(map.get("workDate")), dtf);
|
|
|
}
|
|
|
- if(String.valueOf(map.get("signtype")).equals("签退")){
|
|
|
+ if(String.valueOf(map.get("signtype")).equals("签退")&&!map.get("signtime").equals("")){
|
|
|
endTime=LocalTime.parse(String.valueOf(map.get("signtime")), dtf2);
|
|
|
- workDate=LocalDate.parse(String.valueOf(map.get("workDate")),dtf);
|
|
|
}
|
|
|
+ //处理外出记录 有外出记录默认以默认规则作为考勤数据来源
|
|
|
+ Optional<Map<String, Object>> outFirst = outWorkDataList.stream().filter(ol -> ol.get("ycbgkssj").equals(map.get("workDate")) && ol.get("rybh").equals(map.get("userId"))).findFirst();
|
|
|
+ if(outFirst.isPresent()){
|
|
|
+ if(startTime==null||LocalTime.parse(String.valueOf(outFirst.get().get("kssj")), dtf2).isBefore(startTime)){
|
|
|
+ startTime=LocalTime.parse(String.valueOf(outFirst.get().get("kssj")), dtf2);
|
|
|
+ }
|
|
|
+ if(endTime==null||LocalTime.parse(String.valueOf(outFirst.get().get("jssj")), dtf2).isBefore(endTime)){
|
|
|
+ endTime=LocalTime.parse(String.valueOf(outFirst.get().get("jssj")), dtf2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //处理补卡记录 有补卡记录以补卡记录作为考勤数据来源
|
|
|
+ Optional<Map<String, Object>> replaceFirst = replaceWorkDataList.stream().filter(rl -> rl.get("kqrq").equals(map.get("workDate")) && rl.get("rybh").equals(map.get("userId"))).findFirst();
|
|
|
+ if(replaceFirst.isPresent()){
|
|
|
+ if(startTime==null||replaceFirst.get().get("bklx").equals("上班")){
|
|
|
+ startTime=LocalTime.parse(String.valueOf(replaceFirst.get().get("bksj")), dtf2);
|
|
|
+ }
|
|
|
+ if(endTime==null||replaceFirst.get().get("bklx").equals("下班")){
|
|
|
+ endTime=LocalTime.parse(String.valueOf(replaceFirst.get().get("bksj")), dtf2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(compIds.contains(user.getCompanyId())){
|
|
|
+ if(startTime==null||endTime==null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Duration between = Duration.between(startTime, endTime);
|
|
|
+ userFvTime.setStartTime(startTime.format(dtf2));
|
|
|
+ userFvTime.setEndTime(endTime.format(dtf2));
|
|
|
+ userFvTime.setCompanyId(user.getCompanyId());
|
|
|
+ userFvTime.setUserId(user.getId());
|
|
|
+ long workHours = between.toHours();
|
|
|
+ long restHours;
|
|
|
+ if(startTime.isBefore(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2))
|
|
|
+ &&endTime.isAfter(LocalTime.parse(timeAutoExclude.getEndTime(),dtf2))){
|
|
|
+ Duration bt = Duration.between(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2), LocalTime.parse(timeAutoExclude.getEndTime(),dtf2));
|
|
|
+ restHours=bt.toHours();
|
|
|
+ }else {
|
|
|
+ restHours=0;
|
|
|
+ }
|
|
|
+ userFvTime.setWorkHours(BigDecimal.valueOf(workHours).subtract(BigDecimal.valueOf(restHours)).floatValue());
|
|
|
+ Optional<UserFvTime> first = oldUserFvTimeList.stream().filter(ol -> ol.getWorkDate().isEqual(userFvTime.getWorkDate()) && ol.getUserId().equals(userFvTime.getUserId())).findFirst();
|
|
|
+ if(first.isPresent()){
|
|
|
+ userFvTime.setId(first.get().getId());
|
|
|
+ }
|
|
|
+ userFvTimeList.add(userFvTime);
|
|
|
}
|
|
|
}
|
|
|
- UserFvTime userFvTime=new UserFvTime();
|
|
|
- System.out.println("泛微同步人员打卡数据----"+user.getName());
|
|
|
- if(compIds.contains(user.getCompanyId())){
|
|
|
- if(startTime==null||endTime==null){
|
|
|
- System.out.println("缺少上班或者下班打卡时间----"+user.getName());
|
|
|
- continue;
|
|
|
- }
|
|
|
- userFvTime.setWorkDate(workDate);
|
|
|
- Duration between = Duration.between(startTime, endTime);
|
|
|
- userFvTime.setStartTime(startTime.format(dtf2));
|
|
|
- userFvTime.setEndTime(endTime.format(dtf2));
|
|
|
- userFvTime.setCompanyId(user.getCompanyId());
|
|
|
- userFvTime.setUserId(user.getId());
|
|
|
- long workHours = between.toHours();
|
|
|
- long restHours;
|
|
|
- if(startTime.isBefore(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2))
|
|
|
- &&endTime.isAfter(LocalTime.parse(timeAutoExclude.getEndTime(),dtf2))){
|
|
|
- Duration bt = Duration.between(LocalTime.parse(timeAutoExclude.getStartTime(),dtf2), LocalTime.parse(timeAutoExclude.getEndTime(),dtf2));
|
|
|
- restHours=bt.toHours();
|
|
|
- }else {
|
|
|
- restHours=0;
|
|
|
- }
|
|
|
- userFvTime.setWorkHours(BigDecimal.valueOf(workHours).subtract(BigDecimal.valueOf(restHours)).floatValue());
|
|
|
- Optional<UserFvTime> first = oldUserFvTimeList.stream().filter(ol -> ol.getWorkDate().isEqual(userFvTime.getWorkDate()) && ol.getUserId().equals(userFvTime.getUserId())).findFirst();
|
|
|
- if(first.isPresent()){
|
|
|
- userFvTime.setId(first.get().getId());
|
|
|
- }
|
|
|
- userFvTimeList.add(userFvTime);
|
|
|
- }
|
|
|
}
|
|
|
if(userFvTimeList.size()>0){
|
|
|
userFvTimeService.saveOrUpdateBatch(userFvTimeList);
|
|
|
}
|
|
|
- System.out.println(workDataList);
|
|
|
+ System.out.println(userFvTimeList);
|
|
|
//Todo: 获取请假数据
|
|
|
HttpRespMsg leaveRecordMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getLeaveRecord", jsonString);
|
|
|
List<Map<String,Object>> leaveRecordList= (List<Map<String, Object>>) leaveRecordMsg.data;
|
|
|
for (Map<String, Object> map : leaveRecordList) {
|
|
|
- User user = userMapper.selectOne(new QueryWrapper<User>().eq("job_number", map.get("rybh")));
|
|
|
- if(user==null){
|
|
|
+ Optional<User> optional=allUserList.stream().filter(al->al.getJobNumber()!=null&&al.getJobNumber().equals(map.get("rybh"))).findFirst();
|
|
|
+ if(!optional.isPresent()){
|
|
|
continue;
|
|
|
}
|
|
|
+ User user=optional.get();
|
|
|
System.out.println("泛微同步人员请假数据----"+user.getName());
|
|
|
if(compIds.contains(user.getCompanyId())){
|
|
|
LeaveSheet leaveSheet=new LeaveSheet();
|
|
@@ -396,7 +424,7 @@ public class TimingTask {
|
|
|
}else {
|
|
|
leaveSheet.setTimeHours(Float.parseFloat(((String) map.get("timeHours")).equals("")?"0.00":((String) map.get("timeHours"))));
|
|
|
}
|
|
|
- Integer leaveType=null;
|
|
|
+ Integer leaveType;
|
|
|
switch (String.valueOf(map.get("leaveType"))){
|
|
|
case "事假":leaveType=0;
|
|
|
break;
|
|
@@ -419,7 +447,7 @@ public class TimingTask {
|
|
|
leaveSheet.setLeaveType(leaveType);
|
|
|
leaveSheet.setProcinstId(String.valueOf(map.get("procinstId")));
|
|
|
leaveSheet.setGmtFinished(String.valueOf(map.get("gmtFinished")));
|
|
|
- Optional<LeaveSheet> first = oldLeaveSheetList.stream().filter(ol -> ol.getStartDate().isEqual(leaveSheet.getStartDate())&&ol.getEndDate().isEqual(leaveSheet.getEndDate()) && ol.getOwnerId().equals(leaveSheet.getOwnerId())).findFirst();
|
|
|
+ Optional<LeaveSheet> first = oldLeaveSheetList.stream().filter(ol -> ol.getStartDate().isEqual(leaveSheet.getStartDate())&&ol.getEndDate().isEqual(leaveSheet.getEndDate()) && ol.getOwnerId().equals(leaveSheet.getOwnerId())&&ol.getProcinstId().equals(leaveSheet.getProcinstId())).findFirst();
|
|
|
if(first.isPresent()){
|
|
|
leaveSheet.setId(first.get().getId());
|
|
|
}
|
|
@@ -434,11 +462,11 @@ public class TimingTask {
|
|
|
HttpRespMsg travelRecordMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getTravelRecord", jsonString);
|
|
|
List<Map<String,Object>> travelRecordList= (List<Map<String, Object>>) travelRecordMsg.data;
|
|
|
for (Map<String, Object> map : travelRecordList) {
|
|
|
- User user = userMapper.selectOne(new QueryWrapper<User>().eq("job_number", map.get("rybh")));
|
|
|
- if(user==null){
|
|
|
+ Optional<User> optional=allUserList.stream().filter(al->al.getJobNumber()!=null&&al.getJobNumber().equals(map.get("rybh"))).findFirst();
|
|
|
+ if(!optional.isPresent()){
|
|
|
continue;
|
|
|
}
|
|
|
- System.out.println("泛微同步人员出差数据----"+user.getName());
|
|
|
+ User user=optional.get();
|
|
|
if(compIds.contains(user.getCompanyId())){
|
|
|
BusinessTrip businessTrip=new BusinessTrip();
|
|
|
businessTrip.setCompanyId(user.getCompanyId());
|
|
@@ -470,10 +498,11 @@ public class TimingTask {
|
|
|
break;
|
|
|
}
|
|
|
businessTrip.setGoBack(goBack);
|
|
|
- businessTrip.setDayCount(Integer.parseInt(String.valueOf(map.get("dayCount")).substring(0,1)));
|
|
|
+ Double dayCount =Double.valueOf(String.valueOf(map.get("dayCount")));
|
|
|
+ businessTrip.setDayCount(dayCount.intValue());
|
|
|
businessTrip.setProcinstId((String) map.get("procinstId"));
|
|
|
businessTrip.setGmtFinished((String)map.get("gmtFinished"));
|
|
|
- Optional<BusinessTrip> first = oldBusinessTripList.stream().filter(ol -> ol.getStartDate().isEqual(businessTrip.getStartDate())&&ol.getEndDate().isEqual(businessTrip.getEndDate()) && ol.getOwnerId().equals(businessTrip.getOwnerId())).findFirst();
|
|
|
+ Optional<BusinessTrip> first = oldBusinessTripList.stream().filter(ol -> ol.getStartDate().isEqual(businessTrip.getStartDate())&&ol.getEndDate().isEqual(businessTrip.getEndDate()) && ol.getOwnerId().equals(businessTrip.getOwnerId())&&ol.getProcinstId().equals(businessTrip.getProcinstId())).findFirst();
|
|
|
if(first.isPresent()){
|
|
|
businessTrip.setId(first.get().getId());
|
|
|
}
|
|
@@ -486,6 +515,16 @@ public class TimingTask {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private List<LocalDateTime> getDays(LocalDateTime start, LocalDateTime end) {
|
|
|
+ List<LocalDateTime> result = new ArrayList();
|
|
|
+ while (start.isBefore(end)) {
|
|
|
+ result.add(start);
|
|
|
+ start=start.plusDays(1);
|
|
|
+ }
|
|
|
+ result.add(start);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
//每天1:00 同步昨天的微信请假信息
|
|
|
@Scheduled(cron = "0 0 1 ? * *")
|
|
|
public void synWxLeave() throws Exception {
|