|
|
@@ -49,297 +49,6 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
|
|
|
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=";
|
|
|
|
|
|
- // @Override
|
|
|
-// public void NonPoinsetSAP0005_tse(String type, String InstanceId) {
|
|
|
-// YDParam ydParam = _getYDTokenKPD();
|
|
|
-// ydParam.setFormInstanceId(InstanceId);
|
|
|
-// DDR_New ddr = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id);
|
|
|
-// Map dataForm = ddr.getFormData();
|
|
|
-// String paymentType = getString(dataForm, "selectField_mejfoona", "");//Type / 付款类型
|
|
|
-// // 发票总额 or 支付金额
|
|
|
-// String invoiceAmt = getNumberValue(dataForm, "numberField_mejfoook_value");//Invoice Amount / 发票总额
|
|
|
-// String payAmt = getNumberValue(dataForm, "numberField_mejfoool_value");//Payment Amount / 支付总额(含税)
|
|
|
-//
|
|
|
-//
|
|
|
-// String PD = (String) dataForm.get("selectField_mj1cq2oz_id");//formatDate(dataForm, "selectField_mj1cq2oz_id");//
|
|
|
-// String SAPID = (String) dataForm.get("textField_mejezfwk");//formatDate(dataForm, "textField_mejezfwk").equals("")? formatDate(dataForm, "textField_mj2gpdiu"): formatDate(dataForm, "textField_mejezfwk");
|
|
|
-//
|
|
|
-// // 若不需要生成 SAP 凭证,但已有 SAPID,则执行发票勾选
|
|
|
-// if ("否".equals(PD) && !SAPID.isEmpty()) {
|
|
|
-// FPGX(InstanceId, SAPID, getString(dataForm, "textField_mi73dy3n", ""));
|
|
|
-// return;
|
|
|
-// }
|
|
|
-//
|
|
|
-//
|
|
|
-// // 只有“是”才继续处理
|
|
|
-// if ("否".equals(PD)) {
|
|
|
-// return;
|
|
|
-// }
|
|
|
-//
|
|
|
-// JSONObject sapJson = new JSONObject();
|
|
|
-// sapJson.put("ZDUEDATE", formatDate(dataForm, "dateField_mejfoonv"));
|
|
|
-// sapJson.put("BKTXT", getString(dataForm, "textareaField_mejfoonw", ""));
|
|
|
-// sapJson.put("ZOA_NUMBER", getString(dataForm, "textField_mi73dy3n", ""));
|
|
|
-// sapJson.put("interface_id", "SAP005");
|
|
|
-//
|
|
|
-//
|
|
|
-// if ("收据支付".equals(paymentType)) {
|
|
|
-// sapJson.put("ZINVOICE_AMT", payAmt);
|
|
|
-// } else {
|
|
|
-// sapJson.put("ZINVOICE_AMT", invoiceAmt);
|
|
|
-// }
|
|
|
-//
|
|
|
-// sapJson.put("BANKA", getString(dataForm, "textField_mejfoon9", ""));
|
|
|
-// sapJson.put("BLDAT", formatDate(dataForm, "dateField_l9nsavm3"));
|
|
|
-//
|
|
|
-// // 获取过账人 UID
|
|
|
-// String uid = getPostingUserUid(dataForm);
|
|
|
-// sapJson.put("USNAM", uid);
|
|
|
-//
|
|
|
-// sapJson.put("BUDAT", formatDate(dataForm, "dateField_mhxdzyaa"));
|
|
|
-// sapJson.put("ZOA_TYPE", "无票预付".equals(paymentType) ? "AD" : "NP");
|
|
|
-// sapJson.put("ZPAY_AMT", payAmt);
|
|
|
-// sapJson.put("BUKRS", getString(dataForm, "textField_mejfj9iw", ""));
|
|
|
-// sapJson.put("BANKN", getString(dataForm, "textField_mejfoon8", ""));
|
|
|
-// sapJson.put("WAERS", getString(dataForm, "selectField_mejfoong", ""));
|
|
|
-// sapJson.put("KOINH", getString(dataForm, "textField_mejezfwl", ""));
|
|
|
-// sapJson.put("LIFNR", getString(dataForm, "textField_mejezfwv", ""));
|
|
|
-//
|
|
|
-// // 设置凭证类型 & 构建 ITEM
|
|
|
-// JSONArray itemArray = new JSONArray();
|
|
|
-// if ("发票支付".equals(paymentType)) {
|
|
|
-// sapJson.put("BLART", "Z2");
|
|
|
-// buildInvoicePaymentItems(dataForm, "tableField_l6ujr47b", itemArray);
|
|
|
-// } else if ("无票预付".equals(paymentType)) {
|
|
|
-// sapJson.put("BLART", "Z4");
|
|
|
-// sapJson.put("UMSKZ", "A");
|
|
|
-// buildAdvancePaymentItem(dataForm, itemArray);
|
|
|
-// } else if ("收据支付".equals(paymentType)) {
|
|
|
-// sapJson.put("BLART", "Z2");
|
|
|
-// buildReceiptPaymentItems(dataForm, "tableField_mi7c3wl9", itemArray);
|
|
|
-// } else if ("100%清预付款".equals(paymentType)) {
|
|
|
-// sapJson.put("BLART", "Z2");
|
|
|
-// String xref1 = "", xref2 = "";
|
|
|
-// List<Map<String, Object>> refList = getList(dataForm, "tableField_mi8q495e");
|
|
|
-// if (refList != null && !refList.isEmpty()) {
|
|
|
-// if (refList.size() == 1) {
|
|
|
-// xref1 = getString(refList.get(0), "textField_mi8q495f", "");
|
|
|
-// } else {
|
|
|
-// refList.sort((a, b) -> {
|
|
|
-// Long timeA = getDateTimestamp(a, "dateField_mj13wpls");
|
|
|
-// Long timeB = getDateTimestamp(b, "dateField_mj13wpls");
|
|
|
-// return Long.compare(timeB, timeA);
|
|
|
-// });
|
|
|
-// xref1 = getString(refList.get(0), "textField_mi8q495f", "");
|
|
|
-// xref2 = getString(refList.get(1), "textField_mi8q495f", "");
|
|
|
-// }
|
|
|
-// }
|
|
|
-// buildClearAdvanceItems(dataForm, "tableField_l6ujr47b", xref1, xref2, itemArray);
|
|
|
-// }
|
|
|
-//
|
|
|
-// sapJson.put("ITEM", itemArray);
|
|
|
-//
|
|
|
-// // 调用 SAP 接口
|
|
|
-// log.info("发起POST请求:URL={},参数={}", QA_sapUrl + "SAP005", sapJson);
|
|
|
-// System.out.println(sapJson);
|
|
|
-// String post = HttpUtil.post(QA_sapUrl + "SAP005", null, sapJson.toString(), null);
|
|
|
-// log.info("{} POST反馈={}", getString(dataForm, "textField_mi73dy3n", ""), post);
|
|
|
-// System.out.println("POST反馈=====" + post);
|
|
|
-//
|
|
|
-// handleSapResponse(post, InstanceId, dataForm, paymentType);
|
|
|
-// }
|
|
|
-
|
|
|
-// === 辅助方法(全部为 private static 或局部 lambda,但 Java 不支持局部函数,故用 private 方法)===
|
|
|
-// 注意:这些方法必须定义在类中,但未扩展主逻辑
|
|
|
-
|
|
|
- private String getString(Map map, String key, String defaultValue) {
|
|
|
- Object val = map.get(key);
|
|
|
- return val instanceof String ? (String) val : defaultValue;
|
|
|
- }
|
|
|
-
|
|
|
- private String getNumberValue(Map map, String key) {
|
|
|
- Object val = map.get(key);
|
|
|
- if (val == null || "".equals(val)) return "0";
|
|
|
- return val.toString();
|
|
|
- }
|
|
|
-
|
|
|
- private Long getDateTimestamp(Map map, String key) {
|
|
|
- Object val = map.get(key);
|
|
|
- if (val instanceof Number) {
|
|
|
- return ((Number) val).longValue();
|
|
|
- }
|
|
|
- return 0L;
|
|
|
- }
|
|
|
-
|
|
|
- private String formatDate(Map map, String dateKey) {
|
|
|
- Object val = map.get(dateKey);
|
|
|
- if (val instanceof Long) {
|
|
|
- return CusutUtil.getFormatDate((Long) val);
|
|
|
- }
|
|
|
- return "";
|
|
|
- }
|
|
|
-
|
|
|
- @SuppressWarnings("unchecked")
|
|
|
- private List<Map<String, Object>> getList(Map map, String key) {
|
|
|
- Object val = map.get(key);
|
|
|
- if (val instanceof List) {
|
|
|
- return (List<Map<String, Object>>) val;
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- private String getPostingUserUid(Map dataForm) {
|
|
|
-
|
|
|
- String empId = dataForm.get("employeeField_mhxdzya9_id").toString();
|
|
|
- if (empId.isEmpty()) {
|
|
|
- return "TEST-CN001";
|
|
|
- }
|
|
|
-
|
|
|
- List<Map<String, Object>> conditions = Arrays.asList(
|
|
|
- buildCondition("textField_l6dddg5k", empId, "TEXT", "eq", "TextField")
|
|
|
- );
|
|
|
- String listJson = JSON.toJSONString(conditions);
|
|
|
- YDParam YGydParam = _getYDTokenZXXZ(listJson);
|
|
|
- DDR_New result = ydClient.queryData(YGydParam, YDConf.FORM_QUERY.retrieve_search_form);
|
|
|
- List<Map> dataList = (List<Map>) result.getData();
|
|
|
-
|
|
|
- if (dataList != null && !dataList.isEmpty()) {
|
|
|
- Map formData = (Map) dataList.get(0).get("formData");
|
|
|
- Object uidObj = formData.get("textField_l6djch1m");
|
|
|
- if (uidObj != null) {
|
|
|
- return "CHN-0" + uidObj.toString();
|
|
|
- }
|
|
|
- }
|
|
|
- return "TEST-CN001";
|
|
|
- }
|
|
|
-
|
|
|
- private void buildInvoicePaymentItems(Map dataForm, String tableKey, JSONArray itemArray) {
|
|
|
- buildCommonItems(dataForm, tableKey, itemArray, true, "", "");
|
|
|
- }
|
|
|
-
|
|
|
- private void buildReceiptPaymentItems(Map dataForm, String tableKey, JSONArray itemArray) {
|
|
|
- buildCommonItems(dataForm, tableKey, itemArray, false, "", "");
|
|
|
- }
|
|
|
-
|
|
|
- private void buildClearAdvanceItems(Map dataForm, String tableKey, String xref1, String xref2, JSONArray itemArray) {
|
|
|
- buildCommonItems(dataForm, tableKey, itemArray, true, xref1, xref2);
|
|
|
- }
|
|
|
-
|
|
|
- private void buildCommonItems(Map dataForm, String tableKey, JSONArray itemArray, boolean hasTax, String xref1, String xref2) {
|
|
|
- List<Map<String, Object>> rows = getList(dataForm, tableKey);
|
|
|
- if (rows == null || rows.isEmpty()) return;
|
|
|
-
|
|
|
- int index = 1;
|
|
|
- for (Map<String, Object> row : rows) {
|
|
|
- JSONObject item = new JSONObject();
|
|
|
- item.put("KOSTL", getString(row, "textField_mi5kjmwk", ""));
|
|
|
- item.put("DMBTR", getNumberValue(row, "numberField_mi7c3wky"));
|
|
|
- item.put("XREF1", xref1);
|
|
|
- if (!xref2.isEmpty()) {
|
|
|
- item.put("XREF2", xref2);
|
|
|
- }
|
|
|
- item.put("ZOA_ITEMNO", formatItemNo(index++));
|
|
|
- item.put("HKONT", getString(row, "textField_l6lvt6lj", ""));
|
|
|
- item.put("ZTAXOUT_AMT", "0");
|
|
|
- item.put("MWSKZ", hasTax ? getString(row, "textField_l7a6bzpv", "") : "");
|
|
|
- item.put("ZTAX_AMT", hasTax ? getNumberValue(row, "numberField_l6vu65fp") : "0");
|
|
|
- item.put("SGTXT", getString(row, "textField_mejfoonz", ""));
|
|
|
- itemArray.add(item);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private void buildAdvancePaymentItem(Map dataForm, JSONArray itemArray) {
|
|
|
- JSONObject item = new JSONObject();
|
|
|
- item.put("ZOA_ITEMNO", "001");
|
|
|
- item.put("HKONT", "");
|
|
|
- item.put("KOSTL", "");
|
|
|
- item.put("MWSKZ", "");
|
|
|
- item.put("ZTAX_AMT", "0");
|
|
|
- item.put("ZTAXOUT_AMT", "0");
|
|
|
- item.put("SGTXT", "");
|
|
|
-
|
|
|
- String payAmtStr = getNumberValue(dataForm, "numberField_mejfoool_value");
|
|
|
- try {
|
|
|
- BigDecimal amt = new BigDecimal(payAmtStr).setScale(2, RoundingMode.HALF_UP);
|
|
|
- item.put("DMBTR", amt);
|
|
|
- } catch (Exception e) {
|
|
|
- item.put("DMBTR", "0");
|
|
|
- }
|
|
|
- item.put("XREF1", getString(dataForm, "textareaField_mejfoonw", ""));
|
|
|
- itemArray.add(item);
|
|
|
- }
|
|
|
-
|
|
|
- private String formatItemNo(int index) {
|
|
|
- if (index < 10) return "00" + index;
|
|
|
- if (index < 100) return "0" + index;
|
|
|
- return String.valueOf(index);
|
|
|
- }
|
|
|
-
|
|
|
- private void handleSapResponse(String post, String instanceId, Map dataForm, String paymentType) {
|
|
|
- if (post == null || post.trim().isEmpty()) {
|
|
|
- updateFormStatus(instanceId, post, "失败");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- try {
|
|
|
- JSONArray jsonArray = new JSONArray(post);
|
|
|
- if (jsonArray.isEmpty()) {
|
|
|
- updateFormStatus(instanceId, "Empty response", "失败");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- cn.hutool.json.JSONObject resp = jsonArray.getJSONObject(0);
|
|
|
- String msgType = resp.getStr("E_SYSMSGTYPE");
|
|
|
- String message = resp.getStr("E_MESSAGE");
|
|
|
-
|
|
|
- if ("S".equals(msgType)) {
|
|
|
- String e_belnr = resp.getStr("E_BELNR");
|
|
|
- if (e_belnr != null && e_belnr.contains(";")) {
|
|
|
- e_belnr = e_belnr.split(";")[0];
|
|
|
- }
|
|
|
- String year = resp.getStr("E_GJAHR");
|
|
|
- updateFormStatus(instanceId, year, e_belnr, message, "成功");
|
|
|
-
|
|
|
- if ("发票支付".equals(paymentType)) {
|
|
|
- FPGX(instanceId, e_belnr, getString(dataForm, "textField_mi73dy3n", ""));
|
|
|
- }
|
|
|
- } else {
|
|
|
- updateFormStatus(instanceId, message, "失败");
|
|
|
- }
|
|
|
- } catch (Exception ex) {
|
|
|
- log.error("解析 SAP 响应失败", ex);
|
|
|
- updateFormStatus(instanceId, "Response parse error: " + ex.getMessage(), "失败");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private void updateFormStatus(String instanceId, String field1, String field2, String field3, String status) {
|
|
|
- ydClient.operateData(
|
|
|
- YDParam.builder()
|
|
|
- .appType("APP_N9NPHVTQLPBPO8MR6WFG")
|
|
|
- .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
|
|
|
- .formInstanceId(instanceId)
|
|
|
- .updateFormDataJson(JSON.toJSONString(UtilMap.map(
|
|
|
- "textField_l9nsavm2, textField_mejezfwk, textareaField_mi5kjmxb, selectField_mi72r4s6",
|
|
|
- field1, field2, field3, status)))
|
|
|
- .build(),
|
|
|
- YDConf.FORM_OPERATION.update
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
- private void updateFormStatus(String instanceId, String message, String status) {
|
|
|
- ydClient.operateData(
|
|
|
- YDParam.builder()
|
|
|
- .appType("APP_N9NPHVTQLPBPO8MR6WFG")
|
|
|
- .systemToken("UM6660D1PGF2O34KAVVKG8XZ756E3O06MZX5LW")
|
|
|
- .formInstanceId(instanceId)
|
|
|
- .updateFormDataJson(JSON.toJSONString(UtilMap.map(
|
|
|
- "textareaField_mi5kjmxb, selectField_mi72r4s6",
|
|
|
- message, status)))
|
|
|
- .build(),
|
|
|
- YDConf.FORM_OPERATION.update
|
|
|
- );
|
|
|
- }
|
|
|
-
|
|
|
// @Override
|
|
|
public void NonPoinsetSAP0005(String type, String InstanceId) {
|
|
|
YDParam ydParam = _getYDTokenKPD();
|
|
|
@@ -552,7 +261,7 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
itemObj.put("ZOA_ITEMNO", sjItemNo);//OA单据行号
|
|
|
itemObj.put("HKONT", String.valueOf(row.get("textField_l6lvt6lj"))); //会计科目
|
|
|
itemObj.put("ZTAXOUT_AMT", "0");//进项税转出金额 、、、 String.valueOf(row.get("numberField_l6bx7hqk_value"))
|
|
|
- itemObj.put("MWSKZ", String.valueOf(row.get("textField_l7a6bzpv")));///税码
|
|
|
+ itemObj.put("MWSKZ", String.valueOf(row.get("textField_l7a6bzpv" )));///税码
|
|
|
itemObj.put("ZTAX_AMT", String.valueOf(row.get("numberField_memejxqp")).equals("") ? "0" : String.valueOf(row.get("numberField_memejxqp"))); //税额
|
|
|
itemObj.put("SGTXT", String.valueOf(row.get("textField_mejfoonz"))); //行项目文本
|
|
|
itemArray.put(itemObj);
|