FKLController.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package com.malk.fengkaili.controller;
  2. /**
  3. * 错误抛出与拦截详见 CatchException
  4. */
  5. import com.malk.fengkaili.repository.entity.FKLDdContactPo;
  6. import com.malk.fengkaili.service.FKLService;
  7. import com.malk.server.common.McException;
  8. import com.malk.server.common.McPage;
  9. import com.malk.server.common.McR;
  10. import com.malk.service.dingtalk.DDService;
  11. import com.malk.utils.*;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.data.domain.Page;
  16. import org.springframework.web.bind.annotation.PostMapping;
  17. import org.springframework.web.bind.annotation.RequestBody;
  18. import org.springframework.web.bind.annotation.RequestMapping;
  19. import org.springframework.web.bind.annotation.RestController;
  20. import javax.servlet.http.HttpServletRequest;
  21. import javax.servlet.http.HttpServletResponse;
  22. import java.util.*;
  23. import java.util.stream.Collectors;
  24. @Slf4j
  25. @RestController
  26. @RequestMapping
  27. public class FKLController {
  28. @Autowired
  29. private FKLService fklService;
  30. /**
  31. * 同步用户 & 部门
  32. */
  33. @PostMapping("syncUserInfo")
  34. McR syncUserInfo() {
  35. fklService.syncUserInfo();
  36. return McR.success();
  37. }
  38. /// 考勤汇总
  39. private McPage _getAttendanceList(Map data, List<String> days, HttpServletRequest request) {
  40. log.info("考勤汇总, {}", UtilServlet.getHeaders(request).get("authorization"));
  41. log.info("考勤汇总, {}", UtilServlet.getHeaders(request));
  42. McException.assertParamException_Null(data, "startTime", "endTime");
  43. McException.assertAccessException(StringUtils.isBlank(UtilServlet.getHeaders(request).get("authorization")), "该账户无操作权限");
  44. List<Long> dpetIds = (List<Long>) data.get("deptId");
  45. // 基于用户分页
  46. Date sDate = UtilDateTime.parseDate(UtilMap.getString(data, "startTime"));
  47. Page page = fklService.queryUserInfos(UtilMap.getInt(data, "page"), UtilMap.getInt(data, "size"), UtilMap.getString(data, "name"), dpetIds, sDate);
  48. McException.assertAccessException(page.getTotalElements() == 0, "查询用户为空!");
  49. List<FKLDdContactPo> userInfos = page.getContent();
  50. List<Map> dataList = fklService.queryAttendanceList(data.get("startTime").toString(), data.get("endTime").toString(), userInfos, days);
  51. log.info("汇总数量, {}", dataList.size());
  52. return McPage.page(page, dataList);
  53. }
  54. /**
  55. * 查询考勤汇总
  56. */
  57. @PostMapping("queryAttendanceList")
  58. McR queryAttendanceList(@RequestBody Map data, HttpServletRequest request) {
  59. return McR.success(_getAttendanceList(data, null, request));
  60. }
  61. /**
  62. * 查询考勤汇总 [天]
  63. */
  64. @PostMapping("queryAttendanceDays")
  65. McR queryAttendanceDays(@RequestBody Map data, HttpServletRequest request) {
  66. List<String> days = new ArrayList<>();
  67. return McR.success(UtilMap.map("page, prop", _getAttendanceList(data, days, request), days));
  68. }
  69. /**
  70. * 导出考勤汇总
  71. */
  72. @PostMapping("exportAttendanceList")
  73. void exportAttendanceList(@RequestBody Map data, HttpServletResponse response, HttpServletRequest request) {
  74. data.put("page", 1);
  75. data.put("size", Integer.MAX_VALUE);
  76. List<Map> dataList = _getAttendanceList(data, null, request).getList();
  77. // 获取出现最多次作为法定应出勤天数, 考勤应出勤天数和班组 + 人员挂钩 [班次详情应出勤不准确]
  78. float workdays = (Float) UtilList.maxFrequencyObject(dataList.stream().map(item -> {
  79. float val = 0.f;
  80. // 数据内0字段被忽略, 兼容处理
  81. if (item.containsKey("出勤天数")) {
  82. val = UtilMap.getFloat(item, "出勤天数");
  83. }
  84. return val;
  85. }).collect(Collectors.toList()));
  86. String range = ("核算周期: " + data.get("startTime").toString().split(" ")[0].replace("-", ".") + "-" + data.get("endTime").toString().split(" ")[0].replace("-", "."));
  87. String attendance = workdays + "天*8小时*60分钟=";
  88. Map dataMain = UtilMap.map("核算周期, 应出勤天数, 应出勤分钟", range, attendance, workdays * 8f * 60f);
  89. dataMain.put("date", UtilDateTime.format(UtilDateTime.parseDateTime(UtilMap.getString(data, "endTime")), "yyyy年MM月"));
  90. UtilExcel.exportMapAndListByTemplate(response, dataMain, dataList, Map.class, "月度汇总", "Template_month.xlsx");
  91. }
  92. /**
  93. * 导出考勤汇总 [天]
  94. */
  95. @PostMapping("exportAttendanceDays")
  96. void exportAttendanceDays(@RequestBody Map data, HttpServletResponse response, HttpServletRequest request) {
  97. data.put("page", 1);
  98. data.put("size", Integer.MAX_VALUE);
  99. // 动态表头模板导出
  100. List<String> days = new ArrayList<>();
  101. List<Map> dataList = _getAttendanceList(data, days, request).getList();
  102. Map dataMain = new HashMap();
  103. days.forEach(UtilMc.consumerWithIndex((item, index) -> {
  104. dataMain.put("day" + (index + 1), item);
  105. }));
  106. dataMain.put("date", UtilDateTime.format(UtilDateTime.parseDateTime(UtilMap.getString(data, "endTime")), "yyyy年MM月"));
  107. UtilExcel.exportMapAndListByTemplate(response, dataMain, dataList, Map.class, "月度明细", "Template_days.xlsx");
  108. }
  109. @Autowired
  110. private DDService ddService;
  111. public static String jsApi_nonceStr = "720F4HNA579C0ZHEDR";
  112. public static String jsApi_url = "http://localhost:8001";
  113. /**
  114. * jsApi 注册
  115. */
  116. @PostMapping("register")
  117. McR register() {
  118. return McR.success(ddService.registerJsApi(jsApi_url, jsApi_nonceStr));
  119. }
  120. /**
  121. * jsApi 免登
  122. */
  123. @PostMapping("user/code")
  124. McR userCodeAuth(@RequestBody Map<String, String> data) {
  125. McException.assertParamException_Null(data, "code");
  126. return McR.success(ddService.getUserInfoByCode(data.get("code")));
  127. }
  128. @PostMapping("test")
  129. McR test() {
  130. return McR.success();
  131. }
  132. }