|
|
@@ -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是否包含接口名称
|