wanwei 6 mesiacov pred
rodič
commit
a0a38cc491

+ 2 - 2
src/main/java/fi/cas/opplugin/PaymentProcessOpPlugin.java

@@ -19,7 +19,7 @@ import java.util.HashMap;
 
 //付款处理单付款反写
 public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
-    private static String nckd_cas_arbill_gz_l = "nckd_ar_finarbill_ext"; //应收挂帐单标识
+    private static String nckd_cas_arbill_gz_l = "ar_finarbill"; //应收挂帐单标识
     private static String nckd_er_prepaybill_ext = "er_prepaybill"; //预付借款单标识
     private static String nckd_er_publicreimbur_ext = "er_publicreimbursebill"; //报销单标识
     private static String er_contractbill = "er_contractbill"; //合同台账单标识
@@ -78,7 +78,7 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
                             nckd_amountfield7 = nckd_amountfield7.subtract(nckd_amountfield5);
                             //反写分录已付金额,未付金额
                             entryentity.set("nckd_amountfield5",nckd_amountfield5);
-                            entryentity.set("e_unsettledamt",nckd_amountfield7);
+                            entryentity.set("nckd_amountfield7",nckd_amountfield7);
                             Long yfjkSourceBillEntryId = entryentity.getLong("e_srcentryid");
                             yfjkMap.put(yfjkSourceBillEntryId,nckd_amountfield5);
                         }

+ 119 - 68
src/main/java/fi/er/opplugin/PublicreimburOpPlugin.java

@@ -4,18 +4,13 @@ import com.alibaba.druid.util.StringUtils;
 import fi.cas.common.SettlementStatusEnum;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
-import kd.bos.dataentity.metadata.IDataEntityType;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
-import kd.bos.exception.KDBizException;
 import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
-import kd.bos.servicehelper.operation.DeleteServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
-
 import java.math.BigDecimal;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -43,23 +38,6 @@ public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
                 info.set("nckd_unsettleamount",totalUnsettleamount);
                 info.set("nckd_settleamount",BigDecimal.ZERO);
                 info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
-
-                //反写实物卡片清单
-                for (DynamicObject entryentity : info.getDynamicObjectCollection("assetentry")) {
-                    DynamicObjectCollection nckd_real_card = entryentity.getDynamicObjectCollection("nckd_real_card");
-                    for (DynamicObject object : nckd_real_card) {
-                        Long id = (Long) object.get(2);
-                        //查询实物卡片分录数据,如果查询到数据则不能保存该报销单
-                        QFilter filter = new QFilter("id", QCP.equals,id);
-                        DynamicObject[] cardObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter});
-                        for (int j = 0; j < cardObjects.length; j++) {
-                            DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[i].getPkValue(), cardObjects[i].getDynamicObjectType().getName());
-                            //资产报账单审核通过后,实物卡片清单标记为1
-                            cardInfo.set("nckd_flag", "1");
-                            SaveServiceHelper.save(new DynamicObject[]{cardInfo});
-                        }
-                    }
-                }
                 SaveServiceHelper.save(new DynamicObject[]{info});
             } else if (StringUtils.equals(e.getOperationKey(),"unaudit")) {
                 //当前单头数据包
@@ -70,54 +48,8 @@ public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
                 }
                 info.set("nckd_unsettleamount",BigDecimal.ZERO);
                 info.set("nckd_settlestatus", null);
-
-                //反审核反写实物卡片清单
-                for (DynamicObject entryentity : info.getDynamicObjectCollection("assetentry")) {
-                    DynamicObjectCollection nckd_real_card = entryentity.getDynamicObjectCollection("nckd_real_card");
-                    for (DynamicObject object : nckd_real_card) {
-                        Long id = (Long) object.get(2);
-                        //查询实物卡片分录数据,如果查询到数据则不能保存该报销单
-                        QFilter filter = new QFilter("id", QCP.equals,id);
-                        DynamicObject[] cardObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter});
-                        for (int j = 0; j < cardObjects.length; j++) {
-                            DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[i].getPkValue(), cardObjects[i].getDynamicObjectType().getName());
-                            //资产报账单审核通过后,实物卡片清单标记为1
-                            //资产报账单审核通过后,实物卡片清单标记为1
-                            cardInfo.set("nckd_flag", "0");
-                            //星瀚实物卡片三个字段回写为空
-                            cardInfo.set("nckd_card_real_org", null);
-                            cardInfo.set("nckd_card_real_code", null);
-                            cardInfo.set("nckd_card_real_name", null);
-                            SaveServiceHelper.save(new DynamicObject[]{cardInfo});
-                        }
-                    }
-                }
                 SaveServiceHelper.save(new DynamicObject[]{info});
 
