소스 검색

SRM接口,增加对公报销、预付单与合同台账的关联关系

wanghaiwu 1 개월 전
부모
커밋
5296c5bfe0
1개의 변경된 파일106개의 추가작업 그리고 29개의 파일을 삭제
  1. 106 29
      code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/webapi/SRMSynPayApiPlugin.java

+ 106 - 29
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/webapi/SRMSynPayApiPlugin.java

@@ -569,7 +569,7 @@ public class SRMSynPayApiPlugin implements Serializable {
             entry.set("srcbilltype", "er_prepaybill");//源单类型
             entry.set("seq", srmseq);
 
-            //目标单标识
+            //记录对公报销与预付单的关联关系
             String targetEntityNumber = "er_publicreimbursebill";//对公报销
             String targetEntryKey = "writeoffmoney";//对公报销-冲预付、冲借款
             String srcEntityNumber = "er_prepaybill";//预付单
@@ -581,24 +581,21 @@ public class SRMSynPayApiPlugin implements Serializable {
 
             DynamicObjectCollection linkRows = entry.getDynamicObjectCollection("writeoffmoney_lk");
             if (!linkRows.isEmpty()) {
-                // 已经有关联源单,无需再重建
-                continue;
+                String lkEntryKey ="writeoffmoney_lk";
+                Long srcTableId = srcTableDefine.getTableId();
+
+                // 找到了匹配的行,创建一条_lk子实体上数据,记录源单内码
+                DynamicObject linkRow = new DynamicObject(linkRows.getDynamicObjectType());
+                linkRows.add(linkRow);
+                // 在lk行中,记录源单分录表格编码、源单内码、源单分录内码
+
+                linkRow.set("id", ID.genLongId());
+                linkRow.set("seq", 1);
+                linkRow.set(lkEntryKey + "_stableid", srcTableId);        // 源单分录表格编码:以此标识源单类型及单据体
+                linkRow.set(lkEntryKey + "_sbillid", prepayBillInfo.getString("id"));        // 源单内码
+                linkRow.set(lkEntryKey + "_sid", prepayEntry.getString("id"));            // 源单分录行内码
             }
 
-            String lkEntryKey ="writeoffmoney_lk";
-            Long srcTableId = srcTableDefine.getTableId();
-
-            // 找到了匹配的行,创建一条_lk子实体上数据,记录源单内码
-            DynamicObject linkRow = new DynamicObject(linkRows.getDynamicObjectType());
-            linkRows.add(linkRow);
-            // 在lk行中,记录源单分录表格编码、源单内码、源单分录内码
-
-            linkRow.set("id", ID.genLongId());
-            linkRow.set("seq", 1);
-            linkRow.set(lkEntryKey + "_stableid", srcTableId);        // 源单分录表格编码:以此标识源单类型及单据体
-            linkRow.set(lkEntryKey + "_sbillid", prepayBillInfo.getString("id"));        // 源单内码
-            linkRow.set(lkEntryKey + "_sid", prepayEntry.getString("id"));            // 源单分录行内码
-
             writeoffmoney.add(entry);
 
             totalLoanCheckAmount = totalLoanCheckAmount.add(checkAmountOri);
@@ -847,6 +844,10 @@ public class SRMSynPayApiPlugin implements Serializable {
                     entry.set("contractparta", contractInfo.getDynamicObject("parta"));//甲方old
                     entry.set("contractpartbtype", "bd_supplier");//乙方类型
                     entry.set("contractpartb", contractparty);//乙方
+                    entry.set("contractpartatypenew", "bos_org");//甲方类型
+                    entry.set("contractpartanew", costCompany);//甲方
+                    entry.set("nckd_contractamt", contractAmount);//合同总额(初始)
+                    entry.set("nckd_oriapplyamt", oriapplyAmount);//合同总额(变更后)
 
                     DynamicObjectCollection payplanEntrys = contractInfo.getDynamicObjectCollection("expenseentryentity");
                     if(payplanEntrys.size() > 0){
@@ -859,18 +860,54 @@ public class SRMSynPayApiPlugin implements Serializable {
                         entry.set("contractexpcurrency", planEntry.getDynamicObject("entrycurrency"));//币种
                         entry.set("contractexpchangerate", planEntry.getBigDecimal("exchangerate"));//汇率
                         entry.set("contractexpquotetype", "0");//换算方式
+                        entry.set("entryprepayedamount", planEntry.getBigDecimal("pushedamount"));//已预付金额
+                        entry.set("entrycurrprepayedamount", planEntry.getBigDecimal("pushedcurramount"));//已预付金额本位币
+                        entry.set("contractreimamount", planEntry.getBigDecimal("oriexppayedamount"));//已付金额
+                        entry.set("contractcurrreimamhttount", planEntry.getBigDecimal("exppayedamount"));//已付金额本位币
+                        entry.set("contractcanamount", planEntry.getBigDecimal("orgiexpebalanceamount"));//可报销金额
+                        entry.set("contractcurrcanamount", planEntry.getBigDecimal("expebalanceamount"));//可报销金额本位币
+//                        entry.set("contractwriteoff", planEntry.getBigDecimal("canloanamount"));//冲销金额
+//                        entry.set("contractcurrwriteoff", planEntry.getBigDecimal("canloancurramount"));//冲销金额本位币
+                        entry.set("oricontractnotpayamount", planEntry.getBigDecimal("oriexpnotpayamount"));//未付金额
                         entry.set("contractnotpayamount", planEntry.getBigDecimal("expnotpayamount"));//未付金额本位币
-                        entry.set("contractcanloanamount", planEntry.getBigDecimal("canloanamount"));//可预付金额
-                        entry.set("concurrcanloanamount", planEntry.getBigDecimal("canloancurramount"));//可预付金额本位币
+
+                        entry.set("contractsid", contractInfo.getLong("id"));//源单id
+                        entry.set("contractsrcentryid", planEntry.getLong("id"));//关联合同分录id
+
+
+                        //记录对公报销与合同台账的
+                        String targetEntityNumber = "er_publicreimbursebill";//对公报销
+                        String targetEntryKey = "contractentry";//对公报销-冲预付、冲借款
+                        String srcEntityNumber = "er_contractbill";//合同台账
+                        String srcEntryKey = "expenseentryentity";//合同付款计划
+                        // 获取目标单单据体的实体表格定义:主实体 + 单据体 -> 对应一个唯一的实体表格定义
+                        TableDefine targetTableDefine = EntityMetadataCache.loadTableDefine(targetEntityNumber, targetEntryKey);
+                        // 获取源单单据体的表格定义:记录关联关系时,需要用到此对象中的tableId值,用一个长整数值唯一标识源单及单据体
+                        TableDefine srcTableDefine = EntityMetadataCache.loadTableDefine(srcEntityNumber, srcEntryKey);
+
+                        DynamicObjectCollection linkRows = entry.getDynamicObjectCollection("contractentry_lk");
+                        if (linkRows.isEmpty()) {
+                            String lkEntryKey ="contractentry_lk";
+                            Long srcTableId = srcTableDefine.getTableId();
+
+                            // 找到了匹配的行,创建一条_lk子实体上数据,记录源单内码
+                            DynamicObject linkRow = new DynamicObject(linkRows.getDynamicObjectType());
+                            linkRows.add(linkRow);
+                            // 在lk行中,记录源单分录表格编码、源单内码、源单分录内码
+
+                            linkRow.set("id", ID.genLongId());
+                            linkRow.set("seq", 1);
+                            linkRow.set(lkEntryKey + "_stableid", srcTableId);        // 源单分录表格编码:以此标识源单类型及单据体
+                            linkRow.set(lkEntryKey + "_sbillid", contractInfo.getString("id"));        // 源单内码
+                            linkRow.set(lkEntryKey + "_sid", planEntry.getString("id"));            // 源单分录行内码
+                        }
+
                     }
 
-                    entry.set("contractpartatypenew", "bos_org");//甲方类型
-                    entry.set("contractpartanew", costCompany);//甲方
-                    entry.set("nckd_contractamt", contractAmount);//合同总额(初始)
-                    entry.set("nckd_oriapplyamt", oriapplyAmount);//合同总额(变更后)
 
                     contractEntry.add(entry);
 
+
                     break;
                 }
             }
@@ -1246,6 +1283,10 @@ public class SRMSynPayApiPlugin implements Serializable {
                     entry.set("contractparta", contractInfo.getDynamicObject("parta"));//甲方old
                     entry.set("contractpartbtype", "bd_supplier");//乙方类型
                     entry.set("contractpartb", contractparty);//乙方
+                    entry.set("contractpartatypenew", "bos_org");//甲方类型
+                    entry.set("contractpartanew", costCompany);//甲方
+                    entry.set("nckd_contractamt", contractAmount);//合同总额(初始)
+                    entry.set("nckd_oriapplyamt", oriapplyAmount);//合同总额(变更后)
 
                     DynamicObjectCollection payplanEntrys = contractInfo.getDynamicObjectCollection("expenseentryentity");
                     if(payplanEntrys.size() > 0){
@@ -1258,15 +1299,51 @@ public class SRMSynPayApiPlugin implements Serializable {
                         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("entryprepayedamount", planEntry.getBigDecimal("pushedamount"));//已预付金额
+                        entry.set("entrycurrprepayedamount", planEntry.getBigDecimal("pushedcurramount"));//已预付金额本位币
+                        entry.set("contractreimamount", planEntry.getBigDecimal("oriexppayedamount"));//已付金额
+                        entry.set("contractcurrreimamhttount", planEntry.getBigDecimal("exppayedamount"));//已付金额本位币
+                        entry.set("contractcanloanamount", planEntry.getBigDecimal("oriexppayedamount"));//可预付金额
                         entry.set("concurrcanloanamount", planEntry.getBigDecimal("canloancurramount"));//可预付金额本位币
+                        entry.set("contractcanamount", planEntry.getBigDecimal("orgiexpebalanceamount"));//可报销金额
+                        entry.set("contractcurrcanamount", planEntry.getBigDecimal("expebalanceamount"));//可报销金额本位币
+//                        entry.set("contractwriteoff", planEntry.getBigDecimal("canloanamount"));//冲销金额
+//                        entry.set("contractcurrwriteoff", planEntry.getBigDecimal("canloancurramount"));//冲销金额本位币
+                        entry.set("contractnotpayamount", planEntry.getBigDecimal("oriexpnotpayamount"));//未付金额
+
+                        entry.set("contractsid", contractInfo.getLong("id"));//源单id
+                        entry.set("contractsrcentryid", planEntry.getLong("id"));//关联合同分录id
+
+
+                        //记录预付单与合同台账的
+                        String targetEntityNumber = "er_prepaybill";//预付单
+                        String targetEntryKey = "contractentry";//对公报销-合同分录
+                        String srcEntityNumber = "er_contractbill";//合同台账
+                        String srcEntryKey = "expenseentryentity";//合同台账-付款计划
+                        // 获取目标单单据体的实体表格定义:主实体 + 单据体 -> 对应一个唯一的实体表格定义
+                        TableDefine targetTableDefine = EntityMetadataCache.loadTableDefine(targetEntityNumber, targetEntryKey);
+                        // 获取源单单据体的表格定义:记录关联关系时,需要用到此对象中的tableId值,用一个长整数值唯一标识源单及单据体
+                        TableDefine srcTableDefine = EntityMetadataCache.loadTableDefine(srcEntityNumber, srcEntryKey);
+
+                        DynamicObjectCollection linkRows = entry.getDynamicObjectCollection("contractentry_lk");
+                        if (linkRows.isEmpty()) {
+                            String lkEntryKey ="contractentry_lk";
+                            Long srcTableId = srcTableDefine.getTableId();
+
+                            // 找到了匹配的行,创建一条_lk子实体上数据,记录源单内码
+                            DynamicObject linkRow = new DynamicObject(linkRows.getDynamicObjectType());
+                            linkRows.add(linkRow);
+                            // 在lk行中,记录源单分录表格编码、源单内码、源单分录内码
+
+                            linkRow.set("id", ID.genLongId());
+                            linkRow.set("seq", 1);
+                            linkRow.set(lkEntryKey + "_stableid", srcTableId);        // 源单分录表格编码:以此标识源单类型及单据体
+                            linkRow.set(lkEntryKey + "_sbillid", contractInfo.getString("id"));        // 源单内码
+                            linkRow.set(lkEntryKey + "_sid", planEntry.getString("id"));            // 源单分录行内码
+                        }
                     }
 
-                    entry.set("contractpartatypenew", "bos_org");//甲方类型
-                    entry.set("contractpartanew", costCompany);//甲方
-                    entry.set("nckd_contractamt", contractAmount);//合同总额(初始)
-                    entry.set("nckd_oriapplyamt", oriapplyAmount);//合同总额(变更后)
 
                     contractEntry.add(entry);