From 78acb061ccf1155d6e40b8dc63d2a01e0a917683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E5=85=81=E6=9E=9E?= <3422692813@qq.com> Date: Wed, 12 Feb 2025 18:00:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=B7=A5=E4=BD=9C=E6=B1=87?= =?UTF-8?q?=E6=8A=A5=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/WorkReportController.java | 18 ++++- .../workReport/mapper/WorkReportMapper.java | 1 + .../workReport/service/WorkReportService.java | 8 +++ .../service/impl/WorkReportServiceImpl.java | 65 +++++++++++++++++++ .../workReport/vo/WorkReportPageReqVO.java | 3 + .../workReport/vo/WorkReportRespVO.java | 3 + .../mapper/workReport/WorkReportMapper.xml | 9 +++ .../controller/InspectionStaffController.java | 16 ++++- .../framework/excel/core/util/ExcelUtils.java | 33 +++++++++- 9 files changed, 153 insertions(+), 3 deletions(-) diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/controller/admin/WorkReportController.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/controller/admin/WorkReportController.java index 4d47d9fb..76d692ff 100644 --- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/controller/admin/WorkReportController.java +++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/controller/admin/WorkReportController.java @@ -9,7 +9,9 @@ import cn.iocoder.yudao.module.workReport.vo.WorkReportSaveReqVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.web.bind.annotation.*; + import javax.annotation.Resource; + import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; import io.swagger.v3.oas.annotations.tags.Tag; @@ -26,11 +28,13 @@ import java.util.stream.Collectors; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; + import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; @@ -96,7 +100,7 @@ public class WorkReportController { @PreAuthorize("@ss.hasPermission('work:report:export')") @ApiAccessLog(operateType = EXPORT) public void exportReportExcel(@Valid WorkReportPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { + HttpServletResponse response) throws IOException { Page page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); IPage pageResult = reportService.getReportPage(page, pageReqVO); List list = pageResult.getRecords(); @@ -106,6 +110,7 @@ public class WorkReportController { /** * 查询汇报对象 + * * @param dictType 字典类型 * @return */ @@ -114,4 +119,15 @@ public class WorkReportController { return success(reportService.queryReportTo(dictType)); } + /** + * 工作汇报预览 + * + * @param id + * @return + */ + @GetMapping("/workReportView") + public CommonResult workReportView(@RequestParam("id") Integer id) { + return success(reportService.workReportView(id)); + } + } \ No newline at end of file diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/mapper/WorkReportMapper.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/mapper/WorkReportMapper.java index 7b00fcdb..913f0b66 100644 --- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/mapper/WorkReportMapper.java +++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/mapper/WorkReportMapper.java @@ -21,6 +21,7 @@ import org.apache.ibatis.annotations.Param; public interface WorkReportMapper extends BaseMapper { IPage selectPage(@Param("page") Page page,@Param("pageReqVO") WorkReportPageReqVO pageReqVO); + WorkReportRespVO selectByIdOne(@Param("pageReqVO") WorkReportPageReqVO pageReqVO); Long queryReportCount(@Param("pageReqVO")WorkReportPageReqVO pageReqVO); } \ No newline at end of file diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/service/WorkReportService.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/service/WorkReportService.java index 09babdb9..201b507f 100644 --- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/service/WorkReportService.java +++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/service/WorkReportService.java @@ -72,4 +72,12 @@ public interface WorkReportService extends IService { * @return */ Long queryReportCount(WorkReportPageReqVO pageReqVO); + + /** + * 工作汇报预览 + * + * @param id 工作汇报id + * @return 工作汇报详情 + */ + String workReportView(Integer id); } \ No newline at end of file diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/service/impl/WorkReportServiceImpl.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/service/impl/WorkReportServiceImpl.java index c588c5c8..546b05c5 100644 --- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/service/impl/WorkReportServiceImpl.java +++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/service/impl/WorkReportServiceImpl.java @@ -1,12 +1,15 @@ package cn.iocoder.yudao.module.workReport.service.impl; +import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.system.api.dict.DictDataApi; import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO; import cn.iocoder.yudao.module.system.api.permission.PermissionApi; import cn.iocoder.yudao.module.system.api.user.dto.UserDTO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.service.permission.RoleService; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.workReport.entity.WorkReport; import cn.iocoder.yudao.module.workReport.mapper.WorkReportMapper; import cn.iocoder.yudao.module.workReport.service.WorkReportService; @@ -23,6 +26,7 @@ import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -50,6 +54,9 @@ public class WorkReportServiceImpl extends ServiceImpl\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
                              工作汇报
汇报主题reportTopic
汇报对象reportToStr
汇报内容reportContent
汇报人userName
汇报时间reportTime
\n" + + "\n" + + "

 

\n"; + + WorkReportPageReqVO pageReqVO = new WorkReportPageReqVO(); + pageReqVO.setId(id); + WorkReportRespVO workReport = reportMapper.selectByIdOne(pageReqVO); + List userIds = Arrays.stream(workReport.getReportTo().split(",")).map(Long::parseLong) // 转换为 Long 类型 + .collect(Collectors.toList()); + + List userList = adminUserService.getUserList(userIds); + List userNames = userList.stream().map(item -> item.getNickname()).collect(Collectors.toList()); + String reportToStr = String.join(",", userNames); + //替换字符串 + html = html.replace("reportTopic", workReport.getReportTopic()); + html = html.replace("reportToStr", reportToStr); + html = html.replace("reportContent", workReport.getReportContent()); + html = html.replace("userName", workReport.getUserName()); + html = html.replace("reportTime", DateUtil.format(workReport.getReportTime(), "yyyy-MM-dd HH:mm")); + return html; + } + } \ No newline at end of file diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/vo/WorkReportPageReqVO.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/vo/WorkReportPageReqVO.java index c6ce16e0..d9718581 100644 --- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/vo/WorkReportPageReqVO.java +++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/vo/WorkReportPageReqVO.java @@ -16,6 +16,9 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @ToString(callSuper = true) public class WorkReportPageReqVO extends PageParam { + @Schema(description = "id") + private Integer id; + @Schema(description = "服务包id") private String servicePackageId; diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/vo/WorkReportRespVO.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/vo/WorkReportRespVO.java index ff862b2b..a5dab31e 100644 --- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/vo/WorkReportRespVO.java +++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/workReport/vo/WorkReportRespVO.java @@ -42,6 +42,9 @@ public class WorkReportRespVO { @ExcelProperty("汇报人姓名") private String userName; + @Schema(description = "汇报对象") + private String reportTo; + @Schema(description = "汇报对象集合") private List reportTos; diff --git a/dl-module-company/src/main/resources/mapper/workReport/WorkReportMapper.xml b/dl-module-company/src/main/resources/mapper/workReport/WorkReportMapper.xml index b10b18ae..103345f3 100644 --- a/dl-module-company/src/main/resources/mapper/workReport/WorkReportMapper.xml +++ b/dl-module-company/src/main/resources/mapper/workReport/WorkReportMapper.xml @@ -69,4 +69,13 @@ + + \ No newline at end of file diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionStaffController.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionStaffController.java index e601d4b9..977661f4 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionStaffController.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionStaffController.java @@ -16,6 +16,8 @@ import cn.iocoder.yudao.module.inspection.query.InspectionStaffQuery; import cn.iocoder.yudao.module.inspection.service.InspectionStaffService; import cn.iocoder.yudao.module.inspection.vo.InspectionStaffExportVo; import cn.iocoder.yudao.module.inspection.vo.InspectionStaffSaveVo; +import cn.iocoder.yudao.module.system.api.dict.DictDataApi; +import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +43,8 @@ import static cn.iocoder.yudao.framework.excel.core.util.ExcelUtils.exportBlankT public class InspectionStaffController extends BaseController { @Autowired private InspectionStaffService inspectionStaffService; + @Autowired + DictDataApi dictDataApi; /** * 获取检测员工列表 @@ -131,8 +135,18 @@ public class InspectionStaffController extends BaseController { String[] array = ArrayUtil.toArray(allId, String.class); dropdownColumns.put(13, array); // 驾照类型 + //查询学历 + List education = dictDataApi.getDictDataList("company_staff_edu"); + String[] array1 = education.stream() + .map(DictDataRespDTO::getLabel) + .toArray(String[]::new); + + + dropdownColumns.put(4, array1); + int[] dateColumns = {8, 9,10}; + // 导出空白模板到Excel - exportBlankTemplate(response, "staff_template.xlsx", "员工信息", headerMap, dropdownColumns, true); + exportBlankTemplate(response, "staff_template.xlsx", "员工信息", headerMap, dropdownColumns, dateColumns,true); } diff --git a/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java b/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java index 915ca5b8..e99b2f06 100644 --- a/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java +++ b/yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java @@ -10,6 +10,7 @@ import org.apache.poi.hssf.usermodel.DVConstraint; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.multipart.MultipartFile; @@ -88,17 +89,21 @@ public class ExcelUtils { } /** - * 导出空白模板Excel,并为指定列添加下拉框 + * 导出空白模板Excel,并为指定列添加下拉框和日期时间格式验证 * + * @param response HttpServletResponse * @param fileName 文件名 * @param sheetName 工作表名称 * @param headerMap 表头字段映射(列索引 -> 列名称) * @param dropdownColumns 带下拉框的列及选项(列索引 -> 下拉框选项数组) + * @param dateTimeColumns 需要验证日期时间格式的列(列索引) + * @param isMultiSelect 是否允许多选 * @throws IOException */ public static void exportBlankTemplate(HttpServletResponse response, String fileName, String sheetName, Map headerMap, Map dropdownColumns, + int[] dateTimeColumns, boolean isMultiSelect) throws IOException { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(sheetName); @@ -116,6 +121,13 @@ public class ExcelUtils { } } + // 添加日期时间格式验证到指定列 + if (dateTimeColumns != null) { + for (int columnIndex : dateTimeColumns) { + addDateTimeValidation(sheet, columnIndex); + } + } + // 设置响应头,指示浏览器下载文件 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()) + ".xlsx"); @@ -129,6 +141,25 @@ public class ExcelUtils { } } + /** + * 为指定列添加日期时间格式验证 + * + * @param sheet 工作表 + * @param columnIndex 需要验证日期时间格式的列索引 + */ + private static void addDateTimeValidation(Sheet sheet, int columnIndex) { + // 使用 Excel 的数据验证机制为指定列添加日期时间格式验证 + DataValidationHelper validationHelper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = validationHelper.createCustomConstraint( + "AND(ISNUMBER(" + CellReference.convertNumToColString(columnIndex) + "1), TEXT(" + CellReference.convertNumToColString(columnIndex) + "1, \"yyyy-mm-dd hh:mm:ss\")= " + + "\"yyyy-mm-dd\")"); + + CellRangeAddressList addressList = new CellRangeAddressList(1, sheet.getPhysicalNumberOfRows(), columnIndex, columnIndex); + DataValidation validation = validationHelper.createValidation(constraint, addressList); + + sheet.addValidationData(validation); + } + // 修改下拉框验证方法,支持多选功能 private static void addDropdownValidation(Sheet sheet, int column, String[] options, boolean isMultiSelect) {