收款单推退预付款接口

This commit is contained in:
李贵强 2025-03-11 14:41:28 +08:00
parent b857a700da
commit 8243c926be
7 changed files with 404 additions and 87 deletions

View File

@ -48,6 +48,7 @@ public class ClaimConvertPlugin extends AbstractConvertPlugIn implements Plugin
/**
* 目标单字段值携带完毕后触发此事件
* 携带字段到单据体
*
* @remark 在此事件中自行取源单字段值格式化后填写到目标单
*/
@SuppressWarnings("unchecked")
@ -60,20 +61,20 @@ public class ClaimConvertPlugin extends AbstractConvertPlugIn implements Plugin
for (ExtendedDataEntity billEntity : extendedDataEntities) {
// 获取单据数据包
DynamicObject bill = billEntity.getDataEntity();
String recPayer = (String) this.getSourceData(billEntity, fldProperties, "recpayer");
if (null!=recPayer){
long recPayerId = Long.parseLong(recPayer);
//付款人类型
String recPayType = (String) this.getSourceData(billEntity, fldProperties, "paymenttype");
if (null!=recPayType){
//付款人类型
String recPayType = (String) this.getSourceData(billEntity, fldProperties, "paymenttype");
if ("bd_customer".equals(recPayType)||"bd_supplier".equals(recPayType)) {
String recPayer = (String) this.getSourceData(billEntity, fldProperties, "recpayer");
if (null != recPayer) {
long recPayerId = Long.parseLong(recPayer);
DynamicObject recPayObj = BusinessDataServiceHelper.loadSingle(recPayerId, recPayType);
if (null!=recPayObj){
if (null != recPayObj) {
String groupNumber = recPayObj.getString("group.number");
if (("D300".equals(groupNumber) || "D301".equals(groupNumber))){
if (("D300".equals(groupNumber) || "D301".equals(groupNumber))) {
//默认值中国一次性客户/一次性供应商时设置默认值
bill.set("shjh_country","中国");
bill.set("shjh_country", "中国");
//默认值上海一次性客户/一次性供应商时设置默认值
bill.set("shjh_city","上海");
bill.set("shjh_city", "上海");
}
}
}
@ -123,7 +124,7 @@ public class ClaimConvertPlugin extends AbstractConvertPlugIn implements Plugin
continue;
}
//是否已携带表头字段
boolean setTopFields =false;
boolean setTopFields = false;
for (DynamicObject sourceEntry : dynamicObjectCollection) {
String claimBill = sourceEntry.getString("e_claimbill");
Long id = sourceEntry.getLong("e_sourceentryid");
@ -133,8 +134,8 @@ public class ClaimConvertPlugin extends AbstractConvertPlugIn implements Plugin
continue;
}
//收款单单据体字段携带
setTopFields(setTopFields,bill,claimBillObj);
setTopFields=true;
setTopFields(setTopFields, bill, claimBillObj);
setTopFields = true;
DynamicObjectCollection entryCollection = claimBillObj.getDynamicObjectCollection("entryentity");
if (entryCollection == null || entryCollection.isEmpty()) {
logger.warn("认领单据体数据为空,跳过处理。");
@ -154,7 +155,7 @@ public class ClaimConvertPlugin extends AbstractConvertPlugIn implements Plugin
if (typeNumber != null) {
switch (typeNumber) {
case "103":
setPrepaymentFields(targetEntry, entry ,bill);
setPrepaymentFields(targetEntry, entry, bill);
break;
case "109":
setLoanFields(targetEntry, entry);
@ -166,6 +167,8 @@ public class ClaimConvertPlugin extends AbstractConvertPlugIn implements Plugin
}
targetEntry.set("shjh_verificationnum", entry.getString("shjh_verificationnum"));
targetEntry.set("shjh_fiscalyear", entry.getString("shjh_fiscalyear"));
targetEntry.set("shjh_billheaderid", entry.getString("shjh_billheaderid"));
targetEntry.set("shjh_detailid", entry.getString("shjh_detailid"));
}
}
}
@ -175,12 +178,13 @@ public class ClaimConvertPlugin extends AbstractConvertPlugIn implements Plugin
/**
* 获取源单字段数据
* @param billEntity 源单数据包
*
* @param billEntity 源单数据包
* @param fldProperties 源单字段
* @param name 字段标识
* @param name 字段标识
* @return
*/
private Object getSourceData(ExtendedDataEntity billEntity,Map<String, DynamicProperty> fldProperties,String name){
private Object getSourceData(ExtendedDataEntity billEntity, Map<String, DynamicProperty> fldProperties, String name) {
List<DynamicObject> sourceRows = (List<DynamicObject>) billEntity.getValue(ConvertConst.ConvExtDataKey_SourceRows);
if (sourceRows == null || sourceRows.isEmpty()) {
logger.warn("未获取到源单行数据,跳过处理。");
@ -196,22 +200,22 @@ public class ClaimConvertPlugin extends AbstractConvertPlugIn implements Plugin
return idProperty.getValue(srcRow);
}
private void setTopFields(boolean setTopFields,DynamicObject bill,DynamicObject claimBillObj){
if (!setTopFields){
bill.set("shjh_costcenter",claimBillObj.getDynamicObject("shjh_costcenter"));
bill.set("shjh_refundmethods",claimBillObj.getString("shjh_refundmethods"));
bill.set("shjh_customer",claimBillObj.getDynamicObject("shjh_customer"));
bill.set("shjh_repaymentmethod",claimBillObj.getString("shjh_repaymentmethod"));
bill.set("shjh_customersplit",claimBillObj.getBoolean("shjh_customersplit"));
private void setTopFields(boolean setTopFields, DynamicObject bill, DynamicObject claimBillObj) {
if (!setTopFields) {
bill.set("shjh_costcenter", claimBillObj.getDynamicObject("shjh_costcenter"));
bill.set("shjh_refundmethods", claimBillObj.getString("shjh_refundmethods"));
bill.set("shjh_customer", claimBillObj.getDynamicObject("shjh_customer"));
bill.set("shjh_repaymentmethod", claimBillObj.getString("shjh_repaymentmethod"));
bill.set("shjh_customersplit", claimBillObj.getBoolean("shjh_customersplit"));
}
}
private void setPrepaymentFields(DynamicObject targetEntry, DynamicObject claimEntry,DynamicObject bill) {
private void setPrepaymentFields(DynamicObject targetEntry, DynamicObject claimEntry, DynamicObject bill) {
targetEntry.set("shjh_billnum", claimEntry.getString("shjh_prepaymentnum"));
String purchaseNum = claimEntry.getString("shjh_purchasenum");
if (!purchaseNum.isEmpty()){
if (!purchaseNum.isEmpty()) {
targetEntry.set("shjh_purchasenum", purchaseNum);
bill.set("shjh_isorder",true);
bill.set("shjh_isorder", true);
}
targetEntry.set("shjh_purchaselinenum", claimEntry.getString("shjh_purchaselinenum"));
targetEntry.set("shjh_billsubject", claimEntry.getString("shjh_billsubject"));

View File

@ -152,8 +152,8 @@ public class ASParbillFormPlugin extends AbstractFormPlugin implements Plugin {
return;
}
String supplierCode = supplier.getString("number");
HashMap<String, String> head = ApiUtils.buildHead();
String interfaceID="FMGetJahYFKList";
HashMap<String, String> head = ApiUtils.buildHead(interfaceID);
HashMap<String, Object> body = ApiUtils.buildBody(companyCode, null, startDate, endDate);
HashMap<String, Object> data = (HashMap<String, Object>) body.get("data");

View File

@ -171,6 +171,8 @@ public class ClaimBillButtonAssPlugin extends AbstractFormPlugin implements Plug
this.getModel().setValue(ClaimFieldsInfo.VERIFICATION_NUMBER, returnData.get(i).getString(ClaimFieldsInfo.VERIFICATION_NUMBER), i);
//会计年度
this.getModel().setValue(ClaimFieldsInfo.FISCAL_YEAR, returnData.get(i).getString(ClaimFieldsInfo.FISCAL_YEAR), i);
this.getModel().setValue("shjh_billheaderid", returnData.get(i).getString("shjh_billheaderid"), i);
this.getModel().setValue("shjh_detailid", returnData.get(i).getString("shjh_detailid"), i);
}
/**
@ -189,6 +191,8 @@ public class ClaimBillButtonAssPlugin extends AbstractFormPlugin implements Plug
this.getModel().setValue(ClaimFieldsInfo.VERIFICATION_NUMBER, returnData.get(i).getString(ClaimFieldsInfo.VERIFICATION_NUMBER), i);
//会计年度
this.getModel().setValue(ClaimFieldsInfo.FISCAL_YEAR, returnData.get(i).getString(ClaimFieldsInfo.FISCAL_YEAR), i);
this.getModel().setValue("shjh_billheaderid", returnData.get(i).getString("shjh_billheaderid"), i);
this.getModel().setValue("shjh_detailid", returnData.get(i).getString("shjh_detailid"), i);
}
}

View File

@ -160,8 +160,8 @@ public class FeeControlApiPlugin extends AbstractFormPlugin implements Plugin {
return;
}
String supplierCode = supplier.getString("number");
HashMap<String, String> head = ApiUtils.buildHead();
String interfaceID="FMGetJahYFKList";
HashMap<String, String> head = ApiUtils.buildHead(interfaceID);
HashMap<String, Object> body = ApiUtils.buildBody(companyCode, this.getUserCode(), startDate, endDate);
HashMap<String, Object> data = (HashMap<String, Object>) body.get("data");
@ -175,75 +175,54 @@ public class FeeControlApiPlugin extends AbstractFormPlugin implements Plugin {
" \"code\": \"0\",\n" +
" \"msg\": \"成功\",\n" +
" \"data\": {\n" +
" \"total\": 2,\n" +
" \"rows\": [\n" +
" \"total\": 1,\n" +
" \"LoanItems\": [\n" +
" {\n" +
" \"ID\": \"fc7443ac-9f85-4d17-a7ee-5620330f28a6\",\n" +
" \"RequestCode\": \"YFK2025010900001\",\n" +
" \"RequestAmt\": 8,\n" +
" \"RequestName\": \"2025-01-09对公预付款单\",\n" +
" \"RequestAmt\": 111,\n" +
" \"RequestDate\": \"2025-01-09 11:29:22\",\n" +
" \"GLDate\": \"2025-01-09 00:00:00\",\n" +
" \"RequestUserName\": \"余超\",\n" +
" \"AvailableAmt\": 8,\n" +
" \"AvailableAmt\": 80.5,\n" +
" \"SupplierId\": 89948,\n" +
" \"SupplierId_Name\": \"品销宝\",\n" +
" \"CompanyCode\": \"C021\",\n" +
" \"CompanyName\": \"上海家化电子商务有限公司\",\n" +
" \"StrColumn20\": \"H693DW3495\",\n" +
" \"RequestRemark\": \"测试\",\n" +
" \"StrColumn20\": \"1700000001\",\n" +
" \"LoanDetailInfo\": [\n" +
" {\n" +
" \"BillHeaderID\": \"fc7443ac-9f85-4d17-a7ee-5620330f28a6\",\n" +
" \"PoOrderNo\": \"20250306\",\n" +
" \"PoOrderNo\": \"YFKTH001\",\n" +
" \"PoOrderColNo\": \"001\",\n" +
" \"DetailID\": \"d7bc66bf-11e7-4ef5-9d98-80881c1caff7\",\n" +
" \"ApplyAmt\": 8,\n" +
" \"ApplyAmt\": 111,\n" +
" \"ThisAmt\": null,\n" +
" \"AvailableAmt\": 8,\n" +
" \"AvailableAmt\": 80.5,\n" +
" \"RequestCode\": \"YFK2025010900001\",\n" +
" \"RequestName\": \"2025-01-09对公预付款单\",\n" +
" \"RequestAmt\": 8,\n" +
" \"InitialAmount\": 8,\n" +
" \"Remark\": \"测试\",\n" +
" \"CreatedDate\": \"2025-01-09 11:29:11\",\n" +
" \"ExpenseItemName\": \"会务费\",\n" +
" \"CurrencyId\": 10510,\n" +
" \"BillAvailableAmt\": 8\n" +
" \"RequestAmt\": 111,\n" +
" \"InitialAmount\": 111,\n" +
" \"Remark\": null,\n" +
" \"CreatedDate\": null,\n" +
" \"DetailRemark\": null,\n" +
" \"ExpenseItemName\": null,\n" +
" \"CurrencyId\": 0,\n" +
" \"BillAvailableAmt\": 80.5\n" +
" }\n" +
" ]\n" +
" },\n" +
" }\n" +
" ],\n" +
" \"VoucherItems\": [\n" +
" {\n" +
" \"ID\": \"fc7443ac-9f85-4d17-a7ee-5620330f28d4\",\n" +
" \"RequestCode\": \"YFK2025010900002\",\n" +
" \"RequestAmt\": 9,\n" +
" \"RequestDate\": \"2025-01-09 11:29:22\",\n" +
" \"RequestUserName\": \"余超\",\n" +
" \"AvailableAmt\": 9,\n" +
" \"SupplierId\": 89949,\n" +
" \"SupplierId_Name\": \"品销宝\",\n" +
" \"CompanyCode\": \"C021\",\n" +
" \"CompanyName\": \"上海家化电子商务有限公司\",\n" +
" \"StrColumn20\": \"H693DW3496\",\n" +
" \"RequestRemark\": \"测试\",\n" +
" \"LoanDetailInfo\": [\n" +
" {\n" +
" \"BillHeaderID\": \"fc7443ac-9f85-4d17-a7ee-5626930f28a6\",\n" +
" \"PoOrderNo\": \"20250307\",\n" +
" \"PoOrderColNo\": \"002\",\n" +
" \"DetailID\": \"d7bc66bf-11e7-4ef5-9d98-56881c1caff7\",\n" +
" \"ApplyAmt\": 9,\n" +
" \"ThisAmt\": null,\n" +
" \"AvailableAmt\": 9,\n" +
" \"RequestCode\": \"YFK2025010900002\",\n" +
" \"RequestName\": \"2025-01-09对公预付款单\",\n" +
" \"RequestAmt\": 9,\n" +
" \"InitialAmount\": 9,\n" +
" \"Remark\": \"测试\",\n" +
" \"CreatedDate\": \"2025-01-09 11:29:11\",\n" +
" \"ExpenseItemName\": \"会务费\",\n" +
" \"CurrencyId\": 10511,\n" +
" \"BillAvailableAmt\": 9\n" +
" }\n" +
" ]\n" +
" \"BillHeaderID\": \"fc7443ac-9f85-4d17-a7ee-5620330f28a6\",\n" +
" \"COAItemFullName\": \"1123900000 预付账款\",\n" +
" \"COAItemCode\": \"1123900000\",\n" +
" \"COAItemName\": \"预付账款\",\n" +
" \"ReasonCode\": \"089\",\n" +
" \"ReasonCodeName\": \"支付的其他与经营活动\"\n" +
" }\n" +
" ]\n" +
" }\n" +
@ -270,7 +249,8 @@ public class FeeControlApiPlugin extends AbstractFormPlugin implements Plugin {
*/
private void handleLoanApi(String companyCode, Date startDate, Date endDate, String billNumber) {
try {
HashMap<String, String> head = ApiUtils.buildHead();
String interfaceID="FMGetJahJKYList";
HashMap<String, String> head = ApiUtils.buildHead(interfaceID);
HashMap<String, Object> body = ApiUtils.buildBody(companyCode, this.getUserCode(), startDate, endDate);
String response = ApiUtils.sendPost(head, body, "https://hipint-stg.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send");
if (response != null) {
@ -295,7 +275,7 @@ public class FeeControlApiPlugin extends AbstractFormPlugin implements Plugin {
hideLoanFields();
JSONObject root = JSONObject.parseObject(response);
JSONObject data = root.getJSONObject("data");
JSONArray rows = data.getJSONArray("rows");
JSONArray rows = data.getJSONArray("LoanItems");
DynamicObjectCollection entry = this.getModel().getEntryEntity(ENTRY_KEY);
entry.clear();
for (int i = 0; i < rows.size(); i++) {
@ -324,11 +304,13 @@ public class FeeControlApiPlugin extends AbstractFormPlugin implements Plugin {
this.getModel().setValue("shjh_purchasenum", detail.getString("PoOrderNo"), i);
this.getModel().setValue("shjh_purchaselinenum", detail.getString("PoOrderColNo"), i);
this.getModel().setValue("shjh_billsubject", detail.getString("RequestName"), i);
this.getModel().setValue("shjh_prepaymentdate", detail.getDate("CreatedDate"), i);
this.getModel().setValue("shjh_prepaymentdate", top.getString("RequestDate"), i);
this.getModel().setValue("shjh_paymentamount", top.getBigDecimal("RequestAmt"), i);
this.getModel().setValue("shjh_documentamount", top.getBigDecimal("AvailableAmt"), i);
this.getModel().setValue("shjh_verificationnum", top.getString("StrColumn20"), i);
this.getModel().setValue("shjh_fiscalyear", top.getString("GLDate").substring(0, 4), i);
this.getModel().setValue("shjh_billheaderid", detail.getString("BillHeaderID"), i);
this.getModel().setValue("shjh_detailid", detail.getString("DetailID"), i);
} catch (Exception e) {
logger.error("预付单赋值异常: " + e.getMessage(), e);
}
@ -344,13 +326,15 @@ public class FeeControlApiPlugin extends AbstractFormPlugin implements Plugin {
hidePaymentFields();
JSONObject root = JSONObject.parseObject(response);
JSONObject data = root.getJSONObject("data");
JSONArray rows = data.getJSONArray("rows");
JSONArray rows = data.getJSONArray("LoanItems");
DynamicObjectCollection entry = this.getModel().getEntryEntity(ENTRY_KEY);
entry.clear();
for (int i = 0; i < rows.size(); i++) {
JSONObject top = (JSONObject) rows.get(i);
JSONArray loanDetailInfo = top.getJSONArray("LoanDetailInfo");
JSONObject detail = (JSONObject) loanDetailInfo.get(0);
entry.addNew();
setLoanApiValues(top, i);
setLoanApiValues(top,detail, i);
}
} catch (Exception e) {
logger.error("借款单数据解析异常: " + e.getMessage(), e);
@ -363,7 +347,7 @@ public class FeeControlApiPlugin extends AbstractFormPlugin implements Plugin {
* @param top
* @param i
*/
private void setLoanApiValues(JSONObject top, int i) {
private void setLoanApiValues(JSONObject top, JSONObject detail,int i) {
try {
this.getModel().setValue("shjh_billno", top.getString("CompanyCode"), i);
this.getModel().setValue("shjh_loannum", top.getString("RequestCode"), i);
@ -371,6 +355,8 @@ public class FeeControlApiPlugin extends AbstractFormPlugin implements Plugin {
this.getModel().setValue("shjh_loanbalance", top.getBigDecimal("AvailableAmt"), i);
this.getModel().setValue("shjh_verificationnum", top.getString("StrColumn20"), i);
this.getModel().setValue("shjh_fiscalyear", top.getString("GLDate").substring(0, 4), i);
this.getModel().setValue("shjh_billheaderid", detail.getString("BillHeaderID"), i);
this.getModel().setValue("shjh_detailid", detail.getString("DetailID"), i);
} catch (Exception e) {
logger.error("借款单赋值异常: " + e.getMessage(), e);
}

View File

@ -0,0 +1,272 @@
package shjh.jhzj7.fi.fi.plugin.operate;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.formula.RowDataModel;
import kd.bos.entity.operate.result.OperateErrorInfo;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.AddValidatorsEventArgs;
import kd.bos.entity.plugin.PreparePropertysEventArgs;
import kd.bos.entity.plugin.args.AfterOperationArgs;
import kd.bos.entity.validate.AbstractValidator;
import kd.bos.entity.validate.ErrorLevel;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import shjh.jhzj7.fi.fi.utils.ApiUtils;
import shjh.jhzj7.fi.fi.utils.EsbUtils;
import shjh.jhzj7.fi.fi.utils.SysUtils;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 单据操作插件-预付款退回推送费控系统
*
* @author LiGuiQiang
*/
public class PaymentPushSapOperation extends AbstractOperationServicePlugIn implements Plugin {
/**
* 操作标识
*/
private static final String KEY_PUSH_PAYMENT = "pushpayment";
/**
* 操作执行前准备加载单据数据之前触发此事件
*
* @remark 插件可以在此事件中指定需要加载的字段
*/
@Override
public void onPreparePropertys(PreparePropertysEventArgs e) {
super.onPreparePropertys(e);
//收款类型=预付款退回 and SAP凭证号不为空
e.getFieldKeys().add(PaymentValidator.KEY_RECEIVING_TYPE);
e.getFieldKeys().add(PaymentValidator.KEY_VOUCHER_NUM);
}
/**
* 执行操作校验前触发此事件
*
* @remark 插件可以在此事件调整预置的操作校验器或者增加自定义操作校验器
*/
@Override
public void onAddValidators(AddValidatorsEventArgs e) {
super.onAddValidators(e);
//添加自定义校验器:收款类型=预付款退回 and SAP凭证号不为空
e.addValidator(new PaymentValidator());
}
@Override
public void afterExecuteOperationTransaction(AfterOperationArgs e) {
super.afterExecuteOperationTransaction(e);
//TODO:调用SAP预付款单接口
String operationKey = e.getOperationKey();
if (StringUtils.equals(KEY_PUSH_PAYMENT, operationKey)) {
DynamicObject[] dataEntities = e.getDataEntities();
if (dataEntities != null && dataEntities.length >= 1) {
StringBuilder message = new StringBuilder();
for (DynamicObject dataEntity : dataEntities) {
DynamicObject recBill = BusinessDataServiceHelper.loadSingle(dataEntity.getLong("id"), "cas_recbill");
if (null != recBill) {
//单号
String billNumber = recBill.getString("billno");
String interfaceId = "GeneraGTH";
HashMap<String, String> responseHead = ApiUtils.buildHead(interfaceId);
HashMap<String, Object> responseBody = this.assembleRequest(interfaceId,billNumber, recBill,message);
try {
String response = ApiUtils.sendPost(responseHead, responseBody, "https://hipint-stg.jahwa.com.cn:6443/gateway/HIP_ReceiveFromFM/1.0/fm/send");
if (!response.isEmpty()) {
this.parseResponse(response, billNumber, responseBody, interfaceId, message);
}
} catch (IOException ex) {
message.append("收款处理【").append(billNumber).append("】:").append(ex.getMessage()).append("\n");
}
if (message.length()!=0){
OperateErrorInfo operateErrorInfo = new OperateErrorInfo();
operateErrorInfo.setMessage(String.valueOf(message));
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
operateErrorInfo.setPkValue(dataEntity.getPkValue());
this.operationResult.addErrorInfo(operateErrorInfo);
}
}
}
}
}
}
/**
* 自定义校验器
*/
static class PaymentValidator extends AbstractValidator {
/**
* 收款类型字段标识
*/
public final static String KEY_RECEIVING_TYPE = "receivingtype";
/**
* SAP凭证号字段标识
*/
public final static String KEY_VOUCHER_NUM = "shjh_vouchernum";
@Override
public void validate() {
//取数模型
RowDataModel rowDataModel = new RowDataModel(this.entityKey, this.getValidateContext().getSubEntityType());
ExtendedDataEntity[] dataEntities = this.getDataEntities();
if (dataEntities != null && dataEntities.length >= 1) {
for (ExtendedDataEntity dataEntity : dataEntities) {
if (dataEntity != null) {
rowDataModel.setRowContext(dataEntity.getDataEntity());
DynamicObject type = (DynamicObject) rowDataModel.getValue(KEY_RECEIVING_TYPE);
if (null != type) {
String number = type.getString("number");
if (null != number) {
if (!"103".equals(number)) {
// 校验不通过输出一条错误提示
this.addErrorMessage(dataEntity, "请选择【收款类型】=【退预付款】的单据!");
}
}
}
String voucherNumber = (String) rowDataModel.getValue(KEY_VOUCHER_NUM);
if (voucherNumber.isEmpty()) {
this.addErrorMessage(dataEntity, "SAP凭证不能为空");
}
}
}
}
}
}
/**
* 请求头组装
* @param billNumber 单据编号
* @param recBill 收款处理
* @return
*/
private HashMap<String, Object> assembleRequest(String interfaceId,String billNumber,DynamicObject recBill,StringBuilder message){
HashMap<String, Object> responseBody = null;
try {
// 生成唯一事务ID
String rootContextId = UUID.randomUUID().toString();
// 获取当前请求时间格式为 yyyy-MM-dd HH:mm:ss.SSS
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String requestTime = sdf.format(new Date());
responseBody = new HashMap<>(5);
responseBody.put("rootContextID", rootContextId);
responseBody.put("requestTime", requestTime);
HashMap<String, Object> data = new HashMap<>(10);
HashMap<String, Object> header = new HashMap<>(13);
header.put("FM_RequestBillCode", "TH");
//资金系统的申请单号
header.put("FM_RequestCode", billNumber);
//公司编码
header.put("FM_CompanyCode", recBill.getString("org.number"));
//部门编码
header.put("FM_DeptCode", SysUtils.getUserDeptNumber());
//供应商编码
header.put("FM_SupplierCode", getSupOrCusNumber(recBill));
//员工工号
header.put("FM_UserCode", SysUtils.getUserNumber());
//成本中心编码
header.put("FM_CostCenterCode", recBill.getString("shjh_costcenter.number"));
//创建人工号
header.put("FM_CreateUserCode", recBill.getString("creator.number"));
header.put("FM_CurrencyCode", "RMB");
//单据主题
header.put("FM_RequestName", "退预付款推送测试");
//附件URL地址
//HashMap<String, String> url = new HashMap<>(2);
header.put("FM_AttachUr", new ArrayList<>());
//事项描述
header.put("Remark", "测试");
List<Map<String, Object>> body = new ArrayList<>();
List<Map<String, Object>> loanRequestList = new ArrayList<>();
DynamicObjectCollection entryCollection = recBill.getDynamicObjectCollection("entry");
if (!entryCollection.isEmpty()){
for (DynamicObject entry : entryCollection) {
Map<String, Object> loanItem = new HashMap<>(2);
loanItem.put("BillHeaderID", entry.getString("shjh_billheaderid"));
loanItem.put("DetailID", entry.getString("shjh_detailid"));
loanRequestList.add(loanItem);
Map<String, Object> bodyItem = new HashMap<>(4);
bodyItem.put("FM_YFKRequestCode", entry.getString("shjh_billnum"));
bodyItem.put("FM_YFKBillHeaderID", entry.getString("shjh_billheaderid"));
bodyItem.put("FM_YFKDetailID", entry.getString("shjh_detailid"));
bodyItem.put("FM_RefundAmt", entry.getBigDecimal("shjh_refundedamount"));
body.add(bodyItem);
}
header.put("FM_LoanRequestList", loanRequestList);
}
data.put("header", header);
data.put("body", body);
responseBody.put("data", data);
} catch (Exception e) {
message.append("收款处理【").append(billNumber).append("】:").append(e.getMessage()).append("\n");
EsbUtils.saveLog(billNumber, interfaceId, null, e.getMessage(), false, "ESBPushApi", "数据异常");
}
return responseBody;
}
/**
* 日志记录
*
* @param response 响应参数
* @param billNumber 本单单号
* @param body 请求体
* @param apiName 接口名
*/
private void parseResponse(String response, String billNumber, HashMap<String, Object> body, String apiName, StringBuilder message) {
JSONObject result = JSONObject.parseObject(response);
if (null != result) {
String formattedBody = JSON.toJSONString(body);
String code = result.getString("code");
switch (code) {
case "0":
EsbUtils.saveLog("收款处理"+billNumber, apiName, formattedBody, response, true, "ESBPushApi", "推送成功");
break;
case "1":
EsbUtils.saveLog("收款处理"+billNumber, apiName, formattedBody, response, false, "ESBPushApi", "服务异常");
message.append("收款处理【").append(billNumber).append("】:").append("服务异常").append("\n");
break;
case "2":
EsbUtils.saveLog("收款处理"+billNumber, apiName, formattedBody, response, false, "ESBPushApi", "三方服务异常");
message.append("收款处理【").append(billNumber).append("】:").append("三方服务异常").append("\n");
break;
case "3":
EsbUtils.saveLog("收款处理"+billNumber, apiName, formattedBody, response, false, "ESBPushApi", "业务异常");
message.append("收款处理【").append(billNumber).append("】:").append("业务异常").append("\n");
break;
default:
EsbUtils.saveLog("收款处理"+billNumber, apiName, formattedBody, response, false, "ESBPushApi", "未知异常");
message.append("收款处理【").append(billNumber).append("】:").append("未知异常").append("\n");
break;
}
}
}
/**
* 获取供应商||客户编码
*
* @param dynamicObject 收款单数据
* @return 编码
*/
private String getSupOrCusNumber(DynamicObject dynamicObject) {
String number = null;
String type = dynamicObject.getString("payertype");
if (null != type) {
DynamicObject supOrCusObj = BusinessDataServiceHelper.loadSingle(dynamicObject.getLong("payer"), type);
if (null != supOrCusObj) {
number = supOrCusObj.getString("number");
}
}
return number;
}
}

View File

@ -23,11 +23,11 @@ public class ApiUtils {
static Log log = LogFactory.getLog(ApiUtils.class);
public static HashMap<String,String> buildHead(){
public static HashMap<String,String> buildHead(String interfaceID){
HashMap<String,String> header = new HashMap<>(5);
header.put("Content-Type","application/json;charset=UTF-8");
header.put("x-Gateway-APIKey","207b5296-9866-4b4b-8146-1fea58b3c8c9");
header.put("interfaceID","FMGetJahYFKList");
header.put("interfaceID",interfaceID);
header.put("receiverID","FeiKong");
return header;
}
@ -87,4 +87,6 @@ public class ApiUtils {
}
return responseData;
}
}

View File

@ -0,0 +1,49 @@
package shjh.jhzj7.fi.fi.utils;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.user.UserServiceHelper;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 获取系统信息工具栏
* @author LiGuiQiang
*/
public class SysUtils {
/**
* 获取当前用户工号
* @return
*/
public static String getUserNumber(){
Long userId = UserServiceHelper.getCurrentUserId();
ArrayList<Long> list = new ArrayList<>();
list.add(userId);
// 获取用户信息
List<Map<String, Object>> userMaps = UserServiceHelper.get(list);
Map<String, Object> userMap = userMaps.get(0);
return (String) userMap.get("number");
}
/**
* 获取当前操作人部门编码
* @return
*/
public static String getUserDeptNumber(){
String deptNumber=null;
long userId = UserServiceHelper.getCurrentUserId();
long deptId = UserServiceHelper.getUserMainOrgId(userId);
if (deptId!=0L){
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(deptId, "bos_adminorg");
if (null!=dynamicObject){
deptNumber=dynamicObject.getString("number");
}
}
return deptNumber;
}
}