Procházet zdrojové kódy

<feat>:修改
1、SRM接口逻辑修改

wanghaiwu před 3 týdny
rodič
revize
346efd8725

+ 108 - 1
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/webapi/SRMSynPayApiPlugin.java

@@ -20,6 +20,7 @@ import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.imc.bdm.common.constant.BotpCallBackLogConstant;
 import nckd.base.helper.CommonHelperUtils;
 import javax.validation.Valid;
 import java.io.Serializable;
@@ -550,6 +551,10 @@ public class SRMSynPayApiPlugin implements Serializable {
             return buildReturnData(code, srmBillNo, returnMessage, null, null, null);
         }
 
+        //合同台账
+        qFilter = new QFilter("contractcode", QCP.equals, contract);
+        DynamicObject contractInfo = BusinessDataServiceHelper.loadSingle("er_contractbill", qFilter.toArray());
+
         //单据类型
         DynamicObject billTypeInfo = CommonHelperUtils.queryBaseDynamicObject("bos_billtype", "number", "er_prepaybill_BT_S");
 
@@ -562,6 +567,7 @@ public class SRMSynPayApiPlugin implements Serializable {
             returnMessage = e.getMessage();
             return buildReturnData(code, srmBillNo, returnMessage, null, null, null);
         }
+//        Date repaymentDate = CommonHelperUtils.getDateStringFormat("2099-12-31", "yyyy-MM-dd");
 
         dailyLoanBill.set("bizdate", bizDate);//申请日期
         dailyLoanBill.set("billstatus", "A");//单据状态
