SalaryFileUploadEditPlugin.java 36 KB

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