NonPoServerImpl.java 50 KB

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