|
|
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.malk.server.common.McException;
|
|
|
import com.malk.taisen.util.CusutUtil;
|
|
|
import com.malk.taisen.util.HttpUtil;
|
|
|
import cn.hutool.json.JSONArray;
|
|
|
@@ -48,7 +49,7 @@ 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=";
|
|
|
+ // 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=";
|
|
|
//private String formUuid = "FORM-E9A6EBE00F3E4DA68681107F85600D80ZJUT";
|
|
|
|
|
|
/**
|
|
|
@@ -57,14 +58,14 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
* @param InstanceId
|
|
|
* @param formUuid
|
|
|
*/
|
|
|
- // 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=";
|
|
|
+ // 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=";
|
|
|
|
|
|
|
|
|
@Value(value = "${sap.QA_sapUrl_Poc}")
|
|
|
- private String QA_sapUrl ;
|
|
|
+ private String QA_sapUrl;
|
|
|
|
|
|
// @Override
|
|
|
- public void NonPoinsetSAP0005(String type, String InstanceId,String formUuid) {
|
|
|
+ public void NonPoinsetSAP0005(String type, String InstanceId, String formUuid) {
|
|
|
YDParam ydParam = _getYDTokenKPD();
|
|
|
ydParam.setFormInstanceId(InstanceId);
|
|
|
DDR_New ddr = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id);
|
|
|
@@ -75,9 +76,9 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
String PD = (String) dataForm.get("selectField_mj1cq2oz");//是否生成SAP凭证
|
|
|
String SAPID = (String) dataForm.get("textField_mejezfwk");//SAP凭证号码
|
|
|
String SFXCFK = (String) dataForm.get("radioField_mj1gc7qe");//仅携程付款是否
|
|
|
-/**
|
|
|
- * 是否需要生成SAP凭证
|
|
|
- */
|
|
|
+ /**
|
|
|
+ * 是否需要生成SAP凭证
|
|
|
+ */
|
|
|
if (("否".equals(PD) && !SAPID.equals("")) || "是".equals(SFXCFK)) {
|
|
|
FPGX(InstanceId, SAPID, (String) dataForm.get("textField_mi73dy3n"));
|
|
|
} else if (!"否".equals(PD)) {
|
|
|
@@ -191,7 +192,7 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
JSONArray itemArray = new JSONArray();
|
|
|
int x = 1;//OA单据行号累计用
|
|
|
List<Map> tableFils = ydService.queryDetails(YDParam.builder().formInstanceId(InstanceId).formUuid(formUuid).tableFieldId("tableField_mi7c3wl9").build());
|
|
|
- //List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_mi7c3wl9");
|
|
|
+ //List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_mi7c3wl9");
|
|
|
if (tableFils != null && tableFils.size() > 0) {
|
|
|
for (int n = 0; n < tableFils.size(); n++) {
|
|
|
Map<String, Object> row = new HashMap(tableFils.get(n));
|
|
|
@@ -226,7 +227,7 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
* 获取参考代码1 2
|
|
|
*/
|
|
|
List<Map> XREFlist = ydService.queryDetails(YDParam.builder().formInstanceId(InstanceId).formUuid(formUuid).tableFieldId("tableField_mi8q495e").build());
|
|
|
- // List<Map<String, Object>> XREFlist = (List<Map<String, Object>>) dataForm.get("tableField_mi8q495e");
|
|
|
+ // List<Map<String, Object>> XREFlist = (List<Map<String, Object>>) dataForm.get("tableField_mi8q495e");
|
|
|
|
|
|
if (XREFlist != null && !XREFlist.isEmpty()) {
|
|
|
if (XREFlist.size() == 1) {
|
|
|
@@ -258,7 +259,7 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
int x = 1;//OA单据行号累计用
|
|
|
|
|
|
List<Map> tableFils = ydService.queryDetails(YDParam.builder().formInstanceId(InstanceId).formUuid(formUuid).tableFieldId("tableField_l6ujr47b").build());
|
|
|
- // List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_l6ujr47b");
|
|
|
+ // List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_l6ujr47b");
|
|
|
if (tableFils != null && tableFils.size() > 0) {
|
|
|
for (int n = 0; n < tableFils.size(); n++) {
|
|
|
Map<String, Object> row = new HashMap(tableFils.get(n));
|
|
|
@@ -298,7 +299,7 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
* 获取参考代码1 2
|
|
|
*/
|
|
|
List<Map> XREFlist = ydService.queryDetails(YDParam.builder().formInstanceId(InstanceId).formUuid(formUuid).tableFieldId("tableField_mi8q495e").build());
|
|
|
- // List<Map<String, Object>> XREFlist = (List<Map<String, Object>>) dataForm.get("tableField_mi8q495e");
|
|
|
+ // List<Map<String, Object>> XREFlist = (List<Map<String, Object>>) dataForm.get("tableField_mi8q495e");
|
|
|
|
|
|
if (XREFlist != null && !XREFlist.isEmpty()) {
|
|
|
if (XREFlist.size() == 1) {
|
|
|
@@ -328,7 +329,7 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
JSONArray itemArray = new JSONArray();
|
|
|
int x = 1;//OA单据行号累计用
|
|
|
List<Map> tableFils = ydService.queryDetails(YDParam.builder().formInstanceId(InstanceId).formUuid(formUuid).tableFieldId("tableField_mi7c3wl9").build());
|
|
|
- // List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_mi7c3wl9");
|
|
|
+ // List<Map<String, Object>> tableFils = (List<Map<String, Object>>) dataForm.get("tableField_mi7c3wl9");
|
|
|
if (tableFils != null && tableFils.size() > 0) {
|
|
|
for (int n = 0; n < tableFils.size(); n++) {
|
|
|
Map<String, Object> row = new HashMap(tableFils.get(n));
|
|
|
@@ -418,6 +419,18 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+/**
|
|
|
+ * 冲销
|
|
|
+ */
|
|
|
+ String SFCX = (String) dataForm.get("selectField_mkxd6l4o");//是否冲销
|
|
|
+ String CXTSZT = (String) dataForm.get("selectField_mkxmqncp");//冲销推送状态
|
|
|
+ if (SFCX.equals("是") && !CXTSZT.equals("已完成")) {
|
|
|
+ log.info("泰森宜搭:Non-Po冲销, {}", InstanceId);
|
|
|
+ System.out.println("泰森宜搭: Non-Po冲销::" + InstanceId);
|
|
|
+ this.NPOCX(InstanceId, formUuid);
|
|
|
+ System.out.println("泰森宜搭:Non-Po冲销 结束");
|
|
|
+ log.info("泰森宜搭:Non-Po冲销 结束");
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|
|
|
@@ -425,7 +438,7 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
@Override
|
|
|
public void NonPoDZR(String id, String name) {
|
|
|
long timestamp = System.currentTimeMillis();
|
|
|
- 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);
|
|
|
+ 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);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -627,6 +640,114 @@ public class NonPoServerImpl implements NonPoServer {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void NPOCX(String InstanceId, String formUuid) {
|
|
|
+ YDParam ydParam = _getYDTokenKPD();
|
|
|
+ ydParam.setFormInstanceId(InstanceId);
|
|
|
+ DDR_New ddr = ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_id);
|
|
|
+ Map dataForm = ddr.getFormData();
|
|
|
+ String SFCX = (String) dataForm.get("selectField_mkxd6l4o");//是否冲销
|
|
|
+ String CXTSZT = (String) dataForm.get("selectField_mkxmqncp");//冲销推送状态
|
|
|
+ String ZOA_NUMBER = (String) dataForm.get("textField_mi73dy3n");//钉钉单据号
|
|
|
+ String BUKRS = (String) dataForm.get("textField_mejfj9iw");//公司代码
|
|
|
+ if (SFCX.equals("是") && !CXTSZT.equals("已完成")) {
|
|
|
+
|
|
|
+ String uid = "TEST-CN001";
|
|
|
+ if (!dataForm.get("employeeField_mhxdzya9_id").equals("")) {
|
|
|
+
|
|
|
+ List<Map<String, Object>> conditions = new ArrayList<>(Arrays.asList(buildCondition("textField_l6dddg5k", dataForm.get("employeeField_mhxdzya9_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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ List<Map> tableFils = ydService.queryDetails(YDParam.builder().formInstanceId(InstanceId).formUuid(formUuid).tableFieldId("tableField_mkxd96yv").build());
|
|
|
+ log.info("NPO冲销行项目, {}, {}", InstanceId, tableFils.size());
|
|
|
+ int total = tableFils.size(), succ = 0, fail = 0;
|
|
|
+ // 批量推送Sap凭证: 兼容重试场景
|
|
|
+ for (Map detail : tableFils) {
|
|
|
+ if ("成功".equals(UtilMap.getString(detail, "selectField_mkxoe0yk"))) {
|
|
|
+ succ += 1;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ Map body = new HashMap<>();
|
|
|
+ body.put("ZOA_TYPE", "NP");
|
|
|
+ body.put("ZOA_NUMBER", ZOA_NUMBER);
|
|
|
+ body.put("BUKRS", BUKRS);
|
|
|
+
|
|
|
+ body.put("BELNR", UtilMap.getString(detail, "textField_mkxd96yx"));
|
|
|
+
|
|
|
+ body.put("GJAHR", UtilMap.getString(detail, "textField_mkxd96yy"));
|
|
|
+ body.put("STGRD", UtilMap.getString(detail, "selectField_mkxd96z6"));
|
|
|
+ body.put("USNAM", uid);
|
|
|
+ if (!"".equals(detail.get("dateField_mkxd96z1"))) {
|
|
|
+
|
|
|
+ body.put("BUDAT", CusutUtil.getFormatDate((long) detail.get("dateField_mkxd96z1")));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Map result = this._pushSPCX(body);
|
|
|
+ // prd 重复推送标记成功
|
|
|
+ if ("S".equals(result.get("E_SYSMSGTYPE")) || "post operation had already been done, repeat is not allowed".equals(result.get("E_MESSAGE"))) {
|
|
|
+ detail.put("selectField_mkxoe0yk", "成功");
|
|
|
+ detail.put("textField_mkxd96z2", result.get("E_BELNR"));
|
|
|
+ detail.put("textField_mkxd96z3", result.get("E_GJAHR"));
|
|
|
+ succ += 1;
|
|
|
+ } else {
|
|
|
+ detail.put("selectField_mkxoe0yk", "失败");
|
|
|
+ fail += 1;
|
|
|
+ }
|
|
|
+ detail.put("textField_mkxd96z5", result.get("E_MESSAGE"));
|
|
|
+
|
|
|
+ } catch (McException mc) {
|
|
|
+ detail.put("selectField_mkxoe0yk", "失败");
|
|
|
+ detail.put("textField_mkxd96z5", mc.getMessage());
|
|
|
+ fail += 1;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ String state = "已完成";
|
|
|
+ if (fail > 0) {
|
|
|
+ state = "部分失败";
|
|
|
+ }
|
|
|
+ if (fail == total) {
|
|
|
+ state = "全部失败";
|
|
|
+ }
|
|
|
+ Map formData = UtilMap.map("tableField_mkxd96yv, selectField_mkxmqncp", tableFils, state);
|
|
|
+ log.info("NPO冲销执行, {}", formData);
|
|
|
+ ydClient.operateData(YDParam.builder().formInstanceId(InstanceId).updateFormDataJson(JSON.toJSONString(formData)).build(), YDConf.FORM_OPERATION.update);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * NPO推送冲销
|
|
|
+ * @param
|
|
|
+ */
|
|
|
+ private Map _pushSPCX(Map body) {
|
|
|
+
|
|
|
+ log.info("NPO冲销推送 SAP, {}", JSON.toJSONString(body));
|
|
|
+ String rsp = HttpUtil.post(QA_sapUrl + "SAP005", null, JSON.toJSONString(body), null);
|
|
|
+ log.info("NPO冲销 SAP 响应, {}", rsp);
|
|
|
+ List<Map> result = JSON.parseArray(rsp, Map.class);
|
|
|
+ McException.assertAccessException(result.isEmpty(), "Sap接口请求异常, 返回空集合, 需重新推送.");
|
|
|
+ return result.get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
// === 内联辅助逻辑(以局部方法形式模拟,实际用 private 方法,但按要求不扩展 => 改为内联表达式)===
|
|
|
|
|
|
// 因不能新增方法,以下逻辑直接内联,但为清晰起见,此处用注释说明“安全获取”逻辑:
|