Selaa lähdekoodia

集晨 请假查询/考勤组操作

CRK 10 kuukautta sitten
vanhempi
commit
53edd57c0c

+ 173 - 0
mjava-luyi/src/main/java/com/malk/luyi/controller/KSJCController.java

@@ -0,0 +1,173 @@
+package com.malk.luyi.controller;
+
+import cn.hutool.json.JSONObject;
+import com.alibaba.fastjson.JSON;
+import com.malk.delegate.McDelegate;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McR;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.utils.UtilMap;
+import com.malk.utils.UtilServlet;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.time.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+@Slf4j
+@RestController
+@RequestMapping()
+public class KSJCController {
+    @Autowired
+    private YDClient ydClient;
+
+    @Autowired
+    private DDClient dd;
+
+    @Autowired
+    private McDelegate mcDelegate;
+    @SneakyThrows
+    @PostMapping("/JCKQZ")//集尘根据员工id获取所在考勤组
+    McR insetTHXM(HttpServletRequest request) {
+        Map data = UtilServlet.getParamMap(request);
+        String FormInstanceId=data.get("FormInstanceId").toString();
+        String UserId=data.get("UserId").toString();
+
+        if (UserId!="" &&FormInstanceId!="" ){
+            Map rsp = dd.getusergroup(  UserId);
+            System.out.println("rsp:"+UserId+":"+FormInstanceId);
+            System.out.println("rsp:"+rsp);
+            if (rsp!=null ){
+                JSONObject jsonObject = new JSONObject(rsp);
+                String groupId = jsonObject.get("group_id").toString();
+                String name = jsonObject.get("name").toString();
+                String  FORMID="textField_lyo89dyq, textField_lyo89dyr";
+                //获取到考勤组名称和考勤组id后,写入到宜搭
+              ydClient.operateData(YDParam.builder()
+                        .appType("APP_X89Y00KKTG36B8JYGZVR")
+                        .systemToken("QIA66091HJPLRHM3AUFJLCN24CUP2VNMO41XLW4")
+                        .formInstanceId(String.valueOf(FormInstanceId))
+                        .updateFormDataJson(JSON.toJSONString(UtilMap.map(FORMID,name,groupId )))
+                        .build(), YDConf.FORM_OPERATION.update).toString();
+            }
+            log.info("rsp:"+rsp);
+            System.out.println("rsp:"+rsp);
+        }
+        return McR.success();
+    }
+
+    @SneakyThrows
+    @PostMapping("/JCpd")//集尘根据员工id判断今天能不能打卡
+    McR insetTHXM_TMER() {
+        //获取所有人员
+        List<Map> dataList = (List<Map>) ydClient.queryData(YDParam.builder()
+                .appType("APP_X89Y00KKTG36B8JYGZVR")
+                .systemToken("QIA66091HJPLRHM3AUFJLCN24CUP2VNMO41XLW4")
+                .formUuid("FORM-1F9CC98764D84B64AB1B6A04BEB8CA2BIPQ0")
+               // .searchFieldJson(JSON.toJSONString(UtilMap.map("serialNumberField_lt1i52jt",data.get("XMBH").toString())))
+                .build(), YDConf.FORM_QUERY.retrieve_search_form).getData();
+             //循环获得人员
+        for (Map formData : dataList) {
+             //人员-字段值
+            String FormInstanceId = String.valueOf(formData.get("formInstanceId") );//实例id
+            String if_pd = String.valueOf(UtilMap.getMap(formData, "formData").get("selectField_lyo6e0gi"));//是否能打卡
+            String Ehtid = String.valueOf(UtilMap.getMap(formData, "formData").get("textField_lyo8p27i"));//考勤人ID
+            String grup_id = String.valueOf(UtilMap.getMap(formData, "formData").get("textField_lyo89dyr"));//所在考勤组ID
+            Map rsp=new HashMap<>();//用来接反馈值
+            if  (if_pd.equals("否")){//如果为否,校验:1.昨天是否请假  2.昨天是否不用打卡
+                // 判断昨天是否请假
+                LocalDate yesterday = LocalDate.now().minusDays(1);
+                // 构造昨天7点00分的时间
+                LocalTime time = LocalTime.of(7, 0);
+                //将日期和时间结合
+                LocalDateTime yesterdaySevenPm = yesterday.atTime(time);
+                // 假设我们使用的是系统默认时区,这里为了演示明确转换到UTC,
+                // 但在计算时间戳时,如果不指定时区,默认会使用JVM的时区
+                ZonedDateTime zdt = yesterdaySevenPm.atZone(ZoneId.systemDefault());
+                // 转换为时间戳(毫秒)
+                long timestamp_up = zdt.toInstant().toEpochMilli();
+                  yesterday = LocalDate.now().minusDays(1);
+                  time = LocalTime.of(23, 0);
+                  yesterdaySevenPm = yesterday.atTime(time);
+                  zdt = yesterdaySevenPm.atZone(ZoneId.systemDefault());
+                long timestamp_dp = zdt.toInstant().toEpochMilli();
+                 rsp =  dd.getleavestatus(Ehtid,timestamp_up,timestamp_dp);//获得请假请框
+                JSONObject jsonObject = new JSONObject(rsp);
+                String leave_status = jsonObject.get("leave_status").toString();
+                if(!leave_status.equals("[]") && leave_status!=null){
+                    if_pd="是";
+                }
+             //判断昨天是否考勤组的休息日
+                rsp=dd.getgroupquery(Ehtid,grup_id);
+                jsonObject = new JSONObject(rsp);
+                  if (!jsonObject.get("work_day_list").toString().equals("[]") && jsonObject.get("work_day_list").toString()!=null){//如果是固定班次就判断昨天是不是休息日
+                      // 使用逗号分割字符串,得到元素字符串数组
+                      String[] elements = jsonObject.get("work_day_list").toString().split(",");
+                      LocalDate today = LocalDate.now();
+                      LocalDate yesterday_dak = today.minusDays(1);
+                      DayOfWeek dayOfWeekYesterday = yesterday_dak.getDayOfWeek();
+                      int nums=10 ;
+                      switch (dayOfWeekYesterday) {
+                          case SUNDAY  : nums= 0;break;
+                          case MONDAY : nums= 1;break;
+                          case TUESDAY : nums= 2;break;
+                          case WEDNESDAY: nums= 3;break;
+                          case THURSDAY  : nums=4;break;
+                          case FRIDAY  : nums= 5;break;
+                          case SATURDAY : nums= 6;break;
+                      };
+                      if (nums!=10) {
+                          if (elements[nums].equals("[0")|| elements[nums].equals("0") || elements[nums].equals("0]")) {
+                              if_pd = "是";
+                          }
+                      }
+
+
+                  }
+
+                  System.out.println("work_day_list:"+jsonObject.get("work_day_list").toString());
+            }
+
+            if (if_pd.equals("是")){
+                //如果能打卡,就把人员加入到考勤组
+                  rsp = dd.inset_hr_group("新增",Ehtid,grup_id);
+                JSONObject jsonObject = new JSONObject(rsp);
+
+            }
+            if (if_pd.equals("否")){
+                //如果不能打卡,就把人员踢出考勤组
+                 rsp = dd.inset_hr_group("删除",Ehtid,grup_id);
+            }
+         //   执行完加入,把校验状态改成 否
+            ydClient.operateData(YDParam.builder()
+                    .appType("APP_X89Y00KKTG36B8JYGZVR")
+                    .systemToken("QIA66091HJPLRHM3AUFJLCN24CUP2VNMO41XLW4")
+                    .formInstanceId(String.valueOf(FormInstanceId))
+                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("selectField_lyo6e0gi","否" )))
+                    .build(), YDConf.FORM_OPERATION.update).toString();
+        }
+        return McR.success();
+    }
+
+    @SneakyThrows
+    @PostMapping("/insetHR_kaoqin")//集尘根据员工id获取所在考勤组
+    McR insetHR_kaoqin(HttpServletRequest request) {
+        Map data = UtilServlet.getParamMap(request);
+        String Ehtid=data.get("Ehtid").toString();
+        String grup_id=data.get("grup_id").toString();
+     Map  rsp = dd.inset_hr_group("新增",Ehtid,grup_id);
+                JSONObject jsonObject = new JSONObject(rsp);
+        return McR.success();
+    }
+
+}

