Browse Source

通讯录搜索接口

cs 2 years ago
parent
commit
9ab063cdc6

+ 187 - 206
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -1132,201 +1132,11 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         }
     }
 
-    //查询微信请假单详情
-    private List<LeaveSheet> wxLeaveDetail(String startTime,String endTime,List<String> fail,String accessToken,WxCorpInfo wxCorpInfo){
-        String url = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo?access_token=ACCESS_TOKEN";
-        String detailUrl = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail?access_token=ACCESS_TOKEN";
-        HttpHeaders headers = new HttpHeaders();
-        RestTemplate restTemplate = new RestTemplate();
-        ArrayList<LeaveSheet> result = new ArrayList<>();
-        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
-        headers.setContentType(type);
-        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
-        //批量获取审批单号
-        ArrayList<HashMap> list = new ArrayList<>();
-        HashMap<String, String> record_type = new HashMap<>();
-        list.add(record_type);
-        record_type.put("key", "record_type");
-        record_type.put("value", "1");
-        JSONObject requestMap = new JSONObject();
-        requestMap.put("starttime", startTime);
-        requestMap.put("endtime", endTime);
-        requestMap.put("cursor", 0);
-        requestMap.put("size", 100);
-        requestMap.put("filters", list);
-        HttpEntity<JSONObject> entity = new HttpEntity<>(requestMap, headers);
-        ResponseEntity<String> ResponseEntity = restTemplate.postForEntity(url, entity, String.class);
-        if (ResponseEntity.getStatusCode() == HttpStatus.OK) {
-            String resp = ResponseEntity.getBody();
-            JSONObject json = JSONObject.parseObject(resp);
-            Object[] sp_no_lists = json.getJSONArray("sp_no_list").toArray();
-            //查询每个审批号审批详情
-            for (int i = 0; i < sp_no_lists.length; i++) {
-                detailUrl = detailUrl.replace("ACCESS_TOKEN", accessToken);
-                JSONObject detailMap = new JSONObject();
-                detailMap.put("sp_no", sp_no_lists[i]);
-                HttpEntity<JSONObject> detailEntity = new HttpEntity<>(detailMap, headers);
-                ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(detailUrl, detailEntity, String.class);
-                if(ResponseEntity.getStatusCode() == HttpStatus.OK){
-                    //封装请假单数据
-                    String detailResp = detailResponseEntity.getBody();
-                    JSONObject infoJson = JSONObject.parseObject(detailResp).getJSONObject("info");
-                    //审核状态
-                    Integer sp_status = infoJson.getInteger("sp_status");
-                    switch (sp_status){
-                        //审批中
-                        case 1:
-                            sp_status=1;
-                            break;
-                        //已通过
-                        case 2:
-                            sp_status=0;
-                            break;
-                        //已驳回
-                        case 3:
-                            sp_status=2;
-                            break;
-                        //已撤销
-                        case 4:
-                            sp_status=3;
-                            break;
-                        //通过后撤销
-                        case 5:
-                            sp_status=5;
-                            break;
-                        //通过后撤销
-                        case 6:
-                            sp_status=6;
-                            break;
-                        //7-已删除
-                        case 7:
-                            sp_status=7;
-                            break;
-                        default:
-                            sp_status=8;
-                    }
-                    //审批申请提交时间,Unix时间戳
-                    LocalDateTime applyTime = LocalDateTime.ofEpochSecond(Long.parseLong(infoJson.getString("apply_time")), 0, ZoneOffset.ofHours(8));
-                    //申请人姓名
-                    String applyer = infoJson.getString("applyer");
-                    String userId = JSONObject.parseObject(applyer).getString("userid");
-                    User user = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_real_userid", userId));
-                    String name = user==null?userId:user.getName();
-                    //审批人姓名
-                    String approverUserId = infoJson.getJSONArray("sp_record").getJSONObject(0)
-                            .getJSONArray("details").getJSONObject(0)
-                            .getJSONObject("approver").getString("userid");
-                    User approverUser = new User();
-                    if (approverUserId!=null&&approverUserId!=""){
-                        approverUser = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_real_userid", approverUserId));
-                    }
-                    String approverName = approverUser==null?approverUserId:approverUser.getName();
-                    JSONArray contents = infoJson.getJSONObject("apply_data")
-                            .getJSONArray("contents");
-                    //请假类型
-                    JSONObject vacation = contents.getJSONObject(0)
-                            .getJSONObject("value")
-                            .getJSONObject("vacation");
-                    String text = vacation.getJSONObject("selector")
-                            .getJSONArray("options").getJSONObject(0)
-                            .getJSONArray("value").getJSONObject(0)
-                            .getString("text");
-                    //请假事由
-                    String remark = contents.getJSONObject(1).getJSONObject("value").getString("text");
-                    Integer leave_type = 0;
-                    switch (text){
-                        case "事假":
-                            leave_type = 0;
-                            break;
-                        case "病假":
-                            leave_type = 1;
-                            break;
-                        case "年假":
-                            leave_type = 2;
-                            break;
-                        case "产假":
-                            leave_type = 3;
-                            break;
-                        case "婚假":
-                            leave_type = 4;
-                            break;
-                        case "丧假":
-                            leave_type = 5;
-                            break;
-                        case "调休假":
-                            leave_type = 6;
-                            break;
-                        case "陪产假":
-                            leave_type = 7;
-                            break;
-                        case "其他":
-                            leave_type = 8;
-                            break;
-                    }
-                    //请假开始时间
-                    JSONObject date_range = vacation.getJSONObject("attendance")
-                            .getJSONObject("date_range");
-                    String startDate =date_range.getString("new_begin");
-                    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
-                    long startDateTemp = Long.valueOf(startDate);
-                    String startDateString = sdf.format(new Date(startDateTemp * 1000L));
-                    DateTimeFormatter startfmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-                    LocalDate sDate = LocalDate.parse(startDateString, startfmt);
-                    //请假结束时间
-                    String endDate = date_range.getString("new_end");
-                    long endDatetemp = Long.valueOf(endDate);
-                    String endDateString = sdf.format(new Date(endDatetemp * 1000L));
-                    DateTimeFormatter endfmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-                    LocalDate eDate = LocalDate.parse(endDateString, endfmt);
-                    //请假时长
-                    String timeHours = date_range.getString("new_duration");
-                    String leaveType = date_range.getString("type");
-                    LeaveSheet leaveSheet = new LeaveSheet();
-                    leaveSheet.setProcinstId(sp_no_lists[i].toString());
-                    leaveSheet.setIsFinalAudit(1);
-                    leaveSheet.setIndate(applyTime);
-                    leaveSheet.setOwnerName(name);
-                    leaveSheet.setOwnerId(user==null?"":user.getId());
-                    leaveSheet.setCompanyId(user.getCompanyId());
-                    leaveSheet.setTel(user.getPhone()==null?"":user.getPhone());
-                    //审批人信息
-                    leaveSheet.setAuditorName(approverName);
-                    leaveSheet.setAuditorId(approverUser==null?"":approverUser.getId());
-                    //请假日期
-                    leaveSheet.setStartDate(sDate);
-                    leaveSheet.setEndDate(eDate);
-                    //请假类型
-                    leaveSheet.setLeaveType(leave_type);
-                    leaveSheet.setStatus(sp_status);
-                    //请假说明
-                    leaveSheet.setRemark(remark==null?"":remark);
-                    //请假时长和天数
-                    float time = Float.parseFloat(timeHours);
-                    if("hour".equals(leaveType)){
-                        leaveSheet.setTimeType(1);
-                        leaveSheet.setTimeHours(time/3600);
-                    }else{
-                        leaveSheet.setTimeType(0);
-                        leaveSheet.setTimeHours(time/3600);
-                        leaveSheet.setTimeDays(time/3600/24);
-                    }
-                    result.add(leaveSheet);
-                }
-            }
-        }else{
-            fail.add(wxCorpInfo.getCorpFullName());
-            System.err.println(wxCorpInfo.getCorpFullName()+"审批单查询失败");
-        }
-        return result;
-    }
-
-    //更新审核中的请假单以及查询某时间段的微信请假审批单号
+    //更新审核中的请假单以及查询某时间段的微信请假单
     @Override
     public List<LeaveSheet> wxLeaveNumber(String startTime,String endTime,List<WxCorpInfo> wxCorpInfos,List<LeaveSheet> approvalLeave) throws Exception {
         String url = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo?access_token=ACCESS_TOKEN";
         String detailUrl = "https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail?access_token=ACCESS_TOKEN";
-        //存储更新失败的公司名称
-        List<String> fail = new ArrayList<>();
         HttpHeaders headers = new HttpHeaders();
         RestTemplate restTemplate = new RestTemplate();
         ArrayList<LeaveSheet> result = new ArrayList<>();
@@ -1334,13 +1144,9 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         headers.setContentType(type);
         headers.add("Accept", MediaType.APPLICATION_JSON.toString());
         for (WxCorpInfo wxCorpInfo : wxCorpInfos) {
+            System.err.println("++++++++++++++++++++++++++++++正在同步更新:"+wxCorpInfo.getCorpName());
             //更新Access_token
             String accessToken = getCorpAccessToken(wxCorpInfo);
-//            if (StringUtils.isEmpty(accessToken)){
-//                System.out.println(wxCorpInfo.getCorpName()+"accessToken获取失败");
-//                fail.add(wxCorpInfo.getCorpName());
-//                continue;
-//            }
             url = url.replace("ACCESS_TOKEN", accessToken);
             //查询并更新审核中的审批单
             System.out.println("+++++++++++++++++++开始查询并更新审核中的审批单+++++++++++++++++++");
@@ -1411,17 +1217,192 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                 }
             }
             System.out.println("+++++++++++++++++++++开始同步昨天请假信息+++++++++++++++++++++");
