koul 1 год назад
Родитель
Сommit
e536bbe0f9

+ 7 - 0
dingtalk-sdk/src/test/java/com/usoftchina/dingtalk/sdk/test/AddrBookSdkTest.java

@@ -1,6 +1,7 @@
 package com.usoftchina.dingtalk.sdk.test;
 
 import com.alibaba.fastjson.JSON;
+import com.dingtalk.api.response.OapiUserGetResponse;
 import com.dingtalk.api.response.OapiUserListbypageResponse;
 import com.usoftchina.dingtalk.sdk.AddrBookSdk;
 import org.junit.Test;
@@ -27,4 +28,10 @@ public class AddrBookSdkTest extends BaseTest {
             userList.stream().filter(user -> "13537112306".equals(user.getMobile())).forEach(user -> System.out.println(JSON.toJSONString(user)));
         }
     }
+
+    @Test
+    public void getUser(){
+        OapiUserGetResponse uas = sdk.getUser("Uas", "2050415567758185");
+        System.err.println(uas.getUnionid());
+    }
 }

+ 30 - 4
dingtalk-sdk/src/test/java/com/usoftchina/dingtalk/sdk/test/OaSdkTest.java

@@ -27,10 +27,36 @@ public class OaSdkTest extends BaseTest {
 
     @Test
     public void getAlitripList() {
-        List<OapiAlitripBtripApplySearchResponse.OpenApplyRs> alitripList = sdk.getAlitripList("Uas", "2024-03-01 00:00:00", "2024-05-14 18:00:00", 1, 50);
+        List<OapiAlitripBtripApplySearchResponse.OpenApplyRs> alitripList = sdk.getAllAlitrip("Uas", "2024-05-01 00:00:00", "2024-06-25 00:00:00");
         if (!CollectionUtils.isEmpty(alitripList)) {
+            System.err.println(alitripList.size());
             for (OapiAlitripBtripApplySearchResponse.OpenApplyRs openApplyRs:alitripList) {
-                System.out.println(openApplyRs);
+                //String inDate = DateUtil.format(openApplyRs.getGmtCreate(),"yyyy-MM-dd HH:mm:ss");
+                Long rsId = openApplyRs.getId();
+                String statusDesc = openApplyRs.getStatusDesc()==null?"空":openApplyRs.getStatusDesc();
+                if (statusDesc.contains("已同意")){
+                    List<OapiAlitripBtripApplySearchResponse.OpenItineraryInfo> itineraryList = openApplyRs.getItineraryList();
+                    for (OapiAlitripBtripApplySearchResponse.OpenItineraryInfo openItineraryInfo:itineraryList) {
+                       // String startDate = DateUtil.format(openItineraryInfo.getDepDate(),"yyyy-MM-dd HH:mm:ss");
+                       // String endDate = DateUtil.format(openItineraryInfo.getArrDate(),"yyyy-MM-dd HH:mm:ss");
+                        String projectTitle = openItineraryInfo.getProjectTitle();
+                        String projectCode = openItineraryInfo.getProjectCode();
+                        String arrCity = openItineraryInfo.getArrCity();
+                        String depCity = openItineraryInfo.getDepCity();
+                        String itineraryId = openItineraryInfo.getItineraryId();
+                        String ddid=rsId.toString()+"#"+itineraryId;
+                        System.err.println(ddid);
+                        /*int count =queryForObject("select count(1) from FeePlease where fp_dingid='"+ddid+"'", Integer.class);
+                        if (count<=0) {
+                            int id = generateId("FEEPLEASE_SEQ");
+                            String code = generateCode("FeePlease!CCSQ!new", 2);
+                            jdbcTemplate.execute("insert into FeePlease (fp_id,fp_code,fp_kind,fp_v9,FP_PEOPLE2,fp_recordman,fp_recorddate,fp_statuscode,fp_status,fp_v3,fp_prestartdate,fp_preenddate,fp_n6,fp_dingid,fp_remark,fp_prjcode,fp_prjname,fp_depcity,fp_arrcity) " +
+                                    "values (" + id + ",'" + code + "','出差申请单','" + openApplyRs.getDeptName() + "','" + openApplyRs.getUserName() + "','" + openApplyRs.getUserName() + "',to_date('" + inDate + "','yyyy-MM-dd HH24:mi:ss'),'AUDITED','已审核','" + openApplyRs.getTripCause() + "',to_date('" + startDate + "','yyyy-MM-dd HH24:mi:ss'),to_date('" + endDate + "','yyyy-MM-dd HH24:mi:ss')," + openApplyRs.getTripDay() + ",'"+ddid+"','"+statusDesc+"','"+projectCode+"','"+projectTitle+"','"+depCity+"','"+arrCity+"')");
+                    *//*jdbcTemplate.execute("insert into FeePleaseDetail(fpd_id,fpd_fpid,fpd_code,fpd_class,fpd_detno,fpd_d5,fpd_d6,fpd_date1,fpd_date2) " +
+                            "values(FeePleaseDetail_seq.nextval,"+id+",'"+code+"','出差申请单',1,'"+projectCode+"','"+projectTitle+"',to_date('" + startDate + "','yyyy-MM-dd HH24:mi:ss'),to_date('" + endDate + "','yyyy-MM-dd HH24:mi:ss'))");*//*
+                        }*/
+                    }
+                }
             }
         }
     }
@@ -88,9 +114,9 @@ public class OaSdkTest extends BaseTest {
         List<QueryOrgTodoTasksResponseBody.QueryOrgTodoTasksResponseBodyTodoCards> todoCards = todo.getBody().getTodoCards();
         for (QueryOrgTodoTasksResponseBody.QueryOrgTodoTasksResponseBodyTodoCards todoCard:todoCards) {
             System.err.println(todoCard.taskId);
-            //if ("未处理流程".equals(todoCard.subject)){
+            if ("未处理流程".equals(todoCard.subject)){
                 sdk.deleteTodo("Uas","lFkVS5u2qgtZo41sRuiiTTAiEiE",todoCard.taskId);
-            //}
+            }
         }
     }
 

+ 55 - 1
uas-office-dingtalk/src/main/java/com/usoftchina/uas/office/dingtalk/service/UasOaService.java

@@ -1,15 +1,21 @@
 package com.usoftchina.uas.office.dingtalk.service;
 
+import com.aliyun.dingtalktodo_1_0.models.QueryOrgTodoTasksResponseBody;
 import com.dingtalk.api.response.OapiAlitripBtripApplySearchResponse;
 import com.dingtalk.api.response.OapiAttendanceGetleavestatusResponse;
 import com.dingtalk.api.response.OapiSmartworkHrmEmployeeListdimissionResponse;
+import com.dingtalk.api.response.OapiUserGetResponse;
+import com.usoftchina.dingtalk.sdk.AddrBookSdk;
 import com.usoftchina.dingtalk.sdk.OaSdk;
+import com.usoftchina.dingtalk.sdk.config.DingTalkProperties;
+import com.usoftchina.dingtalk.sdk.util.UrlUtils;
 import com.usoftchina.uas.office.dingtalk.core.DateUtil;
+import com.usoftchina.uas.office.dingtalk.manage.entity.DingTalkAgent;
+import com.usoftchina.uas.office.dingtalk.manage.service.DingTalkAgentService;
 import com.usoftchina.uas.office.service.AbstractService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.support.rowset.SqlRowSet;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -23,6 +29,12 @@ public class UasOaService extends AbstractService {
     private final Logger logger = LoggerFactory.getLogger(UasOaService.class);
     @Autowired
     private OaSdk oaSdk;
+    @Autowired
+    private AddrBookSdk addrBookSdk;
+    @Autowired
+    private DingTalkProperties properties;
+    @Autowired
+    private DingTalkAgentService agentService;
 
     public void saveOa(String agentCode,int id){
         logger.info("agentCode=="+agentCode);
@@ -174,4 +186,46 @@ public class UasOaService extends AbstractService {
         }
     }
 
+    public void sendJprocess(String agentCode,String url,String master,String title,String description) throws Exception {
+        DingTalkAgent agent = agentService.findByCode(agentCode);
+        //创建人
+        String creatorId="WQl6DqxOyZ4brwoQaiSyiSuwiEiE";
+        SqlRowSet sqlRowSet = jdbcTemplate.queryForRowSet("select data from configs where caller='sys' and code='sendJprocessCreator' ");
+        if (sqlRowSet.next()){
+            String data = sqlRowSet.getString("data");
+            if (data!=null&&!"".equals(data)){
+                SqlRowSet rowS = jdbcTemplate.queryForRowSet("select em_code,em_ding from employee where em_class<>'离职' and em_ding is not null and em_name='" + data + "'");
+                if (rowS.next()){
+                    OapiUserGetResponse user = addrBookSdk.getUser(agentCode, rowS.getString("em_ding"));
+                    creatorId = user.getUnionid();
+                }
+            }
+        }
+        //流程处理
+        SqlRowSet rs = jdbcTemplate.queryForRowSet("select em_code,em_ding from employee where em_class<>'离职' and em_ding is not null and nvl(em_issendding,0)<>0");
+        while (rs.next()){
+            OapiUserGetResponse user = addrBookSdk.getUser(agentCode, rs.getString("em_ding"));
+            String unionid = user.getUnionid();
+            //删除旧流程
+            List<QueryOrgTodoTasksResponseBody.QueryOrgTodoTasksResponseBodyTodoCards> allTodo = oaSdk.getAllTodo(agentCode, unionid, "0", false);
+            for (QueryOrgTodoTasksResponseBody.QueryOrgTodoTasksResponseBodyTodoCards todo:allTodo) {
+                if (title.equals(todo.subject)){
+                    oaSdk.deleteTodo(agentCode,unionid,todo.taskId);
+                }
+            }
+            //推送新流程
+            SqlRowSet rowSet = jdbcTemplate.queryForRowSet("SELECT ROW_NUMBER() OVER(ORDER BY JP_LAUNCHTIME ASC) RN , count(JP_ID) OVER(ORDER BY JP_NODEDEALMAN DESC) COUNTS, \n" +
+                    "TRUNC(SYSDATE-JP_LAUNCHTIME) PASSTIME,JP_LAUNCHERNAME,Jp_nodeid,TYPECODE,JP_NODEDEALMAN,JP_LAUNCHTIME,JP_NAME,CURRENTMASTER \n" +
+                    "FROM JPROCESSVIEW WHERE JP_NODEDEALMAN ='" + rs.getString("em_code") + "'  AND JP_STATUS = '待审批'");
+            if (rowSet.next()){
+                String appUrl = UrlUtils.generateAuthUrl(properties.getCorpId(),master, agentCode,agent.getOuterUrl(),url+"office/authorize", "uas/uasApproval/MOYING");
+                System.err.println(appUrl);
+                String pcUrl="";
+                //String pcUrl=url+"office/authorize?corpId="+properties.getCorpId()+"&agent="+agentCode+"&url=aHR0cDovLzExMy4xMDYuNzIuMjQ1OjgwOTkvRVJQL3Vhcy91YXNBcHByb3ZhbC9NT1lJTkcv&master="+master;
+                oaSdk.createTodo(agentCode,unionid,creatorId,appUrl,pcUrl,title,description,40,"1",false);
+
+            }
+        }
+    }
+
 }

+ 45 - 0
uas-office-dingtalk/src/main/java/com/usoftchina/uas/office/dingtalk/task/DingOaTask.java

@@ -0,0 +1,45 @@
+package com.usoftchina.uas.office.dingtalk.task;
+
+import com.usoftchina.uas.office.dingtalk.service.UasEmployeeService;
+import com.usoftchina.uas.office.dingtalk.service.UasOaService;
+import com.usoftchina.uas.office.entity.DataCenter;
+import com.usoftchina.uas.office.jdbc.DataSourceHolder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author yingp
+ * @date 2020/5/14
+ */
+@Component
+public class DingOaTask {
+
+    @Autowired
+    private UasOaService uasOaService;
+
+    private final Logger logger = LoggerFactory.getLogger(DingOaTask.class);
+
+    /**
+     * 推送流程审批
+     */
+    @Scheduled(cron = "* * 0/1 * * ? ")
+    public void clearInvalid() {
+        DataCenter dataCenter = DataCenter.INSTANCE;
+        if (null != dataCenter.getUsername() && null != dataCenter.getPassword() && null != dataCenter.getUrl()) {
+            try {
+                DataSourceHolder.set(dataCenter);
+                logger.debug("dataCenter.getOuterUrl():"+dataCenter.getOuterUrl());
+                logger.debug("dataCenter.username():"+dataCenter.username());
+                uasOaService.sendJprocess("Uas",dataCenter.getOuterUrl(),dataCenter.username(),"未处理的流程","有未处理的流程需要处理");
+            }catch (Exception e){
+                logger.debug("流程推送异常:"+e.getMessage());
+                e.printStackTrace();
+            } finally {
+                DataSourceHolder.clear();
+            }
+        }
+    }
+}