Bladeren bron

枚举类,预付报销单,借款单插件

wanwei 9 maanden geleden
bovenliggende
commit
0c7a5075ab

+ 23 - 0
src/main/java/fi/cas/common/SettlementStatusEnum.java

@@ -0,0 +1,23 @@
+package fi.cas.common;
+
+public enum SettlementStatusEnum {
+    已结算("settled", "已结算"),
+    未结算("unsettle", "未结算"),
+    部分结算("partsettle", "部分结算");
+
+    private String value;
+    private String name;
+
+    SettlementStatusEnum(String value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

+ 197 - 0
src/main/java/fi/cas/opplugin/PaymentProcessOpPlugin.java

@@ -0,0 +1,197 @@
+package fi.cas.opplugin;
+
+import dm.jdbc.util.StringUtil;
+import fi.cas.common.SettlementStatusEnum;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+
+//付款处理单
+public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
+    private static String nckd_cas_arbill_gz_l = "cas_paybill"; //应收挂帐单标识
+    private static String nckd_er_prepaybill_ext = "er_publicreimbursebill"; //预付借款单标识
+    private static String nckd_er_publicreimbur_ext = "er_publicreimbursebill"; //报销单标识
+    private static String er_contractbill = "er_contractbill"; //合同台账单标识
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        //获取付款处理单据信息
+        DynamicObject[] dynamicObjects = e.getDataEntities();
+        for (int i = 0; i < dynamicObjects.length; i++) {
+            //当前单头数据包
+            DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+            //获取应收挂帐单id
+            Long sourcebillid = info.getLong("sourcebillid");
+            //存储应收挂账单分录id和付款处理分录实付金额
+            HashMap<String,BigDecimal> amountMap = new HashMap<>();
+            //循环付款明细分录
+            for (DynamicObject entryentity : info.getDynamicObjectCollection("entry")) {
+                //取当前循环付款明细分录的实付金额
+                BigDecimal expenseamount = entryentity.getBigDecimal("e_actamt");
+                //取当前循环付款明细分录的源单分录id
+                String sourcebillentryid = entryentity.getString("e_sourcebillentryid");
+                amountMap.put(sourcebillentryid,expenseamount);
+            }
+            //查询应收挂账单
+            QFilter gzFilter = new QFilter("id", QCP.equals,sourcebillid);
+            DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(nckd_cas_arbill_gz_l,"id",new QFilter[] {gzFilter});
+
+            //查询报销单
+            QFilter bxFilter = new QFilter("id", QCP.equals,sourcebillid);
+            DynamicObject[] bxDynamicObjects = BusinessDataServiceHelper.load(nckd_er_publicreimbur_ext,"id",new QFilter[] {bxFilter});
+            //应收方向的回写
+            if (gzDynamicObjects.length > 0) {
+                //循环数组获取结算状态,已结算金额,未结算金额
+                for (int c=0;c<gzDynamicObjects.length;c++) {
+                    //应收挂帐单头数据包
+                    DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[i].getPkValue(), gzDynamicObjects[i].getDynamicObjectType().getName());
+                    //获取预付借款单id
+                    String yfjkId = gzInfo.getString("sourcebillid");
+                    //存储预付借款单分录id和付款处理分录实付金额
+                    HashMap<String,BigDecimal> yfjkMap = new HashMap<>();
+                    //应收挂帐单头已结算金额
+                    BigDecimal totalSettledamt = BigDecimal.ZERO;
+                    //应收挂帐单头未结算金额
+                    BigDecimal totalUnsettledamt = BigDecimal.ZERO;
+                    //循环应收挂帐单付款明细分录
+                    for (DynamicObject entryentity : gzInfo.getDynamicObjectCollection("entry")) {
+                        //获取分录实付金额
+                        BigDecimal settledamt = amountMap.get(entryentity.getString("id"));
+                        //获取未结算金额
+                        BigDecimal unsettledamt = entryentity.getBigDecimal("e_unsettledamt");
+                        unsettledamt = unsettledamt.subtract(settledamt);
+                        //反写分录已结算金额,未结算金额
+                        entryentity.set("e_settledamt",settledamt);
+                        entryentity.set("e_unsettledamt",unsettledamt);
+                        totalSettledamt = totalSettledamt.add(settledamt);
+                        totalUnsettledamt = totalUnsettledamt.add(unsettledamt);
+                        String yfjkSourceBillEntryId = entryentity.getString("e_sourcebillentryid");
+                        yfjkMap.put(yfjkSourceBillEntryId,settledamt);
+                    }
+                    if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) {
+                        gzInfo.set("settlestatus", SettlementStatusEnum.已结算.getValue());
+                        gzInfo.set("settleamount", totalSettledamt);
+                        gzInfo.set("unsettleamount", totalUnsettledamt);
+                    } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) {
+                        gzInfo.set("settlestatus", SettlementStatusEnum.未结算.getValue());
+                        gzInfo.set("settleamount", totalSettledamt);
+                        gzInfo.set("unsettleamount", totalUnsettledamt);
+                    } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) {
+                        gzInfo.set("settlestatus", SettlementStatusEnum.部分结算.getValue());
+                        gzInfo.set("settleamount", totalSettledamt);
+                        gzInfo.set("unsettleamount", totalUnsettledamt);
+                    }
+                    SaveServiceHelper.save(new DynamicObject[]{gzInfo});
+                    //查询预付借款单
+                    QFilter nckd_yfjkFilter = new QFilter("nckd_er_prepaybill_ext.id", QCP.equals,yfjkId);
+                    DynamicObject[] yfjkDynamicObjects = BusinessDataServiceHelper.load(nckd_er_prepaybill_ext,"id,nckd_settlestatus,nckd_settleamount,nckd_unsettleamount",new QFilter[] {nckd_yfjkFilter});
+                    //循环数组获取结算状态,已结算金额,未结算金额
+                    for (int d=0;d<yfjkDynamicObjects.length;d++) {
+                        //预付借款单头数据包
+                        DynamicObject yfjkInfo = BusinessDataServiceHelper.loadSingle(yfjkDynamicObjects[i].getPkValue(), yfjkDynamicObjects[i].getDynamicObjectType().getName());
+                        //循环预付借款单预付借款信息分录
+                        for (DynamicObject entryentity : yfjkInfo.getDynamicObjectCollection("expenseentryentity")) {
+                            //获取分录实付金额
+                            BigDecimal settledamt = yfjkMap.get(entryentity.getString("id"));
+                            //获取未结算金额
+                            BigDecimal unsettledamt = entryentity.getBigDecimal("nckd_unsettleamount_et");
+                            unsettledamt = unsettledamt.subtract(settledamt);
+                            //反写分录已结算金额,未结算金额
+                            entryentity.set("nckd_settleamount_et",settledamt);
+                            entryentity.set("nckd_unsettleamount_et",unsettledamt);
+                        }
+                        if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) {
+                            yfjkInfo.set("nckd_settlestatus", SettlementStatusEnum.已结算.getValue());
+                            yfjkInfo.set("nckd_settleamount_et", totalSettledamt);
+                            yfjkInfo.set("nckd_unsettleamount_et", totalUnsettledamt);
+                        } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) {
+                            yfjkInfo.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
+                            yfjkInfo.set("nckd_settleamount_et", totalSettledamt);
+                            yfjkInfo.set("nckd_unsettleamount_et", totalUnsettledamt);
+                        } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) {
+                            yfjkInfo.set("nckd_settlestatus", SettlementStatusEnum.部分结算.getValue());
+                            yfjkInfo.set("nckd_settleamount_et", totalSettledamt);
+                            yfjkInfo.set("nckd_unsettleamount_et", totalUnsettledamt);
+                        }
+                        SaveServiceHelper.save(new DynamicObject[]{yfjkInfo});
+                    }
+                }
+            }//应付方向的回写
+            else if (bxDynamicObjects.length > 0) {
+                //循环数组获取结算状态,已结算金额,未结算金额
+                for (int c=0;c<bxDynamicObjects.length;c++) {
+                    //应收挂帐单头数据包
+                    DynamicObject bxInfo = BusinessDataServiceHelper.loadSingle(bxDynamicObjects[i].getPkValue(), bxDynamicObjects[i].getDynamicObjectType().getName());
+                    String reimbursetype = bxInfo.getString("reimbursetype");
+                    //获取合同台账单id
+                    Long contractbillId = bxInfo.getLong("sourcebillid");
+                    //已结算金额
+                    BigDecimal totalSettledamt = BigDecimal.ZERO;
+                    //未结算金额
+                    BigDecimal totalUnsettledamt = BigDecimal.ZERO;
+                    //循环报销单收款信息分录
+                    for (DynamicObject entryentity : bxInfo.getDynamicObjectCollection("accountentry")) {
+                        //获取分录收款金额
+                        BigDecimal settledamt = amountMap.get(entryentity.getString("id"));
+                        //获取未结算金额
+                        BigDecimal unsettledamt = entryentity.getBigDecimal("nckd_unsettleamount_et");
+                        unsettledamt = unsettledamt.subtract(settledamt);
+                        //反写分录已结算金额,未结算金额
+                        entryentity.set("nckd_settleamount_et",settledamt);
+                        entryentity.set("nckd_unsettleamount_et",unsettledamt);
+                        totalSettledamt = totalSettledamt.add(settledamt);
+                        totalUnsettledamt = totalUnsettledamt.add(unsettledamt);
+                    }
+                    if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) {
+                        bxInfo.set("nckd_settlestatus", SettlementStatusEnum.已结算.getValue());
+                        bxInfo.set("nckd_settleamount", totalSettledamt);
+                        bxInfo.set("nckd_unsettleamount", totalUnsettledamt);
+                    } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) {
+                        bxInfo.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
+                        bxInfo.set("nckd_settleamount", totalSettledamt);
+                        bxInfo.set("nckd_unsettleamount", totalUnsettledamt);
+                    } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) {
+                        bxInfo.set("nckd_settlestatus", SettlementStatusEnum.部分结算.getValue());
+                        bxInfo.set("nckd_settleamount", totalSettledamt);
+                        bxInfo.set("nckd_unsettleamount", totalUnsettledamt);
+                    }
+                    SaveServiceHelper.save(new DynamicObject[]{bxInfo});
+                    //报账类型等于工程报账回写合同台账单
+                    if (StringUtil.equals("engineering",reimbursetype)) {
+                        //查询合同台账单
+                        QFilter htFilter = new QFilter("id", QCP.equals,contractbillId);
+                        DynamicObject[] htDynamicObjects = BusinessDataServiceHelper.load(er_contractbill,"id",new QFilter[] {htFilter});
+                        for (int j=0;j<htDynamicObjects.length;j++) {
+                            //合同台账单头数据包
+                            DynamicObject htInfo = BusinessDataServiceHelper.loadSingle(htDynamicObjects[i].getPkValue(), htDynamicObjects[i].getDynamicObjectType().getName());
+                            htInfo.set("oripayedamount",totalSettledamt);
+                            htInfo.set("orinotpayamount",totalUnsettledamt);
+                            if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) {
+                                htInfo.set("nckd_settlestatus", SettlementStatusEnum.已结算.getValue());
+                                htInfo.set("nckd_settleamount", totalSettledamt);
+                                htInfo.set("nckd_unsettleamount", totalUnsettledamt);
+                            } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) {
+                                htInfo.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
+                                htInfo.set("nckd_settleamount", totalSettledamt);
+                                htInfo.set("nckd_unsettleamount", totalUnsettledamt);
+                            } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) {
+                                htInfo.set("nckd_settlestatus", SettlementStatusEnum.部分结算.getValue());
+                                htInfo.set("nckd_settleamount", totalSettledamt);
+                                htInfo.set("nckd_unsettleamount", totalUnsettledamt);
+                            }
+                            SaveServiceHelper.save(new DynamicObject[]{htInfo});
+                        }
+                    }
+                }
+
+            }
+
+        }
+    }
+}