-                //反审核需要删除资产报账单下推的物卡片清单
-                //查询实物卡片清单
-                QFilter cardFilter = new QFilter("nckd_bz_id", QCP.equals,info.getLong("id"));
-                DynamicObject[] cardDynamicObjects = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {cardFilter});
-                if (cardDynamicObjects.length > 0) {
-                    for (int d=0;d<cardDynamicObjects.length;d++) {
-                        DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardDynamicObjects[i].getPkValue(), cardDynamicObjects[i].getDynamicObjectType().getName());
-                        String billno = cardInfo.getString("billno");
-                        //删除实物卡片
-                        IDataEntityType dataEntityType = cardInfo.getDataEntityType();
-                        Object[] pks = new Object[]{cardInfo.getLong("id")};
-                        DeleteServiceHelper.delete(dataEntityType, pks);
-                        //查询财务卡片
-                        QFilter cwFilter = new QFilter("billno", QCP.equals,cardInfo.getString("billno"));
-                        DynamicObject[] cwDynamicObjects = BusinessDataServiceHelper.load("fa_card_fin","id",new QFilter[] {cwFilter});
-                        for (int f=0;f<cwDynamicObjects.length;f++) {
-                            DynamicObject cwInfo = BusinessDataServiceHelper.loadSingle(cwDynamicObjects[i].getPkValue(), cwDynamicObjects[i].getDynamicObjectType().getName());
-                            //删除财务卡片
-                            IDataEntityType cwdataEntityType = cwInfo.getDataEntityType();
-                            Object[] ids = new Object[]{cwInfo.getLong("id")};
-                            DeleteServiceHelper.delete(cwdataEntityType, ids);
-                        }
-                    }
-                }
             } else if (StringUtils.equals(e.getOperationKey(),"save")) {
                 DynamicObject info = dynamicObjects[i];
                 List<String> list = Arrays.asList("3", "4", "5", "7", "8", "9", "10", "11", "12", "13", "14", "15","16", "17", "18", "19", "20", "21", "24", "30");
@@ -131,7 +63,126 @@ public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
                         break;
                     }
                 }
