package com.ims.eval.controller; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ims.common.utils.StringUtils; import com.ims.eval.config.CustomException; import com.ims.eval.entity.DeptAssessmentDeclaration; import com.ims.eval.entity.DeptAssessmentDeclarationContent; import com.ims.eval.entity.dto.request.EmployeeDTO; import com.ims.eval.entity.dto.request.UserDTO; import com.ims.eval.entity.dto.result.R; import com.ims.eval.service.IDeptAssessmentDeclarationContentService; import com.ims.eval.service.IDeptAssessmentDeclarationService; import com.ims.eval.service.IUserService; import com.ims.eval.util.ExcelUtil; import com.ims.eval.util.ExcelUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 绩效结果考核申报 * * @author hlf * @date 2023/5/29 15:15 * 文件说明: */ @Slf4j @RestController @RequestMapping("//evaluation-dept-ad") public class DeptAssessmentDeclarationController { @Autowired private IDeptAssessmentDeclarationService deptAssessmentDeclarationService; @Autowired private IDeptAssessmentDeclarationContentService deptAssessmentDeclarationContentService; @Autowired private IUserService userService; @Autowired private HttpServletRequest request; /** * 绩效结果考核申报列表信息(分页) * * @param pageNum 当前记录起始索引 * @param pageSize 每页显示记录数 * @param orderNumber 单号 * @param deptId 部门主键 * @param annual 年度 * @param declarationMonth 申报月份 * @return 结果 */ @GetMapping(value = "/list") public R list( @RequestParam(value = "pageNum") Integer pageNum, @RequestParam(value = "pageSize") Integer pageSize, @RequestParam(value = "orderNumber", required = false) String orderNumber, @RequestParam(value = "deptId", required = false) String deptId, @RequestParam(value = "annual", required = false) String annual, @RequestParam(value = "declarationMonth", required = false) String declarationMonth) { IPage list = deptAssessmentDeclarationService.listPage(pageNum, pageSize, orderNumber, deptId, annual, declarationMonth); return R.ok().data(list); } /** * 绩效结果考核申报信息 * * @return 结果 */ @GetMapping(value = "/listAll") public R listAll() { List list = deptAssessmentDeclarationService.list(); return R.ok().data(list); } /** * 新增绩效结果考核申报信息 * * @param deptAssessmentDeclaration 绩效结果考核申报实体 * @return 结果 */ @PostMapping(value = "/save") public R addAll(@RequestBody DeptAssessmentDeclaration deptAssessmentDeclaration, HttpServletRequest request) { try { boolean b = deptAssessmentDeclarationService.save(deptAssessmentDeclaration, request); if (b) { return R.ok().data(b); } else { return R.error().data("保存失败!"); } } catch (CustomException e) { return R.customError(e.getMessage()).data("失败!"); } } /** * 修改绩效结果考核申报信息 * * @param deptAssessmentDeclaration 绩效结果考核申报实体 * @return 结果 */ @PostMapping(value = "/modify") public R modify(@RequestBody DeptAssessmentDeclaration deptAssessmentDeclaration) { try { boolean b = deptAssessmentDeclarationService.updateById(deptAssessmentDeclaration); if (b) { return R.ok().data(b); } else { return R.error().data("修改失败!"); } } catch (CustomException e) { return R.customError(e.getMessage()).data("失败!"); } } /** * 批量删除绩效结果考核申报信息 * * @param ids 主键s * @return 结果 */ @PostMapping(value = "/removeAll/{ids}") public R deleteAll(@PathVariable("ids") String ids) { String[] strings = ids.split(","); boolean b = deptAssessmentDeclarationService.removeByIds(Arrays.asList(strings)); if (b) { return R.ok().data(b); } else { return R.error().data("删除失败!"); } } /** * 详情-头部信息 * * @param id 业务主键 * @return 结果 */ @GetMapping(value = "/detailsHead/{id}") public R detailsHead(@PathVariable("id") String id) { DeptAssessmentDeclaration deptAssessmentDeclaration = deptAssessmentDeclarationService.getById(id); return R.ok().data(deptAssessmentDeclaration); } /** * 详情 * * @param id 业务主键 * @return 结果 */ @GetMapping(value = "/details/{id}") public R details(@PathVariable("id") String id) { List list = deptAssessmentDeclarationContentService.detailsList(id); return R.ok().data(list); } /** * 详情-修改/新增 * * @param deptAssessmentDeclarationContentList 修改内容 * @return 结果 */ @PostMapping(value = "/update") public R update(@RequestBody List deptAssessmentDeclarationContentList) { try { boolean b = deptAssessmentDeclarationContentService.saveOrUpdateBatch(deptAssessmentDeclarationContentList); if (b) { return R.ok().data(b); } else { return R.ok().data("人员已重复!"); } } catch (CustomException e) { return R.customError(e.getMessage()).data("失败!"); } } /** * 导入 * * @param file 文件 * @return 结果 */ @PostMapping(value = "/import") public R importData(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { try { //获取原始的文件名 String originalFilename = file.getOriginalFilename(); //获取文件类型 String fileType = originalFilename.substring(originalFilename.lastIndexOf(".") + 1, originalFilename.length()); //默认从第一行开始读取 int startRows = 1; //获取输入流 InputStream is = file.getInputStream(); List deptAssessmentDeclarationContentList = new ArrayList<>(); //Excel导入导出的单元类 List strings = ExcelUtil.readData(fileType, startRows, true, is); //遍历Excel表每一行的数据 for (String[] str : strings) { DeptAssessmentDeclarationContent deptAssessmentDeclarationContent = new DeptAssessmentDeclarationContent(); deptAssessmentDeclarationContent.setAssessmentDeclarationId(str[0]); deptAssessmentDeclarationContent.setEmployeeNo(str[1]); DeptAssessmentDeclaration deptAssessmentDeclaration = deptAssessmentDeclarationService.getById(str[0]); if (ObjectUtil.isNotNull(deptAssessmentDeclaration)){ JSONObject jsonArr = userService.pageList(1, 500, deptAssessmentDeclaration.getDeptId(), "", "", "", "", "", request); JSONObject jsonArr1 = (JSONObject) jsonArr.get("data"); JSONArray array = JSONUtil.parseArray(jsonArr1.get("records")); List userList = JSONUtil.toList(array, UserDTO.class); UserDTO user = userList.stream().filter(item -> item.getNo().equals(str[2])).findFirst().orElse(null); if (ObjectUtil.isNotNull(user)){ deptAssessmentDeclarationContent.setEmployeeId(user.getId()); } } deptAssessmentDeclarationContent.setEmployeeName(str[2]); deptAssessmentDeclarationContent.setSerialNumber(Convert.toInt(str[3])); deptAssessmentDeclarationContent.setSuggestedValue(str[4]); deptAssessmentDeclarationContentList.add(deptAssessmentDeclarationContent); } boolean b = deptAssessmentDeclarationContentService.importDataList(deptAssessmentDeclarationContentList); if (b) { return R.ok().data(b); } else { return R.error().data("保存失败!"); } } catch (Exception e) { log.error("错误", e); return R.customError(e.getMessage()).data("失败!"); } } return R.customError("上传文件为空!"); } /** * 修改状态 * * @param id 主键 * @param stage 状态 * @return 结果 */ @PostMapping(value = "/targetStart") public R targetStart(@RequestParam(value = "id") String id, @RequestParam(value = "stage") String stage) { try { DeptAssessmentDeclaration deptAssessmentDeclaration = deptAssessmentDeclarationService.getById(id); deptAssessmentDeclaration.setStage(stage); boolean b = deptAssessmentDeclarationService.updateById(deptAssessmentDeclaration); if (b) { return R.ok().data(b); } else { return R.error().data("失败!"); } } catch (CustomException e) { return R.customError(e.getMessage()).data("失败!"); } } /** * 生成报表 * * @param id 主键 * @param response response * @throws Exception 异常 */ @GetMapping(value = "/generateReport/{id}") public void generateReport(@PathVariable("id") String id, HttpServletResponse response) throws Exception { response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-disposition", "attachment; filename=".concat(URLEncoder.encode("公司本部部门及员工月度绩效考核结果申报表.xlsx", "UTF-8"))); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); List employeeDTOList = new ArrayList<>(); // 添加员工信息 QueryWrapper qw = new QueryWrapper<>(); if (StringUtils.isNotEmpty(id)) { qw.lambda().like(DeptAssessmentDeclarationContent::getAssessmentDeclarationId, id); } List deptAssessmentDeclarationContentList = deptAssessmentDeclarationContentService.list(qw); for (DeptAssessmentDeclarationContent deptAssessmentDeclarationContent : deptAssessmentDeclarationContentList) { EmployeeDTO employeeDTO = new EmployeeDTO(); employeeDTO.setName(deptAssessmentDeclarationContent.getEmployeeName()); employeeDTO.setCoefficient(deptAssessmentDeclarationContent.getSuggestedValue()); employeeDTOList.add(employeeDTO); } DeptAssessmentDeclaration deptAssessmentDeclaration = deptAssessmentDeclarationService.getById(id); String departmentName = deptAssessmentDeclaration.getDeptName(); String month = deptAssessmentDeclaration.getDeclarationMonth(); String level = deptAssessmentDeclaration.getDeclarationLevel(); String leader = deptAssessmentDeclaration.getDeptLeaderName(); String declarationReason = deptAssessmentDeclaration.getDeclarationReason(); ExcelUtils.createExcel(employeeDTOList, departmentName, month, level, leader, declarationReason, response.getOutputStream()); } }