+ 32 - 0
mjava-luyi/src/main/java/com/malk/luyi/controller/KSJC_timer.java

@@ -0,0 +1,32 @@
+package com.malk.luyi.controller;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+@Slf4j
+@Configuration
+@EnableScheduling
+public class KSJC_timer {
+    @Autowired
+    private KSJCController legalEntityService;
+    /*集晨判断是否能打卡*/
+    //每天早晨7点05分同步数据
+  @Scheduled(cron = "0 5 7 * * ?")
+   // @Scheduled(fixedRate = 5000)
+    public void LegalEntityList(){
+        log.info("k");
+        try{
+           legalEntityService.insetTHXM_TMER();
+            System.out.println("集晨判断,同步完成");
+        }catch (Exception e){
+            //记录错误信息
+            e.printStackTrace();
+        }
+
+    }
+}

+ 4 - 0
mjava/pom.xml

@@ -21,6 +21,10 @@
 
     <dependencies>
 
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 1
mjava/src/main/java/com/malk/server/aliwork/YDConf.java

@@ -54,7 +54,8 @@ public class YDConf {
 
         retrieve_id,                // 单个ID查询 todo 若秘钥不匹配, 返回空, 添加报错说明
 
-        retrieve_search_process,            // 流程列表
+        retrieve_search_process, // 流程列表
+
         retrieve_search_form,               // 表单列表
 
         retrieve_search_process_id,         // 流程列表

+ 6 - 0
mjava/src/main/java/com/malk/service/dingtalk/DDClient.java

@@ -35,5 +35,11 @@ public interface DDClient {
 
 
     Map getusergroup(String UserId);//获取用户考勤组
+
+    Map inset_hr_group(String type,String UserId,String grupid);//把人员写入考勤组
+
+    Map getleavestatus(String userid_list,long start_time,long end_time);// 询指定企业下指定用户在指定时间段内每天的请假状态和请假时长信息。
+
+    Map getgroupquery(String op_user_id,String  group_id );//调用本接口,可获取考勤组名称、考勤组主负责人和考勤类型等信息。
 }
 

+ 68 - 0
mjava/src/main/java/com/malk/service/dingtalk/impl/DDImplClient.java

@@ -127,4 +127,72 @@ public class DDImplClient implements DDClient {
 
         return (Map) DDR.doPost("https://oapi.dingtalk.com/topapi/attendance/getusergroup", null, DDConf.initTokenParams(accessToken), UtilMap.map("userid", userid)).getResult();
     }
+
+    public  Map inset_hr_group(String type,String UserId,String grupid){
+        Map  vlsumap= new HashMap();
+        Map param = new HashMap();
+        param.put("appkey", "dingapqprcbwk5bvahc1");
+        param.put("appsecret", "V_YgI8ZYx3lSf_Fw3qNH6k-U9umKhxglpPrnPkdb73CVrXWFme_SwUCdQxR2poFi");
+        DDR r = (DDR) UtilHttp.doGet("https://oapi.dingtalk.com/gettoken", param, DDR.class);
+        log.info("响应token, {}", r.getAccessToken());
+        String accessToken = r.getAccessToken();
+        // token失效自动重置: DD重新调用会重置过期时间
+        UtilToken.put("invalid-token-dingtalk", accessToken, r.getExpiresIn() * 1000L);
+
+        Map param_post = new HashMap();
+
+        param_post.put("op_user_id","683135622237866009");//操作人userId。
+        param_post.put("group_id",grupid);//考勤组ID
+        param_post.put("schedule_flag",0);//从哪天开始排班。0:从今天开始排班1:从明天开始排班
+        if (type.equals("新增")){
+            Map param_post_upda = new HashMap();
+            String[] arr = {UserId};
+            param_post_upda.put("add_users",UserId);
+            param_post.put("update_param",param_post_upda);
+        }else  if (type.equals("删除")){
+            Map param_post_upda = new HashMap();
+            String[] arr = {UserId};
+            param_post_upda.put("remove_users",UserId);
+            param_post.put("update_param",param_post_upda);
+        }
+        System.out.println("param_post:"+param_post);
+
+        vlsumap= (Map) DDR.doPost("https://oapi.dingtalk.com/topapi/attendance/group/member/update", null, DDConf.initTokenParams(accessToken), param_post ).getResult();
+
+       return  vlsumap;
+    }
+
+    public Map getleavestatus(String userid_list,long start_time,long end_time){
+        Map param = new HashMap();
+        param.put("appkey", "dingapqprcbwk5bvahc1");
+        param.put("appsecret", "V_YgI8ZYx3lSf_Fw3qNH6k-U9umKhxglpPrnPkdb73CVrXWFme_SwUCdQxR2poFi");
+        DDR r = (DDR) UtilHttp.doGet("https://oapi.dingtalk.com/gettoken", param, DDR.class);
+        log.info("响应token, {}", r.getAccessToken());
+        String accessToken = r.getAccessToken();
+        // token失效自动重置: DD重新调用会重置过期时间
+        UtilToken.put("invalid-token-dingtalk", accessToken, r.getExpiresIn() * 1000L);
+        Map param_post = new HashMap();
+        param_post.put("userid_list",userid_list);//操作人userId。
+        param_post.put("start_time",start_time);//考勤组ID
+        param_post.put("end_time",end_time);//从哪天开始排班。0:从今天开始排班1:从明天开始排班
+        param_post.put("offset",0);//支持分页查询,与size参数同时设置时才生效,此参数代表偏移量,偏移量从0开始
+        param_post.put("size",10);//支持分页查询,与offset参数同时设置时才生效,此参数代表分页大小,最大20。
+        return  (Map) DDR.doPost("https://oapi.dingtalk.com/topapi/attendance/getleavestatus", null, DDConf.initTokenParams(accessToken), param_post ).getResult();
+    };
+
+   public Map getgroupquery(String op_user_id,String  group_id ){//考勤组部分信息如下图所示。调用本接口,可获取考勤组名称、考勤组主负责人和考勤类型等信息。
+       op_user_id="683135622237866009";
+       Map param = new HashMap();
+       param.put("appkey", "dingapqprcbwk5bvahc1");
+       param.put("appsecret", "V_YgI8ZYx3lSf_Fw3qNH6k-U9umKhxglpPrnPkdb73CVrXWFme_SwUCdQxR2poFi");
+       DDR r = (DDR) UtilHttp.doGet("https://oapi.dingtalk.com/gettoken", param, DDR.class);
+       log.info("响应token, {}", r.getAccessToken());
+       String accessToken = r.getAccessToken();
+       // token失效自动重置: DD重新调用会重置过期时间
+       UtilToken.put("invalid-token-dingtalk", accessToken, r.getExpiresIn() * 1000L);
+       Map param_post = new HashMap();
+       param_post.put("op_user_id",op_user_id);//操作人userId。
+       param_post.put("group_id",group_id);//考勤组ID
+       return  (Map) DDR.doPost("https://oapi.dingtalk.com/topapi/attendance/group/query", null, DDConf.initTokenParams(accessToken), param_post ).getResult();
+   };
 }