+ 60 - 0
src/main/java/fi/er/opplugin/FinapbillBeforeF7SelectSample.java

@@ -0,0 +1,60 @@
+package fi.er.opplugin;
+
+import com.alibaba.druid.util.StringUtils;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.datamodel.events.ChangeData;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.field.RefBillEdit;
+import kd.bos.form.field.events.BeforeF7SelectEvent;
+import kd.bos.form.field.events.BeforeF7SelectListener;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.list.ListShowParameter;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+
+import java.util.EventObject;
+
+public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements BeforeF7SelectListener {
+    private static String nckd_apfinapbill = "nckd_apfinapbill"; //应付挂账单字段
+    @Override
+    public void registerListener(EventObject e) {
+        //监听单据字段
+        super.registerListener(e);
+        RefBillEdit bill = this.getView().getControl(nckd_apfinapbill);
+        bill.addBeforeF7SelectListener(this);
+    }
+    @Override
+    public void beforeF7Select(BeforeF7SelectEvent arg0) {
+        String fieldKey = arg0.getProperty().getName();
+        if (StringUtils.equals(fieldKey, nckd_apfinapbill)){
+            DynamicObject costcompany = (DynamicObject) this.getModel().getValue("costcompany");
+            Long costcompanyId = costcompany.getLong("id");
+            // 生成过滤条件对象QFilter
+            QFilter qFilter = new QFilter("org", QCP.equals, costcompanyId);
+            qFilter.and("nckd_selectflag", QCP.not_in, "1");
+            // 设置列表过滤条件
+            ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter();
+            showParameter.getListFilterParameter().setFilter(qFilter);
+        }
+    }
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        String fieldKey = e.getProperty().getName();
+        if (StringUtils.equals(fieldKey, nckd_apfinapbill)) {
+            ChangeData[] changeSet = e.getChangeSet();
+            ChangeData changeData = changeSet[0];
+            Object oldValue = changeData.getOldValue();//旧值
+            Object newValue = changeData.getNewValue();//旧值
+            if (oldValue != null && newValue != null) {
+                DynamicObject oldObject = (DynamicObject) oldValue;
+                Long oldId = oldObject.getLong("id");
+                DynamicObject newObject = (DynamicObject) newValue;
+                Long newId = newObject.getLong("id");
+                if (!oldId.equals(newId)) {
+                    this.getModel().setValue("nckd_oldvalueid" , oldId);
+                }
+            }
+        }
+    }
+}

