OvertimeStatsController.java 11 KB

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