Forráskód Böngészése

薪酬计提分录汇总数据计算

zhouger 7 hónapja
szülő
commit
0c5abe3b8b

+ 0 - 2
src/main/java/fi/em/formPlugin/SalaryFileUploadEditPlugin.java

@@ -317,7 +317,6 @@ public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements Up
                 }
             }
         }
-
         //薪酬明细(退休)分录
         if(nckd_entry.equals("nckd_retireentry")) {
             this.getModel().deleteEntryData("nckd_retireentry");
@@ -447,7 +446,6 @@ public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements Up
             }
 
         }
-
         //人力薪酬内退分录
         if (nckd_entry.equals("nckd_salaryentryre")){
             this.getModel().deleteEntryData("nckd_salaryentryre");

+ 99 - 1
src/main/java/fi/em/formPlugin/SubAndAudFormPlugin.java

@@ -1,21 +1,119 @@
 package fi.em.formPlugin;
 
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.events.BeforeDoOperationEventArgs;
+import kd.bos.form.operate.FormOperate;
 import kd.bos.list.plugin.AbstractListPlugin;
 import kd.sdk.plugin.Plugin;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * @author cjz
  * @date 2024/9/12 11:12
- * @description:薪酬计提提交后自动审核
+ * @description:薪酬计提提交后自动审核,保存前计算汇总分离
  */
 public class SubAndAudFormPlugin extends AbstractListPlugin implements Plugin {
+
+    private static String nckd_staffentry="nckd_staffentry";//通用薪酬一般员工
+    private static String nckd_earlyretiredentry="nckd_earlyretiredentry";//通用薪酬内退
+    private static String nckd_retireentry="nckd_retireentry";//通用薪酬退休
+    private static String nckd_salaryentry="nckd_salaryentry";//人力薪酬
+    private static String nckd_salaryentryre="nckd_salaryentryre";//人力薪酬内退
+    private static String nckd_allentry="nckd_allentry";//汇总分录
+
     public void afterDoOperation(AfterDoOperationEventArgs arg){
         //提交并审核
         if ("submit".equals(arg.getOperateKey())) {
             //调用审核
             this.getView().invokeOperation("audit");
         }
+    }
+
+    //保存前计算汇总分录
+    public void beforeDoOperation(BeforeDoOperationEventArgs arg) {
+
+        //薪酬明细(一般员工)分录字段标识,金额字段
+        List<String> nckd_generalemployees = Arrays.asList("nckd_se_allbasicsry"
+                ,"nckd_se_basicsry","nckd_se_acmsry","nckd_se_reacmsry","nckd_se_bsnrwd","nckd_se_otreward","nckd_se_cmcsbd"
+                ,"nckd_se_otherpysry","nckd_se_clearrwd","nckd_se_awareward","nckd_se_otherdevreward","nckd_se_coldsbad"
+                ,"nckd_se_warmsbad","nckd_se_nursabd","nckd_se_otherallowance","nckd_se_salarypayable","nckd_se_per_endins"
+                ,"nckd_se_per_hopins","nckd_se_per_bhopins","nckd_se_per_ljins","nckd_se_per_hosins","nckd_se_per_cmymey"
+                ,"nckd_se_unionmey","nckd_se_tax","nckd_se_otherreduce","nckd_se_desalary","nckd_se_netsalary","nckd_se_cpy_endins"
+                ,"nckd_se_cpy_hopins","nckd_se_cpy_bhopins","nckd_se_cpy_ljins","nckd_se_cpy_birthins","nckd_se_cpy_dmgins","nckd_se_cpy_hosins"
+                ,"nckd_se_cpy_cmymey");
+
+        super.beforeDoOperation(arg);
+        FormOperate source = (FormOperate) arg.getSource();
+        //获取当前操作单据
+        DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+        //当前单据分录类型
+        String nckd_entrytype=dynamicObject.getString("nckd_entrytype");
+
+        //计算汇总分录
+        if ("countall".equals(source.getOperateKey())){
+            //分录类型为一般员工
+            if ("A".equals(nckd_entrytype)) {
+
+                //获取一般员工分录
+                DynamicObjectCollection staffentry=dynamicObject.getDynamicObjectCollection("nckd_staffentry");
+                //分录部门list
+                List<DynamicObject> depList=new ArrayList<>();
+                //初始化值为第一行部门
+                depList.add(staffentry.get(0).getDynamicObject("nckd_se_department"));
+                for (DynamicObject item:staffentry) {
+                    //将不同的值加入到部门的list中
+                    if (!depList.contains(item.getDynamicObject("nckd_se_department"))) {
+                        depList.add(item.getDynamicObject("nckd_se_department"));
+                    }
+                }
+
+                //总的汇总数据
+                List<List<BigDecimal>> alldata=new ArrayList<>();
+                //几个不同部门则循环几次
+                for (int j=0;j<depList.size();j++)
+                {
+                    DynamicObject bumen=depList.get(j);
+                    //某部门总数据
+                    List<BigDecimal> sumNum=new ArrayList<>();
+                    //汇总表部门list初始化
+                    for (int b=0;b<nckd_generalemployees.size();b++) {
+                        sumNum.add(new BigDecimal("0.0"));
+                    }
+
+                    //计算一个部门汇总
+                    for (int i=0;i<staffentry.size();i++)
+                    {
+                        //获取所在部门
+                        DynamicObject department=staffentry.get(i).getDynamicObject("nckd_se_department");
+                        //相同部门则累加金额数据
+                        if (department.equals(bumen)) {
+                            for (int a=0;a<nckd_generalemployees.size();a++)
+                            {
+                                BigDecimal cell=sumNum.get(a);
+                                //字段标识
+                                String entry=nckd_generalemployees.get(a);
+                                //i行的a列数据
+                                BigDecimal num=staffentry.get(i).getBigDecimal(entry);
+                                cell=cell.add(num);
+                                sumNum.set(a,cell);
+                            }
+                            System.out.println(sumNum);
+
+                        }
+                    }
+                    //汇总数据获取
+                    alldata.add(sumNum);
+                }
+
+            }
+
+        }
 
     }