DeptAssessmentDeclarationController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397
  1. package com.ims.eval.controller;
  2. import cn.hutool.core.convert.Convert;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import cn.hutool.json.JSONArray;
  5. import cn.hutool.json.JSONUtil;
  6. import com.alibaba.fastjson.JSONObject;
  7. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  8. import com.baomidou.mybatisplus.core.metadata.IPage;
  9. import com.ims.common.utils.StringUtils;
  10. import com.ims.eval.config.CustomException;
  11. import com.ims.eval.entity.DeptAssessmentDeclaration;
  12. import com.ims.eval.entity.DeptAssessmentDeclarationContent;
  13. import com.ims.eval.entity.EvaluationDept;
  14. import com.ims.eval.entity.dto.request.EmployeeDTO;
  15. import com.ims.eval.entity.dto.request.UserDTO;
  16. import com.ims.eval.entity.dto.result.R;
  17. import com.ims.eval.service.IDeptAssessmentDeclarationContentService;
  18. import com.ims.eval.service.IDeptAssessmentDeclarationService;
  19. import com.ims.eval.service.IEvaluationDeptService;
  20. import com.ims.eval.service.IUserService;
  21. import com.ims.eval.util.ExcelUtil;
  22. import com.ims.eval.util.ExcelUtils;
  23. import lombok.extern.slf4j.Slf4j;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.web.bind.annotation.*;
  26. import org.springframework.web.multipart.MultipartFile;
  27. import javax.servlet.http.HttpServletRequest;
  28. import javax.servlet.http.HttpServletResponse;
  29. import java.io.InputStream;
  30. import java.net.URLEncoder;
  31. import java.util.ArrayList;
  32. import java.util.Arrays;
  33. import java.util.List;
  34. /**
  35. * 绩效结果考核申报
  36. *
  37. * @author hlf
  38. * @date 2023/5/29 15:15
  39. * 文件说明:
  40. */
  41. @Slf4j
  42. @RestController
  43. @RequestMapping("//evaluation-dept-ad")
  44. public class DeptAssessmentDeclarationController {
  45. @Autowired
  46. private IDeptAssessmentDeclarationService deptAssessmentDeclarationService;
  47. @Autowired
  48. private IDeptAssessmentDeclarationContentService deptAssessmentDeclarationContentService;
  49. @Autowired
  50. private IEvaluationDeptService evaluationDeptService;
  51. @Autowired
  52. private IUserService userService;
  53. @Autowired
  54. private HttpServletRequest request;
  55. /**
  56. * 绩效结果考核申报列表信息(分页)
  57. *
  58. * @param pageNum 当前记录起始索引
  59. * @param pageSize 每页显示记录数
  60. * @param orderNumber 单号
  61. * @param deptId 部门主键
  62. * @param annual 年度
  63. * @param declarationMonth 申报月份
  64. * @return 结果
  65. */
  66. @GetMapping(value = "/list")
  67. public R list(
  68. @RequestParam(value = "pageNum") Integer pageNum,
  69. @RequestParam(value = "pageSize") Integer pageSize,
  70. @RequestParam(value = "orderNumber", required = false) String orderNumber,
  71. @RequestParam(value = "deptId", required = false) String deptId,
  72. @RequestParam(value = "annual", required = false) String annual,
  73. @RequestParam(value = "declarationMonth", required = false) String declarationMonth) {
  74. IPage<DeptAssessmentDeclaration> list = deptAssessmentDeclarationService.listPage(pageNum, pageSize, orderNumber, deptId, annual, declarationMonth);
  75. return R.ok().data(list);
  76. }
  77. /**
  78. * 绩效结果考核申报信息
  79. *
  80. * @return 结果
  81. */
  82. @GetMapping(value = "/listAll")
  83. public R listAll() {
  84. List<DeptAssessmentDeclaration> list = deptAssessmentDeclarationService.list();
  85. return R.ok().data(list);
  86. }
  87. /**
  88. * 新增绩效结果考核申报信息
  89. *
  90. * @param deptAssessmentDeclaration 绩效结果考核申报实体
  91. * @return 结果
  92. */
  93. @PostMapping(value = "/save")
  94. public R addAll(@RequestBody DeptAssessmentDeclaration deptAssessmentDeclaration, HttpServletRequest request) {
  95. try {
  96. QueryWrapper<DeptAssessmentDeclaration> qw = new QueryWrapper<>();
  97. if (StringUtils.isNotEmpty(deptAssessmentDeclaration.getDeptId())) {
  98. qw.lambda().eq(DeptAssessmentDeclaration::getDeptId, deptAssessmentDeclaration.getDeptId());
  99. }
  100. if (StringUtils.isNotEmpty(deptAssessmentDeclaration.getAnnual())) {
  101. qw.lambda().eq(DeptAssessmentDeclaration::getAnnual, deptAssessmentDeclaration.getAnnual());
  102. }
  103. if (StringUtils.isNotEmpty(deptAssessmentDeclaration.getDeclarationMonth())) {
  104. qw.lambda().eq(DeptAssessmentDeclaration::getDeclarationMonth, deptAssessmentDeclaration.getDeclarationMonth());
  105. }
  106. DeptAssessmentDeclaration assessmentDeclaration = deptAssessmentDeclarationService.getOne(qw);
  107. if (ObjectUtil.isNotNull(assessmentDeclaration)) {
  108. return R.error(deptAssessmentDeclaration.getDeptName() + deptAssessmentDeclaration.getAnnual() + "年" + deptAssessmentDeclaration.getDeclarationMonth() + "月绩效结果考核申报已存在!");
  109. }
  110. boolean b = deptAssessmentDeclarationService.save(deptAssessmentDeclaration, request);
  111. if (b) {
  112. return R.ok().data(b);
  113. } else {
  114. return R.error("保存失败!");
  115. }
  116. } catch (CustomException e) {
  117. return R.customError(e.getMessage()).data("失败!");
  118. }
  119. }
  120. /**
  121. * 获取部门领导
  122. *
  123. * @return 结果
  124. */
  125. @GetMapping(value = "/getDepartmentLeader/{id}")
  126. public R getDepartmentLeader(@PathVariable String id) {
  127. QueryWrapper<EvaluationDept> qw = new QueryWrapper<>();
  128. if (StringUtils.isNotEmpty(id)) {
  129. qw.lambda().like(EvaluationDept::getDeptId, id);
  130. }
  131. EvaluationDept evaluationDept = evaluationDeptService.getOne(qw);
  132. return R.ok().data(evaluationDept);
  133. }
  134. /**
  135. * 修改绩效结果考核申报信息
  136. *
  137. * @param deptAssessmentDeclaration 绩效结果考核申报实体
  138. * @return 结果
  139. */
  140. @PostMapping(value = "/modify")
  141. public R modify(@RequestBody DeptAssessmentDeclaration deptAssessmentDeclaration) {
  142. try {
  143. boolean b = deptAssessmentDeclarationService.updateById(deptAssessmentDeclaration);
  144. if (b) {
  145. return R.ok().data(b);
  146. } else {
  147. return R.error("修改失败!");
  148. }
  149. } catch (CustomException e) {
  150. return R.customError(e.getMessage()).data("失败!");
  151. }
  152. }
  153. /**
  154. * 批量删除绩效结果考核申报信息
  155. *
  156. * @param ids 主键s
  157. * @return 结果
  158. */
  159. @PostMapping(value = "/removeAll/{ids}")
  160. public R deleteAll(@PathVariable("ids") String ids) {
  161. try {
  162. String[] strings = ids.split(",");
  163. boolean b = deptAssessmentDeclarationService.removeByIds(Arrays.asList(strings));
  164. if (b) {
  165. return R.ok().data(b);
  166. } else {
  167. return R.error("删除失败!");
  168. }
  169. } catch (CustomException e) {
  170. return R.customError(e.getMessage()).data("失败!");
  171. }
  172. }
  173. /**
  174. * 详情-头部信息
  175. *
  176. * @param id 业务主键
  177. * @return 结果
  178. */
  179. @GetMapping(value = "/detailsHead/{id}")
  180. public R detailsHead(@PathVariable("id") String id) {
  181. DeptAssessmentDeclaration deptAssessmentDeclaration = deptAssessmentDeclarationService.getById(id);
  182. return R.ok().data(deptAssessmentDeclaration);
  183. }
  184. /**
  185. * 详情
  186. *
  187. * @param id 业务主键
  188. * @return 结果
  189. */
  190. @GetMapping(value = "/details/{id}")
  191. public R details(@PathVariable("id") String id) {
  192. List<DeptAssessmentDeclarationContent> list = deptAssessmentDeclarationContentService.detailsList(id);
  193. return R.ok().data(list);
  194. }
  195. /**
  196. * 详情-修改/新增
  197. *
  198. * @param deptAssessmentDeclarationContentList 修改内容
  199. * @return 结果
  200. */
  201. @PostMapping(value = "/update")
  202. public R update(@RequestBody List<DeptAssessmentDeclarationContent> deptAssessmentDeclarationContentList) {
  203. try {
  204. boolean b = deptAssessmentDeclarationContentService.saveOrUpdateBatch(deptAssessmentDeclarationContentList);
  205. if (b) {
  206. return R.ok().data(b);
  207. } else {
  208. return R.error("新增/修改失败,人员重复!");
  209. }
  210. } catch (CustomException e) {
  211. return R.customError(e.getMessage()).data("失败!");
  212. }
  213. }
  214. /**
  215. * 详情-删除
  216. *
  217. * @param id 主键
  218. * @return 结果
  219. */
  220. @GetMapping(value = "/delete/{id}")
  221. public R delete(@PathVariable String id) {
  222. try {
  223. boolean b = deptAssessmentDeclarationContentService.removeById(id);
  224. if (b) {
  225. return R.ok().data(b);
  226. } else {
  227. return R.error("删除失败!");
  228. }
  229. } catch (CustomException e) {
  230. return R.customError(e.getMessage()).data("失败!");
  231. }
  232. }
  233. /**
  234. * 导入
  235. *
  236. * @param file 文件
  237. * @return 结果
  238. */
  239. @PostMapping(value = "/import")
  240. public R importData(@RequestParam("file") MultipartFile file, @RequestParam("id") String id) {
  241. if (!file.isEmpty()) {
  242. try {
  243. //获取原始的文件名
  244. String originalFilename = file.getOriginalFilename();
  245. //获取文件类型
  246. String fileType = originalFilename.substring(originalFilename.lastIndexOf(".") + 1, originalFilename.length());
  247. //默认从第一行开始读取
  248. int startRows = 1;
  249. //获取输入流
  250. InputStream is = file.getInputStream();
  251. List<DeptAssessmentDeclarationContent> deptAssessmentDeclarationContentList = new ArrayList<>();
  252. //Excel导入导出的单元类
  253. List<String[]> strings = ExcelUtil.readData(fileType, startRows, true, is);
  254. //遍历Excel表每一行的数据
  255. for (String[] str : strings) {
  256. DeptAssessmentDeclarationContent deptAssessmentDeclarationContent = new DeptAssessmentDeclarationContent();
  257. deptAssessmentDeclarationContent.setAssessmentDeclarationId(id);
  258. deptAssessmentDeclarationContent.setEmployeeNo(str[0]);
  259. DeptAssessmentDeclaration deptAssessmentDeclaration = deptAssessmentDeclarationService.getById(id);
  260. if (ObjectUtil.isNotNull(deptAssessmentDeclaration)) {
  261. JSONObject jsonArr = userService.pageList(1, 1000, deptAssessmentDeclaration.getDeptId(), "", "", "", "", "", request);
  262. JSONObject jsonArr1 = (JSONObject) jsonArr.get("data");
  263. JSONArray array = JSONUtil.parseArray(jsonArr1.get("records"));
  264. List<UserDTO> userList = JSONUtil.toList(array, UserDTO.class);
  265. UserDTO user = userList.stream().filter(item -> item.getNo().equals(str[0])).findFirst().orElse(null);
  266. if (ObjectUtil.isNotNull(user)) {
  267. deptAssessmentDeclarationContent.setEmployeeId(user.getId());
  268. deptAssessmentDeclarationContent.setEmployeeName(user.getName());
  269. }
  270. }
  271. deptAssessmentDeclarationContent.setSuggestedValue(str[2]);
  272. deptAssessmentDeclarationContent.setSerialNumber(Convert.toInt(str[3]));
  273. QueryWrapper<DeptAssessmentDeclarationContent> qw = new QueryWrapper<>();
  274. if (StringUtils.isNotEmpty(deptAssessmentDeclarationContent.getAssessmentDeclarationId())) {
  275. qw.lambda().like(DeptAssessmentDeclarationContent::getAssessmentDeclarationId, deptAssessmentDeclarationContent.getAssessmentDeclarationId());
  276. }
  277. if (StringUtils.isNotEmpty(deptAssessmentDeclarationContent.getEmployeeNo())) {
  278. qw.lambda().like(DeptAssessmentDeclarationContent::getEmployeeNo, deptAssessmentDeclarationContent.getEmployeeNo());
  279. }
  280. List<DeptAssessmentDeclarationContent> objList = deptAssessmentDeclarationContentService.list(qw);
  281. if (objList.size() == 1) {//修改
  282. deptAssessmentDeclarationContent.setId(objList.get(0).getId());
  283. deptAssessmentDeclarationContentList.add(deptAssessmentDeclarationContent);
  284. } else if (objList.size() == 0) {//新增
  285. deptAssessmentDeclarationContentList.add(deptAssessmentDeclarationContent);
  286. }
  287. }
  288. boolean b = deptAssessmentDeclarationContentService.saveOrUpdateBatch(deptAssessmentDeclarationContentList);
  289. if (b) {
  290. return R.ok().data(b);
  291. } else {
  292. return R.error("导入失败!");
  293. }
  294. } catch (Exception e) {
  295. log.error("错误", e);
  296. return R.customError(e.getMessage()).data("失败!");
  297. }
  298. }
  299. return R.error("上传文件为空!");
  300. }
  301. /**
  302. * 修改状态
  303. *
  304. * @param id 主键
  305. * @param stage 状态
  306. * @return 结果
  307. */
  308. @PostMapping(value = "/targetStart")
  309. public R targetStart(@RequestParam(value = "id") String id,
  310. @RequestParam(value = "stage") String stage) {
  311. try {
  312. DeptAssessmentDeclaration deptAssessmentDeclaration = deptAssessmentDeclarationService.getById(id);
  313. deptAssessmentDeclaration.setStage(stage);
  314. boolean b = deptAssessmentDeclarationService.updateById(deptAssessmentDeclaration);
  315. if (b) {
  316. return R.ok().data(b);
  317. } else {
  318. return R.error("失败!");
  319. }
  320. } catch (CustomException e) {
  321. return R.customError(e.getMessage()).data("失败!");
  322. }
  323. }
  324. /**
  325. * 生成报表
  326. *
  327. * @param id 主键
  328. * @param response response
  329. * @throws Exception 异常
  330. */
  331. @GetMapping(value = "/generateReport/{id}")
  332. public void generateReport(@PathVariable("id") String id, HttpServletResponse response) throws Exception {
  333. response.setContentType("application/vnd.ms-excel;charset=UTF-8");
  334. response.setHeader("Content-disposition", "attachment; filename=".concat(URLEncoder.encode("公司本部部门及员工月度绩效考核结果申报表.xlsx", "UTF-8")));
  335. response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
  336. response.setHeader("Pragma", "no-cache");
  337. response.setDateHeader("Expires", 0);
  338. List<EmployeeDTO> employeeDTOList = new ArrayList<>();
  339. // 添加员工信息
  340. QueryWrapper<DeptAssessmentDeclarationContent> qw = new QueryWrapper<>();
  341. if (StringUtils.isNotEmpty(id)) {
  342. qw.lambda().like(DeptAssessmentDeclarationContent::getAssessmentDeclarationId, id);
  343. }
  344. List<DeptAssessmentDeclarationContent> deptAssessmentDeclarationContentList = deptAssessmentDeclarationContentService.list(qw);
  345. for (DeptAssessmentDeclarationContent deptAssessmentDeclarationContent : deptAssessmentDeclarationContentList) {
  346. EmployeeDTO employeeDTO = new EmployeeDTO();
  347. employeeDTO.setName(deptAssessmentDeclarationContent.getEmployeeName());
  348. employeeDTO.setCoefficient(deptAssessmentDeclarationContent.getSuggestedValue());
  349. employeeDTOList.add(employeeDTO);
  350. }
  351. DeptAssessmentDeclaration deptAssessmentDeclaration = deptAssessmentDeclarationService.getById(id);
  352. String departmentName = deptAssessmentDeclaration.getDeptName();
  353. String month = deptAssessmentDeclaration.getDeclarationMonth();
  354. //String level = deptAssessmentDeclaration.getDeclarationLevel();
  355. String level = deptAssessmentDeclaration.getRatingGrade();
  356. String leader = deptAssessmentDeclaration.getDeptLeaderName();
  357. String declarationReason = deptAssessmentDeclaration.getDeclarationReason();
  358. ExcelUtils.createExcel(employeeDTOList, departmentName, month, level, leader, declarationReason, response.getOutputStream());
  359. }
  360. /**
  361. * 参与考核人数
  362. *
  363. * @param id 主键
  364. * @return 结果
  365. */
  366. @GetMapping(value = "/participantsNumber/{id}")
  367. public R participantsNumber(@PathVariable String id) {
  368. QueryWrapper<DeptAssessmentDeclarationContent> qw = new QueryWrapper<>();
  369. if (StringUtils.isNotEmpty(id)) {
  370. qw.lambda().like(DeptAssessmentDeclarationContent::getAssessmentDeclarationId, id);
  371. }
  372. int count = deptAssessmentDeclarationContentService.list(qw).size();
  373. return R.ok().data(count);
  374. }
  375. }