zhouger 7 місяців тому
батько
коміт
49f4086f13
1 змінених файлів з 232 додано та 53 видалено
  1. 232 53
      src/main/java/fi/em/formPlugin/SubAndAudFormPlugin.java

+ 232 - 53
src/main/java/fi/em/formPlugin/SubAndAudFormPlugin.java

@@ -9,9 +9,7 @@ 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;
+import java.util.*;
 
 /**
  * @author cjz
@@ -35,9 +33,10 @@ public class SubAndAudFormPlugin extends AbstractListPlugin implements Plugin {
         }
     }
 
-    //保存前计算汇总分录
-    public void beforeDoOperation(BeforeDoOperationEventArgs arg) {
 
+    //根据输入的list名,返回对应list
+    public List<String> entryList(String nckdentry)
+    {
         //薪酬明细(一般员工)分录字段标识,金额字段
         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"
@@ -47,7 +46,119 @@ public class SubAndAudFormPlugin extends AbstractListPlugin implements Plugin {
                 ,"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");
+        //薪酬明细(一般员工)汇总分录字段标识
+        List<String> nckd_allemployees=Arrays.asList("nckd_all_allbsry","nckd_all_basicsry","nckd_all_acmsry","nckd_all_reacmsry"
+                ,"nckd_all_bsnrwd","nckd_all_otreward","nckd_all_cmcsbd","nckd_all_otherpysry","nckd_all_clearrwd","nckd_all_awareward"
+                ,"nckd_all_odevreward","nckd_all_coldsbad","nckd_all_warmsbad","nckd_all_nursabd","nckd_all_oallowance","nckd_all_salarypaya"
+                ,"nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_bhopins","nckd_all_per_ljins","nckd_all_per_hosins","nckd_all_per_cmymey"
+                ,"nckd_all_unionmey","nckd_all_tax","nckd_all_otherreduce","nckd_all_desalary","nckd_all_netsalary","nckd_all_cpy_endins"
+                ,"nckd_all_cpy_hopins","nckd_all_cpy_bhopins","nckd_all_cpy_ljins","nckd_all_cpy_birthins","nckd_all_cpy_dmgins","nckd_all_cpy_hosins"
+                ,"nckd_all_cpy_cmymey");
+
+
+        //薪酬明细(内退)分录字段标识,金额字段
+        List<String> nckd_earlyretired=Arrays.asList("nckd_ee_allbasicsry","nckd_ee_allowance","nckd_ee_otherallowance","nckd_ee_per_endins"
+                ,"nckd_ee_per_ljins","nckd_ee_per_hopins","nckd_ee_per_bhopins","nckd_ee_per_hosins","nckd_ee_per_cmymey","nckd_ee_unionmey"
+                ,"nckd_ee_tax","nckd_ee_desalary","nckd_ee_netsalary","nckd_ee_otherreduce","nckd_ee_cpy_endins","nckd_ee_cpy_bhopins"
+                ,"nckd_ee_cpy_ljins","nckd_ee_cpy_birthins","nckd_ee_cpy_dmgins","nckd_ee_cpy_cmymey","nckd_ee_cpy_hosins","nckd_ee_taxt"
+                ,"nckd_ee_alltaxt","nckd_ee_charge","nckd_ee_finallsys");
+        //薪酬明细(内退)汇总分录字段标识
+        List<String> nckd_allearlytired=Arrays.asList("nckd_all_allbasicsry","nckd_all_allowqance","nckd_all_owance","nckd_all_reduceitem"
+                ,"nckd_all_sumsry","nckd_all_laryreduce","nckd_all_pushreduce","nckd_all_lrulereduce","nckd_all_badreduce","nckd_all_oreduce","nckd_all_reducesry"
+                ,"nckd_all_salarypaya","nckd_all_nesalary","nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_bhopins","nckd_all_per_ljins"
+                ,"nckd_all_per_hosins","nckd_all_per_cmymey","nckd_all_sumins","nckd_all_workamount","nckd_all_tax","nckd_all_alltaxt"
+                ,"nckd_all_charge","nckd_all_netsalary");
+
+
+        //薪酬明细(退休)分录字段标识,金额字段
+        List<String> nckd_retired=Arrays.asList("nckd_re_livallowance","nckd_re_otherallowance","nckd_re_reward"
+                ,"nckd_re_salarypayable","nckd_re_desalary","nckd_re_netsalary");
+        //薪酬明细(退休)汇总分录字段标识
+        List<String> nckd_allretired=Arrays.asList("nckd_all_livallowance","nckd_all_otherwance","nckd_all_reward","nckd_all_salarypaya"
+                ,"nckd_all_desalary","nckd_all_netsalary");
+
+
+        //人力薪酬分录标识金额字段,金额字段
+        List<String> nckd_pay=Arrays.asList("nckd_sae_levelsry","nckd_sae_dutiessry","nckd_sae_updutiessry","nckd_sae_workyearsry"
+                ,"nckd_sae_depyear","nckd_sae_eduasry","nckd_sae_transry","nckd_sae_jobsry","nckd_sae_basicsry","nckd_sae_allbasicsry","nckd_sae_acmsry"
+                ,"nckd_sae_mountsry","nckd_sae_reacmsry","nckd_sae_balyearsry","nckd_sae_blastyearsry","nckd_sae_allsry","nckd_sae_bsnrwd","nckd_sae_cpmrwd"
+                ,"nckd_sae_psrwd","nckd_sae_comrwd","nckd_sae_cardrwd","nckd_sae_intwrd","nckd_sae_clearrwd","nckd_sae_allrwd","nckd_sae_retainsry"
+                ,"nckd_sae_reward","nckd_sae_otreward","nckd_sae_cmcsbd","nckd_sae_trfsbd","nckd_sae_housesbd","nckd_sae_warmsbd","nckd_sae_edusbd"
+                ,"nckd_sae_trafficsbd","nckd_sae_othersbd","nckd_sae_reduce","nckd_sae_othersry","nckd_sae_sickreduce","nckd_sae_sickhopreduce"
+                ,"nckd_sae_eventreduce","nckd_sae_afwreduce","nckd_sae_latereduce","nckd_sae_cwasry","nckd_sae_cwareduce","nckd_sae_dgreduce"
+                ,"nckd_sae_dcpreduce","nckd_sae_badreduce","nckd_sae_otherreduce","nckd_sae_allreduce","nckd_sae_lastsry","nckd_sae_allpay"
+                ,"nckd_sae_per_endins","nckd_sae_per_ljins","nckd_sae_per_hopins","nckd_sae_per_bhopins","nckd_sae_per_hosins","nckd_sae_per_cmymey"
+                ,"nckd_sae_per_ins","nckd_sae_unionmey","nckd_sae_tax","nckd_sae_allamount","nckd_sae_cash","nckd_sae_wages","nckd_sae_cpy_endins"
+                ,"nckd_sae_cpy_hopins","nckd_sae_cpy_bhopins","nckd_sae_cpy_birthins","nckd_sae_cpy_ljins","nckd_sae_cpy_dmgins","nckd_sae_cpy_hosins"
+                ,"nckd_sae_cpy_cmymey");
+        //人力薪酬汇总分录字段标识
+        List<String> nckd_allpay=Arrays.asList("nckd_all_levelsry","nckd_all_dutiessry","nckd_all_updutiessry","nckd_all_workyearsry"
+                ,"nckd_all_depyear","nckd_all_eduasry","nckd_all_transry","nckd_all_jobsry","nckd_all_rebasicsry","nckd_all_allbacsry"
+                ,"nckd_all_allcmsry","nckd_all_mountsry","nckd_all_reacmamount","nckd_all_balyearsry","nckd_all_blastyearsry","nckd_all_allsry"
+                ,"nckd_all_bsnreda","nckd_all_cpmrwd","nckd_all_psrwd","nckd_all_comrwd","nckd_all_cardrwd","nckd_all_intwrd","nckd_all_clearwd"
+                ,"nckd_all_allrwd","nckd_all_retainsry","nckd_all_owance","nckd_all_otrewardam","nckd_all_rlcmcsbd","nckd_all_trfsbd"
+                ,"nckd_all_housesbd","nckd_all_warmsbd","nckd_all_edusbd","nckd_all_trafficsbd","nckd_all_othersbd","nckd_all_reduce"
+                ,"nckd_all_othersry","nckd_all_sickreduce","nckd_all_sickhopreduce","nckd_all_eventreduce","nckd_all_afwreduce","nckd_all_latereduce"
+                ,"nckd_all_cwasry","nckd_all_cwareduce","nckd_all_dgreduce","nckd_all_dcpreduce","nckd_all_badredu","nckd_all_othereduce"
+                ,"nckd_all_allreduce","nckd_all_salarypaya","nckd_all_nesalary","nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_bhopins"
+                ,"nckd_all_per_ljins","nckd_all_per_hosins","nckd_all_per_cmymey","nckd_all_sumins","nckd_all_workamount","nckd_all_tax"
+                ,"nckd_all_alltaxt","nckd_all_charge","nckd_all_netsalary","nckd_all_cpy_endins","nckd_all_cpy_hopins","nckd_all_cpy_bhopins"
+                ,"nckd_all_cpy_birthins","nckd_all_cpy_ljins","nckd_all_cpy_dmgins","nckd_all_cpy_hosins","nckd_all_cpy_cmymey");
+
 
+        //人力薪酬内退分录标识,金额字段
+        List<String> nckd_payretird=Arrays.asList("nckd_see_allbasicsry"
+                ,"nckd_see_allowance","nckd_see_otherallowanc","nckd_see_per_endins","nckd_see_per_ljins","nckd_see_per_hopins"
+                ,"nckd_see_per_bhopins","nckd_see_per_hosins","nckd_see_per_cmymey","nckd_see_unionmey","nckd_see_tax"
+                ,"nckd_see_desalary","nckd_see_netsalary","nckd_see_otherreduce","nckd_see_cpy_endins","nckd_see_cpy_bhopins"
+                ,"nckd_see_cpy_ljins","nckd_see_cpy_birthins","nckd_see_cpy_dmgins","nckd_see_cpy_cmymey","nckd_see_cpy_hosins"
+                ,"nckd_see_taxt","nckd_see_alltaxt","nckd_see_charge","nckd_see_finallsys","nckd_see_cpy_oldins","nckd_see_cpy_hop"
+                ,"nckd_see_cpy_bhop","nckd_see_cpy_bir","nckd_see_cpy_ljob","nckd_see_cpy_dwork","nckd_see_cpy_hos","nckd_see_cpy_cmy");
+
+        //人力薪酬内退分录汇总字段
+        List<String> nckd_allpayretird=Arrays.asList("nckd_all_allbasicsry","nckd_all_allowqance","nckd_all_owance","nckd_all_reduceitem"
+                ,"nckd_all_sumsry","nckd_all_laryreduce","nckd_all_pushreduce","nckd_all_lrulereduce","nckd_all_badreduce","nckd_all_oreduce"
+                ,"nckd_all_reducesry","nckd_all_salarypaya","nckd_all_nesalary","nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_ljins"
+                ,"nckd_all_per_bhopins","nckd_all_per_hosins","nckd_all_per_cmymey","nckd_all_sumins","nckd_all_workamount","nckd_all_tax"
+                ,"nckd_all_alltaxt","nckd_all_charge","nckd_all_netsalary","nckd_all_cpy_endins","nckd_all_cpy_hopins","nckd_all_cpy_bhopins"
+                ,"nckd_all_cpy_birthins","nckd_all_cpy_ljins","nckd_all_cpy_dmgins","nckd_all_cpy_hosins","nckd_all_cpy_cmymey");
+
+        Map<String,List<String>> mapList=new HashMap<>();
+        mapList.put("nckd_generalemployees",nckd_generalemployees);
+        mapList.put("nckd_allemployees",nckd_allemployees);
+        mapList.put("nckd_earlyretired",nckd_earlyretired);
+        mapList.put("nckd_retired",nckd_retired);
+        mapList.put("nckd_pay",nckd_pay);
+        mapList.put("nckd_payretird",nckd_payretird);
+        mapList.put("nckd_allearlytired",nckd_allearlytired);
+        mapList.put("nckd_allretired",nckd_allretired);
+        mapList.put("nckd_allpay",nckd_allpay);
+        mapList.put("nckd_allpayretird",nckd_allpayretird);
+
+
+        //list名
+        List<String> list=new ArrayList<>();
+        list.add("nckd_generalemployees");
+        list.add("nckd_allemployees");
+        list.add("nckd_earlyretired");
+        list.add("nckd_retired");
+        list.add("nckd_pay");
+        list.add("nckd_payretird");
+        list.add("nckd_allearlytired");
+        list.add("nckd_allretired");
+        list.add("nckd_allpay");
+        list.add("nckd_allpayretird");
+        for (String item:list) {
+            if (nckdentry.equals(item))
+            {
+                return mapList.get(nckdentry);
+            }
+        }
+        return null;
+    }
+
+    //保存前计算汇总分录
+    public void beforeDoOperation(BeforeDoOperationEventArgs arg) {
         super.beforeDoOperation(arg);
         FormOperate source = (FormOperate) arg.getSource();
         //获取当前操作单据
@@ -57,62 +168,130 @@ public class SubAndAudFormPlugin extends AbstractListPlugin implements Plugin {
 
         //计算汇总分录
         if ("countall".equals(source.getOperateKey())){
-            //分录类型为一般员工
+            //先清空汇总分录分录
+            this.getModel().deleteEntryData("nckd_allentry");
+            //分录类型为通用薪酬一般员工
             if ("A".equals(nckd_entrytype)) {
+                //字段标识
+                String entrylist="nckd_generalemployees";
+                //对应分录标识
+                String propername="nckd_staffentry";
+                //对应部门标识
+                String dep="nckd_se_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_allemployees";
+                countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
+            }
+            //分录类型为通用薪酬内退
+            if ("B".equals(nckd_entrytype)) {
+                //字段标识
+                String entrylist="nckd_earlyretired";
+                //对应分录标识
+                String propername="nckd_earlyretiredentry";
+                //对应部门标识
+                String dep="nckd_ee_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_allearlytired";
+                countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
+            }
+            if ("C".equals(nckd_entrytype)) {
+                //字段标识
+                String entrylist="nckd_retired";
+                //对应分录标识
+                String propername="nckd_retireentry";
+                //对应部门标识
+                String dep="nckd_re_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_allretired";
+                countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
+            }
+            if ("D".equals(nckd_entrytype)) {
+                //字段标识
+                String entrylist="nckd_pay";
+                //对应分录标识
+                String propername="nckd_salaryentry";
+                //对应部门标识
+                String dep="nckd_sae_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_allpay";
+                countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
+            }
+            if ("E".equals(nckd_entrytype)) {
+                //字段标识
+                String entrylist="nckd_payretird";
+                //对应分录标识
+                String propername="nckd_salaryentryre";
+                //对应部门标识
+                String dep="nckd_see_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_allpayretird";
+                countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
+            }
+        }
 
-                //获取一般员工分录
-                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"));
-                    }
+    /**
+     * @dynamicObject 当前单据信息
+     * @entrylist 字段标识列表
+     * @propername 分录标识
+     * @dep 对应分录部门标识
+     * @allentrtlist 写入的汇总分录字段
+     * @description:根据分录类型不同计算汇总分录
+     */
+    public void countEntry(DynamicObject dynamicObject,String entrylist,String propername,String dep,String allentrtlist)
+    {
+        //字段标识
+        List<String> nckd_generalemployees = entryList(entrylist);
+        //获取一般员工分录
+        DynamicObjectCollection staffentry=dynamicObject.getDynamicObjectCollection(propername);
+        //分录部门list
+        List<DynamicObject> depList=new ArrayList<>();
+        //初始化值为第一行部门
+        depList.add(staffentry.get(0).getDynamicObject(dep));
+        for (DynamicObject item:staffentry) {
+            //将不同的值加入到部门的list中
+            if (!depList.contains(item.getDynamicObject(dep))) {
+                depList.add(item.getDynamicObject(dep));
+            }
+        }
 
-                    //计算一个部门汇总
-                    for (int i=0;i<staffentry.size();i++)
+        //几个不同部门则循环几次
+        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(dep);
+                //相同部门则累加金额数据
+                if (department.equals(bumen)) {
+                    for (int a=0;a<nckd_generalemployees.size();a++)
                     {
-                        //获取所在部门
-                        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);
-
-                        }
+                        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);
                     }
-                    //汇总数据获取
-                    alldata.add(sumNum);
                 }
-
             }
-
+            //创建新的分录行
+            int rowIndex = this.getModel().createNewEntryRow(nckd_allentry);
+            //设置部门
+            this.getModel().setValue("nckd_all_department",depList.get(j),rowIndex);
+            for (int c=0;c<sumNum.size();c++) {
+                this.getModel().setValue(entryList(allentrtlist).get(c),sumNum.get(c),rowIndex);
+            }
         }
 
     }