turborao 2 өдөр өмнө
parent
commit
3021b87a0a

+ 30 - 4
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/mservice/SyncSapFIUtils.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.exception.KDBizException;
+import kd.bos.ext.fi.plugin.ArApConvert.util.EmptyUtils;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
 import kd.bos.orm.query.QCP;
@@ -30,7 +31,7 @@ public class SyncSapFIUtils {
      * @return SAP系统的响应结果,以字符串形式返回
      * @throws KDBizException 如果请求失败,抛出业务异常
      */
-    public static String postDataToSAP( String jsonData)
+    public static String postDataToSAP(String urlType, String jsonData)
     {
         try {
             Map<String, String> mapentity = CommonHelperUtils.getCommonParams("SAP");
@@ -38,11 +39,22 @@ public class SyncSapFIUtils {
                 return null;
             }
             String param_voucher_url = mapentity.get("voucher_url");
+            String param_voucher_archive_url = mapentity.get("voucher_archive_url");
             String param_username = mapentity.get("username");
             String param_password = mapentity.get("password");
 
+            String post_url = null;
+            switch (urlType) {
+                case "voucher":
+                    post_url = param_voucher_url;break;
+                case "voucherArchive":
+                    post_url = param_voucher_archive_url;break;
+                default:
+                    break;
+            }
+
             if( StringUtils.isEmpty(param_username) || StringUtils.isEmpty(param_password)
-                    || StringUtils.isEmpty(param_voucher_url) ){
+                    || StringUtils.isEmpty(post_url) ){
                 return null;
             }
 
@@ -51,7 +63,7 @@ public class SyncSapFIUtils {
             header.put("Content-Type", "application/json; charset=UTF-8");
             header.put("Authorization", "Basic " + encoded);
 
-            String result = KHttpClientUtils.postjson(param_voucher_url, header, jsonData);
+            String result = KHttpClientUtils.postjson(post_url, header, jsonData);
             return result;
         } catch (Exception e) {
             throw new KDBizException("请求SAP接口失败:" + e.getMessage());
@@ -331,7 +343,21 @@ public class SyncSapFIUtils {
         return "0";
     }
 
-
+    public static String getVoucherArchiveData(String companyCode,String year)
+    {
+        JSONObject json = new JSONObject();
+        json.put("BUKRS", EmptyUtils.isNotEmpty(companyCode) ? companyCode : "");
+        json.put("GJAHR", year);
+        json.put("BELNR", "");
+        JSONObject itemMap = new JSONObject();
+        itemMap.put("BUKRS", "");
+        itemMap.put("GJAHR", "");
+        itemMap.put("BELNR", "");
+        JSONObject etMap = new JSONObject();
+        etMap.put("item", itemMap);
+        json.put("ET_ITEM", etMap);
+        return json.toString();
+    }
 
     public static String getVoucherFieldForQuery() {
         StringBuilder sb = new StringBuilder();

+ 72 - 1
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/mservice/impl/SynSapFIServiceImpl.java

@@ -92,7 +92,7 @@ public class SynSapFIServiceImpl implements SynSapService {
             //System.out.println("凭证 info:" + voucherInfo);
             logger.info("同步SAP凭证 info:" + voucherInfo);
             logger.info("同步SAP凭证 post:" + jsonData);
-            String response = SyncSapFIUtils.postDataToSAP(jsonData);
+            String response = SyncSapFIUtils.postDataToSAP("voucher",jsonData);
             logger.info("同步SAP凭证 return:" + response);
             if (StringUtils.isEmpty(response)) {
                 err.append("同步失败,SAP凭证:" + voucherInfo);
@@ -155,4 +155,75 @@ public class SynSapFIServiceImpl implements SynSapService {
         return result;
     }
 
+    /**
+     * 同步凭证档案号
+     *
+     * @param companyCode
+     * @return
+     */
+
+    public Map<String, String> synVoucherArchiveForSap(String companyCode,String year ) {
+        Map<String, String> result = new HashMap<>();
+        logger.info("同步SAP凭证归档号");
+        String data = SyncSapFIUtils.getVoucherArchiveData(companyCode,year);
+        logger.info("同步SAP凭证归档号,参数:" + data);
+        String response = SyncSapFIUtils.postDataToSAP("voucherArchive", data);
+        if (StringUtils.isEmpty(response)) {
+            result.put("code", "300");
+            result.put("msg", "同步SAP凭证归档号,同步失败");
+            return result;
+        }
+        JSONObject rData = JSONObject.parseObject(response);
+        String etype = rData.getString("E_TYPE");
+
+        if (!"S".equals(etype)) {
+            result.put("code", "301");
+            result.put("msg", "同步SAP凭证归档号,E_TYPE:" + etype + ",错误信息:" + rData.getString("E_MESSGE"));
+            return result;
+        }
+
+        JSONObject rEtItem = rData.getJSONObject("ET_ITEM");
+        if (rEtItem == null) {
+            result.put("code", "302");
+            result.put("msg", "同步SAP凭证归档号,ET_ITEM参数为空");
+            return result;
+        }
+
+        JSONArray rItemArray = rEtItem.getJSONArray("item");
+        if (rItemArray == null) {
+            result.put("code", "303");
+            result.put("msg", "同步SAP凭证归档号,item参数为空");
+            return result;
+        }
+
+        Map<String,String> voucherNumberMap = new HashMap<String, String>();
+        List<String> voucherNumberList  = new ArrayList<String>();
+        for (int i = 0; i < rItemArray.size(); ++i) {
+            JSONObject item = rItemArray.getJSONObject(i);
+            String number = item.getString("BELNR");
+            String ArchiveNumber = item.getString("XBLNR_ALT");  //归档号
+            if(StringUtils.isNotEmpty(ArchiveNumber)) {
+                voucherNumberMap.put(number, ArchiveNumber);
+                voucherNumberList.add(number);
+            }
+        }
+        QFilter filter = new QFilter("nckd_xblnr", QCP.in, voucherNumberList);
+        DynamicObject[] voucherDyns = BusinessDataServiceHelper.load("gl_voucher",  "id,nckd_xblnr,nckd_xrlnr_alt", new QFilter[]{filter});
+
+        ArrayList<DynamicObject> voucherList = new ArrayList<>();
+        for (DynamicObject voucherDyn : voucherDyns) {
+            voucherDyn.set("nckd_xrlnr_alt", voucherNumberMap.get(voucherDyn.getString("nckd_xblnr")));
+        }
+        if (voucherList.size() > 0) {
+            DynamicObject[] saveDynamicObject = voucherList.toArray(new DynamicObject[voucherList.size()]);
+            Object[] save = SaveServiceHelper.save(saveDynamicObject);
+            int length = save.length;
+            logger.info("同步[凭证归档号]完成,本次新增数量:{}" , length);
+            result.put("code", "200");
+            result.put("msg", "同步SAP凭证归档号,执行成功,本次同步数量" + length);
+        }
+
+        return result;
+    }
+
 }