|
|
@@ -0,0 +1,201 @@
|
|
|
+package com.malk.taisen.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.json.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.malk.server.aliwork.YDConf;
|
|
|
+import com.malk.server.aliwork.YDParam;
|
|
|
+import com.malk.server.dingtalk.DDR_New;
|
|
|
+import com.malk.service.aliwork.YDClient;
|
|
|
+import com.malk.taisen.service.RtrServer;
|
|
|
+import com.malk.taisen.util.CusutUtil;
|
|
|
+import com.malk.taisen.util.HttpUtil;
|
|
|
+import com.malk.utils.UtilMap;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class RtrServerImpl implements RtrServer {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private YDClient ydClient;
|
|
|
+ /**
|
|
|
+ * 测试地址
|
|
|
+ */
|
|
|
+ @Value(value = "${sap.QA_sapUrl_Poc}")
|
|
|
+ private String QA_sapUrl ;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void RtrInsetSAP0005(String type, String InstanceId) {
|
|
|
+ DDR_New ddr = ydClient.queryData(YDParam.builder().formInstId(InstanceId).build(), YDConf.FORM_QUERY.retrieve_id);
|
|
|
+ Map dataForm = ddr.getFormData();
|
|
|
+
|
|
|
+ JSONObject sapJson = new JSONObject();
|
|
|
+ JSONObject upJson = new JSONObject();
|
|
|
+ // 添加顶级键值对
|
|
|
+ sapJson.put("BLART", "Z5");//凭证类型
|
|
|
+ sapJson.put("ZOA_TYPE", "GL");//总账类型
|
|
|
+ sapJson.put("interface_id", "SAP005");
|
|
|
+ sapJson.put("ZPAY_AMT", "0");
|
|
|
+ sapJson.put("ZDUEDATE", CusutUtil.getFormatDate((Long) dataForm.get("dateField_miwh5y85"))); //Due date / 到期日
|
|
|
+ sapJson.put("ZOA_NUMBER", dataForm.get("textField_mi73dy3n")); //钉钉单据号
|
|
|
+ sapJson.put("BUKRS", dataForm.get("textField_mejfj9iw"));//公司代码
|
|
|
+ String uid = "CHN-01000332";
|
|
|
+ String uname = "";
|
|
|
+ if (dataForm.containsKey("employeeField_mizdsqyt_id")&&!dataForm.get("employeeField_mizdsqyt_id").equals("")) {
|
|
|
+ List<Map<String, Object>> conditions = new ArrayList<>(Arrays.asList(buildCondition("textField_l6dddg5k", dataForm.get("employeeField_mejfoon1_id"), "TEXT", "eq", "TextField")));
|
|
|
+ String listJson = JSON.toJSONString(conditions);
|
|
|
+ YDParam YGydParam = _getYDTokenZXXZ(listJson);
|
|
|
+ List<Map> dataList = (List<Map>) ydClient.queryData(YGydParam, YDConf.FORM_QUERY.retrieve_search_form).getData();
|
|
|
+ if (dataList != null && dataList.size() > 0) {
|
|
|
+ Map map = dataList.get(0);
|
|
|
+ Map formData = (Map) map.get("formData");
|
|
|
+ uid = formData.get("textField_l6djch1m").toString();
|
|
|
+ uid = "CHN-0" + uid;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sapJson.put("USNAM", uid); //过账人
|
|
|
+ sapJson.put("BLDAT", CusutUtil.getFormatDate((Long) dataForm.get("dateField_l9nsavm3"))); //凭证日期ƒ Date / 申请日期
|
|
|
+ sapJson.put("BUDAT", CusutUtil.getFormatDate((Long) dataForm.get("dateField_l9nsavm3"))); //过账日期
|
|
|
+ sapJson.put("BKTXT", dataForm.get("textField_miwh5y6z"));//备注 抬头文本
|
|
|
+ sapJson.put("WAERS", dataForm.get("selectField_mejfoong")); //币种
|
|
|
+ sapJson.put("BANKA", "");
|
|
|
+ sapJson.put("BANKN", "");
|
|
|
+ sapJson.put("KOINH", "");
|
|
|
+ sapJson.put("LIFNR", "");
|
|
|
+ sapJson.put("ZINVOICE_AMT","0");
|
|
|
+ //获取子表
|
|
|
+ if (type.equals("YWJT")) {
|
|
|
+ JSONArray itemArray = new JSONArray();
|
|
|
+ int x = 1;//OA单据行号累计用
|
|
|
+ List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_mipgl0vx");
|
|
|
+ if (tableFils != null && tableFils.size() > 0) {
|
|
|
+ for (int n = 0; n < tableFils.size(); n++) {
|
|
|
+ Map<String, Object> row = new HashMap(tableFils.get(n));
|
|
|
+ JSONObject itemObj = new JSONObject();
|
|
|
+ String sjItemNo = "";
|
|
|
+ if (x < 10) {
|
|
|
+ sjItemNo += "00" + x;
|
|
|
+ } else if (x < 100) {
|
|
|
+ sjItemNo += "0" + x;
|
|
|
+ } else {
|
|
|
+ sjItemNo += x;
|
|
|
+ }
|
|
|
+ x++;
|
|
|
+ itemObj.put("ZOA_ITEMNO", sjItemNo);//OA单据行号
|
|
|
+ itemObj.put("SHKZG", "S");// S借方
|
|
|
+ sapJson.put("ZTAXOUT_AMT", "0");
|
|
|
+ sapJson.put("ZTAX_AMT", "0");
|
|
|
+// itemObj.put("HKONT", String.valueOf(row.get("textField_mipgl0w1"))); //会计科目:取接口行项目接口字段会计科目 HKONT
|
|
|
+ itemObj.put("HKONT", String.valueOf(row.get("textField_miwh5y87"))); //会计科目:取接口行项目接口字段会计科目 HKONT
|
|
|
+ itemObj.put("DMBTR", String.valueOf(row.get("numberField_mipgl0w2_value"))); //凭证金额:取接口行项目接口字段 DMBTR
|
|
|
+ itemObj.put("KOSTL", String.valueOf(row.get("textField_mipgl0w3"))); //成本中心:取接口行项目接口字段成本中心KOSTL
|
|
|
+ itemObj.put("AUFNR", String.valueOf(row.get("textField_mipgl0w4"))); //订单:取接口行项目接口字段订单 AUFNR
|
|
|
+ itemObj.put("PS_POSID", String.valueOf(row.get("textField_mipgl0w5"))); //WBS:职接口行项目接口字段 WBS元素 PS_POSID
|
|
|
+ itemObj.put("MWSKZ", String.valueOf(row.get("textField_mipgl0w6")));///税码:取总账通用工单的行项目的税码,接口字段MWSKZ
|
|
|
+ itemObj.put("ZUONR", String.valueOf(row.get("textField_mipgl0w7")));///分配:取接口行项目接口字段分配 ZUONR
|
|
|
+ itemObj.put("XREF1", String.valueOf(row.get("textField_miwh5y88")));///参考码1:取接口行项目接口字段 XREF1
|
|
|
+ itemObj.put("SGTXT", String.valueOf(row.get("textareaField_miwh5y86")));///行项目文本:取接口行项目接口字段行项目文本 SGTXT
|
|
|
+ itemArray.put(itemObj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<Map<String, Object>> tableFils2 = (List<Map<String, Object>>) dataForm.get("tableField_miwh5y8n");
|
|
|
+ if (tableFils2 != null && tableFils2.size() > 0) {
|
|
|
+ for (int n = 0; n < tableFils2.size(); n++) {
|
|
|
+ Map<String, Object> row = new HashMap(tableFils2.get(n));
|
|
|
+ JSONObject itemObj = new JSONObject();
|
|
|
+ itemObj.put("SHKZG", "H"); //H贷方
|
|
|
+ String sjItemNo = "";
|
|
|
+ if (x < 10) {
|
|
|
+ sjItemNo += "00" + x;
|
|
|
+ } else if (x < 100) {
|
|
|
+ sjItemNo += "0" + x;
|
|
|
+ } else {
|
|
|
+ sjItemNo += x;
|
|
|
+ }
|
|
|
+ x++;
|
|
|
+ itemObj.put("ZOA_ITEMNO", sjItemNo);//OA单据行号
|
|
|
+// itemObj.put("HKONT", String.valueOf(row.get("textField_miwh5y8d"))); //会计科目:取接口行项目接口字段会计科目 HKONT
|
|
|
+ itemObj.put("HKONT", String.valueOf(row.get("textField_miwh5y8e"))); //会计科目:取接口行项目接口字段会计科目 HKONT
|
|
|
+ itemObj.put("DMBTR", String.valueOf(row.get("numberField_miwh5y8f_value"))); //凭证金额:取接口行项目接口字段 DMBTR
|
|
|
+ itemObj.put("KOSTL", String.valueOf(row.get("textField_miwh5y8g"))); //成本中心:取接口行项目接口字段成本中心KOSTL
|
|
|
+ itemObj.put("AUFNR", String.valueOf(row.get("textField_miwh5y8h"))); //订单:取接口行项目接口字段订单 AUFNR
|
|
|
+ itemObj.put("PS_POSID", String.valueOf(row.get("textField_miwh5y8i"))); //WBS:职接口行项目接口字段 WBS元素 PS_POSID
|
|
|
+ itemObj.put("MWSKZ", String.valueOf(row.get("textField_miwh5y8j")));///税码:取总账通用工单的行项目的税码,接口字段MWSKZ
|
|
|
+ itemObj.put("ZUONR", String.valueOf(row.get("textField_miwh5y8k")));///分配:取接口行项目接口字段分配 ZUONR
|
|
|
+ itemObj.put("XREF1", String.valueOf(row.get("textField_miwh5y8l")));///参考码1:取接口行项目接口字段 XREF1
|
|
|
+ itemObj.put("SGTXT", String.valueOf(row.get("textareaField_miwh5y8c")));///行项目文本:取接口行项目接口字段行项目文本 SGTXT
|
|
|
+ itemArray.put(itemObj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sapJson.put("ITEM", itemArray);
|
|
|
+ }
|
|
|
+
|
|
|
+ /***
|
|
|
+ * 调用接口
|
|
|
+ */
|
|
|
+ System.out.println(sapJson);
|
|
|
+ log.info("发起POST请求:URL={},参数={}", QA_sapUrl + "SAP005", sapJson);
|
|
|
+ String post = HttpUtil.post(QA_sapUrl + "SAP005", null, sapJson.toString(), null);
|
|
|
+ log.info(dataForm.get("textField_mi73dy3n")+"POST反馈={}", post);
|
|
|
+ System.out.println( "POST反馈====="+post);
|
|
|
+ if (!post.equals("")) {
|
|
|
+ JSONArray jsonArray = new JSONArray(post);
|
|
|
+ if (jsonArray.size() > 0) {
|
|
|
+ String voucherNumber = "";
|
|
|
+ try {
|
|
|
+ cn.hutool.json.JSONObject postJsonObject = jsonArray.getJSONObject(0);
|
|
|
+ String E_SYSMSGTYPE = postJsonObject.getStr("E_SYSMSGTYPE");//状态
|
|
|
+ String E_MESSAGE = postJsonObject.getStr("E_MESSAGE");//SAP005 接口 反馈值
|
|
|
+ if ( E_SYSMSGTYPE.equals("S")) {
|
|
|
+ String e_belnr = postJsonObject.getStr("E_BELNR");
|
|
|
+ String E_GJAHR = postJsonObject.getStr("E_GJAHR");//凭证年度
|
|
|
+ // 执行完加入,把更改表单凭证数据
|
|
|
+ ydClient.operateData(YDParam.builder().formInstanceId(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);
|
|
|
+ }else {
|
|
|
+ // 报错写入
|
|
|
+ ydClient.operateData(YDParam.builder().formInstanceId(InstanceId).updateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_mi5kjmxb, selectField_mi72r4s6", E_MESSAGE,"失败" ))).build(), YDConf.FORM_OPERATION.update);
|
|
|
+ }
|
|
|
+ } catch (Exception ex) {
|
|
|
+ log.error("解析异常{}",ex.getMessage());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.error("返回值数组为空");
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ // 报错写入
|
|
|
+ ydClient.operateData(YDParam.builder().formInstanceId(InstanceId).updateFormDataJson(JSON.toJSONString(UtilMap.map("textareaField_mi5kjmxb, selectField_mi72r4s6", post,"失败" ))).build(), YDConf.FORM_OPERATION.update);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //匹配条件用
|
|
|
+ private static final String KEY = "key";
|
|
|
+ private static final String VALUE = "value";
|
|
|
+ private static final String TYPE = "type";
|
|
|
+ private static final String OPERATOR = "operator";
|
|
|
+ private static final String COMPONENT_NAME = "componentName";
|
|
|
+
|
|
|
+ private static Map<String, Object> buildCondition(String key, Object value, String type, String operator, String componentName) {
|
|
|
+ Map<String, Object> condition = new HashMap<>();
|
|
|
+ condition.put(KEY, key);
|
|
|
+ condition.put(VALUE, value);
|
|
|
+ condition.put(TYPE, type);
|
|
|
+ condition.put(OPERATOR, operator);
|
|
|
+ condition.put(COMPONENT_NAME, componentName);
|
|
|
+ return condition;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 泰森付款 人员档案表
|
|
|
+ */
|
|
|
+ public static YDParam _getYDTokenZXXZ(String searchFieldJson) {
|
|
|
+ return YDParam.builder().formUuid("FORM-4J7669A10FO250UJ9C6Q7CM00PC62YPW8DD6LT").searchFieldJson(searchFieldJson).build();
|
|
|
+ }
|
|
|
+}
|