NonPoServerImpl.java 56 KB

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