+ 35 - 0
src/main/java/fi/er/opplugin/PrePayBillOpPlugin.java

@@ -0,0 +1,35 @@
+package fi.er.opplugin;
+
+import fi.cas.common.SettlementStatusEnum;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+
+import java.math.BigDecimal;
+
+//预付借款单
+public class PrePayBillOpPlugin extends AbstractOperationServicePlugIn {
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        //获取预付借款单据信息
+        DynamicObject[] dynamicObjects = e.getDataEntities();
+        for (int i = 0; i < dynamicObjects.length; i++) {
+            //当前单头数据包
+            DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+            BigDecimal totalUnsettleamount = BigDecimal.ZERO;
+            //循环预付借款信息分录
+            for (DynamicObject entryentity : info.getDynamicObjectCollection("expenseentryentity")) {
+                //取当前循环预付借款信息分录的核定金额
+                BigDecimal expeapproveamount = entryentity.getBigDecimal("expeapproveamount");
+                //未结算金额=核定金额
+                entryentity.set("nckd_unsettleamount_et",expeapproveamount);
+                totalUnsettleamount = totalUnsettleamount.add(expeapproveamount);
+            }
+            info.set("nckd_unsettleamount",totalUnsettleamount);
+            info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
+            SaveServiceHelper.save(new DynamicObject[]{info});
+        }
+    }
+}

