Ver código fonte

Merge remote-tracking branch 'origin/master'

lfx 1 mês atrás
pai
commit
afad8bdaa6

+ 5 - 3
mjava-ts/src/main/java/com/malk/taisen/controller/NonPoCpntroller.java

@@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -24,9 +25,10 @@ public class NonPoCpntroller {
 
 
     @PostMapping("/nonpo")
-    McR notice(HttpServletRequest request) {
-
-        Map data = UtilServlet.getParamMap(request);
+  //  McR notice(HttpServletRequest request) {
+    McR notice( @RequestBody  Map<String, Object> data) {
+       // Map data = UtilServlet.getParamMap(request);
+        log.info("NonpoController:notice {}", data);
         String instanceId = UtilMap.getString(data, "instanceId");
         String type = UtilMap.getString(data, "type");
         if (type.equals("Non-PoToSAP0005")) {

+ 0 - 1
mjava-ts/src/main/java/com/malk/taisen/controller/RtrController.java

@@ -39,7 +39,6 @@ public class RtrController {
 
         // 销售计提
         if (type.equals("XSJT")) {
-
             log.info("销售计提, {}", data);
             rtrServer.RtrInsetSAP0020(type,formUuid, instanceId);
         }

+ 1 - 292
mjava-ts/src/main/java/com/malk/taisen/service/impl/NonPoServerImpl.java

@@ -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);

+ 18 - 14
mjava-ts/src/main/java/com/malk/taisen/service/impl/RtrServerImpl.java

@@ -230,7 +230,7 @@ public class RtrServerImpl implements RtrServer {
 
         /// 主表字段: 公司代码, 凭证类型, 货币码, 钉钉单据号, 发起人
         Map body = UtilMap.map( "BUKRS, BLART, WAERS, XBLNR, USNAM",
-                "textField_mejfj9iw, selectField_mejkjsb5, selectField_mejfoong, serialNumberField_mjc4e95b, textField_mjihy3sl",
+                "textField_mejfj9iw, selectField_mejkjsb5, selectField_mejfoong, serialNumberField_mjc4e95b, textField_mjjs85qn",
                 dataForm);
         /// 主表字段: 凭证日期, 过账日期, 会计期间
         body.put("BLDAT", UtilDateTime.format(new Date(UtilMap.getLong(dataForm, "dateField_mipgl0vv")), "yyyyMMdd"));
@@ -238,34 +238,28 @@ public class RtrServerImpl implements RtrServer {
         if (UtilMap.getString(dataForm, "textField_mipmks2t").contains("-")) {
             body.put("MONAT", UtilMap.getString(dataForm, "textField_mipmks2t").split("-")[1]);
         }
-
         List<Map> details = UtilMap.getList(dataForm, "tableField_mipgl0vx");
         if (details.size() == 50) {
             details = ydService.queryDetails(YDParam.builder().formInstanceId(InstanceId).formUuid(formUuid).tableFieldId("tableField_mipgl0vx").build());
         }
-
         log.info("销售计提行项目, {}, {}", InstanceId, details.size());
         int total = details.size(), succ = 0, fail = 0;
         // 批量推送Sap凭证: 兼容重试场景
         for (Map detail : details) {
-
             if ("成功".equals(UtilMap.getString(detail, "selectField_mjihy3si"))) {
                 succ += 1;
                 continue;
             }
-
             /// 主表字段: 上传编号, 抬头文本
             String referCode = UtilMap.getString(dataForm, "serialNumberField_mjc4e95b") + UtilMap.getString(detail, "textField_mjif9kha");
             body.put("ZUPDNR", referCode);
             body.put("BKTXT", UtilMap.getString(detail, "textField_mipgl0w4"));
-
-            /// 明细字段: 凭证货币金额, 成本中心, 项目文本, 利润中心, 分配, 参考码1, 参考码2, 产品号, 销售组织, 分销渠道, 产品组, 客户定义, 物料组包装物料, 销售地区, 客户简称
-            Map row = UtilMap.map("WRBTR, KOSTL, SGTXT, PRCTR, ZUONR, XREF1, XREF2, ARTNR, VKORG, VTWEG, SPART, KDKG4, MAGRV, BZIRK, WWKCG",
-                    "numberField_mipgl0w2, textField_mipgl0w3, textField_mipgl0w4, textField_mjihy3sn, textField_mipgl0w5, textField_mipgl0w6, textField_mipgl0w7, textField_mipgl0w9, textField_mipgl0wa, textField_mipgl0wb, textField_mipgl0wc, textField_mipgl0wd, textField_mipgl0we, textField_mipgl0wf, textField_mipgl0wg",
+            /// 明细字段: 凭证货币金额, 项目文本, 利润中心, 分配, 参考码1, 参考码2, 产品号, 销售组织, 分销渠道, 产品组, 客户定义, 物料组包装物料, 销售地区, 客户简称
+            Map row = UtilMap.map("WRBTR, SGTXT, PRCTR, ZUONR, XREF1, XREF2, ARTNR, VKORG, VTWEG, SPART, KDKG4, MAGRV, BZIRK, WWKCG",
+                    "numberField_mipgl0w2, textField_mipgl0w4, textField_mjihy3sn, textField_mipgl0w5, textField_mipgl0w6, textField_mipgl0w7, textField_mipgl0w9, textField_mipgl0wa, textField_mipgl0wb, textField_mipgl0wc, textField_mipgl0wd, textField_mipgl0we, textField_mipgl0wf, textField_mipgl0wg",
                     detail);
-
+            row.put("ZUPDNR", referCode);
             try {
-
                 Map result = this._pushSap(detail, body, row);
                 if ("S".equals(result.get("E_SYSMSGTYPE"))) {
                     detail.put("selectField_mjihy3si", "成功");
@@ -303,15 +297,25 @@ public class RtrServerImpl implements RtrServer {
 
         /// 借贷处理: 行项目号; 记账代码, 借方-40, 贷方-50; 总账科目;
         List<Map> items = new  ArrayList<>();
-        Map jf = UtilMap.map("ITMNR, BSCHL, HKONT", "001", "40", UtilMap.getString(detail, "textField_mipgl0vy"));
+        /// 成本中心: 传递到sap,科目大于等于5取值到成本中心行项目,否则则不赋值
+        String cbzx = UtilMap.getString(detail, "textField_mipgl0w3");
+        String jfkm = UtilMap.getString(detail, "textField_mipgl0vy");
+        Map jf = UtilMap.map("ITMNR, BSCHL, HKONT", "001", "40", jfkm);
+        if (Integer.valueOf(jfkm.substring(0, 1)) >= 5) {
+            jf.put("KOSTL", cbzx);
+        }
         jf.putAll(row);
         items.add(jf);
-        Map df = UtilMap.map("ITMNR, BSCHL, HKONT", "002", "50", UtilMap.getString(detail, "textField_mipgl0w1"));
+        String dfkm = UtilMap.getString(detail, "textField_mipgl0w1");
+        Map df = UtilMap.map("ITMNR, BSCHL, HKONT", "002", "50", dfkm);
+        if (Integer.valueOf(dfkm.substring(0, 1)) >= 5) {
+            df.put("KOSTL", cbzx);
+        }
         df.putAll(row);
         items.add(df);
         body.put("ITEMS", items);
         log.info("销售计提推送 SAP, {}", JSON.toJSONString(body));
-        String rsp = HttpUtil.post(JT_sapUrl, null, JSON.toJSONString(body), null);
+        String rsp = HttpUtil.post(JT_sapUrl + "&ZUPDNR=" + body.get("ZUPDNR"), null, JSON.toJSONString(body), null);
         log.info("销售计提 SAP 响应, {}", rsp);
         List<Map> result = JSON.parseArray(rsp, Map.class);
         McException.assertAccessException(result.isEmpty(), "Sap接口请求异常, 返回空集合, 需重新推送.");

+ 0 - 1
mjava-ts/src/main/resources/application-dev.yml

@@ -4,7 +4,6 @@ server:
   servlet:
     context-path: /api/ts
 
-
 enable:
    scheduling: false