- [ ] 电子回单查询逻辑补充(PayreceiptQueryControler)
- [x] 费控状态更改接口优化(退回,反审核 PayrequestBillOperation) - [ ] 强弱共享报表优化(小计 StrongSharingQueryPlugin ) - [x] 优化付款单定时调用费控接口更新状态的过滤条件(UpdateFkStatusTask) - [x] 优化调整单从SAP查数据的条件新增(行号 ApplyAdjustBillControler) && 返回详细日志 - [x] 测试付款单提交时,调用费控校验接口,进行内部校验(银行名称待沟通 PayBillSubmitOperation) --s
This commit is contained in:
parent
675b87991e
commit
cfb8409f70
|
|
@ -44,7 +44,8 @@ public class PayBillSubmitOperation extends AbstractOperationServicePlugIn imple
|
|||
@Override
|
||||
public void validate() {
|
||||
String operateKey = this.getOperateKey();
|
||||
if ("submit".equals(operateKey)){
|
||||
//FKZJ2025040021
|
||||
if ("beforesubmit".equals(operateKey)){
|
||||
ExtendedDataEntity[] entities = this.getDataEntities();
|
||||
for (ExtendedDataEntity entity : entities) {
|
||||
DynamicObject bill = entity.getDataEntity();
|
||||
|
|
@ -71,36 +72,49 @@ public class PayBillSubmitOperation extends AbstractOperationServicePlugIn imple
|
|||
}else{
|
||||
//根据返回信息比对
|
||||
JSONObject data = jsonObject.getJSONObject("data");
|
||||
Boolean isMatch = true;
|
||||
if (null != data) {
|
||||
JSONObject tempData = data.getJSONObject("tempData");
|
||||
if (null != tempData) {
|
||||
String applyamount = tempData.getString("applyamount");//付款金额_actpayamt
|
||||
BigDecimal actpayamt = bill.getBigDecimal("actpayamt");
|
||||
// 将 applyamount 转换为 BigDecimal
|
||||
BigDecimal applyAmountBigDecimal = new BigDecimal(applyamount);
|
||||
int comparisonResult = applyAmountBigDecimal.compareTo(actpayamt);
|
||||
if (comparisonResult != 0) {
|
||||
this.addErrorMessage(entity,"费控校验未通过不能提交:付款金额与付款单付款金额不一致");
|
||||
}
|
||||
String assacct = tempData.getString("assacct");//收款银行账号_payeebanknum
|
||||
String payeebanknum = bill.getString("payeebanknum");
|
||||
if (!assacct.equals(payeebanknum)) {
|
||||
this.addErrorMessage(entity,"费控校验未通过不能提交:收款银行账号与付款单银行账号不一致");
|
||||
}
|
||||
String bebank = tempData.getString("bebank");//收款银行名称_payeebankname
|
||||
String payeebankname = bill.getString("payeebankname");
|
||||
if (!bebank.equals(payeebankname)) {
|
||||
this.addErrorMessage(entity,"费控校验未通过不能提交:收款银行名称与付款单银行名称不一致");
|
||||
}
|
||||
String bebankNum = tempData.getString("bebankNum");//收款联行号_recbanknumber
|
||||
String recbanknumber = bill.getString("recbanknumber");
|
||||
if (!bebankNum.equals(recbanknumber)) {
|
||||
this.addErrorMessage(entity,"费控校验未通过不能提交:收款联行号与付款单联行号不一致");
|
||||
JSONArray tempData1 = data.getJSONArray("tempData");
|
||||
if (!tempData1.isEmpty()) {
|
||||
JSONObject tempData = tempData1.getJSONObject(0);
|
||||
if (null != tempData) {
|
||||
String applyamount = tempData.getString("applyamount");//付款金额_actpayamt
|
||||
BigDecimal actpayamt = bill.getBigDecimal("actpayamt");
|
||||
// 将 applyamount 转换为 BigDecimal
|
||||
BigDecimal applyAmountBigDecimal = new BigDecimal(applyamount);
|
||||
int comparisonResult = applyAmountBigDecimal.compareTo(actpayamt);
|
||||
if (comparisonResult != 0) {
|
||||
this.addErrorMessage(entity,"费控校验未通过不能提交:付款金额与付款单付款金额不一致");
|
||||
isMatch = false;
|
||||
}
|
||||
String assacct = tempData.getString("assacct");//收款银行账号_payeebanknum
|
||||
String payeebanknum = bill.getString("payeebanknum");
|
||||
if (!assacct.equals(payeebanknum)) {
|
||||
this.addErrorMessage(entity,"费控校验未通过不能提交:收款银行账号与付款单银行账号不一致");
|
||||
isMatch = false;
|
||||
}
|
||||
String bebank = tempData.getString("bebank");//收款银行名称_payeebankname
|
||||
String payeebankname = bill.getString("payeebankname");
|
||||
if (!bebank.equals(payeebankname)) {
|
||||
// this.addErrorMessage(entity,"费控校验未通过不能提交:收款银行名称与付款单银行名称不一致");
|
||||
// isMatch = false;
|
||||
}
|
||||
String bebankNum = tempData.getString("bebankNum");//收款联行号_recbanknumber
|
||||
String recbanknumber = bill.getString("recbanknumber");
|
||||
if (!bebankNum.equals(recbanknumber)) {
|
||||
this.addErrorMessage(entity,"费控校验未通过不能提交:收款联行号与付款单联行号不一致");
|
||||
isMatch = false;
|
||||
}
|
||||
}
|
||||
}else {
|
||||
this.addErrorMessage(entity,"费控校验未通过不能提交:tempData为空");
|
||||
isMatch = false;
|
||||
}
|
||||
}
|
||||
bill.set("shjh_fkvalidate", true);
|
||||
SaveServiceHelper.save(new DynamicObject[]{bill});
|
||||
if (isMatch) {
|
||||
bill.set("shjh_fkvalidate", true);
|
||||
SaveServiceHelper.save(new DynamicObject[]{bill});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,10 @@ public class UpdateFkStatusTask extends AbstractTask implements Plugin {
|
|||
*/
|
||||
QFilter q1 = new QFilter("billstatus", QCP.equals, "D");//单据状态:已付款
|
||||
QFilter q2 = new QFilter("shjh_isupdatefkstatus", QCP.equals, false);//是否调用过费控更新状态接口 = 否
|
||||
DynamicObject[] paybills = BusinessDataServiceHelper.load("cas_paybill", "id", new QFilter[]{q1, q2});
|
||||
QFilter q3 = new QFilter("paymentidentify.number", QCP.equals, "FKBS01");//付款标识为主动付款
|
||||
QFilter q4 = new QFilter("shjh_sourcesystem", QCP.equals, "B");//来源系统,A_sap,B_fk
|
||||
|
||||
DynamicObject[] paybills = BusinessDataServiceHelper.load("cas_paybill", "id", new QFilter[]{q1, q2, q3, q4});
|
||||
for (DynamicObject bill : paybills) {
|
||||
bill = BusinessDataServiceHelper.loadSingle(bill.getPkValue(), "cas_paybill");
|
||||
JSONObject data = new JSONObject();
|
||||
|
|
|
|||
|
|
@ -97,10 +97,13 @@ public class ApplyAdjustBillControler {
|
|||
// 存在凭证,生成付款申请单
|
||||
for (Object sappz : sappzs) {
|
||||
JSONObject it_list = (JSONObject) sappz;
|
||||
ap_payapply = createOrUpdatePayApply(it_list, fkBillNum);
|
||||
if (ap_payapply == null) {
|
||||
return handleErrorAndReturn(apiResultExt, "创建或更新付款申请单失败,详情查看日志", fkBillNum,
|
||||
Object o = createOrUpdatePayApply(it_list, fkBillNum);
|
||||
if (o instanceof String) {
|
||||
String str = (String) o;
|
||||
return handleErrorAndReturn(apiResultExt, str, fkBillNum,
|
||||
jsonBodyString +"\n" + sappzs.toJSONString());
|
||||
} else if (o instanceof DynamicObject) {
|
||||
ap_payapply = (DynamicObject) o;
|
||||
}
|
||||
|
||||
// 将生成的付款申请单拆分明细
|
||||
|
|
@ -142,8 +145,9 @@ public class ApplyAdjustBillControler {
|
|||
ap_payapply.set("shjh_sourceadjustment", true);
|
||||
|
||||
// 保存、提交和审核付款申请单
|
||||
if (!processPayApply(ap_payapply, fkBillNum, jsonBodyString)) {
|
||||
return handleErrorAndReturn(apiResultExt, "处理付款申请单失败,详情查看日志(136)",
|
||||
String string = processPayApply(ap_payapply, fkBillNum, jsonBodyString);
|
||||
if (StringUtils.isNotEmpty(string)) {
|
||||
return handleErrorAndReturn(apiResultExt, string,
|
||||
fkBillNum, jsonBodyString +"\n" + sappzs.toJSONString());
|
||||
}
|
||||
//成功
|
||||
|
|
@ -197,11 +201,11 @@ public class ApplyAdjustBillControler {
|
|||
ap_payapply.set("shjh_sourceadjustment", true);
|
||||
|
||||
// 保存付款申请单
|
||||
if (!processPayApplys(ap_payapply, fkBillNum, jsonBodyString)) {
|
||||
return handleErrorAndReturn(apiResultExt, "处理付款申请单失败,详情查看日志(194)", fkBillNum, jsonBodyString);
|
||||
String string = processPayApplys(ap_payapply, fkBillNum, jsonBodyString);
|
||||
if (StringUtils.isNotEmpty(string)) {
|
||||
return handleErrorAndReturn(apiResultExt, string, fkBillNum, jsonBodyString);
|
||||
|
||||
}
|
||||
|
||||
//成功
|
||||
return handleSuccessAndReturn(ap_payapply, apiResultExt,fkBillNum, jsonBodyString);
|
||||
} else {
|
||||
|
|
@ -236,8 +240,9 @@ public class ApplyAdjustBillControler {
|
|||
ap_payapply.set("shjh_sourceadjustment", true);
|
||||
|
||||
// 保存付款申请单
|
||||
if (!processPayApplys(ap_payapply, fkBillNum, jsonBodyString)) {
|
||||
return handleErrorAndReturn(apiResultExt, "处理付款申请单失败,详情查看日志(235)", fkBillNum, jsonBodyString);
|
||||
String string = processPayApplys(ap_payapply, fkBillNum, jsonBodyString);
|
||||
if (StringUtils.isNotEmpty(string)) {
|
||||
return handleErrorAndReturn(apiResultExt, string, fkBillNum, jsonBodyString);
|
||||
}
|
||||
|
||||
//成功
|
||||
|
|
@ -250,7 +255,6 @@ public class ApplyAdjustBillControler {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
return handleErrorAndReturn(apiResultExt, "同步失败(250), 调整单号:" + fkBillNum , fkBillNum, jsonBodyString);
|
||||
}
|
||||
|
||||
|
|
@ -265,7 +269,10 @@ public class ApplyAdjustBillControler {
|
|||
addFilterCondition(IT_LIST, "BELNR", applyAdjustbill.getVoucherNum(), applyAdjustbill.getVoucherNum());
|
||||
// 添加会计年度过滤条件
|
||||
addFilterCondition(IT_LIST, "GJAHR", applyAdjustbill.getVoucherYear(), applyAdjustbill.getVoucherYear());
|
||||
//todo:根据查询条件,调用SAP查询凭证接口,生成分录行
|
||||
// 添加凭证行号过滤条件
|
||||
addFilterCondition(IT_LIST, "BUZEI", applyAdjustbill.getVoucherEntryNum(), applyAdjustbill.getVoucherEntryNum());
|
||||
// 添加凭证币种过滤条件
|
||||
// 根据查询条件,调用SAP查询凭证接口,生成分录行
|
||||
JSONObject result = vouchers_payable(IT_LIST, applyAdjustbill.getFkBillNum());
|
||||
if (null != result && result.containsKey("data")) {
|
||||
// 处理查询结果
|
||||
|
|
@ -288,15 +295,15 @@ public class ApplyAdjustBillControler {
|
|||
* @param jsonBodyString 入参JSON字符串
|
||||
* @return 操作是否成功
|
||||
*/
|
||||
private boolean processPayApply(DynamicObject ap_payapply, String fkBillNum, String jsonBodyString) {
|
||||
private String processPayApply(DynamicObject ap_payapply, String fkBillNum, String jsonBodyString) {
|
||||
// 保存付款申请单(标记调整单)
|
||||
OperateOption option = OperateOption.create();
|
||||
option.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(true)); // 不执行警告级别校验器
|
||||
|
||||
OperationResult saveResult = OperationServiceHelper.executeOperate("save", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
||||
if (!saveResult.isSuccess()) {
|
||||
handleOperationError(saveResult, "保存失败", fkBillNum, jsonBodyString);
|
||||
return false;
|
||||
String string = handleOperationError(saveResult, "保存失败", fkBillNum, jsonBodyString);
|
||||
return string;
|
||||
}
|
||||
|
||||
// todo:应付凭证锁定接口,日志
|
||||
|
|
@ -304,16 +311,16 @@ public class ApplyAdjustBillControler {
|
|||
if (!submitResult.isSuccess()) {
|
||||
// 提交失败,将保存的数据删除,记录日志
|
||||
OperationServiceHelper.executeOperate("delete", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
||||
handleOperationError(submitResult, "提交失败", fkBillNum, jsonBodyString);
|
||||
return false;
|
||||
String string = handleOperationError(submitResult, "提交失败", fkBillNum, jsonBodyString);
|
||||
return string;
|
||||
}
|
||||
|
||||
OperationResult auditResult = OperationServiceHelper.executeOperate("audit", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
||||
if (!auditResult.isSuccess()) {
|
||||
handleOperationError(auditResult, "审核失败", fkBillNum, jsonBodyString);
|
||||
return false;
|
||||
String string = handleOperationError(auditResult, "审核失败", fkBillNum, jsonBodyString);
|
||||
return string;
|
||||
}
|
||||
return true;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -324,17 +331,17 @@ public class ApplyAdjustBillControler {
|
|||
* @param jsonBodyString 入参JSON字符串
|
||||
* @return 操作是否成功
|
||||
*/
|
||||
private boolean processPayApplys(DynamicObject ap_payapply, String fkBillNum, String jsonBodyString) {
|
||||
private String processPayApplys(DynamicObject ap_payapply, String fkBillNum, String jsonBodyString) {
|
||||
// 保存付款申请单(标记调整单)
|
||||
OperateOption option = OperateOption.create();
|
||||
option.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(true)); // 不执行警告级别校验器
|
||||
|
||||
OperationResult saveResult = OperationServiceHelper.executeOperate("save", AP_PAYAPPLY, new DynamicObject[]{ap_payapply}, option);
|
||||
if (!saveResult.isSuccess()) {
|
||||
handleOperationError(saveResult, "保存失败", fkBillNum, jsonBodyString);
|
||||
return false;
|
||||
String string = handleOperationError(saveResult, "保存失败", fkBillNum, jsonBodyString);
|
||||
return string;
|
||||
}
|
||||
return true;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -389,7 +396,7 @@ public class ApplyAdjustBillControler {
|
|||
* @param it_list SAP查到的凭证信息
|
||||
* @return 付款申请单的动态对象
|
||||
*/
|
||||
private DynamicObject createOrUpdatePayApply(JSONObject it_list, String fkBillNum) {
|
||||
private Object createOrUpdatePayApply(JSONObject it_list, String fkBillNum) {
|
||||
String orgNum = it_list.getString("BUKRS");//公司编号,"公司代码
|
||||
String voucheryear = it_list.getString("GJAHR");//会计年度,会计年度
|
||||
String voucherentrynum = it_list.getString("BUZEI");//会计科目行项目号,行编号
|
||||
|
|
@ -461,8 +468,7 @@ public class ApplyAdjustBillControler {
|
|||
|
||||
if (ap_payapplys != null && ap_payapplys.getBoolean("shjh_sapwhetherlocking")) {
|
||||
handleError("同步失败,调整单号:" + fkBillNum + "的费控单据已锁定", fkBillNum, null);
|
||||
|
||||
return null;
|
||||
return "同步失败,调整单号:" + fkBillNum + "的费控单据已锁定";
|
||||
}
|
||||
DynamicObject org = BusinessDataServiceHelper.loadSingle("bos_org", "id", new QFilter("number", "=", orgNum).toArray());
|
||||
|
||||
|
|
@ -475,7 +481,7 @@ public class ApplyAdjustBillControler {
|
|||
// 设置申请日期
|
||||
if (bizDate == null) {
|
||||
handleError("同步失败,调整单号:" + fkBillNum + "的记账日期为空", fkBillNum, null);
|
||||
return null;
|
||||
return "同步失败,调整单号:" + fkBillNum + "的记账日期为空";
|
||||
}
|
||||
ap_payapply.set("applydate", bizDate);
|
||||
|
||||
|
|
@ -484,7 +490,7 @@ public class ApplyAdjustBillControler {
|
|||
DynamicObject accountview = loadAccountViewByNumber(accountingsubject);
|
||||
if (accountview == null) {
|
||||
handleError("同步失败,调整单号:" + fkBillNum + "的会计科目不存在", fkBillNum, null);
|
||||
return null;
|
||||
return "同步失败,调整单号:" + fkBillNum + "的会计科目不存在";
|
||||
}
|
||||
ap_payapply.set("shjh_sapkjkm", accountview);
|
||||
}
|
||||
|
|
@ -493,8 +499,9 @@ public class ApplyAdjustBillControler {
|
|||
ap_payapply.set("applycause", applycause);
|
||||
|
||||
// 设置币别信息
|
||||
if (!setCurrencyInfo(ap_payapply, paymentcurrency, settlementcurrency, fkBillNum)) {
|
||||
return null;
|
||||
String s = setCurrencyInfo(ap_payapply, paymentcurrency, settlementcurrency, fkBillNum);
|
||||
if (StringUtils.isNotEmpty(s)) {
|
||||
return s;
|
||||
}
|
||||
|
||||
// 设置汇率
|
||||
|
|
@ -503,7 +510,7 @@ public class ApplyAdjustBillControler {
|
|||
ap_payapply.set("exchangerate", exchangerate);
|
||||
} catch (NumberFormatException e) {
|
||||
handleError("同步失败,调整单号:" + fkBillNum + "的汇率格式不正确", fkBillNum, null);
|
||||
return null;
|
||||
return "同步失败,调整单号:" + fkBillNum + "的汇率格式不正确";
|
||||
}
|
||||
|
||||
// 设置申请金额折结算币别
|
||||
|
|
@ -512,20 +519,23 @@ public class ApplyAdjustBillControler {
|
|||
ap_payapply.set("appseleamount", applyforconversionof);
|
||||
} catch (NumberFormatException e) {
|
||||
handleError("同步失败,调整单号:" + fkBillNum + "的申请金额折结算币别格式不正确", fkBillNum, null);
|
||||
return null;
|
||||
return "同步失败,调整单号:" + fkBillNum + "的申请金额折结算币别格式不正确";
|
||||
}
|
||||
|
||||
// 设置明细信息
|
||||
if (!setEntryInfo(ap_payapply, asstacttype, asstact, assacct, duedate, outstandingamount, fkBillNum)) {
|
||||
return null;
|
||||
String s1 = setEntryInfo(ap_payapply, asstacttype, asstact, assacct, duedate, outstandingamount, fkBillNum);
|
||||
if (StringUtils.isNotEmpty(s1)) {
|
||||
return s1;
|
||||
}
|
||||
|
||||
// 设置付款类型
|
||||
setPaymentType(ap_payapply, accountingsubject);
|
||||
|
||||
// 设置默认字段
|
||||
if (!setDefaultFields(ap_payapply, vouchernum, voucherentrynum, voucheryear, procurementeam, isselfprocurment, vouchernum, reasoncode, bizDate, documentdate, vouchertype, basedate, paymentterms, refertoinvoicenumber, orgNum, duedate, fkBillNum)) {
|
||||
return null;
|
||||
String s2 = setDefaultFields(ap_payapply, vouchernum, voucherentrynum, voucheryear, procurementeam, isselfprocurment,
|
||||
vouchernum, reasoncode, bizDate, documentdate, vouchertype, basedate, paymentterms, refertoinvoicenumber, orgNum, duedate, fkBillNum);
|
||||
if (StringUtils.isNotEmpty(s2)) {
|
||||
return s2;
|
||||
}
|
||||
|
||||
return ap_payapply;
|
||||
|
|
@ -551,7 +561,7 @@ public class ApplyAdjustBillControler {
|
|||
* @param fkBillNum 费控调整单号
|
||||
* @return 操作是否成功
|
||||
*/
|
||||
private boolean setCurrencyInfo(DynamicObject ap_payapply, String paymentcurrency, String settlementcurrency, String fkBillNum) {
|
||||
private String setCurrencyInfo(DynamicObject ap_payapply, String paymentcurrency, String settlementcurrency, String fkBillNum) {
|
||||
String[][] currencyInfo = {
|
||||
{"paycurrency", "付款币别"},
|
||||
{"settlecurrency", "结算币别"}
|
||||
|
|
@ -562,17 +572,17 @@ public class ApplyAdjustBillControler {
|
|||
String currencyNumber = "paycurrency".equals(currencyType) ? paymentcurrency : settlementcurrency;
|
||||
if (currencyNumber == null || currencyNumber.trim().isEmpty()) {
|
||||
handleError("同步失败,调整单号:" + fkBillNum + "的" + currencyTypeName + "为空", fkBillNum, null);
|
||||
return false;
|
||||
return "同步失败,调整单号:" + fkBillNum + "的" + currencyTypeName + "为空";
|
||||
}
|
||||
QFilter filter = new QFilter("number", QCP.equals, currencyNumber);
|
||||
DynamicObject currency = BusinessDataServiceHelper.loadSingle(BD_CURRENCY, new QFilter[]{filter});
|
||||
if (currency == null) {
|
||||
handleError("同步失败,调整单号:" + fkBillNum + "的" + currencyTypeName + "不存在", fkBillNum, null);
|
||||
return false;
|
||||
return "同步失败,调整单号:" + fkBillNum + "的" + currencyTypeName + "不存在";
|
||||
}
|
||||
ap_payapply.set(currencyType, currency);
|
||||
}
|
||||
return true;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -586,7 +596,7 @@ public class ApplyAdjustBillControler {
|
|||
* @param outstandingamount 未清金额
|
||||
* @return 操作是否成功
|
||||
*/
|
||||
private boolean setEntryInfo(DynamicObject ap_payapply, String asstacttype, String asstact, String assacct, Date duedate, BigDecimal outstandingamount, String fkBillNum) {
|
||||
private String setEntryInfo(DynamicObject ap_payapply, String asstacttype, String asstact, String assacct, Date duedate, BigDecimal outstandingamount, String fkBillNum) {
|
||||
DynamicObjectCollection entry = ap_payapply.getDynamicObjectCollection("entry");
|
||||
entry.clear();
|
||||
DynamicObject ap_payapply_entry = entry.addNew();
|
||||
|
|
@ -598,26 +608,26 @@ public class ApplyAdjustBillControler {
|
|||
|
||||
// 检查往来类型是否为空或无效
|
||||
if (asstacttype == null || asstacttype.isEmpty()) {
|
||||
handleError("同步失败,往来类型为空", fkBillNum, null);
|
||||
return false;
|
||||
handleError("同步失败,往来类型为空"+fkBillNum, fkBillNum, null);
|
||||
return "同步失败,往来类型为空"+fkBillNum;
|
||||
} else if (!asstactTypeMap.containsKey(asstacttype)) {
|
||||
handleError("同步失败,往来类型不存在", fkBillNum, null);
|
||||
return false;
|
||||
handleError("同步失败,往来类型不存在"+fkBillNum, fkBillNum, null);
|
||||
return "同步失败,往来类型不存在"+fkBillNum;
|
||||
}
|
||||
|
||||
// 往来户
|
||||
if (asstact == null || asstact.isEmpty()) {
|
||||
handleError("同步失败,往来户为空", fkBillNum, null);
|
||||
return false;
|
||||
return "同步失败,往来户为空"+fkBillNum;
|
||||
}
|
||||
QFilter Q4 = new QFilter("name", QCP.equals, asstact);
|
||||
QFilter Q4 = new QFilter("number", QCP.equals, asstact);
|
||||
DynamicObject party = "供应商".equals(asstacttype)
|
||||
? BusinessDataServiceHelper.loadSingle(BD_SUPPLIER, new QFilter[]{Q4})
|
||||
: BusinessDataServiceHelper.loadSingle(BD_CUSTOMER, new QFilter[]{Q4});
|
||||
if (party == null) {
|
||||
String errorMessage = "同步失败, " + ("供应商".equals(asstacttype) ? "供应商" : "客户") + "不存在";
|
||||
handleError(errorMessage, fkBillNum, null);
|
||||
return false;
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
// 根据往来类型设置值
|
||||
|
|
@ -642,7 +652,7 @@ public class ApplyAdjustBillControler {
|
|||
}
|
||||
if (!found) {
|
||||
handleError("同步失败, 供应商的合作银行类型 " + assacct + " 不存在", fkBillNum, null);
|
||||
return false;
|
||||
return "同步失败, 供应商的合作银行类型 " + assacct + " 不存在";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -653,7 +663,7 @@ public class ApplyAdjustBillControler {
|
|||
//表头申请金额
|
||||
ap_payapply.set("applyamount", outstandingamount);
|
||||
|
||||
return true;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -695,7 +705,7 @@ public class ApplyAdjustBillControler {
|
|||
* @param duedate 到期日
|
||||
* @return 操作是否成功
|
||||
*/
|
||||
private boolean setDefaultFields(DynamicObject ap_payapply, String vouchernum, String voucherentrynum, String voucheryear, String procurementeam, Boolean isselfprocurment, String sourcebillno, String reasoncode, Date bizDate, Date documentdate, String vouchertype, Date basedate, String paymentterms, String refertoinvoicenumber, String companyNum, Date duedate, String fkBillNum) {
|
||||
private String setDefaultFields(DynamicObject ap_payapply, String vouchernum, String voucherentrynum, String voucheryear, String procurementeam, Boolean isselfprocurment, String sourcebillno, String reasoncode, Date bizDate, Date documentdate, String vouchertype, Date basedate, String paymentterms, String refertoinvoicenumber, String companyNum, Date duedate, String fkBillNum) {
|
||||
//单据类型
|
||||
QFilter Q9 = new QFilter("name", QCP.equals, "其他付款申请");
|
||||
DynamicObject billtype = BusinessDataServiceHelper.loadSingle(BOS_BILLTYPE, new QFilter[]{Q9});
|
||||
|
|
@ -768,7 +778,7 @@ public class ApplyAdjustBillControler {
|
|||
DynamicObject cause = BusinessDataServiceHelper.loadSingle(GL_CASHFLOWITEM, new QFilter[]{Q11});
|
||||
if (cause == null) {
|
||||
handleError("同步失败,调整单号:" + fkBillNum + "的原因码不存在", fkBillNum, null);
|
||||
return false;
|
||||
return "同步失败,调整单号:" + fkBillNum + "的原因码不存在";
|
||||
}
|
||||
ap_payapply.set("shjh_yym", cause);
|
||||
}
|
||||
|
|
@ -787,7 +797,7 @@ public class ApplyAdjustBillControler {
|
|||
DynamicObject vouchertypes = BusinessDataServiceHelper.loadSingle("gl_vouchertype", new QFilter[]{Q11});
|
||||
if (vouchertypes == null) {
|
||||
handleError("同步失败,调整单号:" + fkBillNum + "的凭证类型不存在", fkBillNum, null);
|
||||
return false;
|
||||
return "同步失败,调整单号:" + fkBillNum + "的凭证类型不存在";
|
||||
}
|
||||
ap_payapply.set("shjh_documenttype", vouchertypes);
|
||||
}
|
||||
|
|
@ -812,7 +822,7 @@ public class ApplyAdjustBillControler {
|
|||
//SAP应付凭证ID:金蝶组装:公司编号+SAP应付凭证会计年度+SAP应付凭证号+SAP应付凭证行号
|
||||
ap_payapply.set("shjh_sapuniquevalue", companyNum + voucheryear + vouchernum + voucherentrynum);
|
||||
|
||||
return true;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -844,10 +854,11 @@ public class ApplyAdjustBillControler {
|
|||
* @param fkBillNum 费控单据编号
|
||||
* @param jsonBodyString 入参JSON字符串
|
||||
*/
|
||||
private void handleOperationError(OperationResult result, String operationType, String fkBillNum, String jsonBodyString) {
|
||||
private String handleOperationError(OperationResult result, String operationType, String fkBillNum, String jsonBodyString) {
|
||||
String errorMessage = getFirstErrorMessage(result);
|
||||
handleError(operationType + ",原因:" + errorMessage, fkBillNum, jsonBodyString);
|
||||
CustomApiResult.fail("400", errorMessage);
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -5,6 +5,9 @@ import com.alibaba.fastjson.JSONException;
|
|||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.drew.lang.annotations.NotNull;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.fileservice.FileService;
|
||||
import kd.bos.fileservice.FileServiceFactory;
|
||||
import kd.bos.logging.Log;
|
||||
import kd.bos.logging.LogFactory;
|
||||
import kd.bos.openapi.common.custom.annotation.ApiController;
|
||||
|
|
@ -14,11 +17,14 @@ import kd.bos.openapi.common.result.CustomApiResult;
|
|||
import kd.bos.orm.query.QCP;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.util.ExceptionUtils;
|
||||
import kd.bos.util.StringUtils;
|
||||
import shjh.jhzj7.fi.fi.utils.JhzjUtils;
|
||||
import shjh.jhzj7.fi.fi.webapi.model.ApiResultExt;
|
||||
import shjh.jhzj7.fi.fi.webapi.model.PayreceiptQueryModel;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -79,12 +85,101 @@ public class PayreceiptQueryControler {
|
|||
entryBean.setKdPayBillID(String.valueOf(paybill.getPkValue()));
|
||||
entryBean.setFkBillID(paybill.getString("shjh_fkbillid"));
|
||||
entryBean.setFkEntryID(paybill.getString("shjh_fkentryid"));
|
||||
//查询电子回单,返回pdf url
|
||||
//1.付款单查询明细
|
||||
DynamicObjectCollection bankcheckentity = paybill.getDynamicObjectCollection("bankcheckentity");//交易明细分录
|
||||
if (!bankcheckentity.isEmpty()) {
|
||||
for (DynamicObject dynamicObject : bankcheckentity) {
|
||||
String edetailbillno = dynamicObject.getString("edetailbillno");//交易明细编号
|
||||
QFilter qFilter = new QFilter("billno", QCP.equals, edetailbillno);
|
||||
//被动付款入账
|
||||
DynamicObject beiIntelpay = BusinessDataServiceHelper.loadSingle("bei_intelpay",
|
||||
"id,billno,matchreceiptentry,matchreceiptentry.e_receiptid", qFilter.toArray());
|
||||
if (beiIntelpay != null) {
|
||||
//电子回单关联信息分录
|
||||
DynamicObjectCollection matchreceiptentry = beiIntelpay.getDynamicObjectCollection("matchreceiptentry");
|
||||
if (!matchreceiptentry.isEmpty()) {
|
||||
for (DynamicObject object : matchreceiptentry) {
|
||||
Long eReceiptid = object.getLong("e_receiptid");//电子回单ID
|
||||
QFilter qFilter1 = new QFilter("id", QCP.equals, eReceiptid);
|
||||
//电子回单信息
|
||||
DynamicObject receipt = BusinessDataServiceHelper.loadSingle("bei_elecreceipt",
|
||||
"id,uploadfilename", qFilter1.toArray());
|
||||
if (null != receipt) {
|
||||
|
||||
String realUploadUrl = getRealUploadUrl(receipt);
|
||||
String[] split = realUploadUrl.split("/");
|
||||
String fileName = split[split.length - 1];
|
||||
String desPlace = "./".concat(fileName);
|
||||
OutputStream out = downloadFile(desPlace, realUploadUrl);
|
||||
File ofdFile = getFile(out, realUploadUrl, desPlace);
|
||||
System.out.println("");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
entryBean.setReceipturl("https://fm-test.jahwa.com.cn/ierp/?formId=home_page");
|
||||
entryBeans.add(entryBean);
|
||||
}
|
||||
return handleSuccessAndReturn(apiResultExt, entryBeans);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取文件真实路径
|
||||
*/
|
||||
public static String getRealUploadUrl(DynamicObject receipt) {
|
||||
String uploadFilName = receipt.getString("uploadfilename");
|
||||
String realPath = "";
|
||||
if (StringUtils.isNotEmpty(uploadFilName)) {
|
||||
realPath = uploadFilName;
|
||||
if (!uploadFilName.contains(".") && !uploadFilName.contains("/")) {
|
||||
//不是以路径结尾的, 作为查询条件去查实际路径
|
||||
try {
|
||||
FileService attachmentFileService = FileServiceFactory.getAttachmentFileService();
|
||||
realPath = attachmentFileService.getFileServiceExt().getRealPath(uploadFilName);
|
||||
}catch (Exception e) {
|
||||
log.error("获取文件真实路径失败" + ExceptionUtils.getExceptionStackTraceMessage(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
return realPath;
|
||||
}
|
||||
|
||||
public static OutputStream downloadFile(String desPlace, String realUploadUrl) {
|
||||
OutputStream out = null;
|
||||
try {
|
||||
FileService fs = FileServiceFactory.getAttachmentFileService();
|
||||
String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36";
|
||||
try {
|
||||
out = new FileOutputStream(desPlace);
|
||||
} catch (FileNotFoundException e) {
|
||||
log.error("根据目标路径创建文件输出流出错 {}", e.getMessage());
|
||||
}
|
||||
fs.download(realUploadUrl, out, userAgent);
|
||||
} catch (Exception e) {
|
||||
log.error("执行download下载操作出错 {}", e.getMessage());
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
public static File getFile(OutputStream outStream, String relativeUrl, String targetPdfRoute){
|
||||
FileService fileService = FileServiceFactory.getAttachmentFileService();
|
||||
try (InputStream inputStream = fileService.getInputStream(relativeUrl)){
|
||||
byte[] buffer = new byte[inputStream.available()];
|
||||
inputStream.read(buffer);
|
||||
File targetFile = new File(targetPdfRoute);
|
||||
outStream.write(buffer);
|
||||
return targetFile;
|
||||
}catch (Exception e) {
|
||||
log.error("从容器获取电子回单pdf失败 {}", e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static QFilter addFilterIfNotNull(QFilter baseFilter, String field, Long value) {
|
||||
if (value != null) {
|
||||
QFilter newFilter = new QFilter(field, QCP.equals, value);
|
||||
|
|
|
|||
Loading…
Reference in New Issue