+
+                //反写预付借款单
+                DynamicObjectCollection writeoffmoneys = info.getDynamicObjectCollection("writeoffmoney");
+                DynamicObject saveInfo = BusinessDataServiceHelper.loadSingle(info.getPkValue(), info.getDynamicObjectType().getName());
+                if (saveInfo != null) {
+                    DynamicObjectCollection saveWriteoffmoneys = saveInfo.getDynamicObjectCollection("writeoffmoney");
+                    // 处理在 saveWriteoffmoneys 中但不在 writeoffmoneys 中的元素
+                    DynamicObjectCollection toDelete = getDifference(saveWriteoffmoneys, writeoffmoneys);
+                    if (toDelete.size() != 0) {
+                        deleteBackFinarbill(toDelete);
+                    }
+                    // 处理在 writeoffmoneys 中但不在 saveWriteoffmoneys 中的元素
+                    DynamicObjectCollection toWriteBack = getDifference(writeoffmoneys, saveWriteoffmoneys);
+                    if (toWriteBack.size() != 0) {
+                        writeBackFinarbill(toWriteBack);
+                    }
+                } else {
+                    // 如果没有保存的信息,直接反写
+                    writeBackFinarbill(writeoffmoneys);
+                }
+            }
+        }
+    }
+
+    public void writeBackFinarbill(DynamicObjectCollection writeoffmoneys) {
+        //报销单冲预付借款分录
+        for (DynamicObject writeoffmoney : writeoffmoneys) {
+            //预付借款单id
+            String sourcebillid = writeoffmoney.getString("sourcebillid");
+            //预付借款单预付借款信息分录id
+            Long srcofsrcentryid = writeoffmoney.getLong("srcofsrcentryid");
+            //冲销金额
+            BigDecimal accloanamount = writeoffmoney.getBigDecimal("accloanamount");
+            //查询应收挂账单
+            QFilter filter = new QFilter("sourcebillid", QCP.equals, sourcebillid);
+            DynamicObject[] finarbills = BusinessDataServiceHelper.load("ar_finarbill","id",new QFilter[] {filter});
+            for (DynamicObject finarbill : finarbills) {
+                DynamicObject finarbillInfo = BusinessDataServiceHelper.loadSingle(finarbill.getPkValue(), finarbill.getDynamicObjectType().getName());
+                //应收挂账单明细分录
+                DynamicObjectCollection entrys = finarbillInfo.getDynamicObjectCollection("entry");
+                for (DynamicObject entry : entrys) {
+                    //预付借款单预付借款信息分录id
+                    Long e_srcentryid = entry.getLong("e_srcentryid");
+                    //销账金额
+                    BigDecimal nckd_e_settledamt = entry.getBigDecimal("nckd_e_settledamt");
+                    //已结算金额
+                    BigDecimal e_settledamt = entry.getBigDecimal("e_settledamt");
+                    //未结算金额
+                    BigDecimal e_unsettleamt = entry.getBigDecimal("e_unsettleamt");
+                    //已结算金额(本位币)
+                    BigDecimal e_settledlocalamt = entry.getBigDecimal("e_settledlocalamt");
+                    //未结算金额(本位币)
+                    BigDecimal e_unsettlelocalamt = entry.getBigDecimal("e_unsettlelocalamt");
+                    if (e_srcentryid != 0 && e_srcentryid.equals(srcofsrcentryid)) {
+                        entry.set("nckd_e_settledamt", nckd_e_settledamt.add(accloanamount));
+                        entry.set("e_settledamt", e_settledamt.add(accloanamount));
+                        entry.set("e_unsettleamt", e_unsettleamt.subtract(accloanamount));
+                    }
+                }
+                SaveServiceHelper.save(new DynamicObject[]{finarbillInfo});
+            }
+        }
+    }
+
+    public void deleteBackFinarbill(DynamicObjectCollection writeoffmoneys) {
+        //报销单冲预付借款分录
+        for (DynamicObject writeoffmoney : writeoffmoneys) {
+            //预付借款单id
+            String sourcebillid = writeoffmoney.getString("sourcebillid");
+            //预付借款单预付借款信息分录id
+            Long srcofsrcentryid = writeoffmoney.getLong("srcofsrcentryid");
+            //冲销金额
+            BigDecimal accloanamount = writeoffmoney.getBigDecimal("accloanamount");
+            //查询应收挂账单
+            QFilter filter = new QFilter("sourcebillid", QCP.equals, sourcebillid);
+            DynamicObject[] finarbills = BusinessDataServiceHelper.load("ar_finarbill","id",new QFilter[] {filter});
+            for (DynamicObject finarbill : finarbills) {
+                DynamicObject finarbillInfo = BusinessDataServiceHelper.loadSingle(finarbill.getPkValue(), finarbill.getDynamicObjectType().getName());
+                //应收挂账单明细分录
+                DynamicObjectCollection entrys = finarbillInfo.getDynamicObjectCollection("entry");
+                for (DynamicObject entry : entrys) {
+                    //预付借款单预付借款信息分录id
+                    Long e_srcentryid = entry.getLong("e_srcentryid");
+                    //销账金额
+                    BigDecimal nckd_e_settledamt = entry.getBigDecimal("nckd_e_settledamt");
+                    //已结算金额
+                    BigDecimal e_settledamt = entry.getBigDecimal("e_settledamt");
+                    //未结算金额
+                    BigDecimal e_unsettleamt = entry.getBigDecimal("e_unsettleamt");
+                    //已结算金额(本位币)
+                    BigDecimal e_settledlocalamt = entry.getBigDecimal("e_settledlocalamt");
+                    //未结算金额(本位币)
+                    BigDecimal e_unsettlelocalamt = entry.getBigDecimal("e_unsettlelocalamt");
+                    if (e_srcentryid != 0 && e_srcentryid.equals(srcofsrcentryid)) {
+                        entry.set("nckd_e_settledamt", nckd_e_settledamt.subtract(accloanamount));
+                        entry.set("e_settledamt", e_settledamt.subtract(accloanamount));
+                        entry.set("e_unsettleamt", e_unsettleamt.add(accloanamount));
+                    }
+                }
+                SaveServiceHelper.save(new DynamicObject[]{finarbillInfo});
+            }
+        }
+    }
+
+    // 获取在 source 中但不在 target 中的元素集合
+    private DynamicObjectCollection getDifference(DynamicObjectCollection source, DynamicObjectCollection target) {
+        DynamicObjectCollection difference = new DynamicObjectCollection();
+        for (DynamicObject sourceItem : source) {
+            boolean existsInTarget = false;
+            for (DynamicObject targetItem : target) {
+                // 根据某个唯一标识符判断是否存在
+                if (sourceItem.getPkValue().equals(targetItem.getPkValue())) {
+                    existsInTarget = true;
+                    break;
+                }
+            }
+            if (!existsInTarget) {
+                difference.add(sourceItem);
             }
         }
+        return difference;
     }
 }