-
-        }
-        if (fail.size() == 0){
-            System.err.println("全部同步成功");
-        }else{
-            System.err.println("总共"+fail.size()+"个公司同步失败");
-            System.err.print("同步失败的公司有:");
-            for (String s : fail) {
-                System.err.print(s+",");
+            //批量获取审批单号
+            int cursor = 0;
+            while (true){
+                ArrayList<HashMap> list = new ArrayList<>();
+                HashMap<String, String> record_type = new HashMap<>();
+                list.add(record_type);
+                record_type.put("key", "record_type");
+                record_type.put("value", "1");
+                JSONObject requestMap = new JSONObject();
+                requestMap.put("starttime", startTime);
+                requestMap.put("endtime", endTime);
+                requestMap.put("cursor", cursor);
+                requestMap.put("size", 1);
+                requestMap.put("filters", list);
+                HttpEntity<JSONObject> entity = new HttpEntity<>(requestMap, headers);
+                ResponseEntity<String> ResponseEntity = restTemplate.postForEntity(url, entity, String.class);
+                if (ResponseEntity.getStatusCode() == HttpStatus.OK) {
+                    String resp = ResponseEntity.getBody();
+                    JSONObject json = JSONObject.parseObject(resp);
+                    Object[] sp_no_lists = json.getJSONArray("sp_no_list").toArray();
+                    //查询每个审批号审批详情
+                    for (int i = 0; i < sp_no_lists.length; i++) {
+                        detailUrl = detailUrl.replace("ACCESS_TOKEN", accessToken);
+                        JSONObject detailMap = new JSONObject();
+                        detailMap.put("sp_no", sp_no_lists[i]);
+                        HttpEntity<JSONObject> detailEntity = new HttpEntity<>(detailMap, headers);
+                        ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(detailUrl, detailEntity, String.class);
+                        if(detailResponseEntity.getStatusCode() == HttpStatus.OK){
+                            //封装请假单数据
+                            String detailResp = detailResponseEntity.getBody();
+                            JSONObject infoJson = JSONObject.parseObject(detailResp).getJSONObject("info");
+                            //审核状态
+                            Integer sp_status = infoJson.getInteger("sp_status");
+                            switch (sp_status){
+                                //审批中
+                                case 1:
+                                    sp_status=1;
+                                    break;
+                                //已通过
+                                case 2:
+                                    sp_status=0;
+                                    break;
+                                //已驳回
+                                case 3:
+                                    sp_status=2;
+                                    break;
+                                //已撤销
+                                case 4:
+                                    sp_status=3;
+                                    break;
+                                //通过后撤销
+                                case 5:
+                                    sp_status=5;
+                                    break;
+                                //通过后撤销
+                                case 6:
+                                    sp_status=6;
+                                    break;
+                                //7-已删除
+                                case 7:
+                                    sp_status=7;
+                                    break;
+                                default:
+                                    sp_status=8;
+                            }
+                            //审批申请提交时间,Unix时间戳
+                            LocalDateTime applyTime = LocalDateTime.ofEpochSecond(Long.parseLong(infoJson.getString("apply_time")), 0, ZoneOffset.ofHours(8));
+                            //申请人姓名
+                            String applyer = infoJson.getString("applyer");
+                            String userId = JSONObject.parseObject(applyer).getString("userid");
+                            User user = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_real_userid", userId));
+                            String name = user==null?userId:user.getName();
+                            //审批人姓名
+                            String approverUserId = infoJson.getJSONArray("sp_record").getJSONObject(0)
+                                    .getJSONArray("details").getJSONObject(0)
+                                    .getJSONObject("approver").getString("userid");
+                            User approverUser = new User();
+                            if (approverUserId!=null&&approverUserId!=""){
+                                approverUser = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_real_userid", approverUserId));
+                            }
+                            String approverName = approverUser==null?approverUserId:approverUser.getName();
+                            JSONArray contents = infoJson.getJSONObject("apply_data")
+                                    .getJSONArray("contents");
+                            //请假类型
+                            JSONObject vacation = contents.getJSONObject(0)
+                                    .getJSONObject("value")
+                                    .getJSONObject("vacation");
+                            String text = vacation.getJSONObject("selector")
+                                    .getJSONArray("options").getJSONObject(0)
+                                    .getJSONArray("value").getJSONObject(0)
+                                    .getString("text");
+                            //请假事由
+                            String remark = contents.getJSONObject(1).getJSONObject("value").getString("text");
+                            Integer leave_type = 0;
+                            switch (text){
+                                case "事假":
+                                    leave_type = 0;
+                                    break;
+                                case "病假":
+                                    leave_type = 1;
+                                    break;
+                                case "年假":
+                                    leave_type = 2;
+                                    break;
+                                case "产假":
+                                    leave_type = 3;
+                                    break;
+                                case "婚假":
+                                    leave_type = 4;
+                                    break;
+                                case "丧假":
+                                    leave_type = 5;
+                                    break;
+                                case "调休假":
+                                    leave_type = 6;
+                                    break;
+                                case "陪产假":
+                                    leave_type = 7;
+                                    break;
+                                case "其他":
+                                    leave_type = 8;
+                                    break;
+                            }
+                            //请假开始时间
+                            JSONObject date_range = vacation.getJSONObject("attendance")
+                                    .getJSONObject("date_range");
+                            String startDate =date_range.getString("new_begin");
+                            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
+                            long startDateTemp = Long.valueOf(startDate);
+                            String startDateString = sdf.format(new Date(startDateTemp * 1000L));
+                            DateTimeFormatter startfmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                            LocalDate sDate = LocalDate.parse(startDateString, startfmt);
+                            //请假结束时间
+                            String endDate = date_range.getString("new_end");
+                            long endDatetemp = Long.valueOf(endDate);
+                            String endDateString = sdf.format(new Date(endDatetemp * 1000L));
+                            DateTimeFormatter endfmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                            LocalDate eDate = LocalDate.parse(endDateString, endfmt);
+                            //请假时长
+                            String timeHours = date_range.getString("new_duration");
+                            String leaveType = date_range.getString("type");
+                            LeaveSheet leaveSheet = new LeaveSheet();
+                            leaveSheet.setProcinstId(sp_no_lists[i].toString());
+                            leaveSheet.setIsFinalAudit(1);
+                            leaveSheet.setIndate(applyTime);
+                            leaveSheet.setOwnerName(name);
+                            leaveSheet.setOwnerId(user==null?"":user.getId());
+                            leaveSheet.setCompanyId(user.getCompanyId());
+                            leaveSheet.setTel(user.getPhone()==null?"":user.getPhone());
+                            //审批人信息
+                            leaveSheet.setAuditorName(approverName);
+                            leaveSheet.setAuditorId(approverUser==null?"":approverUser.getId());
+                            //请假日期
+                            leaveSheet.setStartDate(sDate);
+                            leaveSheet.setEndDate(eDate);
+                            //请假类型
+                            leaveSheet.setLeaveType(leave_type);
+                            leaveSheet.setStatus(sp_status);
+                            //请假说明
+                            leaveSheet.setRemark(remark==null?"":remark);
+                            //请假时长和天数
+                            float time = Float.parseFloat(timeHours);
+                            if("hour".equals(leaveType)){
+                                leaveSheet.setTimeType(1);
+                                leaveSheet.setTimeHours(time/3600);
+                            }else{
+                                leaveSheet.setTimeType(0);
+                                leaveSheet.setTimeHours(time/3600);
+                                leaveSheet.setTimeDays(time/3600/24);
+                            }
+                            result.add(leaveSheet);
+                        }
+                    }
+                    //判断是否需要多次拉取
+                    int nextCur = json.getIntValue("next_cursor");
+                    System.err.println(nextCur);
+                    if (nextCur==0){
+                        break;
+                    }else {
+                        cursor = nextCur;
+                    }
+                }else{
+                    System.err.println(wxCorpInfo.getCorpFullName()+"审批单查询失败");
+                    break;
+                }
             }
-            System.out.println();
         }
         return result;
     }