+ 76 - 0
src/main/java/fi/er/opplugin/PublicreimburOpPlugin.java

@@ -0,0 +1,76 @@
+package fi.er.opplugin;
+
+import com.alibaba.druid.util.StringUtils;
+import fi.cas.common.SettlementStatusEnum;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+//报销单
+public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
+    private static String ap_finapbill = "ap_finapbill"; //应付挂账单字段
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+        //获取报销单据信息
+        DynamicObject[] dynamicObjects = e.getDataEntities();
+        for (int i = 0; i < dynamicObjects.length; i++) {
+            if (StringUtils.equals(e.getOperationKey(),"audit")) {
+                //当前单头数据包
+                DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
+                BigDecimal totalUnsettleamount = BigDecimal.ZERO;
+                //循环收款信息分录
+                for (DynamicObject entryentity : info.getDynamicObjectCollection("accountentry")) {
+                    //取当前分录的收款金额
+                    BigDecimal orireceiveamount = entryentity.getBigDecimal("orireceiveamount");
+                    //未结算金额=收款金额
+                    entryentity.set("nckd_unsettleamount_et",orireceiveamount);
+                    totalUnsettleamount = totalUnsettleamount.add(orireceiveamount);
+                }
+                info.set("nckd_unsettleamount",totalUnsettleamount);
+                info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
+                SaveServiceHelper.save(new DynamicObject[]{info});
+            } else if (StringUtils.equals(e.getOperationKey(),"save")) {
+                List<DynamicObject> dynamicObjectList = new ArrayList<>();
+                DynamicObject info = dynamicObjects[i];
+                DynamicObject nckd_apfinapbill = info.getDynamicObject("nckd_apfinapbill");
+                //原应付挂帐单释放
+                Long oldId =  info.getLong("nckd_oldvalueid");
+                if (oldId != 0) {
+                    //释放原应付挂账单
+                    QFilter oldFilter = new QFilter("id", QCP.equals,oldId);
+                    DynamicObject[] oldDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {oldFilter});
+                    DynamicObject oldInfo = BusinessDataServiceHelper.loadSingle(oldDynamicObjects[0].getPkValue(), oldDynamicObjects[0].getDynamicObjectType().getName());
+                    oldInfo.set("nckd_selectflag","");
+                    dynamicObjectList.add(oldInfo);
+                    //所选应付挂帐单更新标识
+                    Long newId =  nckd_apfinapbill.getLong("id");
+                    QFilter gzFilter = new QFilter("id", QCP.equals,newId);
+                    DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {gzFilter});
+                    DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[0].getPkValue(), gzDynamicObjects[0].getDynamicObjectType().getName());
+                    gzInfo.set("nckd_selectflag","1");
+                    dynamicObjectList.add(gzInfo);
+                    DynamicObject[] dynamicObjectArray = dynamicObjectList.toArray(new DynamicObject[dynamicObjectList.size()]);
+                    SaveServiceHelper.save(dynamicObjectArray);
+                }else {
+                    //所选应付挂帐单更新标识
+                    Long newId =  nckd_apfinapbill.getLong("id");
+                    QFilter gzFilter = new QFilter("id", QCP.equals,newId);
+                    DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {gzFilter});
+                    DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[0].getPkValue(), gzDynamicObjects[0].getDynamicObjectType().getName());
+                    gzInfo.set("nckd_selectflag","1");
+                    dynamicObjectList.add(gzInfo);
+                    DynamicObject[] dynamicObjectArray = dynamicObjectList.toArray(new DynamicObject[dynamicObjectList.size()]);
+                    SaveServiceHelper.save(dynamicObjectArray);
+                }
+            }
+        }
+    }
+}