123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- 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.*;
- /**
- * @author cjz
- * @date 2024/9/12 11:12
- * @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");
- }
- }
- //根据输入的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_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();
- //获取当前操作单据
- DynamicObject dynamicObject=this.getModel().getDataEntity(true);
- //当前单据分录类型
- String nckd_entrytype=dynamicObject.getString("nckd_entrytype");
- //计算汇总分录
- 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);
- }
- }
- }
- /**
- * @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 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++)
- {
- 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);
- }
- }
- }
- //创建新的分录行
- 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);
- }
- }
- }
- }
|