StDingProcServiceImpl.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. package com.malk.shantai.service.impl;
  2. import cn.hutool.http.HttpUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.malk.server.common.McR;
  8. import com.malk.server.dingtalk.DDR_New;
  9. import com.malk.shantai.config.StEkbConfig;
  10. import com.malk.shantai.entity.Shantai;
  11. import com.malk.shantai.mapper.ShantaiMapper;
  12. import com.malk.shantai.service.StDingProcService;
  13. import com.malk.service.dingtalk.DDClient;
  14. import com.malk.service.dingtalk.DDClient_Workflow;
  15. import com.malk.utils.UtilHttp;
  16. import com.malk.utils.UtilMap;
  17. import com.malk.utils.UtilToken;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.beans.factory.annotation.Value;
  22. import org.springframework.stereotype.Service;
  23. import java.io.*;
  24. import java.net.HttpURLConnection;
  25. import java.net.MalformedURLException;
  26. import java.net.URL;
  27. import java.net.URLConnection;
  28. import java.util.*;
  29. @Service
  30. @Slf4j
  31. public class StDingProcServiceImpl extends ServiceImpl<ShantaiMapper, Shantai> implements StDingProcService {
  32. @Autowired
  33. private DDClient_Workflow ddClient_workflow;
  34. @Autowired
  35. private DDClient ddClient;
  36. @Autowired
  37. private StEkbConfig stEkbConfig;
  38. @Autowired
  39. private ShantaiMapper shantaiMapper;
  40. @Value("${download.path}")
  41. private String filePath;
  42. @Value("${dingtalk.operatorUserId}")
  43. private String operatorUserId;
  44. @Value("${dingtalk.operatorUnionId}")
  45. private String operatorUnionId;
  46. @Value("${ekb.operatorStaffId}")
  47. private String operatorStaffId;
  48. //法人实体
  49. private static Map<String,String> CORPORATION = new HashMap<>();
  50. //任务状态
  51. private static Map<String,String> STATUS = new HashMap<>();
  52. static{
  53. CORPORATION.put("杉泰健康管理(上海)有限公司","ID01tX0xhMwgbR");
  54. CORPORATION.put("上海广慈太保互联网医院有限公司","LY4cw6EvcNZQ00");
  55. CORPORATION.put("苏州杉泰大药房有限公司","ID_3IzESoE1lxM");
  56. CORPORATION.put("成都杉泰互联网医院有限公司","zsIcw6E-tcIM00");
  57. CORPORATION.put("海南杉泰健康科技有限公司","kcwcw6F3esco00");
  58. CORPORATION.put("上海杉泰健康科技有限公司","SdEcw6EvcN9U00");
  59. STATUS.put("APPROVING","待审批");
  60. STATUS.put("PAYING","待支付");
  61. STATUS.put("PROCESSING","处理中(支付中)");
  62. STATUS.put("PROCESSED","已处理(审批完成、已支付)");
  63. STATUS.put("CANCELED","待办被取消");
  64. STATUS.put("SENDING","待寄送");
  65. STATUS.put("RECEIVING","待收单");
  66. STATUS.put("RECEIVING_EXCEP","收单异常");
  67. STATUS.put("REQUISITION_PAID","临时状态(申请单支付时消息发送)");
  68. STATUS.put("DRAFT","草稿");
  69. STATUS.put("PENDING","提交中");
  70. STATUS.put("REJECTED","已驳回");
  71. STATUS.put("PAID","已支付/审批完成");
  72. STATUS.put("ARCHIVED","归档");
  73. }
  74. @Override
  75. public void fkdSync(String procInstId) {
  76. Map map=ddClient_workflow.getProcessInstanceId(ddClient.getAccessToken(),procInstId);
  77. log.info("map:{}",map);
  78. List<Map> tasks = (List<Map>) map.get("tasks");
  79. boolean hasRunning = false;
  80. for (Map task : tasks) {
  81. if ("RUNNING".equals(task.get("status").toString())){
  82. hasRunning = true;
  83. //判断是否为审批流程第一个出纳节点是否完成(第二个出纳节点进行中)
  84. if (!"55d3_4702".equals(task.get("activityId").toString())){
  85. log.info("当前节点为:activityId:{},activityName:{},不进行同步",task.get("activityId"),task.get("activityName"));
  86. return;
  87. }else {
  88. log.info("当前节点为:activityId:{},activityName:{},进行同步",task.get("activityId"),task.get("activityName"));
  89. break;
  90. }
  91. }
  92. }
  93. //若没有正在运行的审批流程,则不进行同步
  94. if (!hasRunning){
  95. log.info("没有正在运行的审批流程,不进行同步");
  96. return;
  97. }
  98. Map rule=new HashMap();
  99. rule.put("DDSelectField_8UJMKRMLWYK0","是否推送到易快报");// 是否推送到易快报
  100. // rule.put("TextField-K11U6U5Q","付款事由");// 标题/付款事由
  101. rule.put("TextField_18XU5XCGC4RK0","付款摘要");// 标题/付款摘要
  102. rule.put("RecipientAccountField-K11U6U5P","收款信息");// 收款信息
  103. rule.put("MoneyField_FMP7OAX3TZ40","付款金额");// 付款金额
  104. rule.put("TextareaField_15PEUHBWFDDS0","备注");// 备注
  105. rule.put("DDMultiSelectField_17IA7RJQYGWW0","付款公司");// 付款公司
  106. Map data=getData(map,rule);
  107. if( Objects.isNull(data.get("是否推送到易快报")) || data.get("是否推送到易快报").toString().equals("否")){
  108. return;
  109. }
  110. data.put("户名", UtilMap.getMap(data,"收款信息").get("name"));// 户名
  111. data.put("银行",UtilMap.getMap(data,"收款信息").get("instName"));// 银行
  112. data.put("支行信息",UtilMap.getMap(data,"收款信息").get("instBranchName"));// 支行信息
  113. data.put("账号",UtilMap.getMap(data,"收款信息").get("cardNo"));// 账号
  114. data.put("省份",UtilMap.getMap(data,"收款信息").get("instProvince"));// 省份
  115. data.put("城市",UtilMap.getMap(data,"收款信息").get("instCity"));// 城市
  116. log.info("data:{}",JSONObject.toJSONString(data));
  117. //获取发起人userId
  118. String userId = map.get("originatorUserId").toString();
  119. String staffId = operatorStaffId;// 曹艳杰
  120. //查询易快报中发起人是否存在
  121. /*Map<String,Object> param3 = new HashMap<>();
  122. param3.put("accessToken",getToken());
  123. Map body3 = new HashMap<>();
  124. body3.put("type","USERID");
  125. body3.put("conditionIds",Arrays.asList(userId));
  126. Map user = (Map) JSONObject.parseObject(UtilHttp.doPost(stEkbConfig.getPreUrl() + "/api/openapi/v1/staffs/getStaffIds", null, param3, body3)).getJSONArray("items").get(0);
  127. if (Objects.isNull(user)){
  128. log.error("易快报中发起人不存在");
  129. staffId = "pQccdcNGsM3U00:16278700718435315";// 李溯
  130. }else {
  131. staffId = "pQccdcNGsM3U00:16278700718435315";// 李溯
  132. staffId = user.get("id").toString();
  133. }*/
  134. //查询易快报中收款账户是否存在
  135. Map result = (Map) JSONObject.parseObject(UtilHttp.doGet(stEkbConfig.getPreUrl() + "/api/openapi/v2/payeeInfos",
  136. null, UtilMap.map("accessToken, start, count, names, cardNos, ids, active, orderBy, orderByType", getToken(), 0, 100, data.get("户名"), data.get("账号"), null, true, "updateTime", "desc"))) ;
  137. System.out.println(result);
  138. String payeeId = "";
  139. List<Map> items = (List<Map>) result.get("items");
  140. //若不存在则新增收款账户
  141. if (Objects.isNull(items) || items.isEmpty()){
  142. Map<String, Object> body = new HashMap<>();
  143. Map visibility = new HashMap();
  144. visibility.put("fullVisible",true);
  145. body.put("sort","BANK");
  146. body.put("type","PUBLIC");
  147. body.put("owner","CORPORATION");
  148. body.put("name",data.get("户名"));
  149. body.put("cardNo",data.get("账号"));
  150. body.put("bank",data.get("银行"));
  151. body.put("branch",data.get("支行信息"));
  152. body.put("province",data.get("省份"));
  153. body.put("city",data.get("城市"));
  154. body.put("visibility",visibility);
  155. Map<String,Object> param = new HashMap<>();
  156. param.put("accessToken",getToken());
  157. payeeId = JSONObject.parseObject(UtilHttp.doPost(stEkbConfig.getPreUrl() + "/api/openapi/v2.1/payeeInfos", null, param, body)).getString("id");
  158. //再次获取新增后的收款账户
  159. /* account = JSONObject.parseObject(UtilHttp.doGet(stEkbConfig.getPreUrl() + "/api/openapi/v2/payeeInfos",
  160. null, UtilMap.map("accessToken, start, count, names, cardNos, ids, active", getToken(), 0, 100, null, null, id, true))) ;*/
  161. }else {
  162. payeeId = items.get(0).get("id").toString();
  163. }
  164. //根据模板ID获取模板信息
  165. String id="ID01yVMv53gDSL";// "对外付款单"模板id
  166. Map template = (Map) JSONObject.parseObject(HttpUtil.get(stEkbConfig.getPreUrl().concat("/api/openapi/v2/specifications/byIds/[").concat(id).concat("]"), UtilMap.map("accessToken, type, start, count", getToken(), "payment", 0, 10))).getJSONArray("items").get(0);
  167. String specificationId = template.get("id").toString();
  168. //新增单据
  169. Map<String, Object> param = new HashMap<>();
  170. param.put("accessToken",getToken());
  171. param.put("isCommit",true);
  172. param.put("isUpdate",true);
  173. Map<String, Object> body = new HashMap<>();
  174. Map<String, Object> form = new HashMap<>();
  175. //金额
  176. Map<String, Object> payMoney = new HashMap<>();
  177. payMoney.put("standard",data.get("付款金额"));
  178. payMoney.put("standardStrCode","CNY");
  179. payMoney.put("standardNumCode","156");
  180. payMoney.put("standardSymbol","¥");
  181. payMoney.put("standardUnit","元");
  182. payMoney.put("standardScale",2);
  183. form.put("title",data.get("付款摘要")); //单据标题
  184. form.put("submitterId",staffId); //提交人ID
  185. form.put("description",data.get("备注")); //描述
  186. form.put("specificationId",specificationId); //单据模板id
  187. form.put("payMoney",payMoney); //付款金额
  188. form.put("payeeId",payeeId);
  189. form.put("u_订单信息",procInstId);
  190. if (CORPORATION.keySet().contains(data.get("付款公司"))){
  191. form.put("法人实体",CORPORATION.get(data.get("付款公司"))); //法人实体
  192. }
  193. body.put("form",form);
  194. Map document = JSONObject.parseObject(UtilHttp.doPost(stEkbConfig.getPreUrl() + ("/api/openapi/v2.2/flow/data"), null, param, body));
  195. Map flow = (Map) document.get("flow");
  196. String flowId = flow.get("id").toString();
  197. Shantai shantai = new Shantai();
  198. shantai.setProcInstId(procInstId);
  199. shantai.setState("3");
  200. shantai.setUserId(userId);
  201. shantai.setFlowId(flowId);
  202. shantaiMapper.insert(shantai);
  203. log.info("新增单据成功:{}",document);
  204. }
  205. @Override
  206. public McR commentSync(Map map,String flowId){
  207. try{
  208. String procInstId = map.get("procInstId").toString();
  209. //查询表中是否存在同步评论记录
  210. LambdaQueryWrapper<Shantai> shantaiLambdaQueryWrapper = new LambdaQueryWrapper<>();
  211. shantaiLambdaQueryWrapper.eq(Shantai::getProcInstId,procInstId)
  212. .eq(Shantai::getValidFlag,"1");
  213. Shantai shantai = shantaiMapper.selectOne(shantaiLambdaQueryWrapper);
  214. //获取提交人
  215. String userId = "";
  216. if (Objects.nonNull(shantai)){
  217. if (shantai.getState().equals("1")){
  218. log.info("该单据Id:{}已同步过水单,本次不进行同步",flowId);
  219. return McR.success();
  220. }
  221. userId = shantai.getUserId();
  222. }
  223. if (Objects.isNull(userId)){
  224. userId = map.get("userId").toString();
  225. }
  226. //上传钉盘目前设置为管理员
  227. String unionId = operatorUnionId;
  228. /*DDR_New ddrNew = (DDR_New) UtilHttp.doPost("https://oapi.dingtalk.com/topapi/v2/user/get", null, ddClient.initTokenParams(), UtilMap.map("userid", userId), DDR_New.class);
  229. Map result = (Map) ddrNew.getResult();
  230. if (Objects.nonNull(result)){
  231. unionId = result.get("unionid").toString();
  232. }else {
  233. unionId = operatorUnionId;//曹艳杰
  234. userId = operatorUserId;//曹艳杰
  235. }*/
  236. //获取附件上传到钉盘
  237. List<String> paths = (List<String>) map.get("paths");
  238. List<Map> dentries = new ArrayList<>();
  239. if (Objects.nonNull(paths) && !paths.isEmpty()){
  240. for (String path : paths) {
  241. File file = new File(path);
  242. try{
  243. //上传文件至钉盘
  244. Map dentry = upload(file,unionId);
  245. dentries.add(dentry);
  246. }catch (IOException e){
  247. e.printStackTrace();
  248. log.info("上传文件至钉盘失败:{}",e.getMessage());
  249. return McR.errorUnknown("上传文件至钉盘失败");
  250. }
  251. }
  252. }
  253. String state = map.get("state").toString();
  254. if (Objects.nonNull(shantai) && shantai.getState().equals("2") && dentries.isEmpty()){
  255. log.info("该单据Id:{}本次无水单上传,不进行同步",flowId);
  256. return McR.success();
  257. }
  258. //新增评论
  259. // comment(dentries,state,userId,procInstId);
  260. //20241018 评论人统一改为曹艳杰
  261. comment(dentries,state,operatorUserId,procInstId);
  262. if (Objects.isNull(shantai)){
  263. //更新表中同步状态
  264. shantai = new Shantai();
  265. if (dentries.isEmpty()){
  266. shantai.setState("2");
  267. }else {
  268. shantai.setState("1");
  269. }
  270. shantai.setFlowId(flowId);
  271. shantai.setProcInstId(procInstId);
  272. shantai.setUserId(userId);
  273. shantaiMapper.insert(shantai);
  274. }else {
  275. //更新表中同步状态
  276. if (dentries.isEmpty()){
  277. shantai.setState("2");
  278. shantai.setFlowId(flowId);
  279. }else {
  280. shantai.setState("1");
  281. shantai.setFlowId(flowId);
  282. }
  283. //更新评论状态
  284. shantaiMapper.updateById(shantai);
  285. }
  286. }catch (Exception e){
  287. log.info("单据Id:{}同步失败,原因:{}",flowId,e.getMessage());
  288. return McR.errorUnknown("同步评论失败");
  289. }
  290. return McR.success();
  291. }
  292. @Override
  293. public Map getFlowInfo(String flowId) {
  294. //根据单据id获取单据信息
  295. Map param = new HashMap<>();
  296. param.put("accessToken",getToken());
  297. param.put("flowId",flowId);
  298. Map flow = JSONObject.parseObject(UtilHttp.doGet("https://dd2.hosecloud.com/api/openapi/v1.1/flowDetails", null, param)).getJSONObject("value");
  299. Map form = (Map) flow.get("form");
  300. String procInstId = form.get("u_订单信息").toString();
  301. String submitterId = form.get("submitterId").toString();
  302. String userId = submitterId.substring(submitterId.indexOf(':') + 1);
  303. String state = flow.get("state").toString();
  304. log.info("流程状态:{}",state.toUpperCase());
  305. if (STATUS.keySet().contains(state.toUpperCase())){
  306. state = STATUS.get(state.toUpperCase());
  307. }
  308. //根据单据id获取单据附件信息
  309. Map param2 = new HashMap<>();
  310. param2.put("accessToken",getToken());
  311. Map body2 = new HashMap<>();
  312. String[] flowIds = {flowId};
  313. body2.put("flowIds",flowIds);
  314. JSONArray items = JSONObject.parseObject(UtilHttp.doPost("https://dd2.hosecloud.com/api/openapi/v1/flowDetails/attachment", null, param2, body2)).getJSONArray("items");
  315. Map item = (Map) items.get(0);
  316. List<Map> attachmentList = (List<Map>) item.get("attachmentList");
  317. List<String> paths = new ArrayList<>();
  318. if (!attachmentList.isEmpty()){
  319. for (Map attachment : attachmentList) {
  320. if (attachment.get("type").toString().equals("flow.receipt")){
  321. List<Map> receiptUrls = (List<Map>) attachment.get("receiptUrls");
  322. for (Map receiptUrl : receiptUrls) {
  323. //附件下载到本地
  324. String url = receiptUrl.get("url").toString();
  325. String fileName = receiptUrl.get("key").toString();
  326. String path = filePath + fileName;
  327. downloadNet(url, path);
  328. //添加到路径列表
  329. paths.add(path);
  330. }
  331. }
  332. }
  333. }
  334. Map result = new HashMap();
  335. result.put("state",state);
  336. result.put("procInstId",procInstId);
  337. result.put("paths",paths);
  338. result.put("userId",userId);
  339. return result;
  340. }
  341. // 下载网络文件
  342. public void downloadNet(String netUrl, String path){
  343. int bytesum = 0;
  344. int byteread = 0;
  345. try{
  346. URL url = new URL(netUrl);
  347. URLConnection conn = url.openConnection();
  348. InputStream inStream = conn.getInputStream();
  349. FileOutputStream fs = new FileOutputStream(path);
  350. byte[] buffer = new byte[1204];
  351. while ((byteread = inStream.read(buffer)) != -1) {
  352. bytesum += byteread;
  353. fs.write(buffer, 0, byteread);
  354. }
  355. } catch (MalformedURLException e){
  356. e.printStackTrace();
  357. } catch (FileNotFoundException e) {
  358. e.printStackTrace();
  359. } catch (IOException e) {
  360. e.printStackTrace();
  361. }
  362. }
  363. @Override
  364. public void commentSyncAll() {
  365. //获取所有评论未同步水单的单据列表
  366. LambdaQueryWrapper<Shantai> shantaiLambdaQueryWrapper = new LambdaQueryWrapper<>();
  367. shantaiLambdaQueryWrapper.ne(Shantai::getState,"1")
  368. .eq(Shantai::getValidFlag,"1");
  369. List<Shantai> shantaiList = shantaiMapper.selectList(shantaiLambdaQueryWrapper);
  370. for (Shantai shantai : shantaiList) {
  371. String flowId = shantai.getFlowId();
  372. log.info("开始定时同步评论水单:{}",flowId);
  373. Map flowInfo = getFlowInfo(flowId);
  374. commentSync(flowInfo,flowId);
  375. }
  376. }
  377. private void comment(List<Map> dentries, String state, String userId, String procInstId) {
  378. Map body = new HashMap<>();
  379. Map fileMap = new HashMap<>();
  380. List<Map> attachments= new ArrayList<>();
  381. for (Map dentry : dentries) {
  382. Map attachment = new HashMap<>();
  383. attachment.put("spaceId",dentry.get("spaceId").toString());
  384. attachment.put("fileSize",dentry.get("size").toString());
  385. attachment.put("fileId",dentry.get("id").toString());
  386. attachment.put("fileName",dentry.get("name").toString());
  387. attachment.put("fileType",dentry.get("type").toString());
  388. attachments.add(attachment);
  389. }
  390. fileMap.put("photos",null);
  391. fileMap.put("attachments",attachments);
  392. body.put("processInstanceId",procInstId);
  393. body.put("text","付款状态:" + state);
  394. body.put("commentUserId",userId);
  395. body.put("file",fileMap);
  396. UtilHttp.doPost("https://api.dingtalk.com/v1.0/workflow/processInstances/comments",ddClient.initTokenHeader(),null,body);
  397. }
  398. private Map upload(File file,String unionId) throws IOException {
  399. //获取文件上传信息
  400. // String parentDentryUuid = "ZQYprEoWonmdnzdOFpklzk1a81waOeDk";// poc目录 api测试上传/附件
  401. String parentDentryUuid = "YQBnd5ExVEowejBQtZ1v6wO28yeZqMmz";// 杉泰目录 /技术文档/易快报银企直连
  402. Map<String,Object> param1 = new HashMap<>();
  403. param1.put("unionId",unionId);
  404. Map body1 = new HashMap<>();
  405. body1.put("protocol","HEADER_SIGNATURE");
  406. DDR_New ddrNew = (DDR_New) UtilHttp.doPost("https://api.dingtalk.com/v2.0/storage/spaces/files/" + parentDentryUuid + "/uploadInfos/query", ddClient.initTokenHeader(), param1, body1, DDR_New.class);
  407. String uploadKey = ddrNew.getUploadKey();
  408. Map headerSignatureInfo = ddrNew.getHeaderSignatureInfo();
  409. Map<String,String> headers = (Map<String,String>) headerSignatureInfo.get("headers");
  410. String resourceUrl = ((List<String>) headerSignatureInfo.get("resourceUrls")).get(0);
  411. //使用OSS的header加签方式上传文件
  412. URL url = new URL(resourceUrl);
  413. HttpURLConnection connection = (HttpURLConnection)url.openConnection();
  414. if (headers != null) {
  415. for (Map.Entry<String, String> entry : headers.entrySet()) {
  416. connection.setRequestProperty(entry.getKey(), entry.getValue());
  417. }
  418. }
  419. connection.setDoOutput(true);
  420. connection.setRequestMethod("PUT");
  421. connection.setUseCaches(false);
  422. connection.setReadTimeout(10000);
  423. connection.setConnectTimeout(10000);
  424. connection.connect();
  425. OutputStream out = connection.getOutputStream();
  426. InputStream is = new FileInputStream(file);
  427. byte[] b =new byte[1024];
  428. int temp;
  429. while ((temp=is.read(b))!=-1){
  430. out.write(b,0,temp);
  431. }
  432. out.flush();
  433. out.close();
  434. int responseCode = connection.getResponseCode();
  435. connection.disconnect();
  436. if (responseCode == 200) {
  437. System.out.println("上传成功");
  438. } else {
  439. System.out.println("上传失败");
  440. }
  441. //提交文件
  442. Map<String,Object> param2 = new HashMap<>();
  443. param2.put("unionId",unionId);
  444. Map body2 = new HashMap<>();
  445. body2.put("uploadKey",uploadKey);
  446. body2.put("name",file.getName());
  447. Map option = new HashMap<>();
  448. option.put("conflictStrategy","OVERWRITE");//文件名称冲突策略:覆盖
  449. body2.put("option",option);
  450. DDR_New ddrNew2 = (DDR_New) UtilHttp.doPost("https://api.dingtalk.com/v2.0/storage/spaces/files/" + parentDentryUuid + "/commit", ddClient.initTokenHeader(), param2, body2, DDR_New.class);
  451. return ddrNew2.getDentry();
  452. }
  453. public Map getData(Map instance,Map rule){
  454. Map resultMap=new HashMap();
  455. List<Map> list=(List<Map>) instance.get("formComponentValues");
  456. for (Map map:list) {
  457. if(rule.containsKey(String.valueOf(map.get("id")))){
  458. String componentType=String.valueOf(map.get("componentType"));
  459. if(componentType.equals("RecipientAccountField")){
  460. resultMap.put(rule.get(String.valueOf(map.get("id"))),JSONObject.parseObject(String.valueOf(map.get("extValue"))));
  461. }else if (componentType.equals("DDMultiSelectField")){
  462. resultMap.put(rule.get(String.valueOf(map.get("id"))),JSONObject.parseArray(String.valueOf(map.get("value"))).get(0).toString());
  463. }else{
  464. resultMap.put(rule.get(String.valueOf(map.get("id"))),map.get("value"));
  465. }
  466. }
  467. }
  468. return resultMap;
  469. }
  470. private String getToken(){
  471. String accessToken = UtilToken.get("invalid-token-ykb");
  472. if (StringUtils.isNotBlank(accessToken)) return accessToken;
  473. Map result = JSONObject.parseObject(HttpUtil.post(stEkbConfig.getPreUrl().concat("/api/openapi/v1/auth/getAccessToken"),JSONObject.toJSONString(UtilMap.map("appKey, appSecurity",stEkbConfig.getAppKey(),stEkbConfig.getAppSecurity()))));
  474. String token = ((Map) result.get("value")).get("accessToken").toString();
  475. long expireTime = (long) ((Map) result.get("value")).get("expireTime");
  476. log.info("响应token, {}", token);
  477. // token失效自动重置: 重新调用会重置过期时间
  478. UtilToken.put("invalid-token-ykb", token, 2 * 3600 * 1000L);
  479. return token;
  480. }
  481. }