AttendanceStatsController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. package cn.com.lzt.attendance.controller;
  2. import cn.com.lzt.arrangeduty.dto.ProjectDepartDto;
  3. import cn.com.lzt.attendance.dao.AttendanceStatsMinidaoDao;
  4. import cn.com.lzt.attendance.dto.AttendanceStatasDto;
  5. import cn.com.lzt.attendance.service.AttendanceStatsServiceI;
  6. import cn.com.lzt.common.entity.ChartMultLineDto;
  7. import cn.com.lzt.common.entity.ChartSeriesDto;
  8. import cn.com.lzt.common.entity.DataDto;
  9. import cn.com.lzt.common.entity.UserRoleDto;
  10. import cn.com.lzt.common.util.Constants;
  11. import cn.com.lzt.common.util.DataUtil;
  12. import cn.com.lzt.common.util.ExportExcel;
  13. import cn.com.lzt.dialogDeal.service.DialogDealServiceI;
  14. import org.apache.log4j.Logger;
  15. import org.jeecgframework.core.common.controller.BaseController;
  16. import org.jeecgframework.core.util.JeecgDataAutorUtils;
  17. import org.jeecgframework.core.util.ResourceUtil;
  18. import org.jeecgframework.core.util.StringUtil;
  19. import org.jeecgframework.minidao.pojo.MiniDaoPage;
  20. import org.jeecgframework.web.system.pojo.base.TSUser;
  21. import org.jeecgframework.web.system.service.SystemService;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Controller;
  24. import org.springframework.web.bind.annotation.RequestMapping;
  25. import org.springframework.web.bind.annotation.ResponseBody;
  26. import org.springframework.web.servlet.ModelAndView;
  27. import javax.servlet.http.HttpServletRequest;
  28. import javax.servlet.http.HttpServletResponse;
  29. import javax.validation.Validator;
  30. import java.util.*;
  31. /**
  32. * @Title: Controller
  33. * @Description: 考勤统计
  34. * @author onlineGenerator
  35. * @date 2017-10-24 16:38:50
  36. * @version V1.0
  37. *
  38. */
  39. @Controller
  40. @RequestMapping("/attendanceStatsController")
  41. public class AttendanceStatsController extends BaseController {
  42. /**
  43. * Logger for this class
  44. */
  45. private static final Logger logger = Logger.getLogger(AttendanceStatsController.class);
  46. //用户浏览器统计分析的国际化KEY
  47. private static final String USER_BROWSER_ANALYSIS = "user.browser.analysis";
  48. @Autowired
  49. private AttendanceStatsServiceI attendanceStatsServiceI;
  50. @Autowired
  51. DialogDealServiceI dialogDealServiceI;
  52. @Autowired
  53. private SystemService systemService;
  54. @Autowired
  55. private Validator validator;
  56. @Autowired
  57. private AttendanceStatsMinidaoDao statsMinidaoDao;
  58. /**
  59. * 考勤统计页面
  60. *
  61. * @return
  62. */
  63. @RequestMapping(params = "attendanceStats")
  64. public ModelAndView statisticTabs(HttpServletRequest request) {
  65. ModelAndView mav = new ModelAndView();
  66. Calendar c = Calendar.getInstance();
  67. mav.addObject("curYear",c.get(Calendar.YEAR)+"");
  68. int month = c.get(Calendar.MONTH);
  69. if(month > 9){
  70. mav.addObject("curMonth", c.get(Calendar.MONTH)+"");
  71. }else if(month == 0){
  72. mav.addObject("curYear",(c.get(Calendar.YEAR)-1)+"");
  73. mav.addObject("curMonth", "12");
  74. }else{
  75. mav.addObject("curMonth", "0"+c.get(Calendar.MONTH));
  76. }
  77. TSUser user = (TSUser) request.getSession().getAttribute(ResourceUtil.LOCAL_CLINET_USER);
  78. //默认HR权限
  79. String rolefalg ="1";
  80. //查询用户角色
  81. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  82. List<UserRoleDto> userRolelist = statsMinidaoDao.getUserRoleList(user.getId(),authSql);
  83. for(UserRoleDto urdto : userRolelist){
  84. if(Constants.USER_ROLE_HR.contains(urdto.getRolecode())){
  85. rolefalg = "1";
  86. break;
  87. }
  88. if(Constants.USER_ROLE_DEPT.contains(urdto.getRolecode())){
  89. rolefalg = "2";
  90. break;
  91. }
  92. }
  93. if(rolefalg.equals("2")){
  94. List<ProjectDepartDto> projectDepartDtoList=dialogDealServiceI.getProjectDepartByUserId();
  95. mav.addObject("departList", projectDepartDtoList);
  96. }
  97. mav.addObject("roleFlag", rolefalg);
  98. mav.setViewName("cn/com/lzt/attendanceStats/attendanceStats");
  99. return mav;
  100. }
  101. /**
  102. * 考期统计数据json
  103. * @param request
  104. * @param statasEntity
  105. * @return
  106. */
  107. @RequestMapping(params="attendanceStatsData")
  108. @ResponseBody
  109. public Map<String,Object> attendandceData(HttpServletRequest request,AttendanceStatasDto statasEntity) {
  110. Map<String,Object> result = new HashMap<String,Object>();
  111. List<String> xAxisData = new ArrayList<String>();
  112. List<String> yearMonths = new ArrayList<String>();
  113. List<AttendanceStatasDto> statsList = new ArrayList<AttendanceStatasDto>();
  114. //如果是月频,需要查询某年某月
  115. if(statasEntity.getAttType() == 0){
  116. yearMonths.add(statasEntity.getAttYear()+"-"+statasEntity.getAttMonth());
  117. }else if(statasEntity.getAttType() == 1){
  118. yearMonths = DataUtil.getYearMonthList(statasEntity.getAttYear(), statasEntity.getAttQuarters());
  119. }
  120. statasEntity.setYearMonthList(yearMonths);
  121. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  122. MiniDaoPage<AttendanceStatasDto> list = new MiniDaoPage<AttendanceStatasDto>();
  123. if(!StringUtil.isEmpty(statasEntity.getPid())){
  124. list = statsMinidaoDao.attendanceStatsPdData(statasEntity, authSql);
  125. statsList = list.getResults();
  126. for(AttendanceStatasDto stats : statsList){
  127. xAxisData.add(stats.getPidName());
  128. }
  129. }else{
  130. list = statsMinidaoDao.attendanceStatsData(statasEntity, authSql);
  131. statsList = list.getResults();
  132. for(AttendanceStatasDto stats : statsList){
  133. xAxisData.add(stats.getPjName());
  134. }
  135. }
  136. ArrayList<ChartSeriesDto> series = new ArrayList<ChartSeriesDto>();//series值
  137. ChartSeriesDto csdto = new ChartSeriesDto();
  138. csdto.setName("出勤率(%)");
  139. csdto.setType("bar");
  140. csdto.setBarMaxWidth(30);
  141. List<DataDto> datalist = new ArrayList<DataDto>();
  142. for(int i= 0 ; i < statsList.size() ; i++){
  143. DataDto dd = new DataDto();
  144. if(!StringUtil.isEmpty(statasEntity.getPid())){
  145. dd.setId(statsList.get(i).getDeptId());
  146. }else{
  147. dd.setId(statsList.get(i).getPid());
  148. }
  149. dd.setValue(DataUtil.getFormatDecimailTwo(statsList.get(i).getAttendanceRate()));
  150. datalist.add(dd);
  151. }
  152. csdto.setData(datalist.toArray());
  153. series.add(csdto);
  154. ChartMultLineDto cmlDto = new ChartMultLineDto();
  155. cmlDto.setxAxisData(xAxisData.toArray());
  156. cmlDto.setSeries(series);
  157. if( statsList== null || statsList.size() == 0){
  158. cmlDto.setNoData(true);
  159. }
  160. result.put("cdata", cmlDto);
  161. result.put("tdata", statsList);
  162. request.getSession().setAttribute("attendanceStats", statsList);
  163. return result;
  164. }
  165. /**
  166. * 考勤统计年度下钻
  167. * @param request
  168. * @param statasEntity
  169. * @return
  170. */
  171. @RequestMapping(params="attendandceYearInto")
  172. @ResponseBody
  173. public Map<String,Object> attendandceYearInto(HttpServletRequest request,AttendanceStatasDto statasEntity) {
  174. Map<String,Object> result = new HashMap<String,Object>();
  175. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  176. MiniDaoPage<AttendanceStatasDto> list = statsMinidaoDao.attendandceYearInfo(statasEntity, authSql);
  177. List<AttendanceStatasDto> statsList = list.getResults();
  178. List<String> xAxisData = DataUtil.getMonList();
  179. ArrayList<ChartSeriesDto> series = new ArrayList<ChartSeriesDto>();//series值
  180. ChartSeriesDto csdto = new ChartSeriesDto();
  181. csdto.setName("出勤率");
  182. csdto.setType("line");
  183. csdto.setBarMaxWidth(30);
  184. List<String> datalist = new ArrayList<String>();
  185. for(String s : xAxisData){
  186. Boolean flag = false;
  187. for(int i= 0 ; i < statsList.size() ; i++){
  188. if(statsList.get(i).getYearMonth().substring(5, 7).equals(s)){
  189. datalist.add(DataUtil.getFormatDecimailTwo(statsList.get(i).getAttendanceRate()));
  190. flag = true;
  191. }
  192. }
  193. if(!flag){
  194. datalist.add(null);
  195. }
  196. }
  197. csdto.setData(datalist.toArray());
  198. series.add(csdto);
  199. ChartMultLineDto cmlDto = new ChartMultLineDto();
  200. cmlDto.setxAxisData(xAxisData.toArray());
  201. cmlDto.setSeries(series);
  202. result.put("cdata", cmlDto);
  203. result.put("tdata", statsList);
  204. request.getSession().setAttribute("attendanceStatsDown", statsList);
  205. return result;
  206. }
  207. /**
  208. * 考勤统计月度下钻
  209. * @param request
  210. * @param statasEntity
  211. * @return
  212. */
  213. @RequestMapping(params="attendandceMonthInto")
  214. @ResponseBody
  215. public Map<String,Object> attendandceMonthInto(HttpServletRequest request,AttendanceStatasDto statasEntity) {
  216. Map<String,Object> result = new HashMap<String,Object>();
  217. List<String> yearMonths = new ArrayList<String>();
  218. yearMonths.add(statasEntity.getAttYear()+"-"+statasEntity.getAttMonth());
  219. statasEntity.setYearMonthList(yearMonths);
  220. String authSql = JeecgDataAutorUtils.loadDataSearchConditonSQLString();
  221. MiniDaoPage<AttendanceStatasDto> list = statsMinidaoDao.attendandceMonthInfo(statasEntity, authSql);
  222. List<AttendanceStatasDto> statsList = list.getResults();
  223. List<String> xAxisData = new ArrayList<String>();
  224. for(AttendanceStatasDto stats : statsList){
  225. xAxisData.add(stats.getUserName());
  226. }
  227. ArrayList<ChartSeriesDto> series = new ArrayList<ChartSeriesDto>();//series值
  228. ChartSeriesDto csdto = new ChartSeriesDto();
  229. csdto.setName("出勤率");
  230. csdto.setType("bar");
  231. csdto.setBarMaxWidth(30);
  232. List<String> datalist = new ArrayList<String>();
  233. for(int i= 0 ; i < statsList.size() ; i++){
  234. datalist.add(DataUtil.getFormatDecimailTwo(statsList.get(i).getAttendanceRate()));
  235. }
  236. csdto.setData(datalist.toArray());
  237. series.add(csdto);
  238. ChartMultLineDto cmlDto = new ChartMultLineDto();
  239. cmlDto.setxAxisData(xAxisData.toArray());
  240. cmlDto.setSeries(series);
  241. result.put("cdata", cmlDto);
  242. result.put("tdata", statsList);
  243. request.getSession().setAttribute("attendanceStatsDown", statsList);
  244. return result;
  245. }
  246. /**
  247. * 手动执行统计定时任务页面
  248. * @param request
  249. * @param statasEntity
  250. * @return
  251. */
  252. @RequestMapping(params="statsTask")
  253. @ResponseBody
  254. public ModelAndView statsTask(HttpServletRequest request) {
  255. ModelAndView mav = new ModelAndView();
  256. mav.setViewName("cn/com/lzt/statstask/statsTask");
  257. return mav;
  258. }
  259. /**
  260. * 考勤统计
  261. * @param request
  262. * @param statasEntity
  263. * @return
  264. */
  265. @RequestMapping(params="attendanceStatsTaskData")
  266. @ResponseBody
  267. public void attendanceStatsTaskData(HttpServletRequest request) {
  268. String attmonth = request.getParameter("attMonth");
  269. attendanceStatsServiceI.batchSaveUserAttendanceStats(attmonth);
  270. }
  271. /**
  272. * 导出
  273. * @param exceltitles
  274. * @param request
  275. * @param response
  276. * @throws Exception
  277. */
  278. @RequestMapping(params = "exportExcel")
  279. @ResponseBody
  280. public void exportExcel(String exceltitles,String exceltitleIds ,Integer flag,HttpServletRequest request,
  281. HttpServletResponse response) throws Exception{
  282. if(flag == 1){
  283. @SuppressWarnings("unchecked")
  284. List<Object> dataList = (List<Object>)request.getSession().getAttribute("attendanceStats");
  285. ExportExcel ex = new ExportExcel("考勤统计", exceltitles.split(","), "考勤统计", dataList,exceltitleIds.split(","));
  286. ex.export(response);
  287. }else{
  288. @SuppressWarnings("unchecked")
  289. List<Object> dataList = (List<Object>)request.getSession().getAttribute("attendanceStatsDown");
  290. ExportExcel ex = new ExportExcel("考勤统计", exceltitles.split(","), "考勤统计", dataList,exceltitleIds.split(","));
  291. ex.export(response);
  292. }
  293. }
  294. }