| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963 |
- package com.malk.pro.zyjn.service.impl;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.aliyun.dingtalkyida_1_0.models.SearchFormDatasResponse;
- import com.aliyun.dingtalkyida_1_0.models.UpdateFormDataResponse;
- import com.aliyun.tea.TeaException;
- import com.aliyun.teautil.models.RuntimeOptions;
- import com.dingtalk.api.DefaultDingTalkClient;
- import com.dingtalk.api.DingTalkClient;
- import com.dingtalk.api.request.OapiGettokenRequest;
- import com.dingtalk.api.request.OapiUserListidRequest;
- import com.dingtalk.api.request.OapiV2DepartmentListsubidRequest;
- import com.dingtalk.api.request.OapiV2UserGetRequest;
- import com.dingtalk.api.response.OapiGettokenResponse;
- import com.dingtalk.api.response.OapiUserListidResponse;
- import com.dingtalk.api.response.OapiV2DepartmentListsubidResponse;
- import com.dingtalk.api.response.OapiV2UserGetResponse;
- import com.malk.pro.zyjn.service.TongbuService;
- import com.malk.server.aliwork.YDConf;
- import com.malk.server.aliwork.YDParam;
- import com.malk.server.common.McException;
- import com.malk.server.common.McR;
- import com.malk.server.dingtalk.DDConf;
- import com.malk.server.dingtalk.DDR_New;
- import com.malk.service.aliwork.YDClient;
- import com.malk.service.dingtalk.DDClient;
- import com.malk.service.dingtalk.DDClient_Contacts;
- import com.malk.service.dingtalk.DDClient_Schedule;
- import com.malk.utils.UtilHttp;
- import com.malk.utils.UtilMap;
- import com.taobao.api.ApiException;
- import lombok.extern.slf4j.Slf4j;
- import okhttp3.*;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.logging.log4j.util.Strings;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.time.Instant;
- import java.time.format.DateTimeFormatter;
- import java.util.*;
- import java.util.stream.Collectors;
- import static com.malk.utils.UtilMc.distinctByKey;
- @Service
- @Slf4j
- public class TongbuServiceImpl implements TongbuService {
- @Autowired
- private DDClient ddClient;
- @Autowired
- private YDClient ydClient;
- @Autowired
- private DDClient_Contacts ddClient_contacts;
- public static com.aliyun.dingtalkcalendar_1_0.Client createClient() throws Exception {
- com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
- config.protocol = "https";
- config.regionId = "central";
- return new com.aliyun.dingtalkcalendar_1_0.Client(config);
- }
- //宜搭接口调用
- public static com.aliyun.dingtalkyida_1_0.Client createClient2() throws Exception {
- com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
- config.protocol = "https";
- config.regionId = "central";
- return new com.aliyun.dingtalkyida_1_0.Client(config);
- }
- //APPKEY
- private static String APPKEY = "dingn2nkwrrosmyjk9o2";
- //APPSECRET
- private static String APPSECRET = "t26NJ2TIHeQZAG17QPJAPoVgrVwPUZCLH0JLO955_c0BoAhdaAS5eNf9Fc6KAepo";
- //AgenthId:3191553633
- //获取钉钉access_token的方法
- public String getAccessToken() {
- String accessToken = null;
- DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
- OapiGettokenRequest request = new OapiGettokenRequest();
- request.setAppkey(APPKEY);
- request.setAppsecret(APPSECRET);
- request.setHttpMethod("GET");
- try {
- OapiGettokenResponse response = client.execute(request);
- accessToken = response.getAccessToken();
- System.out.println("职业技能-AccessToken:" + accessToken);
- } catch (ApiException e) {
- e.printStackTrace();
- }
- return accessToken;
- }
- /**根据userId获取unionId*/
- public String getUnionId(String userId){
- String unionid = null;
- try {
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
- OapiV2UserGetRequest req = new OapiV2UserGetRequest();
- req.setUserid(userId);
- OapiV2UserGetResponse rsp = client.execute(req, ddClient.getAccessToken());
- // System.out.println(rsp.getBody());
- String body = rsp.getBody();
- //通过fastjson工具转换成json对象,逐层解析
- JSONObject jsonObject = JSON.parseObject(body);
- if (jsonObject != null){
- JSONObject result = jsonObject.getJSONObject("result");
- unionid = result.getString("unionid");
- System.out.println("根据钉钉userId获取的unionid:" + unionid);
- }
- } catch (ApiException e) {
- e.printStackTrace();
- }
- return unionid;
- }
- //获取当前部门下一层级的部门id列表
- public JSONArray getBumenIdList(long bumenid){
- JSONArray dept_id_Array = null;
- try {
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsubid");
- OapiV2DepartmentListsubidRequest req = new OapiV2DepartmentListsubidRequest();
- req.setDeptId(bumenid);
- OapiV2DepartmentListsubidResponse rsp = client.execute(req, getAccessToken());
- System.out.println("钉钉【获取子部门id列表】接口返回信息:" + rsp.getBody());
- JSONObject dingdingBumenIdObj = JSON.parseObject(rsp.getBody());
- long errcode = dingdingBumenIdObj.getLong("errcode");
- System.out.println("接口返回状态码:" + errcode);
- if (errcode == 0){
- JSONObject resultObj = dingdingBumenIdObj.getJSONObject("result");
- System.out.println("返回信息result:" + resultObj);
- dept_id_Array = resultObj.getJSONArray("dept_id_list");
- }
- } catch (ApiException e) {
- e.printStackTrace();
- }
- System.out.println("封装【当前部门下一层级的部门id列表】jsonArray:" + dept_id_Array);
- return dept_id_Array;
- }
- //根据部门id获取部门下的人员userId列表
- public JSONArray getUserIdList(long bumenid){
- JSONArray userid_list = null;
- try {
- DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid");
- OapiUserListidRequest req = new OapiUserListidRequest();
- req.setDeptId(bumenid);
- OapiUserListidResponse rsp = client.execute(req, getAccessToken());
- System.out.println("钉钉【获取部门用户userId列表】接口返回信息:" + rsp.getBody());
- JSONObject dingdingUserIdObj = JSON.parseObject(rsp.getBody());
- long errcode = dingdingUserIdObj.getLong("errcode");
- System.out.println("接口返回状态码:" + errcode);
- if (errcode == 0){
- JSONObject resultObj = dingdingUserIdObj.getJSONObject("result");
- System.out.println("返回信息result:" + resultObj);
- userid_list = resultObj.getJSONArray("userid_list");
- }
- } catch (ApiException e) {
- e.printStackTrace();
- }
- System.out.println("封装【当前部门用户userId列表】jsonArray:" + userid_list);
- return userid_list;
- }
- //根据勾选部门名称获取宜搭表单数据
- public JSONArray getYidaDeptName(String bumenmingcheng){
- //宜搭表单判断查询条件
- Map map1 = new HashMap();
- //字段编号
- map1.put("key", "textField_m99cq8lt");
- //同步类型
- map1.put("value", bumenmingcheng);
- //控件类型
- map1.put("type", "TEXT");
- //逻辑判断符
- map1.put("operator", "eq");
- //控件名称
- map1.put("componentName", "TextField");
- List list11 = new ArrayList();
- list11.add(map1);
- String listJson = JSON.toJSONString(list11);
- System.out.println("查询条件listJson:" + listJson);
- JSONObject jsonObject = null;
- int size = 100;
- int page = 1;
- //查询表单实例数据
- try {
- com.aliyun.dingtalkyida_1_0.Client client = createClient2();
- com.aliyun.dingtalkyida_1_0.models.SearchFormDatasHeaders searchFormDatasHeaders = new com.aliyun.dingtalkyida_1_0.models.SearchFormDatasHeaders();
- searchFormDatasHeaders.xAcsDingtalkAccessToken = getAccessToken();
- com.aliyun.dingtalkyida_1_0.models.SearchFormDatasRequest searchFormDatasRequest = new com.aliyun.dingtalkyida_1_0.models.SearchFormDatasRequest()
- .setSystemToken("U0E66VB1J86UR5RKDPXQTA7WM66K3896KHW8MS5")
- .setSearchFieldJson(listJson)
- .setCurrentPage(page)
- .setPageSize(size)
- .setFormUuid("FORM-458D5FBCB956415081E7725CA5473ABB0ZR2")
- .setUserId("yida_pub_account")
- .setAppType("APP_E0BKS4I6U44824QM1KE5");
- SearchFormDatasResponse searchFormDatasResponse = client.searchFormDatasWithOptions(searchFormDatasRequest, searchFormDatasHeaders, new RuntimeOptions());
- // System.out.println(JSON.toJSONString(searchFormDatasResponse.getBody()));
- String s = JSON.toJSONString(searchFormDatasResponse.getBody());
- jsonObject = JSON.parseObject(s);
- System.out.println("查询【部门档案】接口object对象:" + jsonObject);
- } catch (TeaException err) {
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
- // err 中含有 code 和 message 属性,可帮助开发定位问题
- }
- } catch (Exception _err) {
- TeaException err = new TeaException(_err.getMessage(), _err);
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
- // err 中含有 code 和 message 属性,可帮助开发定位问题
- }
- }
- List listAll = new ArrayList();
- try {
- JSONArray data = jsonObject.getJSONArray("data");
- System.out.println("返回的宜搭data:" + data);
- if (!data.isEmpty()) {
- JSONObject formData = data.getJSONObject(0).getJSONObject("formData");
- String textField_m99cq8lt = formData.getString("textField_m99cq8lt");
- System.out.println("部门名称:" + textField_m99cq8lt);
- String kezhangUserId = "";
- JSONArray jsonArray = formData.getJSONArray("employeeField_m99cq8lu_id");
- if (jsonArray != null && !jsonArray.isEmpty()){
- kezhangUserId = jsonArray.getString(0);
- System.out.println("科长userId:" + kezhangUserId);
- }
- String fukezhangUserId = "";
- JSONArray jsonArray1 = formData.getJSONArray("employeeField_m9l4bvrr_id");
- if (jsonArray1 != null && !jsonArray1.isEmpty()){
- fukezhangUserId = jsonArray1.getString(0);
- System.out.println("副科长userId:" + fukezhangUserId);
- }
- Map map = new HashMap<>();
- map.put("bumenmingcheng",textField_m99cq8lt);
- map.put("kezhangUserId",kezhangUserId);
- map.put("fukezhangUserId",fukezhangUserId);
- listAll.add(map);
- }
- }catch (Exception e){
- e.printStackTrace();
- }
- JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(listAll));
- System.out.println("封装【部门档案】jsonArray:" + jsonArray);
- return jsonArray;
- }
- //宜搭创建会议申请后同步创建钉钉日程
- /**
- * @param data 宜搭会议申请表单数据
- * @param formInstId 宜搭会议申请表单实例ID
- * */
- @Override
- public McR createRicheng(String data, String formInstId) {
- log.info("宜搭传参【会议申请】全部表单数据:" + data);
- log.info("数据实例id:" + formInstId);
- log.info("传参解析中......");
- JSONObject jsonObject = new JSONObject();
- if (Strings.isNotBlank(data)){
- jsonObject = JSON.parseObject(data);
- System.out.println("表单数据解析:" + jsonObject);
- }else {
- Map formData = ydClient.queryData(YDParam.builder()
- .formInstanceId(formInstId)
- .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- jsonObject = JSON.parseObject(JSON.toJSONString(formData));
- }
- //时间格式一:定义时间格式
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- //时间格式二:使用ISO_8601格式化器来格式化Instant对象
- DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT;
- //宜搭数据详情链接
- String yidaURL = "会议申请记录:" + "https://so09k2.aliwork.com/APP_E0BKS4I6U44824QM1KE5/processDetail?formUuid=FORM-8039B0A8CD7C48E8B7B1D5FF56AD3EF0VVHP&procInsId="+ formInstId +"&navConfig.layout=1180";
- System.out.println("宜搭数据详情链接:" + yidaURL);
- //汇总所有参会人员
- List canhuirenyuanList = new ArrayList<>();
- /**宜搭表单字段*/
- //创建人userId
- String userId = jsonObject.getString("textField_m54zg5b0");
- System.out.println("创建人userId:" + userId);
- /**根据创建人userId获取unionId*/
- String chuangjianrenUnionId = getUnionId(userId);
- //会议主题
- String huiyizhuti = jsonObject.getString("textField_m523ok9w");
- System.out.println("会议主题:" + huiyizhuti);
- //------------------------------------⬇第二版新增⬇-----------------------------------------------
- //发布部门类型
- String fabubumenleixing = jsonObject.getString("radioField_m9getzvn");
- System.out.println("发布部门类型:" + fabubumenleixing);
- /*if (fabubumenleixing.equals("组织内部门")){
- //获取发布部门id
- long fabubumenId = jsonObject.getJSONArray("departmentSelectField_m99jf2e4").getLong(0);
- System.out.println("发布部门ID:" + fabubumenId);
- *//**根据发布部门获取当前部门及下级所有部门的人员列表*//*
- List bumenIdList = new ArrayList();
- bumenIdList.add(fabubumenId);
- *//**调用获取当前部门的下一层级部门id列表*//*
- log.info("获取当前部门的下一层级部门id列表中......");
- JSONArray nextBumenIdList = getBumenIdList(fabubumenId);
- if (nextBumenIdList != null && !nextBumenIdList.isEmpty()){
- System.out.println("【1】当前部门有下级部门,开始循环获取下一层级部门===");
- for (int i = 0; i < nextBumenIdList.size(); i++) {
- long deptId = nextBumenIdList.getLong(i);
- System.out.println("部门ID:" + deptId);
- bumenIdList.add(deptId);
- JSONArray nextBumenIdList1 = getBumenIdList(deptId);
- if (nextBumenIdList1 != null && !nextBumenIdList1.isEmpty()){
- System.out.println("【2】当前部门有下级部门,开始循环获取下一层级部门===");
- for (int i1 = 0; i1 < nextBumenIdList1.size(); i1++) {
- long deptId1 = nextBumenIdList1.getLong(i1);
- System.out.println("部门ID:" + deptId1);
- bumenIdList.add(deptId);
- }
- }
- }
- }
- System.out.println("部门id汇总List:" + bumenIdList);
- JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(bumenIdList));
- System.out.println("封装【部门id汇总列表】jsonArray:" + jsonArray);
- *//**调用获取每个部门id下的人员userId列表*//*
- log.info("获取每个部门id下的人员userId列表中......");
- for (int i = 0; i < jsonArray.size(); i++) {
- long bmid = jsonArray.getLong(i);
- System.out.println("循环当前部门id:" + bmid);
- JSONArray userIdList = getUserIdList(bmid);
- if (userIdList != null && !userIdList.isEmpty()){
- System.out.println("当前部门id中存在人员userIdList:" + userIdList);
- for (int j = 0; j < userIdList.size(); j++) {
- String renyuanId = userIdList.getString(j);
- System.out.println("循环当前的人员Id:" + renyuanId);
- *//**根据参会人员userId获取unionId*//*
- String canhuirenyuanUnionId = getUnionId(renyuanId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- }
- }*/
- //参会部门勾选项
- JSONArray checkboxField_m99d3k6z = jsonObject.getJSONArray("checkboxField_m99d3k6z");
- System.out.println("参会部门多选:" + checkboxField_m99d3k6z);
- if (checkboxField_m99d3k6z != null && !checkboxField_m99d3k6z.isEmpty()){
- for (int x = 0; x < checkboxField_m99d3k6z.size(); x++) {
- String canhuibumen = checkboxField_m99d3k6z.getString(x);
- System.out.println("循环当前参会部门勾选项:" + canhuibumen);
- /**获取维护表的该部门中的「科长」「副科长」userId*/
- JSONArray yidaDeptName = getYidaDeptName(canhuibumen);
- if (yidaDeptName != null && !yidaDeptName.isEmpty()){
- JSONObject yidaObj = yidaDeptName.getJSONObject(0);
- String kezhangUserId = yidaObj.getString("kezhangUserId");
- System.out.println("科长userId:" + kezhangUserId);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId1 = getUnionId(kezhangUserId);
- if (canhuirenyuanUnionId1 != null){
- Map canhuirenyuanMap1 = new HashMap<>();
- canhuirenyuanMap1.put("id", canhuirenyuanUnionId1);
- canhuirenyuanMap1.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap1);
- }
- String fukezhangUserId = yidaObj.getString("fukezhangUserId");
- System.out.println("副科长userId:" + fukezhangUserId);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId2 = getUnionId(fukezhangUserId);
- if (canhuirenyuanUnionId2 != null){
- Map canhuirenyuanMap2 = new HashMap<>();
- canhuirenyuanMap2.put("id", canhuirenyuanUnionId2);
- canhuirenyuanMap2.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap2);
- }
- }
- if (canhuibumen.equals("信息技术科")){
- //获取相应人员组件里面的人员id
- JSONArray canhuirenyuanArray = jsonObject.getJSONArray("employeeField_m99dcmr0");
- System.out.println("信息技术科参会人员(多选):" + canhuirenyuanArray);
- if (canhuirenyuanArray != null && !canhuirenyuanArray.isEmpty()) {
- for (int y = 0; y < canhuirenyuanArray.size(); y++) {
- String canhuirenyuanUserId = canhuirenyuanArray.getString(y);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId = getUnionId(canhuirenyuanUserId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- }else if (canhuibumen.equals("研发管理科")){
- //获取相应人员组件里面的人员id
- JSONArray canhuirenyuanArray = jsonObject.getJSONArray("employeeField_m99dcmr1");
- System.out.println("研发管理科参会人员(多选):" + canhuirenyuanArray);
- if (canhuirenyuanArray != null && !canhuirenyuanArray.isEmpty()) {
- for (int y = 0; y < canhuirenyuanArray.size(); y++) {
- String canhuirenyuanUserId = canhuirenyuanArray.getString(y);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId = getUnionId(canhuirenyuanUserId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- }else if (canhuibumen.equals("竞赛管理科")){
- //获取相应人员组件里面的人员id
- JSONArray canhuirenyuanArray = jsonObject.getJSONArray("employeeField_m99dcmr4");
- System.out.println("竞赛管理科参会人员(多选):" + canhuirenyuanArray);
- if (canhuirenyuanArray != null && !canhuirenyuanArray.isEmpty()) {
- for (int y = 0; y < canhuirenyuanArray.size(); y++) {
- String canhuirenyuanUserId = canhuirenyuanArray.getString(y);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId = getUnionId(canhuirenyuanUserId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- }else if (canhuibumen.equals("综合办公室")){
- //获取相应人员组件里面的人员id
- JSONArray canhuirenyuanArray = jsonObject.getJSONArray("employeeField_m99dcmr5");
- System.out.println("综合办公室参会人员(多选):" + canhuirenyuanArray);
- if (canhuirenyuanArray != null && !canhuirenyuanArray.isEmpty()) {
- for (int y = 0; y < canhuirenyuanArray.size(); y++) {
- String canhuirenyuanUserId = canhuirenyuanArray.getString(y);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId = getUnionId(canhuirenyuanUserId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- }else if (canhuibumen.equals("考务管理科")){
- //获取相应人员组件里面的人员id
- JSONArray canhuirenyuanArray = jsonObject.getJSONArray("employeeField_m99dcmr6");
- System.out.println("考务管理科参会人员(多选):" + canhuirenyuanArray);
- if (canhuirenyuanArray != null && !canhuirenyuanArray.isEmpty()) {
- for (int y = 0; y < canhuirenyuanArray.size(); y++) {
- String canhuirenyuanUserId = canhuirenyuanArray.getString(y);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId = getUnionId(canhuirenyuanUserId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- }else if (canhuibumen.equals("财务科")){
- //获取相应人员组件里面的人员id
- JSONArray canhuirenyuanArray = jsonObject.getJSONArray("employeeField_m99dcmr2");
- System.out.println("财务科参会人员(多选):" + canhuirenyuanArray);
- if (canhuirenyuanArray != null && !canhuirenyuanArray.isEmpty()) {
- for (int y = 0; y < canhuirenyuanArray.size(); y++) {
- String canhuirenyuanUserId = canhuirenyuanArray.getString(y);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId = getUnionId(canhuirenyuanUserId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- }else if (canhuibumen.equals("质量督导科")){
- //获取相应人员组件里面的人员id
- JSONArray canhuirenyuanArray = jsonObject.getJSONArray("employeeField_m99dcmr7");
- System.out.println("质量督导科参会人员(多选):" + canhuirenyuanArray);
- if (canhuirenyuanArray != null && !canhuirenyuanArray.isEmpty()) {
- for (int y = 0; y < canhuirenyuanArray.size(); y++) {
- String canhuirenyuanUserId = canhuirenyuanArray.getString(y);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId = getUnionId(canhuirenyuanUserId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- }else if (canhuibumen.equals("题库管理科")){
- //获取相应人员组件里面的人员id
- JSONArray canhuirenyuanArray = jsonObject.getJSONArray("employeeField_m99dcmr8");
- System.out.println("题库管理科参会人员(多选):" + canhuirenyuanArray);
- if (canhuirenyuanArray != null && !canhuirenyuanArray.isEmpty()) {
- for (int y = 0; y < canhuirenyuanArray.size(); y++) {
- String canhuirenyuanUserId = canhuirenyuanArray.getString(y);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId = getUnionId(canhuirenyuanUserId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- } else if (canhuibumen.equals("系统实施")){
- //获取相应人员组件里面的人员id
- JSONArray canhuirenyuanArray = jsonObject.getJSONArray("employeeField_m9l7c095");
- System.out.println("系统实施参会人员(多选):" + canhuirenyuanArray);
- if (canhuirenyuanArray != null && !canhuirenyuanArray.isEmpty()) {
- for (int y = 0; y < canhuirenyuanArray.size(); y++) {
- String canhuirenyuanUserId = canhuirenyuanArray.getString(y);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId = getUnionId(canhuirenyuanUserId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- }
- }
- }
- //------------------------------------⬆第二版新增⬆-----------------------------------------------
- JSONArray timeArray = jsonObject.getJSONArray("cascadeDateField_m523oka0");
- //会议开始时间
- long huiyikaishishijian = timeArray.getLong(0);
- Date startDate = new Date(huiyikaishishijian);
- String startTime = sdf.format(startDate);
- System.out.println("格式化后的开始时间(正常格式):" + startTime);
- Instant instantStart = Instant.ofEpochMilli(huiyikaishishijian);
- String isoStartDateTime = formatter.format(instantStart);
- System.out.println("会议开始时间(ISO-8601 格式的时间):" + isoStartDateTime);
- //会议结束时间
- long huiyijieshushijian = timeArray.getLong(1);
- Date endDate = new Date(huiyijieshushijian);
- String endTime = sdf.format(endDate);
- System.out.println("格式化后的开始时间(正常格式):" + endTime);
- Instant instantEnd = Instant.ofEpochMilli(huiyijieshushijian);
- String isoEndDateTime = formatter.format(instantEnd);
- System.out.println("会议结束时间(ISO-8601 格式的时间):" + isoEndDateTime);
- //会议地点类型
- String huiyididianType = jsonObject.getString("radioField_m98fljlv");
- System.out.println("会议地点类型:" + huiyididianType);
- //开会地址
- String kaihuidizhi = "";
- if (huiyididianType.equals("中心会议室")){
- kaihuidizhi = jsonObject.getString("selectField_m98fljlp");
- }else if (huiyididianType.equals("中心外部")){
- kaihuidizhi = jsonObject.getString("textField_m98fljlw");
- }
- System.out.println("开会地址:" + kaihuidizhi);
- //参会人员(多选)
- JSONArray canhuirenyuanArray = jsonObject.getJSONArray("employeeField_m9atzdf9");
- System.out.println("参会人员(多选):" + canhuirenyuanArray);
- if (canhuirenyuanArray != null && !canhuirenyuanArray.isEmpty()){
- for (int i = 0; i < canhuirenyuanArray.size(); i++) {
- String canhuirenyuanUserId = canhuirenyuanArray.getString(i);
- /**根据参会人员userId获取unionId*/
- String canhuirenyuanUnionId = getUnionId(canhuirenyuanUserId);
- Map canhuirenyuanMap = new HashMap<>();
- canhuirenyuanMap.put("id", canhuirenyuanUnionId);
- canhuirenyuanMap.put("isOptional", true);
- canhuirenyuanList.add(canhuirenyuanMap);
- }
- }
- /**创建钉钉日程*/
- Map startMap = new HashMap<>();
- startMap.put("dateTime", isoStartDateTime);//格式为ISO-8601的date-time格式
- startMap.put("timeZone", "Asia/Shanghai");//所属时区,TZ database name格式
- Map endMap = new HashMap<>();
- endMap.put("dateTime", isoEndDateTime);//格式为ISO-8601的date-time格式
- endMap.put("timeZone", "Asia/Shanghai");//所属时区,TZ database name格式
- Map locationMap = new HashMap<>();
- locationMap.put("displayName", kaihuidizhi);
- Map mapAll = new HashMap<>();
- mapAll.put("summary", huiyizhuti);//会议主题
- mapAll.put("description", yidaURL);//会议描述,传入宜搭数据详情的URL
- mapAll.put("isAllDay", false);//是否为全天日程
- mapAll.put("start", startMap);//开始时间
- mapAll.put("end", endMap);//结束时间
- mapAll.put("attendees", canhuirenyuanList);//参会人员
- mapAll.put("location", locationMap);//日程地点
- String jsonString = JSON.toJSONString(mapAll);
- System.out.println("封装密钥参数:" + jsonString);
- String richengID = null;
- try {
- OkHttpClient client = new OkHttpClient().newBuilder()
- .build();
- MediaType mediaType = MediaType.parse("application/json");
- RequestBody body = RequestBody.create(mediaType, jsonString);
- Request request = new Request.Builder()
- .url("https://api.dingtalk.com/v1.0/calendar/users/"+ chuangjianrenUnionId +"/calendars/primary/events")
- .method("POST", body)
- .addHeader("x-acs-dingtalk-access-token", getAccessToken())
- .addHeader("Content-Type", "application/json")
- .build();
- Response response = client.newCall(request).execute();
- String bodyString = response.body().string();
- JSONObject JsonBody = JSON.parseObject(bodyString);
- System.out.println("返回体body:" + JsonBody);
- richengID = JsonBody.getString("id");
- System.out.println("创建钉钉日程接口返回的日程ID:" + richengID);
- } catch (IOException e) {
- e.printStackTrace();
- }
- if (richengID != null){
- /**将日程ID回写至宜搭表单*/
- //根据实例id修改宜搭表单数据
- Map mapData = new HashMap<>();
- mapData.put("textField_m54zg5b1", richengID);
- // prd 25.06.26 同步预约会议室, 于会议室水牌显示日程
- String roomId = jsonObject.getString("textField_mccrafms");
- if (StringUtils.isNoneBlank(roomId)) {
- try {
- //todo 2026/05/29 base包预定会议室接口 把 Stream 对象直接包装进了 new Object[]{},Stream 是惰性求值的中间对象,不会自动执行。会变成类似ReferencePipeline$3@7912的未执行完的 Stream 实例,导致报错The value of parameter meetingRoomsToAdd is not array.
- // ddClient_schedule.bookMeetingRoom(getAccessToken(), userId, richengID, Arrays.asList(roomId));
- String unionId = String.valueOf(ddClient_contacts.getUserInfoById(getAccessToken(), userId).get("unionid"));
- Map body = UtilMap.map("meetingRoomsToAdd",
- Arrays.asList(roomId).stream().map(item -> UtilMap.map("roomId", item))
- .collect(Collectors.toList())
- );
- DDR_New.doPost("https://api.dingtalk.com/v1.0/calendar/users/" + unionId + "/calendars/primary/events/" + richengID + "/meetingRooms", DDConf.initTokenHeader(getAccessToken()), (Map)null, body);
- } catch (McException e) {
- mapData.put("textareaField_mccs33fz", e.getMessage());
- e.printStackTrace();
- }
- } else {
- mapData.put("textareaField_mccs33fz", "会议室 roomId 为空, 取消创建");
- }
- String mapAllString = JSON.toJSONString(mapData);
- System.out.println("封装修改字段:" + mapAllString);
- //更新子表控件数据【全量更新】
- try {
- com.aliyun.dingtalkyida_1_0.Client client = createClient2();
- com.aliyun.dingtalkyida_1_0.models.UpdateFormDataHeaders updateFormDataHeaders = new com.aliyun.dingtalkyida_1_0.models.UpdateFormDataHeaders();
- updateFormDataHeaders.xAcsDingtalkAccessToken = getAccessToken();
- com.aliyun.dingtalkyida_1_0.models.UpdateFormDataRequest updateFormDataRequest = new com.aliyun.dingtalkyida_1_0.models.UpdateFormDataRequest()
- .setSystemToken("U0E66VB1J86UR5RKDPXQTA7WM66K3896KHW8MS5")
- .setFormInstanceId(formInstId)
- .setUserId("yida_pub_account")
- .setAppType("APP_E0BKS4I6U44824QM1KE5")
- .setUpdateFormDataJson(mapAllString)
- //使用最新的表单版本进行更新
- .setUseLatestVersion(true);
- UpdateFormDataResponse updateFormDataResponse = client.updateFormDataWithOptions(updateFormDataRequest, updateFormDataHeaders, new RuntimeOptions());
- System.out.println(JSON.toJSONString(updateFormDataResponse));
- } catch (TeaException err) {
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
- // err 中含有 code 和 message 属性,可帮助开发定位问题
- }
- } catch (Exception _err) {
- TeaException err = new TeaException(_err.getMessage(), _err);
- if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
- // err 中含有 code 和 message 属性,可帮助开发定位问题
- }
- }
- return McR.success("创建钉钉日程成功,并将日程ID反写记录至宜搭表单!");
- }else {
- return McR.errorParam("创建钉钉日程失败!");
- }
- }
- //宜搭删除会议申请后同步删除钉钉日程
- /**
- * @param formInstId 宜搭会议申请表单实例ID
- * @param createUserId 创建人userId
- * @param dingdingRichengID 钉钉日程ID
- * */
- @Override
- public McR deleteRicheng(String formInstId, String createUserId, String dingdingRichengID) {
- log.info("数据实例id:" + formInstId);
- log.info("创建人userId:" + createUserId);
- log.info("钉钉日程ID:" + dingdingRichengID);
- /**根据创建人userId获取unionId*/
- String chuangjianrenUnionId = getUnionId(createUserId);
- /**删除钉钉日程*/
- try {
- OkHttpClient client = new OkHttpClient().newBuilder()
- .build();
- MediaType mediaType = MediaType.parse("text/plain");
- RequestBody body = RequestBody.create(mediaType, "");
- Request request = new Request.Builder()
- .url("https://api.dingtalk.com/v1.0/calendar/users/"+ chuangjianrenUnionId +"/calendars/primary/events/"+ dingdingRichengID +"?pushNotification=true")
- .method("DELETE", body)
- .addHeader("x-acs-dingtalk-access-token", getAccessToken())
- .build();
- Response response = client.newCall(request).execute();
- String bodyString = response.body().string();
- JSONObject JsonBody = JSON.parseObject(bodyString);
- System.out.println("返回体body:" + JsonBody);
- } catch (IOException e) {
- e.printStackTrace();
- }
- return McR.success("删除钉钉日程成功!");
- }
- @Override
- public McR getUsersDepts(List<String> userIds,List<String> deptNames) {
- List<Map<String,String>> deptList = new ArrayList<>();
- //根据部门名称查询部门
- for (String deptName : deptNames) {
- Map<String,Object> headers = new HashMap();
- headers.put("x-acs-dingtalk-access-token",getAccessToken());
- Map<String,Object> body = new HashMap<>();
- body.put("queryWord",deptName);
- body.put("offset",0);
- body.put("size",1);
- //查询部门id
- String jsonString = UtilHttp.doPost("https://api.dingtalk.com/v1.0/contact/departments/search", headers,null , body);
- Map result = (Map) JSONObject.parse(jsonString);
- List<Integer> list = (List<Integer>) result.get("list");
- if (!list.isEmpty()){
- Map<String,String> dept = new HashMap<>();
- dept.put("text",deptName);
- dept.put("value",list.get(0) + "");
- deptList.add(dept);
- }
- }
- //根据汇总全部参会成员查询部门
- for (String userId : userIds) {
- Map<String,Object> param = new HashMap();
- param.put("access_token",getAccessToken());
- //查询用户详情
- DDR_New deptDDR = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/v2/user/get", null, param, UtilMap.map("userid", userId), DDR_New.class);
- if (Objects.isNull(deptDDR.getResult())){
- continue;
- }
- Map result = (Map) deptDDR.getResult();
- List<Integer> deptIdList = (List<Integer>) result.get("dept_id_list");
- Integer deptId = deptIdList.get(0);
- //查询部门详情
- DDR_New deptDDR2 = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/v2/department/get", null, param, UtilMap.map("dept_id", deptId), DDR_New.class);
- Map result2 = (Map) deptDDR2.getResult();
- if (Objects.nonNull(result2)){
- String deptName = result2.get("name").toString();
- Map<String,String> dept = new HashMap<>();
- dept.put("text",deptName);
- dept.put("value",deptId+"");
- deptList.add(dept);
- }
- }
- //deptList根据dept的value去重
- List<Map<String, String>> uniqueDeptList = deptList.stream()
- .filter(distinctByKey(m -> m.get("value")))
- .collect(Collectors.toList());
- return McR.success(uniqueDeptList);
- }
- @Override
- public McR query(String formUuid, Map conditions, Map argument,int currentPage,int pageSize) {
- DDR_New ddrNew = ydClient.queryData(YDParam.builder()
- .formUuid(formUuid)
- .searchFieldJson(JSONObject.toJSONString(conditions))
- .instanceStatus(UtilMap.getString(argument, "instanceStatus"))
- .approvedResult(UtilMap.getString(argument, "approvedResult"))
- .createFromTimeGMT(UtilMap.getString(argument, "createFrom"))
- // .currentPage(currentPage)
- .pageNumber(currentPage)
- .pageSize(pageSize)
- .appType("APP_E0BKS4I6U44824QM1KE5")
- .systemToken("U0E66VB1J86UR5RKDPXQTA7WM66K3896KHW8MS5")
- .userId("253434204020308091")//任欢欢
- .build(), YDConf.FORM_QUERY.retrieve_search_process);
- return McR.success(ddrNew);
- }
- @Override
- public McR updateRicheng(Map map) {
- String formInstId = UtilMap.getString(map, "formInstId");
- String dept = UtilMap.getString(map, "dept");
- Map formData = ydClient.queryData(YDParam.builder()
- .formInstId(formInstId)
- .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
- //获取各部门参会人
- List<String> userIds = new ArrayList<>();
- switch (dept){
- case "信息技术科": userIds = UtilMap.getList(formData,"employeeField_m99dcmr0_id");break;
- case "研发管理科": userIds = UtilMap.getList(formData,"employeeField_m99dcmr1_id");break;
- case "竞赛管理科": userIds = UtilMap.getList(formData,"employeeField_m99dcmr4_id");break;
- case "综合办公室": userIds = UtilMap.getList(formData,"employeeField_m99dcmr5_id");break;
- case "考务管理科": userIds = UtilMap.getList(formData,"employeeField_m99dcmr6_id");break;
- case "财务科": userIds = UtilMap.getList(formData,"employeeField_m99dcmr2_id");break;
- case "质量督导科": userIds = UtilMap.getList(formData,"employeeField_m99dcmr7_id");break;
- case "题库管理科": userIds = UtilMap.getList(formData,"employeeField_m99dcmr8_id");break;
- case "系统实施": userIds = UtilMap.getList(formData,"employeeField_mc4mc2vw_id");break;
- }
- //获取日程参与者
- String scheduleId = UtilMap.getString(formData, "textField_m54zg5b1");//日程id
- String userId = UtilMap.getString(formData, "textField_m54zg5b0");//发起人
- String unionId = getUnionId(userId);//发起人unionId
- String jsonString = UtilHttp.doGet("https://api.dingtalk.com/v1.0/calendar/users/" + unionId + "/calendars/primary/events/" + scheduleId + "/attendees", ddClient.initTokenHeader(), new HashMap<>());
- Map result = (Map) JSONObject.parse(jsonString);
- //原参会人列表
- List<Map> attendees = UtilMap.getList(result, "attendees");
- List<Map> attendeesToAdd = new ArrayList<>();
- //添加当前部门参会人
- for (String userId2 : userIds) {
- Map attendee = new HashMap();
- String unionId2 = getUnionId(userId2);
- //参会人是否存在
- boolean isExists = attendees.stream().anyMatch(item -> unionId2.equals(UtilMap.getString(item,"id")));
- if (!isExists){
- attendee.put("id",unionId2);//参会人unionId
- attendee.put("isOptional",true);//是否为可选参与人
- attendeesToAdd.add(attendee);
- }
- }
- //添加日程参会人
- if (!attendeesToAdd.isEmpty()){
- Map body = new HashMap();
- body.put("attendeesToAdd",attendeesToAdd);//需要添加的参与人列表
- body.put("pushNotification",true);//是否弹窗提醒
- body.put("chatNotification",true);//是否单聊提醒
- String jsonString2 = UtilHttp.doPost("https://api.dingtalk.com/v1.0/calendar/users/" + unionId + "/calendars/primary/events/" + scheduleId + "/attendees", ddClient.initTokenHeader(), null, body);
- log.info("添加日程参会人结束:{}",jsonString2);
- }else {
- log.info("无需添加日程参会人");
- }
- return McR.success();
- }
- @Autowired
- private DDClient_Schedule ddClient_schedule;
- @Autowired
- private DDClient dddClient;
- @Override
- public void test() {
- String userId = "253434204020308091";
- List<Map> dataList = (List<Map>) ddClient_schedule.getMeetingRoomList(dddClient.getAccessToken(), userId).getResult();
- log.info("dataList, {}", dataList);
- ddClient_schedule.bookMeetingRoom(dddClient.getAccessToken(), userId, "K1ZoWFNuQXo0RlRubzQ0OVJycXEwQT09", Arrays.asList("ab0d05412c9e11a144d5c49e58adef08bfa2770908bf1ec7"));
- }
- }
|