SalaryFileUploadEditPlugin.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  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,31,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 (null==nckd_entrytype) {
  65. throw new KDBizException("请选择分录类型");
  66. }
  67. }
  68. /**
  69. * @line execel行数
  70. * @column excel列数
  71. * @inputStream 文件流
  72. * @nckd_entrytype 分录类型
  73. * @description:读取上传的excel,并将数据写入对应分录中
  74. */
  75. public void readExcelByRowOrCell(int line,int column,InputStream inputStream,String billtype)
  76. {
  77. try {
  78. Workbook wb = WorkbookFactory.create(inputStream);
  79. Sheet filesheet=wb.getSheetAt(0);//默认取第一个工作表
  80. //表中存的数据
  81. List<Row> rowList=new ArrayList<>();
  82. //表头字段
  83. List<Row> headList=new ArrayList<>();
  84. //人力薪酬和薪酬明细等excel分开处理
  85. if (billtype.equals("nckd_salaryentry")) {
  86. headList.add(filesheet.getRow(line-3));
  87. }else {
  88. headList.add(filesheet.getRow(line-2));
  89. }
  90. //读取每行的数据存入list中
  91. for (int i=line;i<=filesheet.getLastRowNum();i++) {
  92. //获取每一行
  93. Row row = filesheet.getRow(i);
  94. if (null==row.getCell(1)) {
  95. break;
  96. }
  97. //根据字段行循环,没有值的单元格则赋值,防止空指针
  98. for(int j=1;j<column;j++){
  99. Cell cell=row.getCell(j);
  100. if (null==cell) {
  101. row.createCell(j);
  102. }
  103. }
  104. rowList.add(row);
  105. }
  106. //excel数据校验
  107. dataVerify(headList,rowList,billtype);
  108. //分录赋值
  109. createNewRow(rowList,billtype);
  110. } catch (IOException e) {
  111. throw new RuntimeException(e);
  112. }
  113. }
  114. /**
  115. * @rowList 读取的excel数据
  116. * @nckd_entrytype 分录标识
  117. * @description:根据分录类型不同,赋值分录
  118. */
  119. public void createNewRow(List<Row> rowList,String nckd_entry){
  120. //薪酬明细(一般员工)分录字段标识
  121. List<String> nckd_generalemployees =Arrays.asList("nckd_se_institution","nckd_se_empname","nckd_se_empnumber"
  122. ,"nckd_se_idnumber","nckd_se_banknumber","nckd_se_unit","nckd_se_org","nckd_se_department","nckd_se_allbasicsry"
  123. ,"nckd_se_basicsry","nckd_se_acmsry","nckd_se_reacmsry","nckd_se_bsnrwd","nckd_se_otreward","nckd_se_cmcsbd"
  124. ,"nckd_se_otherpysry","nckd_se_clearrwd","nckd_se_awareward","nckd_se_otherdevreward","nckd_se_coldsbad"
  125. ,"nckd_se_warmsbad","nckd_se_nursabd","nckd_se_otherallowance","nckd_se_salarypayable","nckd_se_per_endins"
  126. ,"nckd_se_per_hopins","nckd_se_per_bhopins","nckd_se_per_ljins","nckd_se_per_hosins","nckd_se_per_cmymey"
  127. ,"nckd_se_unionmey","nckd_se_tax","nckd_se_otherreduce","nckd_se_desalary","nckd_se_netsalary","nckd_se_cpy_endins"
  128. ,"nckd_se_cpy_hopins","nckd_se_cpy_bhopins","nckd_se_cpy_ljins","nckd_se_cpy_birthins","nckd_se_cpy_dmgins","nckd_se_cpy_hosins"
  129. ,"nckd_se_cpy_cmymey");
  130. //薪酬明细(内退)分录字段标识
  131. List<String> nckd_earlyretired=Arrays.asList("nckd_ee_institution","nckd_ee_emptype","nckd_ee_empnumber","nckd_ee_empname"
  132. ,"nckd_ee_org","nckd_ee_department","nckd_ee_idnumber","nckd_ee_cost","nckd_ee_allbasicsry","nckd_ee_allowance"
  133. ,"nckd_ee_otherallowance","nckd_ee_per_endins","nckd_ee_per_ljins","nckd_ee_per_hopins","nckd_ee_per_bhopins"
  134. ,"nckd_ee_per_hosins","nckd_ee_per_cmymey","nckd_ee_unionmey","nckd_ee_tax","nckd_ee_otherreduce","nckd_ee_desalary"
  135. ,"nckd_ee_netsalary","nckd_ee_cpy_endins","nckd_ee_cpy_hopins","nckd_ee_cpy_bhopins","nckd_ee_cpy_ljins","nckd_ee_cpy_birthins"
  136. ,"nckd_ee_cpy_dmgins","nckd_ee_cpy_hosins","nckd_ee_cpy_cmymey");
  137. //薪酬明细(退休)分录字段标识
  138. List<String> nckd_retired=Arrays.asList("nckd_re_institution","nckd_re_emptype","nckd_re_empnumber","nckd_re_empname","nckd_re_org"
  139. ,"nckd_re_department","nckd_re_idnumber","nckd_re_cost","nckd_re_livallowance","nckd_re_otherallowance","nckd_re_reward"
  140. ,"nckd_re_salarypayable","nckd_re_desalary","nckd_re_netsalary");
  141. //人力薪酬分录标识
  142. List<String> nckd_pay=Arrays.asList("nckd_sae_institution","nckd_sae_empname","nckd_sae_jobid","nckd_sae_idnumber","nckd_sae_company"
  143. ,"nckd_sae_institutions","nckd_sae_department","nckd_sae_levelsry","nckd_sae_dutiessry","nckd_sae_updutiessry","nckd_sae_workyearsry"
  144. ,"nckd_sae_depyear","nckd_sae_eduasry","nckd_sae_transry","nckd_sae_jobsry","nckd_sae_basicsry","nckd_sae_allbasicsry","nckd_sae_acmsry"
  145. ,"nckd_sae_mountsry","nckd_sae_reacmsry","nckd_sae_balyearsry","nckd_sae_blastyearsry","nckd_sae_allsry","nckd_sae_bsnrwd","nckd_sae_cpmrwd"
  146. ,"nckd_sae_psrwd","nckd_sae_comrwd","nckd_sae_cardrwd","nckd_sae_intwrd","nckd_sae_clearrwd","nckd_sae_allrwd","nckd_sae_retainsry"
  147. ,"nckd_sae_reward","nckd_sae_otreward","nckd_sae_cmcsbd","nckd_sae_trfsbd","nckd_sae_housesbd","nckd_sae_warmsbd","nckd_sae_edusbd"
  148. ,"nckd_sae_trafficsbd","nckd_sae_othersbd","nckd_sae_reduce","nckd_sae_othersry","nckd_sae_sickreduce","nckd_sae_sickhopreduce"
  149. ,"nckd_sae_eventreduce","nckd_sae_afwreduce","nckd_sae_latereduce","nckd_sae_cwasry","nckd_sae_cwareduce","nckd_sae_dgreduce"
  150. ,"nckd_sae_dcpreduce","nckd_sae_badreduce","nckd_sae_otherreduce","nckd_sae_allreduce","nckd_sae_lastsry","nckd_sae_allpay"
  151. ,"nckd_sae_per_endins","nckd_sae_per_ljins","nckd_sae_per_hopins","nckd_sae_per_bhopins","nckd_sae_per_hosins","nckd_sae_per_cmymey"
  152. ,"nckd_sae_per_ins","nckd_sae_unionmey","nckd_sae_tax","nckd_sae_allamount","nckd_sae_cash","nckd_sae_wages","nckd_sae_cpy_endins"
  153. ,"nckd_sae_cpy_hopins","nckd_sae_cpy_bhopins","nckd_sae_cpy_birthins","nckd_sae_cpy_ljins","nckd_sae_cpy_dmgins","nckd_sae_cpy_hosins"
  154. ,"nckd_sae_cpy_cmymey");
  155. //将excel数据存入薪酬明细(一般员工)分录
  156. if(nckd_entry.equals("nckd_staffentry")) {
  157. //先清空分录
  158. this.getModel().deleteEntryData("nckd_staffentry");
  159. for (int i=0;i< rowList.size();i++) {
  160. //新增动态单据分录
  161. int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
  162. //发薪机构
  163. if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
  164. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
  165. //获取发薪机构
  166. DynamicObject entrycostdept= BusinessDataServiceHelper
  167. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  168. this.getModel().setValue(nckd_generalemployees.get(0),entrycostdept,rowIndex);
  169. }
  170. //员工名称
  171. if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
  172. this.getModel().setValue(nckd_generalemployees.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
  173. }
  174. //员工工号
  175. if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
  176. this.getModel().setValue(nckd_generalemployees.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
  177. }
  178. //证件号
  179. if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
  180. this.getModel().setValue(nckd_generalemployees.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
  181. }
  182. //银行账号
  183. if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
  184. this.getModel().setValue(nckd_generalemployees.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex);
  185. }
  186. //所在单位
  187. if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()){
  188. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
  189. //获取所在单位
  190. DynamicObject entrycostdept= BusinessDataServiceHelper
  191. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  192. this.getModel().setValue(nckd_generalemployees.get(5),entrycostdept,rowIndex);
  193. }
  194. //一级机构
  195. if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()) {
  196. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
  197. //获取部门
  198. DynamicObject entrycostdept= BusinessDataServiceHelper
  199. .loadSingle(bos_adminorg,"id,entrycostdept",new QFilter[]{filter});
  200. this.getModel().setValue(nckd_generalemployees.get(6),entrycostdept,rowIndex);
  201. }
  202. //所在部门
  203. if (!getCellValue(rowList.get(i).getCell(8)).isEmpty()) {
  204. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
  205. //获取部门
  206. DynamicObject entrycostdept= BusinessDataServiceHelper
  207. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  208. this.getModel().setValue(nckd_generalemployees.get(7),entrycostdept,rowIndex);
  209. }
  210. //金额类型字段赋值
  211. for (int j=8;j<nckd_generalemployees.size();j++) {
  212. Cell cell=rowList.get(i).getCell(j+1);
  213. //空值则跳过
  214. if (!Objects.equals(getCellValue(cell), "")) {
  215. //金额字段转化为BigDecimal赋值进分录中
  216. String string=getCellValue(cell);
  217. BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
  218. this.getModel().setValue(nckd_generalemployees.get(j),bigDecimal,rowIndex);
  219. }
  220. }
  221. //刷新分录
  222. this.getView().updateView("nckd_staffentry");
  223. }
  224. }
  225. //薪酬明细(内退)分录
  226. if (nckd_entry.equals("nckd_earlyretiredentry")) {
  227. this.getModel().deleteEntryData("nckd_earlyretiredentry");
  228. for (int i=0;i<rowList.size();i++) {
  229. //新增动态单据分录
  230. int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
  231. //发薪机构
  232. if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
  233. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
  234. //获取发薪机构
  235. DynamicObject entrycostdept= BusinessDataServiceHelper
  236. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  237. this.getModel().setValue(nckd_earlyretired.get(0),entrycostdept,rowIndex);
  238. }
  239. //员工类别
  240. if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
  241. this.getModel().setValue(nckd_earlyretired.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
  242. }
  243. //员工编号
  244. if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
  245. this.getModel().setValue(nckd_earlyretired.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
  246. }
  247. //姓名
  248. if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
  249. this.getModel().setValue(nckd_earlyretired.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
  250. }
  251. //所在机构
  252. if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
  253. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(5)));
  254. DynamicObject entrycostdept= BusinessDataServiceHelper
  255. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  256. this.getModel().setValue(nckd_earlyretired.get(4),entrycostdept,rowIndex);
  257. }
  258. //所在部门
  259. if (!getCellValue(rowList.get(i).getCell(6)).isEmpty())
  260. {
  261. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
  262. DynamicObject entrycostdept= BusinessDataServiceHelper
  263. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  264. this.getModel().setValue(nckd_earlyretired.get(5),entrycostdept,rowIndex);
  265. }
  266. //身份证号
  267. if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()){
  268. this.getModel().setValue(nckd_earlyretired.get(6),getCellValue(rowList.get(i).getCell(6)),rowIndex);
  269. }
  270. //成本归结单元
  271. if (!getCellValue(rowList.get(i).getCell(8)).isEmpty())
  272. {
  273. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
  274. DynamicObject entrycostdept= BusinessDataServiceHelper
  275. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  276. this.getModel().setValue(nckd_earlyretired.get(7),entrycostdept,rowIndex);
  277. }
  278. //金额类型字段赋值
  279. for (int j=8;j<nckd_earlyretired.size();j++) {
  280. Cell cell=rowList.get(i).getCell(j+1);
  281. //空值则跳过
  282. if (!Objects.equals(getCellValue(cell), "")) {
  283. //金额字段转化为BigDecimal赋值进分录中
  284. String string=getCellValue(cell);
  285. BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
  286. this.getModel().setValue(nckd_earlyretired.get(j),bigDecimal,rowIndex);
  287. }
  288. }
  289. }
  290. }
  291. //薪酬明细(退休)分录
  292. if(nckd_entry.equals("nckd_retireentry")) {
  293. this.getModel().deleteEntryData("nckd_retireentry");
  294. for (int i=0;i<rowList.size();i++) {
  295. //新增动态单据分录
  296. int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
  297. //发薪机构
  298. if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
  299. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
  300. //获取发薪机构
  301. DynamicObject entrycostdept= BusinessDataServiceHelper
  302. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  303. this.getModel().setValue(nckd_retired.get(0),entrycostdept,rowIndex);
  304. }
  305. //员工类别
  306. if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
  307. this.getModel().setValue(nckd_retired.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
  308. }
  309. //员工编号
  310. if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
  311. this.getModel().setValue(nckd_retired.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
  312. }
  313. //姓名
  314. if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
  315. this.getModel().setValue(nckd_retired.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
  316. }
  317. //所在机构
  318. if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){
  319. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(5)));
  320. //获取部门
  321. DynamicObject entrycostdept= BusinessDataServiceHelper
  322. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  323. this.getModel().setValue(nckd_retired.get(4),entrycostdept,rowIndex);
  324. }
  325. //所在部门
  326. if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()) {
  327. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
  328. DynamicObject entrycostdept= BusinessDataServiceHelper
  329. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  330. this.getModel().setValue(nckd_retired.get(5),entrycostdept,rowIndex);
  331. }
  332. //身份证号
  333. if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()){
  334. this.getModel().setValue(nckd_retired.get(6),getCellValue(rowList.get(i).getCell(6)),rowIndex);
  335. }
  336. //成本归结单元
  337. if (!getCellValue(rowList.get(i).getCell(8)).isEmpty()) {
  338. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8)));
  339. DynamicObject entrycostdept= BusinessDataServiceHelper
  340. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  341. this.getModel().setValue(nckd_retired.get(7),entrycostdept,rowIndex);
  342. }
  343. //金额类型字段赋值
  344. for (int j=8;j<nckd_retired.size();j++) {
  345. Cell cell=rowList.get(i).getCell(j+1);
  346. //空值则跳过
  347. if (!Objects.equals(getCellValue(cell), "")) {
  348. //金额字段转化为BigDecimal赋值进分录中
  349. String string=getCellValue(cell);
  350. BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
  351. this.getModel().setValue(nckd_retired.get(j),bigDecimal,rowIndex);
  352. }
  353. }
  354. }
  355. }
  356. //人力薪酬分录
  357. if(nckd_entry.equals("nckd_salaryentry")) {
  358. this.getModel().deleteEntryData("nckd_salaryentry");
  359. for (int i=0;i<rowList.size();i++) {
  360. //新增动态单据分录
  361. int rowIndex = this.getModel().createNewEntryRow(nckd_entry);
  362. //发薪机构
  363. if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) {
  364. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1)));
  365. //获取发薪机构
  366. DynamicObject entrycostdept= BusinessDataServiceHelper
  367. .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter});
  368. this.getModel().setValue(nckd_pay.get(0),entrycostdept,rowIndex);
  369. }
  370. //姓名
  371. if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){
  372. this.getModel().setValue(nckd_pay.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex);
  373. }
  374. //工号
  375. if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){
  376. this.getModel().setValue(nckd_pay.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex);
  377. }
  378. //证件号
  379. if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){
  380. this.getModel().setValue(nckd_pay.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex);
  381. }
  382. //所在单位
  383. if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()) {
  384. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(5)));
  385. DynamicObject entrycostdept= BusinessDataServiceHelper
  386. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  387. this.getModel().setValue(nckd_pay.get(4),entrycostdept,rowIndex);
  388. }
  389. //一级机构
  390. if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()) {
  391. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6)));
  392. DynamicObject entrycostdept= BusinessDataServiceHelper
  393. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  394. this.getModel().setValue(nckd_pay.get(5),entrycostdept,rowIndex);
  395. }
  396. //所在部门
  397. if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()) {
  398. QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7)));
  399. DynamicObject entrycostdept= BusinessDataServiceHelper
  400. .loadSingle(bos_adminorg,"id",new QFilter[]{filter});
  401. this.getModel().setValue(nckd_pay.get(6),entrycostdept,rowIndex);
  402. }
  403. //金额类型字段赋值
  404. for (int j=7;j<nckd_pay.size();j++) {
  405. Cell cell=rowList.get(i).getCell(j+1);
  406. //空值则跳过
  407. if (!Objects.equals(getCellValue(cell), "")) {
  408. //金额字段转化为BigDecimal赋值进分录中
  409. String string=getCellValue(cell);
  410. BigDecimal bigDecimal= BigDecimal.valueOf(Double.parseDouble(string));
  411. this.getModel().setValue(nckd_pay.get(j),bigDecimal,rowIndex);
  412. }
  413. }
  414. }
  415. }
  416. }
  417. /**
  418. * @headList 读取的excel表头数据
  419. * @rowList 读取excel的表数据
  420. * @billtype 分录标识
  421. * @description:校验excel数据是否合法,传入的excel是否为正确的格式
  422. */
  423. public void dataVerify(List<Row> headList,List<Row> rowList,String billtype) {
  424. //获取对应单据的字段名
  425. String flag;
  426. //薪酬明细(一般员工)
  427. if (billtype.equals("nckd_staffentry")) {
  428. //获取单据的字段名
  429. flag=headList.get(0).getCell(9).getStringCellValue();
  430. if (!flag.equals("基本工资")) {
  431. throw new KDBizException("上传的文件格式有误,请检查!");
  432. }
  433. for (int i=0;i<rowList.size();i++) {
  434. //校验金额字段
  435. for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
  436. Cell cell=rowList.get(i).getCell(j);
  437. //单元格不为空
  438. if (!Objects.equals(getCellValue(cell), "")) {
  439. if (cell.getCellType()!=CellType.NUMERIC){
  440. //输入金额字段的类型不为数字则提示
  441. throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
  442. }
  443. }
  444. }
  445. }
  446. }
  447. //薪酬明细(内退)
  448. if (billtype.equals("nckd_earlyretiredentry")) {
  449. flag=headList.get(0).getCell(9).getStringCellValue();
  450. if (!flag.equals("内退员工基本工资")) {
  451. throw new KDBizException("上传的文件格式有误,请检查!");
  452. }
  453. for (int i=0;i<rowList.size();i++) {
  454. //校验金额字段
  455. for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
  456. Cell cell=rowList.get(i).getCell(j);
  457. //单元格不为空
  458. if (!Objects.equals(getCellValue(cell), "")) {
  459. if (cell.getCellType()!=CellType.NUMERIC){
  460. //输入金额字段的类型不为数字则提示
  461. throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
  462. }
  463. }
  464. }
  465. }
  466. }
  467. //薪酬明细(退休)
  468. if (billtype.equals("nckd_retireentry")) {
  469. flag=headList.get(0).getCell(9).getStringCellValue();
  470. if (!flag.equals("退休员工生活补贴")) {
  471. throw new KDBizException("上传的文件格式有误,请检查!");
  472. }
  473. for (int i=0;i<rowList.size();i++) {
  474. //校验金额字段
  475. for (int j=9;j<rowList.get(i).getLastCellNum();j++) {
  476. Cell cell=rowList.get(i).getCell(j);
  477. //单元格不为空
  478. if (!Objects.equals(getCellValue(cell), "")) {
  479. if (cell.getCellType()!=CellType.NUMERIC){
  480. //输入金额字段的类型不为数字则提示
  481. throw new KDBizException("第"+(i+1)+"行第"+j+"列的数据:"+headList.get(i).getCell(j).getStringCellValue()+"字段有误,请检查!");
  482. }
  483. }
  484. }
  485. }
  486. }
  487. //人力薪酬
  488. if (billtype.equals("nckd_salaryentry")) {
  489. flag=headList.get(0).getCell(9).getStringCellValue();
  490. if (!flag.equals("职务工资")) {
  491. throw new KDBizException("上传的文件格式有误,请检查!");
  492. }
  493. for (int i=0;i<rowList.size();i++) {
  494. //校验金额字段
  495. for (int j=8;j<rowList.get(i).getLastCellNum();j++) {
  496. Cell cell=rowList.get(i).getCell(j);
  497. //单元格不为空
  498. if (!Objects.equals(getCellValue(cell), "")) {
  499. if (cell.getCellType()!=CellType.NUMERIC){
  500. //输入金额字段的类型不为数字则提示
  501. throw new KDBizException("第"+(i+1)+"行第"+(j+1)+"列的数据:"+headList.get(i).getCell(j+1).getStringCellValue()+"字段有误,请检查!");
  502. }
  503. }
  504. }
  505. }
  506. }
  507. }
  508. /**
  509. * 对Excel的各个单元格的格式进行判断并转换
  510. */
  511. public String getCellValue(Cell cell) {
  512. String cellValue = "";
  513. if (cell == null) {
  514. return cellValue;
  515. }
  516. // 判断数据的类型
  517. switch (cell.getCellType()) {
  518. case NUMERIC:
  519. //读取数字将不必要的小数点去掉
  520. BigDecimal bigDecimal=new BigDecimal(Double.toString(cell.getNumericCellValue()));
  521. cellValue=bigDecimal.stripTrailingZeros().toPlainString();
  522. break;
  523. case STRING: // 字符串
  524. cellValue = String.valueOf(cell.getStringCellValue()).trim();
  525. break;
  526. case BLANK: // 空值
  527. cellValue = "";
  528. break;
  529. case ERROR: // 故障
  530. cellValue = "未知类型";
  531. break;
  532. default:
  533. cellValue = "未知类型";
  534. break;
  535. }
  536. return cellValue;
  537. }
  538. }