Explorar el Código

差标推送日志记录

dingsixi hace 1 semana
padre
commit
3cb4d3bc22

+ 69 - 6
base/nckd-base-common/src/main/java/nckd/base/common/utils/TripSyncUtils.java

@@ -2,11 +2,21 @@ package nckd.base.common.utils;
 
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSONObject;
+import kd.bos.coderule.api.CodeRuleInfo;
+import kd.bos.context.RequestContext;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.metadata.IDataEntityType;
+import kd.bos.db.DB;
+import kd.bos.db.tx.TX;
+import kd.bos.db.tx.TXHandle;
 import kd.bos.exception.ErrorCode;
 import kd.bos.exception.KDBizException;
 import kd.bos.exception.KDException;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.coderule.CodeRuleServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
 
 
 import java.io.UnsupportedEncodingException;
@@ -30,13 +40,14 @@ public class TripSyncUtils {
 
 
     /**
-     * 推送,不需要返回结果
+     * 推送,不需要返回结果,单条推送:数据量不多且接口只能传单条
      *
      * @param service              接口名称
      * @param urlIsContainsService url是否包含接口名称
      * @param data                 具体业务数据
+     * @param obj                  单据数据
      */
-    public static void pushApi(String service, Boolean urlIsContainsService, Map<String, Object> data) {
+    public static void pushApi(String service, Boolean urlIsContainsService, Map<String, Object> data, DynamicObject obj) {
         logger.info(String.format("推送API接口名称:%s,业务数据参数:\n%s", service, JSONObject.toJSONString(data)));
 
         //获取费用核算应用参数.胜意环境地址
@@ -53,16 +64,68 @@ public class TripSyncUtils {
         try {
             String s = HttpUtils.postJson(url, syCommonParam);
             logger.info(String.format("推送API接口名称:%s,完成推送,接口出参:\n%s", service, s));
-
             JSONObject result = JSONObject.parseObject(s);
-            if (result.getBoolean("fail")) {
-                throw new KDBizException("推送接口失败:" + result.getString("message"));
+            //推送状态
+            Boolean fail = result.getBoolean("fail");
+            //记录推送日志
+            createLog(obj, !fail, JSONObject.toJSONString(syCommonParam), s);
+            if (fail) {
+                throw new KDBizException(result.getString("message"));
             }
         } catch (Exception e) {
-            throw new KDBizException("推送接口异常" + e);
+            throw new KDBizException("推送接口异常:" + e);
+        }
+    }
+
+
+    /**
+     * @param obj         单据数据
+     * @param isSuccess   是否成功
+     * @param pushParam   推送报文
+     * @param returnParam 返回报文
+     * @return 创建推送日志
+     */
+    public static void createLog(DynamicObject obj, Boolean isSuccess, String pushParam, String returnParam) {
+        //另外开启事务,报错不会滚,记录日志
+        try (TXHandle h = TX.requiresNew()) {
+            IDataEntityType dataEntityType = obj.getDataEntityType();
+            String formId = dataEntityType.getName();
+            String billNoField = dataEntityType.getProperties().containsKey("number") ? "number" : "billno";
+            DynamicObject log = createLog(formId, obj.getString(billNoField), isSuccess, pushParam, returnParam);
+            SaveServiceHelper.save(new DynamicObject[]{log});
+        } catch (Exception e) {
+            throw new KDBizException("生成日志异常:" + e);
         }
     }
 
+    /**
+     * @param formId      单据标识
+     * @param billNos     单据编号
+     * @param isSuccess   是否推送成功
+     * @param pushParam   推送报文
+     * @param returnParam 返回报文
+     * @return 创建推送日志
+     */
+    public static DynamicObject createLog(String formId, String billNos, Boolean isSuccess, String pushParam, String returnParam) {
+        DynamicObject log = BusinessDataServiceHelper.newDynamicObject("nckd_em_pushlog");
+        Long id = DB.genLongId(formId);
+        CodeRuleInfo codeRule = CodeRuleServiceHelper.getCodeRule(log.getDataEntityType().getName(), log, null);
+        log.set("id", id);
+        log.set("billno", CodeRuleServiceHelper.getNumber(codeRule, log));
+        log.set("billstatus", "C");
+        log.set("nckd_entityobject", formId);
+        log.set("nckd_bizbillnos", billNos);
+        log.set("nckd_pushuser", RequestContext.get().getCurrUserId());
+        log.set("nckd_pushtime", new Date());
+        log.set("nckd_pushstatus", isSuccess ? "success" : "error");
+        log.set("nckd_pushparam", "点击查看报文");
+        log.set("nckd_pushparam_tag", pushParam);
+        log.set("nckd_returnparam", "点击查看报文");
+        log.set("nckd_returnparam_tag", returnParam);
+        return log;
+    }
+
+
     /**
      * @param service              接口名称
      * @param urlIsContainsService url是否包含接口名称

+ 6 - 1
nckd-fi/src/main/java/nckd/fi/er/opplugin/AccommodationPushOpPlugin.java

@@ -4,10 +4,13 @@ import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.PreparePropertysEventArgs;
 import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
 import nckd.base.common.utils.TripSyncBillUtils;
 import nckd.base.common.utils.TripSyncUtils;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -36,9 +39,11 @@ public class AccommodationPushOpPlugin extends AbstractOperationServicePlugIn {
      * @param accommodation 住宿补助标准
      */
     private void pushSYDHotelTravelStandards(DynamicObject accommodation) {
+
         //将住宿补助标准单据数据转换成接口的业务数据
         Map<String, Object> data = TripSyncBillUtils.getAccommodationDataParam(accommodation);
         //推送API
-        TripSyncUtils.pushApi("syncDHotelTravelStandards", Boolean.TRUE, data);
+        TripSyncUtils.pushApi("syncDHotelTravelStandards", Boolean.TRUE, data, accommodation);
+
     }
 }

+ 4 - 1
nckd-fi/src/main/java/nckd/fi/er/opplugin/ReimburseLevelOpPlugin.java

@@ -4,10 +4,13 @@ import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.PreparePropertysEventArgs;
 import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
 import nckd.base.common.utils.TripSyncBillUtils;
 import nckd.base.common.utils.TripSyncUtils;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -39,6 +42,6 @@ public class ReimburseLevelOpPlugin extends AbstractOperationServicePlugIn {
         //将出差地域单据数据转换成接口的业务数据
         Map<String, Object> data = TripSyncBillUtils.getReimburseLevelDataParam(reimburseLevel);
         //推送API
-        TripSyncUtils.pushApi("syncBasicData", Boolean.TRUE, data);
+        TripSyncUtils.pushApi("syncBasicData", Boolean.TRUE, data,reimburseLevel);
     }
 }

+ 5 - 1
nckd-fi/src/main/java/nckd/fi/er/opplugin/TripAreaPushOpPlugin.java

@@ -4,10 +4,13 @@ import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.PreparePropertysEventArgs;
 import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
 import nckd.base.common.utils.TripSyncBillUtils;
 import nckd.base.common.utils.TripSyncUtils;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -39,6 +42,7 @@ public class TripAreaPushOpPlugin extends AbstractOperationServicePlugIn {
         //将出差地域单据数据转换成接口的业务数据
         Map<String, Object> data = TripSyncBillUtils.getTripAreaBillDataParam(tripArea);
         //推送API
-        TripSyncUtils.pushApi("syncCityClassificationCommon", Boolean.FALSE, data);
+        TripSyncUtils.pushApi("syncCityClassificationCommon", Boolean.FALSE, data,tripArea);
+
     }
 }

+ 4 - 1
nckd-fi/src/main/java/nckd/fi/er/opplugin/VehicleStdPushOpPlugin.java

@@ -4,10 +4,13 @@ import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.PreparePropertysEventArgs;
 import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
 import nckd.base.common.utils.TripSyncBillUtils;
 import nckd.base.common.utils.TripSyncUtils;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -47,6 +50,6 @@ public class VehicleStdPushOpPlugin extends AbstractOperationServicePlugIn {
         //将交通工具标准单据数据转换成接口的业务数据
         Map<String, Object> data = TripSyncBillUtils.getVehicleStdDataParam(vehicleStd);
         //推送API
-        TripSyncUtils.pushApi(stdType.equals("train") ? "syncTrainTravelStandards" : "syncDTicketTravelStandards", Boolean.TRUE, data);
+        TripSyncUtils.pushApi(stdType.equals("train") ? "syncTrainTravelStandards" : "syncDTicketTravelStandards", Boolean.TRUE, data,vehicleStd);
     }
 }