NonPoServerImpl.java 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006
  1. package com.malk.taisen.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.fasterxml.jackson.databind.JsonNode;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.malk.taisen.util.CusutUtil;
  7. import com.malk.taisen.util.HttpUtil;
  8. import cn.hutool.json.JSONArray;
  9. import com.malk.server.aliwork.YDConf;
  10. import com.malk.server.aliwork.YDParam;
  11. import com.malk.server.dingtalk.DDR_New;
  12. import com.malk.service.aliwork.YDClient;
  13. import com.malk.service.aliwork.YDService;
  14. import com.malk.service.dingtalk.DDClient;
  15. import com.malk.taisen.service.NonPoServer;
  16. import com.malk.utils.UtilMap;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.beans.factory.annotation.Value;
  20. import org.springframework.http.HttpEntity;
  21. import org.springframework.http.HttpHeaders;
  22. import org.springframework.http.MediaType;
  23. import org.springframework.http.ResponseEntity;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.web.client.RestTemplate;
  26. import java.math.BigDecimal;
  27. import java.math.RoundingMode;
  28. import java.text.ParseException;
  29. import java.text.SimpleDateFormat;
  30. import java.util.*;
  31. @Slf4j
  32. @Service
  33. public class NonPoServerImpl implements NonPoServer {
  34. @Autowired
  35. private YDClient ydClient;
  36. @Autowired
  37. private YDService ydService;
  38. @Autowired
  39. private DDClient ddClient;
  40. /**
  41. * 测试地址
  42. */
  43. private String QA_sapUrl = "https://etl-nonprod-tasks.tysondt.com:443/api/1/rest/feed/run/task/TysonNonProd/Ultra_PoC/10-QA-team-fssc/tk_oa_to_sap_p2p?bearer_token=bBiGTA7PS0JJ6wKhQU8Vm0vLsIDNjLaN&interface_id=";
  44. @Override
  45. public void NonPoinsetSAP0005(String type, String InstanceId) {
  46. YDParam ydParam = _getYDTokenKPD();
  47. ydParam.setFormInstanceId(InstanceId);
  48. DDR_New ddr = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id);
  49. Map dataForm = ddr.getFormData();
  50. String paymentType = getString(dataForm, "selectField_mejfoona", "");//Type / 付款类型
  51. // 发票总额 or 支付金额
  52. String invoiceAmt = getNumberValue(dataForm, "numberField_mejfoook_value");//Invoice Amount / 发票总额
  53. String payAmt = getNumberValue(dataForm, "numberField_mejfoool_value");//Payment Amount / 支付总额(含税)
  54. String PD = formatDate(dataForm, "selectField_mj1cq2oz_id");//
  55. String SAPID = formatDate(dataForm, "textField_mejezfwk").equals("")? formatDate(dataForm, "textField_mj2gpdiu"): formatDate(dataForm, "textField_mejezfwk");
  56. // 若不需要生成 SAP 凭证,但已有 SAPID,则执行发票勾选
  57. if ("否".equals(PD) && !SAPID.isEmpty()) {
  58. FPGX(InstanceId, SAPID, getString(dataForm, "textField_mi73dy3n", ""));
  59. return;
  60. }
  61. // 只有“是”才继续处理
  62. if ("否".equals(PD)) {
  63. return;
  64. }
  65. JSONObject sapJson = new JSONObject();
  66. sapJson.put("ZDUEDATE", formatDate(dataForm, "dateField_mejfoonv"));
  67. sapJson.put("BKTXT", getString(dataForm, "textareaField_mejfoonw", ""));
  68. sapJson.put("ZOA_NUMBER", getString(dataForm, "textField_mi73dy3n", ""));
  69. sapJson.put("interface_id", "SAP005");
  70. if ("收据支付".equals(paymentType)) {
  71. sapJson.put("ZINVOICE_AMT", payAmt);
  72. } else {
  73. sapJson.put("ZINVOICE_AMT", invoiceAmt);
  74. }
  75. sapJson.put("BANKA", getString(dataForm, "textField_mejfoon9", ""));
  76. sapJson.put("BLDAT", formatDate(dataForm, "dateField_l9nsavm3"));
  77. // 获取过账人 UID
  78. String uid = getPostingUserUid(dataForm);
  79. sapJson.put("USNAM", uid);
  80. sapJson.put("BUDAT", formatDate(dataForm, "dateField_mhxdzyaa"));
  81. sapJson.put("ZOA_TYPE", "无票预付".equals(paymentType) ? "AD" : "NP");
  82. sapJson.put("ZPAY_AMT", payAmt);
  83. sapJson.put("BUKRS", getString(dataForm, "textField_mejfj9iw", ""));
  84. sapJson.put("BANKN", getString(dataForm, "textField_mejfoon8", ""));
  85. sapJson.put("WAERS", getString(dataForm, "selectField_mejfoong", ""));
  86. sapJson.put("KOINH", getString(dataForm, "textField_mejezfwl", ""));
  87. sapJson.put("LIFNR", getString(dataForm, "textField_mejezfwv", ""));
  88. // 设置凭证类型 & 构建 ITEM
  89. JSONArray itemArray = new JSONArray();
  90. if ("发票支付".equals(paymentType)) {
  91. sapJson.put("BLART", "Z2");
  92. buildInvoicePaymentItems(dataForm, "tableField_l6ujr47b", itemArray);
  93. } else if ("无票预付".equals(paymentType)) {
  94. sapJson.put("BLART", "Z4");
  95. sapJson.put("UMSKZ", "A");
  96. buildAdvancePaymentItem(dataForm, itemArray);
  97. } else if ("收据支付".equals(paymentType)) {
  98. sapJson.put("BLART", "Z2");
  99. buildReceiptPaymentItems(dataForm, "tableField_mi7c3wl9", itemArray);
  100. } else if ("100%清预付款".equals(paymentType)) {
  101. sapJson.put("BLART", "Z2");
  102. String xref1 = "", xref2 = "";
  103. List<Map<String, Object>> refList = getList(dataForm, "tableField_mi8q495e");
  104. if (refList != null && !refList.isEmpty()) {
  105. if (refList.size() == 1) {
  106. xref1 = getString(refList.get(0), "textField_mi8q495f", "");
  107. } else {
  108. refList.sort((a, b) -> {
  109. Long timeA = getDateTimestamp(a, "dateField_mj13wpls");
  110. Long timeB = getDateTimestamp(b, "dateField_mj13wpls");
  111. return Long.compare(timeB, timeA);
  112. });
  113. xref1 = getString(refList.get(0), "textField_mi8q495f", "");
  114. xref2 = getString(refList.get(1), "textField_mi8q495f", "");
  115. }
  116. }
  117. buildClearAdvanceItems(dataForm, "tableField_l6ujr47b", xref1, xref2, itemArray);
  118. }
  119. sapJson.put("ITEM", itemArray);
  120. // 调用 SAP 接口
  121. log.info("发起POST请求:URL={},参数={}", QA_sapUrl + "SAP005", sapJson);
  122. System.out.println(sapJson);
  123. String post = HttpUtil.post(QA_sapUrl + "SAP005", null, sapJson.toString(), null);
  124. log.info("{} POST反馈={}", getString(dataForm, "textField_mi73dy3n", ""), post);
  125. System.out.println("POST反馈=====" + post);
  126. handleSapResponse(post, InstanceId, dataForm, paymentType);
  127. }
  128. // === 辅助方法(全部为 private static 或局部 lambda,但 Java 不支持局部函数,故用 private 方法)===
  129. // 注意:这些方法必须定义在类中,但未扩展主逻辑
  130. private String getString(Map map, String key, String defaultValue) {
  131. Object val = map.get(key);
  132. return val instanceof String ? (String) val : defaultValue;
  133. }
  134. private String getNumberValue(Map map, String key) {
  135. Object val = map.get(key);
  136. if (val == null || "".equals(val)) return "0";
  137. return val.toString();
  138. }
  139. private Long getDateTimestamp(Map map, String key) {
  140. Object val = map.get(key);
  141. if (val instanceof Number) {
  142. return ((Number) val).longValue();
  143. }
  144. return 0L;
  145. }
  146. private String formatDate(Map map, String dateKey) {
  147. // Object val = map.get(dateKey);
  148. // if (val instanceof Long) {
  149. // return CusutUtil.getFormatDate((Long) val);
  150. // }
  151. return (String) map.get(dateKey);
  152. }
  153. @SuppressWarnings("unchecked")
  154. private List<Map<String, Object>> getList(Map map, String key) {
  155. Object val = map.get(key);
  156. if (val instanceof List) {
  157. return (List<Map<String, Object>>) val;
  158. }
  159. return null;
  160. }
  161. private String getPostingUserUid(Map dataForm) {
  162. String empId = dataForm.get("employeeField_mhxdzya9_id").toString();
  163. if (empId.isEmpty()) {
  164. return "TEST-CN001";
  165. }
  166. List<Map<String, Object>> conditions = Arrays.asList(
  167. buildCondition("textField_l6dddg5k", empId, "TEXT", "eq", "TextField")
  168. );
  169. String listJson = JSON.toJSONString(conditions);
  170. YDParam YGydParam = _getYDTokenZXXZ(listJson);
  171. DDR_New result = ydClient.queryData(YGydParam, YDConf.FORM_QUERY.retrieve_search_form);
  172. List<Map> dataList = (List<Map>) result.getData();
  173. if (dataList != null && !dataList.isEmpty()) {
  174. Map formData = (Map) dataList.get(0).get("formData");
  175. Object uidObj = formData.get("textField_l6djch1m");
  176. if (uidObj != null) {
  177. return "CHN-0" + uidObj.toString();
  178. }
  179. }
  180. return "TEST-CN001";
  181. }
  182. private void buildInvoicePaymentItems(Map dataForm, String tableKey, JSONArray itemArray) {
  183. buildCommonItems(dataForm, tableKey, itemArray, true, "", "");
  184. }
  185. private void buildReceiptPaymentItems(Map dataForm, String tableKey, JSONArray itemArray) {
  186. buildCommonItems(dataForm, tableKey, itemArray, false, "", "");
  187. }
  188. private void buildClearAdvanceItems(Map dataForm, String tableKey, String xref1, String xref2, JSONArray itemArray) {
  189. buildCommonItems(dataForm, tableKey, itemArray, true, xref1, xref2);
  190. }
  191. private void buildCommonItems(Map dataForm, String tableKey, JSONArray itemArray, boolean hasTax, String xref1, String xref2) {
  192. List<Map<String, Object>> rows = getList(dataForm, tableKey);
  193. if (rows == null || rows.isEmpty()) return;
  194. int index = 1;
  195. for (Map<String, Object> row : rows) {
  196. JSONObject item = new JSONObject();
  197. item.put("KOSTL", getString(row, "textField_mi5kjmwk", ""));
  198. item.put("DMBTR", getNumberValue(row, "numberField_l6ujr47g_value"));
  199. item.put("XREF1", xref1);
  200. if (!xref2.isEmpty()) {
  201. item.put("XREF2", xref2);
  202. }
  203. item.put("ZOA_ITEMNO", formatItemNo(index++));
  204. item.put("HKONT", getString(row, "textField_l6lvt6lj", ""));
  205. item.put("ZTAXOUT_AMT", "0");
  206. item.put("MWSKZ", hasTax ? getString(row, "textField_l7a6bzpv", "") : "");
  207. item.put("ZTAX_AMT", hasTax ? getNumberValue(row, "numberField_l6vu65fp_value") : "0");
  208. item.put("SGTXT", getString(row, "textField_mejfoonz", ""));
  209. itemArray.add(item);
  210. }
  211. }
  212. private void buildAdvancePaymentItem(Map dataForm, JSONArray itemArray) {
  213. JSONObject item = new JSONObject();
  214. item.put("ZOA_ITEMNO", "001");
  215. item.put("HKONT", "");
  216. item.put("KOSTL", "");
  217. item.put("MWSKZ", "");
  218. item.put("ZTAX_AMT", "0");
  219. item.put("ZTAXOUT_AMT", "0");
  220. item.put("SGTXT", "");
  221. String payAmtStr = getNumberValue(dataForm, "numberField_mejfoool_value");
  222. try {
  223. BigDecimal amt = new BigDecimal(payAmtStr).setScale(2, RoundingMode.HALF_UP);
  224. item.put("DMBTR", amt);
  225. } catch (Exception e) {
  226. item.put("DMBTR", "0");
  227. }
  228. item.put("XREF1", getString(dataForm, "textareaField_mejfoonw", ""));
  229. itemArray.add(item);
  230. }
  231. private String formatItemNo(int index) {
  232. if (index < 10) return "00" + index;
  233. if (index < 100) return "0" + index;
  234. return String.valueOf(index);
  235. }
  236. private void handleSapResponse(String post, String instanceId, Map dataForm, String paymentType) {
  237. if (post == null || post.trim().isEmpty()) {
  238. updateFormStatus(instanceId, post, "失败");
  239. return;
  240. }
  241. try {
  242. JSONArray jsonArray = new JSONArray(post);
  243. if (jsonArray.isEmpty()) {
  244. updateFormStatus(instanceId, "Empty response", "失败");
  245. return;
  246. }
  247. cn.hutool.json.JSONObject resp = jsonArray.getJSONObject(0);
  248. String msgType = resp.getStr("E_SYSMSGTYPE");
  249. String message = resp.getStr("E_MESSAGE");
  250. if ("S".equals(msgType)) {
  251. String e_belnr = resp.getStr("E_BELNR");
  252. if (e_belnr != null && e_belnr.contains(";")) {
  253. e_belnr = e_belnr.split(";")[0];
  254. }
  255. String year = resp.getStr("E_GJAHR");
  256. updateFormStatus(instanceId, year, e_belnr, message, "成功");
  257. if ("发票支付".equals(paymentType)) {
  258. FPGX(instanceId, e_belnr, getString(dataForm, "textField_mi73dy3n", ""));
  259. }
  260. } else {
  261. updateFormStatus(instanceId, message, "失败");
  262. }
  263. } catch (Exception ex) {
  264. log.error("解析 SAP 响应失败", ex);
  265. updateFormStatus(instanceId, "Response parse error: " + ex.getMessage(), "失败");
  266. }
  267. }
  268. private void updateFormStatus(String instanceId, String field1, String field2, String field3, String status) {
  269. ydClient.operateData(
  270. YDParam.builder()
  271. .appType("APP_N9NPHVTQLPBPO8MR6WFG")
  272. .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
  273. .formInstanceId(instanceId)
  274. .updateFormDataJson(JSON.toJSONString(UtilMap.map(
  275. "textField_l9nsavm2, textField_mejezfwk, textareaField_mi5kjmxb, selectField_mi72r4s6",
  276. field1, field2, field3, status)))
  277. .build(),
  278. YDConf.FORM_OPERATION.update
  279. );
  280. }
  281. private void updateFormStatus(String instanceId, String message, String status) {
  282. ydClient.operateData(
  283. YDParam.builder()
  284. .appType("APP_N9NPHVTQLPBPO8MR6WFG")
  285. .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
  286. .formInstanceId(instanceId)
  287. .updateFormDataJson(JSON.toJSONString(UtilMap.map(
  288. "textareaField_mi5kjmxb, selectField_mi72r4s6",
  289. message, status)))
  290. .build(),
  291. YDConf.FORM_OPERATION.update
  292. );
  293. }
  294. // @Override
  295. // public void NonPoinsetSAP0005(String type, String InstanceId) {
  296. // YDParam ydParam = _getYDTokenKPD();
  297. // ydParam.setFormInstanceId(InstanceId);
  298. // DDR_New ddr = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id);
  299. // Map dataForm = ddr.getFormData();
  300. // // dataForm.put("InstanceId", InstanceId);
  301. // JSONObject sapJson = new JSONObject();
  302. // JSONObject upJson = new JSONObject();
  303. // String PD = (String) dataForm.get("radioField_mj13wplt");//是否生成SAP凭证
  304. // String SAPID = (String) dataForm.get("textField_mejezfwk");//SAP凭证号码
  305. ///**
  306. // * 是否需要生成SAP凭证
  307. // */
  308. // if (PD.equals("是")) {
  309. //
  310. // // 添加顶级键值对
  311. // sapJson.put("ZDUEDATE", CusutUtil.getFormatDate((Long) dataForm.get("dateField_mejfoonv"))); //Due date / 到期日
  312. // sapJson.put("BKTXT", dataForm.get("textareaField_mejfoonw"));//备注 抬头文本
  313. // sapJson.put("ZOA_NUMBER", dataForm.get("textField_mi73dy3n")); //钉钉单据号
  314. // if (dataForm.get("selectField_mejfoona").equals("收据支付")) {//☑ 票据支付时 代码ZINVOICE_AMT 默认ZPAY_AMT的值
  315. // sapJson.put("ZINVOICE_AMT", dataForm.get("numberField_mejfoool_value").equals("") ? "0" : dataForm.get("numberField_mejfoool_value"));//支付金额
  316. // } else {
  317. // sapJson.put("ZINVOICE_AMT", dataForm.get("numberField_mejfoook_value").equals("") ? "0" : dataForm.get("numberField_mejfoook_value"));//发票总额
  318. // }
  319. //
  320. // sapJson.put("BANKA", dataForm.get("textField_mejfoon9")); //开户行
  321. // sapJson.put("BLDAT", CusutUtil.getFormatDate((Long) dataForm.get("dateField_l9nsavm3"))); //凭证日期ƒ Date / 申请日期
  322. // String uid = "TEST-CN001";
  323. // String uname = "";
  324. // if (!dataForm.get("employeeField_mhxdzya9_id").equals("")) {
  325. //
  326. // List<Map<String, Object>> conditions = new ArrayList<>(Arrays.asList(buildCondition("textField_l6dddg5k", dataForm.get("employeeField_mhxdzya9_id"), "TEXT", "eq", "TextField")));
  327. // String listJson = JSON.toJSONString(conditions);
  328. // YDParam YGydParam = _getYDTokenZXXZ(listJson);
  329. // List<Map> dataList = (List<Map>) ydClient.queryData(YGydParam, YDConf.FORM_QUERY.retrieve_search_form).getData();
  330. // if (dataList != null && dataList.size() > 0) {
  331. // Map map = dataList.get(0);
  332. // Map formData = (Map) map.get("formData");
  333. // uid = formData.get("textField_l6djch1m").toString();
  334. // uid = "CHN-0" + uid;
  335. // }
  336. // }
  337. // // uid = "CHN-01000332";//测试过账人
  338. // sapJson.put("USNAM", uid); //过账人
  339. // sapJson.put("BUDAT", CusutUtil.getFormatDate((Long) dataForm.get("dateField_mhxdzyaa"))); //过账日期
  340. // sapJson.put("ZOA_TYPE", dataForm.get("selectField_mejfoona").equals("无票预付") ? "AD" : "NP");//OA单据类型
  341. // sapJson.put("ZPAY_AMT", dataForm.get("numberField_mejfoool_value").equals("") ? "0" : dataForm.get("numberField_mejfoool_value")); //支付金额
  342. // sapJson.put("BUKRS", dataForm.get("textField_mejfj9iw"));//公司代码
  343. // sapJson.put("BANKN", dataForm.get("textField_mejfoon8")); //银行账号
  344. // sapJson.put("WAERS", dataForm.get("selectField_mejfoong")); //币种
  345. // sapJson.put("KOINH", dataForm.get("textField_mejezfwl")); //收款方名称
  346. // sapJson.put("LIFNR", dataForm.get("textField_mejezfwv"));//供应商代码
  347. // sapJson.put("interface_id", "SAP005");
  348. // //获取子表
  349. // if (dataForm.get("selectField_mejfoona").equals("发票支付")) {
  350. // sapJson.put("BLART", "Z2");//凭证类型
  351. // JSONArray itemArray = new JSONArray();
  352. // int x = 1;//OA单据行号累计用
  353. // List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_l6ujr47b");
  354. // if (tableFils != null && tableFils.size() > 0) {
  355. // for (int n = 0; n < tableFils.size(); n++) {
  356. // Map<String, Object> row = new HashMap(tableFils.get(n));
  357. //
  358. //
  359. // JSONObject itemObj = new JSONObject();
  360. // itemObj.put("KOSTL", String.valueOf(row.get("textField_mi5kjmwk"))); //成本中心
  361. // itemObj.put("DMBTR", String.valueOf(row.get("numberField_l6ujr47g_value"))); //不含税金额
  362. // itemObj.put("XREF1", "");//参考码 9000242
  363. //
  364. // String sjItemNo = "";
  365. // if (x < 10) {
  366. // sjItemNo += "00" + x;
  367. // } else if (x < 100) {
  368. // sjItemNo += "0" + x;
  369. // } else {
  370. // sjItemNo += x;
  371. // }
  372. // x++;
  373. // itemObj.put("ZOA_ITEMNO", sjItemNo);//OA单据行号
  374. // itemObj.put("HKONT", String.valueOf(row.get("textField_l6lvt6lj"))); //会计科目
  375. // itemObj.put("ZTAXOUT_AMT", "0");//进项税转出金额 、、、 String.valueOf(row.get("numberField_l6bx7hqk_value"))
  376. // itemObj.put("MWSKZ", String.valueOf(row.get("textField_l7a6bzpv")));///税码
  377. // itemObj.put("ZTAX_AMT", String.valueOf(row.get("numberField_l6vu65fp_value")).equals("") ? "0" : String.valueOf(row.get("numberField_l6vu65fp_value"))); //税额
  378. // itemObj.put("SGTXT", String.valueOf(row.get("textField_mejfoonz"))); //行项目文本
  379. //
  380. //
  381. // itemArray.put(itemObj);
  382. // }
  383. //
  384. //
  385. // }
  386. //
  387. // sapJson.put("ITEM", itemArray);
  388. // } else if (dataForm.get("selectField_mejfoona").equals("无票预付")) {
  389. //
  390. // sapJson.put("BLART", "Z4");//凭证类型
  391. // sapJson.put("UMSKZ", "A");//特别总账标识
  392. // JSONArray SapItem = new JSONArray(); //子表
  393. // JSONObject itemObject = new JSONObject();
  394. // itemObject.put("ZOA_ITEMNO", "001"); //OA单据行号
  395. // itemObject.put("HKONT", ""); //会计科目
  396. // itemObject.put("KOSTL", ""); //成本中心
  397. // BigDecimal bigBhsje = new BigDecimal(dataForm.get("numberField_mejfoool_value").toString());//改大数
  398. // bigBhsje = bigBhsje.setScale(2, RoundingMode.HALF_UP);
  399. // itemObject.put("DMBTR", bigBhsje); //不含税金额
  400. //
  401. //// itemObject.put("DMBTR", object.get("numberField_l6bwb4hg").toString()); //不含税金额--支付金额
  402. // itemObject.put("MWSKZ", ""); //税码
  403. // itemObject.put("ZTAX_AMT", "0"); //税额
  404. // itemObject.put("ZTAXOUT_AMT", "0"); //进项税转出金额
  405. // itemObject.put("SGTXT", ""); //行项目文本
  406. // itemObject.put("XREF1", dataForm.get("textareaField_mejfoonw")); //cir项目号
  407. //
  408. // SapItem.put(itemObject);
  409. // sapJson.put("ITEM", SapItem);
  410. // } else if (dataForm.get("selectField_mejfoona").equals("收据支付")) {
  411. //
  412. // sapJson.put("BLART", "Z2");//凭证类型
  413. // JSONArray itemArray = new JSONArray();
  414. // int x = 1;//OA单据行号累计用
  415. // List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_mi7c3wl9");
  416. // if (tableFils != null && tableFils.size() > 0) {
  417. // for (int n = 0; n < tableFils.size(); n++) {
  418. // Map<String, Object> row = new HashMap(tableFils.get(n));
  419. // JSONObject itemObj = new JSONObject();
  420. // itemObj.put("KOSTL", String.valueOf(row.get("textField_mi7c3wku"))); //成本中心
  421. // itemObj.put("DMBTR", String.valueOf(row.get("numberField_mi7c3wky_value"))); //不含税金额
  422. // itemObj.put("XREF1", "");//参考码 9000242
  423. // String sjItemNo = "";
  424. // if (x < 10) {
  425. // sjItemNo += "00" + x;
  426. // } else if (x < 100) {
  427. // sjItemNo += "0" + x;
  428. // } else {
  429. // sjItemNo += x;
  430. // }
  431. // x++;
  432. // itemObj.put("ZOA_ITEMNO", sjItemNo);//OA单据行号
  433. // itemObj.put("HKONT", String.valueOf(row.get("textField_mi7c3wl5"))); //会计科目
  434. // itemObj.put("ZTAXOUT_AMT", "0");//进项税转出金额 、、、 String.valueOf(row.get("numberField_l6bx7hqk_value"))
  435. // itemObj.put("MWSKZ", "");///税码
  436. // itemObj.put("ZTAX_AMT", "0"); //税额
  437. // itemObj.put("SGTXT", String.valueOf(row.get("textField_mi7c3wkn"))); //行项目文本
  438. // itemArray.put(itemObj);
  439. // }
  440. //
  441. // }
  442. // sapJson.put("ITEM", itemArray);
  443. // } else if (dataForm.get("selectField_mejfoona").equals("100%清预付款")) {
  444. // String XREF1 = "";
  445. // String XREF2 = "";
  446. // /***
  447. // * 获取参考代码1 2
  448. // */
  449. //
  450. // List<Map<String, Object>> XREFlist = (List<Map<String, Object>>) dataForm.get("tableField_mi8q495e");
  451. //
  452. // if (XREFlist != null && !XREFlist.isEmpty()) {
  453. // if (XREFlist.size() == 1) {
  454. // Map<String, Object> row = XREFlist.get(0);
  455. // XREF1 = row.get("textField_mi5kjmwk") != null ? row.get("textField_mi5kjmwk").toString() : "";
  456. // } else {
  457. // // 多于一条,按时间戳降序排序
  458. // XREFlist.sort((a, b) -> {
  459. // Long timeA = a.get("dateField_mj13wpls") instanceof Number
  460. // ? ((Number) a.get("dateField_mj13wpls")).longValue()
  461. // : 0L;
  462. // Long timeB = b.get("dateField_mj13wpls") instanceof Number
  463. // ? ((Number) b.get("dateField_mj13wpls")).longValue()
  464. // : 0L;
  465. // return Long.compare(timeB, timeA); // 降序:最新在前
  466. // });
  467. //
  468. // // 取前两条
  469. // XREF1 = XREFlist.get(0).get("textField_mi5kjmwk") != null
  470. // ? XREFlist.get(0).get("textField_mi5kjmwk").toString() : "";
  471. // XREF2 = XREFlist.get(1).get("textField_mi5kjmwk") != null
  472. // ? XREFlist.get(1).get("textField_mi5kjmwk").toString() : "";
  473. // }
  474. // }
  475. //
  476. //
  477. // sapJson.put("BLART", "Z2");//凭证类型
  478. // JSONArray itemArray = new JSONArray();
  479. // int x = 1;//OA单据行号累计用
  480. // List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_l6ujr47b");
  481. // if (tableFils != null && tableFils.size() > 0) {
  482. // for (int n = 0; n < tableFils.size(); n++) {
  483. // Map<String, Object> row = new HashMap(tableFils.get(n));
  484. //
  485. //
  486. // JSONObject itemObj = new JSONObject();
  487. // itemObj.put("KOSTL", String.valueOf(row.get("textField_mi5kjmwk"))); //成本中心
  488. // itemObj.put("DMBTR", String.valueOf(row.get("numberField_l6ujr47g_value"))); //不含税金额
  489. // itemObj.put("XREF1", XREF1);//参考码1
  490. // itemObj.put("XREF2", XREF2);//参考码2
  491. // String sjItemNo = "";
  492. // if (x < 10) {
  493. // sjItemNo += "00" + x;
  494. // } else if (x < 100) {
  495. // sjItemNo += "0" + x;
  496. // } else {
  497. // sjItemNo += x;
  498. // }
  499. // x++;
  500. // itemObj.put("ZOA_ITEMNO", sjItemNo);//OA单据行号
  501. // itemObj.put("HKONT", String.valueOf(row.get("textField_l6lvt6lj"))); //会计科目
  502. // itemObj.put("ZTAXOUT_AMT", "0");//进项税转出金额 、、、 String.valueOf(row.get("numberField_l6bx7hqk_value"))
  503. // itemObj.put("MWSKZ", String.valueOf(row.get("textField_l7a6bzpv")));///税码
  504. // itemObj.put("ZTAX_AMT", String.valueOf(row.get("numberField_l6vu65fp_value")).equals("") ? "0" : String.valueOf(row.get("numberField_l6vu65fp_value"))); //税额
  505. // itemObj.put("SGTXT", String.valueOf(row.get("textField_mejfoonz"))); //行项目文本
  506. //
  507. //
  508. // itemArray.put(itemObj);
  509. // }
  510. //
  511. //
  512. // }
  513. //
  514. // sapJson.put("ITEM", itemArray);
  515. // }
  516. //
  517. //
  518. // /***
  519. // * 调用接口
  520. // */
  521. // System.out.println(sapJson);
  522. // log.info("发起POST请求:URL={},参数={}", QA_sapUrl + "SAP005", sapJson);
  523. // String post = HttpUtil.post(QA_sapUrl + "SAP005", null, sapJson.toString(), null);
  524. // log.info(dataForm.get("textField_mi73dy3n") + "POST反馈={}", post);
  525. // System.out.println("POST反馈=====" + post);
  526. // if (!post.equals("")) {
  527. // JSONArray jsonArray = new JSONArray(post);
  528. // if (jsonArray.size() > 0) {
  529. // String voucherNumber = "";
  530. // try {
  531. // cn.hutool.json.JSONObject postJsonObject = jsonArray.getJSONObject(0);
  532. // String E_SYSMSGTYPE = postJsonObject.getStr("E_SYSMSGTYPE");//状态
  533. // String E_MESSAGE = postJsonObject.getStr("E_MESSAGE");//SAP005 接口 反馈值
  534. // if (E_SYSMSGTYPE.equals("S")) {
  535. // String e_belnr = postJsonObject.getStr("E_BELNR");
  536. // if (e_belnr.contains(";")) {
  537. // String[] split = e_belnr.split(";");
  538. // try {
  539. // e_belnr = split[0];//+ ";";
  540. // } catch (Exception ex) {
  541. // e_belnr = ";";
  542. // }
  543. //
  544. // }
  545. // voucherNumber = e_belnr;
  546. // String E_GJAHR = postJsonObject.getStr("E_GJAHR");//凭证年度
  547. // // 执行完加入,把更改表单凭证数据
  548. // ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(InstanceId)).updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_l9nsavm2, textField_mejezfwk, textareaField_mi5kjmxb, selectField_mi72r4s6", E_GJAHR, e_belnr, E_MESSAGE, "成功"))).build(), YDConf.FORM_OPERATION.update);
  549. //
  550. // /**
  551. // * 执行勾选发票
  552. // */
  553. // if (dataForm.get("selectField_mejfoona").equals("发票支付")) {
  554. // FPGX(InstanceId, voucherNumber, (String) dataForm.get("textField_mi73dy3n"));
  555. // }
  556. // } else {
  557. // // 报错写入
  558. // ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(InstanceId)).updateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_mi5kjmxb, selectField_mi72r4s6", E_MESSAGE, "失败"))).build(), YDConf.FORM_OPERATION.update);
  559. //
  560. // }
  561. //
  562. //
  563. // } catch (Exception ex) {
  564. // }
  565. // } else {
  566. //
  567. //
  568. // }
  569. //
  570. // } else {
  571. //
  572. // // 报错写入
  573. // ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(InstanceId)).updateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_mi5kjmxb, selectField_mi72r4s6", post, "失败"))).build(), YDConf.FORM_OPERATION.update);
  574. //
  575. // }
  576. // } else if (PD.equals("否") && !SAPID.equals("")) {
  577. // FPGX(InstanceId, SAPID, (String) dataForm.get("textField_mi73dy3n"));
  578. // }
  579. //
  580. //
  581. // }
  582. /***
  583. * 发票勾选处理
  584. * @param InstanceId
  585. * @param voucherNumber
  586. */
  587. @Override
  588. public void FPGX(String InstanceId, String voucherNumber, String OAnumber) {
  589. try {
  590. YDParam ydParam = _getYDTokenKPD();
  591. ydParam.setFormInstanceId(InstanceId);
  592. DDR_New ddr = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id);
  593. Map dataForm = ddr.getFormData();
  594. @SuppressWarnings("unchecked")
  595. List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_l6ujr47b");
  596. if (tableFils == null || tableFils.isEmpty()) {
  597. return;
  598. }
  599. String nowDate = CusutUtil.getNowDate();
  600. Map<String, Object> request = new LinkedHashMap<>();
  601. request.put("voucherNumber", voucherNumber);
  602. request.put("voucherstatus", "0");
  603. request.put("voucherdate", nowDate);
  604. request.put("applytime", nowDate);
  605. request.put("bookeepflag", "1");
  606. request.put("syssource", "第三方系统规定");
  607. JSONArray invoices = new JSONArray();
  608. List<String> ids = new ArrayList<>();
  609. for (Map<String, Object> row : tableFils) {
  610. Object instanceIdObj = row.get("textField_mi1l1tcc");
  611. if (instanceIdObj == null) continue;
  612. String instanceId = instanceIdObj.toString();
  613. // 查询发票详情
  614. DDR_New invoiceDdr = ydClient.queryData(
  615. YDParam.builder()
  616. .appType("APP_N9NPHVTQLPBPO8MR6WFG")
  617. .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
  618. .formUuid("FORM-4J7669A1Z1X22RIL61LB7AOXGRX82OHP45U6L51")
  619. .formInstanceId(instanceId)
  620. .build(),
  621. YDConf.FORM_QUERY.retrieve_id
  622. );
  623. Map formdata = invoiceDdr.getFormData();
  624. if (formdata == null) continue;
  625. ids.add(instanceId);
  626. Map<String, Object> invoice = new LinkedHashMap<>();
  627. invoice.put("taxno", safeGetString(formdata, "textField_l6u55vdn"));
  628. String fpType = safeGetString(formdata, "textField_l6u55vd8");
  629. invoice.put("invoicecode", fpType.contains("全电") ? "全电发票" : safeGetString(formdata, "textField_l6u55vd9"));
  630. invoice.put("invoicenumber", safeGetString(formdata, "textField_l6u55vd3"));
  631. invoice.put("usetax", safeGetString(formdata, "textField_l6vu65fs"));
  632. // 税率处理
  633. String taxRateStr = safeGetString(formdata, "textField_l6vvuq3f");
  634. double taxRate = 0.0;
  635. if (!taxRateStr.isEmpty()) {
  636. try {
  637. if (taxRateStr.endsWith("%")) {
  638. taxRate = Double.parseDouble(taxRateStr.substring(0, taxRateStr.lastIndexOf('%'))) / 100.0;
  639. } else {
  640. taxRate = Double.parseDouble(taxRateStr) / 100.0;
  641. }
  642. } catch (NumberFormatException ignored) {
  643. taxRate = 0.0;
  644. }
  645. }
  646. invoice.put("taxrate", taxRate);
  647. invoice.put("autodeduct", "1");
  648. invoice.put("oper", "1");
  649. invoices.add(invoice);
  650. }
  651. if (invoices.isEmpty()) {
  652. return;
  653. }
  654. request.put("invoices", invoices);
  655. List<Map<String, Object>> requestList = Collections.singletonList(request);
  656. String jsonBody = new ObjectMapper().writeValueAsString(requestList);
  657. System.out.println(jsonBody);
  658. RestTemplate restTemplate = new RestTemplate();
  659. String PROXY_URL = "https://poc.cloudpure.cn/api/ts/bookkeeping";
  660. HttpHeaders headers = new HttpHeaders();
  661. headers.setContentType(MediaType.APPLICATION_JSON);
  662. HttpEntity<String> entity = new HttpEntity<>(jsonBody, headers);
  663. ResponseEntity<String> response = restTemplate.postForEntity(PROXY_URL, entity, String.class);
  664. String responseBody = response.getBody();
  665. if (responseBody == null) {
  666. updateMainFormError(InstanceId, "Empty response from bookkeeping API");
  667. return;
  668. }
  669. ObjectMapper objectMapper = new ObjectMapper();
  670. JsonNode rootNode = objectMapper.readTree(responseBody);
  671. JsonNode dataArray = rootNode.path("data");
  672. String code = rootNode.path("code").asText();
  673. if ("0000".equals(code) && dataArray.isArray() && dataArray.size() > 0) {
  674. List<Map> updatedRows = new ArrayList<>();
  675. for (int i = 0; i < tableFils.size(); i++) {
  676. Map<String, Object> originalRow = tableFils.get(i);
  677. String fpInstanceId = safeGetString(originalRow, "textField_mi1l1tcc");
  678. String invoiceNoInTable = safeGetString(originalRow, "textField_l6ujr47c");
  679. String status = "不相关";
  680. String returnMsg = "";
  681. // 匹配返回的发票结果
  682. for (JsonNode item : dataArray) {
  683. String respInvoiceNo = item.path("invoicenumber").asText();
  684. returnMsg = item.path("returnmsg").asText();
  685. if (respInvoiceNo.equals(invoiceNoInTable) && !returnMsg.contains("未同步到该发票信息")) {
  686. status = "已勾选";
  687. break;
  688. }
  689. }
  690. // 构建更新后的行数据
  691. Map<String, Object> updatedRow = new HashMap<>(originalRow);
  692. updatedRow.put("selectField_mgz2tut4", status);
  693. updatedRow.put("textareaField_mi5kjmxc", returnMsg);
  694. // 保留级联字段原始ID(防止丢失)
  695. Object cascadeId = originalRow.get("cascadeSelectField_mejfoony_id");
  696. if (cascadeId != null) {
  697. updatedRow.put("cascadeSelectField_mejfoony", cascadeId);
  698. }
  699. updatedRows.add(updatedRow);
  700. // 更新发票子表单状态
  701. Map<String, Object> fpUpdateMap = new HashMap<>();
  702. fpUpdateMap.put("textField_l7efm5az", status);
  703. fpUpdateMap.put("textField_l7efm5ay", "是");
  704. fpUpdateMap.put("textField_lz0v4x8o", voucherNumber);
  705. fpUpdateMap.put("textField_lz0v4x8p", OAnumber);
  706. ydClient.operateData(
  707. YDParam.builder()
  708. .appType("APP_N9NPHVTQLPBPO8MR6WFG")
  709. .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
  710. .formInstanceId(fpInstanceId)
  711. .updateFormDataJson(JSON.toJSONString(fpUpdateMap))
  712. .build(),
  713. YDConf.FORM_OPERATION.update
  714. );
  715. }
  716. // 更新主表单
  717. Map<String, Object> mainUpdate = new HashMap<>();
  718. mainUpdate.put("tableField_l6ujr47b", updatedRows);
  719. mainUpdate.put("textareaField_mi7et0wm", rootNode.toString());
  720. ydClient.operateData(
  721. YDParam.builder()
  722. .appType("APP_N9NPHVTQLPBPO8MR6WFG")
  723. .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
  724. .formInstanceId(InstanceId)
  725. .updateFormDataJson(JSON.toJSONString(mainUpdate))
  726. .build(),
  727. YDConf.FORM_OPERATION.update
  728. );
  729. } else {
  730. // 接口调用失败或无有效数据
  731. updateMainFormError(InstanceId, rootNode.toString());
  732. }
  733. } catch (Exception ex) {
  734. ex.printStackTrace();
  735. updateMainFormError(InstanceId, "Exception: " + ex.getMessage());
  736. }
  737. }
  738. // === 内联辅助逻辑(以局部方法形式模拟,实际用 private 方法,但按要求不扩展 => 改为内联表达式)===
  739. // 因不能新增方法,以下逻辑直接内联,但为清晰起见,此处用注释说明“安全获取”逻辑:
  740. // 实际替换为:(map.get(key) instanceof String ? (String) map.get(key) : "")
  741. private String safeGetString(Map map, String key) {
  742. Object val = map.get(key);
  743. return val instanceof String ? (String) val : "";
  744. }
  745. private void updateMainFormError(String instanceId, String errorMsg) {
  746. ydClient.operateData(
  747. YDParam.builder()
  748. .appType("APP_N9NPHVTQLPBPO8MR6WFG")
  749. .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
  750. .formInstanceId(instanceId)
  751. .updateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_mi7et0wm", errorMsg)))
  752. .build(),
  753. YDConf.FORM_OPERATION.update
  754. );
  755. }
  756. // @Override
  757. // public void FPGX(String InstanceId, String voucherNumber, String OAnumber) {
  758. // YDParam ydParam = _getYDTokenKPD();
  759. // ydParam.setFormInstanceId(InstanceId);
  760. // DDR_New ddr = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id);
  761. // Map dataForm = ddr.getFormData();
  762. // try {
  763. // String nowDate = CusutUtil.getNowDate();
  764. // List<Map<String, Object>> requestList = new ArrayList<>();
  765. // Map<String, Object> request = new LinkedHashMap<>();
  766. // JSONArray invoices = new JSONArray();
  767. // ArrayList<String> ids = new ArrayList<>();
  768. // request.put("voucherNumber", voucherNumber);
  769. // request.put("voucherstatus", "0");
  770. // request.put("voucherdate", nowDate);
  771. // request.put("applytime", nowDate);
  772. // request.put("bookeepflag", "1");
  773. // request.put("syssource", "第三方系统规定");
  774. // List<Map> list = new ArrayList<>();
  775. // List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_l6ujr47b");
  776. // if (tableFils != null && tableFils.size() > 0) {
  777. // list = (List<Map>) dataForm.get("tableField_l6ujr47b");
  778. // for (int n = 0; n < tableFils.size(); n++) {
  779. //
  780. // Map<String, Object> row = new HashMap(tableFils.get(n));
  781. // Map<Object, Object> invoice = new LinkedHashMap<>();
  782. //// String substring = row.getString("associationFormField_l6yglav7_id").replaceAll("\\\\", "").substring(1);
  783. // String instanceId = row.get("textField_mi1l1tcc").toString();
  784. //
  785. // Map formdata = ydClient.queryData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formUuid("FORM-4J7669A1Z1X22RIL61LB7AOXGRX82OHP45U6L51").formInstanceId(instanceId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
  786. // if (formdata != null) {
  787. // ids.add(instanceId);
  788. // JSONObject jsonObject = new JSONObject();
  789. // invoice.put("taxno", formdata.get("textField_l6u55vdn"));
  790. // if (formdata.get("textField_l6u55vd8").toString().contains("全电")) {
  791. // invoice.put("invoicecode", "全电发票");
  792. // } else {
  793. // invoice.put("invoicecode", formdata.get("textField_l6u55vd9"));
  794. // }
  795. // invoice.put("invoicenumber", formdata.get("textField_l6u55vd3"));
  796. // invoice.put("usetax", formdata.get("textField_l6vu65fs").toString());
  797. // try {
  798. // if (!formdata.containsKey("textField_l6vvuq3f") || formdata.get("textField_l6vvuq3f").equals("")) {
  799. // formdata.remove("textField_l6vvuq3f");
  800. // formdata.put("textField_l6vvuq3f", "0");
  801. // }
  802. // invoice.put("taxrate", Double.parseDouble(formdata.get("textField_l6vvuq3f").toString().substring(0, formdata.get("textField_l6vvuq3f").toString().lastIndexOf("%"))) / 100);
  803. // } catch (Exception ex) {
  804. // try {
  805. // invoice.put("taxrate", Double.parseDouble(formdata.get("textField_l6vvuq3f").toString()) / 100);
  806. // } catch (Exception ex2) {
  807. // invoice.put("taxrate", 0);
  808. // }
  809. // }
  810. // invoice.put("autodeduct", "1");
  811. // invoice.put("oper", "1");
  812. // jsonObject.toString();
  813. // invoices.put(invoice);
  814. // request.put("invoices", invoices);
  815. // }
  816. //
  817. // }
  818. // requestList.add(request);
  819. // String jsonBody = new ObjectMapper().writeValueAsString(requestList);
  820. // System.out.println(jsonBody.toString());
  821. // RestTemplate restTemplate = new RestTemplate();
  822. // String PROXY_URL = "https://poc.cloudpure.cn/api/ts/bookkeeping";
  823. // HttpHeaders headers = new HttpHeaders();
  824. // headers.setContentType(MediaType.APPLICATION_JSON);
  825. // ResponseEntity<String> response = restTemplate.postForEntity(PROXY_URL, new HttpEntity<>(jsonBody, headers), String.class);
  826. //
  827. // String responseBody = response.getBody();
  828. // try {
  829. // ObjectMapper objectMapper = new ObjectMapper();
  830. // JsonNode rootNode = objectMapper.readTree(responseBody);
  831. // ArrayList<Map> maps_YD = new ArrayList<>();
  832. // HashMap map = new HashMap();
  833. // // 获取 data 数组
  834. // JsonNode dataArray = rootNode.get("data");
  835. // String code = String.valueOf(rootNode.get("code"));
  836. // // 循环遍历 data 数组
  837. // if (dataArray.size() > 0 && code.equals("\"0000\"")) {
  838. //
  839. // for (int i = 0; i < list.size(); i++) {
  840. // Map sss2 = (Map) list.get(i);
  841. // String pd = (String) sss2.get("selectField_mgz2tut4");//发票是否勾选?
  842. // String fpidInstanceId = (String) sss2.get("textField_mi1l1tcc");//发票实例ID
  843. //
  844. // String returnMsg = "";
  845. // for (JsonNode dataItem : dataArray) {
  846. // returnMsg = dataItem.get("returnmsg").asText();
  847. // String invoicenumber = dataItem.get("invoicenumber").asText();
  848. // if (invoicenumber.equals(sss2.get("textField_l6ujr47c")) && !returnMsg.equals("未同步到该发票信息,请先进行同步发票操作!")) {
  849. // pd = "已勾选";
  850. // } else {
  851. // pd = "不相关";
  852. // }
  853. // }
  854. // sss2.put("cascadeSelectField_mejfoony", list.get(i).get("cascadeSelectField_mejfoony_id"));
  855. // sss2.put("selectField_mgz2tut4", pd);
  856. // sss2.put("textareaField_mi5kjmxc", returnMsg);
  857. // maps_YD.add(sss2);
  858. // //更改发票信息
  859. // HashMap FPMAP = new HashMap();
  860. // FPMAP.put("textField_l7efm5az", pd);
  861. // FPMAP.put("textField_l7efm5ay", "是");
  862. // FPMAP.put("textField_lz0v4x8o", voucherNumber);
  863. // FPMAP.put("textField_lz0v4x8p", OAnumber);
  864. // ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(fpidInstanceId)).updateFormDataJson(JSON.toJSONString(FPMAP)).build(), YDConf.FORM_OPERATION.update);
  865. // }
  866. // map.put("tableField_l6ujr47b", maps_YD);
  867. // map.put("textareaField_mi7et0wm", rootNode);
  868. // ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(InstanceId)).updateFormDataJson(JSON.toJSONString(map)).build(), YDConf.FORM_OPERATION.update);
  869. //
  870. // } else {
  871. //
  872. // // 报错写入
  873. // ydClient.operateData(YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formInstanceId(String.valueOf(InstanceId)).updateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_mi7et0wm", rootNode))).build(), YDConf.FORM_OPERATION.update);
  874. //
  875. //
  876. // }
  877. //
  878. // } catch (Exception e) {
  879. // e.printStackTrace();
  880. // }
  881. //
  882. //
  883. // }
  884. //
  885. // } catch (Exception ex) {
  886. // ex.printStackTrace();
  887. // System.out.println(ex);
  888. // }
  889. //
  890. // }
  891. public YDParam _getYDTokenKPD() {
  892. /**
  893. * 泰森付款
  894. */
  895. return YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").build();
  896. }
  897. /**
  898. * 泰森付款 人员档案表
  899. */
  900. public static YDParam _getYDTokenZXXZ(String searchFieldJson) {
  901. return YDParam.builder().appType("APP_N9NPHVTQLPBPO8MR6WFG").systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW").formUuid("FORM-4J7669A10FO250UJ9C6Q7CM00PC62YPW8DD6LT").searchFieldJson(searchFieldJson).build();
  902. }
  903. //匹配条件用
  904. private static final String KEY = "key";
  905. private static final String VALUE = "value";
  906. private static final String TYPE = "type";
  907. private static final String OPERATOR = "operator";
  908. private static final String COMPONENT_NAME = "componentName";
  909. private static Map<String, Object> buildCondition(String key, Object value, String type, String operator, String componentName) {
  910. Map<String, Object> condition = new HashMap<>();
  911. condition.put(KEY, key);
  912. condition.put(VALUE, value);
  913. condition.put(TYPE, type);
  914. condition.put(OPERATOR, operator);
  915. condition.put(COMPONENT_NAME, componentName);
  916. return condition;
  917. }
  918. }