package fi.em.formPlugin; import kd.bos.bill.AbstractBillPlugIn; import kd.bos.cache.CacheFactory; import kd.bos.cache.TempFileCache; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.exception.KDBizException; import kd.bos.form.control.AttachmentPanel; import kd.bos.form.control.Toolbar; import kd.bos.form.control.events.UploadEvent; import kd.bos.form.control.events.UploadListener; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import org.apache.poi.ss.usermodel.*; import java.io.*; import java.math.BigDecimal; import java.util.*; /** * @author cjz * @date 2024/8/20 16:18 * @description:薪酬计提单上传附件,并将附件中的数据写入分录 */ public class SalaryFileUploadEditPluginCp extends AbstractBillPlugIn implements UploadListener { private static String bos_org = "bos_org"; //业务单元组织标识 private static String bos_adminorg="bos_adminorg";//行政组织标识 //给附件面板添加监听 @Override public void registerListener(EventObject e) { super.registerListener(e); Toolbar attachmentPanel = this.getControl("advcontoolbarap"); attachmentPanel.addUploadListener(this); Toolbar attachmentPanel1 = this.getControl("nckd_advcontoolbarap1"); attachmentPanel1.addUploadListener(this); Toolbar attachmentPanel2 = this.getControl("nckd_advcontoolbarap12"); attachmentPanel2.addUploadListener(this); Toolbar attachmentPanel3 = this.getControl("nckd_advcontoolbarap11"); attachmentPanel3.addUploadListener(this); Toolbar attachmentPanel4 = this.getControl("nckd_advcontoolbarap13"); attachmentPanel4.addUploadListener(this); } @Override public void afterUpload(UploadEvent evt) { String nckd_entrytype=this.getModel().getValue("nckd_entrytype")+""; //解析附件面板 // AttachmentPanel attachmentPanel=this.getControl("nckd_attachment_xc"); // List> attachmentData=attachmentPanel.getAttachmentData(); //获取最新上传的文件路径 String fileurl = evt.getUrls()[0]+""; File ff = new File(fileurl); //获取文件缓存 TempFileCache cache = CacheFactory.getCommonCacheFactory().getTempFileCache(); //从缓存中拿到输入流 InputStream inputStream = null; try { inputStream = new FileInputStream(ff); } catch (FileNotFoundException e) { throw new RuntimeException(e); } String billtype=""; //根据分录类型获取对应分录标识 if ("A".equals(nckd_entrytype)) { billtype="nckd_staffentry"; readExcelByRowOrCell(4,44,inputStream,billtype); }else if ("B".equals(nckd_entrytype)) { billtype="nckd_earlyretiredentry"; readExcelByRowOrCell(4,34,inputStream,billtype); } else if ("C".equals(nckd_entrytype)) { billtype="nckd_retireentry"; readExcelByRowOrCell(4,15,inputStream,billtype); } else if ("D".equals(nckd_entrytype)) { billtype="nckd_salaryentry"; readExcelByRowOrCell(4,78,inputStream,billtype); } else if ("E".equals(nckd_entrytype)) { billtype="nckd_salaryentryre"; readExcelByRowOrCell(4,41,inputStream,billtype); } else if (null==nckd_entrytype) { throw new KDBizException("请选择分录类型"); } } /** * @line execel头行数 * @column excel列数 * @inputStream 文件流 * @nckd_entrytype 分录类型 * @description:读取上传的excel,并将数据写入对应分录中 */ public void readExcelByRowOrCell(int line,int column,InputStream inputStream,String billtype) { try { Workbook wb = WorkbookFactory.create(inputStream); Sheet filesheet=wb.getSheetAt(0);//默认取第一个工作表 //表中存的数据 List rowList=new ArrayList<>(); //表头字段 List headList=new ArrayList<>(); //人力薪酬和薪酬明细等excel分开处理 if (billtype.equals("nckd_salaryentry")) { headList.add(filesheet.getRow(line-3)); }else { headList.add(filesheet.getRow(line-2)); } //读取每行的数据存入list中 for (int i=line;i<=filesheet.getLastRowNum();i++) { //获取每一行 Row row = filesheet.getRow(i); if (null==row.getCell(1)) { break; } //根据字段行循环,没有值的单元格则赋值,防止空指针 for(int j=1;j rowList,String nckd_entry){ //薪酬明细(一般员工)分录字段标识 List nckd_generalemployees =Arrays.asList("nckd_se_institution","nckd_se_empname","nckd_se_empnumber" ,"nckd_se_idnumber","nckd_se_banknumber","nckd_se_unit","nckd_se_org","nckd_se_department","nckd_se_allbasicsry" ,"nckd_se_basicsry","nckd_se_acmsry","nckd_se_reacmsry","nckd_se_bsnrwd","nckd_se_otreward","nckd_se_cmcsbd" ,"nckd_se_otherpysry","nckd_se_clearrwd","nckd_se_awareward","nckd_se_otherdevreward","nckd_se_coldsbad" ,"nckd_se_warmsbad","nckd_se_nursabd","nckd_se_otherallowance","nckd_se_salarypayable","nckd_se_per_endins" ,"nckd_se_per_hopins","nckd_se_per_bhopins","nckd_se_per_ljins","nckd_se_per_hosins","nckd_se_per_cmymey" ,"nckd_se_unionmey","nckd_se_tax","nckd_se_otherreduce","nckd_se_desalary","nckd_se_netsalary","nckd_se_cpy_endins" ,"nckd_se_cpy_hopins","nckd_se_cpy_bhopins","nckd_se_cpy_ljins","nckd_se_cpy_birthins","nckd_se_cpy_dmgins","nckd_se_cpy_hosins" ,"nckd_se_cpy_cmymey"); //薪酬明细(内退)分录字段标识 List nckd_earlyretired=Arrays.asList("nckd_ee_institution","nckd_ee_empname","nckd_ee_empnumber","nckd_ee_idnumber","nckd_ee_banknumber" ,"nckd_ee_unit","nckd_ee_org","nckd_ee_department","nckd_ee_allbasicsry","nckd_ee_allowance","nckd_ee_orallowance","nckd_ee_per_endins" ,"nckd_ee_otherreduce","nckd_ee_cpy_endins","nckd_ee_cpy_bhopins","nckd_ee_cpy_ljins","nckd_ee_cpy_birthins","nckd_ee_cpy_dmgins" ,"nckd_ee_cpy_cmymey","nckd_ee_cpy_hosins","nckd_ee_taxt","nckd_ee_alltaxt","nckd_ee_charge","nckd_ee_finallsys" ,"nckd_ee_per_ljins","nckd_ee_per_hopins","nckd_ee_per_bhopins","nckd_ee_per_hosins","nckd_ee_per_cmymey","nckd_ee_unionmey" ); //薪酬明细(退休)分录字段标识 List nckd_retired=Arrays.asList("nckd_re_institution","nckd_re_empname","nckd_re_empnumber","nckd_re_idnumber","nckd_re_banknumber" ,"nckd_re_unit","nckd_re_org","nckd_re_department","nckd_re_livallowance","nckd_re_otherallowance","nckd_re_reward" ,"nckd_re_salarypayable","nckd_re_desalary","nckd_re_netsalary"); //人力薪酬分录标识 List nckd_pay=Arrays.asList("nckd_sae_institution","nckd_sae_empname","nckd_sae_jobid","nckd_sae_idnumber","nckd_sae_banknumber","nckd_sae_company" ,"nckd_sae_institutions","nckd_sae_department","nckd_sae_levelsry","nckd_sae_dutiessry","nckd_sae_updutiessry","nckd_sae_workyearsry" ,"nckd_sae_depyear","nckd_sae_eduasry","nckd_sae_transry","nckd_sae_jobsry","nckd_sae_basicsry","nckd_sae_allbasicsry","nckd_sae_acmsry" ,"nckd_sae_mountsry","nckd_sae_reacmsry","nckd_sae_balyearsry","nckd_sae_blastyearsry","nckd_sae_allsry","nckd_sae_bsnrwd","nckd_sae_cpmrwd" ,"nckd_sae_psrwd","nckd_sae_comrwd","nckd_sae_cardrwd","nckd_sae_intwrd","nckd_sae_clearrwd","nckd_sae_allrwd","nckd_sae_retainsry" ,"nckd_sae_reward","nckd_sae_otreward","nckd_sae_cmcsbd","nckd_sae_trfsbd","nckd_sae_housesbd","nckd_sae_warmsbd","nckd_sae_edusbd" ,"nckd_sae_trafficsbd","nckd_sae_othersbd","nckd_sae_reduce","nckd_sae_othersry","nckd_sae_sickreduce","nckd_sae_sickhopreduce" ,"nckd_sae_eventreduce","nckd_sae_afwreduce","nckd_sae_latereduce","nckd_sae_cwasry","nckd_sae_cwareduce","nckd_sae_dgreduce" ,"nckd_sae_dcpreduce","nckd_sae_badreduce","nckd_sae_otherreduce","nckd_sae_allreduce","nckd_sae_lastsry","nckd_sae_allpay" ,"nckd_sae_per_endins","nckd_sae_per_ljins","nckd_sae_per_hopins","nckd_sae_per_bhopins","nckd_sae_per_hosins","nckd_sae_per_cmymey" ,"nckd_sae_per_ins","nckd_sae_unionmey","nckd_sae_tax","nckd_sae_allamount","nckd_sae_cash","nckd_sae_wages","nckd_sae_cpy_endins" ,"nckd_sae_cpy_hopins","nckd_sae_cpy_bhopins","nckd_sae_cpy_birthins","nckd_sae_cpy_ljins","nckd_sae_cpy_dmgins","nckd_sae_cpy_hosins" ,"nckd_sae_cpy_cmymey"); //人力薪酬内退分录标识 List nckd_payretird=Arrays.asList("nckd_see_institution","nckd_see_empname","nckd_see_jobid","nckd_see_idnumber" ,"nckd_see_banknumber","nckd_see_company","nckd_see_institutions","nckd_see_department","nckd_see_allbasicsry" ,"nckd_see_allowance","nckd_see_otherallowanc","nckd_see_per_endins","nckd_see_per_ljins","nckd_see_per_hopins" ,"nckd_see_per_bhopins","nckd_see_per_hosins","nckd_see_per_cmymey","nckd_see_unionmey","nckd_see_tax" ,"nckd_see_desalary","nckd_see_netsalary","nckd_see_otherreduce","nckd_see_cpy_endins","nckd_see_cpy_bhopins" ,"nckd_see_cpy_ljins","nckd_see_cpy_birthins","nckd_see_cpy_dmgins","nckd_see_cpy_cmymey","nckd_see_cpy_hosins" ,"nckd_see_taxt","nckd_see_alltaxt","nckd_see_charge","nckd_see_finallsys","nckd_see_cpy_oldins","nckd_see_cpy_hop" ,"nckd_see_cpy_bhop","nckd_see_cpy_bir","nckd_see_cpy_ljob","nckd_see_cpy_dwork","nckd_see_cpy_hos","nckd_see_cpy_cmy"); //将excel数据存入薪酬明细(一般员工)分录 if(nckd_entry.equals("nckd_staffentry")) { //先清空分录 this.getModel().deleteEntryData("nckd_staffentry"); for (int i=0;i< rowList.size();i++) { //新增动态单据分录 int rowIndex = this.getModel().createNewEntryRow(nckd_entry); //发薪机构 if (!getCellValue(rowList.get(i).getCell(1)).isEmpty()) { QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(1))); //获取发薪机构 DynamicObject entrycostdept= BusinessDataServiceHelper .loadSingle(bos_org,"id,entrycostdept",new QFilter[]{filter}); this.getModel().setValue(nckd_generalemployees.get(0),entrycostdept,rowIndex); } //员工名称 if (!getCellValue(rowList.get(i).getCell(2)).isEmpty()){ this.getModel().setValue(nckd_generalemployees.get(1),getCellValue(rowList.get(i).getCell(2)),rowIndex); } //员工工号 if (!getCellValue(rowList.get(i).getCell(3)).isEmpty()){ this.getModel().setValue(nckd_generalemployees.get(2),getCellValue(rowList.get(i).getCell(3)),rowIndex); } //证件号 if (!getCellValue(rowList.get(i).getCell(4)).isEmpty()){ this.getModel().setValue(nckd_generalemployees.get(3),getCellValue(rowList.get(i).getCell(4)),rowIndex); } //银行账号 if (!getCellValue(rowList.get(i).getCell(5)).isEmpty()){ this.getModel().setValue(nckd_generalemployees.get(4),getCellValue(rowList.get(i).getCell(5)),rowIndex); } //所在单位 if (!getCellValue(rowList.get(i).getCell(6)).isEmpty()){ QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(6))); //获取所在单位 DynamicObject entrycostdept= BusinessDataServiceHelper .loadSingle(bos_adminorg,"id",new QFilter[]{filter}); this.getModel().setValue(nckd_generalemployees.get(5),entrycostdept,rowIndex); } //一级机构 if (!getCellValue(rowList.get(i).getCell(7)).isEmpty()) { QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(7))); //获取部门 DynamicObject entrycostdept= BusinessDataServiceHelper .loadSingle(bos_adminorg,"id,entrycostdept",new QFilter[]{filter}); this.getModel().setValue(nckd_generalemployees.get(6),entrycostdept,rowIndex); } //所在部门 if (!getCellValue(rowList.get(i).getCell(8)).isEmpty()) { QFilter filter=new QFilter("number", QFilter.equals,getCellValue(rowList.get(i).getCell(8))); //获取部门 DynamicObject entrycostdept= BusinessDataServiceHelper .loadSingle(bos_adminorg,"id",new QFilter[]{filter}); this.getModel().setValue(nckd_generalemployees.get(7),entrycostdept,rowIndex); } //金额类型字段赋值 for (int j=8;j headList,List rowList,String billtype) { //获取对应单据的字段名 String flag; //薪酬明细(一般员工) if (billtype.equals("nckd_staffentry")) { //获取单据的字段名 // flag=headList.get(0).getCell(9).getStringCellValue(); // if (!flag.equals("基本工资(1)")) { // throw new KDBizException("上传的文件格式有误,请检查!"); // } for (int i=0;i