chenkang11 преди 6 дни
родител
ревизия
ff5f07bd67

+ 8 - 0
mjava-ts/src/main/java/com/malk/taisen/controller/NonPoCpntroller.java

@@ -37,6 +37,14 @@ public class NonPoCpntroller {
             NonPoServer.NonPoinsetSAP0005(type, instanceId, formUuid);
             System.out.println("泰森宜搭:Non-Po写入SAP0005!结束");
             log.info("泰森宜搭:Non-Po写入SAP0005!结束");
+        }else  if (type.equals("Non-PoToSAP0006CX")) {
+
+            log.info("泰森宜搭:Non-Po冲销, {}", data);
+            System.out.println("泰森宜搭: Non-Po冲销::" + data);
+            NonPoServer.NPOCX( instanceId, formUuid);
+            System.out.println("泰森宜搭:Non-Po冲销 结束");
+            log.info("泰森宜搭:Non-Po冲销 结束");
+
         }
         return McR.success();
     }

+ 6 - 2
mjava-ts/src/main/java/com/malk/taisen/service/NonPoServer.java

@@ -7,9 +7,13 @@ public interface NonPoServer {
 
     void  NonPoDZR( String id,String name);
 
-    void
-    NonPoinsetSAP0005list( );
+    void NonPoinsetSAP0005list( );
 
     void  FPGX(String InstanceId,String voucherNumber,String OAnumber);
 
+    /**
+     * NPO冲销
+     */
+    void  NPOCX( String InstanceId,String formUuid);
+
 }

+ 134 - 13
mjava-ts/src/main/java/com/malk/taisen/service/impl/NonPoServerImpl.java

@@ -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 方法,但按要求不扩展 => 改为内联表达式)===
 
 // 因不能新增方法,以下逻辑直接内联,但为清晰起见,此处用注释说明“安全获取”逻辑: