瀏覽代碼

薪酬改

zhouger 5 月之前
父節點
當前提交
2e73726ddd

+ 1 - 1
src/main/java/fi/em/formPlugin/SalaryDownloadFilePlugin.java

@@ -21,7 +21,7 @@ import java.util.Map;
 /**
 /**
  * @author cjz
  * @author cjz
  * @date 2024/11/7 20:35
  * @date 2024/11/7 20:35
- * @description:点击按钮下载对应薪酬计提分录模板文件
+ * @description:点击按钮下载对应薪酬发放分录模板文件
  */
  */
 public class SalaryDownloadFilePlugin extends AbstractFormPlugin {
 public class SalaryDownloadFilePlugin extends AbstractFormPlugin {
 
 

+ 62 - 0
src/main/java/fi/em/formPlugin/SalaryDownloadFilePluginCp.java

@@ -0,0 +1,62 @@
+package fi.em.formPlugin;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.property.ComboProp;
+import kd.bos.form.events.AfterDoOperationEventArgs;
+import kd.bos.form.plugin.AbstractFormPlugin;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.AttachmentServiceHelper;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.imc.bdm.common.constant.BotpCallBackLogConstant;
+import org.apache.commons.io.FileUtils;
+import sys.sc.opplugin.utils.InterFaceImgUtils;
+import sys.sc.opplugin.utils.SftpClient;
+
+import javax.swing.filechooser.FileSystemView;
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cjz
+ * @date 2024/11/7 20:35
+ * @description:点击按钮下载对应薪酬计提分录模板文件
+ */
+public class SalaryDownloadFilePluginCp extends AbstractFormPlugin {
+
+
+
+    //点击按钮下载文件
+    @Override
+    public void afterDoOperation(AfterDoOperationEventArgs arg){
+        super.afterDoOperation(arg);
+        String operateKey = arg.getOperateKey();
+        //获取下拉列表字段
+        ComboProp comboProp = (ComboProp) getModel().getProperty("nckd_entrytype");
+        //审核操作代码
+        String downloadBut="download";
+        DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+        String nckd_entrytype= dynamicObject.getString("nckd_entrytype");
+        //通过下拉值获取下拉标题
+        String displayName = comboProp.getItemByName(nckd_entrytype);
+        if (downloadBut.equals(operateKey)) {
+            QFilter qFilter=new QFilter("number", QCP.equals,"salaryfile");
+            //下载模板表单
+            DynamicObject nckd_file= BusinessDataServiceHelper.loadSingle("nckd_file",new QFilter[]{qFilter});
+            List<Map<String, Object>> list = AttachmentServiceHelper
+                    .getAttachments("nckd_file", nckd_file.getPkValue(), "nckd_attachmentpanelap");
+            //获取下载链接并打开
+            for(int i = 0; i < list.size(); i++) {
+                String filename=list.get(i).get("name").toString();
+                if (filename.equals(displayName+".xls")) {
+                    String downLoadUrl = list.get(i).get("url").toString();
+                    //调用该url
+                    getView().openUrl(downLoadUrl);
+                }
+            }
+        }
+    }
+
+
+}

+ 7 - 7
src/main/java/fi/em/formPlugin/SalaryFileUploadEditPlugin.java

@@ -21,7 +21,7 @@ import java.util.*;
 /**
 /**
  * @author cjz
  * @author cjz
  * @date 2024/8/20 16:18
  * @date 2024/8/20 16:18
- * @description:薪酬计提单上传附件,并将附件中的数据写入分录
+ * @description:薪酬发放单上传附件,并将附件中的数据写入分录
  */
  */
 public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements UploadListener {
 public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements UploadListener {
     private static String bos_org = "bos_org"; //业务单元组织标识
     private static String bos_org = "bos_org"; //业务单元组织标识
@@ -59,10 +59,10 @@ public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements Up
         //根据分录类型获取对应分录标识
         //根据分录类型获取对应分录标识
         if ("A".equals(nckd_entrytype)) {
         if ("A".equals(nckd_entrytype)) {
             billtype="nckd_staffentry";
             billtype="nckd_staffentry";
-            readExcelByRowOrCell(4,44,inputStream,billtype);
+            readExcelByRowOrCell(4,45,inputStream,billtype);
         }else if ("B".equals(nckd_entrytype)) {
         }else if ("B".equals(nckd_entrytype)) {
             billtype="nckd_earlyretiredentry";
             billtype="nckd_earlyretiredentry";
-            readExcelByRowOrCell(4,34,inputStream,billtype);
+            readExcelByRowOrCell(4,30,inputStream,billtype);
         } else if ("C".equals(nckd_entrytype)) {
         } else if ("C".equals(nckd_entrytype)) {
             billtype="nckd_retireentry";
             billtype="nckd_retireentry";
             readExcelByRowOrCell(4,15,inputStream,billtype);
             readExcelByRowOrCell(4,15,inputStream,billtype);
@@ -137,11 +137,11 @@ public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements Up
         List<String> nckd_generalemployees =Arrays.asList("nckd_se_institution","nckd_se_empname","nckd_se_empnumber"
         List<String> nckd_generalemployees =Arrays.asList("nckd_se_institution","nckd_se_empname","nckd_se_empnumber"
                 ,"nckd_se_idnumber","nckd_se_banknumber","nckd_se_unit","nckd_se_org","nckd_se_department","nckd_se_allbasicsry"
                 ,"nckd_se_idnumber","nckd_se_banknumber","nckd_se_unit","nckd_se_org","nckd_se_department","nckd_se_allbasicsry"
                 ,"nckd_se_basicsry","nckd_se_acmsry","nckd_se_reacmsry","nckd_se_bsnrwd","nckd_se_otreward","nckd_se_cmcsbd"
                 ,"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_otherpysry","nckd_se_latesry","nckd_se_latesrygrant","nckd_se_clearrwd","nckd_se_awareward","nckd_se_otherdevreward","nckd_se_coldsbad"
+                ,"nckd_se_warmsbad","nckd_se_nursabd","nckd_se_otherallowance","nckd_se_risksry","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_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_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_hopins","nckd_se_cpy_bhopins","nckd_se_cpy_ljins","nckd_se_cpy_dmgins","nckd_se_cpy_hosins"
                 ,"nckd_se_cpy_cmymey");
                 ,"nckd_se_cpy_cmymey");
         //薪酬明细(内退)分录字段标识
         //薪酬明细(内退)分录字段标识
         List<String> nckd_earlyretired=Arrays.asList("nckd_ee_institution","nckd_ee_empname","nckd_ee_empnumber","nckd_ee_idnumber","nckd_ee_banknumber"
         List<String> nckd_earlyretired=Arrays.asList("nckd_ee_institution","nckd_ee_empname","nckd_ee_empnumber","nckd_ee_idnumber","nckd_ee_banknumber"
@@ -550,7 +550,7 @@ public class SalaryFileUploadEditPlugin extends AbstractBillPlugIn implements Up
         //薪酬明细(内退)
         //薪酬明细(内退)
         if (billtype.equals("nckd_earlyretiredentry")) {
         if (billtype.equals("nckd_earlyretiredentry")) {
             flag=headList.get(0).getCell(9).getStringCellValue();
             flag=headList.get(0).getCell(9).getStringCellValue();
-            if (!flag.equals("基本养老保险个人缴费")) {
+            if (!flag.equals("内退员工基本工资")) {
                 throw new KDBizException("上传的文件格式有误,请检查!");
                 throw new KDBizException("上传的文件格式有误,请检查!");
             }
             }
             for (int i=0;i<rowList.size();i++) {
             for (int i=0;i<rowList.size();i++) {

+ 664 - 0
src/main/java/fi/em/formPlugin/SalaryFileUploadEditPluginCp.java

@@ -0,0 +1,664 @@
+package fi.em.formPlugin;
+
+
+
+import kd.bos.bill.AbstractBillPlugIn;
+import kd.bos.cache.CacheFactory;
+import kd.bos.cache.TempFileCache;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.exception.KDBizException;
+import kd.bos.form.control.AttachmentPanel;
+import kd.bos.form.control.Toolbar;
+import kd.bos.form.control.events.UploadEvent;
+import kd.bos.form.control.events.UploadListener;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import org.apache.poi.ss.usermodel.*;
+import java.io.*;
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * @author cjz
+ * @date 2024/8/20 16:18
+ * @description:薪酬计提单上传附件,并将附件中的数据写入分录
+ */
+public class SalaryFileUploadEditPluginCp extends AbstractBillPlugIn implements UploadListener {
+    private static String bos_org = "bos_org"; //业务单元组织标识
+    private static String bos_adminorg="bos_adminorg";//行政组织标识
+
+    //给附件面板添加监听
+    @Override
+    public void registerListener(EventObject e) {
+
+        super.registerListener(e);
+        //按钮面板
+        Toolbar toolbar = this.getControl("tbmain");
+        toolbar.addUploadListener(this);
+        //附件面板
+        AttachmentPanel attachmentPanel = getControl("attachmentpanel");
+        attachmentPanel.addUploadListener(this);
+    }
+
+
+    @Override
+    public void afterUpload(UploadEvent evt) {
+        //获取当前操作单据
+        DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+        String nckd_entrytype=dynamicObject.getString("nckd_entrytype");
+        //解析附件面板
+        AttachmentPanel attachmentPanel=this.getControl("attachmentpanel");
+        List<Map<String,Object>> attachmentData=attachmentPanel.getAttachmentData();
+        //获取最新上传的文件路径
+        String fileurl = (String) attachmentData.get(attachmentData.size()-1).get("url");
+        //获取文件缓存
+        TempFileCache cache = CacheFactory.getCommonCacheFactory().getTempFileCache();
+        //从缓存中拿到输入流
+        InputStream inputStream = cache.getInputStream(fileurl);
+        String billtype="";
+        //根据分录类型获取对应分录标识
+        if ("A".equals(nckd_entrytype)) {
+            billtype="nckd_staffentry";
+            readExcelByRowOrCell(4,44,inputStream,billtype);
+        }else if ("B".equals(nckd_entrytype)) {
+            billtype="nckd_earlyretiredentry";
+            readExcelByRowOrCell(4,34,inputStream,billtype);
+        } else if ("C".equals(nckd_entrytype)) {
+            billtype="nckd_retireentry";
+            readExcelByRowOrCell(4,15,inputStream,billtype);
+        } else if ("D".equals(nckd_entrytype)) {
+            billtype="nckd_salaryentry";
+            readExcelByRowOrCell(4,78,inputStream,billtype);
+        } else if ("E".equals(nckd_entrytype)) {
+            billtype="nckd_salaryentryre";
+            readExcelByRowOrCell(4,41,inputStream,billtype);
+        } else if (null==nckd_entrytype) {
+            throw new KDBizException("请选择分录类型");
+        }
+    }
+
+
+    /**
+     * @line execel头行数
+     * @column excel列数
+     * @inputStream 文件流
+     * @nckd_entrytype 分录类型
+     * @description:读取上传的excel,并将数据写入对应分录中
+     */
+    public void readExcelByRowOrCell(int line,int column,InputStream inputStream,String billtype)
+    {
+        try {
+            Workbook wb = WorkbookFactory.create(inputStream);
+            Sheet filesheet=wb.getSheetAt(0);//默认取第一个工作表
+            //表中存的数据
+            List<Row> rowList=new ArrayList<>();
+            //表头字段
+            List<Row> headList=new ArrayList<>();
+            //人力薪酬和薪酬明细等excel分开处理
+            if (billtype.equals("nckd_salaryentry")) {
+                headList.add(filesheet.getRow(line-3));
+            }else {
+                headList.add(filesheet.getRow(line-2));
+            }
+            //读取每行的数据存入list中
+            for (int i=line;i<=filesheet.getLastRowNum();i++) {
+                //获取每一行
+                Row row = filesheet.getRow(i);
+                if (null==row.getCell(1)) {
+                    break;
+                }
+                //根据字段行循环,没有值的单元格则赋值,防止空指针
+                for(int j=1;j<column;j++){
+                    Cell cell=row.getCell(j);
+                    if (null==cell) {
+                        row.createCell(j);
+                    }
+                }
+                rowList.add(row);
+            }
+            //excel数据校验
+            dataVerify(headList,rowList,billtype);
+            //分录赋值
+            createNewRow(rowList,billtype);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+
+    /**
+     * @rowList 读取的excel数据
+     * @nckd_entrytype 分录标识
+     * @description:根据分录类型不同,赋值分录
+     */
+    public void createNewRow(List<Row> rowList,String nckd_entry){
+        //薪酬明细(一般员工)分录字段标识
+        List<String> nckd_generalemployees =Arrays.asList("nckd_se_institution","nckd_se_empname","nckd_se_empnumber"
+                ,"nckd_se_idnumber","nckd_se_banknumber","nckd_se_unit","nckd_se_org","nckd_se_department","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");
+        //薪酬明细(内退)分录字段标识
+        List<String> nckd_earlyretired=Arrays.asList("nckd_ee_institution","nckd_ee_empname","nckd_ee_empnumber","nckd_ee_idnumber","nckd_ee_banknumber"
+                ,"nckd_ee_unit","nckd_ee_org","nckd_ee_department","nckd_ee_allbasicsry","nckd_ee_allowance","nckd_ee_orallowance","nckd_ee_per_endins"
+                ,"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"
+                ,"nckd_ee_per_ljins","nckd_ee_per_hopins","nckd_ee_per_bhopins","nckd_ee_per_hosins","nckd_ee_per_cmymey","nckd_ee_unionmey"
+                );
+        //薪酬明细(退休)分录字段标识
+        List<String> nckd_retired=Arrays.asList("nckd_re_institution","nckd_re_empname","nckd_re_empnumber","nckd_re_idnumber","nckd_re_banknumber"
+                ,"nckd_re_unit","nckd_re_org","nckd_re_department","nckd_re_livallowance","nckd_re_otherallowance","nckd_re_reward"
+                ,"nckd_re_salarypayable","nckd_re_desalary","nckd_re_netsalary");
+        //人力薪酬分录标识
+        List<String> nckd_pay=Arrays.asList("nckd_sae_institution","nckd_sae_empname","nckd_sae_jobid","nckd_sae_idnumber","nckd_sae_banknumber","nckd_sae_company"
+                ,"nckd_sae_institutions","nckd_sae_department","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_payretird=Arrays.asList("nckd_see_institution","nckd_see_empname","nckd_see_jobid","nckd_see_idnumber"
+                ,"nckd_see_banknumber","nckd_see_company","nckd_see_institutions","nckd_see_department","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");
+
+
+        //将excel数据存入薪酬明细(一般员工)分录
+        if(nckd_entry.equals("nckd_staffentry")) {
+            //先清空分录
+            this.getModel().deleteEntryData("nckd_staffentry");
+            for (int i=0;i< rowList.size();i++) {
+                //新增动态单据分录
+                int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
+                //发薪机构
+                if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
+                    //获取发薪机构
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_generalemployees.get(0),entrycostdept,rowIndex);
+                }
+                //员工名称
+                if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
+                    this.getModel().setValue(nckd_generalemployees.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
+                }
+                //员工工号
+                if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
+                    this.getModel().setValue(nckd_generalemployees.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
+                }
+                //证件号
+                if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
+                    this.getModel().setValue(nckd_generalemployees.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
+                }
+                //银行账号
+                if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
+                    this.getModel().setValue(nckd_generalemployees.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
+                }
+                //所在单位
+                if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()){
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
+                    //获取所在单位
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_generalemployees.get(5),entrycostdept,rowIndex);
+                }
+                //一级机构
+                if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
+                    //获取部门
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id,entrycostdept",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_generalemployees.get(6),entrycostdept,rowIndex);
+                }
+                //所在部门
+                if (!getCellValue(rowList.get(i).getCell(8)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
+                    //获取部门
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_generalemployees.get(7),entrycostdept,rowIndex);
+                }
+                //金额类型字段赋值
+                for (int j=8;j<nckd_generalemployees.size();j++) {
+                    Cell cell=rowList.get(i).getCell(j+1);
+                    //空值则跳过
+                    if (!Objects.equals(getCellValue(cell), "")) {
+                        //金额字段转化为BigDecimal赋值进分录中
+                        String string=getCellValue(cell);
+                        BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
+                        this.getModel().setValue(nckd_generalemployees.get(j),bigDecimal,rowIndex);
+                    }
+                }
+                //刷新分录
+                this.getView().updateView("nckd_staffentry");
+            }
+        }
+        //薪酬明细(内退)分录
+        if (nckd_entry.equals("nckd_earlyretiredentry")) {
+            this.getModel().deleteEntryData("nckd_earlyretiredentry");
+            for (int i=0;i<rowList.size();i++) {
+                //新增动态单据分录
+                int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
+                //发薪机构
+                if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
+                    //获取发薪机构
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_earlyretired.get(0),entrycostdept,rowIndex);
+                }
+                //员工姓名
+                if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
+                    this.getModel().setValue(nckd_earlyretired.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
+                }
+                //员工工号
+                if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
+                    this.getModel().setValue(nckd_earlyretired.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
+                }
+                //证件号
+                if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
+                    this.getModel().setValue(nckd_earlyretired.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
+                }
+
+                //银行账号
+                if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
+                    this.getModel().setValue(nckd_earlyretired.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
+                }
+                //所在单位
+                if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()){
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_earlyretired.get(5),entrycostdept,rowIndex);
+                }
+                //一级机构
+                if (!getCellValue(rowList.get(i).getCell(7)).isEmpty())
+                {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_earlyretired.get(6),entrycostdept,rowIndex);
+                }
+                //所在部门
+                if (!getCellValue(rowList.get(i).getCell(8)).isEmpty())
+                {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_earlyretired.get(7),entrycostdept,rowIndex);
+                }
+                //金额类型字段赋值
+                for (int j=8;j<nckd_earlyretired.size();j++) {
+                    Cell cell=rowList.get(i).getCell(j+1);
+                    //空值则跳过
+                    if (!Objects.equals(getCellValue(cell), "")) {
+                        //金额字段转化为BigDecimal赋值进分录中
+                        String string=getCellValue(cell);
+                        BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
+                        this.getModel().setValue(nckd_earlyretired.get(j),bigDecimal,rowIndex);
+                    }
+                }
+            }
+        }
+        //薪酬明细(退休)分录
+        if(nckd_entry.equals("nckd_retireentry")) {
+            this.getModel().deleteEntryData("nckd_retireentry");
+            for (int i=0;i<rowList.size();i++) {
+                //新增动态单据分录
+                int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
+                //发薪机构
+                if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
+                    //获取发薪机构
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_retired.get(0),entrycostdept,rowIndex);
+                }
+                //员工姓名
+                if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
+                    this.getModel().setValue(nckd_retired.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
+                }
+                //员工工号
+                if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
+                    this.getModel().setValue(nckd_retired.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
+                }
+                //证件号
+                if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
+                    this.getModel().setValue(nckd_retired.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
+                }
+                //银行账号
+                if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
+                    this.getModel().setValue(nckd_retired.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
+                }
+                //所在单位
+                if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_retired.get(5),entrycostdept,rowIndex);
+                }
+                //一级机构
+                if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_retired.get(6),entrycostdept,rowIndex);
+                }
+                //所在部门
+                if (!getCellValue(rowList.get(i).getCell(8)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_retired.get(7),entrycostdept,rowIndex);
+                }
+                //金额类型字段赋值
+                for (int j=8;j<nckd_retired.size();j++) {
+                    Cell cell=rowList.get(i).getCell(j+1);
+                    //空值则跳过
+                    if (!Objects.equals(getCellValue(cell), "")) {
+                        //金额字段转化为BigDecimal赋值进分录中
+                        String string=getCellValue(cell);
+                        BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
+                        this.getModel().setValue(nckd_retired.get(j),bigDecimal,rowIndex);
+                    }
+                }
+            }
+        }
+        //人力薪酬分录
+        if(nckd_entry.equals("nckd_salaryentry")) {
+            this.getModel().deleteEntryData("nckd_salaryentry");
+            for (int i=0;i<rowList.size();i++) {
+                //新增动态单据分录
+                int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
+                //发薪机构
+                if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
+                    //获取发薪机构
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_pay.get(0),entrycostdept,rowIndex);
+                }
+                //姓名
+                if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
+                    this.getModel().setValue(nckd_pay.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
+                }
+                //工号
+                if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
+                    this.getModel().setValue(nckd_pay.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
+                }
+                //证件号
+                if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
+                    this.getModel().setValue(nckd_pay.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
+                }
+                //银行账号
+                if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
+                    this.getModel().setValue(nckd_pay.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
+                }
+                //所在单位
+                if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_pay.get(5),entrycostdept,rowIndex);
+                }
+                //一级机构
+                if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_pay.get(6),entrycostdept,rowIndex);
+                }
+                //所在部门
+                if (!getCellValue(rowList.get(i).getCell(8)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_pay.get(7),entrycostdept,rowIndex);
+                }
+                //金额类型字段赋值
+                for (int j=8;j<nckd_pay.size();j++) {
+                    Cell cell=rowList.get(i).getCell(j+1);
+                    //空值则跳过
+                    if (!Objects.equals(getCellValue(cell), "")) {
+                        //金额字段转化为BigDecimal赋值进分录中
+                        String string=getCellValue(cell);
+                        BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
+                        this.getModel().setValue(nckd_pay.get(j),bigDecimal,rowIndex);
+                    }
+                }
+            }
+
+        }
+        //人力薪酬内退分录
+        if (nckd_entry.equals("nckd_salaryentryre")){
+            this.getModel().deleteEntryData("nckd_salaryentryre");
+            for (int i=0;i<rowList.size();i++) {
+                //新增动态单据分录
+                int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
+                //发薪机构
+                if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
+                    //获取发薪机构
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_payretird.get(0),entrycostdept,rowIndex);
+                }
+                //员工姓名
+                if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
+                    this.getModel().setValue(nckd_payretird.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
+                }
+                //员工工号
+                if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
+                    this.getModel().setValue(nckd_payretird.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
+                }
+                //证件号
+                if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
+                    this.getModel().setValue(nckd_payretird.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
+                }
+                //银行账号
+                if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
+                    this.getModel().setValue(nckd_payretird.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
+                }
+                //所在单位
+                if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()){
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_payretird.get(5),entrycostdept,rowIndex);
+                }
+                //一级机构
+                if (!getCellValue(rowList.get(i).getCell(7)).isEmpty())
+                {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_payretird.get(6),entrycostdept,rowIndex);
+                }
+                //所在部门
+                if (!getCellValue(rowList.get(i).getCell(8)).isEmpty())
+                {
+                    QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
+                    DynamicObject entrycostdept= BusinessDataServiceHelper
+                            .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
+                    this.getModel().setValue(nckd_payretird.get(7),entrycostdept,rowIndex);
+                }
+                //金额类型字段赋值
+                for (int j=8;j<nckd_payretird.size();j++) {
+                    Cell cell=rowList.get(i).getCell(j+1);
+                    //空值则跳过
+                    if (!Objects.equals(getCellValue(cell), "")) {
+                        //金额字段转化为BigDecimal赋值进分录中
+                        String string=getCellValue(cell);
+                        BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
+                        this.getModel().setValue(nckd_payretird.get(j),bigDecimal,rowIndex);
+                    }
+                }
+            }
+        }
+    }
+
+
+
+
+    /**
+     * @headList 读取的excel表头数据
+     * @rowList 读取excel的表数据
+     * @billtype 分录标识
+     * @description:校验excel数据是否合法,传入的excel是否为正确的格式
+     */
+    public void dataVerify(List<Row> headList,List<Row> rowList,String billtype) {
+        //获取对应单据的字段名
+        String flag;
+        //薪酬明细(一般员工)
+        if (billtype.equals("nckd_staffentry")) {
+            //获取单据的字段名
+             flag=headList.get(0).getCell(9).getStringCellValue();
+            if (!flag.equals("基本工资")) {
+                throw new KDBizException("上传的文件格式有误,请检查!");
+            }
+            for (int i=0;i<rowList.size();i++) {
+                //校验金额字段
+                for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
+                    Cell cell=rowList.get(i).getCell(j);
+                    //单元格不为空
+                    if (!Objects.equals(getCellValue(cell), "")) {
+                        if (cell.getCellType()!=CellType.NUMERIC){
+                            //输入金额字段的类型不为数字则提示
+                            throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
+                        }
+                    }
+                }
+            }
+        }
+        //薪酬明细(内退)
+        if (billtype.equals("nckd_earlyretiredentry")) {
+            flag=headList.get(0).getCell(9).getStringCellValue();
+            if (!flag.equals("内退员工基本工资")) {
+                throw new KDBizException("上传的文件格式有误,请检查!");
+            }
+            for (int i=0;i<rowList.size();i++) {
+                //校验金额字段
+                for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
+                    Cell cell=rowList.get(i).getCell(j);
+                    //单元格不为空
+                    if (!Objects.equals(getCellValue(cell), "")) {
+                        if (cell.getCellType()!=CellType.NUMERIC){
+                            //输入金额字段的类型不为数字则提示
+                            throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
+                        }
+                    }
+                }
+            }
+        }
+        //薪酬明细(退休)
+        if (billtype.equals("nckd_retireentry")) {
+            flag=headList.get(0).getCell(9).getStringCellValue();
+            if (!flag.equals("退休员工生活补贴")) {
+                throw new KDBizException("上传的文件格式有误,请检查!");
+            }
+            for (int i=0;i<rowList.size();i++) {
+                //校验金额字段
+                for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
+                    Cell cell=rowList.get(i).getCell(j);
+                    //单元格不为空
+                    if (!Objects.equals(getCellValue(cell), "")) {
+                        if (cell.getCellType()!=CellType.NUMERIC){
+                            //输入金额字段的类型不为数字则提示
+                            throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
+                        }
+                    }
+                }
+            }
+        }
+        //人力薪酬
+        if (billtype.equals("nckd_salaryentry")) {
+            flag=headList.get(0).getCell(9).getStringCellValue();
+            if (!flag.equals("级别工资")) {
+                throw new KDBizException("上传的文件格式有误,请检查!");
+            }
+            for (int i=0;i<rowList.size();i++) {
+                //校验金额字段
+                for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
+                    Cell cell=rowList.get(i).getCell(j);
+                    //单元格不为空
+                    if (!Objects.equals(getCellValue(cell), "")) {
+                        if (cell.getCellType()!=CellType.NUMERIC){
+                            //输入金额字段的类型不为数字则提示
+                            throw new KDBizException("第"+(i+1)+"行第"+(j+1)+"列的数据:"+headList.get(i).getCell(j+1).getStringCellValue()+"字段有误,请检查!");
+                        }
+                    }
+                }
+            }
+        }
+        //人力薪酬(内退)
+        if (billtype.equals("nckd_salaryentryre"))
+        {
+            flag=headList.get(0).getCell(9).getStringCellValue();
+            if (!flag.equals("内退生活费")) {
+                throw new KDBizException("上传的文件格式有误,请检查!");
+            }
+            for (int i=0;i<rowList.size();i++) {
+                //校验金额字段
+                for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
+                    Cell cell=rowList.get(i).getCell(j);
+                    //单元格不为空
+                    if (!Objects.equals(getCellValue(cell), "")) {
+                        if (cell.getCellType()!=CellType.NUMERIC){
+                            //输入金额字段的类型不为数字则提示
+                            throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 对Excel的各个单元格的格式进行判断并转换
+     */
+    public  String getCellValue(Cell cell) {
+        String cellValue = "";
+        if (cell == null) {
+            return cellValue;
+        }
+        // 判断数据的类型
+        switch (cell.getCellType()) {
+            case NUMERIC:
+                //读取数字将不必要的小数点去掉
+                BigDecimal bigDecimal=new BigDecimal(Double.toString(cell.getNumericCellValue()));
+                cellValue=bigDecimal.stripTrailingZeros().toPlainString();
+                break;
+            case STRING: // 字符串
+                cellValue = String.valueOf(cell.getStringCellValue()).trim();
+                break;
+            case BLANK: // 空值
+                cellValue = "";
+                break;
+            case ERROR: // 故障
+                cellValue = "未知类型";
+                break;
+            default:
+                cellValue = "未知类型";
+                break;
+        }
+        return cellValue;
+    }
+}

+ 433 - 0
src/main/java/fi/em/formPlugin/SubAndAudFormCpPlugin.java

@@ -0,0 +1,433 @@
+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 kd.tmc.fpm.business.domain.model.report.DynamicObjectData;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * @author cjz
+ * @date 2024/9/12 11:12
+ * @description:薪酬计提提交后自动审核,保存前计算汇总分录
+ */
+public class SubAndAudFormCpPlugin extends AbstractListPlugin implements Plugin {
+
+    private static String nckd_staffentry="nckd_staffentry";//通用薪酬一般员工
+    private static String nckd_a_staffentry="nckd_a_staffentry";//通用薪酬一般员工汇总分录标识
+    private static String nckd_earlyretiredentry="nckd_earlyretiredentry";//通用薪酬内退
+    private static String nckd_a_earlyretiredentry="nckd_a_earlyretiredentry";//通用薪酬内退分录标识
+    private static String nckd_retireentry="nckd_retireentry";//通用薪酬退休
+    private static String nckd_a_retireentry="nckd_a_retireentry";//通用薪酬退休分录标识
+    private static String nckd_salaryentry="nckd_salaryentry";//人力薪酬
+    private static String nckd_a_salaryentry="nckd_a_salaryentry";//人力薪酬分录标识
+    private static String nckd_salaryentryre="nckd_salaryentryre";//人力薪酬内退
+    private static String nckd_a_salaryentryre="nckd_a_salaryentryre";//人力薪酬内退标识
+
+
+
+    //控件标识
+    private static String nckd_a_generalemployees="nckd_a_generalemployees";//通用一般汇总
+    private static String nckd_a_earlyretired="nckd_a_earlyretired";//通用内退汇总
+    private static String nckd_a_retired="nckd_a_retired";//通用退休汇总
+    private static String nckd_a_pay="nckd_a_pay";//人力一般汇总
+    private static String nckd_a_payretird="nckd_a_payretird";//人力内退汇总
+
+    public void afterDoOperation(AfterDoOperationEventArgs arg){
+        //提交并审核
+        if ("submit".equals(arg.getOperateKey())) {
+            //调用审核
+            this.getView().invokeOperation("audit");
+        }
+    }
+
+
+    //根据输入的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"
+                ,"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");
+
+        //薪酬明细(一般员工)汇总分录
+        List<String> nckd_a_employees=Arrays.asList("nckd_ase_allbasicsry","nckd_ase_basicsry","nckd_ase_acmsry"
+                ,"nckd_ase_reacmsry","nckd_ase_bsnrwd","nckd_ase_otreward","nckd_ase_cmcsbd","nckd_ase_otherpysry","nckd_ase_clearrwd"
+                ,"nckd_ase_awareward","nckd_ase_otherdevreward","nckd_ase_coldsbad","nckd_ase_warmsbad","nckd_ase_nursabd","nckd_ase_oalwance"
+                ,"nckd_ase_salarypayable","nckd_ase_per_endins","nckd_ase_per_hopins","nckd_ase_per_bhopins","nckd_ase_per_ljins","nckd_ase_per_hosins"
+                ,"nckd_ase_per_cmymey","nckd_ase_unionmey","nckd_ase_tax","nckd_ase_otherreduce","nckd_ase_desalary","nckd_ase_netsalary"
+                ,"nckd_ase_cpy_endins","nckd_ase_cpy_hopins","nckd_ase_cpy_bhopins","nckd_ase_cpy_ljins","nckd_ase_cpy_birthins","nckd_ase_cpy_dmgins"
+                ,"nckd_ase_cpy_hosins","nckd_ase_cpy_cmymey");
+
+
+        //薪酬明细(内退)分录字段标识,金额字段
+        List<String> nckd_earlyretired=Arrays.asList("nckd_ee_allbasicsry","nckd_ee_allowance","nckd_ee_orallowance","nckd_ee_per_endins"
+                ,"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"
+                ,"nckd_ee_per_ljins","nckd_ee_per_hopins","nckd_ee_per_bhopins","nckd_ee_per_hosins","nckd_ee_per_cmymey","nckd_ee_unionmey"
+        );
+
+        //薪酬明细(内退)汇总分录
+        List<String> nckd_a_earlyretired=Arrays.asList("nckd_aee_allbasicsry","nckd_aee_otherallowance","nckd_aee_orallowance","nckd_aee_per_endins"
+                ,"nckd_aee_otherreduce","nckd_aee_cpy_endins","nckd_aee_cpy_bhopins","nckd_aee_cpy_ljins","nckd_aee_cpy_birthins","nckd_aee_cpy_dmgins"
+                ,"nckd_aee_cpy_cmymey","nckd_aee_cpy_hosins","nckd_aee_taxt","nckd_aee_alltaxt","nckd_aee_charge","nckd_aee_finallsys","nckd_aee_per_ljins"
+                ,"nckd_aee_per_hopins","nckd_aee_per_bhopins","nckd_aee_per_hosins","nckd_aee_per_cmymey","nckd_aee_unionmey");
+
+
+        //薪酬明细(退休)分录字段标识,金额字段
+        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_a_retired=Arrays.asList("nckd_are_livallowance","nckd_are_ollowance","nckd_are_reward","nckd_are_salarypayable"
+                ,"nckd_are_desalary","nckd_are_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_a_allpay=Arrays.asList("nckd_asae_levelsry","nckd_asae_dutiessry","nckd_asae_updutiessry","nckd_asae_workyearsry"
+                ,"nckd_asae_depyear","nckd_asae_eduasry","nckd_asae_transry","nckd_asae_jobsry","nckd_asae_basicsry","nckd_asae_allbasicsry"
+                ,"nckd_asae_acmsry","nckd_asae_mountsry","nckd_asae_reacmsry","nckd_asae_balyearsry","nckd_asae_blastyearsry","nckd_asae_allsry"
+                ,"nckd_asae_bsnrwd","nckd_asae_cpmrwd","nckd_asae_psrwd","nckd_asae_comrwd","nckd_asae_cardrwd","nckd_asae_intwrd","nckd_asae_clearrwd"
+                ,"nckd_asae_allrwd","nckd_asae_retainsry","nckd_asae_reward","nckd_asae_otreward","nckd_asae_cmcsbd","nckd_asae_trfsbd","nckd_asae_housesbd"
+                ,"nckd_asae_warmsbd","nckd_asae_edusbd","nckd_asae_trafficsbd","nckd_asae_othersbd","nckd_asae_reduce","nckd_asae_othersry","nckd_asae_sickreduce"
+                ,"nckd_asae_shopreduce","nckd_asae_eventreduce","nckd_asae_afwreduce","nckd_asae_latereduce","nckd_asae_cwasry","nckd_asae_cwareduce"
+                ,"nckd_asae_dgreduce","nckd_asae_dcpreduce","nckd_asae_badreduce","nckd_asae_otherreduce","nckd_asae_allreduce","nckd_asae_lastsry"
+                ,"nckd_asae_allpay","nckd_asae_per_endins","nckd_asae_per_ljins","nckd_asae_per_hopins","nckd_asae_per_bhopins","nckd_asae_per_hosins"
+                ,"nckd_asae_per_cmymey","nckd_asae_per_ins","nckd_asae_unionmey","nckd_asae_tax","nckd_asae_allamount","nckd_asae_cash","nckd_asae_wages"
+                ,"nckd_asae_cpy_endins","nckd_asae_cpy_hopins","nckd_asae_cpy_bhopins","nckd_asae_cpy_birthins","nckd_asae_cpy_ljins","nckd_asae_cpy_dmgins"
+                ,"nckd_asae_cpy_hosins","nckd_asae_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_a_payretird=Arrays.asList("nckd_asee_allbasicsry","nckd_asee_allowance","nckd_asee_ollowanc","nckd_asee_per_endins"
+                ,"nckd_asee_per_ljins","nckd_asee_per_hopins","nckd_asee_per_bhopins","nckd_asee_per_hosins","nckd_asee_per_cmymey","nckd_asee_unionmey"
+                ,"nckd_asee_tax","nckd_asee_desalary","nckd_asee_netsalary","nckd_asee_otherreduce","nckd_asee_cpy_endins","nckd_asee_cpy_bhopins"
+                ,"nckd_asee_cpy_ljins","nckd_asee_cpy_birthins","nckd_asee_cpy_dmgins","nckd_asee_cpy_cmymey","nckd_asee_cpy_hosins","nckd_asee_taxt"
+                ,"nckd_asee_alltaxt","nckd_asee_charge","nckd_asee_finallsys","nckd_asee_cpy_oldins","nckd_asee_cpy_hop","nckd_asee_cpy_bhop","nckd_asee_cpy_bir"
+                ,"nckd_asee_cpy_ljob","nckd_asee_cpy_dwork","nckd_asee_cpy_hos","nckd_asee_cpy_cmy");
+
+        Map<String,List<String>> mapList=new HashMap<>();
+        mapList.put("nckd_generalemployees",nckd_generalemployees);
+        mapList.put("nckd_a_employees",nckd_a_employees);
+        mapList.put("nckd_earlyretired",nckd_earlyretired);
+        mapList.put("nckd_retired",nckd_retired);
+        mapList.put("nckd_a_earlyretired",nckd_a_earlyretired);
+        mapList.put("nckd_pay",nckd_pay);
+        mapList.put("nckd_payretird",nckd_payretird);
+        mapList.put("nckd_a_retired",nckd_a_retired);
+        mapList.put("nckd_a_allpay",nckd_a_allpay);
+        mapList.put("nckd_a_payretird",nckd_a_payretird);
+
+
+        //list名
+        List<String> list=new ArrayList<>();
+        list.add("nckd_a_payretird");
+        list.add("nckd_a_allpay");
+        list.add("nckd_a_retired");
+        list.add("nckd_generalemployees");
+        list.add("nckd_allemployees");
+        list.add("nckd_a_employees");
+        list.add("nckd_earlyretired");
+        list.add("nckd_retired");
+        list.add("nckd_a_earlyretired");
+        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();
+        //获取当前操作单据
+        DynamicObject dynamicObject=this.getModel().getDataEntity(true);
+        //当前单据分录类型
+        String nckd_entrytype=dynamicObject.getString("nckd_entrytype");
+
+        //保存,提交前,计算汇总分录
+        if ("save".equals(source.getOperateKey())||"submit".equals(source.getOperateKey())){
+            //分录类型为通用薪酬一般员工
+            if ("A".equals(nckd_entrytype)) {
+                //先清空汇总分录分录
+                this.getModel().deleteEntryData("nckd_a_staffentry");
+                //字段标识
+                String entrylist="nckd_generalemployees";
+                //对应分录标识
+                String propername="nckd_staffentry";
+                //对应部门标识
+                String dep="nckd_se_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_a_employees";
+                this.getView().setVisible(true,nckd_a_generalemployees);
+                this.getView().setVisible(false,nckd_a_earlyretired);
+                this.getView().setVisible(false,nckd_a_retired);
+                this.getView().setVisible(false,nckd_a_pay);
+                this.getView().setVisible(false,nckd_a_payretird);
+                allDataEntry(dynamicObject,entrylist,propername,dep,allentrtlist,"nckd_ase_department",nckd_a_staffentry);
+
+                DynamicObjectCollection nckd_ase=dynamicObject.getDynamicObjectCollection("nckd_a_staffentry");
+                //循环汇总分录
+                for (int i=0;i<nckd_ase.size();i++){
+                    //部门
+                    DynamicObject depament=nckd_ase.get(i).getDynamicObject("nckd_ase_department");
+                    DynamicObjectCollection nckd_staffentry=dynamicObject.getDynamicObjectCollection("nckd_staffentry");
+                    for (DynamicObject it:nckd_staffentry) {
+                        //所在单位相等则获取发薪机构
+                        if (depament.equals(it.getDynamicObject("nckd_se_department"))) {
+                            this.getModel().setValue("nckd_ase_institution",it.getDynamicObject("nckd_se_institution"),i);
+                            break;
+                        }
+                    }
+                }
+
+            }
+            //分录类型为通用薪酬内退
+            if ("B".equals(nckd_entrytype)) {
+                //先清空汇总分录分录
+                this.getModel().deleteEntryData("nckd_a_earlyretiredentry");
+                //字段标识
+                String entrylist="nckd_earlyretired";
+                //对应分录标识
+                String propername="nckd_earlyretiredentry";
+                //对应部门标识
+                String dep="nckd_ee_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_a_earlyretired";
+                allDataEntry(dynamicObject,entrylist,propername,dep,allentrtlist,"nckd_aee_department",nckd_a_earlyretiredentry);
+                this.getView().setVisible(false,nckd_a_generalemployees);
+                this.getView().setVisible(true,nckd_a_earlyretired);
+                this.getView().setVisible(false,nckd_a_retired);
+                this.getView().setVisible(false,nckd_a_pay);
+                this.getView().setVisible(false,nckd_a_payretird);
+
+                //发薪机构赋值
+                DynamicObjectCollection nckd_ase=dynamicObject.getDynamicObjectCollection("nckd_a_earlyretiredentry");
+                //循环汇总分录
+                for (int i=0;i<nckd_ase.size();i++){
+                    //部门
+                    DynamicObject depament=nckd_ase.get(i).getDynamicObject("nckd_aee_department");
+                    DynamicObjectCollection nckd_staffentry=dynamicObject.getDynamicObjectCollection("nckd_earlyretiredentry");
+                    for (DynamicObject it:nckd_staffentry) {
+                        //所在单位相等则获取发薪机构
+                        if (depament.equals(it.getDynamicObject("nckd_ee_department"))) {
+                            this.getModel().setValue("nckd_aee_institution",it.getDynamicObject("nckd_ee_institution"),i);
+                            break;
+                        }
+                    }
+                }
+            }
+            //分录类型为通用薪酬退休
+            if ("C".equals(nckd_entrytype)) {
+                //先清空汇总分录分录
+                this.getModel().deleteEntryData("nckd_a_retireentry");
+                //字段标识
+                String entrylist="nckd_retired";
+                //对应分录标识
+                String propername="nckd_retireentry";
+                //对应部门标识
+                String dep="nckd_re_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_a_retired";
+                allDataEntry(dynamicObject,entrylist,propername,dep,allentrtlist,"nckd_are_department",nckd_a_retireentry);
+                this.getView().setVisible(false,nckd_a_generalemployees);
+                this.getView().setVisible(false,nckd_a_earlyretired);
+                this.getView().setVisible(true,nckd_a_retired);
+                this.getView().setVisible(false,nckd_a_pay);
+                this.getView().setVisible(false,nckd_a_payretird);
+                //发薪机构赋值
+                DynamicObjectCollection nckd_ase=dynamicObject.getDynamicObjectCollection("nckd_a_retireentry");
+                //循环汇总分录
+                for (int i=0;i<nckd_ase.size();i++){
+                    //部门
+                    DynamicObject depament=nckd_ase.get(i).getDynamicObject("nckd_are_department");
+                    DynamicObjectCollection nckd_staffentry=dynamicObject.getDynamicObjectCollection("nckd_retireentry");
+                    for (DynamicObject it:nckd_staffentry) {
+                        //所在单位相等则获取发薪机构
+                        if (depament.equals(it.getDynamicObject("nckd_re_department"))) {
+                            this.getModel().setValue("nckd_are_institution",it.getDynamicObject("nckd_re_institution"),i);
+                            break;
+                        }
+                    }
+                }
+            }
+            //分录类型为人力薪酬(一般员工)
+            if ("D".equals(nckd_entrytype)) {
+                //先清空汇总分录分录
+                this.getModel().deleteEntryData("nckd_a_salaryentry");
+                //字段标识
+                String entrylist="nckd_pay";
+                //对应分录标识
+                String propername="nckd_salaryentry";
+                //对应部门标识
+                String dep="nckd_sae_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_a_allpay";
+                allDataEntry(dynamicObject,entrylist,propername,dep,allentrtlist,"nckd_asae_department",nckd_a_salaryentry);
+                this.getView().setVisible(false,nckd_a_generalemployees);
+                this.getView().setVisible(false,nckd_a_earlyretired);
+                this.getView().setVisible(false,nckd_a_retired);
+                this.getView().setVisible(true,nckd_a_pay);
+                this.getView().setVisible(false,nckd_a_payretird);
+                //发薪机构赋值
+                DynamicObjectCollection nckd_ase=dynamicObject.getDynamicObjectCollection("nckd_a_salaryentry");
+                //循环汇总分录
+                for (int i=0;i<nckd_ase.size();i++){
+                    //部门
+                    DynamicObject depament=nckd_ase.get(i).getDynamicObject("nckd_asae_department");
+                    DynamicObjectCollection nckd_staffentry=dynamicObject.getDynamicObjectCollection("nckd_salaryentry");
+                    for (DynamicObject it:nckd_staffentry) {
+                        //所在单位相等则获取发薪机构
+                        if (depament.equals(it.getDynamicObject("nckd_sae_department"))) {
+                            this.getModel().setValue("nckd_asae_institution",it.getDynamicObject("nckd_sae_institution"),i);
+                            break;
+                        }
+                    }
+                }
+            }
+            //分录类型为人力薪酬(内退)
+            if ("E".equals(nckd_entrytype)) {
+                //先清空汇总分录分录
+                this.getModel().deleteEntryData("nckd_a_salaryentryre");
+                //字段标识
+                String entrylist="nckd_payretird";
+                //对应分录标识
+                String propername="nckd_salaryentryre";
+                //对应部门标识
+                String dep="nckd_see_department";
+                //对应汇总分录字段标识
+                String allentrtlist="nckd_a_payretird";
+                allDataEntry(dynamicObject,entrylist,propername,dep,allentrtlist,"nckd_asee_department",nckd_a_salaryentryre);
+                this.getView().setVisible(false,nckd_a_generalemployees);
+                this.getView().setVisible(false,nckd_a_earlyretired);
+                this.getView().setVisible(false,nckd_a_retired);
+                this.getView().setVisible(false,nckd_a_pay);
+                this.getView().setVisible(true,nckd_a_payretird);
+                //发薪机构赋值
+                DynamicObjectCollection nckd_ase=dynamicObject.getDynamicObjectCollection("nckd_a_salaryentryre");
+                //循环汇总分录
+                for (int i=0;i<nckd_ase.size();i++){
+                    //部门
+                    DynamicObject depament=nckd_ase.get(i).getDynamicObject("nckd_asee_department");
+                    DynamicObjectCollection nckd_staffentry=dynamicObject.getDynamicObjectCollection("nckd_salaryentryre");
+                    for (DynamicObject it:nckd_staffentry) {
+                        //所在单位相等则获取发薪机构
+                        if (depament.equals(it.getDynamicObject("nckd_see_department"))) {
+                            this.getModel().setValue("nckd_asee_institution",it.getDynamicObject("nckd_see_institution"),i);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+
+    /**
+     * @dynamicObject 当前单据信息
+     * @entrylist 字段标识列表
+     * @propername 分录标识
+     * @dep 对应分录部门标识
+     * @allentrtlist 写入的汇总分录字段
+     * @nckd_dep 汇总分录部门标识
+     * @description:根据分录类型不同计算汇总分录
+     */
+    public void allDataEntry(DynamicObject dynamicObject
+            ,String entrylist,String propername,String dep,String allentrtlist,String nckd_dep,String nckd_allentry)
+    {
+        //字段标识
+        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 (DynamicObject bumen : depList) {
+            //某部门总数据
+            List<BigDecimal> sumNum = new ArrayList<>();
+            //汇总表部门list初始化
+            for (int b = 0; b < nckd_generalemployees.size(); b++) {
+                sumNum.add(new BigDecimal("0.0"));
+            }
+            //计算一个部门汇总
+            for (DynamicObject object : staffentry) {
+                //获取所在部门
+                DynamicObject department = object.getDynamicObject(dep);
+                //相同部门则累加金额数据
+                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 = object.getBigDecimal(entry);
+                        cell = cell.add(num);
+                        sumNum.set(a, cell);
+                    }
+                }
+            }
+            //创建新的分录行
+            int rowIndex = this.getModel().createNewEntryRow(nckd_allentry);
+            //设置部门
+            this.getModel().setValue(nckd_dep, bumen, rowIndex);
+            for (int c = 0; c < sumNum.size(); c++) {
+                this.getModel().setValue(entryList(allentrtlist).get(c), sumNum.get(c), rowIndex);
+            }
+        }
+
+    }
+
+
+
+}

+ 7 - 7
src/main/java/fi/em/formPlugin/SubAndAudFormPlugin.java

@@ -15,7 +15,7 @@ import java.util.*;
 /**
 /**
  * @author cjz
  * @author cjz
  * @date 2024/9/12 11:12
  * @date 2024/9/12 11:12
- * @description:薪酬计提提交后自动审核,保存前计算汇总分录
+ * @description:薪酬发放提交后自动审核,保存前计算汇总分录
  */
  */
 public class SubAndAudFormPlugin extends AbstractListPlugin implements Plugin {
 public class SubAndAudFormPlugin extends AbstractListPlugin implements Plugin {
 
 
@@ -54,20 +54,20 @@ public class SubAndAudFormPlugin extends AbstractListPlugin implements Plugin {
         //薪酬明细(一般员工)分录字段标识,金额字段
         //薪酬明细(一般员工)分录字段标识,金额字段
         List<String> nckd_generalemployees = Arrays.asList("nckd_se_allbasicsry"
         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_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_otherpysry","nckd_se_latesry","nckd_se_latesrygrant","nckd_se_clearrwd","nckd_se_awareward","nckd_se_otherdevreward","nckd_se_coldsbad"
+                ,"nckd_se_warmsbad","nckd_se_nursabd","nckd_se_otherallowance","nckd_se_risksry","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_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_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_hopins","nckd_se_cpy_bhopins","nckd_se_cpy_ljins","nckd_se_cpy_dmgins","nckd_se_cpy_hosins"
                 ,"nckd_se_cpy_cmymey");
                 ,"nckd_se_cpy_cmymey");
 
 
         //薪酬明细(一般员工)汇总分录
         //薪酬明细(一般员工)汇总分录
         List<String> nckd_a_employees=Arrays.asList("nckd_ase_allbasicsry","nckd_ase_basicsry","nckd_ase_acmsry"
         List<String> nckd_a_employees=Arrays.asList("nckd_ase_allbasicsry","nckd_ase_basicsry","nckd_ase_acmsry"
-                ,"nckd_ase_reacmsry","nckd_ase_bsnrwd","nckd_ase_otreward","nckd_ase_cmcsbd","nckd_ase_otherpysry","nckd_ase_clearrwd"
-                ,"nckd_ase_awareward","nckd_ase_otherdevreward","nckd_ase_coldsbad","nckd_ase_warmsbad","nckd_ase_nursabd","nckd_ase_oalwance"
+                ,"nckd_ase_reacmsry","nckd_ase_bsnrwd","nckd_ase_otreward","nckd_ase_cmcsbd","nckd_ase_otherpysry","nckd_ase_latesry","nckd_ase_latesrygrant","nckd_ase_clearrwd"
+                ,"nckd_ase_awareward","nckd_ase_otherdevreward","nckd_ase_coldsbad","nckd_ase_warmsbad","nckd_ase_nursabd","nckd_ase_oalwance","nckd_ase_risksry"
                 ,"nckd_ase_salarypayable","nckd_ase_per_endins","nckd_ase_per_hopins","nckd_ase_per_bhopins","nckd_ase_per_ljins","nckd_ase_per_hosins"
                 ,"nckd_ase_salarypayable","nckd_ase_per_endins","nckd_ase_per_hopins","nckd_ase_per_bhopins","nckd_ase_per_ljins","nckd_ase_per_hosins"
                 ,"nckd_ase_per_cmymey","nckd_ase_unionmey","nckd_ase_tax","nckd_ase_otherreduce","nckd_ase_desalary","nckd_ase_netsalary"
                 ,"nckd_ase_per_cmymey","nckd_ase_unionmey","nckd_ase_tax","nckd_ase_otherreduce","nckd_ase_desalary","nckd_ase_netsalary"
-                ,"nckd_ase_cpy_endins","nckd_ase_cpy_hopins","nckd_ase_cpy_bhopins","nckd_ase_cpy_ljins","nckd_ase_cpy_birthins","nckd_ase_cpy_dmgins"
+                ,"nckd_ase_cpy_endins","nckd_ase_cpy_hopins","nckd_ase_cpy_bhopins","nckd_ase_cpy_ljins","nckd_ase_cpy_dmgins"
                 ,"nckd_ase_cpy_hosins","nckd_ase_cpy_cmymey");
                 ,"nckd_ase_cpy_hosins","nckd_ase_cpy_cmymey");