+ 5 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -316,10 +316,10 @@ public class TimingTask {
     }
 
     //每天1:00 同步昨天的微信请假信息
-    @Scheduled(cron = "0 0 1 ? * *")
-//    @Scheduled(cron = "0 59 13 ? * *")
+    //@Scheduled(cron = "0 0 1 ? * *")
+    @Scheduled(cron = "0 13 18 ? * *")
     public void synWxLeave() throws Exception {
-        if (isDev) return;
+        //if (isDev) return;
         System.out.println("+++++++++++++++++++微信请假同步开始+++++++++++++++++++");
         String startTime = Long.toString(System.currentTimeMillis()/1000L-86400);
         String endTime = Long.toString(System.currentTimeMillis()/1000L);
@@ -333,7 +333,8 @@ public class TimingTask {
         List<LeaveSheet> approvalLeave = leaveSheetMapper.selectApprovalList();
         //插入请假单并更新审核中的请假单
         List<WxCorpInfo> wxCorpInfos = wxCorpInfoMapper.selectList(new QueryWrapper<WxCorpInfo>().in("company_id",companyId));
-        List<LeaveSheet> leaveSheets = wxCorpInfoService.wxLeaveNumber(startTime,endTime, wxCorpInfos,approvalLeave);
+        //List<LeaveSheet> leaveSheets = wxCorpInfoService.wxLeaveNumber(startTime,endTime, wxCorpInfos,approvalLeave);
+        List<LeaveSheet> leaveSheets = wxCorpInfoService.wxLeaveNumber("1663337398","1665223685", wxCorpInfos,approvalLeave);
         for (LeaveSheet leaveSheet : leaveSheets) {
             leaveSheetMapper.insert(leaveSheet);
         }