@@ -584,6 +590,7 @@ public class SRMSynPayApiPlugin implements Serializable {
         dailyLoanBill.set("detailtype", "biztype_other");//关联业务
         dailyLoanBill.set("ispush", "false");//合同下推生成
         dailyLoanBill.set("nckd_srmstatus", "1");//srm状态,1:SRM已推送;2:已退回SRM;3:已反写SRM;4:反写SRM失败
+//        dailyLoanBill.set("repaymentdate", repaymentDate);//预计冲销日期
 
         BigDecimal totalReimburseAmount = BigDecimal.ZERO;//报销金额合计
 
@@ -632,6 +639,12 @@ public class SRMSynPayApiPlugin implements Serializable {
         dailyLoanBill.set("expenseentryentity", expenseEntry);
 
         //收款明细
+        //支付方式:默认为 银企直连
+        qFilter = new QFilter("number", QCP.equals, "BANK");
+
+        DynamicObject settleType = BusinessDataServiceHelper.loadSingle("bd_settlementtype", qFilter.toArray());
+        DynamicObject supplier = null;
+
         DynamicObjectCollection accountEntry  = dailyLoanBill.getDynamicObjectCollection("accountentry");
         type = accountEntry.getDynamicObjectType();
         JSONArray dailyLoanBillAccountEntry = inputData.getJSONArray("dailyLoanBillAccountEntry");
@@ -653,11 +666,13 @@ public class SRMSynPayApiPlugin implements Serializable {
                 return buildReturnData(code, srmBillNo, returnMessage, null, null, null);
             }
 
-            DynamicObject supplier = CommonHelperUtils.queryBaseDynamicObject("bd_supplier", "societycreditcode", payerName);
+            supplier = CommonHelperUtils.queryBaseDynamicObject("bd_supplier", "societycreditcode", payerName);
             if(supplier == null){
                 returnMessage = "供应商(" + payerName + ")在星瀚系统中未匹配到数据!";
                 return buildReturnData(code, srmBillNo, returnMessage, null, null, null);
             }
+            //供应商银行账号信息
+            DynamicObjectCollection entryBanks = supplier.getDynamicObjectCollection("entry_bank");
 
             DynamicObject currency = CommonHelperUtils.queryBaseDynamicObject("bd_currency", "number", currencyType);
             if(currency == null){
@@ -672,9 +687,24 @@ public class SRMSynPayApiPlugin implements Serializable {
             BigDecimal amountOriLocal = amountOri.multiply(exchangeRate).setScale(4, BigDecimal.ROUND_HALF_UP);
 
             DynamicObject entry = new DynamicObject(type);
+
+            entry.set("paymode", settleType);//支付方式
             entry.set("payertype", "bd_supplier");//收款人类型
             entry.set("supplier", supplier);//收款人
             entry.set("payername", supplier.getString("name"));//收款人名称
+
+            if(entryBanks.size() > 0){
+                for(DynamicObject entryBank : entryBanks){
+                    if(entryBank.getBoolean("isdefault_bank")){
+                        entry.set("payeraccount", entryBank.getString("bankaccount"));//银行账号
+                        entry.set("payeraccountname", entryBank.getString("accountname"));//账户名称
+                        entry.set("payerbank", entryBank.getDynamicObject("bank"));//开户银行
+
+                        break;
+                    }
+                }
+            }
+
             entry.set("accountcurrency", currency);//币别
             entry.set("accexchangerate", exchangeRate);//汇率
             entry.set("orireceiveamount", amountOri);//收款金额
@@ -688,6 +718,83 @@ public class SRMSynPayApiPlugin implements Serializable {
         }
         dailyLoanBill.set("accountentry", accountEntry);
 
+        if(supplier == null){
+            returnMessage = "无收款供应商信息!";
+            return buildReturnData(code, srmBillNo, returnMessage, null, null, null);
+        }
+
+        //合同信息
+        if(contractInfo != null){
+            DynamicObjectCollection contractEntry  = dailyLoanBill.getDynamicObjectCollection("contractentry");
+            type = contractEntry.getDynamicObjectType();
+
+            DynamicObject currency = contractInfo.getDynamicObject("contractcurrency");
+            currency = CommonHelperUtils.queryBaseDynamicObject("bd_currency", "number", currency.getString("number"));
+
+            if(currency == null){
+                returnMessage = "币别(" + orgUnit + ")在星瀚系统中未匹配到数据!";
+                return buildReturnData(code, srmBillNo, returnMessage, null, null, null);
+            }
+
+            BigDecimal exchangeRate = BigDecimal.ONE;
+            if(currency.getLong("id") != 1L){
+                exchangeRate = CommonHelperUtils.getExchangeRate(exchangeTableId, currency.getLong("id"), 1L, bizDate);
+            }
+
+            BigDecimal contractAmount = contractInfo.getBigDecimal("contractamount");//合同总额(初始)
+            BigDecimal oriapplyAmount = contractInfo.getBigDecimal("oriapplyamount");//合同总额(变更后)
+
+            DynamicObjectCollection contractPartyEntry = contractInfo.getDynamicObjectCollection("contractpartyentry"); //
+            if(contractPartyEntry.size() > 0){
+                for(DynamicObject partyEntry : contractPartyEntry){
+                    DynamicObject entry = new DynamicObject(type);
+
+                    DynamicObject contractparty = partyEntry.getDynamicObject("contractparty");
+                    if(contractparty.getLong("id") != supplier.getLong("id")){
+                        continue;
+                    }
+
+                    entry.set("seq", 1);
+                    entry.set("contractcode", contract);//合同号
+                    entry.set("contractname", contractInfo.getString("contractname"));//合同名称
+                    entry.set("signdate", contractInfo.getDate("signdate"));//签订日期
+                    entry.set("contractdescription", contractInfo.getString("description"));//合同说明
+                    entry.set("contractapplier", contractInfo.getDynamicObject("applier"));//经办人
+                    entry.set("contractcostorg", contractInfo.getDynamicObject("costcompany"));//核算组织
+                    entry.set("contractparta", contractInfo.getDynamicObject("parta"));//甲方old
+                    entry.set("contractpartbtype", "bd_supplier");//乙方类型
+                    entry.set("contractpartb", contractparty);//乙方
+
+                    DynamicObjectCollection payplanEntrys = contractInfo.getDynamicObjectCollection("expenseentryentity");
+                    if(payplanEntrys.size() > 0){
+                        DynamicObject planEntry = payplanEntrys.get(0);
+
+                        entry.set("contractexppaytypeid", planEntry.getDynamicObject("paymenttypeid"));//付款类型
+                        entry.set("contractexphappendate", planEntry.getDate("happendate"));//预计付款日期
+                        entry.set("contractexpproject", planEntry.getDynamicObject("std_project"));//项目
+                        entry.set("contractexpenseitem", planEntry.getDynamicObject("expenseitem"));//费用项目
+                        entry.set("contractexpcurrency", planEntry.getDynamicObject("entrycurrency"));//币种
+                        entry.set("contractexpchangerate", planEntry.getBigDecimal("exchangerate"));//汇率
+                        entry.set("contractexpquotetype", "0");//换算方式
+                        entry.set("contractnotpayamount", planEntry.getBigDecimal("expnotpayamount"));//未付金额本位币
+                        entry.set("contractcanloanamount", planEntry.getBigDecimal("canloanamount"));//可预付金额
+                        entry.set("concurrcanloanamount", planEntry.getBigDecimal("canloancurramount"));//可预付金额本位币
+                    }
+
+                    entry.set("contractpartatypenew", "bos_org");//甲方类型
+                    entry.set("contractpartanew", costCompany);//甲方
+                    entry.set("nckd_contractamt", contractAmount);//合同总额(初始)
+                    entry.set("nckd_oriapplyamt", oriapplyAmount);//合同总额(变更后)
+
+                    contractEntry.add(entry);
+
+                    break;
+                }
+            }
+
+            dailyLoanBill.set("contractentry", contractEntry);
+        }
+
 
         dailyLoanBill.set("loanamount", totalReimburseAmount);//报销金额
         dailyLoanBill.set("approveamount", totalReimburseAmount);//核定金额