diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/convert/ClaimConvertPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/convert/ClaimConvertPlugin.java index 8e7113f..c1a0d39 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/convert/ClaimConvertPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/convert/ClaimConvertPlugin.java @@ -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 fldProperties,String name){ + private Object getSourceData(ExtendedDataEntity billEntity, Map fldProperties, String name) { List sourceRows = (List) 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")); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/ASParbillFormPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/ASParbillFormPlugin.java index 74456d7..c924535 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/ASParbillFormPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/ASParbillFormPlugin.java @@ -152,8 +152,8 @@ public class ASParbillFormPlugin extends AbstractFormPlugin implements Plugin { return; } String supplierCode = supplier.getString("number"); - - HashMap head = ApiUtils.buildHead(); + String interfaceID="FMGetJahYFKList"; + HashMap head = ApiUtils.buildHead(interfaceID); HashMap body = ApiUtils.buildBody(companyCode, null, startDate, endDate); HashMap data = (HashMap) body.get("data"); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/ClaimBillButtonAssPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/ClaimBillButtonAssPlugin.java index 2680600..436b190 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/ClaimBillButtonAssPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/ClaimBillButtonAssPlugin.java @@ -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); } } \ No newline at end of file diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/FeeControlApiPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/FeeControlApiPlugin.java index d161170..bf0b532 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/form/FeeControlApiPlugin.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/FeeControlApiPlugin.java @@ -160,8 +160,8 @@ public class FeeControlApiPlugin extends AbstractFormPlugin implements Plugin { return; } String supplierCode = supplier.getString("number"); - - HashMap head = ApiUtils.buildHead(); + String interfaceID="FMGetJahYFKList"; + HashMap head = ApiUtils.buildHead(interfaceID); HashMap body = ApiUtils.buildBody(companyCode, this.getUserCode(), startDate, endDate); HashMap data = (HashMap) 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 head = ApiUtils.buildHead(); + String interfaceID="FMGetJahJKYList"; + HashMap head = ApiUtils.buildHead(interfaceID); HashMap 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); } diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/operate/PaymentPushSapOperation.java b/main/java/shjh/jhzj7/fi/fi/plugin/operate/PaymentPushSapOperation.java new file mode 100644 index 0000000..173bd64 --- /dev/null +++ b/main/java/shjh/jhzj7/fi/fi/plugin/operate/PaymentPushSapOperation.java @@ -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 responseHead = ApiUtils.buildHead(interfaceId); + HashMap 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 assembleRequest(String interfaceId,String billNumber,DynamicObject recBill,StringBuilder message){ + HashMap 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 data = new HashMap<>(10); + HashMap 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 url = new HashMap<>(2); + header.put("FM_AttachUr", new ArrayList<>()); + //事项描述 + header.put("Remark", "测试"); + List> body = new ArrayList<>(); + List> loanRequestList = new ArrayList<>(); + DynamicObjectCollection entryCollection = recBill.getDynamicObjectCollection("entry"); + if (!entryCollection.isEmpty()){ + for (DynamicObject entry : entryCollection) { + Map loanItem = new HashMap<>(2); + loanItem.put("BillHeaderID", entry.getString("shjh_billheaderid")); + loanItem.put("DetailID", entry.getString("shjh_detailid")); + loanRequestList.add(loanItem); + Map 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 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; + } +} \ No newline at end of file diff --git a/main/java/shjh/jhzj7/fi/fi/utils/ApiUtils.java b/main/java/shjh/jhzj7/fi/fi/utils/ApiUtils.java index d208918..95d0a13 100644 --- a/main/java/shjh/jhzj7/fi/fi/utils/ApiUtils.java +++ b/main/java/shjh/jhzj7/fi/fi/utils/ApiUtils.java @@ -23,11 +23,11 @@ public class ApiUtils { static Log log = LogFactory.getLog(ApiUtils.class); - public static HashMap buildHead(){ + public static HashMap buildHead(String interfaceID){ HashMap 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; } + + } diff --git a/main/java/shjh/jhzj7/fi/fi/utils/SysUtils.java b/main/java/shjh/jhzj7/fi/fi/utils/SysUtils.java new file mode 100644 index 0000000..a28638d --- /dev/null +++ b/main/java/shjh/jhzj7/fi/fi/utils/SysUtils.java @@ -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 list = new ArrayList<>(); + list.add(userId); + // 获取用户信息 + List> userMaps = UserServiceHelper.get(list); + Map 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; + } +}