/** * 员工培训课时达成率导出 * @param response * @param startDate * @param endDate */ @Override public void exportTrainingRecord(HttpServletResponse response, String startDate, String endDate) { startDate+="-01"; endDate+="-31"; //获取工号,部门名称,入职时间,员工姓名,员工基本信息表左联用户表,查找在结束日期之前入职的人员 List<AllEmployeeBasicInformation> employeeList=employeeTrainingRecordMapper.getEmployeeMsg(AuthUtil.getTenantId(),""); log.info("获取工号,部门名称,入职时间,员工姓名,employeeList======"+employeeList); //要导出的list List<ExcelTrainingRecord> excelList=new ArrayList<>(); if(Func.isNotEmpty(employeeList)){ for(AllEmployeeBasicInformation basicInfo:employeeList){ ExcelTrainingRecord excelTrainingRecord=new ExcelTrainingRecord(); //获取员工培训记录时长,根据开始和结束时间区间 double sum=employeeTrainingRecordMapper.getEmployeeTrainingHours(AuthUtil.getTenantId(),startDate,endDate,basicInfo.getAccount()); //员工是否在开始时间年之后年份入职 String[]dates=startDate.split("-"); String entryDate=basicInfo.getEntryDate(); String[]entryDates=entryDate.split("-"); String[]endTimes=endDate.split("-"); //开始日期月份 int startMoth=Integer.parseInt(dates[1]); //结束日期月份 int endMoth=Integer.parseInt(endTimes[1]); double hours=0; if(dates[0].equals(entryDates[0])){ //员工是在开始时间年份入职 //获取月份 int entryMoth= Integer.parseInt(entryDates[1]); //如果入职月份大于等于开始月份 if(entryMoth>=startMoth){ //计算入职月份应参加课时数 int dat=Integer.parseInt(entryDates[2]); if(dat==30){ hours=(6.7/30)*1; }else if(dat==31){ hours=(6.7/30)*2; }else { hours=(6.7/30)*(30-dat); } //计算其他月份的培训课时 if((endMoth-entryMoth)>=1){ hours+=6.7*(endMoth-entryMoth); } }else{ //如果入职年份小于开始年份 hours=(endMoth-startMoth+1)*6.7; } }else{ //在开始日期之前入职的 hours=(endMoth-startMoth+1)*6.7; } //判断是否达标 if((sum/hours)>=1){ excelTrainingRecord.setIsAccomplish("是"); }else { excelTrainingRecord.setIsAccomplish("否"); } //保留两位小数 DecimalFormat df= new DecimalFormat("######0.00"); double msg=0; if(hours!=0){ msg=(sum/hours)*100; } String achievingRate=String.valueOf(df.format(msg))+"%"; excelTrainingRecord.setAchievingRate(achievingRate); //应参加课时数 excelTrainingRecord.setTakePartInHours(String.valueOf(df.format(hours))); //实际参加课时数 excelTrainingRecord.setPracticalTakePartInHours(String.valueOf(sum)); //入职日期 excelTrainingRecord.setEntryDate(basicInfo.getEntryDate()); //姓名 excelTrainingRecord.setRealName(basicInfo.getRealName()); //部门名称 excelTrainingRecord.setDepartment(basicInfo.getDepartment()); excelList.add(excelTrainingRecord); } } log.info("员工培训课时达成率导出excelList========"+excelList); ExcelUtil.export(response, "员工"+startDate+"——"+endDate+"培训课时达成率"+ DateUtil.time(), "员工培训课时达成率导出", excelList, ExcelTrainingRecord.class); }