package com.malk.ruisi.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.malk.ruisi.service.RSService; 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.DDR_New; import com.malk.service.aliwork.YDClient; import com.malk.service.aliwork.YDService; import com.malk.service.dingtalk.DDClient; import com.malk.service.dingtalk.DDClient_Contacts; import com.malk.utils.UtilDateTime; import com.malk.utils.UtilHttp; import com.malk.utils.UtilMap; import com.malk.utils.UtilServlet; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PostMapping; import javax.servlet.http.HttpServletRequest; import java.util.*; import java.util.stream.Collectors; @EnableScheduling @Service @Slf4j public class RSImplService implements RSService { @Autowired private YDService ydService; @Autowired private YDClient ydClient; @Autowired private DDClient_Contacts ddClient_contacts; @Autowired private DDClient ddClient; @Autowired private static final long DEPT_ID = 933074211L; // 合作加盟校区 /// 数据缓存 + 图片缓存, 10 分钟更新一次 private Map portal_cache = new HashMap(); /// 创建企业账号: loginI/userId 都为 SHR 工号 private void createExclusiveUser(String loginId, String name) { final String PASS_WORD = "tzr@111111"; Map info = UtilMap.map("userid", loginId); ddClient_contacts.createUser_dingTalk(ddClient.getAccessToken(), loginId, PASS_WORD, name, Arrays.asList(DEPT_ID), info); } /** * 同步钉钉企业账号 */ @Override public void syncDingTalk_exclusive() { List dataList = ydService.queryFormData_all(YDParam.builder() .formUuid("FORM-11B80FC621CA4DB9A35364CFBFF7287538KR") .build()); dataList.forEach(data -> { if (!"是".equals(UtilMap.getString(data, "radioField_m0hlup9w"))) { String userId = UtilMap.getString(data, "textField_lztc6k3k"); String message = ""; try { this.createExclusiveUser(userId, UtilMap.getString(data, "textField_lxsm8xow")); } catch (McException e) { message = e.getMessage(); log.error(e.getMessage(), e); } ydClient.operateData(YDParam.builder() .formInstanceId(UtilMap.getString(data, "instanceId")) .useLatestVersion(true) .updateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_m0hlup9w, employeeField_m0hlup9v, textareaField_m0hs4k90", "是", Arrays.asList(userId), message))) .build(), YDConf.FORM_OPERATION.update); } }); } /** * 重置企业账号密码 */ @Override public void resetPwd(Map data) { ddClient_contacts.updateUser_dingTalk(ddClient.getAccessToken(), UtilMap.getString(data, "userId"), Arrays.asList(DEPT_ID), UtilMap.map("init_password", UtilMap.getString(data, "password"))); } @Override public List getPortalList(String section) { return _portalList(section); } @Override public void getDataList() { try { portal_cache = new HashMap(); getPortalList("财务专区"); getPortalList("公司头条"); getPortalList("企业文化"); getPortalList("员工自助"); getPortalList("规章制度"); } catch (Exception e) { // 记录错误信息 e.printStackTrace(); } } @Override public void shareRecord(String processInstanceId,Map data) { // 执行分享逻辑 [ 拼接后的权限组 ] McException.assertParamException_Null(data, "compId, userIds, userId, content, atUserId"); //开始抓取宜搭对应的子表数据 String mapss = null; ArrayList> maps_YD = new ArrayList<>(); // cn.hutool.json.JSONArray jsonArray_YDZB =null; DDR_New ddrNew1 = ydClient.queryData(YDParam.builder().formInstanceId(processInstanceId).build() , YDConf.FORM_QUERY.retrieve_id); Map data1 = ddrNew1.getFormData(); List list = new ArrayList<>(); if (data1.get("tableField_m2cx8zh5") != null){ list = (List) data1.get("tableField_m2cx8zh5"); } // jsonArray_YDZB = new cn.hutool.json.JSONArray(mapss); Map sss=new HashMap<>(); sss.put("employeeField_m2cx8zh6",data.get("atUserId").toString().split(",")); sss.put("textareaField_m2cx8zh7",data.get("content")); //原有数据 for (int i = 0; i < list.size(); i++) { Map sss2 = new HashMap(); Map map = (Map) list.get(i); // List user = (List) ; sss2.put("employeeField_m2cx8zh6",map.get("employeeField_m2cx8zh6_id")); sss2.put("textareaField_m2cx8zh7",map.get("textareaField_m2cx8zh7")); maps_YD.add(sss2); } maps_YD.add(sss);//新增数据 Map map = new HashMap(); map.put(UtilMap.getString(data, "compId"),UtilMap.getList(data, "userIds")); map.put("tableField_m2cx8zh5",maps_YD); ydClient.operateData(YDParam.builder() .formInstId(processInstanceId) .updateFormDataJson(JSON.toJSONString(map)) .build(), YDConf.FORM_OPERATION.update); String userIds = String.valueOf(data.get("atUserId")); String[] split = userIds.split(","); ArrayList names = new ArrayList<>(); for(Object auserId : split){ DDR_New ddrNew = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/v2/user/get", null, ddClient.initTokenParams(), UtilMap.map("userid", auserId), DDR_New.class); Object result = ddrNew.getResult(); if (result != null) { JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(result)); String name = jsonObject.getString("name"); names.add(name); } } data.put("content", names.stream().collect(Collectors.joining(",")) + ":" +UtilMap.getString(data, "content")); YDParam ydParam = YDParam.builder() .formInstanceId(processInstanceId) .userId(UtilMap.getString(data, "userId")) .content(UtilMap.getString(data, "content")) .build(); if (UtilMap.getBoolean(data, "isNotice")) { ydParam.setAtUserId(UtilMap.getString(data, "atUserId")); } ydClient.operateData(ydParam, YDConf.FORM_OPERATION.remarks); } @Override public Map approvalRecord(String processInstanceId, Map data) { List records = (List) ydClient.queryData(YDParam.builder() .processInstanceId(processInstanceId) .build(), YDConf.FORM_QUERY.retrieve_approval_record).getResult(); List userIds = new ArrayList<>(); // 后端格式 List users = new ArrayList<>(); // 前端格式 for (Map record : records) { // 节点多人情况处理 List domainList = UtilMap.getList(record, "domainList"); if (!domainList.isEmpty()) { for (Map operator : domainList) { String userId = UtilMap.getString(operator, "operator"); if (!userIds.contains(userId)) { userIds.add(userId); // 前端格式显示通过label控制 users.add(UtilMap.map("name, label, value", operator.get("operatorName"), operator.get("operatorName"), userId)); } } } else { // 单人审批节点处理 String userId = UtilMap.getString(record, "operatorUserId"); if (!userIds.contains(userId)) { userIds.add(userId); // 前端格式显示通过label控制 users.add(UtilMap.map("name, label, value", record.get("operatorName"), record.get("operatorName"), userId)); } } } // 执行更新逻辑 if (UtilMap.getBoolean(data, "isUpdate")) { McException.assertParamException_Null(data, "compId"); ydClient.operateData(YDParam.builder() .formInstId(processInstanceId) .updateFormDataJson(JSON.toJSONString(UtilMap.map(UtilMap.getString(data, "compId"), userIds))) .build(), YDConf.FORM_OPERATION.update); } return UtilMap.map("users, userIds", users, userIds); // } @Override public void syncDingTalk_delect() { List dataList = ydService.queryFormData_all(YDParam.builder() .formUuid("FORM-11B80FC621CA4DB9A35364CFBFF7287538KR") .build()); dataList.forEach(data -> { if ("未启用".equals(UtilMap.getString(data, "radiofield_MMa26Yu4"))) { String userId = UtilMap.getString(data, "textField_lztc6k3k"); String message = ""; try { this.delectExclusiveUser(userId); } catch (McException e) { message = e.getMessage(); log.error(e.getMessage(), e); } // ydClient.operateData(YDParam.builder() // .formInstanceId(UtilMap.getString(data, "instanceId")) // .useLatestVersion(true) // .updateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_m0hlup9w, employeeField_m0hlup9v, textareaField_m0hs4k90", "是", Arrays.asList(userId), message))) // .build(), YDConf.FORM_OPERATION.update); } }); } private void delectExclusiveUser(String userId) throws McException { Map param2 = new HashMap(); param2.put("access_token", dingshiqiImpl.getAccessToken_PJSS()); Map body = new HashMap(); body.put("userid", userId); String s = UtilHttp.doGet("https://oapi.dingtalk.com/topapi/v2/user/delete", param2, (Map) body); JSONObject obj = JSONObject.parseObject(s); JSONArray arr = obj.getJSONArray("result"); } /** * 工作台数据 */ private List _portalList(String type) { List pList = UtilMap.getList(portal_cache, type); if (pList.isEmpty()) { List dataList = (List) ydClient.queryData(YDParam.builder() .formUuid("FORM-D46C46DACD644467B8F6902EBFD8FDFEYFOX") .pageSize(5) .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_m17kv4an", type))) .build(), YDConf.FORM_QUERY.retrieve_search_form).getData(); dataList.sort(Comparator.comparingInt(item -> UtilMap.getInt(item, "numberField_m17kv4ao"))); // 排序 pList = dataList.stream().map(item -> { Map formData = UtilMap.getMap(item, "formData"); Map row = UtilMap.map("title, source, link", UtilMap.getString(formData, "textField_m17kv4aq"), UtilMap.getString(formData, "textField_m17kv4as"), UtilMap.getString(formData, "textField_m17kv4at")); long date = UtilMap.getLong(formData, "dateField_m17kv4ar"); if (date > 0L) { row.put("dateTime", UtilDateTime.format(new Date(date), "yyyy-MM-dd HH:mm")); } // 图片免登处理 String image = UtilMap.getString(formData, "imageField_m1abjxl0"); if (StringUtils.isNotBlank(image)) { List attas = (List) JSON.parse(image); row.put("image", ydClient.convertTemporaryUrl(UtilMap.getString(attas.get(0), "url"))); Object image1 = row.get("image"); System.out.println("image========="+UtilMap.getString(attas.get(0), "url")); // System.out.println("image1========="+image1); } return row; }).collect(Collectors.toList()); portal_cache.put(type, pList); } log.info("type: {},list:{}", type, pList); return pList; } }