+ 7 - 2
src/main/java/fi/fa/opplugin/utils/ChangeDataUtils.java

@@ -134,6 +134,7 @@ public class ChangeDataUtils {
         String billno = info.getString("number");//源单编号
         String dispatchType = info.getString("nckd_dispatch_type");//调拨类型
         String nckd_card_real_code = info.getString("nckd_card_number");
+        String nckd_storeplace = info.getString("nckd_storeplace");
         String[] asset = nckd_card_real_code.split(",");
         if (nckd_card_real_code.isEmpty()) {
             return "单据" + billno + "未绑定资产信息,生成调拨单失败";
@@ -167,8 +168,11 @@ public class ChangeDataUtils {
                         //更新归属机构,归属部门,使用人
                         for (int a = 0; a < dynamicObjects.length ; a++) {
                             DynamicObject ecardInfoList = BusinessDataServiceHelper.loadSingle(dynamicObjects[a].getPkValue(), dynamicObjects[a].getDynamicObjectType().getName());
-                            ecardInfoList.set("nckd_orgfield", orgId);
-                            ecardInfoList.set("nckd_dept", getOrg(info.getString("nckd_dept_in")));
+                            Long deptId = getOrg(info.getString("nckd_dept_in"));
+                            ecardInfoList.set("nckd_orgfield", getRelation(deptId));
+                            ecardInfoList.set("nckd_dept", deptId);
+                            ecardInfoList.set("nckd_local", nckd_storeplace);
+                            ecardInfoList.set("nckd_use_name", info.getString("user"));
                             SaveServiceHelper.save(new DynamicObject[]{ecardInfoList});
                         }
                     }else if (ObjectUtils.isNotEmpty(orgId) && "1".equals(dispatchType)) {
@@ -176,6 +180,7 @@ public class ChangeDataUtils {
                         for (int a = 0; a < dynamicObjects.length ; a++) {
                             DynamicObject ecardInfoList = BusinessDataServiceHelper.loadSingle(dynamicObjects[a].getPkValue(), dynamicObjects[a].getDynamicObjectType().getName());
                             ecardInfoList.set("nckd_dept", getOrg(info.getString("nckd_dept_in")));
+                            ecardInfoList.set("nckd_local", nckd_storeplace);
                             ecardInfoList.set("nckd_use_name", info.getString("user"));
                             SaveServiceHelper.save(new DynamicObject[]{ecardInfoList});
                         }