parent
193ac58f71
commit
0b172097a1
|
|
@ -1,9 +1,12 @@
|
||||||
package shjh.jhzj7.fi.fi.plugin.form;
|
package shjh.jhzj7.fi.fi.plugin.form;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import kd.bos.context.RequestContext;
|
import kd.bos.context.RequestContext;
|
||||||
import kd.bos.dataentity.OperateOption;
|
import kd.bos.dataentity.OperateOption;
|
||||||
import kd.bos.dataentity.entity.DynamicObject;
|
import kd.bos.dataentity.entity.DynamicObject;
|
||||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||||
|
import kd.bos.dataentity.utils.StringUtils;
|
||||||
import kd.bos.entity.operate.OperateOptionConst;
|
import kd.bos.entity.operate.OperateOptionConst;
|
||||||
import kd.bos.entity.operate.result.OperateErrorInfo;
|
import kd.bos.entity.operate.result.OperateErrorInfo;
|
||||||
import kd.bos.entity.operate.result.OperationResult;
|
import kd.bos.entity.operate.result.OperationResult;
|
||||||
|
|
@ -22,8 +25,10 @@ import shjh.jhzj7.fi.fi.utils.JhzjUtils;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import static shjh.jhzj7.fi.fi.utils.SapUtils.vouchers_payable;
|
||||||
import static shjh.jhzj7.fi.fi.webapi.ApplyBillControler.*;
|
import static shjh.jhzj7.fi.fi.webapi.ApplyBillControler.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -57,43 +62,107 @@ public class SappzFormPlugin extends AbstractFormPlugin {
|
||||||
String procurementteam = (String) this.getModel().getValue("shjh_procurementteam");//采购组
|
String procurementteam = (String) this.getModel().getValue("shjh_procurementteam");//采购组
|
||||||
Boolean isselfprocurement = (Boolean) this.getModel().getValue("shjh_isselfprocurement");//是否自行采购
|
Boolean isselfprocurement = (Boolean) this.getModel().getValue("shjh_isselfprocurement");//是否自行采购
|
||||||
|
|
||||||
|
// 日期格式
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
||||||
|
JSONArray IT_LIST = new JSONArray();
|
||||||
|
// 添加公司过滤条件
|
||||||
|
if (shjhOrgfield != null) {
|
||||||
|
addFilterCondition(IT_LIST, "BUKRS", shjhOrgfield.getString("number"), shjhOrgfield.getString("number"));
|
||||||
|
}
|
||||||
|
// 添加SAP应付凭证号过滤条件
|
||||||
|
if (StringUtils.isNotEmpty(payablevouchernumber)) {
|
||||||
|
addFilterCondition(IT_LIST, "BELNR", payablevouchernumber, payablevouchernumber);
|
||||||
|
}
|
||||||
|
// 添加会计科目编号过滤条件
|
||||||
|
if (StringUtils.isNotEmpty(accountingsubjects)) {
|
||||||
|
addFilterCondition(IT_LIST, "HKONT", accountingsubjects, accountingsubjects);
|
||||||
|
}
|
||||||
|
// 添加SAP应付凭过账日期过滤条件
|
||||||
|
if (postingdate_start != null || postingdate_endda != null) {
|
||||||
|
String postingdate_starts = formatDate(sdf, postingdate_start);
|
||||||
|
String postingdate_enddas = formatDate(sdf, postingdate_endda);
|
||||||
|
addFilterCondition(IT_LIST, "BUDAT", postingdate_starts, postingdate_enddas);
|
||||||
|
}
|
||||||
|
// 添加SAP应付凭到期日过滤条件
|
||||||
|
if (duedate_start != null || duedate_end != null) {
|
||||||
|
String duedate_starts = formatDate(sdf, duedate_start);
|
||||||
|
String duedate_ends = formatDate(sdf, duedate_end);
|
||||||
|
addFilterCondition(IT_LIST, "FAEDT", duedate_starts, duedate_ends);
|
||||||
|
}
|
||||||
|
// 添加SAP应付凭证制单日期过滤条件
|
||||||
|
if (dateofpreparat_start != null && dateofpreparat_end != null) {
|
||||||
|
String dateofpreparat_starts = formatDate(sdf, dateofpreparat_start);
|
||||||
|
String dateofpreparat_ends = formatDate(sdf, dateofpreparat_end);
|
||||||
|
addFilterCondition(IT_LIST, "BLDAT", dateofpreparat_starts, dateofpreparat_ends);
|
||||||
|
}
|
||||||
DynamicObjectCollection shjhEntryentity = this.getModel().getEntryEntity("shjh_entryentity");
|
DynamicObjectCollection shjhEntryentity = this.getModel().getEntryEntity("shjh_entryentity");
|
||||||
shjhEntryentity.clear();
|
shjhEntryentity.clear();
|
||||||
//todo:根据查询条件,调用SAP查询凭证接口,生成分录行
|
//todo:根据查询条件,调用SAP查询凭证接口,生成分录行
|
||||||
//模拟查询到两个数据
|
JSONObject result = vouchers_payable(IT_LIST, payablevouchernumber);
|
||||||
for (int i = 0; i < 3; i++) {
|
if (null != result && result.containsKey("data")) {
|
||||||
DynamicObject add = shjhEntryentity.addNew();
|
// 处理查询结果
|
||||||
if (null != shjhOrgfield) {
|
JSONObject data = (JSONObject) result.get("data");
|
||||||
this.getModel().setValue("shjh_orgnumber", shjhOrgfield.getString("number"), i);//公司编号
|
if (null != data && data.containsKey("IT_ITEM")) {
|
||||||
|
JSONArray IT_ITEMs = (JSONArray) data.get("IT_ITEM");
|
||||||
|
if (!IT_ITEMs.isEmpty()) {
|
||||||
|
// for (int i = 0; i <5000; i++) {
|
||||||
|
for (int i = 0; i < IT_ITEMs.size(); i++) {
|
||||||
|
JSONObject it_list = (JSONObject)IT_ITEMs.get(i);
|
||||||
|
DynamicObject add = shjhEntryentity.addNew();
|
||||||
|
this.getModel().setValue("shjh_orgnumber", it_list.getString("BUKRS"), i);//公司编号,"公司代码
|
||||||
|
this.getModel().setValue("shjh_vouchernumber", it_list.getString("BELNR"), i);//凭证号,会计凭证编号
|
||||||
|
this.getModel().setValue("shjh_accountingyear", it_list.getString("GJAHR"), i);//会计年度,会计年度
|
||||||
|
this.getModel().setValue("shjh_accountingsubject", it_list.getString("SAKNR"), i);//todo:会计科目:1001,总帐科目编号
|
||||||
|
this.getModel().setValue("shjh_accountingsubjecline", it_list.getString("EBELP"), i);//会计科目行项目号,采购凭证的项目编号
|
||||||
|
this.getModel().setValue("shjh_outstandingamount", new BigDecimal(it_list.getString("WRBTR")), i);//未清金额,凭证货币金额
|
||||||
|
BigDecimal KURSF = new BigDecimal(it_list.getString("KURSF"));
|
||||||
|
if (KURSF.compareTo(BigDecimal.ZERO) == 0) {
|
||||||
|
KURSF = BigDecimal.ONE;
|
||||||
|
}
|
||||||
|
this.getModel().setValue("shjh_exchangerate",KURSF, i);//汇率
|
||||||
|
this.getModel().setValue("shjh_applyforconversionof",new BigDecimal(it_list.getString("DMBTR")), i);//申请金额折结算币别,按本位币计的金额
|
||||||
|
String FAEDT = it_list.getString("FAEDT");
|
||||||
|
if (StringUtils.isNotEmpty(FAEDT)) {
|
||||||
|
Date date = StrToDate(FAEDT);
|
||||||
|
this.getModel().setValue("shjh_duedat", date, i);//到期日,净价到期日
|
||||||
|
}
|
||||||
|
String BUDAT = it_list.getString("BUDAT");
|
||||||
|
if (StringUtils.isNotEmpty(BUDAT)) {
|
||||||
|
Date date = StrToDate(BUDAT);
|
||||||
|
this.getModel().setValue("shjh_bookkeepingdate", date, i);//记账日期,凭证中的过帐日期
|
||||||
|
}
|
||||||
|
String BLDAT = it_list.getString("BLDAT");
|
||||||
|
if (StringUtils.isNotEmpty(BLDAT)) {
|
||||||
|
Date date = StrToDate(BLDAT);
|
||||||
|
this.getModel().setValue("shjh_documentdate", date, i);//凭证日期,凭证中的凭证日期
|
||||||
|
}
|
||||||
|
String ZFBDT = it_list.getString("ZFBDT");
|
||||||
|
if (StringUtils.isNotEmpty(ZFBDT)) {
|
||||||
|
Date date = StrToDate(ZFBDT);
|
||||||
|
this.getModel().setValue("shjh_basedate", date, i);//基准日期,用于到期日计算的基准日期
|
||||||
|
}
|
||||||
|
// this.getModel().setValue("shjh_payee", "供应商", i);//todo:往来类型
|
||||||
|
// this.getModel().setValue("shjh_payeebanknum", it_list.getString("ZWLZH"), i);//todo:往来户名称
|
||||||
|
this.getModel().setValue("shjh_payee", "供应商", i);//往来类型
|
||||||
|
this.getModel().setValue("shjh_payeebanknum", "上海家化销售有限公司", i);//往来户名称
|
||||||
|
this.getModel().setValue("shjh_description",it_list.getString("BVTYP") , i);//合作银行类型.合作银行类型
|
||||||
|
this.getModel().setValue("shjh_reasoncode", "014", i);//todo:原因码
|
||||||
|
this.getModel().setValue("shjh_classificationoffund", payablevouchernumber, i);//todo:资金计划分类
|
||||||
|
this.getModel().setValue("shjh_secondarydept", it_list.getString("ZREQ_DEPT"), i);//二级部门,需求部门
|
||||||
|
this.getModel().setValue("shjh_procurementeam", it_list.getString("EKGRP"), i);//采购组
|
||||||
|
this.getModel().setValue("shjh_isselfprocurment", it_list.getString("ZZXCG_FLAG"), i);//todo:是否自行采购
|
||||||
|
this.getModel().setValue("shjh_paymentcurrency", it_list.getString("WAERS"), i);//付款币别编号CNY,货币码
|
||||||
|
this.getModel().setValue("shjh_settlementcurrency", it_list.getString("WAERS"), i);//结算币别编号,货币码
|
||||||
|
|
||||||
|
}
|
||||||
|
this.getView().updateView("shjh_entryentity");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.getModel().setValue("shjh_vouchernumber", payablevouchernumber, i);//凭证号
|
|
||||||
this.getModel().setValue("shjh_accountingyear", payablevouchernumber, i);//会计年度
|
|
||||||
// this.getModel().setValue("shjh_accountingsubject", accountingsubjects, i);//会计科目:1001
|
|
||||||
this.getModel().setValue("shjh_accountingsubject", "1001", i);//会计科目:1001
|
|
||||||
this.getModel().setValue("shjh_accountingsubjecline", payablevouchernumber, i);//会计科目行项目号
|
|
||||||
this.getModel().setValue("shjh_outstandingamount", BigDecimal.ONE, i);//未清金额
|
|
||||||
this.getModel().setValue("shjh_exchangerate", BigDecimal.ONE, i);//汇率
|
|
||||||
this.getModel().setValue("shjh_applyforconversionof", BigDecimal.ONE, i);//申请金额折结算币别
|
|
||||||
this.getModel().setValue("shjh_duedat", new Date(), i);//到期日
|
|
||||||
this.getModel().setValue("shjh_bookkeepingdate", new Date(), i);//记账日期
|
|
||||||
this.getModel().setValue("shjh_documentdate", new Date(), i);//凭证日期
|
|
||||||
this.getModel().setValue("shjh_basedate", new Date(), i);//基准日期
|
|
||||||
this.getModel().setValue("shjh_payee", "供应商", i);//往来类型
|
|
||||||
this.getModel().setValue("shjh_payeebanknum", "上海家化销售有限公司", i);//往来户名称
|
|
||||||
this.getModel().setValue("shjh_description", payablevouchernumber, i);//合作银行类型
|
|
||||||
this.getModel().setValue("shjh_reasoncode", "014", i);//原因码
|
|
||||||
this.getModel().setValue("shjh_classificationoffund", payablevouchernumber, i);//资金计划分类
|
|
||||||
this.getModel().setValue("shjh_secondarydept", payablevouchernumber, i);//二级部门
|
|
||||||
this.getModel().setValue("shjh_procurementeam", procurementteam, i);//采购组
|
|
||||||
this.getModel().setValue("shjh_isselfprocurment", isselfprocurement, i);//是否自行采购
|
|
||||||
this.getModel().setValue("shjh_paymentcurrency", "CNY", i);//付款币别编号
|
|
||||||
this.getModel().setValue("shjh_settlementcurrency", "CNY", i);//结算币别编号
|
|
||||||
}
|
}
|
||||||
this.getView().updateView("shjh_entryentity");
|
|
||||||
break;
|
break;
|
||||||
//todo:(字段待确认)遍历选中的分录行,生成付款申请单 7.1.3
|
|
||||||
// 日志中入参根据分录中存入的存储
|
|
||||||
case "confirm":
|
case "confirm":
|
||||||
|
//todo:(字段待确认)遍历选中的分录行,生成付款申请单 7.1.3
|
||||||
|
// 日志中入参根据分录中存入的存储
|
||||||
EntryGrid entryentitys = (EntryGrid) this.getView().getControl("shjh_entryentity");
|
EntryGrid entryentitys = (EntryGrid) this.getView().getControl("shjh_entryentity");
|
||||||
int[] selectRows = entryentitys.getSelectRows();
|
int[] selectRows = entryentitys.getSelectRows();
|
||||||
if (selectRows.length == 0) {
|
if (selectRows.length == 0) {
|
||||||
|
|
@ -188,7 +257,7 @@ public class SappzFormPlugin extends AbstractFormPlugin {
|
||||||
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的费控单据已锁定");
|
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的费控单据已锁定");
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
//存在且单据中SAP锁定状态为未锁定,更新数据
|
//todo:存在且单据中SAP锁定状态为未锁定,更新数据
|
||||||
ap_payapply = ap_payapplys;
|
ap_payapply = ap_payapplys;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -242,6 +311,9 @@ public class SappzFormPlugin extends AbstractFormPlugin {
|
||||||
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的" + currencyTypeName + "为空");
|
this.getView().showMessage("同步失败,凭证号:" + fkBillNum + "的" + currencyTypeName + "为空");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if ("RMB".equals(currencyNumber)) {
|
||||||
|
currencyNumber = "CNY";
|
||||||
|
}
|
||||||
QFilter filter = new QFilter("number", QCP.equals, currencyNumber);
|
QFilter filter = new QFilter("number", QCP.equals, currencyNumber);
|
||||||
DynamicObject currency = BusinessDataServiceHelper.loadSingle(BD_CURRENCY, new QFilter[]{filter});
|
DynamicObject currency = BusinessDataServiceHelper.loadSingle(BD_CURRENCY, new QFilter[]{filter});
|
||||||
// 检查 currency 是否为空
|
// 检查 currency 是否为空
|
||||||
|
|
@ -455,14 +527,14 @@ public class SappzFormPlugin extends AbstractFormPlugin {
|
||||||
|
|
||||||
}
|
}
|
||||||
//若多条数据相同,则合并为一条数据处理
|
//若多条数据相同,则合并为一条数据处理
|
||||||
for (DynamicObject ap_payapply : bills.values()){
|
for (DynamicObject ap_payapply : bills.values()) {
|
||||||
String fkBillNum = ap_payapply.getString("shjh_vouchernum");
|
String fkBillNum = ap_payapply.getString("shjh_vouchernum");
|
||||||
OperateOption option= OperateOption.create();
|
OperateOption option = OperateOption.create();
|
||||||
option.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(false)); // 不执行警告级别校验器
|
option.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(false)); // 不执行警告级别校验器
|
||||||
// 新增数据
|
// 新增数据
|
||||||
OperationResult saveResult = OperationServiceHelper.executeOperate("save", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
OperationResult saveResult = OperationServiceHelper.executeOperate("save", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
||||||
if (!saveResult.isSuccess()) {
|
if (!saveResult.isSuccess()) {
|
||||||
handleAndLogError(saveResult, "保存失败",apimenthod, fkBillNum, null);
|
handleAndLogError(saveResult, "保存失败", apimenthod, fkBillNum, null);
|
||||||
String errorMessage = getFirstErrorMessage(saveResult);
|
String errorMessage = getFirstErrorMessage(saveResult);
|
||||||
this.getView().showErrorNotification(errorMessage);
|
this.getView().showErrorNotification(errorMessage);
|
||||||
return;
|
return;
|
||||||
|
|
@ -470,12 +542,18 @@ public class SappzFormPlugin extends AbstractFormPlugin {
|
||||||
//todo:SAP是否锁定
|
//todo:SAP是否锁定
|
||||||
OperationResult submitResult = OperationServiceHelper.executeOperate("submit", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
OperationResult submitResult = OperationServiceHelper.executeOperate("submit", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
||||||
if (!submitResult.isSuccess()) {
|
if (!submitResult.isSuccess()) {
|
||||||
handleAndLogError(submitResult, "提交失败",apimenthod, fkBillNum, null);
|
// 提交失败,将保存的数据删除,记录日志
|
||||||
|
OperationServiceHelper.executeOperate("delete", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
||||||
|
handleAndLogError(submitResult, "提交失败", apimenthod, fkBillNum, null);
|
||||||
|
String errorMessage = getFirstErrorMessage(submitResult);
|
||||||
|
this.getView().showErrorNotification(errorMessage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
OperationResult auditResult = OperationServiceHelper.executeOperate("audit", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
OperationResult auditResult = OperationServiceHelper.executeOperate("audit", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
||||||
if (!auditResult.isSuccess()) {
|
if (!auditResult.isSuccess()) {
|
||||||
handleAndLogError(auditResult, "审核失败",apimenthod, fkBillNum, null);
|
handleAndLogError(auditResult, "审核失败", apimenthod, fkBillNum, null);
|
||||||
|
String errorMessage = getFirstErrorMessage(auditResult);
|
||||||
|
this.getView().showErrorNotification(errorMessage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log.error("审核成功,凭证号:" + fkBillNum);
|
log.error("审核成功,凭证号:" + fkBillNum);
|
||||||
|
|
@ -491,8 +569,19 @@ public class SappzFormPlugin extends AbstractFormPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Date StrToDate(String strDate){
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
try {
|
||||||
|
return sdf.parse(strDate);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取第一个错误信息
|
* 获取第一个错误信息
|
||||||
|
*
|
||||||
* @param result 操作返回结果
|
* @param result 操作返回结果
|
||||||
*/
|
*/
|
||||||
private String getFirstErrorMessage(OperationResult result) {
|
private String getFirstErrorMessage(OperationResult result) {
|
||||||
|
|
@ -512,7 +601,7 @@ public class SappzFormPlugin extends AbstractFormPlugin {
|
||||||
*/
|
*/
|
||||||
private void handleAndLogError(OperationResult result, String operationType, String fkBillNum, String apimenthod, String jsonBodyString) {
|
private void handleAndLogError(OperationResult result, String operationType, String fkBillNum, String apimenthod, String jsonBodyString) {
|
||||||
String errorMessage = getFirstErrorMessage(result);
|
String errorMessage = getFirstErrorMessage(result);
|
||||||
handleError(operationType +",原因:" + errorMessage, apimenthod, fkBillNum, jsonBodyString);
|
handleError(operationType + ",原因:" + errorMessage, apimenthod, fkBillNum, jsonBodyString);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -527,4 +616,29 @@ public class SappzFormPlugin extends AbstractFormPlugin {
|
||||||
log.error(errorMessage);
|
log.error(errorMessage);
|
||||||
JhzjUtils.saveLog(apimenthod, moduleName, inputParam, errorMessage, false, "API");
|
JhzjUtils.saveLog(apimenthod, moduleName, inputParam, errorMessage, false, "API");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 添加过滤条件到IT_LIST的方法
|
||||||
|
private void addFilterCondition(JSONArray IT_LIST, String field, String low, String high) {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.put("FIELD", field); // 字段
|
||||||
|
jsonObject.put("SIGN", "I"); // I:包含 E:排除
|
||||||
|
jsonObject.put("LOW", low); // LOW ,枚举字段所代表值的区间开始值
|
||||||
|
jsonObject.put("HIGH", high); // HIGH,枚举字段所代表值的区间结束值
|
||||||
|
jsonObject.put("OPTION", "BT"); // 默认BT
|
||||||
|
IT_LIST.add(jsonObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 日期格式化方法,添加异常处理
|
||||||
|
private String formatDate(SimpleDateFormat sdf, Date date) {
|
||||||
|
if (date == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return sdf.format(date);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 处理日期格式化异常
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,18 @@ import com.alibaba.fastjson.JSONObject;
|
||||||
import kd.bos.dataentity.entity.DynamicObject;
|
import kd.bos.dataentity.entity.DynamicObject;
|
||||||
import kd.bos.logging.Log;
|
import kd.bos.logging.Log;
|
||||||
import kd.bos.logging.LogFactory;
|
import kd.bos.logging.LogFactory;
|
||||||
import kd.bos.util.HttpClientUtils;
|
import org.apache.http.HttpEntity;
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
|
import org.apache.http.client.HttpClient;
|
||||||
|
import org.apache.http.client.config.RequestConfig;
|
||||||
|
import org.apache.http.client.methods.HttpPost;
|
||||||
|
import org.apache.http.entity.StringEntity;
|
||||||
|
import org.apache.http.impl.client.HttpClients;
|
||||||
|
import org.apache.http.util.EntityUtils;
|
||||||
|
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
@ -26,7 +35,7 @@ public class SapUtils {
|
||||||
public static final String unlockedUrl = "https://hipint-stg.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//测试环境(SAP应付凭证锁定解锁状态回写)
|
public static final String unlockedUrl = "https://hipint-stg.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//测试环境(SAP应付凭证锁定解锁状态回写)
|
||||||
// public static final String unlockedUrl = "https://hipint.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//正式环境
|
// public static final String unlockedUrl = "https://hipint.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//正式环境
|
||||||
private static final String Apimenthod2 = "SAP应付凭证清单接口";
|
private static final String Apimenthod2 = "SAP应付凭证清单接口";
|
||||||
private static final String interfaceID2 = "ZFS_GET_AP_OPENITEMS";//识别被调接口并进行路由
|
private static final String interfaceID2 = "PayableVoucherList";//识别被调接口并进行路由
|
||||||
|
|
||||||
public static final String vouchersUrl = "https://hipint-stg.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//测试环境(SAP应付凭证清单)
|
public static final String vouchersUrl = "https://hipint-stg.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//测试环境(SAP应付凭证清单)
|
||||||
// public static final String vouchersUrl = "https://hipint.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//正式环境
|
// public static final String vouchersUrl = "https://hipint.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send";//正式环境
|
||||||
|
|
@ -44,8 +53,6 @@ public class SapUtils {
|
||||||
*/
|
*/
|
||||||
private static Map<String, String> buildCustomerHeader(Map<String, Object> thirdPartyMap) {
|
private static Map<String, String> buildCustomerHeader(Map<String, Object> thirdPartyMap) {
|
||||||
Map<String, String> customerHeader = new HashMap<>();
|
Map<String, String> customerHeader = new HashMap<>();
|
||||||
customerHeader.put("Content-Type", "application/json;charset=UTF-8");//请求报文类型
|
|
||||||
customerHeader.put("x-Gateway-APIKey",APIKey);//apiKey,由ESB提供
|
|
||||||
customerHeader.put("interfaceID", ""+thirdPartyMap.get("interfaceID"));//识别被调接口并进行路由
|
customerHeader.put("interfaceID", ""+thirdPartyMap.get("interfaceID"));//识别被调接口并进行路由
|
||||||
customerHeader.put("receiverID", ""+thirdPartyMap.get("receiverID"));
|
customerHeader.put("receiverID", ""+thirdPartyMap.get("receiverID"));
|
||||||
return customerHeader;
|
return customerHeader;
|
||||||
|
|
@ -55,7 +62,7 @@ public class SapUtils {
|
||||||
/**
|
/**
|
||||||
* SAP应付凭证锁定解锁状态回写
|
* SAP应付凭证锁定解锁状态回写
|
||||||
*/
|
*/
|
||||||
public static void unlocked_status(Map<String, Object> thirdPartyMap) {
|
public static void unlocked_status(Map<String, Object> thirdPartyMap){
|
||||||
thirdPartyMap.put("interfaceID",interfaceID1);
|
thirdPartyMap.put("interfaceID",interfaceID1);
|
||||||
thirdPartyMap.put("receiverID",receiverID1);
|
thirdPartyMap.put("receiverID",receiverID1);
|
||||||
thirdPartyMap.put("URL",unlockedUrl);
|
thirdPartyMap.put("URL",unlockedUrl);
|
||||||
|
|
@ -64,7 +71,7 @@ public class SapUtils {
|
||||||
// 组装请求体
|
// 组装请求体
|
||||||
JSONObject pendingsBody = unlockedBody(thirdPartyMap);
|
JSONObject pendingsBody = unlockedBody(thirdPartyMap);
|
||||||
// 发送请求并处理响应
|
// 发送请求并处理响应
|
||||||
processRequest(customerHeader, pendingsBody, thirdPartyMap,Apimenthod1);
|
// processRequest(customerHeader, pendingsBody, thirdPartyMap,Apimenthod1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -102,43 +109,36 @@ public class SapUtils {
|
||||||
/**
|
/**
|
||||||
* SAP应付凭证清单接口
|
* SAP应付凭证清单接口
|
||||||
*/
|
*/
|
||||||
public static void vouchers_payable(Map<String, Object> thirdPartyMap) {
|
public static JSONObject vouchers_payable(JSONArray IT_LIST,String billno){
|
||||||
|
Map<String, Object> thirdPartyMap = new HashMap<>();
|
||||||
thirdPartyMap.put("interfaceID",interfaceID2);
|
thirdPartyMap.put("interfaceID",interfaceID2);
|
||||||
thirdPartyMap.put("senderID",receiverID1);
|
thirdPartyMap.put("receiverID",receiverID1);
|
||||||
thirdPartyMap.put("URL",vouchersUrl);
|
thirdPartyMap.put("URL",vouchersUrl);
|
||||||
// 构建请求头
|
thirdPartyMap.put("billno",billno);
|
||||||
Map<String, String> customerHeader = buildCustomerHeader(thirdPartyMap);
|
|
||||||
// 组装请求体
|
// 组装请求体
|
||||||
JSONObject payableBody = payableBody(thirdPartyMap);
|
JSONObject payableBody = payableBody(IT_LIST);
|
||||||
// 发送请求并处理响应
|
// 发送请求并处理响应
|
||||||
processRequest(customerHeader, payableBody, thirdPartyMap,Apimenthod2);
|
return processRequest(payableBody, thirdPartyMap, Apimenthod2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SAP应付凭证清单接口组装请求体:
|
* SAP应付凭证清单接口组装请求体:
|
||||||
* @param thirdPartyMap 第三方数据映射
|
|
||||||
* @return 请求体的 JSON 对象
|
* @return 请求体的 JSON 对象
|
||||||
*/
|
*/
|
||||||
private static JSONObject payableBody(Map<String, Object> thirdPartyMap) {
|
private static JSONObject payableBody(JSONArray IT_LIST) {
|
||||||
|
// 获取当前日期和时间
|
||||||
|
LocalDateTime date = LocalDateTime.now();
|
||||||
|
// 定义日期时间格式
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
|
||||||
|
// 格式化当前日期和时间
|
||||||
|
String dates = date.format(formatter);
|
||||||
//组装请求体
|
//组装请求体
|
||||||
JSONObject pendingsBody = new JSONObject();
|
JSONObject pendingsBody = new JSONObject();
|
||||||
pendingsBody.put("rootContextID",""+System.currentTimeMillis());//todo:唯一事务ID,采用UUID或其他强唯一性ID
|
pendingsBody.put("rootContextID",""+System.currentTimeMillis());//唯一事务ID,采用UUID或其他强唯一性ID
|
||||||
pendingsBody.put("requestTime", ""+(thirdPartyMap.get("createdatetime")));//请求时间,格式为yyyy-MM-dd HH:mm:ss.SSS
|
pendingsBody.put("requestTime",dates);//请求时间,格式为yyyy-MM-dd HH:mm:ss.SSS
|
||||||
|
|
||||||
JSONObject data = new JSONObject();
|
JSONObject data = new JSONObject();
|
||||||
JSONArray IT_LIST = new JSONArray();
|
data.put("IT_INPUT",IT_LIST);
|
||||||
//todo:多
|
|
||||||
List<DynamicObject> Lists = (List<DynamicObject>) thirdPartyMap.get("Lists");
|
|
||||||
for (DynamicObject obj : Lists) {
|
|
||||||
JSONObject jsonObject = new JSONObject();
|
|
||||||
jsonObject.put("FIELD", ""+(thirdPartyMap.get("FIELD")));//字段
|
|
||||||
jsonObject.put("SIGN", ""+(thirdPartyMap.get("SIGN")));//I:包含 E:排除
|
|
||||||
jsonObject.put("LOW", ""+(thirdPartyMap.get("LOW")));//LOW ,枚举字段所代表值的区间开始值
|
|
||||||
jsonObject.put("HIGH", ""+(thirdPartyMap.get("HIGH")));//HIGH,枚举字段所代表值的区间结束值
|
|
||||||
jsonObject.put("OPTION", "BT");//默认BT
|
|
||||||
IT_LIST.add(jsonObject);
|
|
||||||
}
|
|
||||||
data.put("IT_LIST",IT_LIST);
|
|
||||||
pendingsBody.put("data", data);
|
pendingsBody.put("data", data);
|
||||||
return pendingsBody;
|
return pendingsBody;
|
||||||
}
|
}
|
||||||
|
|
@ -146,16 +146,24 @@ public class SapUtils {
|
||||||
/**
|
/**
|
||||||
* 生成代扣款记账单接口
|
* 生成代扣款记账单接口
|
||||||
*/
|
*/
|
||||||
public static void withholding_billing(Map<String, Object> thirdPartyMap) {
|
public static void withholding_billing(){
|
||||||
|
Map<String, Object> thirdPartyMap = new HashMap<>();
|
||||||
thirdPartyMap.put("interfaceID",interfaceID3);
|
thirdPartyMap.put("interfaceID",interfaceID3);
|
||||||
thirdPartyMap.put("senderID",receiverID2);
|
thirdPartyMap.put("receiverID",receiverID2);
|
||||||
thirdPartyMap.put("URL",withholdingUrl);
|
thirdPartyMap.put("URL",withholdingUrl);
|
||||||
|
// 获取当前日期和时间
|
||||||
|
LocalDateTime date = LocalDateTime.now();
|
||||||
|
// 定义日期时间格式
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
|
||||||
|
// 格式化当前日期和时间
|
||||||
|
String dates = date.format(formatter);
|
||||||
|
thirdPartyMap.put("createdatetime",dates);
|
||||||
// 构建请求头
|
// 构建请求头
|
||||||
Map<String, String> customerHeader = buildCustomerHeader(thirdPartyMap);
|
Map<String, String> customerHeader = buildCustomerHeader(thirdPartyMap);
|
||||||
// 组装请求体
|
// 组装请求体
|
||||||
JSONObject withholdingBody = withholdingBody(thirdPartyMap);
|
JSONObject withholdingBody = withholdingBody(thirdPartyMap);
|
||||||
// 发送请求并处理响应
|
// 发送请求并处理响应
|
||||||
processRequest(customerHeader, withholdingBody, thirdPartyMap, Apimenthod3);
|
// processRequest(customerHeader, withholdingBody, thirdPartyMap, Apimenthod3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -213,29 +221,58 @@ public class SapUtils {
|
||||||
/**
|
/**
|
||||||
* 发送请求并处理响应
|
* 发送请求并处理响应
|
||||||
*
|
*
|
||||||
* @param customerHeader 请求头
|
|
||||||
* @param pendingsBody 请求体
|
* @param pendingsBody 请求体
|
||||||
* @param thirdPartyMap 第三方数据映射
|
* @param thirdPartyMap 第三方数据映射
|
||||||
* @param apiName 接口名称
|
* @param apiName 接口名称
|
||||||
*/
|
*/
|
||||||
private static void processRequest(Map<String, String> customerHeader, JSONObject pendingsBody, Map<String, Object> thirdPartyMap,String apiName) {
|
private static JSONObject processRequest(JSONObject pendingsBody, Map<String, Object> thirdPartyMap, String apiName){
|
||||||
String pendingPostjson = null;
|
|
||||||
|
// 配置超时时间
|
||||||
|
RequestConfig requestConfig = RequestConfig.custom()
|
||||||
|
.setConnectTimeout(10000) // 连接超时时间,单位毫秒
|
||||||
|
.setConnectionRequestTimeout(10000) // 请求获取连接的超时时间,单位毫秒
|
||||||
|
.setSocketTimeout(30000) // 读取超时时间,单位毫秒
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 创建 HttpClient 实例并应用配置
|
||||||
|
HttpClient httpClient = HttpClients.custom()
|
||||||
|
.setDefaultRequestConfig(requestConfig)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 创建 HttpPost 请求
|
||||||
|
HttpPost httpPost = new HttpPost(thirdPartyMap.get("URL").toString());
|
||||||
|
|
||||||
|
// 设置请求头
|
||||||
|
httpPost.setHeader("Content-Type", "application/json");
|
||||||
|
httpPost.setHeader("x-Gateway-APIKey", APIKey);
|
||||||
|
httpPost.setHeader("interfaceID", "" + thirdPartyMap.get("interfaceID"));
|
||||||
|
httpPost.setHeader("receiverID", "" + thirdPartyMap.get("receiverID"));
|
||||||
|
|
||||||
JSONObject jsonObject = null;
|
JSONObject jsonObject = null;
|
||||||
try {
|
try {
|
||||||
// 发送POST请求并获取响应
|
|
||||||
pendingPostjson = HttpClientUtils.postjson(thirdPartyMap.get("URL").toString(), customerHeader, pendingsBody.toJSONString());
|
|
||||||
jsonObject = parseResponse(pendingPostjson,apiName);
|
|
||||||
|
|
||||||
// 检查JSON对象是否为空
|
// 设置请求体
|
||||||
if (jsonObject != null && !jsonObject.isEmpty()) {
|
StringEntity entity = new StringEntity(pendingsBody.toJSONString(), "UTF-8");
|
||||||
|
httpPost.setEntity(entity);
|
||||||
|
|
||||||
|
// 执行请求
|
||||||
|
HttpResponse response = httpClient.execute(httpPost);
|
||||||
|
|
||||||
|
// 获取响应实体
|
||||||
|
HttpEntity responseEntity = response.getEntity();
|
||||||
|
if (responseEntity != null) {
|
||||||
|
String responseString = EntityUtils.toString(responseEntity, "UTF-8");
|
||||||
|
jsonObject = JSONObject.parseObject(responseString);
|
||||||
handleResponse(jsonObject, pendingsBody, thirdPartyMap,apiName);
|
handleResponse(jsonObject, pendingsBody, thirdPartyMap,apiName);
|
||||||
|
return com.alibaba.fastjson.JSONObject.parseObject(responseString);
|
||||||
}else {
|
}else {
|
||||||
logger.info(apiName +"失败!");
|
logger.info(apiName +"失败!");
|
||||||
saveLog(apiName +(thirdPartyMap.get("billno").toString()), pendingsBody, jsonObject, false,apiName);
|
saveLog(apiName +(thirdPartyMap.get("billno").toString()), pendingsBody, null, false,apiName);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
handleException(e, pendingsBody, thirdPartyMap, jsonObject,apiName);
|
handleException(e, pendingsBody, thirdPartyMap, jsonObject,apiName);
|
||||||
}
|
}
|
||||||
|
return jsonObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -261,15 +298,15 @@ public class SapUtils {
|
||||||
* @param apiName 接口名称
|
* @param apiName 接口名称
|
||||||
*/
|
*/
|
||||||
private static void handleResponse(JSONObject jsonObject, JSONObject pendingsBody, Map<String, Object> thirdPartyMap,String apiName) {
|
private static void handleResponse(JSONObject jsonObject, JSONObject pendingsBody, Map<String, Object> thirdPartyMap,String apiName) {
|
||||||
JSONArray data1 = jsonObject.getJSONArray("data");
|
String operResult = jsonObject.getString("code");
|
||||||
if (data1 == null || data1.isEmpty()) {
|
JSONObject jsonobject = jsonObject.getJSONObject("data");
|
||||||
|
if (jsonobject == null || jsonobject.isEmpty()) {
|
||||||
logger.info(apiName + "失败!");
|
logger.info(apiName + "失败!");
|
||||||
saveLog(apiName + (thirdPartyMap.get("billno").toString()), pendingsBody, jsonObject, false,apiName);
|
saveLog(apiName + (thirdPartyMap.get("billno").toString()), pendingsBody, jsonObject, false,apiName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
JSONObject jsonobject = data1.getJSONObject(0);
|
|
||||||
String operResult = jsonobject.getString("operResult");
|
String logMessage = Objects.equals(operResult, "0") ? apiName +"成功!" : apiName +"失败!";
|
||||||
String logMessage = Objects.equals(operResult, "1") ? apiName +"成功!" : apiName +"失败!";
|
|
||||||
|
|
||||||
// 记录日志
|
// 记录日志
|
||||||
logger.info(logMessage);
|
logger.info(logMessage);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue