package cn.com.lzt.attendance.controller; import cn.com.lzt.arrangeduty.dto.ProjectDepartDto; import cn.com.lzt.attendance.dao.AttendanceStatsMinidaoDao; import cn.com.lzt.attendance.dto.AttendanceStatasDto; import cn.com.lzt.attendance.service.AttendanceStatsServiceI; import cn.com.lzt.common.entity.ChartMultLineDto; import cn.com.lzt.common.entity.ChartSeriesDto; import cn.com.lzt.common.entity.DataDto; import cn.com.lzt.common.entity.UserRoleDto; import cn.com.lzt.common.util.Constants; import cn.com.lzt.common.util.DataUtil; import cn.com.lzt.common.util.ExportExcel; import cn.com.lzt.dialogDeal.service.DialogDealServiceI; import org.apache.log4j.Logger; import org.jeecgframework.core.common.controller.BaseController; import org.jeecgframework.core.util.JeecgDataAutorUtils; import org.jeecgframework.core.util.ResourceUtil; import org.jeecgframework.core.util.StringUtil; import org.jeecgframework.minidao.pojo.MiniDaoPage; import org.jeecgframework.web.system.pojo.base.TSUser; import org.jeecgframework.web.system.service.SystemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Validator; import java.util.*; /** * @Title: Controller * @Description: 考勤统计 * @author onlineGenerator * @date 2017-10-24 16:38:50 * @version V1.0 * */ @Controller @RequestMapping("/attendanceStatsController") public class AttendanceStatsController extends BaseController { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(AttendanceStatsController.class); //用户浏览器统计分析的国际化KEY private static final String USER_BROWSER_ANALYSIS = "user.browser.analysis"; @Autowired private AttendanceStatsServiceI attendanceStatsServiceI; @Autowired DialogDealServiceI dialogDealServiceI; @Autowired private SystemService systemService; @Autowired private Validator validator; @Autowired private AttendanceStatsMinidaoDao statsMinidaoDao; /** * 考勤统计页面 * * @return */ @RequestMapping(params = "attendanceStats") public ModelAndView statisticTabs(HttpServletRequest request) { ModelAndView mav = new ModelAndView(); Calendar c = Calendar.getInstance(); mav.addObject("curYear",c.get(Calendar.YEAR)+""); int month = c.get(Calendar.MONTH); if(month > 9){ mav.addObject("curMonth", c.get(Calendar.MONTH)+""); }else if(month == 0){ mav.addObject("curYear",(c.get(Calendar.YEAR)-1)+""); mav.addObject("curMonth", "12"); }else{ mav.addObject("curMonth", "0"+c.get(Calendar.MONTH)); } TSUser user = (TSUser) request.getSession().getAttribute(ResourceUtil.LOCAL_CLINET_USER); //默认HR权限 String rolefalg ="1"; //查询用户角色 String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString(); List userRolelist = statsMinidaoDao.getUserRoleList(user.getId(),authSql); for(UserRoleDto urdto : userRolelist){ if(Constants.USER_ROLE_HR.contains(urdto.getRolecode())){ rolefalg = "1"; break; } if(Constants.USER_ROLE_DEPT.contains(urdto.getRolecode())){ rolefalg = "2"; break; } } if(rolefalg.equals("2")){ List projectDepartDtoList=dialogDealServiceI.getProjectDepartByUserId(); mav.addObject("departList", projectDepartDtoList); } mav.addObject("roleFlag", rolefalg); mav.setViewName("cn/com/lzt/attendanceStats/attendanceStats"); return mav; } /** * 考期统计数据json * @param request * @param statasEntity * @return */ @RequestMapping(params="attendanceStatsData") @ResponseBody public Map attendandceData(HttpServletRequest request,AttendanceStatasDto statasEntity) { Map result = new HashMap(); List xAxisData = new ArrayList(); List yearMonths = new ArrayList(); List statsList = new ArrayList(); //如果是月频,需要查询某年某月 if(statasEntity.getAttType() == 0){ yearMonths.add(statasEntity.getAttYear()+"-"+statasEntity.getAttMonth()); }else if(statasEntity.getAttType() == 1){ yearMonths = DataUtil.getYearMonthList(statasEntity.getAttYear(), statasEntity.getAttQuarters()); } statasEntity.setYearMonthList(yearMonths); String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString(); MiniDaoPage list = new MiniDaoPage(); if(!StringUtil.isEmpty(statasEntity.getPid())){ list = statsMinidaoDao.attendanceStatsPdData(statasEntity, authSql); statsList = list.getResults(); for(AttendanceStatasDto stats : statsList){ xAxisData.add(stats.getPidName()); } }else{ list = statsMinidaoDao.attendanceStatsData(statasEntity, authSql); statsList = list.getResults(); for(AttendanceStatasDto stats : statsList){ xAxisData.add(stats.getPjName()); } } ArrayList series = new ArrayList();//series值 ChartSeriesDto csdto = new ChartSeriesDto(); csdto.setName("出勤率(%)"); csdto.setType("bar"); csdto.setBarMaxWidth(30); List datalist = new ArrayList(); for(int i= 0 ; i < statsList.size() ; i++){ DataDto dd = new DataDto(); if(!StringUtil.isEmpty(statasEntity.getPid())){ dd.setId(statsList.get(i).getDeptId()); }else{ dd.setId(statsList.get(i).getPid()); } dd.setValue(DataUtil.getFormatDecimailTwo(statsList.get(i).getAttendanceRate())); datalist.add(dd); } csdto.setData(datalist.toArray()); series.add(csdto); ChartMultLineDto cmlDto = new ChartMultLineDto(); cmlDto.setxAxisData(xAxisData.toArray()); cmlDto.setSeries(series); if( statsList== null || statsList.size() == 0){ cmlDto.setNoData(true); } result.put("cdata", cmlDto); result.put("tdata", statsList); request.getSession().setAttribute("attendanceStats", statsList); return result; } /** * 考勤统计年度下钻 * @param request * @param statasEntity * @return */ @RequestMapping(params="attendandceYearInto") @ResponseBody public Map attendandceYearInto(HttpServletRequest request,AttendanceStatasDto statasEntity) { Map result = new HashMap(); String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString(); MiniDaoPage list = statsMinidaoDao.attendandceYearInfo(statasEntity, authSql); List statsList = list.getResults(); List xAxisData = DataUtil.getMonList(); ArrayList series = new ArrayList();//series值 ChartSeriesDto csdto = new ChartSeriesDto(); csdto.setName("出勤率"); csdto.setType("line"); csdto.setBarMaxWidth(30); List datalist = new ArrayList(); for(String s : xAxisData){ Boolean flag = false; for(int i= 0 ; i < statsList.size() ; i++){ if(statsList.get(i).getYearMonth().substring(5, 7).equals(s)){ datalist.add(DataUtil.getFormatDecimailTwo(statsList.get(i).getAttendanceRate())); flag = true; } } if(!flag){ datalist.add(null); } } csdto.setData(datalist.toArray()); series.add(csdto); ChartMultLineDto cmlDto = new ChartMultLineDto(); cmlDto.setxAxisData(xAxisData.toArray()); cmlDto.setSeries(series); result.put("cdata", cmlDto); result.put("tdata", statsList); request.getSession().setAttribute("attendanceStatsDown", statsList); return result; } /** * 考勤统计月度下钻 * @param request * @param statasEntity * @return */ @RequestMapping(params="attendandceMonthInto") @ResponseBody public Map attendandceMonthInto(HttpServletRequest request,AttendanceStatasDto statasEntity) { Map result = new HashMap(); List yearMonths = new ArrayList(); yearMonths.add(statasEntity.getAttYear()+"-"+statasEntity.getAttMonth()); statasEntity.setYearMonthList(yearMonths); String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString(); MiniDaoPage list = statsMinidaoDao.attendandceMonthInfo(statasEntity, authSql); List statsList = list.getResults(); List xAxisData = new ArrayList(); for(AttendanceStatasDto stats : statsList){ xAxisData.add(stats.getUserName()); } ArrayList series = new ArrayList();//series值 ChartSeriesDto csdto = new ChartSeriesDto(); csdto.setName("出勤率"); csdto.setType("bar"); csdto.setBarMaxWidth(30); List datalist = new ArrayList(); for(int i= 0 ; i < statsList.size() ; i++){ datalist.add(DataUtil.getFormatDecimailTwo(statsList.get(i).getAttendanceRate())); } csdto.setData(datalist.toArray()); series.add(csdto); ChartMultLineDto cmlDto = new ChartMultLineDto(); cmlDto.setxAxisData(xAxisData.toArray()); cmlDto.setSeries(series); result.put("cdata", cmlDto); result.put("tdata", statsList); request.getSession().setAttribute("attendanceStatsDown", statsList); return result; } /** * 手动执行统计定时任务页面 * @param request * @param statasEntity * @return */ @RequestMapping(params="statsTask") @ResponseBody public ModelAndView statsTask(HttpServletRequest request) { ModelAndView mav = new ModelAndView(); mav.setViewName("cn/com/lzt/statstask/statsTask"); return mav; } /** * 考勤统计 * @param request * @param statasEntity * @return */ @RequestMapping(params="attendanceStatsTaskData") @ResponseBody public void attendanceStatsTaskData(HttpServletRequest request) { String attmonth = request.getParameter("attMonth"); attendanceStatsServiceI.batchSaveUserAttendanceStats(attmonth); } /** * 导出 * @param exceltitles * @param request * @param response * @throws Exception */ @RequestMapping(params = "exportExcel") @ResponseBody public void exportExcel(String exceltitles,String exceltitleIds ,Integer flag,HttpServletRequest request, HttpServletResponse response) throws Exception{ if(flag == 1){ @SuppressWarnings("unchecked") List dataList = (List)request.getSession().getAttribute("attendanceStats"); ExportExcel ex = new ExportExcel("考勤统计", exceltitles.split(","), "考勤统计", dataList,exceltitleIds.split(",")); ex.export(response); }else{ @SuppressWarnings("unchecked") List dataList = (List)request.getSession().getAttribute("attendanceStatsDown"); ExportExcel ex = new ExportExcel("考勤统计", exceltitles.split(","), "考勤统计", dataList,exceltitleIds.split(",")); ex.export(response); } } }