SubAndAudFormPlugin.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. package fi.em.formPlugin;
  2. import kd.bos.dataentity.entity.DynamicObject;
  3. import kd.bos.dataentity.entity.DynamicObjectCollection;
  4. import kd.bos.form.events.AfterDoOperationEventArgs;
  5. import kd.bos.form.events.BeforeDoOperationEventArgs;
  6. import kd.bos.form.operate.FormOperate;
  7. import kd.bos.list.plugin.AbstractListPlugin;
  8. import kd.sdk.plugin.Plugin;
  9. import java.math.BigDecimal;
  10. import java.util.*;
  11. /**
  12. * @author cjz
  13. * @date 2024/9/12 11:12
  14. * @description:薪酬计提提交后自动审核,保存前计算汇总分离
  15. */
  16. public class SubAndAudFormPlugin extends AbstractListPlugin implements Plugin {
  17. private static String nckd_staffentry="nckd_staffentry";//通用薪酬一般员工
  18. private static String nckd_earlyretiredentry="nckd_earlyretiredentry";//通用薪酬内退
  19. private static String nckd_retireentry="nckd_retireentry";//通用薪酬退休
  20. private static String nckd_salaryentry="nckd_salaryentry";//人力薪酬
  21. private static String nckd_salaryentryre="nckd_salaryentryre";//人力薪酬内退
  22. private static String nckd_allentry="nckd_allentry";//汇总分录
  23. public void afterDoOperation(AfterDoOperationEventArgs arg){
  24. //提交并审核
  25. if ("submit".equals(arg.getOperateKey())) {
  26. //调用审核
  27. this.getView().invokeOperation("audit");
  28. }
  29. }
  30. //根据输入的list名,返回对应list
  31. public List<String> entryList(String nckdentry)
  32. {
  33. //薪酬明细(一般员工)分录字段标识,金额字段
  34. List<String> nckd_generalemployees = Arrays.asList("nckd_se_allbasicsry"
  35. ,"nckd_se_basicsry","nckd_se_acmsry","nckd_se_reacmsry","nckd_se_bsnrwd","nckd_se_otreward","nckd_se_cmcsbd"
  36. ,"nckd_se_otherpysry","nckd_se_clearrwd","nckd_se_awareward","nckd_se_otherdevreward","nckd_se_coldsbad"
  37. ,"nckd_se_warmsbad","nckd_se_nursabd","nckd_se_otherallowance","nckd_se_salarypayable","nckd_se_per_endins"
  38. ,"nckd_se_per_hopins","nckd_se_per_bhopins","nckd_se_per_ljins","nckd_se_per_hosins","nckd_se_per_cmymey"
  39. ,"nckd_se_unionmey","nckd_se_tax","nckd_se_otherreduce","nckd_se_desalary","nckd_se_netsalary","nckd_se_cpy_endins"
  40. ,"nckd_se_cpy_hopins","nckd_se_cpy_bhopins","nckd_se_cpy_ljins","nckd_se_cpy_birthins","nckd_se_cpy_dmgins","nckd_se_cpy_hosins"
  41. ,"nckd_se_cpy_cmymey");
  42. //薪酬明细(一般员工)汇总分录字段标识
  43. List<String> nckd_allemployees=Arrays.asList("nckd_all_allbsry","nckd_all_basicsry","nckd_all_acmsry","nckd_all_reacmsry"
  44. ,"nckd_all_bsnrwd","nckd_all_otreward","nckd_all_cmcsbd","nckd_all_otherpysry","nckd_all_clearrwd","nckd_all_awareward"
  45. ,"nckd_all_odevreward","nckd_all_coldsbad","nckd_all_warmsbad","nckd_all_nursabd","nckd_all_oallowance","nckd_all_salarypaya"
  46. ,"nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_bhopins","nckd_all_per_ljins","nckd_all_per_hosins","nckd_all_per_cmymey"
  47. ,"nckd_all_unionmey","nckd_all_tax","nckd_all_otherreduce","nckd_all_desalary","nckd_all_netsalary","nckd_all_cpy_endins"
  48. ,"nckd_all_cpy_hopins","nckd_all_cpy_bhopins","nckd_all_cpy_ljins","nckd_all_cpy_birthins","nckd_all_cpy_dmgins","nckd_all_cpy_hosins"
  49. ,"nckd_all_cpy_cmymey");
  50. //薪酬明细(内退)分录字段标识,金额字段
  51. List<String> nckd_earlyretired=Arrays.asList("nckd_ee_allbasicsry","nckd_ee_allowance","nckd_ee_otherallowance","nckd_ee_per_endins"
  52. ,"nckd_ee_per_ljins","nckd_ee_per_hopins","nckd_ee_per_bhopins","nckd_ee_per_hosins","nckd_ee_per_cmymey","nckd_ee_unionmey"
  53. ,"nckd_ee_tax","nckd_ee_desalary","nckd_ee_netsalary","nckd_ee_otherreduce","nckd_ee_cpy_endins","nckd_ee_cpy_bhopins"
  54. ,"nckd_ee_cpy_ljins","nckd_ee_cpy_birthins","nckd_ee_cpy_dmgins","nckd_ee_cpy_cmymey","nckd_ee_cpy_hosins","nckd_ee_taxt"
  55. ,"nckd_ee_alltaxt","nckd_ee_charge","nckd_ee_finallsys");
  56. //薪酬明细(内退)汇总分录字段标识
  57. List<String> nckd_allearlytired=Arrays.asList("nckd_all_allbasicsry","nckd_all_allowqance","nckd_all_owance","nckd_all_reduceitem"
  58. ,"nckd_all_sumsry","nckd_all_laryreduce","nckd_all_pushreduce","nckd_all_lrulereduce","nckd_all_badreduce","nckd_all_oreduce","nckd_all_reducesry"
  59. ,"nckd_all_salarypaya","nckd_all_nesalary","nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_bhopins","nckd_all_per_ljins"
  60. ,"nckd_all_per_hosins","nckd_all_per_cmymey","nckd_all_sumins","nckd_all_workamount","nckd_all_tax","nckd_all_alltaxt"
  61. ,"nckd_all_charge","nckd_all_netsalary");
  62. //薪酬明细(退休)分录字段标识,金额字段
  63. List<String> nckd_retired=Arrays.asList("nckd_re_livallowance","nckd_re_otherallowance","nckd_re_reward"
  64. ,"nckd_re_salarypayable","nckd_re_desalary","nckd_re_netsalary");
  65. //薪酬明细(退休)汇总分录字段标识
  66. List<String> nckd_allretired=Arrays.asList("nckd_all_livallowance","nckd_all_otherwance","nckd_all_reward","nckd_all_salarypaya"
  67. ,"nckd_all_desalary","nckd_all_netsalary");
  68. //人力薪酬分录标识金额字段,金额字段
  69. List<String> nckd_pay=Arrays.asList("nckd_sae_levelsry","nckd_sae_dutiessry","nckd_sae_updutiessry","nckd_sae_workyearsry"
  70. ,"nckd_sae_depyear","nckd_sae_eduasry","nckd_sae_transry","nckd_sae_jobsry","nckd_sae_basicsry","nckd_sae_allbasicsry","nckd_sae_acmsry"
  71. ,"nckd_sae_mountsry","nckd_sae_reacmsry","nckd_sae_balyearsry","nckd_sae_blastyearsry","nckd_sae_allsry","nckd_sae_bsnrwd","nckd_sae_cpmrwd"
  72. ,"nckd_sae_psrwd","nckd_sae_comrwd","nckd_sae_cardrwd","nckd_sae_intwrd","nckd_sae_clearrwd","nckd_sae_allrwd","nckd_sae_retainsry"
  73. ,"nckd_sae_reward","nckd_sae_otreward","nckd_sae_cmcsbd","nckd_sae_trfsbd","nckd_sae_housesbd","nckd_sae_warmsbd","nckd_sae_edusbd"
  74. ,"nckd_sae_trafficsbd","nckd_sae_othersbd","nckd_sae_reduce","nckd_sae_othersry","nckd_sae_sickreduce","nckd_sae_sickhopreduce"
  75. ,"nckd_sae_eventreduce","nckd_sae_afwreduce","nckd_sae_latereduce","nckd_sae_cwasry","nckd_sae_cwareduce","nckd_sae_dgreduce"
  76. ,"nckd_sae_dcpreduce","nckd_sae_badreduce","nckd_sae_otherreduce","nckd_sae_allreduce","nckd_sae_lastsry","nckd_sae_allpay"
  77. ,"nckd_sae_per_endins","nckd_sae_per_ljins","nckd_sae_per_hopins","nckd_sae_per_bhopins","nckd_sae_per_hosins","nckd_sae_per_cmymey"
  78. ,"nckd_sae_per_ins","nckd_sae_unionmey","nckd_sae_tax","nckd_sae_allamount","nckd_sae_cash","nckd_sae_wages","nckd_sae_cpy_endins"
  79. ,"nckd_sae_cpy_hopins","nckd_sae_cpy_bhopins","nckd_sae_cpy_birthins","nckd_sae_cpy_ljins","nckd_sae_cpy_dmgins","nckd_sae_cpy_hosins"
  80. ,"nckd_sae_cpy_cmymey");
  81. //人力薪酬汇总分录字段标识
  82. List<String> nckd_allpay=Arrays.asList("nckd_all_levelsry","nckd_all_dutiessry","nckd_all_updutiessry","nckd_all_workyearsry"
  83. ,"nckd_all_depyear","nckd_all_eduasry","nckd_all_transry","nckd_all_jobsry","nckd_all_rebasicsry","nckd_all_allbacsry"
  84. ,"nckd_all_allcmsry","nckd_all_mountsry","nckd_all_reacmamount","nckd_all_balyearsry","nckd_all_blastyearsry","nckd_all_allsry"
  85. ,"nckd_all_bsnreda","nckd_all_cpmrwd","nckd_all_psrwd","nckd_all_comrwd","nckd_all_cardrwd","nckd_all_intwrd","nckd_all_clearwd"
  86. ,"nckd_all_allrwd","nckd_all_retainsry","nckd_all_owance","nckd_all_otrewardam","nckd_all_rlcmcsbd","nckd_all_trfsbd"
  87. ,"nckd_all_housesbd","nckd_all_warmsbd","nckd_all_edusbd","nckd_all_trafficsbd","nckd_all_othersbd","nckd_all_reduce"
  88. ,"nckd_all_othersry","nckd_all_sickreduce","nckd_all_sickhopreduce","nckd_all_eventreduce","nckd_all_afwreduce","nckd_all_latereduce"
  89. ,"nckd_all_cwasry","nckd_all_cwareduce","nckd_all_dgreduce","nckd_all_dcpreduce","nckd_all_badredu","nckd_all_othereduce"
  90. ,"nckd_all_allreduce","nckd_all_salarypaya","nckd_all_nesalary","nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_bhopins"
  91. ,"nckd_all_per_ljins","nckd_all_per_hosins","nckd_all_per_cmymey","nckd_all_sumins","nckd_all_workamount","nckd_all_tax"
  92. ,"nckd_all_alltaxt","nckd_all_charge","nckd_all_netsalary","nckd_all_cpy_endins","nckd_all_cpy_hopins","nckd_all_cpy_bhopins"
  93. ,"nckd_all_cpy_birthins","nckd_all_cpy_ljins","nckd_all_cpy_dmgins","nckd_all_cpy_hosins","nckd_all_cpy_cmymey");
  94. //人力薪酬内退分录标识,金额字段
  95. List<String> nckd_payretird=Arrays.asList("nckd_see_allbasicsry"
  96. ,"nckd_see_allowance","nckd_see_otherallowanc","nckd_see_per_endins","nckd_see_per_ljins","nckd_see_per_hopins"
  97. ,"nckd_see_per_bhopins","nckd_see_per_hosins","nckd_see_per_cmymey","nckd_see_unionmey","nckd_see_tax"
  98. ,"nckd_see_desalary","nckd_see_netsalary","nckd_see_otherreduce","nckd_see_cpy_endins","nckd_see_cpy_bhopins"
  99. ,"nckd_see_cpy_ljins","nckd_see_cpy_birthins","nckd_see_cpy_dmgins","nckd_see_cpy_cmymey","nckd_see_cpy_hosins"
  100. ,"nckd_see_taxt","nckd_see_alltaxt","nckd_see_charge","nckd_see_finallsys","nckd_see_cpy_oldins","nckd_see_cpy_hop"
  101. ,"nckd_see_cpy_bhop","nckd_see_cpy_bir","nckd_see_cpy_ljob","nckd_see_cpy_dwork","nckd_see_cpy_hos","nckd_see_cpy_cmy");
  102. //人力薪酬内退分录汇总字段
  103. List<String> nckd_allpayretird=Arrays.asList("nckd_all_allbasicsry","nckd_all_allowqance","nckd_all_owance","nckd_all_reduceitem"
  104. ,"nckd_all_sumsry","nckd_all_laryreduce","nckd_all_pushreduce","nckd_all_lrulereduce","nckd_all_badreduce","nckd_all_oreduce"
  105. ,"nckd_all_reducesry","nckd_all_salarypaya","nckd_all_nesalary","nckd_all_per_endins","nckd_all_per_hopins","nckd_all_per_ljins"
  106. ,"nckd_all_per_bhopins","nckd_all_per_hosins","nckd_all_per_cmymey","nckd_all_sumins","nckd_all_workamount","nckd_all_tax"
  107. ,"nckd_all_alltaxt","nckd_all_charge","nckd_all_netsalary","nckd_all_cpy_endins","nckd_all_cpy_hopins","nckd_all_cpy_bhopins"
  108. ,"nckd_all_cpy_birthins","nckd_all_cpy_ljins","nckd_all_cpy_dmgins","nckd_all_cpy_hosins","nckd_all_cpy_cmymey");
  109. Map<String,List<String>> mapList=new HashMap<>();
  110. mapList.put("nckd_generalemployees",nckd_generalemployees);
  111. mapList.put("nckd_allemployees",nckd_allemployees);
  112. mapList.put("nckd_earlyretired",nckd_earlyretired);
  113. mapList.put("nckd_retired",nckd_retired);
  114. mapList.put("nckd_pay",nckd_pay);
  115. mapList.put("nckd_payretird",nckd_payretird);
  116. mapList.put("nckd_allearlytired",nckd_allearlytired);
  117. mapList.put("nckd_allretired",nckd_allretired);
  118. mapList.put("nckd_allpay",nckd_allpay);
  119. mapList.put("nckd_allpayretird",nckd_allpayretird);
  120. //list名
  121. List<String> list=new ArrayList<>();
  122. list.add("nckd_generalemployees");
  123. list.add("nckd_allemployees");
  124. list.add("nckd_earlyretired");
  125. list.add("nckd_retired");
  126. list.add("nckd_pay");
  127. list.add("nckd_payretird");
  128. list.add("nckd_allearlytired");
  129. list.add("nckd_allretired");
  130. list.add("nckd_allpay");
  131. list.add("nckd_allpayretird");
  132. for (String item:list) {
  133. if (nckdentry.equals(item))
  134. {
  135. return mapList.get(nckdentry);
  136. }
  137. }
  138. return null;
  139. }
  140. //保存前计算汇总分录
  141. public void beforeDoOperation(BeforeDoOperationEventArgs arg) {
  142. super.beforeDoOperation(arg);
  143. FormOperate source = (FormOperate) arg.getSource();
  144. //获取当前操作单据
  145. DynamicObject dynamicObject=this.getModel().getDataEntity(true);
  146. //当前单据分录类型
  147. String nckd_entrytype=dynamicObject.getString("nckd_entrytype");
  148. //计算汇总分录
  149. if ("countall".equals(source.getOperateKey())){
  150. //先清空汇总分录分录
  151. this.getModel().deleteEntryData("nckd_allentry");
  152. //分录类型为通用薪酬一般员工
  153. if ("A".equals(nckd_entrytype)) {
  154. //字段标识
  155. String entrylist="nckd_generalemployees";
  156. //对应分录标识
  157. String propername="nckd_staffentry";
  158. //对应部门标识
  159. String dep="nckd_se_department";
  160. //对应汇总分录字段标识
  161. String allentrtlist="nckd_allemployees";
  162. countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
  163. }
  164. //分录类型为通用薪酬内退
  165. if ("B".equals(nckd_entrytype)) {
  166. //字段标识
  167. String entrylist="nckd_earlyretired";
  168. //对应分录标识
  169. String propername="nckd_earlyretiredentry";
  170. //对应部门标识
  171. String dep="nckd_ee_department";
  172. //对应汇总分录字段标识
  173. String allentrtlist="nckd_allearlytired";
  174. countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
  175. }
  176. if ("C".equals(nckd_entrytype)) {
  177. //字段标识
  178. String entrylist="nckd_retired";
  179. //对应分录标识
  180. String propername="nckd_retireentry";
  181. //对应部门标识
  182. String dep="nckd_re_department";
  183. //对应汇总分录字段标识
  184. String allentrtlist="nckd_allretired";
  185. countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
  186. }
  187. if ("D".equals(nckd_entrytype)) {
  188. //字段标识
  189. String entrylist="nckd_pay";
  190. //对应分录标识
  191. String propername="nckd_salaryentry";
  192. //对应部门标识
  193. String dep="nckd_sae_department";
  194. //对应汇总分录字段标识
  195. String allentrtlist="nckd_allpay";
  196. countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
  197. }
  198. if ("E".equals(nckd_entrytype)) {
  199. //字段标识
  200. String entrylist="nckd_payretird";
  201. //对应分录标识
  202. String propername="nckd_salaryentryre";
  203. //对应部门标识
  204. String dep="nckd_see_department";
  205. //对应汇总分录字段标识
  206. String allentrtlist="nckd_allpayretird";
  207. countEntry(dynamicObject,entrylist,propername,dep,allentrtlist);
  208. }
  209. }
  210. }
  211. /**
  212. * @dynamicObject 当前单据信息
  213. * @entrylist 字段标识列表
  214. * @propername 分录标识
  215. * @dep 对应分录部门标识
  216. * @allentrtlist 写入的汇总分录字段
  217. * @description:根据分录类型不同计算汇总分录
  218. */
  219. public void countEntry(DynamicObject dynamicObject,String entrylist,String propername,String dep,String allentrtlist)
  220. {
  221. //字段标识
  222. List<String> nckd_generalemployees = entryList(entrylist);
  223. //获取一般员工分录
  224. DynamicObjectCollection staffentry=dynamicObject.getDynamicObjectCollection(propername);
  225. //分录部门list
  226. List<DynamicObject> depList=new ArrayList<>();
  227. //初始化值为第一行部门
  228. depList.add(staffentry.get(0).getDynamicObject(dep));
  229. for (DynamicObject item:staffentry) {
  230. //将不同的值加入到部门的list中
  231. if (!depList.contains(item.getDynamicObject(dep))) {
  232. depList.add(item.getDynamicObject(dep));
  233. }
  234. }
  235. //几个不同部门则循环几次
  236. for (int j=0;j<depList.size();j++)
  237. {
  238. DynamicObject bumen=depList.get(j);
  239. //某部门总数据
  240. List<BigDecimal> sumNum=new ArrayList<>();
  241. //汇总表部门list初始化
  242. for (int b=0;b<nckd_generalemployees.size();b++) {
  243. sumNum.add(new BigDecimal("0.0"));
  244. }
  245. //计算一个部门汇总
  246. for (int i=0;i<staffentry.size();i++)
  247. {
  248. //获取所在部门
  249. DynamicObject department=staffentry.get(i).getDynamicObject(dep);
  250. //相同部门则累加金额数据
  251. if (department.equals(bumen)) {
  252. for (int a=0;a<nckd_generalemployees.size();a++)
  253. {
  254. BigDecimal cell=sumNum.get(a);
  255. //字段标识
  256. String entry=nckd_generalemployees.get(a);
  257. //i行的a列数据
  258. BigDecimal num=staffentry.get(i).getBigDecimal(entry);
  259. cell=cell.add(num);
  260. sumNum.set(a,cell);
  261. }
  262. }
  263. }
  264. //创建新的分录行
  265. int rowIndex = this.getModel().createNewEntryRow(nckd_allentry);
  266. //设置部门
  267. this.getModel().setValue("nckd_all_department",depList.get(j),rowIndex);
  268. for (int c=0;c<sumNum.size();c++) {
  269. this.getModel().setValue(entryList(allentrtlist).get(c),sumNum.get(c),rowIndex);
  270. }
  271. }
  272. }
  273. }