SalaryFileUploadEditPluginCp.java 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672
  1. package fi.em.formPlugin;
  2. import kd.bos.bill.AbstractBillPlugIn;
  3. import kd.bos.cache.CacheFactory;
  4. import kd.bos.cache.TempFileCache;
  5. import kd.bos.dataentity.entity.DynamicObject;
  6. import kd.bos.exception.KDBizException;
  7. import kd.bos.form.control.AttachmentPanel;
  8. import kd.bos.form.control.Toolbar;
  9. import kd.bos.form.control.events.UploadEvent;
  10. import kd.bos.form.control.events.UploadListener;
  11. import kd.bos.orm.query.QFilter;
  12. import kd.bos.servicehelper.BusinessDataServiceHelper;
  13. import org.apache.poi.ss.usermodel.*;
  14. import java.io.*;
  15. import java.math.BigDecimal;
  16. import java.util.*;
  17. /**
  18. * @author cjz
  19. * @date 2024/8/20 16:18
  20. * @description:薪酬计提单上传附件,并将附件中的数据写入分录
  21. */
  22. public class SalaryFileUploadEditPluginCp extends AbstractBillPlugIn implements UploadListener {
  23. private static String bos_org = "bos_org"; //业务单元组织标识
  24. private static String bos_adminorg="bos_adminorg";//行政组织标识
  25. //给附件面板添加监听
  26. @Override
  27. public void registerListener(EventObject e) {
  28. super.registerListener(e);
  29. Toolbar attachmentPanel = this.getControl("advcontoolbarap");
  30. attachmentPanel.addUploadListener(this);
  31. Toolbar attachmentPanel1 = this.getControl("nckd_advcontoolbarap1");
  32. attachmentPanel1.addUploadListener(this);
  33. Toolbar attachmentPanel2 = this.getControl("nckd_advcontoolbarap12");
  34. attachmentPanel2.addUploadListener(this);
  35. Toolbar attachmentPanel3 = this.getControl("nckd_advcontoolbarap11");
  36. attachmentPanel3.addUploadListener(this);
  37. Toolbar attachmentPanel4 = this.getControl("nckd_advcontoolbarap13");
  38. attachmentPanel4.addUploadListener(this);
  39. }
  40. @Override
  41. public void afterUpload(UploadEvent evt) {
  42. String nckd_entrytype=this.getModel().getValue("nckd_entrytype")+"";
  43. //解析附件面板
  44. // AttachmentPanel attachmentPanel=this.getControl("nckd_attachment_xc");
  45. // List<Map<String,Object>> attachmentData=attachmentPanel.getAttachmentData();
  46. //获取最新上传的文件路径
  47. String fileurl = evt.getUrls()[0]+"";
  48. File ff = new File(fileurl);
  49. //获取文件缓存
  50. TempFileCache cache = CacheFactory.getCommonCacheFactory().getTempFileCache();
  51. //从缓存中拿到输入流
  52. InputStream inputStream = null;
  53. try {
  54. inputStream = new FileInputStream(ff);
  55. } catch (FileNotFoundException e) {
  56. throw new RuntimeException(e);
  57. }
  58. String billtype="";
  59. //根据分录类型获取对应分录标识
  60. if ("A".equals(nckd_entrytype)) {
  61. billtype="nckd_staffentry";
  62. readExcelByRowOrCell(4,44,inputStream,billtype);
  63. }else if ("B".equals(nckd_entrytype)) {
  64. billtype="nckd_earlyretiredentry";
  65. readExcelByRowOrCell(4,34,inputStream,billtype);
  66. } else if ("C".equals(nckd_entrytype)) {
  67. billtype="nckd_retireentry";
  68. readExcelByRowOrCell(4,15,inputStream,billtype);
  69. } else if ("D".equals(nckd_entrytype)) {
  70. billtype="nckd_salaryentry";
  71. readExcelByRowOrCell(4,78,inputStream,billtype);
  72. } else if ("E".equals(nckd_entrytype)) {
  73. billtype="nckd_salaryentryre";
  74. readExcelByRowOrCell(4,41,inputStream,billtype);
  75. } else if (null==nckd_entrytype) {
  76. throw new KDBizException("请选择分录类型");
  77. }
  78. }
  79. /**
  80. * @line execel头行数
  81. * @column excel列数
  82. * @inputStream 文件流
  83. * @nckd_entrytype 分录类型
  84. * @description:读取上传的excel,并将数据写入对应分录中
  85. */
  86. public void readExcelByRowOrCell(int line,int column,InputStream inputStream,String billtype)
  87. {
  88. try {
  89. Workbook wb = WorkbookFactory.create(inputStream);
  90. Sheet filesheet=wb.getSheetAt(0);//默认取第一个工作表
  91. //表中存的数据
  92. List<Row> rowList=new ArrayList<>();
  93. //表头字段
  94. List<Row> headList=new ArrayList<>();
  95. //人力薪酬和薪酬明细等excel分开处理
  96. if (billtype.equals("nckd_salaryentry")) {
  97. headList.add(filesheet.getRow(line-3));
  98. }else {
  99. headList.add(filesheet.getRow(line-2));
  100. }
  101. //读取每行的数据存入list中
  102. for (int i=line;i<=filesheet.getLastRowNum();i++) {
  103. //获取每一行
  104. Row row = filesheet.getRow(i);
  105. if (null==row.getCell(1)) {
  106. break;
  107. }
  108. //根据字段行循环,没有值的单元格则赋值,防止空指针
  109. for(int j=1;j<column;j++){
  110. Cell cell=row.getCell(j);
  111. if (null==cell) {
  112. row.createCell(j);
  113. }
  114. }
  115. rowList.add(row);
  116. }
  117. //excel数据校验
  118. dataVerify(headList,rowList,billtype);
  119. //分录赋值
  120. createNewRow(rowList,billtype);
  121. } catch (IOException e) {
  122. throw new RuntimeException(e);
  123. }
  124. }
  125. /**
  126. * @rowList 读取的excel数据
  127. * @nckd_entrytype 分录标识
  128. * @description:根据分录类型不同,赋值分录
  129. */
  130. public void createNewRow(List<Row> rowList,String nckd_entry){
  131. //薪酬明细(一般员工)分录字段标识
  132. List<String> nckd_generalemployees =Arrays.asList("nckd_se_institution","nckd_se_empname","nckd_se_empnumber"
  133. ,"nckd_se_idnumber","nckd_se_banknumber","nckd_se_unit","nckd_se_org","nckd_se_department","nckd_se_allbasicsry"
  134. ,"nckd_se_basicsry","nckd_se_acmsry","nckd_se_reacmsry","nckd_se_bsnrwd","nckd_se_otreward","nckd_se_cmcsbd"
  135. ,"nckd_se_otherpysry","nckd_se_clearrwd","nckd_se_awareward","nckd_se_otherdevreward","nckd_se_coldsbad"
  136. ,"nckd_se_warmsbad","nckd_se_nursabd","nckd_se_otherallowance","nckd_se_salarypayable","nckd_se_per_endins"
  137. ,"nckd_se_per_hopins","nckd_se_per_bhopins","nckd_se_per_ljins","nckd_se_per_hosins","nckd_se_per_cmymey"
  138. ,"nckd_se_unionmey","nckd_se_tax","nckd_se_otherreduce","nckd_se_desalary","nckd_se_netsalary","nckd_se_cpy_endins"
  139. ,"nckd_se_cpy_hopins","nckd_se_cpy_bhopins","nckd_se_cpy_ljins","nckd_se_cpy_birthins","nckd_se_cpy_dmgins","nckd_se_cpy_hosins"
  140. ,"nckd_se_cpy_cmymey");
  141. //薪酬明细(内退)分录字段标识
  142. List<String> nckd_earlyretired=Arrays.asList("nckd_ee_institution","nckd_ee_empname","nckd_ee_empnumber","nckd_ee_idnumber","nckd_ee_banknumber"
  143. ,"nckd_ee_unit","nckd_ee_org","nckd_ee_department","nckd_ee_allbasicsry","nckd_ee_allowance","nckd_ee_orallowance","nckd_ee_per_endins"
  144. ,"nckd_ee_otherreduce","nckd_ee_cpy_endins","nckd_ee_cpy_bhopins","nckd_ee_cpy_ljins","nckd_ee_cpy_birthins","nckd_ee_cpy_dmgins"
  145. ,"nckd_ee_cpy_cmymey","nckd_ee_cpy_hosins","nckd_ee_taxt","nckd_ee_alltaxt","nckd_ee_charge","nckd_ee_finallsys"
  146. ,"nckd_ee_per_ljins","nckd_ee_per_hopins","nckd_ee_per_bhopins","nckd_ee_per_hosins","nckd_ee_per_cmymey","nckd_ee_unionmey"
  147. );
  148. //薪酬明细(退休)分录字段标识
  149. List<String> nckd_retired=Arrays.asList("nckd_re_institution","nckd_re_empname","nckd_re_empnumber","nckd_re_idnumber","nckd_re_banknumber"
  150. ,"nckd_re_unit","nckd_re_org","nckd_re_department","nckd_re_livallowance","nckd_re_otherallowance","nckd_re_reward"
  151. ,"nckd_re_salarypayable","nckd_re_desalary","nckd_re_netsalary");
  152. //人力薪酬分录标识
  153. List<String> nckd_pay=Arrays.asList("nckd_sae_institution","nckd_sae_empname","nckd_sae_jobid","nckd_sae_idnumber","nckd_sae_banknumber","nckd_sae_company"
  154. ,"nckd_sae_institutions","nckd_sae_department","nckd_sae_levelsry","nckd_sae_dutiessry","nckd_sae_updutiessry","nckd_sae_workyearsry"
  155. ,"nckd_sae_depyear","nckd_sae_eduasry","nckd_sae_transry","nckd_sae_jobsry","nckd_sae_basicsry","nckd_sae_allbasicsry","nckd_sae_acmsry"
  156. ,"nckd_sae_mountsry","nckd_sae_reacmsry","nckd_sae_balyearsry","nckd_sae_blastyearsry","nckd_sae_allsry","nckd_sae_bsnrwd","nckd_sae_cpmrwd"
  157. ,"nckd_sae_psrwd","nckd_sae_comrwd","nckd_sae_cardrwd","nckd_sae_intwrd","nckd_sae_clearrwd","nckd_sae_allrwd","nckd_sae_retainsry"
  158. ,"nckd_sae_reward","nckd_sae_otreward","nckd_sae_cmcsbd","nckd_sae_trfsbd","nckd_sae_housesbd","nckd_sae_warmsbd","nckd_sae_edusbd"
  159. ,"nckd_sae_trafficsbd","nckd_sae_othersbd","nckd_sae_reduce","nckd_sae_othersry","nckd_sae_sickreduce","nckd_sae_sickhopreduce"
  160. ,"nckd_sae_eventreduce","nckd_sae_afwreduce","nckd_sae_latereduce","nckd_sae_cwasry","nckd_sae_cwareduce","nckd_sae_dgreduce"
  161. ,"nckd_sae_dcpreduce","nckd_sae_badreduce","nckd_sae_otherreduce","nckd_sae_allreduce","nckd_sae_lastsry","nckd_sae_allpay"
  162. ,"nckd_sae_per_endins","nckd_sae_per_ljins","nckd_sae_per_hopins","nckd_sae_per_bhopins","nckd_sae_per_hosins","nckd_sae_per_cmymey"
  163. ,"nckd_sae_per_ins","nckd_sae_unionmey","nckd_sae_tax","nckd_sae_allamount","nckd_sae_cash","nckd_sae_wages","nckd_sae_cpy_endins"
  164. ,"nckd_sae_cpy_hopins","nckd_sae_cpy_bhopins","nckd_sae_cpy_birthins","nckd_sae_cpy_ljins","nckd_sae_cpy_dmgins","nckd_sae_cpy_hosins"
  165. ,"nckd_sae_cpy_cmymey");
  166. //人力薪酬内退分录标识
  167. List<String> nckd_payretird=Arrays.asList("nckd_see_institution","nckd_see_empname","nckd_see_jobid","nckd_see_idnumber"
  168. ,"nckd_see_banknumber","nckd_see_company","nckd_see_institutions","nckd_see_department","nckd_see_allbasicsry"
  169. ,"nckd_see_allowance","nckd_see_otherallowanc","nckd_see_per_endins","nckd_see_per_ljins","nckd_see_per_hopins"
  170. ,"nckd_see_per_bhopins","nckd_see_per_hosins","nckd_see_per_cmymey","nckd_see_unionmey","nckd_see_tax"
  171. ,"nckd_see_desalary","nckd_see_netsalary","nckd_see_otherreduce","nckd_see_cpy_endins","nckd_see_cpy_bhopins"
  172. ,"nckd_see_cpy_ljins","nckd_see_cpy_birthins","nckd_see_cpy_dmgins","nckd_see_cpy_cmymey","nckd_see_cpy_hosins"
  173. ,"nckd_see_taxt","nckd_see_alltaxt","nckd_see_charge","nckd_see_finallsys","nckd_see_cpy_oldins","nckd_see_cpy_hop"
  174. ,"nckd_see_cpy_bhop","nckd_see_cpy_bir","nckd_see_cpy_ljob","nckd_see_cpy_dwork","nckd_see_cpy_hos","nckd_see_cpy_cmy");
  175. //将excel数据存入薪酬明细(一般员工)分录
  176. if(nckd_entry.equals("nckd_staffentry")) {
  177. //先清空分录
  178. this.getModel().deleteEntryData("nckd_staffentry");
  179. for (int i=0;i< rowList.size();i++) {
  180. //新增动态单据分录
  181. int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
  182. //发薪机构
  183. if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
  184. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
  185. //获取发薪机构
  186. DynamicObject entrycostdept= BusinessDataServiceHelper
  187. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  188. this.getModel().setValue(nckd_generalemployees.get(0),entrycostdept,rowIndex);
  189. }
  190. //员工名称
  191. if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
  192. this.getModel().setValue(nckd_generalemployees.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
  193. }
  194. //员工工号
  195. if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
  196. this.getModel().setValue(nckd_generalemployees.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
  197. }
  198. //证件号
  199. if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
  200. this.getModel().setValue(nckd_generalemployees.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
  201. }
  202. //银行账号
  203. if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
  204. this.getModel().setValue(nckd_generalemployees.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
  205. }
  206. //所在单位
  207. if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()){
  208. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
  209. //获取所在单位
  210. DynamicObject entrycostdept= BusinessDataServiceHelper
  211. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  212. this.getModel().setValue(nckd_generalemployees.get(5),entrycostdept,rowIndex);
  213. }
  214. //一级机构
  215. if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()) {
  216. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
  217. //获取部门
  218. DynamicObject entrycostdept= BusinessDataServiceHelper
  219. .loadSingle(bos_adminorg,"id,entrycostdept",new QFilter[]{filter});
  220. this.getModel().setValue(nckd_generalemployees.get(6),entrycostdept,rowIndex);
  221. }
  222. //所在部门
  223. if (!getCellValue(rowList.get(i).getCell(8)).isEmpty()) {
  224. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
  225. //获取部门
  226. DynamicObject entrycostdept= BusinessDataServiceHelper
  227. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  228. this.getModel().setValue(nckd_generalemployees.get(7),entrycostdept,rowIndex);
  229. }
  230. //金额类型字段赋值
  231. for (int j=8;j<nckd_generalemployees.size();j++) {
  232. Cell cell=rowList.get(i).getCell(j+1);
  233. //空值则跳过
  234. if (!Objects.equals(getCellValue(cell), "")) {
  235. //金额字段转化为BigDecimal赋值进分录中
  236. String string=getCellValue(cell);
  237. BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
  238. this.getModel().setValue(nckd_generalemployees.get(j),bigDecimal,rowIndex);
  239. }
  240. }
  241. //刷新分录
  242. this.getView().updateView("nckd_staffentry");
  243. }
  244. }
  245. //薪酬明细(内退)分录
  246. if (nckd_entry.equals("nckd_earlyretiredentry")) {
  247. this.getModel().deleteEntryData("nckd_earlyretiredentry");
  248. for (int i=0;i<rowList.size();i++) {
  249. //新增动态单据分录
  250. int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
  251. //发薪机构
  252. if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
  253. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
  254. //获取发薪机构
  255. DynamicObject entrycostdept= BusinessDataServiceHelper
  256. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  257. this.getModel().setValue(nckd_earlyretired.get(0),entrycostdept,rowIndex);
  258. }
  259. //员工姓名
  260. if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
  261. this.getModel().setValue(nckd_earlyretired.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
  262. }
  263. //员工工号
  264. if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
  265. this.getModel().setValue(nckd_earlyretired.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
  266. }
  267. //证件号
  268. if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
  269. this.getModel().setValue(nckd_earlyretired.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
  270. }
  271. //银行账号
  272. if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
  273. this.getModel().setValue(nckd_earlyretired.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
  274. }
  275. //所在单位
  276. if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()){
  277. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
  278. DynamicObject entrycostdept= BusinessDataServiceHelper
  279. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  280. this.getModel().setValue(nckd_earlyretired.get(5),entrycostdept,rowIndex);
  281. }
  282. //一级机构
  283. if (!getCellValue(rowList.get(i).getCell(7)).isEmpty())
  284. {
  285. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
  286. DynamicObject entrycostdept= BusinessDataServiceHelper
  287. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  288. this.getModel().setValue(nckd_earlyretired.get(6),entrycostdept,rowIndex);
  289. }
  290. //所在部门
  291. if (!getCellValue(rowList.get(i).getCell(8)).isEmpty())
  292. {
  293. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
  294. DynamicObject entrycostdept= BusinessDataServiceHelper
  295. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  296. this.getModel().setValue(nckd_earlyretired.get(7),entrycostdept,rowIndex);
  297. }
  298. //金额类型字段赋值
  299. for (int j=8;j<nckd_earlyretired.size();j++) {
  300. Cell cell=rowList.get(i).getCell(j+1);
  301. //空值则跳过
  302. if (!Objects.equals(getCellValue(cell), "")) {
  303. //金额字段转化为BigDecimal赋值进分录中
  304. String string=getCellValue(cell);
  305. BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
  306. this.getModel().setValue(nckd_earlyretired.get(j),bigDecimal,rowIndex);
  307. }
  308. }
  309. }
  310. }
  311. //薪酬明细(退休)分录
  312. if(nckd_entry.equals("nckd_retireentry")) {
  313. this.getModel().deleteEntryData("nckd_retireentry");
  314. for (int i=0;i<rowList.size();i++) {
  315. //新增动态单据分录
  316. int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
  317. //发薪机构
  318. if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
  319. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
  320. //获取发薪机构
  321. DynamicObject entrycostdept= BusinessDataServiceHelper
  322. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  323. this.getModel().setValue(nckd_retired.get(0),entrycostdept,rowIndex);
  324. }
  325. //员工姓名
  326. if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
  327. this.getModel().setValue(nckd_retired.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
  328. }
  329. //员工工号
  330. if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
  331. this.getModel().setValue(nckd_retired.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
  332. }
  333. //证件号
  334. if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
  335. this.getModel().setValue(nckd_retired.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
  336. }
  337. //银行账号
  338. if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
  339. this.getModel().setValue(nckd_retired.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
  340. }
  341. //所在单位
  342. if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()) {
  343. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
  344. DynamicObject entrycostdept= BusinessDataServiceHelper
  345. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  346. this.getModel().setValue(nckd_retired.get(5),entrycostdept,rowIndex);
  347. }
  348. //一级机构
  349. if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()) {
  350. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
  351. DynamicObject entrycostdept= BusinessDataServiceHelper
  352. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  353. this.getModel().setValue(nckd_retired.get(6),entrycostdept,rowIndex);
  354. }
  355. //所在部门
  356. if (!getCellValue(rowList.get(i).getCell(8)).isEmpty()) {
  357. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
  358. DynamicObject entrycostdept= BusinessDataServiceHelper
  359. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  360. this.getModel().setValue(nckd_retired.get(7),entrycostdept,rowIndex);
  361. }
  362. //金额类型字段赋值
  363. for (int j=8;j<nckd_retired.size();j++) {
  364. Cell cell=rowList.get(i).getCell(j+1);
  365. //空值则跳过
  366. if (!Objects.equals(getCellValue(cell), "")) {
  367. //金额字段转化为BigDecimal赋值进分录中
  368. String string=getCellValue(cell);
  369. BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
  370. this.getModel().setValue(nckd_retired.get(j),bigDecimal,rowIndex);
  371. }
  372. }
  373. }
  374. }
  375. //人力薪酬分录
  376. if(nckd_entry.equals("nckd_salaryentry")) {
  377. this.getModel().deleteEntryData("nckd_salaryentry");
  378. for (int i=0;i<rowList.size();i++) {
  379. //新增动态单据分录
  380. int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
  381. //发薪机构
  382. if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
  383. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
  384. //获取发薪机构
  385. DynamicObject entrycostdept= BusinessDataServiceHelper
  386. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  387. this.getModel().setValue(nckd_pay.get(0),entrycostdept,rowIndex);
  388. }
  389. //姓名
  390. if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
  391. this.getModel().setValue(nckd_pay.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
  392. }
  393. //工号
  394. if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
  395. this.getModel().setValue(nckd_pay.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
  396. }
  397. //证件号
  398. if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
  399. this.getModel().setValue(nckd_pay.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
  400. }
  401. //银行账号
  402. if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
  403. this.getModel().setValue(nckd_pay.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
  404. }
  405. //所在单位
  406. if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()) {
  407. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
  408. DynamicObject entrycostdept= BusinessDataServiceHelper
  409. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  410. this.getModel().setValue(nckd_pay.get(5),entrycostdept,rowIndex);
  411. }
  412. //一级机构
  413. if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()) {
  414. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
  415. DynamicObject entrycostdept= BusinessDataServiceHelper
  416. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  417. this.getModel().setValue(nckd_pay.get(6),entrycostdept,rowIndex);
  418. }
  419. //所在部门
  420. if (!getCellValue(rowList.get(i).getCell(8)).isEmpty()) {
  421. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
  422. DynamicObject entrycostdept= BusinessDataServiceHelper
  423. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  424. this.getModel().setValue(nckd_pay.get(7),entrycostdept,rowIndex);
  425. }
  426. //金额类型字段赋值
  427. for (int j=8;j<nckd_pay.size();j++) {
  428. Cell cell=rowList.get(i).getCell(j+1);
  429. //空值则跳过
  430. if (!Objects.equals(getCellValue(cell), "")) {
  431. //金额字段转化为BigDecimal赋值进分录中
  432. String string=getCellValue(cell);
  433. BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
  434. this.getModel().setValue(nckd_pay.get(j),bigDecimal,rowIndex);
  435. }
  436. }
  437. }
  438. }
  439. //人力薪酬内退分录
  440. if (nckd_entry.equals("nckd_salaryentryre")){
  441. this.getModel().deleteEntryData("nckd_salaryentryre");
  442. for (int i=0;i<rowList.size();i++) {
  443. //新增动态单据分录
  444. int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
  445. //发薪机构
  446. if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
  447. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
  448. //获取发薪机构
  449. DynamicObject entrycostdept= BusinessDataServiceHelper
  450. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  451. this.getModel().setValue(nckd_payretird.get(0),entrycostdept,rowIndex);
  452. }
  453. //员工姓名
  454. if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
  455. this.getModel().setValue(nckd_payretird.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
  456. }
  457. //员工工号
  458. if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
  459. this.getModel().setValue(nckd_payretird.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
  460. }
  461. //证件号
  462. if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
  463. this.getModel().setValue(nckd_payretird.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
  464. }
  465. //银行账号
  466. if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
  467. this.getModel().setValue(nckd_payretird.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
  468. }
  469. //所在单位
  470. if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()){
  471. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
  472. DynamicObject entrycostdept= BusinessDataServiceHelper
  473. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  474. this.getModel().setValue(nckd_payretird.get(5),entrycostdept,rowIndex);
  475. }
  476. //一级机构
  477. if (!getCellValue(rowList.get(i).getCell(7)).isEmpty())
  478. {
  479. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
  480. DynamicObject entrycostdept= BusinessDataServiceHelper
  481. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  482. this.getModel().setValue(nckd_payretird.get(6),entrycostdept,rowIndex);
  483. }
  484. //所在部门
  485. if (!getCellValue(rowList.get(i).getCell(8)).isEmpty())
  486. {
  487. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
  488. DynamicObject entrycostdept= BusinessDataServiceHelper
  489. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  490. this.getModel().setValue(nckd_payretird.get(7),entrycostdept,rowIndex);
  491. }
  492. //金额类型字段赋值
  493. for (int j=8;j<nckd_payretird.size();j++) {
  494. Cell cell=rowList.get(i).getCell(j+1);
  495. //空值则跳过
  496. if (!Objects.equals(getCellValue(cell), "")) {
  497. //金额字段转化为BigDecimal赋值进分录中
  498. String string=getCellValue(cell);
  499. BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
  500. this.getModel().setValue(nckd_payretird.get(j),bigDecimal,rowIndex);
  501. }
  502. }
  503. }
  504. }
  505. }
  506. /**
  507. * @headList 读取的excel表头数据
  508. * @rowList 读取excel的表数据
  509. * @billtype 分录标识
  510. * @description:校验excel数据是否合法,传入的excel是否为正确的格式
  511. */
  512. public void dataVerify(List<Row> headList,List<Row> rowList,String billtype) {
  513. //获取对应单据的字段名
  514. String flag;
  515. //薪酬明细(一般员工)
  516. if (billtype.equals("nckd_staffentry")) {
  517. //获取单据的字段名
  518. // flag=headList.get(0).getCell(9).getStringCellValue();
  519. // if (!flag.equals("基本工资(1)")) {
  520. // throw new KDBizException("上传的文件格式有误,请检查!");
  521. // }
  522. for (int i=0;i<rowList.size();i++) {
  523. //校验金额字段
  524. for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
  525. Cell cell=rowList.get(i).getCell(j);
  526. //单元格不为空
  527. if (!Objects.equals(getCellValue(cell), "")) {
  528. if (cell.getCellType()!=CellType.NUMERIC){
  529. //输入金额字段的类型不为数字则提示
  530. throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
  531. }
  532. }
  533. }
  534. }
  535. }
  536. //薪酬明细(内退)
  537. if (billtype.equals("nckd_earlyretiredentry")) {
  538. // flag=headList.get(0).getCell(9).getStringCellValue();
  539. // if (!flag.equals("内退员工基本工资(1)")) {
  540. // throw new KDBizException("上传的文件格式有误,请检查!");
  541. // }
  542. for (int i=0;i<rowList.size();i++) {
  543. //校验金额字段
  544. for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
  545. Cell cell=rowList.get(i).getCell(j);
  546. //单元格不为空
  547. if (!Objects.equals(getCellValue(cell), "")) {
  548. if (cell.getCellType()!=CellType.NUMERIC){
  549. //输入金额字段的类型不为数字则提示
  550. throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
  551. }
  552. }
  553. }
  554. }
  555. }
  556. //薪酬明细(退休)
  557. if (billtype.equals("nckd_retireentry")) {
  558. // flag=headList.get(0).getCell(9).getStringCellValue();
  559. // if (!flag.equals("退休员工生活补贴(1)")) {
  560. // throw new KDBizException("上传的文件格式有误,请检查!");
  561. // }
  562. for (int i=0;i<rowList.size();i++) {
  563. //校验金额字段
  564. for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
  565. Cell cell=rowList.get(i).getCell(j);
  566. //单元格不为空
  567. if (!Objects.equals(getCellValue(cell), "")) {
  568. if (cell.getCellType()!=CellType.NUMERIC){
  569. //输入金额字段的类型不为数字则提示
  570. throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
  571. }
  572. }
  573. }
  574. }
  575. }
  576. //人力薪酬
  577. if (billtype.equals("nckd_salaryentry")) {
  578. // flag=headList.get(0).getCell(9).getStringCellValue();
  579. // if (!flag.equals("级别工资")) {
  580. // throw new KDBizException("上传的文件格式有误,请检查!");
  581. // }
  582. for (int i=0;i<rowList.size();i++) {
  583. //校验金额字段
  584. for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
  585. Cell cell=rowList.get(i).getCell(j);
  586. //单元格不为空
  587. if (!Objects.equals(getCellValue(cell), "")) {
  588. if (cell.getCellType()!=CellType.NUMERIC){
  589. //输入金额字段的类型不为数字则提示
  590. throw new KDBizException("第"+(i+1)+"行第"+(j+1)+"列的数据:"+headList.get(i).getCell(j+1).getStringCellValue()+"字段有误,请检查!");
  591. }
  592. }
  593. }
  594. }
  595. }
  596. //人力薪酬(内退)
  597. if (billtype.equals("nckd_salaryentryre"))
  598. {
  599. // flag=headList.get(0).getCell(9).getStringCellValue();
  600. // if (!flag.equals("内退生活费")) {
  601. // throw new KDBizException("上传的文件格式有误,请检查!");
  602. // }
  603. for (int i=0;i<rowList.size();i++) {
  604. //校验金额字段
  605. for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
  606. Cell cell=rowList.get(i).getCell(j);
  607. //单元格不为空
  608. if (!Objects.equals(getCellValue(cell), "")) {
  609. if (cell.getCellType()!=CellType.NUMERIC){
  610. //输入金额字段的类型不为数字则提示
  611. throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
  612. }
  613. }
  614. }
  615. }
  616. }
  617. }
  618. /**
  619. * 对Excel的各个单元格的格式进行判断并转换
  620. */
  621. public String getCellValue(Cell cell) {
  622. String cellValue = "";
  623. if (cell == null) {
  624. return cellValue;
  625. }
  626. // 判断数据的类型
  627. switch (cell.getCellType()) {
  628. case NUMERIC:
  629. //读取数字将不必要的小数点去掉
  630. BigDecimal bigDecimal=new BigDecimal(Double.toString(cell.getNumericCellValue()));
  631. cellValue=bigDecimal.stripTrailingZeros().toPlainString();
  632. break;
  633. case STRING: // 字符串
  634. cellValue = String.valueOf(cell.getStringCellValue()).trim();
  635. break;
  636. case BLANK: // 空值
  637. cellValue = "";
  638. break;
  639. case ERROR: // 故障
  640. cellValue = "未知类型";
  641. break;
  642. default:
  643. cellValue = "未知类型";
  644. break;
  645. }
  646. return cellValue;
  647. }
  648. }